symphony-metronome 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c8bd22339d29f682c28b8f752d1b1b883214148
4
+ data.tar.gz: 9752296a5eb0764658b171fb2040a6e5a81ad003
5
+ SHA512:
6
+ metadata.gz: 2aa30250dfa76c1fdeb832da45f7504d8e82d2f8c153c688c8ea71ecafd6f6fc504b6c816eacf8ce4c2797ff8f87a4858b64bb8ae4c4e4a411705b324d3f7aac
7
+ data.tar.gz: 95c92e6276ab7dfe9386bbcb355a7928e775befd6001b1c8ecd2cd21cd714aa8c1568bb6d295d01359bd5454ef94ba4de9bc2220b6730b1e0ca99c39439287f4
data/README.rdoc ADDED
@@ -0,0 +1,198 @@
1
+
2
+ = metronome
3
+
4
+ == Description
5
+
6
+ Metronome is an interval scheduler and task runner. It can be used
7
+ locally as a cron replacement, or as a network-wide job executor.
8
+
9
+ Events are stored via simple database rows, and optionally managed
10
+ via AMQP events. Interval/time values are expressed with intuitive
11
+ English phrases, ie.: 'at 2pm', or 'Starting in 20 minutes, run every 10
12
+ seconds and then finish in 2 days', or 'execute 12 times during the next
13
+ minute'.
14
+
15
+ It includes an executable under bin/:
16
+
17
+ metronome-exp::
18
+ A simple tester for trying out interval expression parsing.
19
+
20
+
21
+ == Synopsis
22
+
23
+ Here's an example of a cron clone:
24
+
25
+ require 'symphony/metronome'
26
+
27
+ Symphony.load_config
28
+
29
+ Symphony::Metronome.run do |opts, id|
30
+ Thread.new do
31
+ pid = fork { exec opts.delete('command') }
32
+ Process.waitpid( pid )
33
+ end
34
+ end
35
+
36
+
37
+ And here's a simplistic AMQP message broadcaster, using existing
38
+ Symphony connection information:
39
+
40
+ require 'symphony/metronome'
41
+
42
+ Symphony.load_config
43
+
44
+ Symphony::Metronome.run do |opts, id|
45
+ key = opts.delete( :routing_key ) or next
46
+ exchange = Symphony::Queue.amqp_exchange
47
+ exchange.publish( 'hi from Metronome!', routing_key: key )
48
+ end
49
+
50
+
51
+ == Adding Actions
52
+
53
+ There are two primary components to Metronome -- getting actions into
54
+ its database, and performing some task with those actions when the time
55
+ is appropriate.
56
+
57
+ By default, Metronome will start up an AMQP listener, attached to your
58
+ Symphony exchange, and wait for new scheduling messages. There are two
59
+ events it will take action on:
60
+
61
+ metronome.create::
62
+ Create a new scheduled event. The payload should be a hash. An
63
+ 'expression' key is required, that provides the interval description.
64
+ Anything additional is serialized to 'options', that are passed to the
65
+ block when the interval fires. You can populate it with anything
66
+ your task requires to execute.
67
+
68
+ metronome.delete::
69
+ The payload is the row ID of the action. Metronome removes it from
70
+ the database.
71
+
72
+
73
+ If you'd prefer not to use the AMQP listener, you can put actions into
74
+ Metronome using any database methodology you please. When the daemon
75
+ starts up or receives a HUP signal, it will re-read and schedule out
76
+ upcoming work.
77
+
78
+
79
+ == Options
80
+
81
+ Metronome uses
82
+ Configurability[https://rubygems.org/gems/configurability] to determine
83
+ behavior. The configuration is a YAML[http://www.yaml.org/] file. It
84
+ shares AMQP configuration with Symphony, and adds metronome specific
85
+ controls in the 'metronome' key.
86
+
87
+ metronome:
88
+ splay: 0
89
+ listen: true
90
+ db: sqlite:///tmp/metronome.db
91
+
92
+
93
+ === splay
94
+
95
+ Randomize all start times for actions by this many seconds on either
96
+ side of the original execution time. Defaults to none.
97
+
98
+ === listen
99
+
100
+ Start up an AMQP listener using Symphony configuration, for remote
101
+ administration of schedule events. Defaults to true.
102
+
103
+ === db
104
+
105
+ A {Sequel}[https://rubygems.org/gems/sequel] connection URI. Currently,
106
+ Metronome is tested under SQLite and PostgreSQL. Defaults to a SQLite
107
+ file at /tmp/metronome.db.
108
+
109
+
110
+ == Scheduling Examples
111
+
112
+ Note that Metronome is designed as an interval scheduler, not a
113
+ calendaring app. It doesn't have any concepts around phrases like "next
114
+ tuesday", or "the 3rd sunday after christmas". If that's what you're
115
+ after, check out the {chronic}[http://rubygems.org/gems/chronic]
116
+ library instead.
117
+
118
+ Here are a small set of example expressions. Feel free to use the
119
+ +metronome-exp+ utility to get a feel for what Metronome anticipates.
120
+
121
+ in 30.5 minutes
122
+ once an hour
123
+ every 15 minutes for 2 days
124
+ at 2014-05-01
125
+ at 2014-04-01 14:00:25
126
+ at 2pm
127
+ starting at 2pm once a day
128
+ start in 1 hour from now run every 5 seconds end at 11:15pm
129
+ every other hour
130
+ run every 7th minute for a day
131
+ once a day ending in 1 week
132
+ run once a minute for an hour starting in 6 days
133
+ 10 times a minute for 2 days
134
+ run 45 times every hour
135
+ 30 times per day
136
+ start at 2010-01-02 run 12 times and end on 2010-01-03
137
+ starting in an hour from now run 6 times a minute for 2 hours
138
+ beginning a day from now, run 30 times per minute and finish in 2 weeks
139
+ execute 12 times during the next 2 minutes
140
+ once a minute beginning in 5 minutes
141
+
142
+ In general, you can use reasonably intuitive phrasings. Capitalization,
143
+ whitespace, and punctuation doesn't matter. When describing numbers,
144
+ use digit/integer form instead of words, ie: '1 hour' instead of 'one
145
+ hour'.
146
+
147
+
148
+ == Installation
149
+
150
+ gem install symphony-metronome
151
+
152
+
153
+ == Contributing
154
+
155
+ You can check out the current development source with Mercurial via its
156
+ {project page}[http://bitbucket.org/mahlon/symphony-metronome].
157
+
158
+ After checking out the source, run:
159
+
160
+ $ rake
161
+
162
+ This task will run the tests/specs and generate the API documentation.
163
+
164
+ If you use {rvm}[http://rvm.io/], entering the project directory will
165
+ install any required development dependencies.
166
+
167
+
168
+ == License
169
+
170
+ Copyright (c) 2014, Mahlon E. Smith
171
+ All rights reserved.
172
+
173
+ Redistribution and use in source and binary forms, with or without
174
+ modification, are permitted provided that the following conditions are met:
175
+
176
+ * Redistributions of source code must retain the above copyright notice,
177
+ this list of conditions and the following disclaimer.
178
+
179
+ * Redistributions in binary form must reproduce the above copyright notice,
180
+ this list of conditions and the following disclaimer in the documentation
181
+ and/or other materials provided with the distribution.
182
+
183
+ * Neither the name of the author/s, nor the names of the project's
184
+ contributors may be used to endorse or promote products derived from this
185
+ software without specific prior written permission.
186
+
187
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
188
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
189
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
190
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
191
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
192
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
193
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
194
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
195
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
196
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
197
+
198
+
data/bin/metronome-exp ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ # vim: set nosta noet ts=4 sw=4:
3
+ #
4
+ # Simplistic interval expression tester.
5
+ #
6
+
7
+ require 'symphony/metronome'
8
+
9
+ loop do
10
+ begin
11
+ exp = gets.chomp
12
+ next if exp.empty?
13
+
14
+ begin
15
+ parsed = Symphony::Metronome::IntervalExpression.parse( exp )
16
+ puts "OK:"
17
+ puts "\tvalid | %s" % [ parsed.valid ]
18
+ puts "\trecurring | %s" % [ parsed.recurring ]
19
+ puts "\tstarting | %s" % [ parsed.starting ]
20
+ puts "\tinterval | %s" % [ parsed.recurring ? parsed.interval : '-' ]
21
+ puts "\tending | %s" %
22
+ [ parsed.ending ? parsed.ending : (parsed.recurring ? 'never' : '-') ]
23
+
24
+ rescue => err
25
+ puts "NOPE: (%s) %s" % [ exp, err.message ]
26
+ end
27
+
28
+ puts
29
+
30
+ rescue Interrupt
31
+ exit 0
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ # vim: set nosta noet ts=4 sw=4:
2
+
3
+ ### The initial Metronome DDL.
4
+ ###
5
+ class Initial < Sequel::Migration
6
+
7
+ def initialize( db )
8
+ @db = db
9
+ end
10
+
11
+ def up
12
+ create_table( :metronome ) do
13
+ case @db.adapter_scheme
14
+ when :postgres
15
+ serial :id, primary_key: true
16
+ timestamptz :created, null: false
17
+ text :expression, null: false
18
+ text :options
19
+ else
20
+ Integer :id, auto_increment: true, primary_key: true
21
+ DateTime :created, null: false
22
+ String :expression, null: false
23
+ String :options
24
+ end
25
+ end
26
+ end
27
+
28
+ def down
29
+ drop_table( :metronome )
30
+ end
31
+ end
32
+
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+ # vim: set nosta noet ts=4 sw=4:
3
+
4
+ require 'pathname'
5
+ require 'symphony' unless defined?( Symphony )
6
+
7
+ module Symphony::Metronome
8
+ extend Loggability,
9
+ Configurability
10
+
11
+ # Library version constant
12
+ VERSION = '0.1.0'
13
+
14
+ # Version-control revision constant
15
+ REVISION = %q$Revision: 9a5303d9fec6 $
16
+
17
+ # The name of the environment variable to check for config file overrides
18
+ CONFIG_ENV = 'METRONOME_CONFIG'
19
+
20
+ # The path to the default config file
21
+ DEFAULT_CONFIG_FILE = 'etc/config.yml'
22
+
23
+ # The data directory that contains migration files.
24
+ #
25
+ DATADIR = if ENV['METRONOME_DATADIR']
26
+ Pathname.new( ENV['METRONOME_DATADIR'] )
27
+ elsif Gem.datadir( 'symphony-metronome' )
28
+ Pathname.new( Gem.datadir('symphony-metronome') )
29
+ else
30
+ Pathname.new( __FILE__ ).dirname.parent.parent + 'data/symphony-metronome'
31
+ end
32
+
33
+
34
+ # Loggability API -- use symphony's logger
35
+ log_to :symphony
36
+
37
+ # Configurability API
38
+ config_key :metronome
39
+
40
+
41
+ ### Get the loaded config (a Configurability::Config object)
42
+ def self::config
43
+ Configurability.loaded_config
44
+ end
45
+
46
+
47
+ ### Load the specified +config_file+, install the config in all objects with
48
+ ### Configurability, and call any callbacks registered via #after_configure.
49
+ def self::load_config( config_file=nil, defaults=nil )
50
+ config_file ||= ENV[ CONFIG_ENV ] || DEFAULT_CONFIG_FILE
51
+ defaults ||= Configurability.gather_defaults
52
+ config = Configurability::Config.load( config_file, defaults )
53
+ config.install
54
+ end
55
+
56
+
57
+ # The generic parse exception class.
58
+ class TimeParseError < ArgumentError; end
59
+
60
+ require 'symphony/metronome/scheduler'
61
+ require 'symphony/metronome/intervalexpression'
62
+ require 'symphony/metronome/scheduledevent'
63
+ require 'symphony/tasks/scheduletask'
64
+
65
+
66
+ ###############
67
+ module_function
68
+ ###############
69
+
70
+ ### Convenience method for running the scheduler.
71
+ ###
72
+ def run( &block )
73
+ raise LocalJumpError, "No block provided." unless block_given?
74
+ return Symphony::Metronome::Scheduler.run( &block )
75
+ end
76
+
77
+
78
+ end # Symphony::Metronome
79
+
@@ -0,0 +1,2518 @@
1
+
2
+ # vim: set noet nosta sw=4 ts=4 ft=ragel :
3
+
4
+
5
+
6
+
7
+
8
+ require 'symphony' unless defined?( Symphony )
9
+ require 'symphony/metronome'
10
+ require 'symphony/metronome/mixins'
11
+
12
+ using Symphony::Metronome::TimeRefinements
13
+
14
+
15
+ ### Parse natural English expressions of times and intervals.
16
+ ###
17
+ ### in 30 minutes
18
+ ### once an hour
19
+ ### every 15 minutes for 2 days
20
+ ### at 2014-05-01
21
+ ### at 2014-04-01 14:00:25
22
+ ### at 2pm
23
+ ### starting at 2pm once a day
24
+ ### start in 1 hour from now run every 5 seconds end at 11:15pm
25
+ ### every other hour
26
+ ### once a day ending in 1 week
27
+ ### run once a minute for an hour starting in 6 days
28
+ ### 10 times a minute for 2 days
29
+ ### run 45 times every hour
30
+ ### 30 times per day
31
+ ### start at 2010-01-02 run 12 times and end on 2010-01-03
32
+ ### starting in an hour from now run 6 times a minute for 2 hours
33
+ ### beginning a day from now, run 30 times per minute and finish in 2 weeks
34
+ ### execute 12 times during the next 2 minutes
35
+ ###
36
+ class Symphony::Metronome::IntervalExpression
37
+ include Comparable,
38
+ Symphony::Metronome::TimeFunctions
39
+ extend Loggability
40
+
41
+ log_to :symphony
42
+
43
+ # Ragel accessors are injected as class methods/variables for some reason.
44
+
45
+ class << self
46
+ attr_accessor :_interval_expression_key_offsets
47
+ private :_interval_expression_key_offsets, :_interval_expression_key_offsets=
48
+ end
49
+ self._interval_expression_key_offsets = [
50
+ 0, 0, 10, 15, 19, 20, 21, 22,
51
+ 23, 46, 50, 53, 57, 62, 63, 66,
52
+ 75, 76, 77, 87, 88, 89, 90, 91,
53
+ 96, 114, 121, 127, 130, 134, 136, 138,
54
+ 139, 141, 143, 154, 156, 157, 159, 161,
55
+ 170, 171, 172, 173, 174, 175, 176, 181,
56
+ 199, 206, 212, 215, 219, 221, 223, 224,
57
+ 226, 228, 233, 235, 236, 238, 240, 242,
58
+ 244, 247, 251, 255, 256, 259, 268, 269,
59
+ 270, 271, 272, 273, 275, 277, 278, 279,
60
+ 280, 281, 282, 283, 284, 285, 286, 287,
61
+ 288, 289, 290, 291, 292, 293, 294, 295,
62
+ 296, 301, 302, 307, 311, 316, 322, 324,
63
+ 326, 328, 329, 336, 340, 345, 356, 358,
64
+ 363, 374, 381, 389, 396, 404, 412, 421,
65
+ 430, 438, 447, 457, 468, 476, 485, 496,
66
+ 506, 517, 518, 529, 540, 545, 548, 553,
67
+ 558, 563, 565, 566, 567, 570, 587, 595,
68
+ 603, 611, 619, 623, 624, 625, 626, 627,
69
+ 629, 633, 634, 635, 638, 639, 640, 641,
70
+ 642, 643, 645, 646, 647, 648, 649, 650,
71
+ 651, 652, 653, 654, 655, 656, 657, 659,
72
+ 661, 664, 668, 672, 673, 676, 685, 686,
73
+ 687, 688, 689, 690, 692, 694, 695, 696,
74
+ 697, 698, 699, 700, 701, 702, 703, 704,
75
+ 705, 706, 707, 708, 709, 710, 711, 712,
76
+ 713, 718, 719, 724, 728, 733, 739, 741,
77
+ 743, 745, 746, 753, 757, 762, 773, 775,
78
+ 780, 791, 798, 806, 813, 821, 829, 838,
79
+ 847, 855, 864, 874, 885, 893, 902, 913,
80
+ 923, 934, 935, 946, 957, 962, 965, 970,
81
+ 975, 980, 982, 983, 984, 987, 1004, 1012,
82
+ 1020, 1028, 1036, 1040, 1041, 1042, 1043, 1044,
83
+ 1046, 1047, 1048, 1051, 1055, 1056, 1057, 1058,
84
+ 1059, 1060, 1061, 1066, 1084, 1091, 1097, 1100,
85
+ 1104, 1106, 1108, 1109, 1111, 1113, 1120, 1122,
86
+ 1123, 1125, 1127, 1132, 1133, 1134, 1135, 1136,
87
+ 1141, 1159, 1166, 1172, 1175, 1179, 1181, 1183,
88
+ 1184, 1186, 1188, 1193, 1195, 1196, 1198, 1200,
89
+ 1202, 1204, 1207, 1211, 1215, 1216, 1219, 1228,
90
+ 1229, 1230, 1231, 1232, 1233, 1235, 1237, 1238,
91
+ 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
92
+ 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
93
+ 1255, 1256, 1261, 1262, 1267, 1271, 1276, 1282,
94
+ 1284, 1286, 1288, 1289, 1296, 1300, 1305, 1316,
95
+ 1318, 1323, 1334, 1341, 1349, 1356, 1364, 1372,
96
+ 1381, 1390, 1398, 1407, 1417, 1428, 1436, 1445,
97
+ 1456, 1466, 1477, 1478, 1489, 1500, 1505, 1508,
98
+ 1513, 1518, 1523, 1525, 1526, 1527, 1530, 1547,
99
+ 1555, 1563, 1571, 1579, 1583, 1584, 1585, 1586,
100
+ 1587, 1589, 1590, 1591, 1594, 1598, 1599, 1600,
101
+ 1601, 1602, 1604, 1606, 1609, 1613, 1617, 1618,
102
+ 1621, 1630, 1631, 1632, 1633, 1634, 1635, 1637,
103
+ 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646,
104
+ 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
105
+ 1655, 1656, 1657, 1658, 1663, 1664, 1669, 1673,
106
+ 1678, 1684, 1686, 1688, 1690, 1691, 1698, 1702,
107
+ 1707, 1718, 1720, 1725, 1736, 1743, 1751, 1758,
108
+ 1766, 1774, 1783, 1792, 1800, 1809, 1819, 1830,
109
+ 1838, 1847, 1858, 1868, 1879, 1880, 1891, 1902,
110
+ 1907, 1910, 1915, 1920, 1925, 1927, 1928, 1929,
111
+ 1932, 1949, 1957, 1965, 1973, 1981, 1985, 1986,
112
+ 1987, 1988, 1989, 1991, 1995, 1996, 1997, 2000,
113
+ 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009,
114
+ 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018,
115
+ 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2027,
116
+ 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036,
117
+ 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044,
118
+ 2045, 2046, 2047, 2048, 2049, 2057, 2059, 2064,
119
+ 2072, 2079, 2087, 2096, 2104, 2112, 2113, 2121,
120
+ 2125, 2127, 2130, 2131, 2132, 2135, 2152, 2153,
121
+ 2154, 2155, 2156, 2157, 2158, 2159, 2161, 2162,
122
+ 2163, 2166, 2184, 2185, 2186, 2188, 2189, 2192,
123
+ 2197, 2202, 2207, 2209, 2210, 2212, 2214, 2215,
124
+ 2217, 2219, 2231, 2233, 2234, 2236, 2238, 2240,
125
+ 2242, 2244, 2246, 2248, 2249, 2250, 2251, 2252,
126
+ 2253, 2258, 2276, 2283, 2289, 2292, 2296, 2298,
127
+ 2300, 2301, 2303, 2305, 2308, 2319, 2324, 2328,
128
+ 2329, 2330, 2331, 2332, 2354, 2358, 2361, 2365,
129
+ 2370, 2371, 2374, 2383, 2384, 2385, 2386, 2387,
130
+ 2388, 2390, 2392, 2393, 2394, 2395, 2396, 2397,
131
+ 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405,
132
+ 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2420,
133
+ 2422, 2427, 2435, 2442, 2450, 2459, 2467, 2475,
134
+ 2476, 2484, 2488, 2490, 2493, 2494, 2495, 2498,
135
+ 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522,
136
+ 2524, 2525, 2526, 2529, 2547, 2548, 2549, 2551,
137
+ 2557, 2562, 2564, 2566, 2570, 2581, 2582, 2585,
138
+ 2590, 2595, 2600, 2602, 2603, 2605, 2607, 2608,
139
+ 2610, 2612, 2623, 2625, 2626, 2628, 2630, 2632,
140
+ 2634, 2636, 2638, 2640, 2641, 2644, 2645, 2646,
141
+ 2650, 2660, 2662, 2663, 2664, 2668, 2669, 2670,
142
+ 2673, 2674, 2675, 2677, 2679, 2682, 2685, 2689,
143
+ 2693, 2694, 2697, 2706, 2707, 2708, 2712, 2715,
144
+ 2716, 2717, 2718, 2720, 2722, 2723, 2724, 2725,
145
+ 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733,
146
+ 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741,
147
+ 2746, 2747, 2752, 2756, 2761, 2767, 2769, 2771,
148
+ 2773, 2774, 2781, 2785, 2790, 2801, 2803, 2808,
149
+ 2819, 2826, 2834, 2841, 2849, 2857, 2866, 2875,
150
+ 2883, 2892, 2902, 2913, 2921, 2930, 2941, 2951,
151
+ 2962, 2963, 2974, 2985, 2990, 2993, 2998, 3003,
152
+ 3008, 3010, 3011, 3012, 3015, 3032, 3040, 3048,
153
+ 3056, 3064, 3068, 3069, 3070, 3071, 3072, 3074,
154
+ 3075, 3076, 3079, 3083, 3086, 3087, 3088, 3092,
155
+ 3102, 3104, 3105, 3106, 3110, 3111, 3112, 3115,
156
+ 3116, 3117, 3118, 3119, 3120, 3121, 3124, 3128,
157
+ 3131, 3135, 3138, 3139, 3139, 3140, 3140, 3143,
158
+ 3147, 3150, 3153, 3157, 3160, 3161, 3161, 3162,
159
+ 3162, 3165, 3169, 3172, 3175, 3178, 3182, 3185,
160
+ 3188, 3192, 3195, 3198, 3202
161
+ ]
162
+
163
+ class << self
164
+ attr_accessor :_interval_expression_trans_keys
165
+ private :_interval_expression_trans_keys, :_interval_expression_trans_keys=
166
+ end
167
+ self._interval_expression_trans_keys = [
168
+ 97, 98, 101, 105, 111, 112, 114, 115,
169
+ 48, 57, 32, 9, 13, 48, 57, 32,
170
+ 116, 9, 13, 105, 109, 101, 115, 32,
171
+ 48, 49, 50, 51, 97, 98, 99, 100,
172
+ 101, 102, 104, 109, 111, 112, 115, 117,
173
+ 119, 121, 9, 13, 52, 57, 49, 116,
174
+ 48, 57, 49, 48, 57, 49, 115, 48,
175
+ 57, 49, 115, 116, 48, 57, 116, 32,
176
+ 9, 13, 32, 100, 104, 109, 115, 119,
177
+ 121, 9, 13, 97, 121, 32, 98, 99,
178
+ 100, 101, 102, 115, 117, 9, 13, 101,
179
+ 103, 105, 110, 32, 105, 110, 9, 13,
180
+ 32, 48, 49, 50, 51, 97, 100, 104,
181
+ 105, 109, 111, 115, 119, 121, 9, 13,
182
+ 52, 57, 49, 58, 97, 112, 116, 48,
183
+ 57, 49, 58, 97, 112, 48, 57, 49,
184
+ 48, 57, 45, 49, 48, 57, 48, 57,
185
+ 48, 57, 45, 48, 57, 48, 57, 32,
186
+ 99, 100, 101, 102, 115, 117, 9, 13,
187
+ 48, 57, 48, 57, 58, 48, 57, 48,
188
+ 57, 32, 99, 100, 101, 102, 115, 117,
189
+ 9, 13, 111, 109, 112, 108, 101, 116,
190
+ 32, 101, 105, 9, 13, 32, 48, 49,
191
+ 50, 51, 97, 100, 104, 105, 109, 111,
192
+ 115, 119, 121, 9, 13, 52, 57, 49,
193
+ 58, 97, 112, 116, 48, 57, 49, 58,
194
+ 97, 112, 48, 57, 49, 48, 57, 45,
195
+ 49, 48, 57, 48, 57, 48, 57, 45,
196
+ 48, 57, 48, 57, 32, 9, 13, 48,
197
+ 57, 48, 57, 58, 48, 57, 48, 57,
198
+ 48, 57, 48, 57, 49, 48, 57, 49,
199
+ 115, 48, 57, 49, 116, 48, 57, 104,
200
+ 32, 9, 13, 32, 100, 104, 109, 115,
201
+ 119, 121, 9, 13, 97, 121, 111, 117,
202
+ 114, 105, 111, 108, 110, 108, 105, 115,
203
+ 101, 99, 111, 110, 100, 117, 116, 101,
204
+ 110, 116, 104, 101, 101, 107, 101, 97,
205
+ 49, 115, 116, 48, 57, 116, 45, 49,
206
+ 115, 48, 57, 49, 115, 48, 57, 45,
207
+ 49, 116, 48, 57, 45, 49, 115, 116,
208
+ 48, 57, 48, 57, 48, 57, 97, 112,
209
+ 109, 49, 58, 97, 112, 115, 48, 57,
210
+ 49, 116, 48, 57, 49, 115, 116, 48,
211
+ 57, 32, 46, 49, 58, 97, 112, 115,
212
+ 9, 13, 48, 57, 48, 57, 32, 9,
213
+ 13, 48, 57, 32, 46, 49, 58, 97,
214
+ 112, 116, 9, 13, 48, 57, 32, 46,
215
+ 49, 9, 13, 48, 57, 32, 45, 46,
216
+ 49, 9, 13, 48, 57, 32, 46, 49,
217
+ 9, 13, 48, 57, 32, 46, 49, 115,
218
+ 9, 13, 48, 57, 32, 46, 49, 116,
219
+ 9, 13, 48, 57, 32, 46, 49, 115,
220
+ 116, 9, 13, 48, 57, 32, 45, 46,
221
+ 49, 115, 9, 13, 48, 57, 32, 46,
222
+ 49, 115, 9, 13, 48, 57, 32, 45,
223
+ 46, 49, 116, 9, 13, 48, 57, 32,
224
+ 45, 46, 49, 115, 116, 9, 13, 48,
225
+ 57, 32, 46, 49, 58, 97, 112, 116,
226
+ 9, 13, 48, 57, 32, 46, 49, 116,
227
+ 9, 13, 48, 57, 32, 46, 49, 115,
228
+ 116, 9, 13, 48, 57, 32, 46, 49,
229
+ 58, 97, 110, 112, 9, 13, 48, 57,
230
+ 32, 46, 49, 58, 97, 112, 9, 13,
231
+ 48, 57, 32, 46, 49, 58, 97, 112,
232
+ 115, 9, 13, 48, 57, 100, 32, 46,
233
+ 49, 58, 97, 112, 114, 9, 13, 48,
234
+ 57, 32, 46, 49, 58, 97, 112, 116,
235
+ 9, 13, 48, 57, 32, 110, 116, 9,
236
+ 13, 32, 9, 13, 32, 9, 13, 48,
237
+ 57, 58, 97, 112, 48, 57, 58, 97,
238
+ 112, 48, 57, 48, 57, 45, 110, 32,
239
+ 9, 13, 32, 48, 49, 50, 51, 97,
240
+ 100, 104, 109, 111, 115, 119, 121, 9,
241
+ 13, 52, 57, 32, 46, 49, 115, 9,
242
+ 13, 48, 57, 32, 46, 49, 116, 9,
243
+ 13, 48, 57, 32, 46, 49, 110, 9,
244
+ 13, 48, 57, 32, 46, 49, 114, 9,
245
+ 13, 48, 57, 32, 110, 9, 13, 116,
246
+ 104, 101, 114, 110, 116, 32, 105, 9,
247
+ 13, 110, 103, 32, 9, 13, 117, 114,
248
+ 105, 110, 100, 105, 111, 110, 105, 115,
249
+ 104, 114, 116, 111, 112, 110, 116, 105,
250
+ 108, 48, 57, 48, 57, 49, 48, 57,
251
+ 49, 115, 48, 57, 49, 116, 48, 57,
252
+ 104, 32, 9, 13, 32, 100, 104, 109,
253
+ 115, 119, 121, 9, 13, 97, 121, 111,
254
+ 117, 114, 105, 111, 108, 110, 108, 105,
255
+ 115, 101, 99, 111, 110, 100, 117, 116,
256
+ 101, 110, 116, 104, 101, 101, 107, 101,
257
+ 97, 49, 115, 116, 48, 57, 116, 45,
258
+ 49, 115, 48, 57, 49, 115, 48, 57,
259
+ 45, 49, 116, 48, 57, 45, 49, 115,
260
+ 116, 48, 57, 48, 57, 48, 57, 97,
261
+ 112, 109, 49, 58, 97, 112, 115, 48,
262
+ 57, 49, 116, 48, 57, 49, 115, 116,
263
+ 48, 57, 32, 46, 49, 58, 97, 112,
264
+ 115, 9, 13, 48, 57, 48, 57, 32,
265
+ 9, 13, 48, 57, 32, 46, 49, 58,
266
+ 97, 112, 116, 9, 13, 48, 57, 32,
267
+ 46, 49, 9, 13, 48, 57, 32, 45,
268
+ 46, 49, 9, 13, 48, 57, 32, 46,
269
+ 49, 9, 13, 48, 57, 32, 46, 49,
270
+ 115, 9, 13, 48, 57, 32, 46, 49,
271
+ 116, 9, 13, 48, 57, 32, 46, 49,
272
+ 115, 116, 9, 13, 48, 57, 32, 45,
273
+ 46, 49, 115, 9, 13, 48, 57, 32,
274
+ 46, 49, 115, 9, 13, 48, 57, 32,
275
+ 45, 46, 49, 116, 9, 13, 48, 57,
276
+ 32, 45, 46, 49, 115, 116, 9, 13,
277
+ 48, 57, 32, 46, 49, 58, 97, 112,
278
+ 116, 9, 13, 48, 57, 32, 46, 49,
279
+ 116, 9, 13, 48, 57, 32, 46, 49,
280
+ 115, 116, 9, 13, 48, 57, 32, 46,
281
+ 49, 58, 97, 110, 112, 9, 13, 48,
282
+ 57, 32, 46, 49, 58, 97, 112, 9,
283
+ 13, 48, 57, 32, 46, 49, 58, 97,
284
+ 112, 115, 9, 13, 48, 57, 100, 32,
285
+ 46, 49, 58, 97, 112, 114, 9, 13,
286
+ 48, 57, 32, 46, 49, 58, 97, 112,
287
+ 116, 9, 13, 48, 57, 32, 110, 116,
288
+ 9, 13, 32, 9, 13, 32, 9, 13,
289
+ 48, 57, 58, 97, 112, 48, 57, 58,
290
+ 97, 112, 48, 57, 48, 57, 45, 110,
291
+ 32, 9, 13, 32, 48, 49, 50, 51,
292
+ 97, 100, 104, 109, 111, 115, 119, 121,
293
+ 9, 13, 52, 57, 32, 46, 49, 115,
294
+ 9, 13, 48, 57, 32, 46, 49, 116,
295
+ 9, 13, 48, 57, 32, 46, 49, 110,
296
+ 9, 13, 48, 57, 32, 46, 49, 114,
297
+ 9, 13, 48, 57, 32, 110, 9, 13,
298
+ 116, 104, 101, 114, 110, 116, 110, 103,
299
+ 32, 9, 13, 32, 105, 9, 13, 111,
300
+ 109, 112, 108, 101, 116, 32, 101, 105,
301
+ 9, 13, 32, 48, 49, 50, 51, 97,
302
+ 100, 104, 105, 109, 111, 115, 119, 121,
303
+ 9, 13, 52, 57, 49, 58, 97, 112,
304
+ 116, 48, 57, 49, 58, 97, 112, 48,
305
+ 57, 49, 48, 57, 45, 49, 48, 57,
306
+ 48, 57, 48, 57, 45, 48, 57, 48,
307
+ 57, 32, 98, 115, 9, 13, 48, 57,
308
+ 48, 57, 58, 48, 57, 48, 57, 32,
309
+ 98, 115, 9, 13, 101, 103, 105, 110,
310
+ 32, 105, 110, 9, 13, 32, 48, 49,
311
+ 50, 51, 97, 100, 104, 105, 109, 111,
312
+ 115, 119, 121, 9, 13, 52, 57, 49,
313
+ 58, 97, 112, 116, 48, 57, 49, 58,
314
+ 97, 112, 48, 57, 49, 48, 57, 45,
315
+ 49, 48, 57, 48, 57, 48, 57, 45,
316
+ 48, 57, 48, 57, 32, 9, 13, 48,
317
+ 57, 48, 57, 58, 48, 57, 48, 57,
318
+ 48, 57, 48, 57, 49, 48, 57, 49,
319
+ 115, 48, 57, 49, 116, 48, 57, 104,
320
+ 32, 9, 13, 32, 100, 104, 109, 115,
321
+ 119, 121, 9, 13, 97, 121, 111, 117,
322
+ 114, 105, 111, 108, 110, 108, 105, 115,
323
+ 101, 99, 111, 110, 100, 117, 116, 101,
324
+ 110, 116, 104, 101, 101, 107, 101, 97,
325
+ 49, 115, 116, 48, 57, 116, 45, 49,
326
+ 115, 48, 57, 49, 115, 48, 57, 45,
327
+ 49, 116, 48, 57, 45, 49, 115, 116,
328
+ 48, 57, 48, 57, 48, 57, 97, 112,
329
+ 109, 49, 58, 97, 112, 115, 48, 57,
330
+ 49, 116, 48, 57, 49, 115, 116, 48,
331
+ 57, 32, 46, 49, 58, 97, 112, 115,
332
+ 9, 13, 48, 57, 48, 57, 32, 9,
333
+ 13, 48, 57, 32, 46, 49, 58, 97,
334
+ 112, 116, 9, 13, 48, 57, 32, 46,
335
+ 49, 9, 13, 48, 57, 32, 45, 46,
336
+ 49, 9, 13, 48, 57, 32, 46, 49,
337
+ 9, 13, 48, 57, 32, 46, 49, 115,
338
+ 9, 13, 48, 57, 32, 46, 49, 116,
339
+ 9, 13, 48, 57, 32, 46, 49, 115,
340
+ 116, 9, 13, 48, 57, 32, 45, 46,
341
+ 49, 115, 9, 13, 48, 57, 32, 46,
342
+ 49, 115, 9, 13, 48, 57, 32, 45,
343
+ 46, 49, 116, 9, 13, 48, 57, 32,
344
+ 45, 46, 49, 115, 116, 9, 13, 48,
345
+ 57, 32, 46, 49, 58, 97, 112, 116,
346
+ 9, 13, 48, 57, 32, 46, 49, 116,
347
+ 9, 13, 48, 57, 32, 46, 49, 115,
348
+ 116, 9, 13, 48, 57, 32, 46, 49,
349
+ 58, 97, 110, 112, 9, 13, 48, 57,
350
+ 32, 46, 49, 58, 97, 112, 9, 13,
351
+ 48, 57, 32, 46, 49, 58, 97, 112,
352
+ 115, 9, 13, 48, 57, 100, 32, 46,
353
+ 49, 58, 97, 112, 114, 9, 13, 48,
354
+ 57, 32, 46, 49, 58, 97, 112, 116,
355
+ 9, 13, 48, 57, 32, 110, 116, 9,
356
+ 13, 32, 9, 13, 32, 9, 13, 48,
357
+ 57, 58, 97, 112, 48, 57, 58, 97,
358
+ 112, 48, 57, 48, 57, 45, 110, 32,
359
+ 9, 13, 32, 48, 49, 50, 51, 97,
360
+ 100, 104, 109, 111, 115, 119, 121, 9,
361
+ 13, 52, 57, 32, 46, 49, 115, 9,
362
+ 13, 48, 57, 32, 46, 49, 116, 9,
363
+ 13, 48, 57, 32, 46, 49, 110, 9,
364
+ 13, 48, 57, 32, 46, 49, 114, 9,
365
+ 13, 48, 57, 32, 110, 9, 13, 116,
366
+ 104, 101, 114, 110, 116, 110, 103, 32,
367
+ 9, 13, 32, 105, 9, 13, 116, 97,
368
+ 114, 116, 48, 57, 48, 57, 49, 48,
369
+ 57, 49, 115, 48, 57, 49, 116, 48,
370
+ 57, 104, 32, 9, 13, 32, 100, 104,
371
+ 109, 115, 119, 121, 9, 13, 97, 121,
372
+ 111, 117, 114, 105, 111, 108, 110, 108,
373
+ 105, 115, 101, 99, 111, 110, 100, 117,
374
+ 116, 101, 110, 116, 104, 101, 101, 107,
375
+ 101, 97, 49, 115, 116, 48, 57, 116,
376
+ 45, 49, 115, 48, 57, 49, 115, 48,
377
+ 57, 45, 49, 116, 48, 57, 45, 49,
378
+ 115, 116, 48, 57, 48, 57, 48, 57,
379
+ 97, 112, 109, 49, 58, 97, 112, 115,
380
+ 48, 57, 49, 116, 48, 57, 49, 115,
381
+ 116, 48, 57, 32, 46, 49, 58, 97,
382
+ 112, 115, 9, 13, 48, 57, 48, 57,
383
+ 32, 9, 13, 48, 57, 32, 46, 49,
384
+ 58, 97, 112, 116, 9, 13, 48, 57,
385
+ 32, 46, 49, 9, 13, 48, 57, 32,
386
+ 45, 46, 49, 9, 13, 48, 57, 32,
387
+ 46, 49, 9, 13, 48, 57, 32, 46,
388
+ 49, 115, 9, 13, 48, 57, 32, 46,
389
+ 49, 116, 9, 13, 48, 57, 32, 46,
390
+ 49, 115, 116, 9, 13, 48, 57, 32,
391
+ 45, 46, 49, 115, 9, 13, 48, 57,
392
+ 32, 46, 49, 115, 9, 13, 48, 57,
393
+ 32, 45, 46, 49, 116, 9, 13, 48,
394
+ 57, 32, 45, 46, 49, 115, 116, 9,
395
+ 13, 48, 57, 32, 46, 49, 58, 97,
396
+ 112, 116, 9, 13, 48, 57, 32, 46,
397
+ 49, 116, 9, 13, 48, 57, 32, 46,
398
+ 49, 115, 116, 9, 13, 48, 57, 32,
399
+ 46, 49, 58, 97, 110, 112, 9, 13,
400
+ 48, 57, 32, 46, 49, 58, 97, 112,
401
+ 9, 13, 48, 57, 32, 46, 49, 58,
402
+ 97, 112, 115, 9, 13, 48, 57, 100,
403
+ 32, 46, 49, 58, 97, 112, 114, 9,
404
+ 13, 48, 57, 32, 46, 49, 58, 97,
405
+ 112, 116, 9, 13, 48, 57, 32, 110,
406
+ 116, 9, 13, 32, 9, 13, 32, 9,
407
+ 13, 48, 57, 58, 97, 112, 48, 57,
408
+ 58, 97, 112, 48, 57, 48, 57, 45,
409
+ 110, 32, 9, 13, 32, 48, 49, 50,
410
+ 51, 97, 100, 104, 109, 111, 115, 119,
411
+ 121, 9, 13, 52, 57, 32, 46, 49,
412
+ 115, 9, 13, 48, 57, 32, 46, 49,
413
+ 116, 9, 13, 48, 57, 32, 46, 49,
414
+ 110, 9, 13, 48, 57, 32, 46, 49,
415
+ 114, 9, 13, 48, 57, 32, 110, 9,
416
+ 13, 116, 104, 101, 114, 110, 116, 32,
417
+ 105, 9, 13, 110, 103, 32, 9, 13,
418
+ 117, 114, 105, 110, 100, 105, 111, 110,
419
+ 105, 115, 104, 114, 116, 97, 111, 114,
420
+ 116, 112, 110, 116, 105, 108, 111, 117,
421
+ 114, 105, 111, 108, 110, 108, 105, 115,
422
+ 101, 99, 111, 110, 100, 117, 116, 101,
423
+ 110, 116, 104, 101, 101, 107, 101, 97,
424
+ 104, 32, 46, 49, 115, 9, 13, 48,
425
+ 57, 48, 57, 32, 9, 13, 48, 57,
426
+ 32, 46, 49, 116, 9, 13, 48, 57,
427
+ 32, 46, 49, 9, 13, 48, 57, 32,
428
+ 46, 49, 115, 9, 13, 48, 57, 32,
429
+ 46, 49, 115, 116, 9, 13, 48, 57,
430
+ 32, 46, 49, 116, 9, 13, 48, 57,
431
+ 32, 46, 49, 110, 9, 13, 48, 57,
432
+ 100, 32, 46, 49, 114, 9, 13, 48,
433
+ 57, 32, 110, 9, 13, 97, 117, 97,
434
+ 110, 118, 99, 104, 32, 9, 13, 32,
435
+ 48, 49, 50, 51, 97, 100, 104, 109,
436
+ 111, 115, 119, 121, 9, 13, 52, 57,
437
+ 116, 104, 101, 114, 101, 114, 121, 110,
438
+ 116, 99, 101, 32, 9, 13, 32, 48,
439
+ 49, 50, 51, 97, 100, 104, 109, 111,
440
+ 112, 115, 119, 121, 9, 13, 52, 57,
441
+ 101, 114, 101, 116, 116, 32, 9, 13,
442
+ 32, 9, 13, 48, 57, 58, 97, 112,
443
+ 48, 57, 58, 97, 112, 48, 57, 48,
444
+ 57, 45, 48, 57, 48, 57, 45, 48,
445
+ 57, 48, 57, 32, 98, 99, 100, 101,
446
+ 102, 115, 117, 9, 13, 48, 57, 48,
447
+ 57, 58, 48, 57, 48, 57, 48, 57,
448
+ 48, 57, 48, 57, 48, 57, 97, 112,
449
+ 109, 101, 103, 105, 110, 32, 105, 110,
450
+ 9, 13, 32, 48, 49, 50, 51, 97,
451
+ 100, 104, 105, 109, 111, 115, 119, 121,
452
+ 9, 13, 52, 57, 49, 58, 97, 112,
453
+ 116, 48, 57, 49, 58, 97, 112, 48,
454
+ 57, 49, 48, 57, 45, 49, 48, 57,
455
+ 48, 57, 48, 57, 45, 48, 57, 48,
456
+ 57, 32, 9, 13, 32, 97, 101, 105,
457
+ 111, 112, 114, 9, 13, 48, 57, 32,
458
+ 9, 13, 48, 57, 32, 116, 9, 13,
459
+ 105, 109, 101, 115, 32, 48, 49, 50,
460
+ 51, 97, 99, 100, 101, 102, 104, 109,
461
+ 111, 112, 115, 117, 119, 121, 9, 13,
462
+ 52, 57, 49, 116, 48, 57, 49, 48,
463
+ 57, 49, 115, 48, 57, 49, 115, 116,
464
+ 48, 57, 116, 32, 9, 13, 32, 100,
465
+ 104, 109, 115, 119, 121, 9, 13, 97,
466
+ 121, 111, 117, 114, 105, 111, 108, 110,
467
+ 108, 105, 115, 101, 99, 111, 110, 100,
468
+ 117, 116, 101, 110, 116, 104, 101, 101,
469
+ 107, 101, 97, 104, 32, 46, 49, 115,
470
+ 9, 13, 48, 57, 48, 57, 32, 9,
471
+ 13, 48, 57, 32, 46, 49, 116, 9,
472
+ 13, 48, 57, 32, 46, 49, 9, 13,
473
+ 48, 57, 32, 46, 49, 115, 9, 13,
474
+ 48, 57, 32, 46, 49, 115, 116, 9,
475
+ 13, 48, 57, 32, 46, 49, 116, 9,
476
+ 13, 48, 57, 32, 46, 49, 110, 9,
477
+ 13, 48, 57, 100, 32, 46, 49, 114,
478
+ 9, 13, 48, 57, 32, 110, 9, 13,
479
+ 97, 117, 97, 110, 118, 99, 104, 32,
480
+ 9, 13, 32, 48, 49, 50, 51, 97,
481
+ 100, 104, 109, 111, 115, 119, 121, 9,
482
+ 13, 52, 57, 116, 104, 101, 114, 101,
483
+ 114, 121, 110, 116, 99, 101, 32, 9,
484
+ 13, 32, 48, 49, 50, 51, 97, 100,
485
+ 104, 109, 111, 112, 115, 119, 121, 9,
486
+ 13, 52, 57, 101, 114, 101, 116, 32,
487
+ 58, 9, 13, 48, 57, 32, 9, 13,
488
+ 48, 57, 48, 57, 48, 57, 32, 58,
489
+ 9, 13, 32, 97, 101, 105, 111, 112,
490
+ 114, 9, 13, 48, 57, 116, 32, 9,
491
+ 13, 32, 9, 13, 48, 57, 58, 97,
492
+ 112, 48, 57, 58, 97, 112, 48, 57,
493
+ 48, 57, 45, 48, 57, 48, 57, 45,
494
+ 48, 57, 48, 57, 32, 99, 100, 101,
495
+ 102, 115, 117, 9, 13, 48, 57, 48,
496
+ 57, 58, 48, 57, 48, 57, 48, 57,
497
+ 48, 57, 48, 57, 48, 57, 97, 112,
498
+ 109, 97, 118, 120, 101, 99, 32, 117,
499
+ 9, 13, 32, 97, 101, 105, 111, 112,
500
+ 9, 13, 48, 57, 97, 118, 110, 110,
501
+ 32, 99, 9, 13, 116, 101, 32, 9,
502
+ 13, 117, 110, 48, 57, 48, 57, 32,
503
+ 9, 13, 49, 48, 57, 49, 115, 48,
504
+ 57, 49, 116, 48, 57, 104, 32, 9,
505
+ 13, 32, 100, 104, 109, 115, 119, 121,
506
+ 9, 13, 97, 121, 32, 115, 9, 13,
507
+ 32, 9, 13, 111, 117, 114, 105, 111,
508
+ 108, 110, 108, 105, 115, 101, 99, 111,
509
+ 110, 100, 117, 116, 101, 110, 116, 104,
510
+ 101, 101, 107, 101, 97, 49, 115, 116,
511
+ 48, 57, 116, 45, 49, 115, 48, 57,
512
+ 49, 115, 48, 57, 45, 49, 116, 48,
513
+ 57, 45, 49, 115, 116, 48, 57, 48,
514
+ 57, 48, 57, 97, 112, 109, 49, 58,
515
+ 97, 112, 115, 48, 57, 49, 116, 48,
516
+ 57, 49, 115, 116, 48, 57, 32, 46,
517
+ 49, 58, 97, 112, 115, 9, 13, 48,
518
+ 57, 48, 57, 32, 9, 13, 48, 57,
519
+ 32, 46, 49, 58, 97, 112, 116, 9,
520
+ 13, 48, 57, 32, 46, 49, 9, 13,
521
+ 48, 57, 32, 45, 46, 49, 9, 13,
522
+ 48, 57, 32, 46, 49, 9, 13, 48,
523
+ 57, 32, 46, 49, 115, 9, 13, 48,
524
+ 57, 32, 46, 49, 116, 9, 13, 48,
525
+ 57, 32, 46, 49, 115, 116, 9, 13,
526
+ 48, 57, 32, 45, 46, 49, 115, 9,
527
+ 13, 48, 57, 32, 46, 49, 115, 9,
528
+ 13, 48, 57, 32, 45, 46, 49, 116,
529
+ 9, 13, 48, 57, 32, 45, 46, 49,
530
+ 115, 116, 9, 13, 48, 57, 32, 46,
531
+ 49, 58, 97, 112, 116, 9, 13, 48,
532
+ 57, 32, 46, 49, 116, 9, 13, 48,
533
+ 57, 32, 46, 49, 115, 116, 9, 13,
534
+ 48, 57, 32, 46, 49, 58, 97, 110,
535
+ 112, 9, 13, 48, 57, 32, 46, 49,
536
+ 58, 97, 112, 9, 13, 48, 57, 32,
537
+ 46, 49, 58, 97, 112, 115, 9, 13,
538
+ 48, 57, 100, 32, 46, 49, 58, 97,
539
+ 112, 114, 9, 13, 48, 57, 32, 46,
540
+ 49, 58, 97, 112, 116, 9, 13, 48,
541
+ 57, 32, 110, 116, 9, 13, 32, 9,
542
+ 13, 32, 9, 13, 48, 57, 58, 97,
543
+ 112, 48, 57, 58, 97, 112, 48, 57,
544
+ 48, 57, 45, 110, 32, 9, 13, 32,
545
+ 48, 49, 50, 51, 97, 100, 104, 109,
546
+ 111, 115, 119, 121, 9, 13, 52, 57,
547
+ 32, 46, 49, 115, 9, 13, 48, 57,
548
+ 32, 46, 49, 116, 9, 13, 48, 57,
549
+ 32, 46, 49, 110, 9, 13, 48, 57,
550
+ 32, 46, 49, 114, 9, 13, 48, 57,
551
+ 32, 110, 9, 13, 116, 104, 101, 114,
552
+ 110, 116, 110, 103, 32, 9, 13, 32,
553
+ 105, 9, 13, 97, 118, 120, 101, 99,
554
+ 32, 117, 9, 13, 32, 97, 101, 105,
555
+ 111, 112, 9, 13, 48, 57, 97, 118,
556
+ 110, 110, 32, 99, 9, 13, 116, 101,
557
+ 32, 9, 13, 117, 110, 116, 97, 114,
558
+ 116, 32, 9, 13, 32, 115, 9, 13,
559
+ 32, 9, 13, 32, 58, 9, 13, 32,
560
+ 9, 13, 58, 115, 32, 9, 13, 32,
561
+ 115, 9, 13, 32, 9, 13, 32, 9,
562
+ 13, 32, 58, 9, 13, 32, 9, 13,
563
+ 58, 115, 32, 9, 13, 32, 115, 9,
564
+ 13, 32, 9, 13, 32, 9, 13, 32,
565
+ 9, 13, 32, 58, 9, 13, 32, 9,
566
+ 13, 32, 9, 13, 32, 115, 9, 13,
567
+ 32, 9, 13, 32, 9, 13, 32, 58,
568
+ 9, 13, 32, 9, 13, 0
569
+ ]
570
+
571
+ class << self
572
+ attr_accessor :_interval_expression_single_lengths
573
+ private :_interval_expression_single_lengths, :_interval_expression_single_lengths=
574
+ end
575
+ self._interval_expression_single_lengths = [
576
+ 0, 8, 1, 2, 1, 1, 1, 1,
577
+ 19, 2, 1, 2, 3, 1, 1, 7,
578
+ 1, 1, 8, 1, 1, 1, 1, 3,
579
+ 14, 5, 4, 1, 2, 0, 0, 1,
580
+ 0, 0, 7, 0, 1, 0, 0, 7,
581
+ 1, 1, 1, 1, 1, 1, 3, 14,
582
+ 5, 4, 1, 2, 0, 0, 1, 0,
583
+ 0, 1, 0, 1, 0, 0, 0, 0,
584
+ 1, 2, 2, 1, 1, 7, 1, 1,
585
+ 1, 1, 1, 2, 2, 1, 1, 1,
586
+ 1, 1, 1, 1, 1, 1, 1, 1,
587
+ 1, 1, 1, 1, 1, 1, 1, 1,
588
+ 3, 1, 3, 2, 3, 4, 0, 0,
589
+ 2, 1, 5, 2, 3, 7, 0, 1,
590
+ 7, 3, 4, 3, 4, 4, 5, 5,
591
+ 4, 5, 6, 7, 4, 5, 7, 6,
592
+ 7, 1, 7, 7, 3, 1, 1, 3,
593
+ 3, 0, 1, 1, 1, 13, 4, 4,
594
+ 4, 4, 2, 1, 1, 1, 1, 2,
595
+ 2, 1, 1, 1, 1, 1, 1, 1,
596
+ 1, 2, 1, 1, 1, 1, 1, 1,
597
+ 1, 1, 1, 1, 1, 1, 0, 0,
598
+ 1, 2, 2, 1, 1, 7, 1, 1,
599
+ 1, 1, 1, 2, 2, 1, 1, 1,
600
+ 1, 1, 1, 1, 1, 1, 1, 1,
601
+ 1, 1, 1, 1, 1, 1, 1, 1,
602
+ 3, 1, 3, 2, 3, 4, 0, 0,
603
+ 2, 1, 5, 2, 3, 7, 0, 1,
604
+ 7, 3, 4, 3, 4, 4, 5, 5,
605
+ 4, 5, 6, 7, 4, 5, 7, 6,
606
+ 7, 1, 7, 7, 3, 1, 1, 3,
607
+ 3, 0, 1, 1, 1, 13, 4, 4,
608
+ 4, 4, 2, 1, 1, 1, 1, 2,
609
+ 1, 1, 1, 2, 1, 1, 1, 1,
610
+ 1, 1, 3, 14, 5, 4, 1, 2,
611
+ 0, 0, 1, 0, 0, 3, 0, 1,
612
+ 0, 0, 3, 1, 1, 1, 1, 3,
613
+ 14, 5, 4, 1, 2, 0, 0, 1,
614
+ 0, 0, 1, 0, 1, 0, 0, 0,
615
+ 0, 1, 2, 2, 1, 1, 7, 1,
616
+ 1, 1, 1, 1, 2, 2, 1, 1,
617
+ 1, 1, 1, 1, 1, 1, 1, 1,
618
+ 1, 1, 1, 1, 1, 1, 1, 1,
619
+ 1, 3, 1, 3, 2, 3, 4, 0,
620
+ 0, 2, 1, 5, 2, 3, 7, 0,
621
+ 1, 7, 3, 4, 3, 4, 4, 5,
622
+ 5, 4, 5, 6, 7, 4, 5, 7,
623
+ 6, 7, 1, 7, 7, 3, 1, 1,
624
+ 3, 3, 0, 1, 1, 1, 13, 4,
625
+ 4, 4, 4, 2, 1, 1, 1, 1,
626
+ 2, 1, 1, 1, 2, 1, 1, 1,
627
+ 1, 0, 0, 1, 2, 2, 1, 1,
628
+ 7, 1, 1, 1, 1, 1, 2, 2,
629
+ 1, 1, 1, 1, 1, 1, 1, 1,
630
+ 1, 1, 1, 1, 1, 1, 1, 1,
631
+ 1, 1, 1, 3, 1, 3, 2, 3,
632
+ 4, 0, 0, 2, 1, 5, 2, 3,
633
+ 7, 0, 1, 7, 3, 4, 3, 4,
634
+ 4, 5, 5, 4, 5, 6, 7, 4,
635
+ 5, 7, 6, 7, 1, 7, 7, 3,
636
+ 1, 1, 3, 3, 0, 1, 1, 1,
637
+ 13, 4, 4, 4, 4, 2, 1, 1,
638
+ 1, 1, 2, 2, 1, 1, 1, 1,
639
+ 1, 1, 1, 1, 2, 1, 1, 1,
640
+ 1, 1, 1, 2, 1, 1, 1, 1,
641
+ 1, 1, 1, 1, 1, 1, 2, 2,
642
+ 1, 1, 1, 1, 1, 1, 1, 1,
643
+ 1, 1, 1, 1, 1, 1, 1, 1,
644
+ 1, 1, 1, 1, 4, 0, 1, 4,
645
+ 3, 4, 5, 4, 4, 1, 4, 2,
646
+ 2, 3, 1, 1, 1, 13, 1, 1,
647
+ 1, 1, 1, 1, 1, 2, 1, 1,
648
+ 1, 14, 1, 1, 2, 1, 1, 1,
649
+ 3, 3, 0, 1, 0, 0, 1, 0,
650
+ 0, 8, 0, 1, 0, 0, 0, 0,
651
+ 0, 0, 2, 1, 1, 1, 1, 1,
652
+ 3, 14, 5, 4, 1, 2, 0, 0,
653
+ 1, 0, 0, 1, 7, 1, 2, 1,
654
+ 1, 1, 1, 18, 2, 1, 2, 3,
655
+ 1, 1, 7, 1, 1, 1, 1, 1,
656
+ 2, 2, 1, 1, 1, 1, 1, 1,
657
+ 1, 1, 1, 1, 1, 1, 1, 1,
658
+ 1, 1, 1, 1, 1, 1, 4, 0,
659
+ 1, 4, 3, 4, 5, 4, 4, 1,
660
+ 4, 2, 2, 3, 1, 1, 1, 13,
661
+ 1, 1, 1, 1, 1, 1, 1, 2,
662
+ 1, 1, 1, 14, 1, 1, 2, 2,
663
+ 1, 0, 0, 2, 7, 1, 1, 1,
664
+ 3, 3, 0, 1, 0, 0, 1, 0,
665
+ 0, 7, 0, 1, 0, 0, 0, 0,
666
+ 0, 0, 2, 1, 3, 1, 1, 2,
667
+ 6, 2, 1, 1, 2, 1, 1, 1,
668
+ 1, 1, 0, 0, 1, 1, 2, 2,
669
+ 1, 1, 7, 1, 1, 2, 1, 1,
670
+ 1, 1, 2, 2, 1, 1, 1, 1,
671
+ 1, 1, 1, 1, 1, 1, 1, 1,
672
+ 1, 1, 1, 1, 1, 1, 1, 3,
673
+ 1, 3, 2, 3, 4, 0, 0, 2,
674
+ 1, 5, 2, 3, 7, 0, 1, 7,
675
+ 3, 4, 3, 4, 4, 5, 5, 4,
676
+ 5, 6, 7, 4, 5, 7, 6, 7,
677
+ 1, 7, 7, 3, 1, 1, 3, 3,
678
+ 0, 1, 1, 1, 13, 4, 4, 4,
679
+ 4, 2, 1, 1, 1, 1, 2, 1,
680
+ 1, 1, 2, 3, 1, 1, 2, 6,
681
+ 2, 1, 1, 2, 1, 1, 1, 1,
682
+ 1, 1, 1, 1, 1, 1, 2, 1,
683
+ 2, 1, 1, 0, 1, 0, 1, 2,
684
+ 1, 1, 2, 1, 1, 0, 1, 0,
685
+ 1, 2, 1, 1, 1, 2, 1, 1,
686
+ 2, 1, 1, 2, 1
687
+ ]
688
+
689
+ class << self
690
+ attr_accessor :_interval_expression_range_lengths
691
+ private :_interval_expression_range_lengths, :_interval_expression_range_lengths=
692
+ end
693
+ self._interval_expression_range_lengths = [
694
+ 0, 1, 2, 1, 0, 0, 0, 0,
695
+ 2, 1, 1, 1, 1, 0, 1, 1,
696
+ 0, 0, 1, 0, 0, 0, 0, 1,
697
+ 2, 1, 1, 1, 1, 1, 1, 0,
698
+ 1, 1, 2, 1, 0, 1, 1, 1,
699
+ 0, 0, 0, 0, 0, 0, 1, 2,
700
+ 1, 1, 1, 1, 1, 1, 0, 1,
701
+ 1, 2, 1, 0, 1, 1, 1, 1,
702
+ 1, 1, 1, 0, 1, 1, 0, 0,
703
+ 0, 0, 0, 0, 0, 0, 0, 0,
704
+ 0, 0, 0, 0, 0, 0, 0, 0,
705
+ 0, 0, 0, 0, 0, 0, 0, 0,
706
+ 1, 0, 1, 1, 1, 1, 1, 1,
707
+ 0, 0, 1, 1, 1, 2, 1, 2,
708
+ 2, 2, 2, 2, 2, 2, 2, 2,
709
+ 2, 2, 2, 2, 2, 2, 2, 2,
710
+ 2, 0, 2, 2, 1, 1, 2, 1,
711
+ 1, 1, 0, 0, 1, 2, 2, 2,
712
+ 2, 2, 1, 0, 0, 0, 0, 0,
713
+ 1, 0, 0, 1, 0, 0, 0, 0,
714
+ 0, 0, 0, 0, 0, 0, 0, 0,
715
+ 0, 0, 0, 0, 0, 0, 1, 1,
716
+ 1, 1, 1, 0, 1, 1, 0, 0,
717
+ 0, 0, 0, 0, 0, 0, 0, 0,
718
+ 0, 0, 0, 0, 0, 0, 0, 0,
719
+ 0, 0, 0, 0, 0, 0, 0, 0,
720
+ 1, 0, 1, 1, 1, 1, 1, 1,
721
+ 0, 0, 1, 1, 1, 2, 1, 2,
722
+ 2, 2, 2, 2, 2, 2, 2, 2,
723
+ 2, 2, 2, 2, 2, 2, 2, 2,
724
+ 2, 0, 2, 2, 1, 1, 2, 1,
725
+ 1, 1, 0, 0, 1, 2, 2, 2,
726
+ 2, 2, 1, 0, 0, 0, 0, 0,
727
+ 0, 0, 1, 1, 0, 0, 0, 0,
728
+ 0, 0, 1, 2, 1, 1, 1, 1,
729
+ 1, 1, 0, 1, 1, 2, 1, 0,
730
+ 1, 1, 1, 0, 0, 0, 0, 1,
731
+ 2, 1, 1, 1, 1, 1, 1, 0,
732
+ 1, 1, 2, 1, 0, 1, 1, 1,
733
+ 1, 1, 1, 1, 0, 1, 1, 0,
734
+ 0, 0, 0, 0, 0, 0, 0, 0,
735
+ 0, 0, 0, 0, 0, 0, 0, 0,
736
+ 0, 0, 0, 0, 0, 0, 0, 0,
737
+ 0, 1, 0, 1, 1, 1, 1, 1,
738
+ 1, 0, 0, 1, 1, 1, 2, 1,
739
+ 2, 2, 2, 2, 2, 2, 2, 2,
740
+ 2, 2, 2, 2, 2, 2, 2, 2,
741
+ 2, 2, 0, 2, 2, 1, 1, 2,
742
+ 1, 1, 1, 0, 0, 1, 2, 2,
743
+ 2, 2, 2, 1, 0, 0, 0, 0,
744
+ 0, 0, 0, 1, 1, 0, 0, 0,
745
+ 0, 1, 1, 1, 1, 1, 0, 1,
746
+ 1, 0, 0, 0, 0, 0, 0, 0,
747
+ 0, 0, 0, 0, 0, 0, 0, 0,
748
+ 0, 0, 0, 0, 0, 0, 0, 0,
749
+ 0, 0, 0, 1, 0, 1, 1, 1,
750
+ 1, 1, 1, 0, 0, 1, 1, 1,
751
+ 2, 1, 2, 2, 2, 2, 2, 2,
752
+ 2, 2, 2, 2, 2, 2, 2, 2,
753
+ 2, 2, 2, 2, 0, 2, 2, 1,
754
+ 1, 2, 1, 1, 1, 0, 0, 1,
755
+ 2, 2, 2, 2, 2, 1, 0, 0,
756
+ 0, 0, 0, 1, 0, 0, 1, 0,
757
+ 0, 0, 0, 0, 0, 0, 0, 0,
758
+ 0, 0, 0, 0, 0, 0, 0, 0,
759
+ 0, 0, 0, 0, 0, 0, 0, 0,
760
+ 0, 0, 0, 0, 0, 0, 0, 0,
761
+ 0, 0, 0, 0, 0, 0, 0, 0,
762
+ 0, 0, 0, 0, 2, 1, 2, 2,
763
+ 2, 2, 2, 2, 2, 0, 2, 1,
764
+ 0, 0, 0, 0, 1, 2, 0, 0,
765
+ 0, 0, 0, 0, 0, 0, 0, 0,
766
+ 1, 2, 0, 0, 0, 0, 1, 2,
767
+ 1, 1, 1, 0, 1, 1, 0, 1,
768
+ 1, 2, 1, 0, 1, 1, 1, 1,
769
+ 1, 1, 0, 0, 0, 0, 0, 0,
770
+ 1, 2, 1, 1, 1, 1, 1, 1,
771
+ 0, 1, 1, 1, 2, 2, 1, 0,
772
+ 0, 0, 0, 2, 1, 1, 1, 1,
773
+ 0, 1, 1, 0, 0, 0, 0, 0,
774
+ 0, 0, 0, 0, 0, 0, 0, 0,
775
+ 0, 0, 0, 0, 0, 0, 0, 0,
776
+ 0, 0, 0, 0, 0, 0, 2, 1,
777
+ 2, 2, 2, 2, 2, 2, 2, 0,
778
+ 2, 1, 0, 0, 0, 0, 1, 2,
779
+ 0, 0, 0, 0, 0, 0, 0, 0,
780
+ 0, 0, 1, 2, 0, 0, 0, 2,
781
+ 2, 1, 1, 1, 2, 0, 1, 2,
782
+ 1, 1, 1, 0, 1, 1, 0, 1,
783
+ 1, 2, 1, 0, 1, 1, 1, 1,
784
+ 1, 1, 0, 0, 0, 0, 0, 1,
785
+ 2, 0, 0, 0, 1, 0, 0, 1,
786
+ 0, 0, 1, 1, 1, 1, 1, 1,
787
+ 0, 1, 1, 0, 0, 1, 1, 0,
788
+ 0, 0, 0, 0, 0, 0, 0, 0,
789
+ 0, 0, 0, 0, 0, 0, 0, 0,
790
+ 0, 0, 0, 0, 0, 0, 0, 1,
791
+ 0, 1, 1, 1, 1, 1, 1, 0,
792
+ 0, 1, 1, 1, 2, 1, 2, 2,
793
+ 2, 2, 2, 2, 2, 2, 2, 2,
794
+ 2, 2, 2, 2, 2, 2, 2, 2,
795
+ 0, 2, 2, 1, 1, 2, 1, 1,
796
+ 1, 0, 0, 1, 2, 2, 2, 2,
797
+ 2, 1, 0, 0, 0, 0, 0, 0,
798
+ 0, 1, 1, 0, 0, 0, 1, 2,
799
+ 0, 0, 0, 1, 0, 0, 1, 0,
800
+ 0, 0, 0, 0, 0, 1, 1, 1,
801
+ 1, 1, 0, 0, 0, 0, 1, 1,
802
+ 1, 1, 1, 1, 0, 0, 0, 0,
803
+ 1, 1, 1, 1, 1, 1, 1, 1,
804
+ 1, 1, 1, 1, 1
805
+ ]
806
+
807
+ class << self
808
+ attr_accessor :_interval_expression_index_offsets
809
+ private :_interval_expression_index_offsets, :_interval_expression_index_offsets=
810
+ end
811
+ self._interval_expression_index_offsets = [
812
+ 0, 0, 10, 14, 18, 20, 22, 24,
813
+ 26, 48, 52, 55, 59, 64, 66, 69,
814
+ 78, 80, 82, 92, 94, 96, 98, 100,
815
+ 105, 122, 129, 135, 138, 142, 144, 146,
816
+ 148, 150, 152, 162, 164, 166, 168, 170,
817
+ 179, 181, 183, 185, 187, 189, 191, 196,
818
+ 213, 220, 226, 229, 233, 235, 237, 239,
819
+ 241, 243, 247, 249, 251, 253, 255, 257,
820
+ 259, 262, 266, 270, 272, 275, 284, 286,
821
+ 288, 290, 292, 294, 297, 300, 302, 304,
822
+ 306, 308, 310, 312, 314, 316, 318, 320,
823
+ 322, 324, 326, 328, 330, 332, 334, 336,
824
+ 338, 343, 345, 350, 354, 359, 365, 367,
825
+ 369, 372, 374, 381, 385, 390, 400, 402,
826
+ 406, 416, 422, 429, 435, 442, 449, 457,
827
+ 465, 472, 480, 489, 499, 506, 514, 524,
828
+ 533, 543, 545, 555, 565, 570, 573, 577,
829
+ 582, 587, 589, 591, 593, 596, 612, 619,
830
+ 626, 633, 640, 644, 646, 648, 650, 652,
831
+ 655, 659, 661, 663, 666, 668, 670, 672,
832
+ 674, 676, 679, 681, 683, 685, 687, 689,
833
+ 691, 693, 695, 697, 699, 701, 703, 705,
834
+ 707, 710, 714, 718, 720, 723, 732, 734,
835
+ 736, 738, 740, 742, 745, 748, 750, 752,
836
+ 754, 756, 758, 760, 762, 764, 766, 768,
837
+ 770, 772, 774, 776, 778, 780, 782, 784,
838
+ 786, 791, 793, 798, 802, 807, 813, 815,
839
+ 817, 820, 822, 829, 833, 838, 848, 850,
840
+ 854, 864, 870, 877, 883, 890, 897, 905,
841
+ 913, 920, 928, 937, 947, 954, 962, 972,
842
+ 981, 991, 993, 1003, 1013, 1018, 1021, 1025,
843
+ 1030, 1035, 1037, 1039, 1041, 1044, 1060, 1067,
844
+ 1074, 1081, 1088, 1092, 1094, 1096, 1098, 1100,
845
+ 1103, 1105, 1107, 1110, 1114, 1116, 1118, 1120,
846
+ 1122, 1124, 1126, 1131, 1148, 1155, 1161, 1164,
847
+ 1168, 1170, 1172, 1174, 1176, 1178, 1184, 1186,
848
+ 1188, 1190, 1192, 1197, 1199, 1201, 1203, 1205,
849
+ 1210, 1227, 1234, 1240, 1243, 1247, 1249, 1251,
850
+ 1253, 1255, 1257, 1261, 1263, 1265, 1267, 1269,
851
+ 1271, 1273, 1276, 1280, 1284, 1286, 1289, 1298,
852
+ 1300, 1302, 1304, 1306, 1308, 1311, 1314, 1316,
853
+ 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332,
854
+ 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348,
855
+ 1350, 1352, 1357, 1359, 1364, 1368, 1373, 1379,
856
+ 1381, 1383, 1386, 1388, 1395, 1399, 1404, 1414,
857
+ 1416, 1420, 1430, 1436, 1443, 1449, 1456, 1463,
858
+ 1471, 1479, 1486, 1494, 1503, 1513, 1520, 1528,
859
+ 1538, 1547, 1557, 1559, 1569, 1579, 1584, 1587,
860
+ 1591, 1596, 1601, 1603, 1605, 1607, 1610, 1626,
861
+ 1633, 1640, 1647, 1654, 1658, 1660, 1662, 1664,
862
+ 1666, 1669, 1671, 1673, 1676, 1680, 1682, 1684,
863
+ 1686, 1688, 1690, 1692, 1695, 1699, 1703, 1705,
864
+ 1708, 1717, 1719, 1721, 1723, 1725, 1727, 1730,
865
+ 1733, 1735, 1737, 1739, 1741, 1743, 1745, 1747,
866
+ 1749, 1751, 1753, 1755, 1757, 1759, 1761, 1763,
867
+ 1765, 1767, 1769, 1771, 1776, 1778, 1783, 1787,
868
+ 1792, 1798, 1800, 1802, 1805, 1807, 1814, 1818,
869
+ 1823, 1833, 1835, 1839, 1849, 1855, 1862, 1868,
870
+ 1875, 1882, 1890, 1898, 1905, 1913, 1922, 1932,
871
+ 1939, 1947, 1957, 1966, 1976, 1978, 1988, 1998,
872
+ 2003, 2006, 2010, 2015, 2020, 2022, 2024, 2026,
873
+ 2029, 2045, 2052, 2059, 2066, 2073, 2077, 2079,
874
+ 2081, 2083, 2085, 2088, 2092, 2094, 2096, 2099,
875
+ 2101, 2103, 2105, 2107, 2109, 2112, 2114, 2116,
876
+ 2118, 2120, 2122, 2124, 2127, 2129, 2131, 2133,
877
+ 2135, 2137, 2139, 2141, 2143, 2145, 2147, 2150,
878
+ 2153, 2155, 2157, 2159, 2161, 2163, 2165, 2167,
879
+ 2169, 2171, 2173, 2175, 2177, 2179, 2181, 2183,
880
+ 2185, 2187, 2189, 2191, 2193, 2200, 2202, 2206,
881
+ 2213, 2219, 2226, 2234, 2241, 2248, 2250, 2257,
882
+ 2261, 2264, 2268, 2270, 2272, 2275, 2291, 2293,
883
+ 2295, 2297, 2299, 2301, 2303, 2305, 2308, 2310,
884
+ 2312, 2315, 2332, 2334, 2336, 2339, 2341, 2344,
885
+ 2348, 2353, 2358, 2360, 2362, 2364, 2366, 2368,
886
+ 2370, 2372, 2383, 2385, 2387, 2389, 2391, 2393,
887
+ 2395, 2397, 2399, 2402, 2404, 2406, 2408, 2410,
888
+ 2412, 2417, 2434, 2441, 2447, 2450, 2454, 2456,
889
+ 2458, 2460, 2462, 2464, 2467, 2477, 2481, 2485,
890
+ 2487, 2489, 2491, 2493, 2514, 2518, 2521, 2525,
891
+ 2530, 2532, 2535, 2544, 2546, 2548, 2550, 2552,
892
+ 2554, 2557, 2560, 2562, 2564, 2566, 2568, 2570,
893
+ 2572, 2574, 2576, 2578, 2580, 2582, 2584, 2586,
894
+ 2588, 2590, 2592, 2594, 2596, 2598, 2600, 2607,
895
+ 2609, 2613, 2620, 2626, 2633, 2641, 2648, 2655,
896
+ 2657, 2664, 2668, 2671, 2675, 2677, 2679, 2682,
897
+ 2698, 2700, 2702, 2704, 2706, 2708, 2710, 2712,
898
+ 2715, 2717, 2719, 2722, 2739, 2741, 2743, 2746,
899
+ 2751, 2755, 2757, 2759, 2763, 2773, 2775, 2778,
900
+ 2782, 2787, 2792, 2794, 2796, 2798, 2800, 2802,
901
+ 2804, 2806, 2816, 2818, 2820, 2822, 2824, 2826,
902
+ 2828, 2830, 2832, 2835, 2837, 2841, 2843, 2845,
903
+ 2849, 2858, 2861, 2863, 2865, 2869, 2871, 2873,
904
+ 2876, 2878, 2880, 2882, 2884, 2887, 2890, 2894,
905
+ 2898, 2900, 2903, 2912, 2914, 2916, 2920, 2923,
906
+ 2925, 2927, 2929, 2932, 2935, 2937, 2939, 2941,
907
+ 2943, 2945, 2947, 2949, 2951, 2953, 2955, 2957,
908
+ 2959, 2961, 2963, 2965, 2967, 2969, 2971, 2973,
909
+ 2978, 2980, 2985, 2989, 2994, 3000, 3002, 3004,
910
+ 3007, 3009, 3016, 3020, 3025, 3035, 3037, 3041,
911
+ 3051, 3057, 3064, 3070, 3077, 3084, 3092, 3100,
912
+ 3107, 3115, 3124, 3134, 3141, 3149, 3159, 3168,
913
+ 3178, 3180, 3190, 3200, 3205, 3208, 3212, 3217,
914
+ 3222, 3224, 3226, 3228, 3231, 3247, 3254, 3261,
915
+ 3268, 3275, 3279, 3281, 3283, 3285, 3287, 3290,
916
+ 3292, 3294, 3297, 3301, 3305, 3307, 3309, 3313,
917
+ 3322, 3325, 3327, 3329, 3333, 3335, 3337, 3340,
918
+ 3342, 3344, 3346, 3348, 3350, 3352, 3355, 3359,
919
+ 3362, 3366, 3369, 3371, 3372, 3374, 3375, 3378,
920
+ 3382, 3385, 3388, 3392, 3395, 3397, 3398, 3400,
921
+ 3401, 3404, 3408, 3411, 3414, 3417, 3421, 3424,
922
+ 3427, 3431, 3434, 3437, 3441
923
+ ]
924
+
925
+ class << self
926
+ attr_accessor :_interval_expression_trans_targs
927
+ private :_interval_expression_trans_targs, :_interval_expression_trans_targs=
928
+ end
929
+ self._interval_expression_trans_targs = [
930
+ 581, 604, 835, 841, 842, 578, 847, 849,
931
+ 2, 0, 3, 3, 2, 0, 3, 4,
932
+ 3, 0, 5, 0, 6, 0, 7, 0,
933
+ 853, 0, 8, 9, 548, 556, 558, 559,
934
+ 19, 268, 560, 561, 508, 523, 526, 573,
935
+ 578, 580, 519, 542, 545, 8, 551, 0,
936
+ 11, 547, 10, 0, 11, 10, 0, 12,
937
+ 13, 9, 0, 12, 13, 547, 9, 0,
938
+ 14, 0, 15, 15, 0, 15, 16, 523,
939
+ 526, 531, 542, 545, 15, 0, 17, 0,
940
+ 854, 0, 18, 19, 268, 503, 506, 508,
941
+ 514, 519, 18, 0, 20, 0, 21, 0,
942
+ 22, 0, 23, 0, 24, 264, 267, 24,
943
+ 0, 24, 25, 221, 238, 242, 244, 182,
944
+ 184, 251, 187, 263, 192, 203, 206, 24,
945
+ 243, 0, 218, 214, 217, 217, 179, 26,
946
+ 0, 211, 214, 217, 217, 27, 0, 210,
947
+ 28, 0, 29, 177, 176, 0, 30, 0,
948
+ 31, 0, 32, 0, 33, 0, 855, 0,
949
+ 34, 40, 156, 159, 161, 167, 170, 34,
950
+ 35, 0, 36, 0, 37, 0, 38, 0,
951
+ 856, 0, 39, 40, 156, 159, 161, 167,
952
+ 170, 39, 0, 41, 0, 42, 0, 43,
953
+ 0, 44, 0, 45, 0, 46, 0, 47,
954
+ 152, 153, 47, 0, 47, 48, 109, 126,
955
+ 130, 132, 70, 72, 139, 75, 151, 80,
956
+ 91, 94, 47, 131, 0, 106, 102, 105,
957
+ 105, 67, 49, 0, 99, 102, 105, 105,
958
+ 50, 0, 98, 51, 0, 52, 65, 64,
959
+ 0, 53, 0, 54, 0, 55, 0, 56,
960
+ 0, 857, 0, 57, 57, 58, 0, 59,
961
+ 0, 60, 0, 61, 0, 858, 0, 63,
962
+ 0, 859, 0, 65, 64, 0, 96, 97,
963
+ 66, 0, 65, 67, 64, 0, 68, 0,
964
+ 69, 69, 0, 69, 70, 72, 75, 80,
965
+ 91, 94, 69, 0, 71, 0, 860, 0,
966
+ 73, 0, 74, 0, 860, 0, 76, 88,
967
+ 0, 77, 85, 0, 78, 0, 79, 0,
968
+ 80, 0, 81, 0, 82, 0, 83, 0,
969
+ 84, 0, 860, 0, 86, 0, 87, 0,
970
+ 860, 0, 89, 0, 90, 0, 860, 0,
971
+ 92, 0, 93, 0, 860, 0, 95, 0,
972
+ 74, 0, 96, 97, 67, 66, 0, 68,
973
+ 0, 52, 96, 97, 66, 0, 101, 97,
974
+ 100, 0, 52, 65, 67, 64, 0, 52,
975
+ 96, 97, 67, 66, 0, 103, 0, 104,
976
+ 0, 105, 105, 0, 859, 0, 108, 102,
977
+ 105, 105, 97, 107, 0, 98, 67, 51,
978
+ 0, 101, 97, 67, 100, 0, 69, 110,
979
+ 123, 102, 105, 105, 97, 69, 112, 0,
980
+ 111, 0, 69, 69, 111, 0, 69, 110,
981
+ 120, 102, 105, 105, 67, 69, 113, 0,
982
+ 69, 110, 119, 69, 114, 0, 69, 52,
983
+ 110, 116, 69, 115, 0, 69, 110, 116,
984
+ 69, 115, 0, 69, 110, 118, 97, 69,
985
+ 117, 0, 69, 110, 116, 67, 69, 115,
986
+ 0, 69, 110, 118, 97, 67, 69, 117,
987
+ 0, 69, 52, 110, 118, 97, 69, 117,
988
+ 0, 69, 110, 122, 97, 69, 121, 0,
989
+ 69, 52, 110, 116, 67, 69, 115, 0,
990
+ 69, 52, 110, 118, 97, 67, 69, 117,
991
+ 0, 69, 110, 125, 102, 105, 105, 67,
992
+ 69, 124, 0, 69, 110, 119, 67, 69,
993
+ 114, 0, 69, 110, 122, 97, 67, 69,
994
+ 121, 0, 69, 110, 128, 102, 105, 129,
995
+ 105, 69, 127, 0, 69, 110, 120, 102,
996
+ 105, 105, 69, 113, 0, 69, 110, 125,
997
+ 102, 105, 105, 97, 69, 124, 0, 68,
998
+ 0, 69, 110, 128, 102, 105, 105, 129,
999
+ 69, 127, 0, 69, 110, 128, 102, 105,
1000
+ 105, 67, 69, 127, 0, 69, 68, 133,
1001
+ 69, 0, 134, 134, 0, 134, 134, 135,
1002
+ 0, 102, 105, 105, 136, 0, 102, 105,
1003
+ 105, 137, 0, 138, 0, 52, 0, 140,
1004
+ 0, 141, 141, 0, 141, 66, 142, 144,
1005
+ 145, 146, 70, 72, 75, 147, 80, 91,
1006
+ 94, 141, 117, 0, 69, 110, 143, 97,
1007
+ 69, 117, 0, 69, 110, 118, 67, 69,
1008
+ 117, 0, 69, 110, 116, 129, 69, 115,
1009
+ 0, 69, 110, 116, 129, 69, 115, 0,
1010
+ 69, 68, 69, 0, 148, 0, 149, 0,
1011
+ 150, 0, 68, 0, 133, 148, 0, 47,
1012
+ 153, 47, 0, 154, 0, 155, 0, 47,
1013
+ 47, 0, 157, 0, 158, 0, 153, 0,
1014
+ 160, 0, 152, 0, 162, 166, 0, 163,
1015
+ 0, 164, 0, 165, 0, 152, 0, 155,
1016
+ 0, 168, 0, 169, 0, 152, 0, 171,
1017
+ 0, 172, 0, 173, 0, 155, 0, 175,
1018
+ 0, 862, 0, 177, 176, 0, 208, 209,
1019
+ 178, 0, 177, 179, 176, 0, 180, 0,
1020
+ 181, 181, 0, 181, 182, 184, 187, 192,
1021
+ 203, 206, 181, 0, 183, 0, 863, 0,
1022
+ 185, 0, 186, 0, 863, 0, 188, 200,
1023
+ 0, 189, 197, 0, 190, 0, 191, 0,
1024
+ 192, 0, 193, 0, 194, 0, 195, 0,
1025
+ 196, 0, 863, 0, 198, 0, 199, 0,
1026
+ 863, 0, 201, 0, 202, 0, 863, 0,
1027
+ 204, 0, 205, 0, 863, 0, 207, 0,
1028
+ 186, 0, 208, 209, 179, 178, 0, 180,
1029
+ 0, 29, 208, 209, 178, 0, 213, 209,
1030
+ 212, 0, 29, 177, 179, 176, 0, 29,
1031
+ 208, 209, 179, 178, 0, 215, 0, 216,
1032
+ 0, 217, 217, 0, 862, 0, 220, 214,
1033
+ 217, 217, 209, 219, 0, 210, 179, 28,
1034
+ 0, 213, 209, 179, 212, 0, 181, 222,
1035
+ 235, 214, 217, 217, 209, 181, 224, 0,
1036
+ 223, 0, 181, 181, 223, 0, 181, 222,
1037
+ 232, 214, 217, 217, 179, 181, 225, 0,
1038
+ 181, 222, 231, 181, 226, 0, 181, 29,
1039
+ 222, 228, 181, 227, 0, 181, 222, 228,
1040
+ 181, 227, 0, 181, 222, 230, 209, 181,
1041
+ 229, 0, 181, 222, 228, 179, 181, 227,
1042
+ 0, 181, 222, 230, 209, 179, 181, 229,
1043
+ 0, 181, 29, 222, 230, 209, 181, 229,
1044
+ 0, 181, 222, 234, 209, 181, 233, 0,
1045
+ 181, 29, 222, 228, 179, 181, 227, 0,
1046
+ 181, 29, 222, 230, 209, 179, 181, 229,
1047
+ 0, 181, 222, 237, 214, 217, 217, 179,
1048
+ 181, 236, 0, 181, 222, 231, 179, 181,
1049
+ 226, 0, 181, 222, 234, 209, 179, 181,
1050
+ 233, 0, 181, 222, 240, 214, 217, 241,
1051
+ 217, 181, 239, 0, 181, 222, 232, 214,
1052
+ 217, 217, 181, 225, 0, 181, 222, 237,
1053
+ 214, 217, 217, 209, 181, 236, 0, 180,
1054
+ 0, 181, 222, 240, 214, 217, 217, 241,
1055
+ 181, 239, 0, 181, 222, 240, 214, 217,
1056
+ 217, 179, 181, 239, 0, 181, 180, 245,
1057
+ 181, 0, 246, 246, 0, 246, 246, 247,
1058
+ 0, 214, 217, 217, 248, 0, 214, 217,
1059
+ 217, 249, 0, 250, 0, 29, 0, 252,
1060
+ 0, 253, 253, 0, 253, 178, 254, 256,
1061
+ 257, 258, 182, 184, 187, 259, 192, 203,
1062
+ 206, 253, 229, 0, 181, 222, 255, 209,
1063
+ 181, 229, 0, 181, 222, 230, 179, 181,
1064
+ 229, 0, 181, 222, 228, 241, 181, 227,
1065
+ 0, 181, 222, 228, 241, 181, 227, 0,
1066
+ 181, 180, 181, 0, 260, 0, 261, 0,
1067
+ 262, 0, 180, 0, 245, 260, 0, 265,
1068
+ 0, 266, 0, 24, 24, 0, 24, 264,
1069
+ 24, 0, 269, 0, 270, 0, 271, 0,
1070
+ 272, 0, 273, 0, 274, 0, 275, 499,
1071
+ 500, 275, 0, 275, 276, 456, 473, 477,
1072
+ 479, 417, 419, 486, 422, 498, 427, 438,
1073
+ 441, 275, 478, 0, 453, 449, 452, 452,
1074
+ 414, 277, 0, 446, 449, 452, 452, 278,
1075
+ 0, 445, 279, 0, 280, 412, 411, 0,
1076
+ 281, 0, 282, 0, 283, 0, 284, 0,
1077
+ 865, 0, 285, 291, 405, 285, 286, 0,
1078
+ 287, 0, 288, 0, 289, 0, 866, 0,
1079
+ 290, 291, 405, 290, 0, 292, 0, 293,
1080
+ 0, 294, 0, 295, 0, 296, 401, 404,
1081
+ 296, 0, 296, 297, 358, 375, 379, 381,
1082
+ 319, 321, 388, 324, 400, 329, 340, 343,
1083
+ 296, 380, 0, 355, 351, 354, 354, 316,
1084
+ 298, 0, 348, 351, 354, 354, 299, 0,
1085
+ 347, 300, 0, 301, 314, 313, 0, 302,
1086
+ 0, 303, 0, 304, 0, 305, 0, 867,
1087
+ 0, 306, 306, 307, 0, 308, 0, 309,
1088
+ 0, 310, 0, 868, 0, 312, 0, 869,
1089
+ 0, 314, 313, 0, 345, 346, 315, 0,
1090
+ 314, 316, 313, 0, 317, 0, 318, 318,
1091
+ 0, 318, 319, 321, 324, 329, 340, 343,
1092
+ 318, 0, 320, 0, 870, 0, 322, 0,
1093
+ 323, 0, 870, 0, 325, 337, 0, 326,
1094
+ 334, 0, 327, 0, 328, 0, 329, 0,
1095
+ 330, 0, 331, 0, 332, 0, 333, 0,
1096
+ 870, 0, 335, 0, 336, 0, 870, 0,
1097
+ 338, 0, 339, 0, 870, 0, 341, 0,
1098
+ 342, 0, 870, 0, 344, 0, 323, 0,
1099
+ 345, 346, 316, 315, 0, 317, 0, 301,
1100
+ 345, 346, 315, 0, 350, 346, 349, 0,
1101
+ 301, 314, 316, 313, 0, 301, 345, 346,
1102
+ 316, 315, 0, 352, 0, 353, 0, 354,
1103
+ 354, 0, 869, 0, 357, 351, 354, 354,
1104
+ 346, 356, 0, 347, 316, 300, 0, 350,
1105
+ 346, 316, 349, 0, 318, 359, 372, 351,
1106
+ 354, 354, 346, 318, 361, 0, 360, 0,
1107
+ 318, 318, 360, 0, 318, 359, 369, 351,
1108
+ 354, 354, 316, 318, 362, 0, 318, 359,
1109
+ 368, 318, 363, 0, 318, 301, 359, 365,
1110
+ 318, 364, 0, 318, 359, 365, 318, 364,
1111
+ 0, 318, 359, 367, 346, 318, 366, 0,
1112
+ 318, 359, 365, 316, 318, 364, 0, 318,
1113
+ 359, 367, 346, 316, 318, 366, 0, 318,
1114
+ 301, 359, 367, 346, 318, 366, 0, 318,
1115
+ 359, 371, 346, 318, 370, 0, 318, 301,
1116
+ 359, 365, 316, 318, 364, 0, 318, 301,
1117
+ 359, 367, 346, 316, 318, 366, 0, 318,
1118
+ 359, 374, 351, 354, 354, 316, 318, 373,
1119
+ 0, 318, 359, 368, 316, 318, 363, 0,
1120
+ 318, 359, 371, 346, 316, 318, 370, 0,
1121
+ 318, 359, 377, 351, 354, 378, 354, 318,
1122
+ 376, 0, 318, 359, 369, 351, 354, 354,
1123
+ 318, 362, 0, 318, 359, 374, 351, 354,
1124
+ 354, 346, 318, 373, 0, 317, 0, 318,
1125
+ 359, 377, 351, 354, 354, 378, 318, 376,
1126
+ 0, 318, 359, 377, 351, 354, 354, 316,
1127
+ 318, 376, 0, 318, 317, 382, 318, 0,
1128
+ 383, 383, 0, 383, 383, 384, 0, 351,
1129
+ 354, 354, 385, 0, 351, 354, 354, 386,
1130
+ 0, 387, 0, 301, 0, 389, 0, 390,
1131
+ 390, 0, 390, 315, 391, 393, 394, 395,
1132
+ 319, 321, 324, 396, 329, 340, 343, 390,
1133
+ 366, 0, 318, 359, 392, 346, 318, 366,
1134
+ 0, 318, 359, 367, 316, 318, 366, 0,
1135
+ 318, 359, 365, 378, 318, 364, 0, 318,
1136
+ 359, 365, 378, 318, 364, 0, 318, 317,
1137
+ 318, 0, 397, 0, 398, 0, 399, 0,
1138
+ 317, 0, 382, 397, 0, 402, 0, 403,
1139
+ 0, 296, 296, 0, 296, 401, 296, 0,
1140
+ 406, 0, 407, 0, 408, 0, 404, 0,
1141
+ 410, 0, 872, 0, 412, 411, 0, 443,
1142
+ 444, 413, 0, 412, 414, 411, 0, 415,
1143
+ 0, 416, 416, 0, 416, 417, 419, 422,
1144
+ 427, 438, 441, 416, 0, 418, 0, 873,
1145
+ 0, 420, 0, 421, 0, 873, 0, 423,
1146
+ 435, 0, 424, 432, 0, 425, 0, 426,
1147
+ 0, 427, 0, 428, 0, 429, 0, 430,
1148
+ 0, 431, 0, 873, 0, 433, 0, 434,
1149
+ 0, 873, 0, 436, 0, 437, 0, 873,
1150
+ 0, 439, 0, 440, 0, 873, 0, 442,
1151
+ 0, 421, 0, 443, 444, 414, 413, 0,
1152
+ 415, 0, 280, 443, 444, 413, 0, 448,
1153
+ 444, 447, 0, 280, 412, 414, 411, 0,
1154
+ 280, 443, 444, 414, 413, 0, 450, 0,
1155
+ 451, 0, 452, 452, 0, 872, 0, 455,
1156
+ 449, 452, 452, 444, 454, 0, 445, 414,
1157
+ 279, 0, 448, 444, 414, 447, 0, 416,
1158
+ 457, 470, 449, 452, 452, 444, 416, 459,
1159
+ 0, 458, 0, 416, 416, 458, 0, 416,
1160
+ 457, 467, 449, 452, 452, 414, 416, 460,
1161
+ 0, 416, 457, 466, 416, 461, 0, 416,
1162
+ 280, 457, 463, 416, 462, 0, 416, 457,
1163
+ 463, 416, 462, 0, 416, 457, 465, 444,
1164
+ 416, 464, 0, 416, 457, 463, 414, 416,
1165
+ 462, 0, 416, 457, 465, 444, 414, 416,
1166
+ 464, 0, 416, 280, 457, 465, 444, 416,
1167
+ 464, 0, 416, 457, 469, 444, 416, 468,
1168
+ 0, 416, 280, 457, 463, 414, 416, 462,
1169
+ 0, 416, 280, 457, 465, 444, 414, 416,
1170
+ 464, 0, 416, 457, 472, 449, 452, 452,
1171
+ 414, 416, 471, 0, 416, 457, 466, 414,
1172
+ 416, 461, 0, 416, 457, 469, 444, 414,
1173
+ 416, 468, 0, 416, 457, 475, 449, 452,
1174
+ 476, 452, 416, 474, 0, 416, 457, 467,
1175
+ 449, 452, 452, 416, 460, 0, 416, 457,
1176
+ 472, 449, 452, 452, 444, 416, 471, 0,
1177
+ 415, 0, 416, 457, 475, 449, 452, 452,
1178
+ 476, 416, 474, 0, 416, 457, 475, 449,
1179
+ 452, 452, 414, 416, 474, 0, 416, 415,
1180
+ 480, 416, 0, 481, 481, 0, 481, 481,
1181
+ 482, 0, 449, 452, 452, 483, 0, 449,
1182
+ 452, 452, 484, 0, 485, 0, 280, 0,
1183
+ 487, 0, 488, 488, 0, 488, 413, 489,
1184
+ 491, 492, 493, 417, 419, 422, 494, 427,
1185
+ 438, 441, 488, 464, 0, 416, 457, 490,
1186
+ 444, 416, 464, 0, 416, 457, 465, 414,
1187
+ 416, 464, 0, 416, 457, 463, 476, 416,
1188
+ 462, 0, 416, 457, 463, 476, 416, 462,
1189
+ 0, 416, 415, 416, 0, 495, 0, 496,
1190
+ 0, 497, 0, 415, 0, 480, 495, 0,
1191
+ 275, 500, 275, 0, 501, 0, 502, 0,
1192
+ 275, 275, 0, 504, 0, 505, 0, 500,
1193
+ 0, 507, 0, 499, 0, 509, 513, 0,
1194
+ 510, 0, 511, 0, 512, 0, 499, 0,
1195
+ 502, 0, 515, 0, 516, 518, 0, 517,
1196
+ 0, 267, 0, 499, 0, 520, 0, 521,
1197
+ 0, 522, 0, 502, 0, 524, 0, 525,
1198
+ 0, 854, 0, 527, 539, 0, 528, 536,
1199
+ 0, 529, 0, 530, 0, 531, 0, 532,
1200
+ 0, 533, 0, 534, 0, 535, 0, 854,
1201
+ 0, 537, 0, 538, 0, 854, 0, 540,
1202
+ 0, 541, 0, 854, 0, 543, 0, 544,
1203
+ 0, 854, 0, 546, 0, 525, 0, 14,
1204
+ 0, 15, 549, 555, 13, 15, 551, 0,
1205
+ 550, 0, 15, 15, 550, 0, 15, 549,
1206
+ 553, 547, 15, 552, 0, 15, 549, 553,
1207
+ 15, 552, 0, 15, 549, 554, 13, 15,
1208
+ 551, 0, 15, 549, 554, 13, 547, 15,
1209
+ 551, 0, 15, 549, 554, 547, 15, 551,
1210
+ 0, 15, 549, 553, 557, 15, 552, 0,
1211
+ 14, 0, 15, 549, 553, 557, 15, 552,
1212
+ 0, 15, 14, 15, 0, 17, 504, 0,
1213
+ 562, 507, 570, 0, 563, 0, 564, 0,
1214
+ 565, 565, 0, 565, 9, 548, 556, 558,
1215
+ 559, 16, 523, 526, 566, 531, 542, 545,
1216
+ 565, 551, 0, 567, 0, 568, 0, 569,
1217
+ 0, 14, 0, 571, 0, 572, 0, 564,
1218
+ 0, 574, 567, 0, 575, 0, 576, 0,
1219
+ 577, 565, 0, 565, 9, 548, 556, 558,
1220
+ 559, 16, 523, 526, 566, 578, 531, 542,
1221
+ 545, 565, 551, 0, 579, 0, 564, 0,
1222
+ 532, 515, 0, 582, 0, 583, 583, 0,
1223
+ 583, 583, 584, 0, 600, 603, 603, 585,
1224
+ 0, 600, 603, 603, 586, 0, 587, 0,
1225
+ 588, 0, 589, 0, 590, 0, 591, 0,
1226
+ 592, 0, 876, 0, 593, 19, 268, 503,
1227
+ 506, 508, 514, 519, 593, 594, 0, 595,
1228
+ 0, 596, 0, 597, 0, 877, 0, 599,
1229
+ 0, 878, 0, 601, 0, 602, 0, 603,
1230
+ 603, 0, 878, 0, 605, 0, 606, 0,
1231
+ 607, 0, 608, 0, 609, 831, 834, 609,
1232
+ 0, 609, 610, 788, 805, 809, 811, 747,
1233
+ 751, 818, 754, 830, 759, 770, 773, 609,
1234
+ 810, 0, 785, 781, 784, 784, 744, 611,
1235
+ 0, 778, 781, 784, 784, 612, 0, 777,
1236
+ 613, 0, 614, 742, 741, 0, 615, 0,
1237
+ 616, 0, 617, 0, 618, 0, 619, 0,
1238
+ 620, 620, 0, 620, 701, 724, 730, 731,
1239
+ 692, 736, 620, 621, 0, 622, 622, 695,
1240
+ 0, 622, 623, 622, 0, 624, 0, 625,
1241
+ 0, 626, 0, 879, 0, 627, 628, 662,
1242
+ 670, 672, 673, 40, 674, 675, 161, 637,
1243
+ 640, 687, 692, 694, 170, 656, 659, 627,
1244
+ 665, 0, 630, 661, 629, 0, 630, 629,
1245
+ 0, 631, 632, 628, 0, 631, 632, 661,
1246
+ 628, 0, 633, 0, 634, 634, 0, 634,
1247
+ 635, 637, 640, 645, 656, 659, 634, 0,
1248
+ 636, 0, 880, 0, 638, 0, 639, 0,
1249
+ 880, 0, 641, 653, 0, 642, 650, 0,
1250
+ 643, 0, 644, 0, 645, 0, 646, 0,
1251
+ 647, 0, 648, 0, 649, 0, 880, 0,
1252
+ 651, 0, 652, 0, 880, 0, 654, 0,
1253
+ 655, 0, 880, 0, 657, 0, 658, 0,
1254
+ 880, 0, 660, 0, 639, 0, 633, 0,
1255
+ 634, 663, 669, 632, 634, 665, 0, 664,
1256
+ 0, 634, 634, 664, 0, 634, 663, 667,
1257
+ 661, 634, 666, 0, 634, 663, 667, 634,
1258
+ 666, 0, 634, 663, 668, 632, 634, 665,
1259
+ 0, 634, 663, 668, 632, 661, 634, 665,
1260
+ 0, 634, 663, 668, 661, 634, 665, 0,
1261
+ 634, 663, 667, 671, 634, 666, 0, 633,
1262
+ 0, 634, 663, 667, 671, 634, 666, 0,
1263
+ 634, 633, 634, 0, 636, 157, 0, 676,
1264
+ 160, 684, 0, 677, 0, 678, 0, 679,
1265
+ 679, 0, 679, 628, 662, 670, 672, 673,
1266
+ 635, 637, 640, 680, 645, 656, 659, 679,
1267
+ 665, 0, 681, 0, 682, 0, 683, 0,
1268
+ 633, 0, 685, 0, 686, 0, 678, 0,
1269
+ 688, 681, 0, 689, 0, 690, 0, 691,
1270
+ 679, 0, 679, 628, 662, 670, 672, 673,
1271
+ 635, 637, 640, 680, 692, 645, 656, 659,
1272
+ 679, 665, 0, 693, 0, 678, 0, 646,
1273
+ 168, 0, 622, 697, 622, 696, 0, 622,
1274
+ 622, 696, 0, 698, 0, 699, 0, 700,
1275
+ 738, 700, 0, 700, 701, 724, 730, 731,
1276
+ 692, 736, 700, 696, 0, 702, 0, 703,
1277
+ 703, 0, 703, 703, 704, 0, 720, 723,
1278
+ 723, 705, 0, 720, 723, 723, 706, 0,
1279
+ 707, 0, 708, 0, 709, 0, 710, 0,
1280
+ 711, 0, 712, 0, 882, 0, 713, 40,
1281
+ 156, 159, 161, 167, 170, 713, 714, 0,
1282
+ 715, 0, 716, 0, 717, 0, 883, 0,
1283
+ 719, 0, 884, 0, 721, 0, 722, 0,
1284
+ 723, 723, 0, 884, 0, 676, 684, 725,
1285
+ 0, 726, 0, 727, 0, 728, 733, 728,
1286
+ 0, 728, 701, 729, 730, 731, 692, 728,
1287
+ 696, 0, 676, 684, 0, 678, 0, 732,
1288
+ 0, 703, 689, 703, 0, 734, 0, 735,
1289
+ 0, 728, 728, 0, 737, 0, 735, 0,
1290
+ 739, 0, 740, 0, 700, 700, 0, 742,
1291
+ 741, 0, 775, 776, 743, 0, 742, 744,
1292
+ 741, 0, 745, 0, 746, 746, 0, 746,
1293
+ 747, 751, 754, 759, 770, 773, 746, 0,
1294
+ 748, 0, 749, 0, 700, 750, 700, 0,
1295
+ 700, 700, 0, 752, 0, 753, 0, 749,
1296
+ 0, 755, 767, 0, 756, 764, 0, 757,
1297
+ 0, 758, 0, 759, 0, 760, 0, 761,
1298
+ 0, 762, 0, 763, 0, 749, 0, 765,
1299
+ 0, 766, 0, 749, 0, 768, 0, 769,
1300
+ 0, 749, 0, 771, 0, 772, 0, 749,
1301
+ 0, 774, 0, 753, 0, 775, 776, 744,
1302
+ 743, 0, 745, 0, 614, 775, 776, 743,
1303
+ 0, 780, 776, 779, 0, 614, 742, 744,
1304
+ 741, 0, 614, 775, 776, 744, 743, 0,
1305
+ 782, 0, 783, 0, 784, 784, 0, 740,
1306
+ 0, 787, 781, 784, 784, 776, 786, 0,
1307
+ 777, 744, 613, 0, 780, 776, 744, 779,
1308
+ 0, 746, 789, 802, 781, 784, 784, 776,
1309
+ 746, 791, 0, 790, 0, 746, 746, 790,
1310
+ 0, 746, 789, 799, 781, 784, 784, 744,
1311
+ 746, 792, 0, 746, 789, 798, 746, 793,
1312
+ 0, 746, 614, 789, 795, 746, 794, 0,
1313
+ 746, 789, 795, 746, 794, 0, 746, 789,
1314
+ 797, 776, 746, 796, 0, 746, 789, 795,
1315
+ 744, 746, 794, 0, 746, 789, 797, 776,
1316
+ 744, 746, 796, 0, 746, 614, 789, 797,
1317
+ 776, 746, 796, 0, 746, 789, 801, 776,
1318
+ 746, 800, 0, 746, 614, 789, 795, 744,
1319
+ 746, 794, 0, 746, 614, 789, 797, 776,
1320
+ 744, 746, 796, 0, 746, 789, 804, 781,
1321
+ 784, 784, 744, 746, 803, 0, 746, 789,
1322
+ 798, 744, 746, 793, 0, 746, 789, 801,
1323
+ 776, 744, 746, 800, 0, 746, 789, 807,
1324
+ 781, 784, 808, 784, 746, 806, 0, 746,
1325
+ 789, 799, 781, 784, 784, 746, 792, 0,
1326
+ 746, 789, 804, 781, 784, 784, 776, 746,
1327
+ 803, 0, 745, 0, 746, 789, 807, 781,
1328
+ 784, 784, 808, 746, 806, 0, 746, 789,
1329
+ 807, 781, 784, 784, 744, 746, 806, 0,
1330
+ 746, 745, 812, 746, 0, 813, 813, 0,
1331
+ 813, 813, 814, 0, 781, 784, 784, 815,
1332
+ 0, 781, 784, 784, 816, 0, 817, 0,
1333
+ 614, 0, 819, 0, 820, 820, 0, 820,
1334
+ 743, 821, 823, 824, 825, 747, 751, 754,
1335
+ 826, 759, 770, 773, 820, 796, 0, 746,
1336
+ 789, 822, 776, 746, 796, 0, 746, 789,
1337
+ 797, 744, 746, 796, 0, 746, 789, 795,
1338
+ 808, 746, 794, 0, 746, 789, 795, 808,
1339
+ 746, 794, 0, 746, 745, 746, 0, 827,
1340
+ 0, 828, 0, 829, 0, 745, 0, 812,
1341
+ 827, 0, 832, 0, 833, 0, 609, 609,
1342
+ 0, 609, 831, 609, 0, 562, 570, 836,
1343
+ 0, 837, 0, 838, 0, 839, 844, 839,
1344
+ 0, 839, 581, 840, 841, 842, 578, 839,
1345
+ 2, 0, 562, 570, 0, 564, 0, 843,
1346
+ 0, 583, 575, 583, 0, 845, 0, 846,
1347
+ 0, 839, 839, 0, 848, 0, 846, 0,
1348
+ 850, 0, 851, 0, 852, 0, 834, 0,
1349
+ 8, 8, 0, 18, 875, 18, 0, 34,
1350
+ 34, 0, 39, 174, 39, 0, 57, 57,
1351
+ 0, 62, 0, 0, 861, 0, 0, 39,
1352
+ 39, 0, 39, 864, 39, 0, 39, 39,
1353
+ 0, 285, 285, 0, 290, 409, 290, 0,
1354
+ 306, 306, 0, 311, 0, 0, 871, 0,
1355
+ 0, 290, 290, 0, 290, 874, 290, 0,
1356
+ 290, 290, 0, 18, 18, 0, 593, 593,
1357
+ 0, 18, 598, 18, 0, 18, 18, 0,
1358
+ 627, 627, 0, 39, 881, 39, 0, 39,
1359
+ 39, 0, 713, 713, 0, 39, 718, 39,
1360
+ 0, 39, 39, 0, 0
1361
+ ]
1362
+
1363
+ class << self
1364
+ attr_accessor :_interval_expression_trans_actions
1365
+ private :_interval_expression_trans_actions, :_interval_expression_trans_actions=
1366
+ end
1367
+ self._interval_expression_trans_actions = [
1368
+ 0, 0, 0, 0, 0, 0, 0, 0,
1369
+ 2, 1, 0, 0, 0, 1, 0, 0,
1370
+ 0, 1, 0, 1, 0, 1, 0, 1,
1371
+ 3, 1, 0, 2, 2, 2, 2, 2,
1372
+ 0, 0, 2, 0, 0, 2, 2, 2,
1373
+ 0, 2, 0, 2, 2, 0, 2, 1,
1374
+ 0, 0, 0, 1, 0, 0, 1, 0,
1375
+ 0, 0, 1, 0, 0, 0, 0, 1,
1376
+ 0, 1, 0, 0, 1, 0, 0, 0,
1377
+ 0, 0, 0, 0, 0, 1, 0, 1,
1378
+ 0, 1, 0, 0, 0, 0, 0, 0,
1379
+ 0, 0, 0, 1, 0, 1, 0, 1,
1380
+ 0, 1, 0, 1, 0, 0, 0, 0,
1381
+ 1, 0, 2, 2, 2, 2, 2, 2,
1382
+ 2, 0, 2, 2, 2, 2, 2, 0,
1383
+ 2, 1, 0, 0, 0, 0, 0, 0,
1384
+ 1, 0, 0, 0, 0, 0, 1, 0,
1385
+ 0, 1, 0, 0, 0, 1, 0, 1,
1386
+ 0, 1, 0, 1, 0, 1, 0, 1,
1387
+ 0, 0, 0, 0, 0, 0, 0, 0,
1388
+ 0, 1, 0, 1, 0, 1, 0, 1,
1389
+ 0, 1, 0, 0, 0, 0, 0, 0,
1390
+ 0, 0, 1, 0, 1, 0, 1, 0,
1391
+ 1, 0, 1, 0, 1, 0, 1, 0,
1392
+ 0, 0, 0, 1, 0, 2, 2, 2,
1393
+ 2, 2, 2, 2, 0, 2, 2, 2,
1394
+ 2, 2, 0, 2, 1, 0, 0, 0,
1395
+ 0, 0, 0, 1, 0, 0, 0, 0,
1396
+ 0, 1, 0, 0, 1, 0, 0, 0,
1397
+ 1, 0, 1, 0, 1, 0, 1, 0,
1398
+ 1, 0, 1, 0, 0, 0, 1, 0,
1399
+ 1, 0, 1, 0, 1, 0, 1, 0,
1400
+ 1, 0, 1, 0, 0, 1, 0, 0,
1401
+ 0, 1, 0, 0, 0, 1, 0, 1,
1402
+ 0, 0, 1, 0, 0, 0, 0, 0,
1403
+ 0, 0, 0, 1, 0, 1, 0, 1,
1404
+ 0, 1, 0, 1, 0, 1, 0, 0,
1405
+ 1, 0, 0, 1, 0, 1, 0, 1,
1406
+ 0, 1, 0, 1, 0, 1, 0, 1,
1407
+ 0, 1, 0, 1, 0, 1, 0, 1,
1408
+ 0, 1, 0, 1, 0, 1, 0, 1,
1409
+ 0, 1, 0, 1, 0, 1, 0, 1,
1410
+ 0, 1, 0, 0, 0, 0, 1, 0,
1411
+ 1, 0, 0, 0, 0, 1, 0, 0,
1412
+ 0, 1, 0, 0, 0, 0, 1, 0,
1413
+ 0, 0, 0, 0, 1, 0, 1, 0,
1414
+ 1, 0, 0, 1, 0, 1, 0, 0,
1415
+ 0, 0, 0, 0, 1, 0, 0, 0,
1416
+ 1, 0, 0, 0, 0, 1, 0, 0,
1417
+ 0, 0, 0, 0, 0, 0, 0, 1,
1418
+ 0, 1, 0, 0, 0, 1, 0, 0,
1419
+ 0, 0, 0, 0, 0, 0, 0, 1,
1420
+ 0, 0, 0, 0, 0, 1, 0, 0,
1421
+ 0, 0, 0, 0, 1, 0, 0, 0,
1422
+ 0, 0, 1, 0, 0, 0, 0, 0,
1423
+ 0, 1, 0, 0, 0, 0, 0, 0,
1424
+ 1, 0, 0, 0, 0, 0, 0, 0,
1425
+ 1, 0, 0, 0, 0, 0, 0, 0,
1426
+ 1, 0, 0, 0, 0, 0, 0, 1,
1427
+ 0, 0, 0, 0, 0, 0, 0, 1,
1428
+ 0, 0, 0, 0, 0, 0, 0, 0,
1429
+ 1, 0, 0, 0, 0, 0, 0, 0,
1430
+ 0, 0, 1, 0, 0, 0, 0, 0,
1431
+ 0, 1, 0, 0, 0, 0, 0, 0,
1432
+ 0, 1, 0, 0, 0, 0, 0, 0,
1433
+ 0, 0, 0, 1, 0, 0, 0, 0,
1434
+ 0, 0, 0, 0, 1, 0, 0, 0,
1435
+ 0, 0, 0, 0, 0, 0, 1, 0,
1436
+ 1, 0, 0, 0, 0, 0, 0, 0,
1437
+ 0, 0, 1, 0, 0, 0, 0, 0,
1438
+ 0, 0, 0, 0, 1, 0, 0, 0,
1439
+ 0, 1, 0, 0, 1, 0, 0, 2,
1440
+ 1, 0, 0, 0, 0, 1, 0, 0,
1441
+ 0, 0, 1, 0, 1, 0, 1, 0,
1442
+ 1, 0, 0, 1, 0, 2, 2, 2,
1443
+ 2, 2, 2, 2, 2, 2, 2, 2,
1444
+ 2, 0, 2, 1, 0, 0, 0, 0,
1445
+ 0, 0, 1, 0, 0, 0, 0, 0,
1446
+ 0, 1, 0, 0, 0, 0, 0, 0,
1447
+ 1, 0, 0, 0, 0, 0, 0, 1,
1448
+ 0, 0, 0, 1, 0, 1, 0, 1,
1449
+ 0, 1, 0, 1, 0, 0, 1, 0,
1450
+ 0, 0, 1, 0, 1, 0, 1, 0,
1451
+ 0, 1, 0, 1, 0, 1, 0, 1,
1452
+ 0, 1, 0, 1, 0, 0, 1, 0,
1453
+ 1, 0, 1, 0, 1, 0, 1, 0,
1454
+ 1, 0, 1, 0, 1, 0, 1, 0,
1455
+ 1, 0, 1, 0, 1, 0, 1, 0,
1456
+ 1, 0, 1, 0, 0, 1, 0, 0,
1457
+ 0, 1, 0, 0, 0, 1, 0, 1,
1458
+ 0, 0, 1, 0, 0, 0, 0, 0,
1459
+ 0, 0, 0, 1, 0, 1, 0, 1,
1460
+ 0, 1, 0, 1, 0, 1, 0, 0,
1461
+ 1, 0, 0, 1, 0, 1, 0, 1,
1462
+ 0, 1, 0, 1, 0, 1, 0, 1,
1463
+ 0, 1, 0, 1, 0, 1, 0, 1,
1464
+ 0, 1, 0, 1, 0, 1, 0, 1,
1465
+ 0, 1, 0, 1, 0, 1, 0, 1,
1466
+ 0, 1, 0, 0, 0, 0, 1, 0,
1467
+ 1, 0, 0, 0, 0, 1, 0, 0,
1468
+ 0, 1, 0, 0, 0, 0, 1, 0,
1469
+ 0, 0, 0, 0, 1, 0, 1, 0,
1470
+ 1, 0, 0, 1, 0, 1, 0, 0,
1471
+ 0, 0, 0, 0, 1, 0, 0, 0,
1472
+ 1, 0, 0, 0, 0, 1, 0, 0,
1473
+ 0, 0, 0, 0, 0, 0, 0, 1,
1474
+ 0, 1, 0, 0, 0, 1, 0, 0,
1475
+ 0, 0, 0, 0, 0, 0, 0, 1,
1476
+ 0, 0, 0, 0, 0, 1, 0, 0,
1477
+ 0, 0, 0, 0, 1, 0, 0, 0,
1478
+ 0, 0, 1, 0, 0, 0, 0, 0,
1479
+ 0, 1, 0, 0, 0, 0, 0, 0,
1480
+ 1, 0, 0, 0, 0, 0, 0, 0,
1481
+ 1, 0, 0, 0, 0, 0, 0, 0,
1482
+ 1, 0, 0, 0, 0, 0, 0, 1,
1483
+ 0, 0, 0, 0, 0, 0, 0, 1,
1484
+ 0, 0, 0, 0, 0, 0, 0, 0,
1485
+ 1, 0, 0, 0, 0, 0, 0, 0,
1486
+ 0, 0, 1, 0, 0, 0, 0, 0,
1487
+ 0, 1, 0, 0, 0, 0, 0, 0,
1488
+ 0, 1, 0, 0, 0, 0, 0, 0,
1489
+ 0, 0, 0, 1, 0, 0, 0, 0,
1490
+ 0, 0, 0, 0, 1, 0, 0, 0,
1491
+ 0, 0, 0, 0, 0, 0, 1, 0,
1492
+ 1, 0, 0, 0, 0, 0, 0, 0,
1493
+ 0, 0, 1, 0, 0, 0, 0, 0,
1494
+ 0, 0, 0, 0, 1, 0, 0, 0,
1495
+ 0, 1, 0, 0, 1, 0, 0, 2,
1496
+ 1, 0, 0, 0, 0, 1, 0, 0,
1497
+ 0, 0, 1, 0, 1, 0, 1, 0,
1498
+ 1, 0, 0, 1, 0, 2, 2, 2,
1499
+ 2, 2, 2, 2, 2, 2, 2, 2,
1500
+ 2, 0, 2, 1, 0, 0, 0, 0,
1501
+ 0, 0, 1, 0, 0, 0, 0, 0,
1502
+ 0, 1, 0, 0, 0, 0, 0, 0,
1503
+ 1, 0, 0, 0, 0, 0, 0, 1,
1504
+ 0, 0, 0, 1, 0, 1, 0, 1,
1505
+ 0, 1, 0, 1, 0, 0, 1, 0,
1506
+ 1, 0, 1, 0, 0, 1, 0, 0,
1507
+ 0, 1, 0, 1, 0, 1, 0, 1,
1508
+ 0, 1, 0, 1, 0, 1, 0, 0,
1509
+ 0, 0, 1, 0, 2, 2, 2, 2,
1510
+ 2, 2, 2, 0, 2, 2, 2, 2,
1511
+ 2, 0, 2, 1, 0, 0, 0, 0,
1512
+ 0, 0, 1, 0, 0, 0, 0, 0,
1513
+ 1, 0, 0, 1, 0, 0, 0, 1,
1514
+ 0, 1, 0, 1, 0, 1, 0, 1,
1515
+ 0, 1, 0, 0, 0, 0, 0, 1,
1516
+ 0, 1, 0, 1, 0, 1, 0, 1,
1517
+ 0, 0, 0, 0, 1, 0, 1, 0,
1518
+ 1, 0, 1, 0, 1, 0, 0, 0,
1519
+ 0, 1, 0, 2, 2, 2, 2, 2,
1520
+ 2, 2, 0, 2, 2, 2, 2, 2,
1521
+ 0, 2, 1, 0, 0, 0, 0, 0,
1522
+ 0, 1, 0, 0, 0, 0, 0, 1,
1523
+ 0, 0, 1, 0, 0, 0, 1, 0,
1524
+ 1, 0, 1, 0, 1, 0, 1, 0,
1525
+ 1, 0, 0, 0, 1, 0, 1, 0,
1526
+ 1, 0, 1, 0, 1, 0, 1, 0,
1527
+ 1, 0, 0, 1, 0, 0, 0, 1,
1528
+ 0, 0, 0, 1, 0, 1, 0, 0,
1529
+ 1, 0, 0, 0, 0, 0, 0, 0,
1530
+ 0, 1, 0, 1, 0, 1, 0, 1,
1531
+ 0, 1, 0, 1, 0, 0, 1, 0,
1532
+ 0, 1, 0, 1, 0, 1, 0, 1,
1533
+ 0, 1, 0, 1, 0, 1, 0, 1,
1534
+ 0, 1, 0, 1, 0, 1, 0, 1,
1535
+ 0, 1, 0, 1, 0, 1, 0, 1,
1536
+ 0, 1, 0, 1, 0, 1, 0, 1,
1537
+ 0, 0, 0, 0, 1, 0, 1, 0,
1538
+ 0, 0, 0, 1, 0, 0, 0, 1,
1539
+ 0, 0, 0, 0, 1, 0, 0, 0,
1540
+ 0, 0, 1, 0, 1, 0, 1, 0,
1541
+ 0, 1, 0, 1, 0, 0, 0, 0,
1542
+ 0, 0, 1, 0, 0, 0, 1, 0,
1543
+ 0, 0, 0, 1, 0, 0, 0, 0,
1544
+ 0, 0, 0, 0, 0, 1, 0, 1,
1545
+ 0, 0, 0, 1, 0, 0, 0, 0,
1546
+ 0, 0, 0, 0, 0, 1, 0, 0,
1547
+ 0, 0, 0, 1, 0, 0, 0, 0,
1548
+ 0, 0, 1, 0, 0, 0, 0, 0,
1549
+ 1, 0, 0, 0, 0, 0, 0, 1,
1550
+ 0, 0, 0, 0, 0, 0, 1, 0,
1551
+ 0, 0, 0, 0, 0, 0, 1, 0,
1552
+ 0, 0, 0, 0, 0, 0, 1, 0,
1553
+ 0, 0, 0, 0, 0, 1, 0, 0,
1554
+ 0, 0, 0, 0, 0, 1, 0, 0,
1555
+ 0, 0, 0, 0, 0, 0, 1, 0,
1556
+ 0, 0, 0, 0, 0, 0, 0, 0,
1557
+ 1, 0, 0, 0, 0, 0, 0, 1,
1558
+ 0, 0, 0, 0, 0, 0, 0, 1,
1559
+ 0, 0, 0, 0, 0, 0, 0, 0,
1560
+ 0, 1, 0, 0, 0, 0, 0, 0,
1561
+ 0, 0, 1, 0, 0, 0, 0, 0,
1562
+ 0, 0, 0, 0, 1, 0, 1, 0,
1563
+ 0, 0, 0, 0, 0, 0, 0, 0,
1564
+ 1, 0, 0, 0, 0, 0, 0, 0,
1565
+ 0, 0, 1, 0, 0, 0, 0, 1,
1566
+ 0, 0, 1, 0, 0, 2, 1, 0,
1567
+ 0, 0, 0, 1, 0, 0, 0, 0,
1568
+ 1, 0, 1, 0, 1, 0, 1, 0,
1569
+ 0, 1, 0, 2, 2, 2, 2, 2,
1570
+ 2, 2, 2, 2, 2, 2, 2, 0,
1571
+ 2, 1, 0, 0, 0, 0, 0, 0,
1572
+ 1, 0, 0, 0, 0, 0, 0, 1,
1573
+ 0, 0, 0, 0, 0, 0, 1, 0,
1574
+ 0, 0, 0, 0, 0, 1, 0, 0,
1575
+ 0, 1, 0, 1, 0, 1, 0, 1,
1576
+ 0, 1, 0, 0, 1, 0, 1, 0,
1577
+ 1, 0, 0, 1, 0, 0, 0, 1,
1578
+ 0, 1, 0, 1, 0, 1, 0, 1,
1579
+ 0, 1, 0, 1, 0, 0, 1, 0,
1580
+ 0, 0, 1, 0, 0, 0, 1, 0,
1581
+ 1, 0, 0, 1, 0, 0, 0, 0,
1582
+ 0, 0, 0, 0, 1, 0, 1, 0,
1583
+ 1, 0, 1, 0, 1, 0, 1, 0,
1584
+ 0, 1, 0, 0, 1, 0, 1, 0,
1585
+ 1, 0, 1, 0, 1, 0, 1, 0,
1586
+ 1, 0, 1, 0, 1, 0, 1, 0,
1587
+ 1, 0, 1, 0, 1, 0, 1, 0,
1588
+ 1, 0, 1, 0, 1, 0, 1, 0,
1589
+ 1, 0, 1, 0, 0, 0, 0, 1,
1590
+ 0, 1, 0, 0, 0, 0, 1, 0,
1591
+ 0, 0, 1, 0, 0, 0, 0, 1,
1592
+ 0, 0, 0, 0, 0, 1, 0, 1,
1593
+ 0, 1, 0, 0, 1, 0, 1, 0,
1594
+ 0, 0, 0, 0, 0, 1, 0, 0,
1595
+ 0, 1, 0, 0, 0, 0, 1, 0,
1596
+ 0, 0, 0, 0, 0, 0, 0, 0,
1597
+ 1, 0, 1, 0, 0, 0, 1, 0,
1598
+ 0, 0, 0, 0, 0, 0, 0, 0,
1599
+ 1, 0, 0, 0, 0, 0, 1, 0,
1600
+ 0, 0, 0, 0, 0, 1, 0, 0,
1601
+ 0, 0, 0, 1, 0, 0, 0, 0,
1602
+ 0, 0, 1, 0, 0, 0, 0, 0,
1603
+ 0, 1, 0, 0, 0, 0, 0, 0,
1604
+ 0, 1, 0, 0, 0, 0, 0, 0,
1605
+ 0, 1, 0, 0, 0, 0, 0, 0,
1606
+ 1, 0, 0, 0, 0, 0, 0, 0,
1607
+ 1, 0, 0, 0, 0, 0, 0, 0,
1608
+ 0, 1, 0, 0, 0, 0, 0, 0,
1609
+ 0, 0, 0, 1, 0, 0, 0, 0,
1610
+ 0, 0, 1, 0, 0, 0, 0, 0,
1611
+ 0, 0, 1, 0, 0, 0, 0, 0,
1612
+ 0, 0, 0, 0, 1, 0, 0, 0,
1613
+ 0, 0, 0, 0, 0, 1, 0, 0,
1614
+ 0, 0, 0, 0, 0, 0, 0, 1,
1615
+ 0, 1, 0, 0, 0, 0, 0, 0,
1616
+ 0, 0, 0, 1, 0, 0, 0, 0,
1617
+ 0, 0, 0, 0, 0, 1, 0, 0,
1618
+ 0, 0, 1, 0, 0, 1, 0, 0,
1619
+ 2, 1, 0, 0, 0, 0, 1, 0,
1620
+ 0, 0, 0, 1, 0, 1, 0, 1,
1621
+ 0, 1, 0, 0, 1, 0, 2, 2,
1622
+ 2, 2, 2, 2, 2, 2, 2, 2,
1623
+ 2, 2, 0, 2, 1, 0, 0, 0,
1624
+ 0, 0, 0, 1, 0, 0, 0, 0,
1625
+ 0, 0, 1, 0, 0, 0, 0, 0,
1626
+ 0, 1, 0, 0, 0, 0, 0, 0,
1627
+ 1, 0, 0, 0, 1, 0, 1, 0,
1628
+ 1, 0, 1, 0, 1, 0, 0, 1,
1629
+ 0, 0, 0, 1, 0, 1, 0, 1,
1630
+ 0, 0, 1, 0, 1, 0, 1, 0,
1631
+ 1, 0, 1, 0, 1, 0, 0, 1,
1632
+ 0, 1, 0, 1, 0, 1, 0, 1,
1633
+ 0, 1, 0, 1, 0, 0, 1, 0,
1634
+ 1, 0, 1, 0, 1, 0, 1, 0,
1635
+ 1, 0, 1, 0, 1, 0, 1, 0,
1636
+ 1, 0, 1, 0, 0, 1, 0, 0,
1637
+ 1, 0, 1, 0, 1, 0, 1, 0,
1638
+ 1, 0, 1, 0, 1, 0, 1, 0,
1639
+ 1, 0, 1, 0, 1, 0, 1, 0,
1640
+ 1, 0, 1, 0, 1, 0, 1, 0,
1641
+ 1, 0, 1, 0, 1, 0, 1, 0,
1642
+ 1, 0, 0, 0, 0, 0, 0, 1,
1643
+ 0, 1, 0, 0, 0, 1, 0, 0,
1644
+ 0, 0, 0, 0, 1, 0, 0, 0,
1645
+ 0, 0, 1, 0, 0, 0, 0, 0,
1646
+ 0, 1, 0, 0, 0, 0, 0, 0,
1647
+ 0, 1, 0, 0, 0, 0, 0, 0,
1648
+ 1, 0, 0, 0, 0, 0, 0, 1,
1649
+ 0, 1, 0, 0, 0, 0, 0, 0,
1650
+ 1, 0, 0, 0, 1, 0, 0, 1,
1651
+ 0, 0, 0, 1, 0, 1, 3, 1,
1652
+ 0, 0, 1, 0, 2, 2, 2, 2,
1653
+ 2, 2, 2, 2, 2, 2, 2, 2,
1654
+ 0, 2, 1, 0, 1, 0, 1, 0,
1655
+ 1, 0, 1, 0, 1, 0, 1, 3,
1656
+ 1, 0, 0, 1, 0, 1, 3, 1,
1657
+ 0, 0, 1, 0, 2, 2, 2, 2,
1658
+ 2, 2, 2, 2, 2, 0, 2, 2,
1659
+ 2, 0, 2, 1, 0, 1, 3, 1,
1660
+ 0, 0, 1, 0, 1, 0, 0, 1,
1661
+ 0, 0, 2, 1, 0, 0, 0, 0,
1662
+ 1, 0, 0, 0, 0, 1, 0, 1,
1663
+ 0, 1, 0, 1, 0, 1, 0, 1,
1664
+ 0, 1, 0, 1, 0, 0, 0, 0,
1665
+ 0, 0, 0, 0, 0, 0, 1, 0,
1666
+ 1, 0, 1, 0, 1, 0, 1, 0,
1667
+ 1, 0, 1, 0, 1, 0, 1, 0,
1668
+ 0, 1, 0, 1, 0, 1, 0, 1,
1669
+ 0, 1, 0, 1, 0, 0, 0, 0,
1670
+ 1, 0, 2, 2, 2, 2, 2, 2,
1671
+ 2, 0, 2, 2, 2, 2, 2, 0,
1672
+ 2, 1, 0, 0, 0, 0, 0, 0,
1673
+ 1, 0, 0, 0, 0, 0, 1, 0,
1674
+ 0, 1, 0, 0, 0, 1, 0, 1,
1675
+ 0, 1, 0, 1, 0, 1, 0, 1,
1676
+ 4, 4, 1, 0, 0, 0, 0, 0,
1677
+ 0, 0, 0, 2, 1, 0, 0, 0,
1678
+ 1, 0, 0, 0, 1, 0, 1, 0,
1679
+ 1, 0, 1, 3, 1, 0, 2, 2,
1680
+ 2, 2, 2, 0, 2, 0, 0, 2,
1681
+ 2, 2, 0, 2, 0, 2, 2, 0,
1682
+ 2, 1, 0, 0, 0, 1, 0, 0,
1683
+ 1, 0, 0, 0, 1, 0, 0, 0,
1684
+ 0, 1, 0, 1, 0, 0, 1, 0,
1685
+ 0, 0, 0, 0, 0, 0, 0, 1,
1686
+ 0, 1, 0, 1, 0, 1, 0, 1,
1687
+ 0, 1, 0, 0, 1, 0, 0, 1,
1688
+ 0, 1, 0, 1, 0, 1, 0, 1,
1689
+ 0, 1, 0, 1, 0, 1, 0, 1,
1690
+ 0, 1, 0, 1, 0, 1, 0, 1,
1691
+ 0, 1, 0, 1, 0, 1, 0, 1,
1692
+ 0, 1, 0, 1, 0, 1, 0, 1,
1693
+ 0, 0, 0, 0, 0, 0, 1, 0,
1694
+ 1, 0, 0, 0, 1, 0, 0, 0,
1695
+ 0, 0, 0, 1, 0, 0, 0, 0,
1696
+ 0, 1, 0, 0, 0, 0, 0, 0,
1697
+ 1, 0, 0, 0, 0, 0, 0, 0,
1698
+ 1, 0, 0, 0, 0, 0, 0, 1,
1699
+ 0, 0, 0, 0, 0, 0, 1, 0,
1700
+ 1, 0, 0, 0, 0, 0, 0, 1,
1701
+ 0, 0, 0, 1, 0, 0, 1, 0,
1702
+ 0, 0, 1, 0, 1, 3, 1, 0,
1703
+ 0, 1, 0, 2, 2, 2, 2, 2,
1704
+ 2, 2, 2, 2, 2, 2, 2, 0,
1705
+ 2, 1, 0, 1, 0, 1, 0, 1,
1706
+ 0, 1, 0, 1, 0, 1, 3, 1,
1707
+ 0, 0, 1, 0, 1, 3, 1, 0,
1708
+ 0, 1, 0, 2, 2, 2, 2, 2,
1709
+ 2, 2, 2, 2, 0, 2, 2, 2,
1710
+ 0, 2, 1, 0, 1, 3, 1, 0,
1711
+ 0, 1, 0, 0, 0, 0, 1, 0,
1712
+ 0, 0, 1, 0, 1, 0, 1, 4,
1713
+ 0, 4, 1, 0, 0, 0, 0, 0,
1714
+ 0, 0, 0, 2, 1, 0, 1, 0,
1715
+ 0, 1, 0, 0, 2, 1, 0, 0,
1716
+ 0, 0, 1, 0, 0, 0, 0, 1,
1717
+ 0, 1, 0, 1, 0, 1, 0, 1,
1718
+ 0, 1, 0, 1, 0, 1, 0, 0,
1719
+ 0, 0, 0, 0, 0, 0, 0, 1,
1720
+ 0, 1, 0, 1, 0, 1, 0, 1,
1721
+ 0, 1, 0, 1, 0, 1, 0, 1,
1722
+ 0, 0, 1, 0, 1, 0, 0, 0,
1723
+ 1, 0, 1, 0, 1, 0, 0, 0,
1724
+ 1, 0, 0, 0, 0, 0, 0, 0,
1725
+ 2, 1, 0, 0, 1, 0, 1, 0,
1726
+ 1, 0, 0, 0, 1, 0, 1, 0,
1727
+ 1, 0, 0, 1, 0, 1, 0, 1,
1728
+ 0, 1, 0, 1, 4, 4, 1, 0,
1729
+ 0, 1, 0, 0, 0, 1, 0, 0,
1730
+ 0, 1, 0, 1, 0, 0, 1, 0,
1731
+ 0, 0, 0, 0, 0, 0, 0, 1,
1732
+ 0, 1, 0, 1, 5, 0, 5, 1,
1733
+ 5, 5, 1, 0, 1, 0, 1, 0,
1734
+ 1, 0, 0, 1, 0, 0, 1, 0,
1735
+ 1, 0, 1, 0, 1, 0, 1, 0,
1736
+ 1, 0, 1, 0, 1, 0, 1, 0,
1737
+ 1, 0, 1, 0, 1, 0, 1, 0,
1738
+ 1, 0, 1, 0, 1, 0, 1, 0,
1739
+ 1, 0, 1, 0, 1, 0, 0, 0,
1740
+ 0, 1, 0, 1, 0, 0, 0, 0,
1741
+ 1, 0, 0, 0, 1, 0, 0, 0,
1742
+ 0, 1, 0, 0, 0, 0, 0, 1,
1743
+ 0, 1, 0, 1, 0, 0, 1, 0,
1744
+ 1, 0, 0, 0, 0, 0, 0, 1,
1745
+ 0, 0, 0, 1, 0, 0, 0, 0,
1746
+ 1, 0, 0, 0, 0, 0, 0, 0,
1747
+ 0, 0, 1, 0, 1, 0, 0, 0,
1748
+ 1, 0, 0, 0, 0, 0, 0, 0,
1749
+ 0, 0, 1, 0, 0, 0, 0, 0,
1750
+ 1, 0, 0, 0, 0, 0, 0, 1,
1751
+ 0, 0, 0, 0, 0, 1, 0, 0,
1752
+ 0, 0, 0, 0, 1, 0, 0, 0,
1753
+ 0, 0, 0, 1, 0, 0, 0, 0,
1754
+ 0, 0, 0, 1, 0, 0, 0, 0,
1755
+ 0, 0, 0, 1, 0, 0, 0, 0,
1756
+ 0, 0, 1, 0, 0, 0, 0, 0,
1757
+ 0, 0, 1, 0, 0, 0, 0, 0,
1758
+ 0, 0, 0, 1, 0, 0, 0, 0,
1759
+ 0, 0, 0, 0, 0, 1, 0, 0,
1760
+ 0, 0, 0, 0, 1, 0, 0, 0,
1761
+ 0, 0, 0, 0, 1, 0, 0, 0,
1762
+ 0, 0, 0, 0, 0, 0, 1, 0,
1763
+ 0, 0, 0, 0, 0, 0, 0, 1,
1764
+ 0, 0, 0, 0, 0, 0, 0, 0,
1765
+ 0, 1, 0, 1, 0, 0, 0, 0,
1766
+ 0, 0, 0, 0, 0, 1, 0, 0,
1767
+ 0, 0, 0, 0, 0, 0, 0, 1,
1768
+ 0, 0, 0, 0, 1, 0, 0, 1,
1769
+ 0, 0, 2, 1, 0, 0, 0, 0,
1770
+ 1, 0, 0, 0, 0, 1, 0, 1,
1771
+ 0, 1, 0, 1, 0, 0, 1, 0,
1772
+ 2, 2, 2, 2, 2, 2, 2, 2,
1773
+ 2, 2, 2, 2, 0, 2, 1, 0,
1774
+ 0, 0, 0, 0, 0, 1, 0, 0,
1775
+ 0, 0, 0, 0, 1, 0, 0, 0,
1776
+ 0, 0, 0, 1, 0, 0, 0, 0,
1777
+ 0, 0, 1, 0, 0, 0, 1, 0,
1778
+ 1, 0, 1, 0, 1, 0, 1, 0,
1779
+ 0, 1, 0, 1, 0, 1, 0, 0,
1780
+ 1, 0, 0, 0, 1, 0, 0, 0,
1781
+ 1, 0, 1, 0, 1, 0, 0, 0,
1782
+ 1, 0, 0, 0, 0, 0, 0, 0,
1783
+ 2, 1, 0, 0, 1, 0, 1, 0,
1784
+ 1, 0, 0, 0, 1, 0, 1, 0,
1785
+ 1, 0, 0, 1, 0, 1, 0, 1,
1786
+ 0, 1, 0, 1, 0, 1, 0, 1,
1787
+ 7, 7, 0, 9, 0, 9, 0, 4,
1788
+ 4, 0, 4, 0, 4, 0, 0, 0,
1789
+ 0, 0, 0, 0, 0, 0, 0, 4,
1790
+ 4, 0, 5, 0, 5, 0, 5, 5,
1791
+ 0, 14, 14, 0, 14, 0, 14, 0,
1792
+ 0, 0, 0, 0, 0, 0, 0, 0,
1793
+ 0, 14, 14, 0, 15, 0, 15, 0,
1794
+ 15, 15, 0, 9, 9, 0, 0, 0,
1795
+ 0, 0, 0, 0, 0, 0, 0, 0,
1796
+ 7, 7, 0, 9, 0, 9, 0, 9,
1797
+ 9, 0, 0, 0, 0, 0, 0, 0,
1798
+ 0, 0, 0, 0, 0
1799
+ ]
1800
+
1801
+ class << self
1802
+ attr_accessor :_interval_expression_eof_actions
1803
+ private :_interval_expression_eof_actions, :_interval_expression_eof_actions=
1804
+ end
1805
+ self._interval_expression_eof_actions = [
1806
+ 0, 1, 1, 1, 1, 1, 1, 1,
1807
+ 1, 1, 1, 1, 1, 1, 1, 1,
1808
+ 1, 1, 1, 1, 1, 1, 1, 1,
1809
+ 1, 1, 1, 1, 1, 1, 1, 1,
1810
+ 1, 1, 1, 1, 1, 1, 1, 1,
1811
+ 1, 1, 1, 1, 1, 1, 1, 1,
1812
+ 1, 1, 1, 1, 1, 1, 1, 1,
1813
+ 1, 1, 1, 1, 1, 1, 1, 1,
1814
+ 1, 1, 1, 1, 1, 1, 1, 1,
1815
+ 1, 1, 1, 1, 1, 1, 1, 1,
1816
+ 1, 1, 1, 1, 1, 1, 1, 1,
1817
+ 1, 1, 1, 1, 1, 1, 1, 1,
1818
+ 1, 1, 1, 1, 1, 1, 1, 1,
1819
+ 1, 1, 1, 1, 1, 1, 1, 1,
1820
+ 1, 1, 1, 1, 1, 1, 1, 1,
1821
+ 1, 1, 1, 1, 1, 1, 1, 1,
1822
+ 1, 1, 1, 1, 1, 1, 1, 1,
1823
+ 1, 1, 1, 1, 1, 1, 1, 1,
1824
+ 1, 1, 1, 1, 1, 1, 1, 1,
1825
+ 1, 1, 1, 1, 1, 1, 1, 1,
1826
+ 1, 1, 1, 1, 1, 1, 1, 1,
1827
+ 1, 1, 1, 1, 1, 1, 1, 1,
1828
+ 1, 1, 1, 1, 1, 1, 1, 1,
1829
+ 1, 1, 1, 1, 1, 1, 1, 1,
1830
+ 1, 1, 1, 1, 1, 1, 1, 1,
1831
+ 1, 1, 1, 1, 1, 1, 1, 1,
1832
+ 1, 1, 1, 1, 1, 1, 1, 1,
1833
+ 1, 1, 1, 1, 1, 1, 1, 1,
1834
+ 1, 1, 1, 1, 1, 1, 1, 1,
1835
+ 1, 1, 1, 1, 1, 1, 1, 1,
1836
+ 1, 1, 1, 1, 1, 1, 1, 1,
1837
+ 1, 1, 1, 1, 1, 1, 1, 1,
1838
+ 1, 1, 1, 1, 1, 1, 1, 1,
1839
+ 1, 1, 1, 1, 1, 1, 1, 1,
1840
+ 1, 1, 1, 1, 1, 1, 1, 1,
1841
+ 1, 1, 1, 1, 1, 1, 1, 1,
1842
+ 1, 1, 1, 1, 1, 1, 1, 1,
1843
+ 1, 1, 1, 1, 1, 1, 1, 1,
1844
+ 1, 1, 1, 1, 1, 1, 1, 1,
1845
+ 1, 1, 1, 1, 1, 1, 1, 1,
1846
+ 1, 1, 1, 1, 1, 1, 1, 1,
1847
+ 1, 1, 1, 1, 1, 1, 1, 1,
1848
+ 1, 1, 1, 1, 1, 1, 1, 1,
1849
+ 1, 1, 1, 1, 1, 1, 1, 1,
1850
+ 1, 1, 1, 1, 1, 1, 1, 1,
1851
+ 1, 1, 1, 1, 1, 1, 1, 1,
1852
+ 1, 1, 1, 1, 1, 1, 1, 1,
1853
+ 1, 1, 1, 1, 1, 1, 1, 1,
1854
+ 1, 1, 1, 1, 1, 1, 1, 1,
1855
+ 1, 1, 1, 1, 1, 1, 1, 1,
1856
+ 1, 1, 1, 1, 1, 1, 1, 1,
1857
+ 1, 1, 1, 1, 1, 1, 1, 1,
1858
+ 1, 1, 1, 1, 1, 1, 1, 1,
1859
+ 1, 1, 1, 1, 1, 1, 1, 1,
1860
+ 1, 1, 1, 1, 1, 1, 1, 1,
1861
+ 1, 1, 1, 1, 1, 1, 1, 1,
1862
+ 1, 1, 1, 1, 1, 1, 1, 1,
1863
+ 1, 1, 1, 1, 1, 1, 1, 1,
1864
+ 1, 1, 1, 1, 1, 1, 1, 1,
1865
+ 1, 1, 1, 1, 1, 1, 1, 1,
1866
+ 1, 1, 1, 1, 1, 1, 1, 1,
1867
+ 1, 1, 1, 1, 1, 1, 1, 1,
1868
+ 1, 1, 1, 1, 1, 1, 1, 1,
1869
+ 1, 1, 1, 1, 1, 1, 1, 1,
1870
+ 1, 1, 1, 1, 1, 1, 1, 1,
1871
+ 1, 1, 1, 1, 1, 1, 1, 1,
1872
+ 1, 1, 1, 1, 1, 1, 1, 1,
1873
+ 1, 1, 1, 1, 1, 1, 1, 1,
1874
+ 1, 1, 1, 1, 1, 1, 1, 1,
1875
+ 1, 1, 1, 1, 1, 1, 1, 1,
1876
+ 1, 1, 1, 1, 1, 1, 1, 1,
1877
+ 1, 1, 1, 1, 1, 1, 1, 1,
1878
+ 1, 1, 1, 1, 1, 1, 1, 1,
1879
+ 1, 1, 1, 1, 1, 1, 1, 1,
1880
+ 1, 1, 1, 1, 1, 1, 1, 1,
1881
+ 1, 1, 1, 1, 1, 1, 1, 1,
1882
+ 1, 1, 1, 1, 1, 1, 1, 1,
1883
+ 1, 1, 1, 1, 1, 1, 1, 1,
1884
+ 1, 1, 1, 1, 1, 1, 1, 1,
1885
+ 1, 1, 1, 1, 1, 1, 1, 1,
1886
+ 1, 1, 1, 1, 1, 1, 1, 1,
1887
+ 1, 1, 1, 1, 1, 1, 1, 1,
1888
+ 1, 1, 1, 1, 1, 1, 1, 1,
1889
+ 1, 1, 1, 1, 1, 1, 1, 1,
1890
+ 1, 1, 1, 1, 1, 1, 1, 1,
1891
+ 1, 1, 1, 1, 1, 1, 1, 1,
1892
+ 1, 1, 1, 1, 1, 1, 1, 1,
1893
+ 1, 1, 1, 1, 1, 1, 1, 1,
1894
+ 1, 1, 1, 1, 1, 1, 1, 1,
1895
+ 1, 1, 1, 1, 1, 1, 1, 1,
1896
+ 1, 1, 1, 1, 1, 1, 1, 1,
1897
+ 1, 1, 1, 1, 1, 1, 1, 1,
1898
+ 1, 1, 1, 1, 1, 1, 1, 1,
1899
+ 1, 1, 1, 1, 1, 1, 1, 1,
1900
+ 1, 1, 1, 1, 1, 1, 1, 1,
1901
+ 1, 1, 1, 1, 1, 1, 1, 1,
1902
+ 1, 1, 1, 1, 1, 1, 1, 1,
1903
+ 1, 1, 1, 1, 1, 1, 1, 1,
1904
+ 1, 1, 1, 1, 1, 1, 1, 1,
1905
+ 1, 1, 1, 1, 1, 1, 1, 1,
1906
+ 1, 1, 1, 1, 1, 1, 1, 1,
1907
+ 1, 1, 1, 1, 1, 1, 1, 1,
1908
+ 1, 1, 1, 1, 1, 1, 1, 1,
1909
+ 1, 1, 1, 1, 1, 1, 1, 1,
1910
+ 1, 1, 1, 1, 1, 1, 1, 1,
1911
+ 1, 1, 1, 1, 1, 1, 1, 1,
1912
+ 1, 1, 1, 1, 1, 6, 8, 10,
1913
+ 10, 11, 11, 11, 12, 12, 10, 13,
1914
+ 13, 11, 11, 10, 10, 10, 13, 13,
1915
+ 11, 12, 12, 8, 16, 16, 16, 6,
1916
+ 8, 8, 16, 16, 16
1917
+ ]
1918
+
1919
+ class << self
1920
+ attr_accessor :interval_expression_start
1921
+ end
1922
+ self.interval_expression_start = 1;
1923
+ class << self
1924
+ attr_accessor :interval_expression_first_final
1925
+ end
1926
+ self.interval_expression_first_final = 853;
1927
+ class << self
1928
+ attr_accessor :interval_expression_error
1929
+ end
1930
+ self.interval_expression_error = 0;
1931
+
1932
+ class << self
1933
+ attr_accessor :interval_expression_en_main
1934
+ end
1935
+ self.interval_expression_en_main = 1;
1936
+
1937
+
1938
+
1939
+ # Words/phrases in the expression that we'll strip/ignore before parsing.
1940
+ COMMON_DECORATORS = [ 'and', 'then', /\s+from now/, 'the next' ];
1941
+
1942
+
1943
+ ########################################################################
1944
+ ### C L A S S M E T H O D S
1945
+ ########################################################################
1946
+
1947
+ ### Parse a schedule expression +exp+.
1948
+ ###
1949
+ ### Parsing defaults to Time.now(), but if passed a +time+ object,
1950
+ ### all contexual times (2pm) are relative to it. If you know when
1951
+ ### an expression was generated, you can 'reconstitute' an interval
1952
+ ### object this way.
1953
+ ###
1954
+ def self::parse( exp, time=nil )
1955
+
1956
+ # Normalize the expression before parsing
1957
+ #
1958
+ exp = exp.downcase.
1959
+ gsub( /(?:[^[a-z][0-9][\.\-:]\s]+)/, '' ). # . : - a-z 0-9 only
1960
+ gsub( Regexp.union(COMMON_DECORATORS), '' ). # remove common decorator words
1961
+ gsub( /\s+/, ' ' ). # collapse whitespace
1962
+ gsub( /([:\-])+/, '\1' ). # collapse multiple - or : chars
1963
+ gsub( /\.+$/, '' ) # trailing periods
1964
+
1965
+ event = new( exp, time || Time.now )
1966
+ data = event.instance_variable_get( :@data )
1967
+
1968
+ # Ragel interface variables
1969
+ #
1970
+ key = ''
1971
+ mark = 0
1972
+
1973
+ begin
1974
+ p ||= 0
1975
+ pe ||= data.length
1976
+ cs = interval_expression_start
1977
+ end
1978
+
1979
+ eof = pe
1980
+
1981
+ begin
1982
+ testEof = false
1983
+ _klen, _trans, _keys = nil
1984
+ _goto_level = 0
1985
+ _resume = 10
1986
+ _eof_trans = 15
1987
+ _again = 20
1988
+ _test_eof = 30
1989
+ _out = 40
1990
+ while true
1991
+ if _goto_level <= 0
1992
+ if p == pe
1993
+ _goto_level = _test_eof
1994
+ next
1995
+ end
1996
+ if cs == 0
1997
+ _goto_level = _out
1998
+ next
1999
+ end
2000
+ end
2001
+ if _goto_level <= _resume
2002
+ _keys = _interval_expression_key_offsets[cs]
2003
+ _trans = _interval_expression_index_offsets[cs]
2004
+ _klen = _interval_expression_single_lengths[cs]
2005
+ _break_match = false
2006
+
2007
+ begin
2008
+ if _klen > 0
2009
+ _lower = _keys
2010
+ _upper = _keys + _klen - 1
2011
+
2012
+ loop do
2013
+ break if _upper < _lower
2014
+ _mid = _lower + ( (_upper - _lower) >> 1 )
2015
+
2016
+ if data[p].ord < _interval_expression_trans_keys[_mid]
2017
+ _upper = _mid - 1
2018
+ elsif data[p].ord > _interval_expression_trans_keys[_mid]
2019
+ _lower = _mid + 1
2020
+ else
2021
+ _trans += (_mid - _keys)
2022
+ _break_match = true
2023
+ break
2024
+ end
2025
+ end # loop
2026
+ break if _break_match
2027
+ _keys += _klen
2028
+ _trans += _klen
2029
+ end
2030
+ _klen = _interval_expression_range_lengths[cs]
2031
+ if _klen > 0
2032
+ _lower = _keys
2033
+ _upper = _keys + (_klen << 1) - 2
2034
+ loop do
2035
+ break if _upper < _lower
2036
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
2037
+ if data[p].ord < _interval_expression_trans_keys[_mid]
2038
+ _upper = _mid - 2
2039
+ elsif data[p].ord > _interval_expression_trans_keys[_mid+1]
2040
+ _lower = _mid + 2
2041
+ else
2042
+ _trans += ((_mid - _keys) >> 1)
2043
+ _break_match = true
2044
+ break
2045
+ end
2046
+ end # loop
2047
+ break if _break_match
2048
+ _trans += _klen
2049
+ end
2050
+ end while false
2051
+ cs = _interval_expression_trans_targs[_trans];
2052
+
2053
+ if _interval_expression_trans_actions[_trans] != 0
2054
+
2055
+ case _interval_expression_trans_actions[_trans]
2056
+ when 2 then
2057
+ begin
2058
+ mark = p end
2059
+ when 1 then
2060
+ begin
2061
+ event.instance_variable_set( :@valid, false ) end
2062
+ when 3 then
2063
+ begin
2064
+ event.instance_variable_set( :@recurring, true ) end
2065
+ when 4 then
2066
+ begin
2067
+
2068
+ time = event.send( :extract, mark, p - mark )
2069
+ event.send( :set_starting, time, :time )
2070
+ end
2071
+ when 5 then
2072
+ begin
2073
+
2074
+ interval = event.send( :extract, mark, p - mark )
2075
+ event.send( :set_starting, interval, :interval )
2076
+ end
2077
+ when 9 then
2078
+ begin
2079
+
2080
+ interval = event.send( :extract, mark, p - mark )
2081
+ event.send( :set_interval, interval, :interval )
2082
+ end
2083
+ when 7 then
2084
+ begin
2085
+
2086
+ multiplier = event.send( :extract, mark, p - mark ).sub( / times/, '' )
2087
+ event.instance_variable_set( :@multiplier, multiplier.to_i )
2088
+ end
2089
+ when 14 then
2090
+ begin
2091
+
2092
+ time = event.send( :extract, mark, p - mark )
2093
+ event.send( :set_ending, time, :time )
2094
+ end
2095
+ when 15 then
2096
+ begin
2097
+
2098
+ interval = event.send( :extract, mark, p - mark )
2099
+ event.send( :set_ending, interval, :interval )
2100
+ end
2101
+ end # action switch
2102
+ end
2103
+
2104
+ end
2105
+ if _goto_level <= _again
2106
+ if cs == 0
2107
+ _goto_level = _out
2108
+ next
2109
+ end
2110
+ p += 1
2111
+ if p != pe
2112
+ _goto_level = _resume
2113
+ next
2114
+ end
2115
+ end
2116
+ if _goto_level <= _test_eof
2117
+ if p == eof
2118
+ begin
2119
+ case ( _interval_expression_eof_actions[cs] )
2120
+ when 1 then
2121
+ begin
2122
+ event.instance_variable_set( :@valid, false ) end
2123
+ when 10 then
2124
+ begin
2125
+
2126
+ time = event.send( :extract, mark, p - mark )
2127
+ event.send( :set_starting, time, :time )
2128
+ end
2129
+ begin
2130
+ event.instance_variable_set( :@valid, true ) end
2131
+ when 13 then
2132
+ begin
2133
+
2134
+ interval = event.send( :extract, mark, p - mark )
2135
+ event.send( :set_starting, interval, :interval )
2136
+ end
2137
+ begin
2138
+ event.instance_variable_set( :@valid, true ) end
2139
+ when 16 then
2140
+ begin
2141
+
2142
+ time = event.send( :extract, mark, p - mark )
2143
+ event.send( :set_interval, time, :time )
2144
+ end
2145
+ begin
2146
+ event.instance_variable_set( :@valid, true ) end
2147
+ when 8 then
2148
+ begin
2149
+
2150
+ interval = event.send( :extract, mark, p - mark )
2151
+ event.send( :set_interval, interval, :interval )
2152
+ end
2153
+ begin
2154
+ event.instance_variable_set( :@valid, true ) end
2155
+ when 6 then
2156
+ begin
2157
+
2158
+ multiplier = event.send( :extract, mark, p - mark ).sub( / times/, '' )
2159
+ event.instance_variable_set( :@multiplier, multiplier.to_i )
2160
+ end
2161
+ begin
2162
+ event.instance_variable_set( :@valid, true ) end
2163
+ when 11 then
2164
+ begin
2165
+
2166
+ time = event.send( :extract, mark, p - mark )
2167
+ event.send( :set_ending, time, :time )
2168
+ end
2169
+ begin
2170
+ event.instance_variable_set( :@valid, true ) end
2171
+ when 12 then
2172
+ begin
2173
+
2174
+ interval = event.send( :extract, mark, p - mark )
2175
+ event.send( :set_ending, interval, :interval )
2176
+ end
2177
+ begin
2178
+ event.instance_variable_set( :@valid, true ) end
2179
+ end
2180
+ end
2181
+ end
2182
+
2183
+ end
2184
+ if _goto_level <= _out
2185
+ break
2186
+ end
2187
+ end
2188
+ end
2189
+
2190
+
2191
+ # Attach final time logic and sanity checks.
2192
+ event.send( :finalize )
2193
+
2194
+ return event
2195
+ end
2196
+
2197
+
2198
+ ########################################################################
2199
+ ### I N S T A N C E M E T H O D S
2200
+ ########################################################################
2201
+
2202
+ ### Instantiate a new TimeExpression, provided an +expression+ string
2203
+ ### that describes when this event will take place in natural english,
2204
+ ### and a +base+ Time to perform calculations against.
2205
+ ###
2206
+ private_class_method :new
2207
+ def initialize( expression, base ) # :nodoc:
2208
+ @exp = expression
2209
+ @data = expression.to_s.unpack( 'c*' )
2210
+ @base = base
2211
+
2212
+ @valid = false
2213
+ @recurring = false
2214
+ @starting = nil
2215
+ @interval = nil
2216
+ @multiplier = nil
2217
+ @ending = nil
2218
+ end
2219
+
2220
+
2221
+ ######
2222
+ public
2223
+ ######
2224
+
2225
+ # Is the schedule expression parsable?
2226
+ attr_reader :valid
2227
+
2228
+ # Does this event repeat?
2229
+ attr_reader :recurring
2230
+
2231
+ # The valid start time for the schedule (for recurring events)
2232
+ attr_reader :starting
2233
+
2234
+ # The valid end time for the schedule (for recurring events)
2235
+ attr_reader :ending
2236
+
2237
+ # The interval to wait before the event should be acted on.
2238
+ attr_reader :interval
2239
+
2240
+ # An optional interval multipler for expressing counts.
2241
+ attr_reader :multiplier
2242
+
2243
+
2244
+ ### If this interval is on a stack somewhere and ready to
2245
+ ### fire, is it okay to do so based on the specified
2246
+ ### expression criteria?
2247
+ ###
2248
+ ### Returns +true+ if it should fire, +false+ if it should not
2249
+ ### but could at a later attempt, and +nil+ if the interval has
2250
+ ### expired.
2251
+ ###
2252
+ def fire?
2253
+ now = Time.now
2254
+
2255
+ # Interval has expired.
2256
+ return nil if self.ending && now > self.ending
2257
+
2258
+ # Interval is not yet in its current time window.
2259
+ return false if self.starting - now > 0
2260
+
2261
+ # Looking good.
2262
+ return true
2263
+ end
2264
+
2265
+
2266
+ ### Just return the original event expression.
2267
+ ###
2268
+ def to_s
2269
+ return @exp
2270
+ end
2271
+
2272
+
2273
+ ### Inspection string.
2274
+ ###
2275
+ def inspect
2276
+ return ( "<%s:0x%08x valid:%s recur:%s expression:%p " +
2277
+ "starting:%p interval:%p ending:%p>" ) % [
2278
+ self.class.name,
2279
+ self.object_id * 2,
2280
+ self.valid,
2281
+ self.recurring,
2282
+ self.to_s,
2283
+ self.starting,
2284
+ self.interval,
2285
+ self.ending
2286
+ ]
2287
+ end
2288
+
2289
+
2290
+ ### Comparable interface, order by interval, 'soonest' first.
2291
+ ###
2292
+ def <=>( other )
2293
+ return self.interval <=> other.interval
2294
+ end
2295
+
2296
+
2297
+ #########
2298
+ protected
2299
+ #########
2300
+
2301
+ ### Given a +start+ and +ending+ scanner position,
2302
+ ### return an ascii representation of the data slice.
2303
+ ###
2304
+ def extract( start, ending )
2305
+ slice = @data[ start, ending ]
2306
+ return '' unless slice
2307
+ return slice.pack( 'c*' )
2308
+ end
2309
+
2310
+
2311
+ ### Parse and set the starting attribute, given a +time_arg+
2312
+ ### string and the +type+ of string (interval or exact time)
2313
+ ###
2314
+ def set_starting( time_arg, type )
2315
+ start = self.get_time( time_arg, type )
2316
+ @starting = start
2317
+
2318
+ # If start time is expressed as a post-conditional (we've
2319
+ # already got an end time) we need to recalculate the end
2320
+ # as an offset from the start. The original parsed ending
2321
+ # arguments should have already been cached when it was
2322
+ # previously set.
2323
+ #
2324
+ if self.ending && self.recurring
2325
+ self.set_ending( *@ending_args )
2326
+ end
2327
+
2328
+ return @starting
2329
+ end
2330
+
2331
+
2332
+ ### Parse and set the interval attribute, given a +time_arg+
2333
+ ### string and the +type+ of string (interval or exact time)
2334
+ ###
2335
+ ### Perform consistency and sanity checks before returning an
2336
+ ### integer representing the amount of time needed to sleep before
2337
+ ### firing the event.
2338
+ ###
2339
+ def set_interval( time_arg, type )
2340
+ interval = nil
2341
+ if self.starting && type == :time
2342
+ raise Symphony::Metronome::TimeParseError, "That doesn't make sense, just use 'at [datetime]' instead"
2343
+ else
2344
+ interval = self.get_time( time_arg, type )
2345
+ interval = interval - @base
2346
+ end
2347
+
2348
+ @interval = interval
2349
+ return @interval
2350
+ end
2351
+
2352
+
2353
+ ### Parse and set the ending attribute, given a +time_arg+
2354
+ ### string and the +type+ of string (interval or exact time)
2355
+ ###
2356
+ ### Perform consistency and sanity checks before returning a
2357
+ ### Time object.
2358
+ ###
2359
+ def set_ending( time_arg, type )
2360
+ ending = nil
2361
+
2362
+ # Ending dates only make sense for recurring events.
2363
+ #
2364
+ if self.recurring
2365
+ @ending_args = [ time_arg, type ] # squirrel away for post-set starts
2366
+
2367
+ # Make the interval an offset of the start time, instead of now.
2368
+ #
2369
+ # This is the contextual difference between:
2370
+ # every minute until 6 hours from now (ending based on NOW)
2371
+ # and
2372
+ # starting in a year run every minute for 1 month (ending based on start time)
2373
+ #
2374
+ if self.starting && type == :interval
2375
+ diff = self.parse_interval( time_arg )
2376
+ ending = self.starting + diff
2377
+
2378
+ # (offset from now)
2379
+ #
2380
+ else
2381
+ ending = self.get_time( time_arg, type )
2382
+ end
2383
+
2384
+ # Check the end time is after the start time.
2385
+ #
2386
+ if self.starting && ending < self.starting
2387
+ raise Symphony::Metronome::TimeParseError, "recurring event ends before it begins"
2388
+ end
2389
+
2390
+ else
2391
+ self.log.debug "Ignoring ending date, event is not recurring."
2392
+ end
2393
+
2394
+ @ending = ending
2395
+ return @ending
2396
+ end
2397
+
2398
+
2399
+ ### Perform finishing logic and final sanity checks before returning
2400
+ ### a parsed object.
2401
+ ###
2402
+ def finalize
2403
+ raise Symphony::Metronome::TimeParseError, "unable to parse expression" unless self.valid
2404
+
2405
+ # Ensure start time is populated.
2406
+ #
2407
+ unless self.starting
2408
+ if self.recurring
2409
+ @starting = @base
2410
+ else
2411
+ raise Symphony::Metronome::TimeParseError, "non-deterministic expression" if self.interval.nil?
2412
+ @starting = @base + self.interval
2413
+ end
2414
+ end
2415
+
2416
+ # Alter the interval if a multiplier was specified.
2417
+ #
2418
+ if self.multiplier
2419
+ if self.ending
2420
+
2421
+ # Regular 'count' style multipler with end date.
2422
+ # (run 10 times a minute for 2 days)
2423
+ # Just divide the current interval by the count.
2424
+ #
2425
+ if self.interval
2426
+ @interval = self.interval.to_f / self.multiplier
2427
+
2428
+ # Timeboxed multiplier (start [date] run 10 times end [date])
2429
+ # Evenly spread the interval out over the time window.
2430
+ #
2431
+ else
2432
+ diff = self.ending - self.starting
2433
+ @interval = diff.to_f / self.multiplier
2434
+ end
2435
+
2436
+ # Regular 'count' style multipler (run 10 times a minute)
2437
+ # Just divide the current interval by the count.
2438
+ #
2439
+ else
2440
+ raise Symphony::Metronome::TimeParseError, "An end date or interval is required" unless self.interval
2441
+ @interval = self.interval.to_f / self.multiplier
2442
+ end
2443
+ end
2444
+ end
2445
+
2446
+
2447
+ ### Given a +time_arg+ string and a type (:interval or :time),
2448
+ ### dispatch to the appropriate parser.
2449
+ ###
2450
+ def get_time( time_arg, type )
2451
+ time = nil
2452
+
2453
+ if type == :interval
2454
+ secs = self.parse_interval( time_arg )
2455
+ time = @base + secs if secs
2456
+ end
2457
+
2458
+ if type == :time
2459
+ time = self.parse_time( time_arg )
2460
+ end
2461
+
2462
+ raise Symphony::Metronome::TimeParseError, "unable to parse time" if time.nil?
2463
+ return time
2464
+ end
2465
+
2466
+
2467
+ ### Parse a +time_arg+ string (anything parsable buy Time.parse())
2468
+ ### into a Time object.
2469
+ ###
2470
+ def parse_time( time_arg )
2471
+ time = Time.parse( time_arg, @base ) rescue nil
2472
+
2473
+ # Generated date is in the past.
2474
+ #
2475
+ if time && @base > time
2476
+
2477
+ # Ensure future dates for ambiguous times (2pm)
2478
+ time = time + 1.day if time_arg.length < 8
2479
+
2480
+ # Still in the past, abandon all hope.
2481
+ raise Symphony::Metronome::TimeParseError, "attempt to schedule in the past" if @base > time
2482
+ end
2483
+
2484
+ self.log.debug "Parsed %p (time) to: %p" % [ time_arg, time ]
2485
+ return time
2486
+ end
2487
+
2488
+
2489
+ ### Parse a +time_arg+ interval string ("30 seconds") into an
2490
+ ### Integer.
2491
+ ###
2492
+ def parse_interval( interval_arg )
2493
+ duration, span = interval_arg.split( /\s+/ )
2494
+
2495
+ # catch the 'a' or 'an' case (ex: "an hour")
2496
+ duration = 1 if duration.index( 'a' ) == 0
2497
+
2498
+ # catch the 'other' case, ie: 'every other hour'
2499
+ duration = 2 if duration == 'other'
2500
+
2501
+ # catch the singular case (ex: "hour")
2502
+ unless span
2503
+ span = duration
2504
+ duration = 1
2505
+ end
2506
+
2507
+ use_milliseconds = span.sub!( 'milli', '' )
2508
+ interval = calculate_seconds( duration.to_f, span.to_sym )
2509
+
2510
+ # milliseconds
2511
+ interval = duration.to_f / 1000 if use_milliseconds
2512
+
2513
+ self.log.debug "Parsed %p (interval) to: %p" % [ interval_arg, interval ]
2514
+ return interval
2515
+ end
2516
+
2517
+ end # class TimeExpression
2518
+