diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000000000000000000000000000000000000..1265fad1dda3727c3c6935a0cf2cc39e79ee2a39
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,8 @@
+include regex_2/*.c
+include regex_2/*.h
+include regex_2/*.py
+include regex_3/*.c
+include regex_3/*.h
+include regex_3/*.py
+include docs/*.*
+include tools/*.py
diff --git a/PKG-INFO b/PKG-INFO
index 0ba4a0e09180dd369adb517d7cb7774b6bf74920..584e08b0b87fda38c4edbc26210670f32c3cfb81 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,1024 +1,1086 @@
-Metadata-Version: 1.1
-Name: regex
-Version: 2019.08.19
-Summary: Alternative regular expression module, to replace re.
-Home-page: https://bitbucket.org/mrabarnett/mrab-regex
-Author: Matthew Barnett
-Author-email: regex@mrabarnett.plus.com
-License: Python Software Foundation License
-Description: Introduction
- ------------
-
- This regex implementation is backwards-compatible with the standard 're' module, but offers additional functionality.
-
- Note
- ----
-
- The re module's behaviour with zero-width matches changed in Python 3.7, and this module will follow that behaviour when compiled for Python 3.7.
-
- Old vs new behaviour
- --------------------
-
- In order to be compatible with the re module, this module has 2 behaviours:
-
- * **Version 0** behaviour (old behaviour, compatible with the re module):
-
- Please note that the re module's behaviour may change over time, and I'll endeavour to match that behaviour in version 0.
-
- * Indicated by the ``VERSION0`` or ``V0`` flag, or ``(?V0)`` in the pattern.
-
- * Zero-width matches are not handled correctly in the re module before Python 3.7. The behaviour in those earlier versions is:
-
- * ``.split`` won't split a string at a zero-width match.
-
- * ``.sub`` will advance by one character after a zero-width match.
-
- * Inline flags apply to the entire pattern, and they can't be turned off.
-
- * Only simple sets are supported.
-
- * Case-insensitive matches in Unicode use simple case-folding by default.
-
- * **Version 1** behaviour (new behaviour, possibly different from the re module):
-
- * Indicated by the ``VERSION1`` or ``V1`` flag, or ``(?V1)`` in the pattern.
-
- * Zero-width matches are handled correctly.
-
- * Inline flags apply to the end of the group or pattern, and they can be turned off.
-
- * Nested sets and set operations are supported.
-
- * Case-insensitive matches in Unicode use full case-folding by default.
-
- If no version is specified, the regex module will default to ``regex.DEFAULT_VERSION``.
-
- Case-insensitive matches in Unicode
- -----------------------------------
-
- The regex module supports both simple and full case-folding for case-insensitive matches in Unicode. Use of full case-folding can be turned on using the ``FULLCASE`` or ``F`` flag, or ``(?f)`` in the pattern. Please note that this flag affects how the ``IGNORECASE`` flag works; the ``FULLCASE`` flag itself does not turn on case-insensitive matching.
-
- In the version 0 behaviour, the flag is off by default.
-
- In the version 1 behaviour, the flag is on by default.
-
- Nested sets and set operations
- ------------------------------
-
- It's not possible to support both simple sets, as used in the re module, and nested sets at the same time because of a difference in the meaning of an unescaped ``"["`` in a set.
-
- For example, the pattern ``[[a-z]--[aeiou]]`` is treated in the version 0 behaviour (simple sets, compatible with the re module) as:
-
- * Set containing "[" and the letters "a" to "z"
-
- * Literal "--"
-
- * Set containing letters "a", "e", "i", "o", "u"
-
- * Literal "]"
-
- but in the version 1 behaviour (nested sets, enhanced behaviour) as:
-
- * Set which is:
-
- * Set containing the letters "a" to "z"
-
- * but excluding:
-
- * Set containing the letters "a", "e", "i", "o", "u"
-
- Version 0 behaviour: only simple sets are supported.
-
- Version 1 behaviour: nested sets and set operations are supported.
-
- Flags
- -----
-
- There are 2 kinds of flag: scoped and global. Scoped flags can apply to only part of a pattern and can be turned on or off; global flags apply to the entire pattern and can only be turned on.
-
- The scoped flags are: ``FULLCASE``, ``IGNORECASE``, ``MULTILINE``, ``DOTALL``, ``VERBOSE``, ``WORD``.
-
- The global flags are: ``ASCII``, ``BESTMATCH``, ``ENHANCEMATCH``, ``LOCALE``, ``POSIX``, ``REVERSE``, ``UNICODE``, ``VERSION0``, ``VERSION1``.
-
- If neither the ``ASCII``, ``LOCALE`` nor ``UNICODE`` flag is specified, it will default to ``UNICODE`` if the regex pattern is a Unicode string and ``ASCII`` if it's a bytestring.
-
- The ``ENHANCEMATCH`` flag makes fuzzy matching attempt to improve the fit of the next match that it finds.
-
- The ``BESTMATCH`` flag makes fuzzy matching search for the best match instead of the next match.
-
- Notes on named capture groups
- -----------------------------
-
- All capture groups have a group number, starting from 1.
-
- Groups with the same group name will have the same group number, and groups with a different group name will have a different group number.
-
- The same name can be used by more than one group, with later captures 'overwriting' earlier captures. All of the captures of the group will be available from the ``captures`` method of the match object.
-
- Group numbers will be reused across different branches of a branch reset, eg. ``(?|(first)|(second))`` has only group 1. If capture groups have different group names then they will, of course, have different group numbers, eg. ``(?|(?P<foo>first)|(?P<bar>second))`` has group 1 ("foo") and group 2 ("bar").
-
- In the regex ``(\s+)(?|(?P<foo>[A-Z]+)|(\w+) (?P<foo>[0-9]+)`` there are 2 groups:
-
- * ``(\s+)`` is group 1.
-
- * ``(?P<foo>[A-Z]+)`` is group 2, also called "foo".
-
- * ``(\w+)`` is group 2 because of the branch reset.
-
- * ``(?P<foo>[0-9]+)`` is group 2 because it's called "foo".
-
- If you want to prevent ``(\w+)`` from being group 2, you need to name it (different name, different group number).
-
- Multithreading
- --------------
-
- The regex module releases the GIL during matching on instances of the built-in (immutable) string classes, enabling other Python threads to run concurrently. It is also possible to force the regex module to release the GIL during matching by calling the matching methods with the keyword argument ``concurrent=True``. The behaviour is undefined if the string changes during matching, so use it *only* when it is guaranteed that that won't happen.
-
- Unicode
- -------
-
- This module supports Unicode 12.1.0.
-
- Full Unicode case-folding is supported.
-
- Additional features
- -------------------
-
- The issue numbers relate to the Python bug tracker, except where listed as "Hg issue".
-
- * Added support for lookaround in conditional pattern (`Hg issue 163 <https://bitbucket.org/mrabarnett/mrab-regex/issues/163>`_)
-
- The test of a conditional pattern can now be a lookaround.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
- <regex.Match object; span=(0, 3), match='123'>
- >>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
- <regex.Match object; span=(0, 6), match='abc123'>
-
- This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
- <regex.Match object; span=(0, 6), match='123abc'>
- >>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
- None
-
- In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was **not** attempted.
-
- * Added POSIX matching (leftmost longest) (`Hg issue 150 <https://bitbucket.org/mrabarnett/mrab-regex/issues/150>`_)
-
- The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag (``(?p)``).
-
- Examples:
-
- .. sourcecode:: python
-
- >>> # Normal matching.
- >>> regex.search(r'Mr|Mrs', 'Mrs')
- <regex.Match object; span=(0, 2), match='Mr'>
- >>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
- <regex.Match object; span=(0, 7), match='oneself'>
- >>> # POSIX matching.
- >>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
- <regex.Match object; span=(0, 3), match='Mrs'>
- >>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
- <regex.Match object; span=(0, 17), match='oneselfsufficient'>
-
- Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.
-
- * Added ``(?(DEFINE)...)`` (`Hg issue 152 <https://bitbucket.org/mrabarnett/mrab-regex/issues/152>`_)
-
- If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
- <regex.Match object; span=(0, 11), match='5 elephants'>
-
- * Added ``(*PRUNE)``, ``(*SKIP)`` and ``(*FAIL)`` (`Hg issue 153 <https://bitbucket.org/mrabarnett/mrab-regex/issues/153>`_)
-
- ``(*PRUNE)`` discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
-
- ``(*SKIP)`` is similar to ``(*PRUNE)``, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
-
- ``(*FAIL)`` causes immediate backtracking. ``(*F)`` is a permitted abbreviation.
-
- * Added ``\K`` (`Hg issue 151 <https://bitbucket.org/mrabarnett/mrab-regex/issues/151>`_)
-
- Keeps the part of the entire match after the position where ``\K`` occurred; the part before it is discarded.
-
- It does not affect what capture groups return.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
- >>> m[0]
- 'cde'
- >>> m[1]
- 'abcde'
- >>>
- >>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
- >>> m[0]
- 'bc'
- >>> m[1]
- 'bcdef'
-
- * Added capture subscripting for ``expandf`` and ``subf``/``subfn`` (`Hg issue 133 <https://bitbucket.org/mrabarnett/mrab-regex/issues/133>`_)
-
- You can now use subscripting to get the captures of a repeated capture group.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> m = regex.match(r"(\w)+", "abc")
- >>> m.expandf("{1}")
- 'c'
- >>> m.expandf("{1[0]} {1[1]} {1[2]}")
- 'a b c'
- >>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
- 'c b a'
- >>>
- >>> m = regex.match(r"(?P<letter>\w)+", "abc")
- >>> m.expandf("{letter}")
- 'c'
- >>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
- 'a b c'
- >>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
- 'c b a'
-
- * Added support for referring to a group by number using ``(?P=...)``.
-
- This is in addition to the existing ``\g<...>``.
-
- * Fixed the handling of locale-sensitive regexes.
-
- The ``LOCALE`` flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.
-
- * Added partial matches (`Hg issue 102 <https://bitbucket.org/mrabarnett/mrab-regex/issues/102>`_)
-
- A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.
-
- Partial matches are supported by ``match``, ``search``, ``fullmatch`` and ``finditer`` with the ``partial`` keyword argument.
-
- Match objects have a ``partial`` attribute, which is ``True`` if it's a partial match.
-
- For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:
-
- .. sourcecode:: python
-
- >>> pattern = regex.compile(r'\d{4}')
-
- >>> # Initially, nothing has been entered:
- >>> print(pattern.fullmatch('', partial=True))
- <regex.Match object; span=(0, 0), match='', partial=True>
-
- >>> # An empty string is OK, but it's only a partial match.
- >>> # The user enters a letter:
- >>> print(pattern.fullmatch('a', partial=True))
- None
- >>> # It'll never match.
-
- >>> # The user deletes that and enters a digit:
- >>> print(pattern.fullmatch('1', partial=True))
- <regex.Match object; span=(0, 1), match='1', partial=True>
- >>> # It matches this far, but it's only a partial match.
-
- >>> # The user enters 2 more digits:
- >>> print(pattern.fullmatch('123', partial=True))
- <regex.Match object; span=(0, 3), match='123', partial=True>
- >>> # It matches this far, but it's only a partial match.
-
- >>> # The user enters another digit:
- >>> print(pattern.fullmatch('1234', partial=True))
- <regex.Match object; span=(0, 4), match='1234'>
- >>> # It's a complete match.
-
- >>> # If the user enters another digit:
- >>> print(pattern.fullmatch('12345', partial=True))
- None
- >>> # It's no longer a match.
-
- >>> # This is a partial match:
- >>> pattern.match('123', partial=True).partial
- True
-
- >>> # This is a complete match:
- >>> pattern.match('1233', partial=True).partial
- False
-
- * ``*`` operator not working correctly with sub() (`Hg issue 106 <https://bitbucket.org/mrabarnett/mrab-regex/issues/106>`_)
-
- Sometimes it's not clear how zero-width matches should be handled. For example, should ``.*`` match 0 characters directly after matching >0 characters?
-
- Examples:
-
- .. sourcecode:: python
-
- # Python 3.7 and later
- >>> regex.sub('.*', 'x', 'test')
- 'xx'
- >>> regex.sub('.*?', '|', 'test')
- '|||||||||'
-
- # Python 3.6 and earlier
- >>> regex.sub('(?V0).*', 'x', 'test')
- 'x'
- >>> regex.sub('(?V1).*', 'x', 'test')
- 'xx'
- >>> regex.sub('(?V0).*?', '|', 'test')
- '|t|e|s|t|'
- >>> regex.sub('(?V1).*?', '|', 'test')
- '|||||||||'
-
- * Added ``capturesdict`` (`Hg issue 86 <https://bitbucket.org/mrabarnett/mrab-regex/issues/86>`_)
-
- ``capturesdict`` is a combination of ``groupdict`` and ``captures``:
-
- ``groupdict`` returns a dict of the named groups and the last capture of those groups.
-
- ``captures`` returns a list of all the captures of a group
-
- ``capturesdict`` returns a dict of the named groups and lists of all the captures of those groups.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
- >>> m.groupdict()
- {'word': 'three', 'digits': '3'}
- >>> m.captures("word")
- ['one', 'two', 'three']
- >>> m.captures("digits")
- ['1', '2', '3']
- >>> m.capturesdict()
- {'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}
-
- * Allow duplicate names of groups (`Hg issue 87 <https://bitbucket.org/mrabarnett/mrab-regex/issues/87>`_)
-
- Group names can now be duplicated.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> # With optional groups:
- >>>
- >>> # Both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['first', 'second']
- >>> # Only the second group captures.
- >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['second']
- >>> # Only the first group captures.
- >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
- >>> m.group("item")
- 'first'
- >>> m.captures("item")
- ['first']
- >>>
- >>> # With mandatory groups:
- >>>
- >>> # Both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['first', 'second']
- >>> # Again, both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['', 'second']
- >>> # And yet again, both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
- >>> m.group("item")
- ''
- >>> m.captures("item")
- ['first', '']
-
- * Added ``fullmatch`` (`issue #16203 <https://bugs.python.org/issue16203>`_)
-
- ``fullmatch`` behaves like ``match``, except that it must match all of the string.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> print(regex.fullmatch(r"abc", "abc").span())
- (0, 3)
- >>> print(regex.fullmatch(r"abc", "abcx"))
- None
- >>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
- (0, 3)
- >>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
- (1, 4)
- >>>
- >>> regex.match(r"a.*?", "abcd").group(0)
- 'a'
- >>> regex.fullmatch(r"a.*?", "abcd").group(0)
- 'abcd'
-
- * Added ``subf`` and ``subfn``
-
- ``subf`` and ``subfn`` are alternatives to ``sub`` and ``subn`` respectively. When passed a replacement string, they treat it as a format string.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
- 'foo bar => bar foo'
- >>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
- 'bar foo'
-
- * Added ``expandf`` to match object
-
- ``expandf`` is an alternative to ``expand``. When passed a replacement string, it treats it as a format string.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> m = regex.match(r"(\w+) (\w+)", "foo bar")
- >>> m.expandf("{0} => {2} {1}")
- 'foo bar => bar foo'
- >>>
- >>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
- >>> m.expandf("{word2} {word1}")
- 'bar foo'
-
- * Detach searched string
-
- A match object contains a reference to the string that was searched, via its ``string`` attribute. The ``detach_string`` method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.
-
- Example:
-
- .. sourcecode:: python
-
- >>> m = regex.search(r"\w+", "Hello world")
- >>> print(m.group())
- Hello
- >>> print(m.string)
- Hello world
- >>> m.detach_string()
- >>> print(m.group())
- Hello
- >>> print(m.string)
- None
-
- * Recursive patterns (`Hg issue 27 <https://bitbucket.org/mrabarnett/mrab-regex/issues/27>`_)
-
- Recursive and repeated patterns are supported.
-
- ``(?R)`` or ``(?0)`` tries to match the entire regex recursively. ``(?1)``, ``(?2)``, etc, try to match the relevant capture group.
-
- ``(?&name)`` tries to match the named capture group.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
- ('Tarzan',)
- >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
- ('Jane',)
-
- >>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
- >>> m.group(0, 1, 2)
- ('kayak', 'k', None)
-
- The first two examples show how the subpattern within the capture group is reused, but is _not_ itself a capture group. In other words, ``"(Tarzan|Jane) loves (?1)"`` is equivalent to ``"(Tarzan|Jane) loves (?:Tarzan|Jane)"``.
-
- It's possible to backtrack into a recursed or repeated group.
-
- You can't call a group if there is more than one group with that group name or group number (``"ambiguous group reference"``).
-
- The alternative forms ``(?P>name)`` and ``(?P&name)`` are also supported.
-
- * Full Unicode case-folding is supported.
-
- In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.
-
- Examples (in Python 3):
-
- .. sourcecode:: python
-
- >>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
- (0, 6)
- >>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
- (0, 7)
-
- In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.
-
- * Approximate "fuzzy" matching (`Hg issue 12 <https://bitbucket.org/mrabarnett/mrab-regex/issues/12>`_, `Hg issue 41 <https://bitbucket.org/mrabarnett/mrab-regex/issues/41>`_, `Hg issue 109 <https://bitbucket.org/mrabarnett/mrab-regex/issues/109>`_)
-
- Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.
-
- A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)
-
- The 3 types of error are:
-
- * Insertion, indicated by "i"
-
- * Deletion, indicated by "d"
-
- * Substitution, indicated by "s"
-
- In addition, "e" indicates any type of error.
-
- The fuzziness of a regex item is specified between "{" and "}" after the item.
-
- Examples:
-
- * ``foo`` match "foo" exactly
-
- * ``(?:foo){i}`` match "foo", permitting insertions
-
- * ``(?:foo){d}`` match "foo", permitting deletions
-
- * ``(?:foo){s}`` match "foo", permitting substitutions
-
- * ``(?:foo){i,s}`` match "foo", permitting insertions and substitutions
-
- * ``(?:foo){e}`` match "foo", permitting errors
-
- If a certain type of error is specified, then any type not specified will **not** be permitted.
-
- In the following examples I'll omit the item and write only the fuzziness:
-
- * ``{d<=3}`` permit at most 3 deletions, but no other types
-
- * ``{i<=1,s<=2}`` permit at most 1 insertion and at most 2 substitutions, but no deletions
-
- * ``{1<=e<=3}`` permit at least 1 and at most 3 errors
-
- * ``{i<=2,d<=2,e<=3}`` permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions
-
- It's also possible to state the costs of each type of error and the maximum permitted total cost.
-
- Examples:
-
- * ``{2i+2d+1s<=4}`` each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
-
- * ``{i<=1,d<=1,s<=1,2i+2d+1s<=4}`` at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
-
- You can also use "<" instead of "<=" if you want an exclusive minimum or maximum.
-
- You can add a test to perform on a character that's substituted or inserted.
-
- Examples:
-
- * ``{s<=2:[a-z]}`` at most 2 substitutions, which must be in the character set ``[a-z]``.
-
- * ``{s<=2,i<=3:\d}`` at most 2 substitutions, at most 3 insertions, which must be digits.
-
- By default, fuzzy matching searches for the first match that meets the given constraints. The ``ENHANCEMATCH`` flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.
-
- The ``BESTMATCH`` flag will make it search for the best match instead.
-
- Further examples to note:
-
- * ``regex.search("(dog){e}", "cat and dog")[1]`` returns ``"cat"`` because that matches ``"dog"`` with 3 errors (an unlimited number of errors is permitted).
-
- * ``regex.search("(dog){e<=1}", "cat and dog")[1]`` returns ``" dog"`` (with a leading space) because that matches ``"dog"`` with 1 error, which is within the limit.
-
- * ``regex.search("(?e)(dog){e<=1}", "cat and dog")[1]`` returns ``"dog"`` (without a leading space) because the fuzzy search matches ``" dog"`` with 1 error, which is within the limit, and the ``(?e)`` then it attempts a better fit.
-
- In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.
-
- The match object has an attribute ``fuzzy_counts`` which gives the total number of substitutions, insertions and deletions.
-
- .. sourcecode:: python
-
- >>> # A 'raw' fuzzy match:
- >>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
- (0, 0, 1)
- >>> # 0 substitutions, 0 insertions, 1 deletion.
-
- >>> # A better match might be possible if the ENHANCEMATCH flag used:
- >>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
- (0, 0, 0)
- >>> # 0 substitutions, 0 insertions, 0 deletions.
-
- The match object also has an attribute ``fuzzy_changes`` which gives a tuple of the positions of the substitutions, insertions and deletions.
-
- .. sourcecode:: python
-
- >>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
- >>> m
- <regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
- >>> m.fuzzy_changes
- ([], [7, 8], [10, 11])
-
- What this means is that if the matched part of the string had been:
-
- .. sourcecode:: python
-
- 'anacondfuuoo bar'
-
- it would've been an exact match.
-
- However, there were insertions at positions 7 and 8:
-
- .. sourcecode:: python
-
- 'anaconda fuuoo bar'
- ^^
-
- and deletions at positions 10 and 11:
-
- .. sourcecode:: python
-
- 'anaconda f~~oo bar'
- ^^
-
- So the actual string was:
-
- .. sourcecode:: python
-
- 'anaconda foo bar'
-
- * Named lists (`Hg issue 11 <https://bitbucket.org/mrabarnett/mrab-regex/issues/11>`_)
-
- ``\L<name>``
-
- There are occasions where you may want to include a list (actually, a set) of options in a regex.
-
- One way is to build the pattern like this:
-
- .. sourcecode:: python
-
- >>> p = regex.compile(r"first|second|third|fourth|fifth")
-
- but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, "cats" before "cat".
-
- The new alternative is to use a named list:
-
- .. sourcecode:: python
-
- >>> option_set = ["first", "second", "third", "fourth", "fifth"]
- >>> p = regex.compile(r"\L<options>", options=option_set)
-
- The order of the items is irrelevant, they are treated as a set. The named lists are available as the ``.named_lists`` attribute of the pattern object :
-
- .. sourcecode:: python
-
- >>> print(p.named_lists)
- # Python 3
- {'options': frozenset({'fifth', 'first', 'fourth', 'second', 'third'})}
- # Python 2
- {'options': frozenset(['fifth', 'fourth', 'second', 'third', 'first'])}
-
- * Start and end of word
-
- ``\m`` matches at the start of a word.
-
- ``\M`` matches at the end of a word.
-
- Compare with ``\b``, which matches at the start or end of a word.
-
- * Unicode line separators
-
- Normally the only line separator is ``\n`` (``\x0A``), but if the ``WORD`` flag is turned on then the line separators are ``\x0D\x0A``, ``\x0A``, ``\x0B``, ``\x0C`` and ``\x0D``, plus ``\x85``, ``\u2028`` and ``\u2029`` when working with Unicode.
-
- This affects the regex dot ``"."``, which, with the ``DOTALL`` flag turned off, matches any character except a line separator. It also affects the line anchors ``^`` and ``$`` (in multiline mode).
-
- * Set operators
-
- **Version 1 behaviour only**
-
- Set operators have been added, and a set ``[...]`` can include nested sets.
-
- The operators, in order of increasing precedence, are:
-
- * ``||`` for union ("x||y" means "x or y")
-
- * ``~~`` (double tilde) for symmetric difference ("x~~y" means "x or y, but not both")
-
- * ``&&`` for intersection ("x&&y" means "x and y")
-
- * ``--`` (double dash) for difference ("x--y" means "x but not y")
-
- Implicit union, ie, simple juxtaposition like in ``[ab]``, has the highest precedence. Thus, ``[ab&&cd]`` is the same as ``[[a||b]&&[c||d]]``.
-
- Examples:
-
- * ``[ab]`` # Set containing 'a' and 'b'
-
- * ``[a-z]`` # Set containing 'a' .. 'z'
-
- * ``[[a-z]--[qw]]`` # Set containing 'a' .. 'z', but not 'q' or 'w'
-
- * ``[a-z--qw]`` # Same as above
-
- * ``[\p{L}--QW]`` # Set containing all letters except 'Q' and 'W'
-
- * ``[\p{N}--[0-9]]`` # Set containing all numbers except '0' .. '9'
-
- * ``[\p{ASCII}&&\p{Letter}]`` # Set containing all characters which are ASCII and letter
-
- * regex.escape (`issue #2650 <https://bugs.python.org/issue2650>`_)
-
- regex.escape has an additional keyword parameter ``special_only``. When True, only 'special' regex characters, such as '?', are escaped.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.escape("foo!?", special_only=False)
- 'foo\\!\\?'
- >>> regex.escape("foo!?", special_only=True)
- 'foo!\\?'
-
- * regex.escape (`Hg issue 249 <https://bitbucket.org/mrabarnett/mrab-regex/issues/249>`_)
-
- regex.escape has an additional keyword parameter ``literal_spaces``. When True, spaces are not escaped.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.escape("foo bar!?", literal_spaces=False)
- 'foo\\ bar!\\?'
- >>> regex.escape("foo bar!?", literal_spaces=True)
- 'foo bar!\\?'
-
- * Repeated captures (`issue #7132 <https://bugs.python.org/issue7132>`_)
-
- A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:
-
- * ``matchobject.captures([group1, ...])``
-
- * Returns a list of the strings matched in a group or groups. Compare with ``matchobject.group([group1, ...])``.
-
- * ``matchobject.starts([group])``
-
- * Returns a list of the start positions. Compare with ``matchobject.start([group])``.
-
- * ``matchobject.ends([group])``
-
- * Returns a list of the end positions. Compare with ``matchobject.end([group])``.
-
- * ``matchobject.spans([group])``
-
- * Returns a list of the spans. Compare with ``matchobject.span([group])``.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> m = regex.search(r"(\w{3})+", "123456789")
- >>> m.group(1)
- '789'
- >>> m.captures(1)
- ['123', '456', '789']
- >>> m.start(1)
- 6
- >>> m.starts(1)
- [0, 3, 6]
- >>> m.end(1)
- 9
- >>> m.ends(1)
- [3, 6, 9]
- >>> m.span(1)
- (6, 9)
- >>> m.spans(1)
- [(0, 3), (3, 6), (6, 9)]
-
- * Atomic grouping (`issue #433030 <https://bugs.python.org/issue433030>`_)
-
- ``(?>...)``
-
- If the following pattern subsequently fails, then the subpattern as a whole will fail.
-
- * Possessive quantifiers.
-
- ``(?:...)?+`` ; ``(?:...)*+`` ; ``(?:...)++`` ; ``(?:...){min,max}+``
-
- The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, ``(?:...)++`` is equivalent to ``(?>(?:...)+)``.
-
- * Scoped flags (`issue #433028 <https://bugs.python.org/issue433028>`_)
-
- ``(?flags-flags:...)``
-
- The flags will apply only to the subpattern. Flags can be turned on or off.
-
- * Definition of 'word' character (`issue #1693050 <https://bugs.python.org/issue1693050>`_)
-
- The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
-
- * Variable-length lookbehind
-
- A lookbehind can match a variable-length string.
-
- * Flags argument for regex.split, regex.sub and regex.subn (`issue #3482 <https://bugs.python.org/issue3482>`_)
-
- ``regex.split``, ``regex.sub`` and ``regex.subn`` support a 'flags' argument.
-
- * Pos and endpos arguments for regex.sub and regex.subn
-
- ``regex.sub`` and ``regex.subn`` support 'pos' and 'endpos' arguments.
-
- * 'Overlapped' argument for regex.findall and regex.finditer
-
- ``regex.findall`` and ``regex.finditer`` support an 'overlapped' flag which permits overlapped matches.
-
- * Splititer
-
- ``regex.splititer`` has been added. It's a generator equivalent of ``regex.split``.
-
- * Subscripting for groups
-
- A match object accepts access to the captured groups via subscripting and slicing:
-
- .. sourcecode:: python
-
- >>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
- >>> print(m["before"])
- pqr
- >>> print(len(m))
- 4
- >>> print(m[:])
- ('pqr123stu', 'pqr', '123', 'stu')
-
- * Named groups
-
- Groups can be named with ``(?<name>...)`` as well as the current ``(?P<name>...)``.
-
- * Group references
-
- Groups can be referenced within a pattern with ``\g<name>``. This also allows there to be more than 99 groups.
-
- * Named characters
-
- ``\N{name}``
-
- Named characters are supported. (Note: only those known by Python's Unicode database are supported.)
-
- * Unicode codepoint properties, including scripts and blocks
-
- ``\p{property=value}``; ``\P{property=value}``; ``\p{value}`` ; ``\P{value}``
-
- Many Unicode properties are supported, including blocks and scripts. ``\p{property=value}`` or ``\p{property:value}`` matches a character whose property ``property`` has value ``value``. The inverse of ``\p{property=value}`` is ``\P{property=value}`` or ``\p{^property=value}``.
-
- If the short form ``\p{value}`` is used, the properties are checked in the order: ``General_Category``, ``Script``, ``Block``, binary property:
-
- * ``Latin``, the 'Latin' script (``Script=Latin``).
-
- * ``BasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
-
- * ``Alphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
-
- A short form starting with ``Is`` indicates a script or binary property:
-
- * ``IsLatin``, the 'Latin' script (``Script=Latin``).
-
- * ``IsAlphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
-
- A short form starting with ``In`` indicates a block property:
-
- * ``InBasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
-
- * POSIX character classes
-
- ``[[:alpha:]]``; ``[[:^alpha:]]``
-
- POSIX character classes are supported. These are normally treated as an alternative form of ``\p{...}``.
-
- The exceptions are ``alnum``, ``digit``, ``punct`` and ``xdigit``, whose definitions are different from those of Unicode.
-
- ``[[:alnum:]]`` is equivalent to ``\p{posix_alnum}``.
-
- ``[[:digit:]]`` is equivalent to ``\p{posix_digit}``.
-
- ``[[:punct:]]`` is equivalent to ``\p{posix_punct}``.
-
- ``[[:xdigit:]]`` is equivalent to ``\p{posix_xdigit}``.
-
- * Search anchor
-
- ``\G``
-
- A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:
-
- .. sourcecode:: python
-
- >>> regex.findall(r"\w{2}", "abcd ef")
- ['ab', 'cd', 'ef']
- >>> regex.findall(r"\G\w{2}", "abcd ef")
- ['ab', 'cd']
-
- * The search starts at position 0 and matches 2 letters 'ab'.
-
- * The search continues at position 2 and matches 2 letters 'cd'.
-
- * The search continues at position 4 and fails to match any letters.
-
- * The anchor stops the search start position from being advanced, so there are no more results.
-
- * Reverse searching
-
- Searches can now work backwards:
-
- .. sourcecode:: python
-
- >>> regex.findall(r".", "abc")
- ['a', 'b', 'c']
- >>> regex.findall(r"(?r).", "abc")
- ['c', 'b', 'a']
-
- Note: the result of a reverse search is not necessarily the reverse of a forward search:
-
- .. sourcecode:: python
-
- >>> regex.findall(r"..", "abcde")
- ['ab', 'cd']
- >>> regex.findall(r"(?r)..", "abcde")
- ['de', 'bc']
-
- * Matching a single grapheme
-
- ``\X``
-
- The grapheme matcher is supported. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
-
- * Branch reset
-
- ``(?|...|...)``
-
- Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.match(r"(?|(first)|(second))", "first").groups()
- ('first',)
- >>> regex.match(r"(?|(first)|(second))", "second").groups()
- ('second',)
-
- Note that there is only one group.
-
- * Default Unicode word boundary
-
- The ``WORD`` flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to ``\b`` and ``\B``.
-
- * Timeout (Python 3)
-
- The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:
-
- .. sourcecode:: python
-
- >>> from time import sleep
- >>>
- >>> def fast_replace(m):
- ... return 'X'
- ...
- >>> def slow_replace(m):
- ... sleep(0.5)
- ... return 'X'
- ...
- >>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
- 'XXXXX'
- >>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "C:\Python37\lib\site-packages\regex\regex.py", line 276, in sub
- endpos, concurrent, timeout)
- TimeoutError: regex timed out
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: Python Software Foundation License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Topic :: Scientific/Engineering :: Information Analysis
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Text Processing
-Classifier: Topic :: Text Processing :: General
+Metadata-Version: 1.1
+Name: regex
+Version: 2020.7.14
+Summary: Alternative regular expression module, to replace re.
+Home-page: https://bitbucket.org/mrabarnett/mrab-regex
+Author: Matthew Barnett
+Author-email: regex@mrabarnett.plus.com
+License: Python Software Foundation License
+Description: Introduction
+ ------------
+
+ This regex implementation is backwards-compatible with the standard 're' module, but offers additional functionality.
+
+ Note
+ ----
+
+ The re module's behaviour with zero-width matches changed in Python 3.7, and this module will follow that behaviour when compiled for Python 3.7.
+
+ Old vs new behaviour
+ --------------------
+
+ In order to be compatible with the re module, this module has 2 behaviours:
+
+ * **Version 0** behaviour (old behaviour, compatible with the re module):
+
+ Please note that the re module's behaviour may change over time, and I'll endeavour to match that behaviour in version 0.
+
+ * Indicated by the ``VERSION0`` or ``V0`` flag, or ``(?V0)`` in the pattern.
+
+ * Zero-width matches are not handled correctly in the re module before Python 3.7. The behaviour in those earlier versions is:
+
+ * ``.split`` won't split a string at a zero-width match.
+
+ * ``.sub`` will advance by one character after a zero-width match.
+
+ * Inline flags apply to the entire pattern, and they can't be turned off.
+
+ * Only simple sets are supported.
+
+ * Case-insensitive matches in Unicode use simple case-folding by default.
+
+ * **Version 1** behaviour (new behaviour, possibly different from the re module):
+
+ * Indicated by the ``VERSION1`` or ``V1`` flag, or ``(?V1)`` in the pattern.
+
+ * Zero-width matches are handled correctly.
+
+ * Inline flags apply to the end of the group or pattern, and they can be turned off.
+
+ * Nested sets and set operations are supported.
+
+ * Case-insensitive matches in Unicode use full case-folding by default.
+
+ If no version is specified, the regex module will default to ``regex.DEFAULT_VERSION``.
+
+ Case-insensitive matches in Unicode
+ -----------------------------------
+
+ The regex module supports both simple and full case-folding for case-insensitive matches in Unicode. Use of full case-folding can be turned on using the ``FULLCASE`` or ``F`` flag, or ``(?f)`` in the pattern. Please note that this flag affects how the ``IGNORECASE`` flag works; the ``FULLCASE`` flag itself does not turn on case-insensitive matching.
+
+ In the version 0 behaviour, the flag is off by default.
+
+ In the version 1 behaviour, the flag is on by default.
+
+ Nested sets and set operations
+ ------------------------------
+
+ It's not possible to support both simple sets, as used in the re module, and nested sets at the same time because of a difference in the meaning of an unescaped ``"["`` in a set.
+
+ For example, the pattern ``[[a-z]--[aeiou]]`` is treated in the version 0 behaviour (simple sets, compatible with the re module) as:
+
+ * Set containing "[" and the letters "a" to "z"
+
+ * Literal "--"
+
+ * Set containing letters "a", "e", "i", "o", "u"
+
+ * Literal "]"
+
+ but in the version 1 behaviour (nested sets, enhanced behaviour) as:
+
+ * Set which is:
+
+ * Set containing the letters "a" to "z"
+
+ * but excluding:
+
+ * Set containing the letters "a", "e", "i", "o", "u"
+
+ Version 0 behaviour: only simple sets are supported.
+
+ Version 1 behaviour: nested sets and set operations are supported.
+
+ Flags
+ -----
+
+ There are 2 kinds of flag: scoped and global. Scoped flags can apply to only part of a pattern and can be turned on or off; global flags apply to the entire pattern and can only be turned on.
+
+ The scoped flags are: ``FULLCASE``, ``IGNORECASE``, ``MULTILINE``, ``DOTALL``, ``VERBOSE``, ``WORD``.
+
+ The global flags are: ``ASCII``, ``BESTMATCH``, ``ENHANCEMATCH``, ``LOCALE``, ``POSIX``, ``REVERSE``, ``UNICODE``, ``VERSION0``, ``VERSION1``.
+
+ If neither the ``ASCII``, ``LOCALE`` nor ``UNICODE`` flag is specified, it will default to ``UNICODE`` if the regex pattern is a Unicode string and ``ASCII`` if it's a bytestring.
+
+ The ``ENHANCEMATCH`` flag makes fuzzy matching attempt to improve the fit of the next match that it finds.
+
+ The ``BESTMATCH`` flag makes fuzzy matching search for the best match instead of the next match.
+
+ Notes on named capture groups
+ -----------------------------
+
+ All capture groups have a group number, starting from 1.
+
+ Groups with the same group name will have the same group number, and groups with a different group name will have a different group number.
+
+ The same name can be used by more than one group, with later captures 'overwriting' earlier captures. All of the captures of the group will be available from the ``captures`` method of the match object.
+
+ Group numbers will be reused across different branches of a branch reset, eg. ``(?|(first)|(second))`` has only group 1. If capture groups have different group names then they will, of course, have different group numbers, eg. ``(?|(?P<foo>first)|(?P<bar>second))`` has group 1 ("foo") and group 2 ("bar").
+
+ In the regex ``(\s+)(?|(?P<foo>[A-Z]+)|(\w+) (?P<foo>[0-9]+)`` there are 2 groups:
+
+ * ``(\s+)`` is group 1.
+
+ * ``(?P<foo>[A-Z]+)`` is group 2, also called "foo".
+
+ * ``(\w+)`` is group 2 because of the branch reset.
+
+ * ``(?P<foo>[0-9]+)`` is group 2 because it's called "foo".
+
+ If you want to prevent ``(\w+)`` from being group 2, you need to name it (different name, different group number).
+
+ Multithreading
+ --------------
+
+ The regex module releases the GIL during matching on instances of the built-in (immutable) string classes, enabling other Python threads to run concurrently. It is also possible to force the regex module to release the GIL during matching by calling the matching methods with the keyword argument ``concurrent=True``. The behaviour is undefined if the string changes during matching, so use it *only* when it is guaranteed that that won't happen.
+
+ Unicode
+ -------
+
+ This module supports Unicode 13.0.0.
+
+ Full Unicode case-folding is supported.
+
+ Additional features
+ -------------------
+
+ The issue numbers relate to the Python bug tracker, except where listed as "Hg issue".
+
+ Added support for lookaround in conditional pattern (`Hg issue 163 <https://bitbucket.org/mrabarnett/mrab-regex/issues/163>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The test of a conditional pattern can now be a lookaround.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
+ <regex.Match object; span=(0, 3), match='123'>
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
+ <regex.Match object; span=(0, 6), match='abc123'>
+
+ This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
+ <regex.Match object; span=(0, 6), match='123abc'>
+ >>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
+ None
+
+ In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was **not** attempted.
+
+ Added POSIX matching (leftmost longest) (`Hg issue 150 <https://bitbucket.org/mrabarnett/mrab-regex/issues/150>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag (``(?p)``).
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> # Normal matching.
+ >>> regex.search(r'Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 2), match='Mr'>
+ >>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 7), match='oneself'>
+ >>> # POSIX matching.
+ >>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 3), match='Mrs'>
+ >>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 17), match='oneselfsufficient'>
+
+ Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.
+
+ Added ``(?(DEFINE)...)`` (`Hg issue 152 <https://bitbucket.org/mrabarnett/mrab-regex/issues/152>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
+ <regex.Match object; span=(0, 11), match='5 elephants'>
+
+ Added ``(*PRUNE)``, ``(*SKIP)`` and ``(*FAIL)`` (`Hg issue 153 <https://bitbucket.org/mrabarnett/mrab-regex/issues/153>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(*PRUNE)`` discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+
+ ``(*SKIP)`` is similar to ``(*PRUNE)``, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+
+ ``(*FAIL)`` causes immediate backtracking. ``(*F)`` is a permitted abbreviation.
+
+ Added ``\K`` (`Hg issue 151 <https://bitbucket.org/mrabarnett/mrab-regex/issues/151>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Keeps the part of the entire match after the position where ``\K`` occurred; the part before it is discarded.
+
+ It does not affect what capture groups return.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'cde'
+ >>> m[1]
+ 'abcde'
+ >>>
+ >>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'bc'
+ >>> m[1]
+ 'bcdef'
+
+ Added capture subscripting for ``expandf`` and ``subf``/``subfn`` (`Hg issue 133 <https://bitbucket.org/mrabarnett/mrab-regex/issues/133>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ You can now use subscripting to get the captures of a repeated capture group.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.match(r"(\w)+", "abc")
+ >>> m.expandf("{1}")
+ 'c'
+ >>> m.expandf("{1[0]} {1[1]} {1[2]}")
+ 'a b c'
+ >>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
+ 'c b a'
+ >>>
+ >>> m = regex.match(r"(?P<letter>\w)+", "abc")
+ >>> m.expandf("{letter}")
+ 'c'
+ >>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
+ 'a b c'
+ >>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
+ 'c b a'
+
+ Added support for referring to a group by number using ``(?P=...)``.
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ This is in addition to the existing ``\g<...>``.
+
+ Fixed the handling of locale-sensitive regexes.
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The ``LOCALE`` flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.
+
+ Added partial matches (`Hg issue 102 <https://bitbucket.org/mrabarnett/mrab-regex/issues/102>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.
+
+ Partial matches are supported by ``match``, ``search``, ``fullmatch`` and ``finditer`` with the ``partial`` keyword argument.
+
+ Match objects have a ``partial`` attribute, which is ``True`` if it's a partial match.
+
+ For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:
+
+ .. sourcecode:: python
+
+ >>> pattern = regex.compile(r'\d{4}')
+
+ >>> # Initially, nothing has been entered:
+ >>> print(pattern.fullmatch('', partial=True))
+ <regex.Match object; span=(0, 0), match='', partial=True>
+
+ >>> # An empty string is OK, but it's only a partial match.
+ >>> # The user enters a letter:
+ >>> print(pattern.fullmatch('a', partial=True))
+ None
+ >>> # It'll never match.
+
+ >>> # The user deletes that and enters a digit:
+ >>> print(pattern.fullmatch('1', partial=True))
+ <regex.Match object; span=(0, 1), match='1', partial=True>
+ >>> # It matches this far, but it's only a partial match.
+
+ >>> # The user enters 2 more digits:
+ >>> print(pattern.fullmatch('123', partial=True))
+ <regex.Match object; span=(0, 3), match='123', partial=True>
+ >>> # It matches this far, but it's only a partial match.
+
+ >>> # The user enters another digit:
+ >>> print(pattern.fullmatch('1234', partial=True))
+ <regex.Match object; span=(0, 4), match='1234'>
+ >>> # It's a complete match.
+
+ >>> # If the user enters another digit:
+ >>> print(pattern.fullmatch('12345', partial=True))
+ None
+ >>> # It's no longer a match.
+
+ >>> # This is a partial match:
+ >>> pattern.match('123', partial=True).partial
+ True
+
+ >>> # This is a complete match:
+ >>> pattern.match('1233', partial=True).partial
+ False
+
+ ``*`` operator not working correctly with sub() (`Hg issue 106 <https://bitbucket.org/mrabarnett/mrab-regex/issues/106>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Sometimes it's not clear how zero-width matches should be handled. For example, should ``.*`` match 0 characters directly after matching >0 characters?
+
+ Examples:
+
+ .. sourcecode:: python
+
+ # Python 3.7 and later
+ >>> regex.sub('.*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('.*?', '|', 'test')
+ '|||||||||'
+
+ # Python 3.6 and earlier
+ >>> regex.sub('(?V0).*', 'x', 'test')
+ 'x'
+ >>> regex.sub('(?V1).*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('(?V0).*?', '|', 'test')
+ '|t|e|s|t|'
+ >>> regex.sub('(?V1).*?', '|', 'test')
+ '|||||||||'
+
+ Added ``capturesdict`` (`Hg issue 86 <https://bitbucket.org/mrabarnett/mrab-regex/issues/86>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``capturesdict`` is a combination of ``groupdict`` and ``captures``:
+
+ ``groupdict`` returns a dict of the named groups and the last capture of those groups.
+
+ ``captures`` returns a list of all the captures of a group
+
+ ``capturesdict`` returns a dict of the named groups and lists of all the captures of those groups.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
+ >>> m.groupdict()
+ {'word': 'three', 'digits': '3'}
+ >>> m.captures("word")
+ ['one', 'two', 'three']
+ >>> m.captures("digits")
+ ['1', '2', '3']
+ >>> m.capturesdict()
+ {'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}
+
+ Allow duplicate names of groups (`Hg issue 87 <https://bitbucket.org/mrabarnett/mrab-regex/issues/87>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Group names can now be duplicated.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> # With optional groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Only the second group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['second']
+ >>> # Only the first group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
+ >>> m.group("item")
+ 'first'
+ >>> m.captures("item")
+ ['first']
+ >>>
+ >>> # With mandatory groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['', 'second']
+ >>> # And yet again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
+ >>> m.group("item")
+ ''
+ >>> m.captures("item")
+ ['first', '']
+
+ Added ``fullmatch`` (`issue #16203 <https://bugs.python.org/issue16203>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``fullmatch`` behaves like ``match``, except that it must match all of the string.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> print(regex.fullmatch(r"abc", "abc").span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "abcx"))
+ None
+ >>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
+ (1, 4)
+ >>>
+ >>> regex.match(r"a.*?", "abcd").group(0)
+ 'a'
+ >>> regex.fullmatch(r"a.*?", "abcd").group(0)
+ 'abcd'
+
+ Added ``subf`` and ``subfn``
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``subf`` and ``subfn`` are alternatives to ``sub`` and ``subn`` respectively. When passed a replacement string, they treat it as a format string.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
+ 'foo bar => bar foo'
+ >>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
+ 'bar foo'
+
+ Added ``expandf`` to match object
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``expandf`` is an alternative to ``expand``. When passed a replacement string, it treats it as a format string.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.match(r"(\w+) (\w+)", "foo bar")
+ >>> m.expandf("{0} => {2} {1}")
+ 'foo bar => bar foo'
+ >>>
+ >>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
+ >>> m.expandf("{word2} {word1}")
+ 'bar foo'
+
+ Detach searched string
+ ^^^^^^^^^^^^^^^^^^^^^^
+
+ A match object contains a reference to the string that was searched, via its ``string`` attribute. The ``detach_string`` method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.
+
+ Example:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r"\w+", "Hello world")
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ Hello world
+ >>> m.detach_string()
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ None
+
+ Recursive patterns (`Hg issue 27 <https://bitbucket.org/mrabarnett/mrab-regex/issues/27>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Recursive and repeated patterns are supported.
+
+ ``(?R)`` or ``(?0)`` tries to match the entire regex recursively. ``(?1)``, ``(?2)``, etc, try to match the relevant capture group.
+
+ ``(?&name)`` tries to match the named capture group.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
+ ('Tarzan',)
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
+ ('Jane',)
+
+ >>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
+ >>> m.group(0, 1, 2)
+ ('kayak', 'k', None)
+
+ The first two examples show how the subpattern within the capture group is reused, but is _not_ itself a capture group. In other words, ``"(Tarzan|Jane) loves (?1)"`` is equivalent to ``"(Tarzan|Jane) loves (?:Tarzan|Jane)"``.
+
+ It's possible to backtrack into a recursed or repeated group.
+
+ You can't call a group if there is more than one group with that group name or group number (``"ambiguous group reference"``).
+
+ The alternative forms ``(?P>name)`` and ``(?P&name)`` are also supported.
+
+ Full Unicode case-folding is supported.
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.
+
+ Examples (in Python 3):
+
+ .. sourcecode:: python
+
+ >>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
+ (0, 6)
+ >>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
+ (0, 7)
+
+ In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.
+
+ Approximate "fuzzy" matching (`Hg issue 12 <https://bitbucket.org/mrabarnett/mrab-regex/issues/12>`_, `Hg issue 41 <https://bitbucket.org/mrabarnett/mrab-regex/issues/41>`_, `Hg issue 109 <https://bitbucket.org/mrabarnett/mrab-regex/issues/109>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.
+
+ A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)
+
+ The 3 types of error are:
+
+ * Insertion, indicated by "i"
+
+ * Deletion, indicated by "d"
+
+ * Substitution, indicated by "s"
+
+ In addition, "e" indicates any type of error.
+
+ The fuzziness of a regex item is specified between "{" and "}" after the item.
+
+ Examples:
+
+ * ``foo`` match "foo" exactly
+
+ * ``(?:foo){i}`` match "foo", permitting insertions
+
+ * ``(?:foo){d}`` match "foo", permitting deletions
+
+ * ``(?:foo){s}`` match "foo", permitting substitutions
+
+ * ``(?:foo){i,s}`` match "foo", permitting insertions and substitutions
+
+ * ``(?:foo){e}`` match "foo", permitting errors
+
+ If a certain type of error is specified, then any type not specified will **not** be permitted.
+
+ In the following examples I'll omit the item and write only the fuzziness:
+
+ * ``{d<=3}`` permit at most 3 deletions, but no other types
+
+ * ``{i<=1,s<=2}`` permit at most 1 insertion and at most 2 substitutions, but no deletions
+
+ * ``{1<=e<=3}`` permit at least 1 and at most 3 errors
+
+ * ``{i<=2,d<=2,e<=3}`` permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions
+
+ It's also possible to state the costs of each type of error and the maximum permitted total cost.
+
+ Examples:
+
+ * ``{2i+2d+1s<=4}`` each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+
+ * ``{i<=1,d<=1,s<=1,2i+2d+1s<=4}`` at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+
+ You can also use "<" instead of "<=" if you want an exclusive minimum or maximum.
+
+ You can add a test to perform on a character that's substituted or inserted.
+
+ Examples:
+
+ * ``{s<=2:[a-z]}`` at most 2 substitutions, which must be in the character set ``[a-z]``.
+
+ * ``{s<=2,i<=3:\d}`` at most 2 substitutions, at most 3 insertions, which must be digits.
+
+ By default, fuzzy matching searches for the first match that meets the given constraints. The ``ENHANCEMATCH`` flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.
+
+ The ``BESTMATCH`` flag will make it search for the best match instead.
+
+ Further examples to note:
+
+ * ``regex.search("(dog){e}", "cat and dog")[1]`` returns ``"cat"`` because that matches ``"dog"`` with 3 errors (an unlimited number of errors is permitted).
+
+ * ``regex.search("(dog){e<=1}", "cat and dog")[1]`` returns ``" dog"`` (with a leading space) because that matches ``"dog"`` with 1 error, which is within the limit.
+
+ * ``regex.search("(?e)(dog){e<=1}", "cat and dog")[1]`` returns ``"dog"`` (without a leading space) because the fuzzy search matches ``" dog"`` with 1 error, which is within the limit, and the ``(?e)`` then it attempts a better fit.
+
+ In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.
+
+ The match object has an attribute ``fuzzy_counts`` which gives the total number of substitutions, insertions and deletions.
+
+ .. sourcecode:: python
+
+ >>> # A 'raw' fuzzy match:
+ >>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 1)
+ >>> # 0 substitutions, 0 insertions, 1 deletion.
+
+ >>> # A better match might be possible if the ENHANCEMATCH flag used:
+ >>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 0)
+ >>> # 0 substitutions, 0 insertions, 0 deletions.
+
+ The match object also has an attribute ``fuzzy_changes`` which gives a tuple of the positions of the substitutions, insertions and deletions.
+
+ .. sourcecode:: python
+
+ >>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
+ >>> m
+ <regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
+ >>> m.fuzzy_changes
+ ([], [7, 8], [10, 11])
+
+ What this means is that if the matched part of the string had been:
+
+ .. sourcecode:: python
+
+ 'anacondfuuoo bar'
+
+ it would've been an exact match.
+
+ However, there were insertions at positions 7 and 8:
+
+ .. sourcecode:: python
+
+ 'anaconda fuuoo bar'
+ ^^
+
+ and deletions at positions 10 and 11:
+
+ .. sourcecode:: python
+
+ 'anaconda f~~oo bar'
+ ^^
+
+ So the actual string was:
+
+ .. sourcecode:: python
+
+ 'anaconda foo bar'
+
+ Named lists (`Hg issue 11 <https://bitbucket.org/mrabarnett/mrab-regex/issues/11>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``\L<name>``
+
+ There are occasions where you may want to include a list (actually, a set) of options in a regex.
+
+ One way is to build the pattern like this:
+
+ .. sourcecode:: python
+
+ >>> p = regex.compile(r"first|second|third|fourth|fifth")
+
+ but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, "cats" before "cat".
+
+ The new alternative is to use a named list:
+
+ .. sourcecode:: python
+
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set)
+
+ The order of the items is irrelevant, they are treated as a set. The named lists are available as the ``.named_lists`` attribute of the pattern object :
+
+ .. sourcecode:: python
+
+ >>> print(p.named_lists)
+ # Python 3
+ {'options': frozenset({'fifth', 'first', 'fourth', 'second', 'third'})}
+ # Python 2
+ {'options': frozenset(['fifth', 'fourth', 'second', 'third', 'first'])}
+
+ If there are any unused keyword arguments, ``ValueError`` will be raised unless you tell it otherwise:
+
+ .. sourcecode:: python
+
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[])
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 348, in compile
+ return _compile(pattern, flags, ignore_unused, kwargs)
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 585, in _compile
+ raise ValueError('unused keyword argument {!a}'.format(any_one))
+ ValueError: unused keyword argument 'other_options'
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[], ignore_unused=True)
+ >>>
+
+ Start and end of word
+ ^^^^^^^^^^^^^^^^^^^^^
+
+ ``\m`` matches at the start of a word.
+
+ ``\M`` matches at the end of a word.
+
+ Compare with ``\b``, which matches at the start or end of a word.
+
+ Unicode line separators
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ Normally the only line separator is ``\n`` (``\x0A``), but if the ``WORD`` flag is turned on then the line separators are ``\x0D\x0A``, ``\x0A``, ``\x0B``, ``\x0C`` and ``\x0D``, plus ``\x85``, ``\u2028`` and ``\u2029`` when working with Unicode.
+
+ This affects the regex dot ``"."``, which, with the ``DOTALL`` flag turned off, matches any character except a line separator. It also affects the line anchors ``^`` and ``$`` (in multiline mode).
+
+ Set operators
+ ^^^^^^^^^^^^^
+
+ **Version 1 behaviour only**
+
+ Set operators have been added, and a set ``[...]`` can include nested sets.
+
+ The operators, in order of increasing precedence, are:
+
+ * ``||`` for union ("x||y" means "x or y")
+
+ * ``~~`` (double tilde) for symmetric difference ("x~~y" means "x or y, but not both")
+
+ * ``&&`` for intersection ("x&&y" means "x and y")
+
+ * ``--`` (double dash) for difference ("x--y" means "x but not y")
+
+ Implicit union, ie, simple juxtaposition like in ``[ab]``, has the highest precedence. Thus, ``[ab&&cd]`` is the same as ``[[a||b]&&[c||d]]``.
+
+ Examples:
+
+ * ``[ab]`` # Set containing 'a' and 'b'
+
+ * ``[a-z]`` # Set containing 'a' .. 'z'
+
+ * ``[[a-z]--[qw]]`` # Set containing 'a' .. 'z', but not 'q' or 'w'
+
+ * ``[a-z--qw]`` # Same as above
+
+ * ``[\p{L}--QW]`` # Set containing all letters except 'Q' and 'W'
+
+ * ``[\p{N}--[0-9]]`` # Set containing all numbers except '0' .. '9'
+
+ * ``[\p{ASCII}&&\p{Letter}]`` # Set containing all characters which are ASCII and letter
+
+ regex.escape (`issue #2650 <https://bugs.python.org/issue2650>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ regex.escape has an additional keyword parameter ``special_only``. When True, only 'special' regex characters, such as '?', are escaped.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.escape("foo!?", special_only=False)
+ 'foo\\!\\?'
+ >>> regex.escape("foo!?", special_only=True)
+ 'foo!\\?'
+
+ regex.escape (`Hg issue 249 <https://bitbucket.org/mrabarnett/mrab-regex/issues/249>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ regex.escape has an additional keyword parameter ``literal_spaces``. When True, spaces are not escaped.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.escape("foo bar!?", literal_spaces=False)
+ 'foo\\ bar!\\?'
+ >>> regex.escape("foo bar!?", literal_spaces=True)
+ 'foo bar!\\?'
+
+ Repeated captures (`issue #7132 <https://bugs.python.org/issue7132>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:
+
+ * ``matchobject.captures([group1, ...])``
+
+ * Returns a list of the strings matched in a group or groups. Compare with ``matchobject.group([group1, ...])``.
+
+ * ``matchobject.starts([group])``
+
+ * Returns a list of the start positions. Compare with ``matchobject.start([group])``.
+
+ * ``matchobject.ends([group])``
+
+ * Returns a list of the end positions. Compare with ``matchobject.end([group])``.
+
+ * ``matchobject.spans([group])``
+
+ * Returns a list of the spans. Compare with ``matchobject.span([group])``.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r"(\w{3})+", "123456789")
+ >>> m.group(1)
+ '789'
+ >>> m.captures(1)
+ ['123', '456', '789']
+ >>> m.start(1)
+ 6
+ >>> m.starts(1)
+ [0, 3, 6]
+ >>> m.end(1)
+ 9
+ >>> m.ends(1)
+ [3, 6, 9]
+ >>> m.span(1)
+ (6, 9)
+ >>> m.spans(1)
+ [(0, 3), (3, 6), (6, 9)]
+
+ Atomic grouping (`issue #433030 <https://bugs.python.org/issue433030>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(?>...)``
+
+ If the following pattern subsequently fails, then the subpattern as a whole will fail.
+
+ Possessive quantifiers.
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(?:...)?+`` ; ``(?:...)*+`` ; ``(?:...)++`` ; ``(?:...){min,max}+``
+
+ The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, ``(?:...)++`` is equivalent to ``(?>(?:...)+)``.
+
+ Scoped flags (`issue #433028 <https://bugs.python.org/issue433028>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(?flags-flags:...)``
+
+ The flags will apply only to the subpattern. Flags can be turned on or off.
+
+ Definition of 'word' character (`issue #1693050 <https://bugs.python.org/issue1693050>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+
+ Variable-length lookbehind
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ A lookbehind can match a variable-length string.
+
+ Flags argument for regex.split, regex.sub and regex.subn (`issue #3482 <https://bugs.python.org/issue3482>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``regex.split``, ``regex.sub`` and ``regex.subn`` support a 'flags' argument.
+
+ Pos and endpos arguments for regex.sub and regex.subn
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``regex.sub`` and ``regex.subn`` support 'pos' and 'endpos' arguments.
+
+ 'Overlapped' argument for regex.findall and regex.finditer
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``regex.findall`` and ``regex.finditer`` support an 'overlapped' flag which permits overlapped matches.
+
+ Splititer
+ ^^^^^^^^^
+
+ ``regex.splititer`` has been added. It's a generator equivalent of ``regex.split``.
+
+ Subscripting for groups
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ A match object accepts access to the captured groups via subscripting and slicing:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
+ >>> print(m["before"])
+ pqr
+ >>> print(len(m))
+ 4
+ >>> print(m[:])
+ ('pqr123stu', 'pqr', '123', 'stu')
+
+ Named groups
+ ^^^^^^^^^^^^
+
+ Groups can be named with ``(?<name>...)`` as well as the current ``(?P<name>...)``.
+
+ Group references
+ ^^^^^^^^^^^^^^^^
+
+ Groups can be referenced within a pattern with ``\g<name>``. This also allows there to be more than 99 groups.
+
+ Named characters
+ ^^^^^^^^^^^^^^^^
+
+ ``\N{name}``
+
+ Named characters are supported. (Note: only those known by Python's Unicode database are supported.)
+
+ Unicode codepoint properties, including scripts and blocks
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``\p{property=value}``; ``\P{property=value}``; ``\p{value}`` ; ``\P{value}``
+
+ Many Unicode properties are supported, including blocks and scripts. ``\p{property=value}`` or ``\p{property:value}`` matches a character whose property ``property`` has value ``value``. The inverse of ``\p{property=value}`` is ``\P{property=value}`` or ``\p{^property=value}``.
+
+ If the short form ``\p{value}`` is used, the properties are checked in the order: ``General_Category``, ``Script``, ``Block``, binary property:
+
+ * ``Latin``, the 'Latin' script (``Script=Latin``).
+
+ * ``BasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+
+ * ``Alphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+
+ A short form starting with ``Is`` indicates a script or binary property:
+
+ * ``IsLatin``, the 'Latin' script (``Script=Latin``).
+
+ * ``IsAlphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+
+ A short form starting with ``In`` indicates a block property:
+
+ * ``InBasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+
+ POSIX character classes
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``[[:alpha:]]``; ``[[:^alpha:]]``
+
+ POSIX character classes are supported. These are normally treated as an alternative form of ``\p{...}``.
+
+ The exceptions are ``alnum``, ``digit``, ``punct`` and ``xdigit``, whose definitions are different from those of Unicode.
+
+ ``[[:alnum:]]`` is equivalent to ``\p{posix_alnum}``.
+
+ ``[[:digit:]]`` is equivalent to ``\p{posix_digit}``.
+
+ ``[[:punct:]]`` is equivalent to ``\p{posix_punct}``.
+
+ ``[[:xdigit:]]`` is equivalent to ``\p{posix_xdigit}``.
+
+ Search anchor
+ ^^^^^^^^^^^^^
+
+ ``\G``
+
+ A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:
+
+ .. sourcecode:: python
+
+ >>> regex.findall(r"\w{2}", "abcd ef")
+ ['ab', 'cd', 'ef']
+ >>> regex.findall(r"\G\w{2}", "abcd ef")
+ ['ab', 'cd']
+
+ * The search starts at position 0 and matches 2 letters 'ab'.
+
+ * The search continues at position 2 and matches 2 letters 'cd'.
+
+ * The search continues at position 4 and fails to match any letters.
+
+ * The anchor stops the search start position from being advanced, so there are no more results.
+
+ Reverse searching
+ ^^^^^^^^^^^^^^^^^
+
+ Searches can now work backwards:
+
+ .. sourcecode:: python
+
+ >>> regex.findall(r".", "abc")
+ ['a', 'b', 'c']
+ >>> regex.findall(r"(?r).", "abc")
+ ['c', 'b', 'a']
+
+ Note: the result of a reverse search is not necessarily the reverse of a forward search:
+
+ .. sourcecode:: python
+
+ >>> regex.findall(r"..", "abcde")
+ ['ab', 'cd']
+ >>> regex.findall(r"(?r)..", "abcde")
+ ['de', 'bc']
+
+ Matching a single grapheme
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``\X``
+
+ The grapheme matcher is supported. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+
+ Branch reset
+ ^^^^^^^^^^^^
+
+ ``(?|...|...)``
+
+ Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.match(r"(?|(first)|(second))", "first").groups()
+ ('first',)
+ >>> regex.match(r"(?|(first)|(second))", "second").groups()
+ ('second',)
+
+ Note that there is only one group.
+
+ Default Unicode word boundary
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The ``WORD`` flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to ``\b`` and ``\B``.
+
+ Timeout (Python 3)
+ ^^^^^^^^^^^^^^^^^^
+
+ The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:
+
+ .. sourcecode:: python
+
+ >>> from time import sleep
+ >>>
+ >>> def fast_replace(m):
+ ... return 'X'
+ ...
+ >>> def slow_replace(m):
+ ... sleep(0.5)
+ ... return 'X'
+ ...
+ >>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
+ 'XXXXX'
+ >>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 276, in sub
+ endpos, concurrent, timeout)
+ TimeoutError: regex timed out
+
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: Python Software Foundation License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Topic :: Scientific/Engineering :: Information Analysis
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Text Processing
+Classifier: Topic :: Text Processing :: General
diff --git a/README b/README
deleted file mode 100644
index adb06724f69ef9b944383aaaf720b8d771521d6b..0000000000000000000000000000000000000000
--- a/README
+++ /dev/null
@@ -1,18 +0,0 @@
-regex is an alternative to the re package in the Python standard library. It is
-intended to act as a drop in replacement. regex is supported on multiple
-versions of Python.
-
-For a full list of features see docs/Features.rst.
-
-To install from PyPI run
-
- python -m pip install regex
-
-To build and install regex for your default Python run
-
- python setup.py install
-
-To install regex for a specific version run setup.py with that interpreter, e.g.
-
- python3.7 setup.py install
-
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..622c000811416210017c76dc2f88702b41eb8388
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,1063 @@
+Introduction
+------------
+
+This regex implementation is backwards-compatible with the standard 're' module, but offers additional functionality.
+
+Note
+----
+
+The re module's behaviour with zero-width matches changed in Python 3.7, and this module will follow that behaviour when compiled for Python 3.7.
+
+Old vs new behaviour
+--------------------
+
+In order to be compatible with the re module, this module has 2 behaviours:
+
+* **Version 0** behaviour (old behaviour, compatible with the re module):
+
+ Please note that the re module's behaviour may change over time, and I'll endeavour to match that behaviour in version 0.
+
+ * Indicated by the ``VERSION0`` or ``V0`` flag, or ``(?V0)`` in the pattern.
+
+ * Zero-width matches are not handled correctly in the re module before Python 3.7. The behaviour in those earlier versions is:
+
+ * ``.split`` won't split a string at a zero-width match.
+
+ * ``.sub`` will advance by one character after a zero-width match.
+
+ * Inline flags apply to the entire pattern, and they can't be turned off.
+
+ * Only simple sets are supported.
+
+ * Case-insensitive matches in Unicode use simple case-folding by default.
+
+* **Version 1** behaviour (new behaviour, possibly different from the re module):
+
+ * Indicated by the ``VERSION1`` or ``V1`` flag, or ``(?V1)`` in the pattern.
+
+ * Zero-width matches are handled correctly.
+
+ * Inline flags apply to the end of the group or pattern, and they can be turned off.
+
+ * Nested sets and set operations are supported.
+
+ * Case-insensitive matches in Unicode use full case-folding by default.
+
+If no version is specified, the regex module will default to ``regex.DEFAULT_VERSION``.
+
+Case-insensitive matches in Unicode
+-----------------------------------
+
+The regex module supports both simple and full case-folding for case-insensitive matches in Unicode. Use of full case-folding can be turned on using the ``FULLCASE`` or ``F`` flag, or ``(?f)`` in the pattern. Please note that this flag affects how the ``IGNORECASE`` flag works; the ``FULLCASE`` flag itself does not turn on case-insensitive matching.
+
+In the version 0 behaviour, the flag is off by default.
+
+In the version 1 behaviour, the flag is on by default.
+
+Nested sets and set operations
+------------------------------
+
+It's not possible to support both simple sets, as used in the re module, and nested sets at the same time because of a difference in the meaning of an unescaped ``"["`` in a set.
+
+For example, the pattern ``[[a-z]--[aeiou]]`` is treated in the version 0 behaviour (simple sets, compatible with the re module) as:
+
+* Set containing "[" and the letters "a" to "z"
+
+* Literal "--"
+
+* Set containing letters "a", "e", "i", "o", "u"
+
+* Literal "]"
+
+but in the version 1 behaviour (nested sets, enhanced behaviour) as:
+
+* Set which is:
+
+ * Set containing the letters "a" to "z"
+
+* but excluding:
+
+ * Set containing the letters "a", "e", "i", "o", "u"
+
+Version 0 behaviour: only simple sets are supported.
+
+Version 1 behaviour: nested sets and set operations are supported.
+
+Flags
+-----
+
+There are 2 kinds of flag: scoped and global. Scoped flags can apply to only part of a pattern and can be turned on or off; global flags apply to the entire pattern and can only be turned on.
+
+The scoped flags are: ``FULLCASE``, ``IGNORECASE``, ``MULTILINE``, ``DOTALL``, ``VERBOSE``, ``WORD``.
+
+The global flags are: ``ASCII``, ``BESTMATCH``, ``ENHANCEMATCH``, ``LOCALE``, ``POSIX``, ``REVERSE``, ``UNICODE``, ``VERSION0``, ``VERSION1``.
+
+If neither the ``ASCII``, ``LOCALE`` nor ``UNICODE`` flag is specified, it will default to ``UNICODE`` if the regex pattern is a Unicode string and ``ASCII`` if it's a bytestring.
+
+The ``ENHANCEMATCH`` flag makes fuzzy matching attempt to improve the fit of the next match that it finds.
+
+The ``BESTMATCH`` flag makes fuzzy matching search for the best match instead of the next match.
+
+Notes on named capture groups
+-----------------------------
+
+All capture groups have a group number, starting from 1.
+
+Groups with the same group name will have the same group number, and groups with a different group name will have a different group number.
+
+The same name can be used by more than one group, with later captures 'overwriting' earlier captures. All of the captures of the group will be available from the ``captures`` method of the match object.
+
+Group numbers will be reused across different branches of a branch reset, eg. ``(?|(first)|(second))`` has only group 1. If capture groups have different group names then they will, of course, have different group numbers, eg. ``(?|(?P<foo>first)|(?P<bar>second))`` has group 1 ("foo") and group 2 ("bar").
+
+In the regex ``(\s+)(?|(?P<foo>[A-Z]+)|(\w+) (?P<foo>[0-9]+)`` there are 2 groups:
+
+* ``(\s+)`` is group 1.
+
+* ``(?P<foo>[A-Z]+)`` is group 2, also called "foo".
+
+* ``(\w+)`` is group 2 because of the branch reset.
+
+* ``(?P<foo>[0-9]+)`` is group 2 because it's called "foo".
+
+If you want to prevent ``(\w+)`` from being group 2, you need to name it (different name, different group number).
+
+Multithreading
+--------------
+
+The regex module releases the GIL during matching on instances of the built-in (immutable) string classes, enabling other Python threads to run concurrently. It is also possible to force the regex module to release the GIL during matching by calling the matching methods with the keyword argument ``concurrent=True``. The behaviour is undefined if the string changes during matching, so use it *only* when it is guaranteed that that won't happen.
+
+Unicode
+-------
+
+This module supports Unicode 13.0.0.
+
+Full Unicode case-folding is supported.
+
+Additional features
+-------------------
+
+The issue numbers relate to the Python bug tracker, except where listed as "Hg issue".
+
+Added support for lookaround in conditional pattern (`Hg issue 163 <https://bitbucket.org/mrabarnett/mrab-regex/issues/163>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The test of a conditional pattern can now be a lookaround.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
+ <regex.Match object; span=(0, 3), match='123'>
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
+ <regex.Match object; span=(0, 6), match='abc123'>
+
+This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
+ <regex.Match object; span=(0, 6), match='123abc'>
+ >>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
+ None
+
+In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was **not** attempted.
+
+Added POSIX matching (leftmost longest) (`Hg issue 150 <https://bitbucket.org/mrabarnett/mrab-regex/issues/150>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag (``(?p)``).
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> # Normal matching.
+ >>> regex.search(r'Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 2), match='Mr'>
+ >>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 7), match='oneself'>
+ >>> # POSIX matching.
+ >>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 3), match='Mrs'>
+ >>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 17), match='oneselfsufficient'>
+
+Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.
+
+Added ``(?(DEFINE)...)`` (`Hg issue 152 <https://bitbucket.org/mrabarnett/mrab-regex/issues/152>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
+ <regex.Match object; span=(0, 11), match='5 elephants'>
+
+Added ``(*PRUNE)``, ``(*SKIP)`` and ``(*FAIL)`` (`Hg issue 153 <https://bitbucket.org/mrabarnett/mrab-regex/issues/153>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``(*PRUNE)`` discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+
+``(*SKIP)`` is similar to ``(*PRUNE)``, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+
+``(*FAIL)`` causes immediate backtracking. ``(*F)`` is a permitted abbreviation.
+
+Added ``\K`` (`Hg issue 151 <https://bitbucket.org/mrabarnett/mrab-regex/issues/151>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Keeps the part of the entire match after the position where ``\K`` occurred; the part before it is discarded.
+
+It does not affect what capture groups return.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'cde'
+ >>> m[1]
+ 'abcde'
+ >>>
+ >>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'bc'
+ >>> m[1]
+ 'bcdef'
+
+Added capture subscripting for ``expandf`` and ``subf``/``subfn`` (`Hg issue 133 <https://bitbucket.org/mrabarnett/mrab-regex/issues/133>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can now use subscripting to get the captures of a repeated capture group.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.match(r"(\w)+", "abc")
+ >>> m.expandf("{1}")
+ 'c'
+ >>> m.expandf("{1[0]} {1[1]} {1[2]}")
+ 'a b c'
+ >>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
+ 'c b a'
+ >>>
+ >>> m = regex.match(r"(?P<letter>\w)+", "abc")
+ >>> m.expandf("{letter}")
+ 'c'
+ >>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
+ 'a b c'
+ >>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
+ 'c b a'
+
+Added support for referring to a group by number using ``(?P=...)``.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This is in addition to the existing ``\g<...>``.
+
+Fixed the handling of locale-sensitive regexes.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``LOCALE`` flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.
+
+Added partial matches (`Hg issue 102 <https://bitbucket.org/mrabarnett/mrab-regex/issues/102>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.
+
+Partial matches are supported by ``match``, ``search``, ``fullmatch`` and ``finditer`` with the ``partial`` keyword argument.
+
+Match objects have a ``partial`` attribute, which is ``True`` if it's a partial match.
+
+For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:
+
+.. sourcecode:: python
+
+ >>> pattern = regex.compile(r'\d{4}')
+
+ >>> # Initially, nothing has been entered:
+ >>> print(pattern.fullmatch('', partial=True))
+ <regex.Match object; span=(0, 0), match='', partial=True>
+
+ >>> # An empty string is OK, but it's only a partial match.
+ >>> # The user enters a letter:
+ >>> print(pattern.fullmatch('a', partial=True))
+ None
+ >>> # It'll never match.
+
+ >>> # The user deletes that and enters a digit:
+ >>> print(pattern.fullmatch('1', partial=True))
+ <regex.Match object; span=(0, 1), match='1', partial=True>
+ >>> # It matches this far, but it's only a partial match.
+
+ >>> # The user enters 2 more digits:
+ >>> print(pattern.fullmatch('123', partial=True))
+ <regex.Match object; span=(0, 3), match='123', partial=True>
+ >>> # It matches this far, but it's only a partial match.
+
+ >>> # The user enters another digit:
+ >>> print(pattern.fullmatch('1234', partial=True))
+ <regex.Match object; span=(0, 4), match='1234'>
+ >>> # It's a complete match.
+
+ >>> # If the user enters another digit:
+ >>> print(pattern.fullmatch('12345', partial=True))
+ None
+ >>> # It's no longer a match.
+
+ >>> # This is a partial match:
+ >>> pattern.match('123', partial=True).partial
+ True
+
+ >>> # This is a complete match:
+ >>> pattern.match('1233', partial=True).partial
+ False
+
+``*`` operator not working correctly with sub() (`Hg issue 106 <https://bitbucket.org/mrabarnett/mrab-regex/issues/106>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Sometimes it's not clear how zero-width matches should be handled. For example, should ``.*`` match 0 characters directly after matching >0 characters?
+
+Examples:
+
+.. sourcecode:: python
+
+ # Python 3.7 and later
+ >>> regex.sub('.*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('.*?', '|', 'test')
+ '|||||||||'
+
+ # Python 3.6 and earlier
+ >>> regex.sub('(?V0).*', 'x', 'test')
+ 'x'
+ >>> regex.sub('(?V1).*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('(?V0).*?', '|', 'test')
+ '|t|e|s|t|'
+ >>> regex.sub('(?V1).*?', '|', 'test')
+ '|||||||||'
+
+Added ``capturesdict`` (`Hg issue 86 <https://bitbucket.org/mrabarnett/mrab-regex/issues/86>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``capturesdict`` is a combination of ``groupdict`` and ``captures``:
+
+``groupdict`` returns a dict of the named groups and the last capture of those groups.
+
+``captures`` returns a list of all the captures of a group
+
+``capturesdict`` returns a dict of the named groups and lists of all the captures of those groups.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
+ >>> m.groupdict()
+ {'word': 'three', 'digits': '3'}
+ >>> m.captures("word")
+ ['one', 'two', 'three']
+ >>> m.captures("digits")
+ ['1', '2', '3']
+ >>> m.capturesdict()
+ {'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}
+
+Allow duplicate names of groups (`Hg issue 87 <https://bitbucket.org/mrabarnett/mrab-regex/issues/87>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Group names can now be duplicated.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> # With optional groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Only the second group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['second']
+ >>> # Only the first group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
+ >>> m.group("item")
+ 'first'
+ >>> m.captures("item")
+ ['first']
+ >>>
+ >>> # With mandatory groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['', 'second']
+ >>> # And yet again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
+ >>> m.group("item")
+ ''
+ >>> m.captures("item")
+ ['first', '']
+
+Added ``fullmatch`` (`issue #16203 <https://bugs.python.org/issue16203>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``fullmatch`` behaves like ``match``, except that it must match all of the string.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> print(regex.fullmatch(r"abc", "abc").span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "abcx"))
+ None
+ >>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
+ (1, 4)
+ >>>
+ >>> regex.match(r"a.*?", "abcd").group(0)
+ 'a'
+ >>> regex.fullmatch(r"a.*?", "abcd").group(0)
+ 'abcd'
+
+Added ``subf`` and ``subfn``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``subf`` and ``subfn`` are alternatives to ``sub`` and ``subn`` respectively. When passed a replacement string, they treat it as a format string.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
+ 'foo bar => bar foo'
+ >>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
+ 'bar foo'
+
+Added ``expandf`` to match object
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``expandf`` is an alternative to ``expand``. When passed a replacement string, it treats it as a format string.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.match(r"(\w+) (\w+)", "foo bar")
+ >>> m.expandf("{0} => {2} {1}")
+ 'foo bar => bar foo'
+ >>>
+ >>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
+ >>> m.expandf("{word2} {word1}")
+ 'bar foo'
+
+Detach searched string
+^^^^^^^^^^^^^^^^^^^^^^
+
+A match object contains a reference to the string that was searched, via its ``string`` attribute. The ``detach_string`` method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.
+
+Example:
+
+.. sourcecode:: python
+
+ >>> m = regex.search(r"\w+", "Hello world")
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ Hello world
+ >>> m.detach_string()
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ None
+
+Recursive patterns (`Hg issue 27 <https://bitbucket.org/mrabarnett/mrab-regex/issues/27>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Recursive and repeated patterns are supported.
+
+``(?R)`` or ``(?0)`` tries to match the entire regex recursively. ``(?1)``, ``(?2)``, etc, try to match the relevant capture group.
+
+``(?&name)`` tries to match the named capture group.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
+ ('Tarzan',)
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
+ ('Jane',)
+
+ >>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
+ >>> m.group(0, 1, 2)
+ ('kayak', 'k', None)
+
+The first two examples show how the subpattern within the capture group is reused, but is _not_ itself a capture group. In other words, ``"(Tarzan|Jane) loves (?1)"`` is equivalent to ``"(Tarzan|Jane) loves (?:Tarzan|Jane)"``.
+
+It's possible to backtrack into a recursed or repeated group.
+
+You can't call a group if there is more than one group with that group name or group number (``"ambiguous group reference"``).
+
+The alternative forms ``(?P>name)`` and ``(?P&name)`` are also supported.
+
+Full Unicode case-folding is supported.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.
+
+Examples (in Python 3):
+
+.. sourcecode:: python
+
+ >>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
+ (0, 6)
+ >>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
+ (0, 7)
+
+In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.
+
+Approximate "fuzzy" matching (`Hg issue 12 <https://bitbucket.org/mrabarnett/mrab-regex/issues/12>`_, `Hg issue 41 <https://bitbucket.org/mrabarnett/mrab-regex/issues/41>`_, `Hg issue 109 <https://bitbucket.org/mrabarnett/mrab-regex/issues/109>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.
+
+A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)
+
+The 3 types of error are:
+
+* Insertion, indicated by "i"
+
+* Deletion, indicated by "d"
+
+* Substitution, indicated by "s"
+
+In addition, "e" indicates any type of error.
+
+The fuzziness of a regex item is specified between "{" and "}" after the item.
+
+Examples:
+
+* ``foo`` match "foo" exactly
+
+* ``(?:foo){i}`` match "foo", permitting insertions
+
+* ``(?:foo){d}`` match "foo", permitting deletions
+
+* ``(?:foo){s}`` match "foo", permitting substitutions
+
+* ``(?:foo){i,s}`` match "foo", permitting insertions and substitutions
+
+* ``(?:foo){e}`` match "foo", permitting errors
+
+If a certain type of error is specified, then any type not specified will **not** be permitted.
+
+In the following examples I'll omit the item and write only the fuzziness:
+
+* ``{d<=3}`` permit at most 3 deletions, but no other types
+
+* ``{i<=1,s<=2}`` permit at most 1 insertion and at most 2 substitutions, but no deletions
+
+* ``{1<=e<=3}`` permit at least 1 and at most 3 errors
+
+* ``{i<=2,d<=2,e<=3}`` permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions
+
+It's also possible to state the costs of each type of error and the maximum permitted total cost.
+
+Examples:
+
+* ``{2i+2d+1s<=4}`` each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+
+* ``{i<=1,d<=1,s<=1,2i+2d+1s<=4}`` at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+
+You can also use "<" instead of "<=" if you want an exclusive minimum or maximum.
+
+You can add a test to perform on a character that's substituted or inserted.
+
+Examples:
+
+* ``{s<=2:[a-z]}`` at most 2 substitutions, which must be in the character set ``[a-z]``.
+
+* ``{s<=2,i<=3:\d}`` at most 2 substitutions, at most 3 insertions, which must be digits.
+
+By default, fuzzy matching searches for the first match that meets the given constraints. The ``ENHANCEMATCH`` flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.
+
+The ``BESTMATCH`` flag will make it search for the best match instead.
+
+Further examples to note:
+
+* ``regex.search("(dog){e}", "cat and dog")[1]`` returns ``"cat"`` because that matches ``"dog"`` with 3 errors (an unlimited number of errors is permitted).
+
+* ``regex.search("(dog){e<=1}", "cat and dog")[1]`` returns ``" dog"`` (with a leading space) because that matches ``"dog"`` with 1 error, which is within the limit.
+
+* ``regex.search("(?e)(dog){e<=1}", "cat and dog")[1]`` returns ``"dog"`` (without a leading space) because the fuzzy search matches ``" dog"`` with 1 error, which is within the limit, and the ``(?e)`` then it attempts a better fit.
+
+In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.
+
+The match object has an attribute ``fuzzy_counts`` which gives the total number of substitutions, insertions and deletions.
+
+.. sourcecode:: python
+
+ >>> # A 'raw' fuzzy match:
+ >>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 1)
+ >>> # 0 substitutions, 0 insertions, 1 deletion.
+
+ >>> # A better match might be possible if the ENHANCEMATCH flag used:
+ >>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 0)
+ >>> # 0 substitutions, 0 insertions, 0 deletions.
+
+The match object also has an attribute ``fuzzy_changes`` which gives a tuple of the positions of the substitutions, insertions and deletions.
+
+.. sourcecode:: python
+
+ >>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
+ >>> m
+ <regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
+ >>> m.fuzzy_changes
+ ([], [7, 8], [10, 11])
+
+What this means is that if the matched part of the string had been:
+
+.. sourcecode:: python
+
+ 'anacondfuuoo bar'
+
+it would've been an exact match.
+
+However, there were insertions at positions 7 and 8:
+
+.. sourcecode:: python
+
+ 'anaconda fuuoo bar'
+ ^^
+
+and deletions at positions 10 and 11:
+
+.. sourcecode:: python
+
+ 'anaconda f~~oo bar'
+ ^^
+
+So the actual string was:
+
+.. sourcecode:: python
+
+ 'anaconda foo bar'
+
+Named lists (`Hg issue 11 <https://bitbucket.org/mrabarnett/mrab-regex/issues/11>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``\L<name>``
+
+There are occasions where you may want to include a list (actually, a set) of options in a regex.
+
+One way is to build the pattern like this:
+
+.. sourcecode:: python
+
+ >>> p = regex.compile(r"first|second|third|fourth|fifth")
+
+but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, "cats" before "cat".
+
+The new alternative is to use a named list:
+
+.. sourcecode:: python
+
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set)
+
+The order of the items is irrelevant, they are treated as a set. The named lists are available as the ``.named_lists`` attribute of the pattern object :
+
+.. sourcecode:: python
+
+ >>> print(p.named_lists)
+ # Python 3
+ {'options': frozenset({'fifth', 'first', 'fourth', 'second', 'third'})}
+ # Python 2
+ {'options': frozenset(['fifth', 'fourth', 'second', 'third', 'first'])}
+
+If there are any unused keyword arguments, ``ValueError`` will be raised unless you tell it otherwise:
+
+.. sourcecode:: python
+
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[])
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 348, in compile
+ return _compile(pattern, flags, ignore_unused, kwargs)
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 585, in _compile
+ raise ValueError('unused keyword argument {!a}'.format(any_one))
+ ValueError: unused keyword argument 'other_options'
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[], ignore_unused=True)
+ >>>
+
+Start and end of word
+^^^^^^^^^^^^^^^^^^^^^
+
+``\m`` matches at the start of a word.
+
+``\M`` matches at the end of a word.
+
+Compare with ``\b``, which matches at the start or end of a word.
+
+Unicode line separators
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Normally the only line separator is ``\n`` (``\x0A``), but if the ``WORD`` flag is turned on then the line separators are ``\x0D\x0A``, ``\x0A``, ``\x0B``, ``\x0C`` and ``\x0D``, plus ``\x85``, ``\u2028`` and ``\u2029`` when working with Unicode.
+
+This affects the regex dot ``"."``, which, with the ``DOTALL`` flag turned off, matches any character except a line separator. It also affects the line anchors ``^`` and ``$`` (in multiline mode).
+
+Set operators
+^^^^^^^^^^^^^
+
+**Version 1 behaviour only**
+
+Set operators have been added, and a set ``[...]`` can include nested sets.
+
+The operators, in order of increasing precedence, are:
+
+* ``||`` for union ("x||y" means "x or y")
+
+* ``~~`` (double tilde) for symmetric difference ("x~~y" means "x or y, but not both")
+
+* ``&&`` for intersection ("x&&y" means "x and y")
+
+* ``--`` (double dash) for difference ("x--y" means "x but not y")
+
+Implicit union, ie, simple juxtaposition like in ``[ab]``, has the highest precedence. Thus, ``[ab&&cd]`` is the same as ``[[a||b]&&[c||d]]``.
+
+Examples:
+
+* ``[ab]`` # Set containing 'a' and 'b'
+
+* ``[a-z]`` # Set containing 'a' .. 'z'
+
+* ``[[a-z]--[qw]]`` # Set containing 'a' .. 'z', but not 'q' or 'w'
+
+* ``[a-z--qw]`` # Same as above
+
+* ``[\p{L}--QW]`` # Set containing all letters except 'Q' and 'W'
+
+* ``[\p{N}--[0-9]]`` # Set containing all numbers except '0' .. '9'
+
+* ``[\p{ASCII}&&\p{Letter}]`` # Set containing all characters which are ASCII and letter
+
+regex.escape (`issue #2650 <https://bugs.python.org/issue2650>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+regex.escape has an additional keyword parameter ``special_only``. When True, only 'special' regex characters, such as '?', are escaped.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.escape("foo!?", special_only=False)
+ 'foo\\!\\?'
+ >>> regex.escape("foo!?", special_only=True)
+ 'foo!\\?'
+
+regex.escape (`Hg issue 249 <https://bitbucket.org/mrabarnett/mrab-regex/issues/249>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+regex.escape has an additional keyword parameter ``literal_spaces``. When True, spaces are not escaped.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.escape("foo bar!?", literal_spaces=False)
+ 'foo\\ bar!\\?'
+ >>> regex.escape("foo bar!?", literal_spaces=True)
+ 'foo bar!\\?'
+
+Repeated captures (`issue #7132 <https://bugs.python.org/issue7132>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:
+
+* ``matchobject.captures([group1, ...])``
+
+ * Returns a list of the strings matched in a group or groups. Compare with ``matchobject.group([group1, ...])``.
+
+* ``matchobject.starts([group])``
+
+ * Returns a list of the start positions. Compare with ``matchobject.start([group])``.
+
+* ``matchobject.ends([group])``
+
+ * Returns a list of the end positions. Compare with ``matchobject.end([group])``.
+
+* ``matchobject.spans([group])``
+
+ * Returns a list of the spans. Compare with ``matchobject.span([group])``.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.search(r"(\w{3})+", "123456789")
+ >>> m.group(1)
+ '789'
+ >>> m.captures(1)
+ ['123', '456', '789']
+ >>> m.start(1)
+ 6
+ >>> m.starts(1)
+ [0, 3, 6]
+ >>> m.end(1)
+ 9
+ >>> m.ends(1)
+ [3, 6, 9]
+ >>> m.span(1)
+ (6, 9)
+ >>> m.spans(1)
+ [(0, 3), (3, 6), (6, 9)]
+
+Atomic grouping (`issue #433030 <https://bugs.python.org/issue433030>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``(?>...)``
+
+If the following pattern subsequently fails, then the subpattern as a whole will fail.
+
+Possessive quantifiers.
+^^^^^^^^^^^^^^^^^^^^^^^
+
+``(?:...)?+`` ; ``(?:...)*+`` ; ``(?:...)++`` ; ``(?:...){min,max}+``
+
+The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, ``(?:...)++`` is equivalent to ``(?>(?:...)+)``.
+
+Scoped flags (`issue #433028 <https://bugs.python.org/issue433028>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``(?flags-flags:...)``
+
+The flags will apply only to the subpattern. Flags can be turned on or off.
+
+Definition of 'word' character (`issue #1693050 <https://bugs.python.org/issue1693050>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+
+Variable-length lookbehind
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A lookbehind can match a variable-length string.
+
+Flags argument for regex.split, regex.sub and regex.subn (`issue #3482 <https://bugs.python.org/issue3482>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``regex.split``, ``regex.sub`` and ``regex.subn`` support a 'flags' argument.
+
+Pos and endpos arguments for regex.sub and regex.subn
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``regex.sub`` and ``regex.subn`` support 'pos' and 'endpos' arguments.
+
+'Overlapped' argument for regex.findall and regex.finditer
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``regex.findall`` and ``regex.finditer`` support an 'overlapped' flag which permits overlapped matches.
+
+Splititer
+^^^^^^^^^
+
+``regex.splititer`` has been added. It's a generator equivalent of ``regex.split``.
+
+Subscripting for groups
+^^^^^^^^^^^^^^^^^^^^^^^
+
+A match object accepts access to the captured groups via subscripting and slicing:
+
+.. sourcecode:: python
+
+ >>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
+ >>> print(m["before"])
+ pqr
+ >>> print(len(m))
+ 4
+ >>> print(m[:])
+ ('pqr123stu', 'pqr', '123', 'stu')
+
+Named groups
+^^^^^^^^^^^^
+
+Groups can be named with ``(?<name>...)`` as well as the current ``(?P<name>...)``.
+
+Group references
+^^^^^^^^^^^^^^^^
+
+Groups can be referenced within a pattern with ``\g<name>``. This also allows there to be more than 99 groups.
+
+Named characters
+^^^^^^^^^^^^^^^^
+
+``\N{name}``
+
+Named characters are supported. (Note: only those known by Python's Unicode database are supported.)
+
+Unicode codepoint properties, including scripts and blocks
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``\p{property=value}``; ``\P{property=value}``; ``\p{value}`` ; ``\P{value}``
+
+Many Unicode properties are supported, including blocks and scripts. ``\p{property=value}`` or ``\p{property:value}`` matches a character whose property ``property`` has value ``value``. The inverse of ``\p{property=value}`` is ``\P{property=value}`` or ``\p{^property=value}``.
+
+If the short form ``\p{value}`` is used, the properties are checked in the order: ``General_Category``, ``Script``, ``Block``, binary property:
+
+* ``Latin``, the 'Latin' script (``Script=Latin``).
+
+* ``BasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+
+* ``Alphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+
+A short form starting with ``Is`` indicates a script or binary property:
+
+* ``IsLatin``, the 'Latin' script (``Script=Latin``).
+
+* ``IsAlphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+
+A short form starting with ``In`` indicates a block property:
+
+* ``InBasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+
+POSIX character classes
+^^^^^^^^^^^^^^^^^^^^^^^
+
+``[[:alpha:]]``; ``[[:^alpha:]]``
+
+POSIX character classes are supported. These are normally treated as an alternative form of ``\p{...}``.
+
+The exceptions are ``alnum``, ``digit``, ``punct`` and ``xdigit``, whose definitions are different from those of Unicode.
+
+``[[:alnum:]]`` is equivalent to ``\p{posix_alnum}``.
+
+``[[:digit:]]`` is equivalent to ``\p{posix_digit}``.
+
+``[[:punct:]]`` is equivalent to ``\p{posix_punct}``.
+
+``[[:xdigit:]]`` is equivalent to ``\p{posix_xdigit}``.
+
+Search anchor
+^^^^^^^^^^^^^
+
+``\G``
+
+A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:
+
+.. sourcecode:: python
+
+ >>> regex.findall(r"\w{2}", "abcd ef")
+ ['ab', 'cd', 'ef']
+ >>> regex.findall(r"\G\w{2}", "abcd ef")
+ ['ab', 'cd']
+
+* The search starts at position 0 and matches 2 letters 'ab'.
+
+* The search continues at position 2 and matches 2 letters 'cd'.
+
+* The search continues at position 4 and fails to match any letters.
+
+* The anchor stops the search start position from being advanced, so there are no more results.
+
+Reverse searching
+^^^^^^^^^^^^^^^^^
+
+Searches can now work backwards:
+
+.. sourcecode:: python
+
+ >>> regex.findall(r".", "abc")
+ ['a', 'b', 'c']
+ >>> regex.findall(r"(?r).", "abc")
+ ['c', 'b', 'a']
+
+Note: the result of a reverse search is not necessarily the reverse of a forward search:
+
+.. sourcecode:: python
+
+ >>> regex.findall(r"..", "abcde")
+ ['ab', 'cd']
+ >>> regex.findall(r"(?r)..", "abcde")
+ ['de', 'bc']
+
+Matching a single grapheme
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``\X``
+
+The grapheme matcher is supported. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+
+Branch reset
+^^^^^^^^^^^^
+
+``(?|...|...)``
+
+Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> regex.match(r"(?|(first)|(second))", "first").groups()
+ ('first',)
+ >>> regex.match(r"(?|(first)|(second))", "second").groups()
+ ('second',)
+
+Note that there is only one group.
+
+Default Unicode word boundary
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``WORD`` flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to ``\b`` and ``\B``.
+
+Timeout (Python 3)
+^^^^^^^^^^^^^^^^^^
+
+The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:
+
+.. sourcecode:: python
+
+ >>> from time import sleep
+ >>>
+ >>> def fast_replace(m):
+ ... return 'X'
+ ...
+ >>> def slow_replace(m):
+ ... sleep(0.5)
+ ... return 'X'
+ ...
+ >>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
+ 'XXXXX'
+ >>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 276, in sub
+ endpos, concurrent, timeout)
+ TimeoutError: regex timed out
diff --git a/docs/Features.html b/docs/Features.html
index cb4b13a352573126449b9be4c7165689680b4fe3..34d0e4b5ba3d3c6ee729c02a4863f53463f9a5bd 100644
--- a/docs/Features.html
+++ b/docs/Features.html
@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
<title>Features.rst</title>
<style type="text/css">
@@ -461,14 +461,14 @@ ul.auto-toc {
</div>
<div class="section" id="unicode">
<h1>Unicode</h1>
-<p>This module supports Unicode 12.1.0.</p>
+<p>This module supports Unicode 13.0.0.</p>
<p>Full Unicode case-folding is supported.</p>
</div>
<div class="section" id="additional-features">
<h1>Additional features</h1>
<p>The issue numbers relate to the Python bug tracker, except where listed as "Hg issue".</p>
-<ul>
-<li><p class="first">Added support for lookaround in conditional pattern (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/163">Hg issue 163</a>)</p>
+<div class="section" id="added-support-for-lookaround-in-conditional-pattern-hg-issue-163">
+<h2>Added support for lookaround in conditional pattern (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/163">Hg issue 163</a>)</h2>
<p>The test of a conditional pattern can now be a lookaround.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -486,8 +486,9 @@ ul.auto-toc {
<span class="name builtin pseudo">None</span>
</pre>
<p>In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was <strong>not</strong> attempted.</p>
-</li>
-<li><p class="first">Added POSIX matching (leftmost longest) (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/150">Hg issue 150</a>)</p>
+</div>
+<div class="section" id="added-posix-matching-leftmost-longest-hg-issue-150">
+<h2>Added POSIX matching (leftmost longest) (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/150">Hg issue 150</a>)</h2>
<p>The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the <tt class="docutils literal">POSIX</tt> flag (<tt class="docutils literal"><span class="pre">(?p)</span></tt>).</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -503,21 +504,24 @@ ul.auto-toc {
<span class="operator"><</span><span class="name">regex</span><span class="operator">.</span><span class="name">Match</span> <span class="name builtin">object</span><span class="punctuation">;</span> <span class="name">span</span><span class="operator">=</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="literal number integer">17</span><span class="punctuation">),</span> <span class="name">match</span><span class="operator">=</span><span class="literal string single">'oneselfsufficient'</span><span class="operator">></span>
</pre>
<p>Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.</p>
-</li>
-<li><p class="first">Added <tt class="docutils literal"><span class="pre">(?(DEFINE)...)</span></tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/152">Hg issue 152</a>)</p>
+</div>
+<div class="section" id="added-define-hg-issue-152">
+<h2>Added <tt class="docutils literal"><span class="pre">(?(DEFINE)...)</span></tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/152">Hg issue 152</a>)</h2>
<p>If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.</p>
<p>Examples:</p>
<pre class="code python literal-block">
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">search</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string single">'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)'</span><span class="punctuation">,</span> <span class="literal string single">'5 elephants'</span><span class="punctuation">)</span>
<span class="operator"><</span><span class="name">regex</span><span class="operator">.</span><span class="name">Match</span> <span class="name builtin">object</span><span class="punctuation">;</span> <span class="name">span</span><span class="operator">=</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="literal number integer">11</span><span class="punctuation">),</span> <span class="name">match</span><span class="operator">=</span><span class="literal string single">'5 elephants'</span><span class="operator">></span>
</pre>
-</li>
-<li><p class="first">Added <tt class="docutils literal">(*PRUNE)</tt>, <tt class="docutils literal">(*SKIP)</tt> and <tt class="docutils literal">(*FAIL)</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/153">Hg issue 153</a>)</p>
+</div>
+<div class="section" id="added-prune-skip-and-fail-hg-issue-153">
+<h2>Added <tt class="docutils literal">(*PRUNE)</tt>, <tt class="docutils literal">(*SKIP)</tt> and <tt class="docutils literal">(*FAIL)</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/153">Hg issue 153</a>)</h2>
<p><tt class="docutils literal">(*PRUNE)</tt> discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.</p>
<p><tt class="docutils literal">(*SKIP)</tt> is similar to <tt class="docutils literal">(*PRUNE)</tt>, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.</p>
<p><tt class="docutils literal">(*FAIL)</tt> causes immediate backtracking. <tt class="docutils literal">(*F)</tt> is a permitted abbreviation.</p>
-</li>
-<li><p class="first">Added <tt class="docutils literal">\K</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/151">Hg issue 151</a>)</p>
+</div>
+<div class="section" id="added-k-hg-issue-151">
+<h2>Added <tt class="docutils literal">\K</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/151">Hg issue 151</a>)</h2>
<p>Keeps the part of the entire match after the position where <tt class="docutils literal">\K</tt> occurred; the part before it is discarded.</p>
<p>It does not affect what capture groups return.</p>
<p>Examples:</p>
@@ -534,8 +538,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">m</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">]</span>
<span class="literal string single">'bcdef'</span>
</pre>
-</li>
-<li><p class="first">Added capture subscripting for <tt class="docutils literal">expandf</tt> and <tt class="docutils literal">subf</tt>/<tt class="docutils literal">subfn</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/133">Hg issue 133</a>)</p>
+</div>
+<div class="section" id="added-capture-subscripting-for-expandf-and-subf-subfn-hg-issue-133">
+<h2>Added capture subscripting for <tt class="docutils literal">expandf</tt> and <tt class="docutils literal">subf</tt>/<tt class="docutils literal">subfn</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/133">Hg issue 133</a>)</h2>
<p>You can now use subscripting to get the captures of a repeated capture group.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -555,14 +560,17 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">m</span><span class="operator">.</span><span class="name">expandf</span><span class="punctuation">(</span><span class="literal string double">"{letter[-1]} {letter[-2]} {letter[-3]}"</span><span class="punctuation">)</span>
<span class="literal string single">'c b a'</span>
</pre>
-</li>
-<li><p class="first">Added support for referring to a group by number using <tt class="docutils literal"><span class="pre">(?P=...)</span></tt>.</p>
+</div>
+<div class="section" id="added-support-for-referring-to-a-group-by-number-using-p">
+<h2>Added support for referring to a group by number using <tt class="docutils literal"><span class="pre">(?P=...)</span></tt>.</h2>
<p>This is in addition to the existing <tt class="docutils literal"><span class="pre">\g<...></span></tt>.</p>
-</li>
-<li><p class="first">Fixed the handling of locale-sensitive regexes.</p>
+</div>
+<div class="section" id="fixed-the-handling-of-locale-sensitive-regexes">
+<h2>Fixed the handling of locale-sensitive regexes.</h2>
<p>The <tt class="docutils literal">LOCALE</tt> flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.</p>
-</li>
-<li><p class="first">Added partial matches (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/102">Hg issue 102</a>)</p>
+</div>
+<div class="section" id="added-partial-matches-hg-issue-102">
+<h2>Added partial matches (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/102">Hg issue 102</a>)</h2>
<p>A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.</p>
<p>Partial matches are supported by <tt class="docutils literal">match</tt>, <tt class="docutils literal">search</tt>, <tt class="docutils literal">fullmatch</tt> and <tt class="docutils literal">finditer</tt> with the <tt class="docutils literal">partial</tt> keyword argument.</p>
<p>Match objects have a <tt class="docutils literal">partial</tt> attribute, which is <tt class="docutils literal">True</tt> if it's a partial match.</p>
@@ -608,8 +616,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">pattern</span><span class="operator">.</span><span class="name">match</span><span class="punctuation">(</span><span class="literal string single">'1233'</span><span class="punctuation">,</span> <span class="name">partial</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">partial</span>
<span class="name builtin pseudo">False</span>
</pre>
-</li>
-<li><p class="first"><tt class="docutils literal">*</tt> operator not working correctly with sub() (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/106">Hg issue 106</a>)</p>
+</div>
+<div class="section" id="operator-not-working-correctly-with-sub-hg-issue-106">
+<h2><tt class="docutils literal">*</tt> operator not working correctly with sub() (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/106">Hg issue 106</a>)</h2>
<p>Sometimes it's not clear how zero-width matches should be handled. For example, should <tt class="docutils literal">.*</tt> match 0 characters directly after matching >0 characters?</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -629,8 +638,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">sub</span><span class="punctuation">(</span><span class="literal string single">'(?V1).*?'</span><span class="punctuation">,</span> <span class="literal string single">'|'</span><span class="punctuation">,</span> <span class="literal string single">'test'</span><span class="punctuation">)</span>
<span class="literal string single">'|||||||||'</span>
</pre>
-</li>
-<li><p class="first">Added <tt class="docutils literal">capturesdict</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/86">Hg issue 86</a>)</p>
+</div>
+<div class="section" id="added-capturesdict-hg-issue-86">
+<h2>Added <tt class="docutils literal">capturesdict</tt> (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/86">Hg issue 86</a>)</h2>
<p><tt class="docutils literal">capturesdict</tt> is a combination of <tt class="docutils literal">groupdict</tt> and <tt class="docutils literal">captures</tt>:</p>
<p><tt class="docutils literal">groupdict</tt> returns a dict of the named groups and the last capture of those groups.</p>
<p><tt class="docutils literal">captures</tt> returns a list of all the captures of a group</p>
@@ -647,8 +657,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">m</span><span class="operator">.</span><span class="name">capturesdict</span><span class="punctuation">()</span>
<span class="punctuation">{</span><span class="literal string single">'word'</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="literal string single">'one'</span><span class="punctuation">,</span> <span class="literal string single">'two'</span><span class="punctuation">,</span> <span class="literal string single">'three'</span><span class="punctuation">],</span> <span class="literal string single">'digits'</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="literal string single">'1'</span><span class="punctuation">,</span> <span class="literal string single">'2'</span><span class="punctuation">,</span> <span class="literal string single">'3'</span><span class="punctuation">]}</span>
</pre>
-</li>
-<li><p class="first">Allow duplicate names of groups (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/87">Hg issue 87</a>)</p>
+</div>
+<div class="section" id="allow-duplicate-names-of-groups-hg-issue-87">
+<h2>Allow duplicate names of groups (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/87">Hg issue 87</a>)</h2>
<p>Group names can now be duplicated.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -694,8 +705,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">m</span><span class="operator">.</span><span class="name">captures</span><span class="punctuation">(</span><span class="literal string double">"item"</span><span class="punctuation">)</span>
<span class="punctuation">[</span><span class="literal string single">'first'</span><span class="punctuation">,</span> <span class="literal string single">''</span><span class="punctuation">]</span>
</pre>
-</li>
-<li><p class="first">Added <tt class="docutils literal">fullmatch</tt> (<a class="reference external" href="https://bugs.python.org/issue16203">issue #16203</a>)</p>
+</div>
+<div class="section" id="added-fullmatch-issue-16203">
+<h2>Added <tt class="docutils literal">fullmatch</tt> (<a class="reference external" href="https://bugs.python.org/issue16203">issue #16203</a>)</h2>
<p><tt class="docutils literal">fullmatch</tt> behaves like <tt class="docutils literal">match</tt>, except that it must match all of the string.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -713,8 +725,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">fullmatch</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"a.*?"</span><span class="punctuation">,</span> <span class="literal string double">"abcd"</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">group</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">)</span>
<span class="literal string single">'abcd'</span>
</pre>
-</li>
-<li><p class="first">Added <tt class="docutils literal">subf</tt> and <tt class="docutils literal">subfn</tt></p>
+</div>
+<div class="section" id="added-subf-and-subfn">
+<h2>Added <tt class="docutils literal">subf</tt> and <tt class="docutils literal">subfn</tt></h2>
<p><tt class="docutils literal">subf</tt> and <tt class="docutils literal">subfn</tt> are alternatives to <tt class="docutils literal">sub</tt> and <tt class="docutils literal">subn</tt> respectively. When passed a replacement string, they treat it as a format string.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -723,8 +736,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">subf</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"(?P<word1>\w+) (?P<word2>\w+)"</span><span class="punctuation">,</span> <span class="literal string double">"{word2} {word1}"</span><span class="punctuation">,</span> <span class="literal string double">"foo bar"</span><span class="punctuation">)</span>
<span class="literal string single">'bar foo'</span>
</pre>
-</li>
-<li><p class="first">Added <tt class="docutils literal">expandf</tt> to match object</p>
+</div>
+<div class="section" id="added-expandf-to-match-object">
+<h2>Added <tt class="docutils literal">expandf</tt> to match object</h2>
<p><tt class="docutils literal">expandf</tt> is an alternative to <tt class="docutils literal">expand</tt>. When passed a replacement string, it treats it as a format string.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -736,8 +750,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">m</span><span class="operator">.</span><span class="name">expandf</span><span class="punctuation">(</span><span class="literal string double">"{word2} {word1}"</span><span class="punctuation">)</span>
<span class="literal string single">'bar foo'</span>
</pre>
-</li>
-<li><p class="first">Detach searched string</p>
+</div>
+<div class="section" id="detach-searched-string">
+<h2>Detach searched string</h2>
<p>A match object contains a reference to the string that was searched, via its <tt class="docutils literal">string</tt> attribute. The <tt class="docutils literal">detach_string</tt> method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.</p>
<p>Example:</p>
<pre class="code python literal-block">
@@ -752,8 +767,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="keyword">print</span><span class="punctuation">(</span><span class="name">m</span><span class="operator">.</span><span class="name">string</span><span class="punctuation">)</span>
<span class="name builtin pseudo">None</span>
</pre>
-</li>
-<li><p class="first">Recursive patterns (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/27">Hg issue 27</a>)</p>
+</div>
+<div class="section" id="recursive-patterns-hg-issue-27">
+<h2>Recursive patterns (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/27">Hg issue 27</a>)</h2>
<p>Recursive and repeated patterns are supported.</p>
<p><tt class="docutils literal"><span class="pre">(?R)</span></tt> or <tt class="docutils literal"><span class="pre">(?0)</span></tt> tries to match the entire regex recursively. <tt class="docutils literal"><span class="pre">(?1)</span></tt>, <tt class="docutils literal"><span class="pre">(?2)</span></tt>, etc, try to match the relevant capture group.</p>
<p><tt class="docutils literal"><span class="pre">(?&name)</span></tt> tries to match the named capture group.</p>
@@ -772,8 +788,9 @@ ul.auto-toc {
<p>It's possible to backtrack into a recursed or repeated group.</p>
<p>You can't call a group if there is more than one group with that group name or group number (<tt class="docutils literal">"ambiguous group reference"</tt>).</p>
<p>The alternative forms <tt class="docutils literal"><span class="pre">(?P>name)</span></tt> and <tt class="docutils literal"><span class="pre">(?P&name)</span></tt> are also supported.</p>
-</li>
-<li><p class="first">Full Unicode case-folding is supported.</p>
+</div>
+<div class="section" id="full-unicode-case-folding-is-supported">
+<h2>Full Unicode case-folding is supported.</h2>
<p>In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.</p>
<p>Examples (in Python 3):</p>
<pre class="code python literal-block">
@@ -783,8 +800,9 @@ ul.auto-toc {
<span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="literal number integer">7</span><span class="punctuation">)</span>
</pre>
<p>In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.</p>
-</li>
-<li><p class="first">Approximate "fuzzy" matching (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/12">Hg issue 12</a>, <a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/41">Hg issue 41</a>, <a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/109">Hg issue 109</a>)</p>
+</div>
+<div class="section" id="approximate-fuzzy-matching-hg-issue-12-hg-issue-41-hg-issue-109">
+<h2>Approximate "fuzzy" matching (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/12">Hg issue 12</a>, <a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/41">Hg issue 41</a>, <a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/109">Hg issue 109</a>)</h2>
<p>Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.</p>
<p>A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)</p>
<p>The 3 types of error are:</p>
@@ -873,8 +891,9 @@ ul.auto-toc {
<pre class="code python literal-block">
<span class="literal string single">'anaconda foo bar'</span>
</pre>
-</li>
-<li><p class="first">Named lists (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/11">Hg issue 11</a>)</p>
+</div>
+<div class="section" id="named-lists-hg-issue-11">
+<h2>Named lists (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/11">Hg issue 11</a>)</h2>
<p><tt class="docutils literal">\L<name></tt></p>
<p>There are occasions where you may want to include a list (actually, a set) of options in a regex.</p>
<p>One way is to build the pattern like this:</p>
@@ -895,17 +914,34 @@ ul.auto-toc {
<span class="comment single"># Python 2</span>
<span class="punctuation">{</span><span class="literal string single">'options'</span><span class="punctuation">:</span> <span class="name builtin">frozenset</span><span class="punctuation">([</span><span class="literal string single">'fifth'</span><span class="punctuation">,</span> <span class="literal string single">'fourth'</span><span class="punctuation">,</span> <span class="literal string single">'second'</span><span class="punctuation">,</span> <span class="literal string single">'third'</span><span class="punctuation">,</span> <span class="literal string single">'first'</span><span class="punctuation">])}</span>
</pre>
-</li>
-<li><p class="first">Start and end of word</p>
+<p>If there are any unused keyword arguments, <tt class="docutils literal">ValueError</tt> will be raised unless you tell it otherwise:</p>
+<pre class="code python literal-block">
+<span class="operator">>>></span> <span class="name">option_set</span> <span class="operator">=</span> <span class="punctuation">[</span><span class="literal string double">"first"</span><span class="punctuation">,</span> <span class="literal string double">"second"</span><span class="punctuation">,</span> <span class="literal string double">"third"</span><span class="punctuation">,</span> <span class="literal string double">"fourth"</span><span class="punctuation">,</span> <span class="literal string double">"fifth"</span><span class="punctuation">]</span>
+<span class="operator">>>></span> <span class="name">p</span> <span class="operator">=</span> <span class="name">regex</span><span class="operator">.</span><span class="name">compile</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"\L<options>"</span><span class="punctuation">,</span> <span class="name">options</span><span class="operator">=</span><span class="name">option_set</span><span class="punctuation">,</span> <span class="name">other_options</span><span class="operator">=</span><span class="punctuation">[])</span>
+<span class="name">Traceback</span> <span class="punctuation">(</span><span class="name">most</span> <span class="name">recent</span> <span class="name">call</span> <span class="name">last</span><span class="punctuation">):</span>
+ <span class="name">File</span> <span class="literal string double">"<stdin>"</span><span class="punctuation">,</span> <span class="name">line</span> <span class="literal number integer">1</span><span class="punctuation">,</span> <span class="operator word">in</span> <span class="operator"><</span><span class="name">module</span><span class="operator">></span>
+ <span class="name">File</span> <span class="literal string double">"C:\Python37\lib\site-packages</span><span class="literal string escape">\r</span><span class="literal string double">egex</span><span class="literal string escape">\r</span><span class="literal string double">egex.py"</span><span class="punctuation">,</span> <span class="name">line</span> <span class="literal number integer">348</span><span class="punctuation">,</span> <span class="operator word">in</span> <span class="name builtin">compile</span>
+ <span class="keyword">return</span> <span class="name">_compile</span><span class="punctuation">(</span><span class="name">pattern</span><span class="punctuation">,</span> <span class="name">flags</span><span class="punctuation">,</span> <span class="name">ignore_unused</span><span class="punctuation">,</span> <span class="name">kwargs</span><span class="punctuation">)</span>
+ <span class="name">File</span> <span class="literal string double">"C:\Python37\lib\site-packages</span><span class="literal string escape">\r</span><span class="literal string double">egex</span><span class="literal string escape">\r</span><span class="literal string double">egex.py"</span><span class="punctuation">,</span> <span class="name">line</span> <span class="literal number integer">585</span><span class="punctuation">,</span> <span class="operator word">in</span> <span class="name">_compile</span>
+ <span class="keyword">raise</span> <span class="name exception">ValueError</span><span class="punctuation">(</span><span class="literal string single">'unused keyword argument {!a}'</span><span class="operator">.</span><span class="name">format</span><span class="punctuation">(</span><span class="name">any_one</span><span class="punctuation">))</span>
+<span class="name exception">ValueError</span><span class="punctuation">:</span> <span class="name">unused</span> <span class="name">keyword</span> <span class="name">argument</span> <span class="literal string single">'other_options'</span>
+<span class="operator">>>></span> <span class="name">p</span> <span class="operator">=</span> <span class="name">regex</span><span class="operator">.</span><span class="name">compile</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"\L<options>"</span><span class="punctuation">,</span> <span class="name">options</span><span class="operator">=</span><span class="name">option_set</span><span class="punctuation">,</span> <span class="name">other_options</span><span class="operator">=</span><span class="punctuation">[],</span> <span class="name">ignore_unused</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)</span>
+<span class="operator">>>></span>
+</pre>
+</div>
+<div class="section" id="start-and-end-of-word">
+<h2>Start and end of word</h2>
<p><tt class="docutils literal">\m</tt> matches at the start of a word.</p>
<p><tt class="docutils literal">\M</tt> matches at the end of a word.</p>
<p>Compare with <tt class="docutils literal">\b</tt>, which matches at the start or end of a word.</p>
-</li>
-<li><p class="first">Unicode line separators</p>
+</div>
+<div class="section" id="unicode-line-separators">
+<h2>Unicode line separators</h2>
<p>Normally the only line separator is <tt class="docutils literal">\n</tt> (<tt class="docutils literal">\x0A</tt>), but if the <tt class="docutils literal">WORD</tt> flag is turned on then the line separators are <tt class="docutils literal">\x0D\x0A</tt>, <tt class="docutils literal">\x0A</tt>, <tt class="docutils literal">\x0B</tt>, <tt class="docutils literal">\x0C</tt> and <tt class="docutils literal">\x0D</tt>, plus <tt class="docutils literal">\x85</tt>, <tt class="docutils literal">\u2028</tt> and <tt class="docutils literal">\u2029</tt> when working with Unicode.</p>
<p>This affects the regex dot <tt class="docutils literal">"."</tt>, which, with the <tt class="docutils literal">DOTALL</tt> flag turned off, matches any character except a line separator. It also affects the line anchors <tt class="docutils literal">^</tt> and <tt class="docutils literal">$</tt> (in multiline mode).</p>
-</li>
-<li><p class="first">Set operators</p>
+</div>
+<div class="section" id="set-operators">
+<h2>Set operators</h2>
<p><strong>Version 1 behaviour only</strong></p>
<p>Set operators have been added, and a set <tt class="docutils literal"><span class="pre">[...]</span></tt> can include nested sets.</p>
<p>The operators, in order of increasing precedence, are:</p>
@@ -926,8 +962,9 @@ ul.auto-toc {
<li><tt class="docutils literal"><span class="pre">[\p{N}--[0-9]]</span></tt> # Set containing all numbers except '0' .. '9'</li>
<li><tt class="docutils literal"><span class="pre">[\p{ASCII}&&\p{Letter}]</span></tt> # Set containing all characters which are ASCII and letter</li>
</ul>
-</li>
-<li><p class="first">regex.escape (<a class="reference external" href="https://bugs.python.org/issue2650">issue #2650</a>)</p>
+</div>
+<div class="section" id="regex-escape-issue-2650">
+<h2>regex.escape (<a class="reference external" href="https://bugs.python.org/issue2650">issue #2650</a>)</h2>
<p>regex.escape has an additional keyword parameter <tt class="docutils literal">special_only</tt>. When True, only 'special' regex characters, such as '?', are escaped.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -936,8 +973,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">escape</span><span class="punctuation">(</span><span class="literal string double">"foo!?"</span><span class="punctuation">,</span> <span class="name">special_only</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)</span>
<span class="literal string single">'foo!</span><span class="literal string escape">\\</span><span class="literal string single">?'</span>
</pre>
-</li>
-<li><p class="first">regex.escape (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/249">Hg issue 249</a>)</p>
+</div>
+<div class="section" id="regex-escape-hg-issue-249">
+<h2>regex.escape (<a class="reference external" href="https://bitbucket.org/mrabarnett/mrab-regex/issues/249">Hg issue 249</a>)</h2>
<p>regex.escape has an additional keyword parameter <tt class="docutils literal">literal_spaces</tt>. When True, spaces are not escaped.</p>
<p>Examples:</p>
<pre class="code python literal-block">
@@ -946,8 +984,9 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">escape</span><span class="punctuation">(</span><span class="literal string double">"foo bar!?"</span><span class="punctuation">,</span> <span class="name">literal_spaces</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)</span>
<span class="literal string single">'foo bar!</span><span class="literal string escape">\\</span><span class="literal string single">?'</span>
</pre>
-</li>
-<li><p class="first">Repeated captures (<a class="reference external" href="https://bugs.python.org/issue7132">issue #7132</a>)</p>
+</div>
+<div class="section" id="repeated-captures-issue-7132">
+<h2>Repeated captures (<a class="reference external" href="https://bugs.python.org/issue7132">issue #7132</a>)</h2>
<p>A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">matchobject.captures([group1,</span> <span class="pre">...])</span></tt><ul>
@@ -987,38 +1026,48 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">m</span><span class="operator">.</span><span class="name">spans</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">)</span>
<span class="punctuation">[(</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="literal number integer">3</span><span class="punctuation">),</span> <span class="punctuation">(</span><span class="literal number integer">3</span><span class="punctuation">,</span> <span class="literal number integer">6</span><span class="punctuation">),</span> <span class="punctuation">(</span><span class="literal number integer">6</span><span class="punctuation">,</span> <span class="literal number integer">9</span><span class="punctuation">)]</span>
</pre>
-</li>
-<li><p class="first">Atomic grouping (<a class="reference external" href="https://bugs.python.org/issue433030">issue #433030</a>)</p>
+</div>
+<div class="section" id="atomic-grouping-issue-433030">
+<h2>Atomic grouping (<a class="reference external" href="https://bugs.python.org/issue433030">issue #433030</a>)</h2>
<p><tt class="docutils literal"><span class="pre">(?>...)</span></tt></p>
<p>If the following pattern subsequently fails, then the subpattern as a whole will fail.</p>
-</li>
-<li><p class="first">Possessive quantifiers.</p>
+</div>
+<div class="section" id="possessive-quantifiers">
+<h2>Possessive quantifiers.</h2>
<p><tt class="docutils literal"><span class="pre">(?:...)?+</span></tt> ; <tt class="docutils literal"><span class="pre">(?:...)*+</span></tt> ; <tt class="docutils literal"><span class="pre">(?:...)++</span></tt> ; <tt class="docutils literal"><span class="pre">(?:...){min,max}+</span></tt></p>
<p>The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, <tt class="docutils literal"><span class="pre">(?:...)++</span></tt> is equivalent to <tt class="docutils literal"><span class="pre">(?>(?:...)+)</span></tt>.</p>
-</li>
-<li><p class="first">Scoped flags (<a class="reference external" href="https://bugs.python.org/issue433028">issue #433028</a>)</p>
+</div>
+<div class="section" id="scoped-flags-issue-433028">
+<h2>Scoped flags (<a class="reference external" href="https://bugs.python.org/issue433028">issue #433028</a>)</h2>
<p><tt class="docutils literal"><span class="pre">(?flags-flags:...)</span></tt></p>
<p>The flags will apply only to the subpattern. Flags can be turned on or off.</p>
-</li>
-<li><p class="first">Definition of 'word' character (<a class="reference external" href="https://bugs.python.org/issue1693050">issue #1693050</a>)</p>
+</div>
+<div class="section" id="definition-of-word-character-issue-1693050">
+<h2>Definition of 'word' character (<a class="reference external" href="https://bugs.python.org/issue1693050">issue #1693050</a>)</h2>
<p>The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at <tt class="docutils literal"><span class="pre">http://www.unicode.org/reports/tr29/</span></tt>.</p>
-</li>
-<li><p class="first">Variable-length lookbehind</p>
+</div>
+<div class="section" id="variable-length-lookbehind">
+<h2>Variable-length lookbehind</h2>
<p>A lookbehind can match a variable-length string.</p>
-</li>
-<li><p class="first">Flags argument for regex.split, regex.sub and regex.subn (<a class="reference external" href="https://bugs.python.org/issue3482">issue #3482</a>)</p>
+</div>
+<div class="section" id="flags-argument-for-regex-split-regex-sub-and-regex-subn-issue-3482">
+<h2>Flags argument for regex.split, regex.sub and regex.subn (<a class="reference external" href="https://bugs.python.org/issue3482">issue #3482</a>)</h2>
<p><tt class="docutils literal">regex.split</tt>, <tt class="docutils literal">regex.sub</tt> and <tt class="docutils literal">regex.subn</tt> support a 'flags' argument.</p>
-</li>
-<li><p class="first">Pos and endpos arguments for regex.sub and regex.subn</p>
+</div>
+<div class="section" id="pos-and-endpos-arguments-for-regex-sub-and-regex-subn">
+<h2>Pos and endpos arguments for regex.sub and regex.subn</h2>
<p><tt class="docutils literal">regex.sub</tt> and <tt class="docutils literal">regex.subn</tt> support 'pos' and 'endpos' arguments.</p>
-</li>
-<li><p class="first">'Overlapped' argument for regex.findall and regex.finditer</p>
+</div>
+<div class="section" id="overlapped-argument-for-regex-findall-and-regex-finditer">
+<h2>'Overlapped' argument for regex.findall and regex.finditer</h2>
<p><tt class="docutils literal">regex.findall</tt> and <tt class="docutils literal">regex.finditer</tt> support an 'overlapped' flag which permits overlapped matches.</p>
-</li>
-<li><p class="first">Splititer</p>
+</div>
+<div class="section" id="splititer">
+<h2>Splititer</h2>
<p><tt class="docutils literal">regex.splititer</tt> has been added. It's a generator equivalent of <tt class="docutils literal">regex.split</tt>.</p>
-</li>
-<li><p class="first">Subscripting for groups</p>
+</div>
+<div class="section" id="subscripting-for-groups">
+<h2>Subscripting for groups</h2>
<p>A match object accepts access to the captured groups via subscripting and slicing:</p>
<pre class="code python literal-block">
<span class="operator">>>></span> <span class="name">m</span> <span class="operator">=</span> <span class="name">regex</span><span class="operator">.</span><span class="name">search</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)"</span><span class="punctuation">,</span> <span class="literal string double">"pqr123stu"</span><span class="punctuation">)</span>
@@ -1029,18 +1078,22 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="keyword">print</span><span class="punctuation">(</span><span class="name">m</span><span class="punctuation">[:])</span>
<span class="punctuation">(</span><span class="literal string single">'pqr123stu'</span><span class="punctuation">,</span> <span class="literal string single">'pqr'</span><span class="punctuation">,</span> <span class="literal string single">'123'</span><span class="punctuation">,</span> <span class="literal string single">'stu'</span><span class="punctuation">)</span>
</pre>
-</li>
-<li><p class="first">Named groups</p>
+</div>
+<div class="section" id="named-groups">
+<h2>Named groups</h2>
<p>Groups can be named with <tt class="docutils literal"><span class="pre">(?<name>...)</span></tt> as well as the current <tt class="docutils literal"><span class="pre">(?P<name>...)</span></tt>.</p>
-</li>
-<li><p class="first">Group references</p>
+</div>
+<div class="section" id="group-references">
+<h2>Group references</h2>
<p>Groups can be referenced within a pattern with <tt class="docutils literal">\g<name></tt>. This also allows there to be more than 99 groups.</p>
-</li>
-<li><p class="first">Named characters</p>
+</div>
+<div class="section" id="named-characters">
+<h2>Named characters</h2>
<p><tt class="docutils literal">\N{name}</tt></p>
<p>Named characters are supported. (Note: only those known by Python's Unicode database are supported.)</p>
-</li>
-<li><p class="first">Unicode codepoint properties, including scripts and blocks</p>
+</div>
+<div class="section" id="unicode-codepoint-properties-including-scripts-and-blocks">
+<h2>Unicode codepoint properties, including scripts and blocks</h2>
<p><tt class="docutils literal">\p{property=value}</tt>; <tt class="docutils literal">\P{property=value}</tt>; <tt class="docutils literal">\p{value}</tt> ; <tt class="docutils literal">\P{value}</tt></p>
<p>Many Unicode properties are supported, including blocks and scripts. <tt class="docutils literal">\p{property=value}</tt> or <tt class="docutils literal">\p{property:value}</tt> matches a character whose property <tt class="docutils literal">property</tt> has value <tt class="docutils literal">value</tt>. The inverse of <tt class="docutils literal">\p{property=value}</tt> is <tt class="docutils literal">\P{property=value}</tt> or <tt class="docutils literal"><span class="pre">\p{^property=value}</span></tt>.</p>
<p>If the short form <tt class="docutils literal">\p{value}</tt> is used, the properties are checked in the order: <tt class="docutils literal">General_Category</tt>, <tt class="docutils literal">Script</tt>, <tt class="docutils literal">Block</tt>, binary property:</p>
@@ -1058,8 +1111,9 @@ ul.auto-toc {
<ul class="simple">
<li><tt class="docutils literal">InBasicLatin</tt>, the 'BasicLatin' block (<tt class="docutils literal">Block=BasicLatin</tt>).</li>
</ul>
-</li>
-<li><p class="first">POSIX character classes</p>
+</div>
+<div class="section" id="posix-character-classes">
+<h2>POSIX character classes</h2>
<p><tt class="docutils literal"><span class="pre">[[:alpha:]]</span></tt>; <tt class="docutils literal"><span class="pre">[[:^alpha:]]</span></tt></p>
<p>POSIX character classes are supported. These are normally treated as an alternative form of <tt class="docutils literal"><span class="pre">\p{...}</span></tt>.</p>
<p>The exceptions are <tt class="docutils literal">alnum</tt>, <tt class="docutils literal">digit</tt>, <tt class="docutils literal">punct</tt> and <tt class="docutils literal">xdigit</tt>, whose definitions are different from those of Unicode.</p>
@@ -1067,8 +1121,9 @@ ul.auto-toc {
<p><tt class="docutils literal"><span class="pre">[[:digit:]]</span></tt> is equivalent to <tt class="docutils literal">\p{posix_digit}</tt>.</p>
<p><tt class="docutils literal"><span class="pre">[[:punct:]]</span></tt> is equivalent to <tt class="docutils literal">\p{posix_punct}</tt>.</p>
<p><tt class="docutils literal"><span class="pre">[[:xdigit:]]</span></tt> is equivalent to <tt class="docutils literal">\p{posix_xdigit}</tt>.</p>
-</li>
-<li><p class="first">Search anchor</p>
+</div>
+<div class="section" id="search-anchor">
+<h2>Search anchor</h2>
<p><tt class="docutils literal">\G</tt></p>
<p>A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:</p>
<pre class="code python literal-block">
@@ -1083,8 +1138,9 @@ ul.auto-toc {
<li>The search continues at position 4 and fails to match any letters.</li>
<li>The anchor stops the search start position from being advanced, so there are no more results.</li>
</ul>
-</li>
-<li><p class="first">Reverse searching</p>
+</div>
+<div class="section" id="reverse-searching">
+<h2>Reverse searching</h2>
<p>Searches can now work backwards:</p>
<pre class="code python literal-block">
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">findall</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"."</span><span class="punctuation">,</span> <span class="literal string double">"abc"</span><span class="punctuation">)</span>
@@ -1099,12 +1155,14 @@ ul.auto-toc {
<span class="operator">>>></span> <span class="name">regex</span><span class="operator">.</span><span class="name">findall</span><span class="punctuation">(</span><span class="literal string affix">r</span><span class="literal string double">"(?r).."</span><span class="punctuation">,</span> <span class="literal string double">"abcde"</span><span class="punctuation">)</span>
<span class="punctuation">[</span><span class="literal string single">'de'</span><span class="punctuation">,</span> <span class="literal string single">'bc'</span><span class="punctuation">]</span>
</pre>
-</li>
-<li><p class="first">Matching a single grapheme</p>
+</div>
+<div class="section" id="matching-a-single-grapheme">
+<h2>Matching a single grapheme</h2>
<p><tt class="docutils literal">\X</tt></p>
<p>The grapheme matcher is supported. It now conforms to the Unicode specification at <tt class="docutils literal"><span class="pre">http://www.unicode.org/reports/tr29/</span></tt>.</p>
-</li>
-<li><p class="first">Branch reset</p>
+</div>
+<div class="section" id="branch-reset">
+<h2>Branch reset</h2>
<p><tt class="docutils literal"><span class="pre">(?|...|...)</span></tt></p>
<p>Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.</p>
<p>Examples:</p>
@@ -1115,11 +1173,13 @@ ul.auto-toc {
<span class="punctuation">(</span><span class="literal string single">'second'</span><span class="punctuation">,)</span>
</pre>
<p>Note that there is only one group.</p>
-</li>
-<li><p class="first">Default Unicode word boundary</p>
+</div>
+<div class="section" id="default-unicode-word-boundary">
+<h2>Default Unicode word boundary</h2>
<p>The <tt class="docutils literal">WORD</tt> flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to <tt class="docutils literal">\b</tt> and <tt class="docutils literal">\B</tt>.</p>
-</li>
-<li><p class="first">Timeout (Python 3)</p>
+</div>
+<div class="section" id="timeout-python-3">
+<h2>Timeout (Python 3)</h2>
<p>The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:</p>
<pre class="code python literal-block">
<span class="operator">>>></span> <span class="keyword namespace">from</span> <span class="name namespace">time</span> <span class="keyword namespace">import</span> <span class="name">sleep</span>
@@ -1140,8 +1200,7 @@ ul.auto-toc {
<span class="name">endpos</span><span class="punctuation">,</span> <span class="name">concurrent</span><span class="punctuation">,</span> <span class="name">timeout</span><span class="punctuation">)</span>
<span class="name">TimeoutError</span><span class="punctuation">:</span> <span class="name">regex</span> <span class="name">timed</span> <span class="name">out</span>
</pre>
-</li>
-</ul>
+</div>
</div>
</div>
</body>
diff --git a/docs/Features.rst b/docs/Features.rst
index c73f1132d4ce6b482801fbdca0febd7af4bb90d4..622c000811416210017c76dc2f88702b41eb8388 100644
--- a/docs/Features.rst
+++ b/docs/Features.rst
@@ -129,7 +129,7 @@ The regex module releases the GIL during matching on instances of the built-in (
Unicode
-------
-This module supports Unicode 12.1.0.
+This module supports Unicode 13.0.0.
Full Unicode case-folding is supported.
@@ -138,863 +138,926 @@ Additional features
The issue numbers relate to the Python bug tracker, except where listed as "Hg issue".
-* Added support for lookaround in conditional pattern (`Hg issue 163 <https://bitbucket.org/mrabarnett/mrab-regex/issues/163>`_)
+Added support for lookaround in conditional pattern (`Hg issue 163 <https://bitbucket.org/mrabarnett/mrab-regex/issues/163>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The test of a conditional pattern can now be a lookaround.
+The test of a conditional pattern can now be a lookaround.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
- <regex.Match object; span=(0, 3), match='123'>
- >>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
- <regex.Match object; span=(0, 6), match='abc123'>
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
+ <regex.Match object; span=(0, 3), match='123'>
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
+ <regex.Match object; span=(0, 6), match='abc123'>
- This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.
+This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
- <regex.Match object; span=(0, 6), match='123abc'>
- >>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
- None
+ >>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
+ <regex.Match object; span=(0, 6), match='123abc'>
+ >>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
+ None
- In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was **not** attempted.
+In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was **not** attempted.
-* Added POSIX matching (leftmost longest) (`Hg issue 150 <https://bitbucket.org/mrabarnett/mrab-regex/issues/150>`_)
+Added POSIX matching (leftmost longest) (`Hg issue 150 <https://bitbucket.org/mrabarnett/mrab-regex/issues/150>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag (``(?p)``).
+The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag (``(?p)``).
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> # Normal matching.
- >>> regex.search(r'Mr|Mrs', 'Mrs')
- <regex.Match object; span=(0, 2), match='Mr'>
- >>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
- <regex.Match object; span=(0, 7), match='oneself'>
- >>> # POSIX matching.
- >>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
- <regex.Match object; span=(0, 3), match='Mrs'>
- >>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
- <regex.Match object; span=(0, 17), match='oneselfsufficient'>
+ >>> # Normal matching.
+ >>> regex.search(r'Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 2), match='Mr'>
+ >>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 7), match='oneself'>
+ >>> # POSIX matching.
+ >>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 3), match='Mrs'>
+ >>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 17), match='oneselfsufficient'>
- Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.
+Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.
-* Added ``(?(DEFINE)...)`` (`Hg issue 152 <https://bitbucket.org/mrabarnett/mrab-regex/issues/152>`_)
+Added ``(?(DEFINE)...)`` (`Hg issue 152 <https://bitbucket.org/mrabarnett/mrab-regex/issues/152>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.
+If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
- <regex.Match object; span=(0, 11), match='5 elephants'>
+ >>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
+ <regex.Match object; span=(0, 11), match='5 elephants'>
-* Added ``(*PRUNE)``, ``(*SKIP)`` and ``(*FAIL)`` (`Hg issue 153 <https://bitbucket.org/mrabarnett/mrab-regex/issues/153>`_)
+Added ``(*PRUNE)``, ``(*SKIP)`` and ``(*FAIL)`` (`Hg issue 153 <https://bitbucket.org/mrabarnett/mrab-regex/issues/153>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``(*PRUNE)`` discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+``(*PRUNE)`` discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
- ``(*SKIP)`` is similar to ``(*PRUNE)``, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+``(*SKIP)`` is similar to ``(*PRUNE)``, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
- ``(*FAIL)`` causes immediate backtracking. ``(*F)`` is a permitted abbreviation.
+``(*FAIL)`` causes immediate backtracking. ``(*F)`` is a permitted abbreviation.
-* Added ``\K`` (`Hg issue 151 <https://bitbucket.org/mrabarnett/mrab-regex/issues/151>`_)
+Added ``\K`` (`Hg issue 151 <https://bitbucket.org/mrabarnett/mrab-regex/issues/151>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Keeps the part of the entire match after the position where ``\K`` occurred; the part before it is discarded.
+Keeps the part of the entire match after the position where ``\K`` occurred; the part before it is discarded.
- It does not affect what capture groups return.
+It does not affect what capture groups return.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
- >>> m[0]
- 'cde'
- >>> m[1]
- 'abcde'
- >>>
- >>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
- >>> m[0]
- 'bc'
- >>> m[1]
- 'bcdef'
+ >>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'cde'
+ >>> m[1]
+ 'abcde'
+ >>>
+ >>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'bc'
+ >>> m[1]
+ 'bcdef'
-* Added capture subscripting for ``expandf`` and ``subf``/``subfn`` (`Hg issue 133 <https://bitbucket.org/mrabarnett/mrab-regex/issues/133>`_)
+Added capture subscripting for ``expandf`` and ``subf``/``subfn`` (`Hg issue 133 <https://bitbucket.org/mrabarnett/mrab-regex/issues/133>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- You can now use subscripting to get the captures of a repeated capture group.
+You can now use subscripting to get the captures of a repeated capture group.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> m = regex.match(r"(\w)+", "abc")
- >>> m.expandf("{1}")
- 'c'
- >>> m.expandf("{1[0]} {1[1]} {1[2]}")
- 'a b c'
- >>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
- 'c b a'
- >>>
- >>> m = regex.match(r"(?P<letter>\w)+", "abc")
- >>> m.expandf("{letter}")
- 'c'
- >>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
- 'a b c'
- >>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
- 'c b a'
+ >>> m = regex.match(r"(\w)+", "abc")
+ >>> m.expandf("{1}")
+ 'c'
+ >>> m.expandf("{1[0]} {1[1]} {1[2]}")
+ 'a b c'
+ >>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
+ 'c b a'
+ >>>
+ >>> m = regex.match(r"(?P<letter>\w)+", "abc")
+ >>> m.expandf("{letter}")
+ 'c'
+ >>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
+ 'a b c'
+ >>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
+ 'c b a'
-* Added support for referring to a group by number using ``(?P=...)``.
+Added support for referring to a group by number using ``(?P=...)``.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- This is in addition to the existing ``\g<...>``.
+This is in addition to the existing ``\g<...>``.
-* Fixed the handling of locale-sensitive regexes.
+Fixed the handling of locale-sensitive regexes.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The ``LOCALE`` flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.
+The ``LOCALE`` flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.
-* Added partial matches (`Hg issue 102 <https://bitbucket.org/mrabarnett/mrab-regex/issues/102>`_)
+Added partial matches (`Hg issue 102 <https://bitbucket.org/mrabarnett/mrab-regex/issues/102>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.
+A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.
- Partial matches are supported by ``match``, ``search``, ``fullmatch`` and ``finditer`` with the ``partial`` keyword argument.
+Partial matches are supported by ``match``, ``search``, ``fullmatch`` and ``finditer`` with the ``partial`` keyword argument.
- Match objects have a ``partial`` attribute, which is ``True`` if it's a partial match.
+Match objects have a ``partial`` attribute, which is ``True`` if it's a partial match.
- For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:
+For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> pattern = regex.compile(r'\d{4}')
+ >>> pattern = regex.compile(r'\d{4}')
- >>> # Initially, nothing has been entered:
- >>> print(pattern.fullmatch('', partial=True))
- <regex.Match object; span=(0, 0), match='', partial=True>
+ >>> # Initially, nothing has been entered:
+ >>> print(pattern.fullmatch('', partial=True))
+ <regex.Match object; span=(0, 0), match='', partial=True>
- >>> # An empty string is OK, but it's only a partial match.
- >>> # The user enters a letter:
- >>> print(pattern.fullmatch('a', partial=True))
- None
- >>> # It'll never match.
+ >>> # An empty string is OK, but it's only a partial match.
+ >>> # The user enters a letter:
+ >>> print(pattern.fullmatch('a', partial=True))
+ None
+ >>> # It'll never match.
- >>> # The user deletes that and enters a digit:
- >>> print(pattern.fullmatch('1', partial=True))
- <regex.Match object; span=(0, 1), match='1', partial=True>
- >>> # It matches this far, but it's only a partial match.
+ >>> # The user deletes that and enters a digit:
+ >>> print(pattern.fullmatch('1', partial=True))
+ <regex.Match object; span=(0, 1), match='1', partial=True>
+ >>> # It matches this far, but it's only a partial match.
- >>> # The user enters 2 more digits:
- >>> print(pattern.fullmatch('123', partial=True))
- <regex.Match object; span=(0, 3), match='123', partial=True>
- >>> # It matches this far, but it's only a partial match.
+ >>> # The user enters 2 more digits:
+ >>> print(pattern.fullmatch('123', partial=True))
+ <regex.Match object; span=(0, 3), match='123', partial=True>
+ >>> # It matches this far, but it's only a partial match.
- >>> # The user enters another digit:
- >>> print(pattern.fullmatch('1234', partial=True))
- <regex.Match object; span=(0, 4), match='1234'>
- >>> # It's a complete match.
+ >>> # The user enters another digit:
+ >>> print(pattern.fullmatch('1234', partial=True))
+ <regex.Match object; span=(0, 4), match='1234'>
+ >>> # It's a complete match.
- >>> # If the user enters another digit:
- >>> print(pattern.fullmatch('12345', partial=True))
- None
- >>> # It's no longer a match.
+ >>> # If the user enters another digit:
+ >>> print(pattern.fullmatch('12345', partial=True))
+ None
+ >>> # It's no longer a match.
+
+ >>> # This is a partial match:
+ >>> pattern.match('123', partial=True).partial
+ True
+
+ >>> # This is a complete match:
+ >>> pattern.match('1233', partial=True).partial
+ False
+
+``*`` operator not working correctly with sub() (`Hg issue 106 <https://bitbucket.org/mrabarnett/mrab-regex/issues/106>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Sometimes it's not clear how zero-width matches should be handled. For example, should ``.*`` match 0 characters directly after matching >0 characters?
+
+Examples:
+
+.. sourcecode:: python
+
+ # Python 3.7 and later
+ >>> regex.sub('.*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('.*?', '|', 'test')
+ '|||||||||'
+
+ # Python 3.6 and earlier
+ >>> regex.sub('(?V0).*', 'x', 'test')
+ 'x'
+ >>> regex.sub('(?V1).*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('(?V0).*?', '|', 'test')
+ '|t|e|s|t|'
+ >>> regex.sub('(?V1).*?', '|', 'test')
+ '|||||||||'
+
+Added ``capturesdict`` (`Hg issue 86 <https://bitbucket.org/mrabarnett/mrab-regex/issues/86>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``capturesdict`` is a combination of ``groupdict`` and ``captures``:
+
+``groupdict`` returns a dict of the named groups and the last capture of those groups.
+
+``captures`` returns a list of all the captures of a group
+
+``capturesdict`` returns a dict of the named groups and lists of all the captures of those groups.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
+ >>> m.groupdict()
+ {'word': 'three', 'digits': '3'}
+ >>> m.captures("word")
+ ['one', 'two', 'three']
+ >>> m.captures("digits")
+ ['1', '2', '3']
+ >>> m.capturesdict()
+ {'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}
+
+Allow duplicate names of groups (`Hg issue 87 <https://bitbucket.org/mrabarnett/mrab-regex/issues/87>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Group names can now be duplicated.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> # With optional groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Only the second group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['second']
+ >>> # Only the first group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
+ >>> m.group("item")
+ 'first'
+ >>> m.captures("item")
+ ['first']
+ >>>
+ >>> # With mandatory groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['', 'second']
+ >>> # And yet again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
+ >>> m.group("item")
+ ''
+ >>> m.captures("item")
+ ['first', '']
+
+Added ``fullmatch`` (`issue #16203 <https://bugs.python.org/issue16203>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``fullmatch`` behaves like ``match``, except that it must match all of the string.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> print(regex.fullmatch(r"abc", "abc").span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "abcx"))
+ None
+ >>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
+ (1, 4)
+ >>>
+ >>> regex.match(r"a.*?", "abcd").group(0)
+ 'a'
+ >>> regex.fullmatch(r"a.*?", "abcd").group(0)
+ 'abcd'
- >>> # This is a partial match:
- >>> pattern.match('123', partial=True).partial
- True
-
- >>> # This is a complete match:
- >>> pattern.match('1233', partial=True).partial
- False
-
-* ``*`` operator not working correctly with sub() (`Hg issue 106 <https://bitbucket.org/mrabarnett/mrab-regex/issues/106>`_)
-
- Sometimes it's not clear how zero-width matches should be handled. For example, should ``.*`` match 0 characters directly after matching >0 characters?
-
- Examples:
-
- .. sourcecode:: python
-
- # Python 3.7 and later
- >>> regex.sub('.*', 'x', 'test')
- 'xx'
- >>> regex.sub('.*?', '|', 'test')
- '|||||||||'
-
- # Python 3.6 and earlier
- >>> regex.sub('(?V0).*', 'x', 'test')
- 'x'
- >>> regex.sub('(?V1).*', 'x', 'test')
- 'xx'
- >>> regex.sub('(?V0).*?', '|', 'test')
- '|t|e|s|t|'
- >>> regex.sub('(?V1).*?', '|', 'test')
- '|||||||||'
-
-* Added ``capturesdict`` (`Hg issue 86 <https://bitbucket.org/mrabarnett/mrab-regex/issues/86>`_)
-
- ``capturesdict`` is a combination of ``groupdict`` and ``captures``:
-
- ``groupdict`` returns a dict of the named groups and the last capture of those groups.
-
- ``captures`` returns a list of all the captures of a group
-
- ``capturesdict`` returns a dict of the named groups and lists of all the captures of those groups.
-
- Examples:
+Added ``subf`` and ``subfn``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- .. sourcecode:: python
+``subf`` and ``subfn`` are alternatives to ``sub`` and ``subn`` respectively. When passed a replacement string, they treat it as a format string.
- >>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
- >>> m.groupdict()
- {'word': 'three', 'digits': '3'}
- >>> m.captures("word")
- ['one', 'two', 'three']
- >>> m.captures("digits")
- ['1', '2', '3']
- >>> m.capturesdict()
- {'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}
-
-* Allow duplicate names of groups (`Hg issue 87 <https://bitbucket.org/mrabarnett/mrab-regex/issues/87>`_)
-
- Group names can now be duplicated.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> # With optional groups:
- >>>
- >>> # Both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['first', 'second']
- >>> # Only the second group captures.
- >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['second']
- >>> # Only the first group captures.
- >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
- >>> m.group("item")
- 'first'
- >>> m.captures("item")
- ['first']
- >>>
- >>> # With mandatory groups:
- >>>
- >>> # Both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['first', 'second']
- >>> # Again, both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
- >>> m.group("item")
- 'second'
- >>> m.captures("item")
- ['', 'second']
- >>> # And yet again, both groups capture, the second capture 'overwriting' the first.
- >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
- >>> m.group("item")
- ''
- >>> m.captures("item")
- ['first', '']
+Examples:
-* Added ``fullmatch`` (`issue #16203 <https://bugs.python.org/issue16203>`_)
+.. sourcecode:: python
+
+ >>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
+ 'foo bar => bar foo'
+ >>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
+ 'bar foo'
+
+Added ``expandf`` to match object
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``expandf`` is an alternative to ``expand``. When passed a replacement string, it treats it as a format string.
+
+Examples:
+
+.. sourcecode:: python
+
+ >>> m = regex.match(r"(\w+) (\w+)", "foo bar")
+ >>> m.expandf("{0} => {2} {1}")
+ 'foo bar => bar foo'
+ >>>
+ >>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
+ >>> m.expandf("{word2} {word1}")
+ 'bar foo'
+
+Detach searched string
+^^^^^^^^^^^^^^^^^^^^^^
+
+A match object contains a reference to the string that was searched, via its ``string`` attribute. The ``detach_string`` method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.
+
+Example:
+
+.. sourcecode:: python
+
+ >>> m = regex.search(r"\w+", "Hello world")
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ Hello world
+ >>> m.detach_string()
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ None
- ``fullmatch`` behaves like ``match``, except that it must match all of the string.
+Recursive patterns (`Hg issue 27 <https://bitbucket.org/mrabarnett/mrab-regex/issues/27>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Examples:
+Recursive and repeated patterns are supported.
- .. sourcecode:: python
+``(?R)`` or ``(?0)`` tries to match the entire regex recursively. ``(?1)``, ``(?2)``, etc, try to match the relevant capture group.
- >>> print(regex.fullmatch(r"abc", "abc").span())
- (0, 3)
- >>> print(regex.fullmatch(r"abc", "abcx"))
- None
- >>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
- (0, 3)
- >>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
- (1, 4)
- >>>
- >>> regex.match(r"a.*?", "abcd").group(0)
- 'a'
- >>> regex.fullmatch(r"a.*?", "abcd").group(0)
- 'abcd'
+``(?&name)`` tries to match the named capture group.
-* Added ``subf`` and ``subfn``
+Examples:
- ``subf`` and ``subfn`` are alternatives to ``sub`` and ``subn`` respectively. When passed a replacement string, they treat it as a format string.
+.. sourcecode:: python
- Examples:
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
+ ('Tarzan',)
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
+ ('Jane',)
- .. sourcecode:: python
+ >>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
+ >>> m.group(0, 1, 2)
+ ('kayak', 'k', None)
- >>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
- 'foo bar => bar foo'
- >>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
- 'bar foo'
+The first two examples show how the subpattern within the capture group is reused, but is _not_ itself a capture group. In other words, ``"(Tarzan|Jane) loves (?1)"`` is equivalent to ``"(Tarzan|Jane) loves (?:Tarzan|Jane)"``.
-* Added ``expandf`` to match object
+It's possible to backtrack into a recursed or repeated group.
- ``expandf`` is an alternative to ``expand``. When passed a replacement string, it treats it as a format string.
+You can't call a group if there is more than one group with that group name or group number (``"ambiguous group reference"``).
- Examples:
+The alternative forms ``(?P>name)`` and ``(?P&name)`` are also supported.
- .. sourcecode:: python
-
- >>> m = regex.match(r"(\w+) (\w+)", "foo bar")
- >>> m.expandf("{0} => {2} {1}")
- 'foo bar => bar foo'
- >>>
- >>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
- >>> m.expandf("{word2} {word1}")
- 'bar foo'
-
-* Detach searched string
-
- A match object contains a reference to the string that was searched, via its ``string`` attribute. The ``detach_string`` method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.
-
- Example:
-
- .. sourcecode:: python
-
- >>> m = regex.search(r"\w+", "Hello world")
- >>> print(m.group())
- Hello
- >>> print(m.string)
- Hello world
- >>> m.detach_string()
- >>> print(m.group())
- Hello
- >>> print(m.string)
- None
-
-* Recursive patterns (`Hg issue 27 <https://bitbucket.org/mrabarnett/mrab-regex/issues/27>`_)
-
- Recursive and repeated patterns are supported.
-
- ``(?R)`` or ``(?0)`` tries to match the entire regex recursively. ``(?1)``, ``(?2)``, etc, try to match the relevant capture group.
-
- ``(?&name)`` tries to match the named capture group.
-
- Examples:
-
- .. sourcecode:: python
-
- >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
- ('Tarzan',)
- >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
- ('Jane',)
-
- >>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
- >>> m.group(0, 1, 2)
- ('kayak', 'k', None)
-
- The first two examples show how the subpattern within the capture group is reused, but is _not_ itself a capture group. In other words, ``"(Tarzan|Jane) loves (?1)"`` is equivalent to ``"(Tarzan|Jane) loves (?:Tarzan|Jane)"``.
-
- It's possible to backtrack into a recursed or repeated group.
+Full Unicode case-folding is supported.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- You can't call a group if there is more than one group with that group name or group number (``"ambiguous group reference"``).
+In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.
- The alternative forms ``(?P>name)`` and ``(?P&name)`` are also supported.
+Examples (in Python 3):
-* Full Unicode case-folding is supported.
+.. sourcecode:: python
- In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.
+ >>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
+ (0, 6)
+ >>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
+ (0, 7)
- Examples (in Python 3):
+In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.
- .. sourcecode:: python
+Approximate "fuzzy" matching (`Hg issue 12 <https://bitbucket.org/mrabarnett/mrab-regex/issues/12>`_, `Hg issue 41 <https://bitbucket.org/mrabarnett/mrab-regex/issues/41>`_, `Hg issue 109 <https://bitbucket.org/mrabarnett/mrab-regex/issues/109>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- >>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
- (0, 6)
- >>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
- (0, 7)
+Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.
- In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.
+A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)
-* Approximate "fuzzy" matching (`Hg issue 12 <https://bitbucket.org/mrabarnett/mrab-regex/issues/12>`_, `Hg issue 41 <https://bitbucket.org/mrabarnett/mrab-regex/issues/41>`_, `Hg issue 109 <https://bitbucket.org/mrabarnett/mrab-regex/issues/109>`_)
+The 3 types of error are:
- Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.
+* Insertion, indicated by "i"
- A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)
+* Deletion, indicated by "d"
- The 3 types of error are:
+* Substitution, indicated by "s"
- * Insertion, indicated by "i"
+In addition, "e" indicates any type of error.
- * Deletion, indicated by "d"
+The fuzziness of a regex item is specified between "{" and "}" after the item.
- * Substitution, indicated by "s"
+Examples:
- In addition, "e" indicates any type of error.
+* ``foo`` match "foo" exactly
- The fuzziness of a regex item is specified between "{" and "}" after the item.
+* ``(?:foo){i}`` match "foo", permitting insertions
- Examples:
+* ``(?:foo){d}`` match "foo", permitting deletions
- * ``foo`` match "foo" exactly
+* ``(?:foo){s}`` match "foo", permitting substitutions
- * ``(?:foo){i}`` match "foo", permitting insertions
+* ``(?:foo){i,s}`` match "foo", permitting insertions and substitutions
- * ``(?:foo){d}`` match "foo", permitting deletions
+* ``(?:foo){e}`` match "foo", permitting errors
- * ``(?:foo){s}`` match "foo", permitting substitutions
+If a certain type of error is specified, then any type not specified will **not** be permitted.
- * ``(?:foo){i,s}`` match "foo", permitting insertions and substitutions
+In the following examples I'll omit the item and write only the fuzziness:
- * ``(?:foo){e}`` match "foo", permitting errors
+* ``{d<=3}`` permit at most 3 deletions, but no other types
- If a certain type of error is specified, then any type not specified will **not** be permitted.
+* ``{i<=1,s<=2}`` permit at most 1 insertion and at most 2 substitutions, but no deletions
- In the following examples I'll omit the item and write only the fuzziness:
+* ``{1<=e<=3}`` permit at least 1 and at most 3 errors
- * ``{d<=3}`` permit at most 3 deletions, but no other types
+* ``{i<=2,d<=2,e<=3}`` permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions
- * ``{i<=1,s<=2}`` permit at most 1 insertion and at most 2 substitutions, but no deletions
+It's also possible to state the costs of each type of error and the maximum permitted total cost.
- * ``{1<=e<=3}`` permit at least 1 and at most 3 errors
+Examples:
- * ``{i<=2,d<=2,e<=3}`` permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions
+* ``{2i+2d+1s<=4}`` each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
- It's also possible to state the costs of each type of error and the maximum permitted total cost.
+* ``{i<=1,d<=1,s<=1,2i+2d+1s<=4}`` at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
- Examples:
+You can also use "<" instead of "<=" if you want an exclusive minimum or maximum.
- * ``{2i+2d+1s<=4}`` each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+You can add a test to perform on a character that's substituted or inserted.
- * ``{i<=1,d<=1,s<=1,2i+2d+1s<=4}`` at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+Examples:
- You can also use "<" instead of "<=" if you want an exclusive minimum or maximum.
+* ``{s<=2:[a-z]}`` at most 2 substitutions, which must be in the character set ``[a-z]``.
- You can add a test to perform on a character that's substituted or inserted.
+* ``{s<=2,i<=3:\d}`` at most 2 substitutions, at most 3 insertions, which must be digits.
- Examples:
+By default, fuzzy matching searches for the first match that meets the given constraints. The ``ENHANCEMATCH`` flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.
- * ``{s<=2:[a-z]}`` at most 2 substitutions, which must be in the character set ``[a-z]``.
+The ``BESTMATCH`` flag will make it search for the best match instead.
- * ``{s<=2,i<=3:\d}`` at most 2 substitutions, at most 3 insertions, which must be digits.
+Further examples to note:
- By default, fuzzy matching searches for the first match that meets the given constraints. The ``ENHANCEMATCH`` flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.
+* ``regex.search("(dog){e}", "cat and dog")[1]`` returns ``"cat"`` because that matches ``"dog"`` with 3 errors (an unlimited number of errors is permitted).
- The ``BESTMATCH`` flag will make it search for the best match instead.
+* ``regex.search("(dog){e<=1}", "cat and dog")[1]`` returns ``" dog"`` (with a leading space) because that matches ``"dog"`` with 1 error, which is within the limit.
- Further examples to note:
+* ``regex.search("(?e)(dog){e<=1}", "cat and dog")[1]`` returns ``"dog"`` (without a leading space) because the fuzzy search matches ``" dog"`` with 1 error, which is within the limit, and the ``(?e)`` then it attempts a better fit.
- * ``regex.search("(dog){e}", "cat and dog")[1]`` returns ``"cat"`` because that matches ``"dog"`` with 3 errors (an unlimited number of errors is permitted).
+In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.
- * ``regex.search("(dog){e<=1}", "cat and dog")[1]`` returns ``" dog"`` (with a leading space) because that matches ``"dog"`` with 1 error, which is within the limit.
+The match object has an attribute ``fuzzy_counts`` which gives the total number of substitutions, insertions and deletions.
- * ``regex.search("(?e)(dog){e<=1}", "cat and dog")[1]`` returns ``"dog"`` (without a leading space) because the fuzzy search matches ``" dog"`` with 1 error, which is within the limit, and the ``(?e)`` then it attempts a better fit.
+.. sourcecode:: python
- In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.
+ >>> # A 'raw' fuzzy match:
+ >>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 1)
+ >>> # 0 substitutions, 0 insertions, 1 deletion.
- The match object has an attribute ``fuzzy_counts`` which gives the total number of substitutions, insertions and deletions.
+ >>> # A better match might be possible if the ENHANCEMATCH flag used:
+ >>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 0)
+ >>> # 0 substitutions, 0 insertions, 0 deletions.
- .. sourcecode:: python
+The match object also has an attribute ``fuzzy_changes`` which gives a tuple of the positions of the substitutions, insertions and deletions.
- >>> # A 'raw' fuzzy match:
- >>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
- (0, 0, 1)
- >>> # 0 substitutions, 0 insertions, 1 deletion.
+.. sourcecode:: python
- >>> # A better match might be possible if the ENHANCEMATCH flag used:
- >>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
- (0, 0, 0)
- >>> # 0 substitutions, 0 insertions, 0 deletions.
+ >>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
+ >>> m
+ <regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
+ >>> m.fuzzy_changes
+ ([], [7, 8], [10, 11])
- The match object also has an attribute ``fuzzy_changes`` which gives a tuple of the positions of the substitutions, insertions and deletions.
+What this means is that if the matched part of the string had been:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
- >>> m
- <regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
- >>> m.fuzzy_changes
- ([], [7, 8], [10, 11])
+ 'anacondfuuoo bar'
- What this means is that if the matched part of the string had been:
+it would've been an exact match.
- .. sourcecode:: python
+However, there were insertions at positions 7 and 8:
- 'anacondfuuoo bar'
+.. sourcecode:: python
- it would've been an exact match.
+ 'anaconda fuuoo bar'
+ ^^
- However, there were insertions at positions 7 and 8:
+and deletions at positions 10 and 11:
- .. sourcecode:: python
+.. sourcecode:: python
- 'anaconda fuuoo bar'
- ^^
+ 'anaconda f~~oo bar'
+ ^^
- and deletions at positions 10 and 11:
+So the actual string was:
- .. sourcecode:: python
+.. sourcecode:: python
- 'anaconda f~~oo bar'
- ^^
+ 'anaconda foo bar'
- So the actual string was:
+Named lists (`Hg issue 11 <https://bitbucket.org/mrabarnett/mrab-regex/issues/11>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- .. sourcecode:: python
+``\L<name>``
- 'anaconda foo bar'
+There are occasions where you may want to include a list (actually, a set) of options in a regex.
-* Named lists (`Hg issue 11 <https://bitbucket.org/mrabarnett/mrab-regex/issues/11>`_)
+One way is to build the pattern like this:
- ``\L<name>``
+.. sourcecode:: python
- There are occasions where you may want to include a list (actually, a set) of options in a regex.
+ >>> p = regex.compile(r"first|second|third|fourth|fifth")
- One way is to build the pattern like this:
+but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, "cats" before "cat".
- .. sourcecode:: python
+The new alternative is to use a named list:
- >>> p = regex.compile(r"first|second|third|fourth|fifth")
+.. sourcecode:: python
- but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, "cats" before "cat".
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set)
- The new alternative is to use a named list:
+The order of the items is irrelevant, they are treated as a set. The named lists are available as the ``.named_lists`` attribute of the pattern object :
- .. sourcecode:: python
+.. sourcecode:: python
- >>> option_set = ["first", "second", "third", "fourth", "fifth"]
- >>> p = regex.compile(r"\L<options>", options=option_set)
+ >>> print(p.named_lists)
+ # Python 3
+ {'options': frozenset({'fifth', 'first', 'fourth', 'second', 'third'})}
+ # Python 2
+ {'options': frozenset(['fifth', 'fourth', 'second', 'third', 'first'])}
- The order of the items is irrelevant, they are treated as a set. The named lists are available as the ``.named_lists`` attribute of the pattern object :
+If there are any unused keyword arguments, ``ValueError`` will be raised unless you tell it otherwise:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> print(p.named_lists)
- # Python 3
- {'options': frozenset({'fifth', 'first', 'fourth', 'second', 'third'})}
- # Python 2
- {'options': frozenset(['fifth', 'fourth', 'second', 'third', 'first'])}
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[])
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 348, in compile
+ return _compile(pattern, flags, ignore_unused, kwargs)
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 585, in _compile
+ raise ValueError('unused keyword argument {!a}'.format(any_one))
+ ValueError: unused keyword argument 'other_options'
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[], ignore_unused=True)
+ >>>
-* Start and end of word
+Start and end of word
+^^^^^^^^^^^^^^^^^^^^^
- ``\m`` matches at the start of a word.
+``\m`` matches at the start of a word.
- ``\M`` matches at the end of a word.
+``\M`` matches at the end of a word.
- Compare with ``\b``, which matches at the start or end of a word.
+Compare with ``\b``, which matches at the start or end of a word.
-* Unicode line separators
+Unicode line separators
+^^^^^^^^^^^^^^^^^^^^^^^
- Normally the only line separator is ``\n`` (``\x0A``), but if the ``WORD`` flag is turned on then the line separators are ``\x0D\x0A``, ``\x0A``, ``\x0B``, ``\x0C`` and ``\x0D``, plus ``\x85``, ``\u2028`` and ``\u2029`` when working with Unicode.
+Normally the only line separator is ``\n`` (``\x0A``), but if the ``WORD`` flag is turned on then the line separators are ``\x0D\x0A``, ``\x0A``, ``\x0B``, ``\x0C`` and ``\x0D``, plus ``\x85``, ``\u2028`` and ``\u2029`` when working with Unicode.
- This affects the regex dot ``"."``, which, with the ``DOTALL`` flag turned off, matches any character except a line separator. It also affects the line anchors ``^`` and ``$`` (in multiline mode).
+This affects the regex dot ``"."``, which, with the ``DOTALL`` flag turned off, matches any character except a line separator. It also affects the line anchors ``^`` and ``$`` (in multiline mode).
-* Set operators
+Set operators
+^^^^^^^^^^^^^
- **Version 1 behaviour only**
+**Version 1 behaviour only**
- Set operators have been added, and a set ``[...]`` can include nested sets.
+Set operators have been added, and a set ``[...]`` can include nested sets.
- The operators, in order of increasing precedence, are:
+The operators, in order of increasing precedence, are:
- * ``||`` for union ("x||y" means "x or y")
+* ``||`` for union ("x||y" means "x or y")
- * ``~~`` (double tilde) for symmetric difference ("x~~y" means "x or y, but not both")
+* ``~~`` (double tilde) for symmetric difference ("x~~y" means "x or y, but not both")
- * ``&&`` for intersection ("x&&y" means "x and y")
+* ``&&`` for intersection ("x&&y" means "x and y")
- * ``--`` (double dash) for difference ("x--y" means "x but not y")
+* ``--`` (double dash) for difference ("x--y" means "x but not y")
- Implicit union, ie, simple juxtaposition like in ``[ab]``, has the highest precedence. Thus, ``[ab&&cd]`` is the same as ``[[a||b]&&[c||d]]``.
+Implicit union, ie, simple juxtaposition like in ``[ab]``, has the highest precedence. Thus, ``[ab&&cd]`` is the same as ``[[a||b]&&[c||d]]``.
- Examples:
+Examples:
- * ``[ab]`` # Set containing 'a' and 'b'
+* ``[ab]`` # Set containing 'a' and 'b'
- * ``[a-z]`` # Set containing 'a' .. 'z'
+* ``[a-z]`` # Set containing 'a' .. 'z'
- * ``[[a-z]--[qw]]`` # Set containing 'a' .. 'z', but not 'q' or 'w'
+* ``[[a-z]--[qw]]`` # Set containing 'a' .. 'z', but not 'q' or 'w'
- * ``[a-z--qw]`` # Same as above
+* ``[a-z--qw]`` # Same as above
- * ``[\p{L}--QW]`` # Set containing all letters except 'Q' and 'W'
+* ``[\p{L}--QW]`` # Set containing all letters except 'Q' and 'W'
- * ``[\p{N}--[0-9]]`` # Set containing all numbers except '0' .. '9'
+* ``[\p{N}--[0-9]]`` # Set containing all numbers except '0' .. '9'
- * ``[\p{ASCII}&&\p{Letter}]`` # Set containing all characters which are ASCII and letter
+* ``[\p{ASCII}&&\p{Letter}]`` # Set containing all characters which are ASCII and letter
-* regex.escape (`issue #2650 <https://bugs.python.org/issue2650>`_)
+regex.escape (`issue #2650 <https://bugs.python.org/issue2650>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- regex.escape has an additional keyword parameter ``special_only``. When True, only 'special' regex characters, such as '?', are escaped.
+regex.escape has an additional keyword parameter ``special_only``. When True, only 'special' regex characters, such as '?', are escaped.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.escape("foo!?", special_only=False)
- 'foo\\!\\?'
- >>> regex.escape("foo!?", special_only=True)
- 'foo!\\?'
+ >>> regex.escape("foo!?", special_only=False)
+ 'foo\\!\\?'
+ >>> regex.escape("foo!?", special_only=True)
+ 'foo!\\?'
-* regex.escape (`Hg issue 249 <https://bitbucket.org/mrabarnett/mrab-regex/issues/249>`_)
+regex.escape (`Hg issue 249 <https://bitbucket.org/mrabarnett/mrab-regex/issues/249>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- regex.escape has an additional keyword parameter ``literal_spaces``. When True, spaces are not escaped.
+regex.escape has an additional keyword parameter ``literal_spaces``. When True, spaces are not escaped.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.escape("foo bar!?", literal_spaces=False)
- 'foo\\ bar!\\?'
- >>> regex.escape("foo bar!?", literal_spaces=True)
- 'foo bar!\\?'
+ >>> regex.escape("foo bar!?", literal_spaces=False)
+ 'foo\\ bar!\\?'
+ >>> regex.escape("foo bar!?", literal_spaces=True)
+ 'foo bar!\\?'
-* Repeated captures (`issue #7132 <https://bugs.python.org/issue7132>`_)
+Repeated captures (`issue #7132 <https://bugs.python.org/issue7132>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:
+A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:
- * ``matchobject.captures([group1, ...])``
+* ``matchobject.captures([group1, ...])``
- * Returns a list of the strings matched in a group or groups. Compare with ``matchobject.group([group1, ...])``.
+ * Returns a list of the strings matched in a group or groups. Compare with ``matchobject.group([group1, ...])``.
- * ``matchobject.starts([group])``
+* ``matchobject.starts([group])``
- * Returns a list of the start positions. Compare with ``matchobject.start([group])``.
+ * Returns a list of the start positions. Compare with ``matchobject.start([group])``.
- * ``matchobject.ends([group])``
+* ``matchobject.ends([group])``
- * Returns a list of the end positions. Compare with ``matchobject.end([group])``.
+ * Returns a list of the end positions. Compare with ``matchobject.end([group])``.
- * ``matchobject.spans([group])``
+* ``matchobject.spans([group])``
- * Returns a list of the spans. Compare with ``matchobject.span([group])``.
+ * Returns a list of the spans. Compare with ``matchobject.span([group])``.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> m = regex.search(r"(\w{3})+", "123456789")
- >>> m.group(1)
- '789'
- >>> m.captures(1)
- ['123', '456', '789']
- >>> m.start(1)
- 6
- >>> m.starts(1)
- [0, 3, 6]
- >>> m.end(1)
- 9
- >>> m.ends(1)
- [3, 6, 9]
- >>> m.span(1)
- (6, 9)
- >>> m.spans(1)
- [(0, 3), (3, 6), (6, 9)]
+ >>> m = regex.search(r"(\w{3})+", "123456789")
+ >>> m.group(1)
+ '789'
+ >>> m.captures(1)
+ ['123', '456', '789']
+ >>> m.start(1)
+ 6
+ >>> m.starts(1)
+ [0, 3, 6]
+ >>> m.end(1)
+ 9
+ >>> m.ends(1)
+ [3, 6, 9]
+ >>> m.span(1)
+ (6, 9)
+ >>> m.spans(1)
+ [(0, 3), (3, 6), (6, 9)]
-* Atomic grouping (`issue #433030 <https://bugs.python.org/issue433030>`_)
+Atomic grouping (`issue #433030 <https://bugs.python.org/issue433030>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``(?>...)``
+``(?>...)``
- If the following pattern subsequently fails, then the subpattern as a whole will fail.
+If the following pattern subsequently fails, then the subpattern as a whole will fail.
-* Possessive quantifiers.
+Possessive quantifiers.
+^^^^^^^^^^^^^^^^^^^^^^^
- ``(?:...)?+`` ; ``(?:...)*+`` ; ``(?:...)++`` ; ``(?:...){min,max}+``
+``(?:...)?+`` ; ``(?:...)*+`` ; ``(?:...)++`` ; ``(?:...){min,max}+``
- The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, ``(?:...)++`` is equivalent to ``(?>(?:...)+)``.
+The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, ``(?:...)++`` is equivalent to ``(?>(?:...)+)``.
-* Scoped flags (`issue #433028 <https://bugs.python.org/issue433028>`_)
+Scoped flags (`issue #433028 <https://bugs.python.org/issue433028>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``(?flags-flags:...)``
+``(?flags-flags:...)``
- The flags will apply only to the subpattern. Flags can be turned on or off.
+The flags will apply only to the subpattern. Flags can be turned on or off.
-* Definition of 'word' character (`issue #1693050 <https://bugs.python.org/issue1693050>`_)
+Definition of 'word' character (`issue #1693050 <https://bugs.python.org/issue1693050>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
-* Variable-length lookbehind
+Variable-length lookbehind
+^^^^^^^^^^^^^^^^^^^^^^^^^^
- A lookbehind can match a variable-length string.
+A lookbehind can match a variable-length string.
-* Flags argument for regex.split, regex.sub and regex.subn (`issue #3482 <https://bugs.python.org/issue3482>`_)
+Flags argument for regex.split, regex.sub and regex.subn (`issue #3482 <https://bugs.python.org/issue3482>`_)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``regex.split``, ``regex.sub`` and ``regex.subn`` support a 'flags' argument.
+``regex.split``, ``regex.sub`` and ``regex.subn`` support a 'flags' argument.
-* Pos and endpos arguments for regex.sub and regex.subn
+Pos and endpos arguments for regex.sub and regex.subn
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``regex.sub`` and ``regex.subn`` support 'pos' and 'endpos' arguments.
+``regex.sub`` and ``regex.subn`` support 'pos' and 'endpos' arguments.
-* 'Overlapped' argument for regex.findall and regex.finditer
+'Overlapped' argument for regex.findall and regex.finditer
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``regex.findall`` and ``regex.finditer`` support an 'overlapped' flag which permits overlapped matches.
+``regex.findall`` and ``regex.finditer`` support an 'overlapped' flag which permits overlapped matches.
-* Splititer
+Splititer
+^^^^^^^^^
- ``regex.splititer`` has been added. It's a generator equivalent of ``regex.split``.
+``regex.splititer`` has been added. It's a generator equivalent of ``regex.split``.
-* Subscripting for groups
+Subscripting for groups
+^^^^^^^^^^^^^^^^^^^^^^^
- A match object accepts access to the captured groups via subscripting and slicing:
+A match object accepts access to the captured groups via subscripting and slicing:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
- >>> print(m["before"])
- pqr
- >>> print(len(m))
- 4
- >>> print(m[:])
- ('pqr123stu', 'pqr', '123', 'stu')
+ >>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
+ >>> print(m["before"])
+ pqr
+ >>> print(len(m))
+ 4
+ >>> print(m[:])
+ ('pqr123stu', 'pqr', '123', 'stu')
-* Named groups
+Named groups
+^^^^^^^^^^^^
- Groups can be named with ``(?<name>...)`` as well as the current ``(?P<name>...)``.
+Groups can be named with ``(?<name>...)`` as well as the current ``(?P<name>...)``.
-* Group references
+Group references
+^^^^^^^^^^^^^^^^
- Groups can be referenced within a pattern with ``\g<name>``. This also allows there to be more than 99 groups.
+Groups can be referenced within a pattern with ``\g<name>``. This also allows there to be more than 99 groups.
-* Named characters
+Named characters
+^^^^^^^^^^^^^^^^
- ``\N{name}``
+``\N{name}``
- Named characters are supported. (Note: only those known by Python's Unicode database are supported.)
+Named characters are supported. (Note: only those known by Python's Unicode database are supported.)
-* Unicode codepoint properties, including scripts and blocks
+Unicode codepoint properties, including scripts and blocks
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``\p{property=value}``; ``\P{property=value}``; ``\p{value}`` ; ``\P{value}``
+``\p{property=value}``; ``\P{property=value}``; ``\p{value}`` ; ``\P{value}``
- Many Unicode properties are supported, including blocks and scripts. ``\p{property=value}`` or ``\p{property:value}`` matches a character whose property ``property`` has value ``value``. The inverse of ``\p{property=value}`` is ``\P{property=value}`` or ``\p{^property=value}``.
+Many Unicode properties are supported, including blocks and scripts. ``\p{property=value}`` or ``\p{property:value}`` matches a character whose property ``property`` has value ``value``. The inverse of ``\p{property=value}`` is ``\P{property=value}`` or ``\p{^property=value}``.
- If the short form ``\p{value}`` is used, the properties are checked in the order: ``General_Category``, ``Script``, ``Block``, binary property:
+If the short form ``\p{value}`` is used, the properties are checked in the order: ``General_Category``, ``Script``, ``Block``, binary property:
- * ``Latin``, the 'Latin' script (``Script=Latin``).
+* ``Latin``, the 'Latin' script (``Script=Latin``).
- * ``BasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+* ``BasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
- * ``Alphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+* ``Alphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
- A short form starting with ``Is`` indicates a script or binary property:
+A short form starting with ``Is`` indicates a script or binary property:
- * ``IsLatin``, the 'Latin' script (``Script=Latin``).
+* ``IsLatin``, the 'Latin' script (``Script=Latin``).
- * ``IsAlphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+* ``IsAlphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
- A short form starting with ``In`` indicates a block property:
+A short form starting with ``In`` indicates a block property:
- * ``InBasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+* ``InBasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
-* POSIX character classes
+POSIX character classes
+^^^^^^^^^^^^^^^^^^^^^^^
- ``[[:alpha:]]``; ``[[:^alpha:]]``
+``[[:alpha:]]``; ``[[:^alpha:]]``
- POSIX character classes are supported. These are normally treated as an alternative form of ``\p{...}``.
+POSIX character classes are supported. These are normally treated as an alternative form of ``\p{...}``.
- The exceptions are ``alnum``, ``digit``, ``punct`` and ``xdigit``, whose definitions are different from those of Unicode.
+The exceptions are ``alnum``, ``digit``, ``punct`` and ``xdigit``, whose definitions are different from those of Unicode.
- ``[[:alnum:]]`` is equivalent to ``\p{posix_alnum}``.
+``[[:alnum:]]`` is equivalent to ``\p{posix_alnum}``.
- ``[[:digit:]]`` is equivalent to ``\p{posix_digit}``.
+``[[:digit:]]`` is equivalent to ``\p{posix_digit}``.
- ``[[:punct:]]`` is equivalent to ``\p{posix_punct}``.
+``[[:punct:]]`` is equivalent to ``\p{posix_punct}``.
- ``[[:xdigit:]]`` is equivalent to ``\p{posix_xdigit}``.
+``[[:xdigit:]]`` is equivalent to ``\p{posix_xdigit}``.
-* Search anchor
+Search anchor
+^^^^^^^^^^^^^
- ``\G``
+``\G``
- A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:
+A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.findall(r"\w{2}", "abcd ef")
- ['ab', 'cd', 'ef']
- >>> regex.findall(r"\G\w{2}", "abcd ef")
- ['ab', 'cd']
+ >>> regex.findall(r"\w{2}", "abcd ef")
+ ['ab', 'cd', 'ef']
+ >>> regex.findall(r"\G\w{2}", "abcd ef")
+ ['ab', 'cd']
- * The search starts at position 0 and matches 2 letters 'ab'.
+* The search starts at position 0 and matches 2 letters 'ab'.
- * The search continues at position 2 and matches 2 letters 'cd'.
+* The search continues at position 2 and matches 2 letters 'cd'.
- * The search continues at position 4 and fails to match any letters.
+* The search continues at position 4 and fails to match any letters.
- * The anchor stops the search start position from being advanced, so there are no more results.
+* The anchor stops the search start position from being advanced, so there are no more results.
-* Reverse searching
+Reverse searching
+^^^^^^^^^^^^^^^^^
- Searches can now work backwards:
+Searches can now work backwards:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.findall(r".", "abc")
- ['a', 'b', 'c']
- >>> regex.findall(r"(?r).", "abc")
- ['c', 'b', 'a']
+ >>> regex.findall(r".", "abc")
+ ['a', 'b', 'c']
+ >>> regex.findall(r"(?r).", "abc")
+ ['c', 'b', 'a']
- Note: the result of a reverse search is not necessarily the reverse of a forward search:
+Note: the result of a reverse search is not necessarily the reverse of a forward search:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.findall(r"..", "abcde")
- ['ab', 'cd']
- >>> regex.findall(r"(?r)..", "abcde")
- ['de', 'bc']
+ >>> regex.findall(r"..", "abcde")
+ ['ab', 'cd']
+ >>> regex.findall(r"(?r)..", "abcde")
+ ['de', 'bc']
-* Matching a single grapheme
+Matching a single grapheme
+^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``\X``
+``\X``
- The grapheme matcher is supported. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+The grapheme matcher is supported. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
-* Branch reset
+Branch reset
+^^^^^^^^^^^^
- ``(?|...|...)``
+``(?|...|...)``
- Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.
+Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.
- Examples:
+Examples:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> regex.match(r"(?|(first)|(second))", "first").groups()
- ('first',)
- >>> regex.match(r"(?|(first)|(second))", "second").groups()
- ('second',)
+ >>> regex.match(r"(?|(first)|(second))", "first").groups()
+ ('first',)
+ >>> regex.match(r"(?|(first)|(second))", "second").groups()
+ ('second',)
- Note that there is only one group.
+Note that there is only one group.
-* Default Unicode word boundary
+Default Unicode word boundary
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The ``WORD`` flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to ``\b`` and ``\B``.
+The ``WORD`` flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to ``\b`` and ``\B``.
-* Timeout (Python 3)
+Timeout (Python 3)
+^^^^^^^^^^^^^^^^^^
- The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:
+The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:
- .. sourcecode:: python
+.. sourcecode:: python
- >>> from time import sleep
- >>>
- >>> def fast_replace(m):
- ... return 'X'
- ...
- >>> def slow_replace(m):
- ... sleep(0.5)
- ... return 'X'
- ...
- >>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
- 'XXXXX'
- >>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "C:\Python37\lib\site-packages\regex\regex.py", line 276, in sub
- endpos, concurrent, timeout)
- TimeoutError: regex timed out
+ >>> from time import sleep
+ >>>
+ >>> def fast_replace(m):
+ ... return 'X'
+ ...
+ >>> def slow_replace(m):
+ ... sleep(0.5)
+ ... return 'X'
+ ...
+ >>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
+ 'XXXXX'
+ >>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 276, in sub
+ endpos, concurrent, timeout)
+ TimeoutError: regex timed out
diff --git a/docs/UnicodeProperties.txt b/docs/UnicodeProperties.rst
similarity index 100%
rename from docs/UnicodeProperties.txt
rename to docs/UnicodeProperties.rst
diff --git a/regex.egg-info/PKG-INFO b/regex.egg-info/PKG-INFO
new file mode 100644
index 0000000000000000000000000000000000000000..584e08b0b87fda38c4edbc26210670f32c3cfb81
--- /dev/null
+++ b/regex.egg-info/PKG-INFO
@@ -0,0 +1,1086 @@
+Metadata-Version: 1.1
+Name: regex
+Version: 2020.7.14
+Summary: Alternative regular expression module, to replace re.
+Home-page: https://bitbucket.org/mrabarnett/mrab-regex
+Author: Matthew Barnett
+Author-email: regex@mrabarnett.plus.com
+License: Python Software Foundation License
+Description: Introduction
+ ------------
+
+ This regex implementation is backwards-compatible with the standard 're' module, but offers additional functionality.
+
+ Note
+ ----
+
+ The re module's behaviour with zero-width matches changed in Python 3.7, and this module will follow that behaviour when compiled for Python 3.7.
+
+ Old vs new behaviour
+ --------------------
+
+ In order to be compatible with the re module, this module has 2 behaviours:
+
+ * **Version 0** behaviour (old behaviour, compatible with the re module):
+
+ Please note that the re module's behaviour may change over time, and I'll endeavour to match that behaviour in version 0.
+
+ * Indicated by the ``VERSION0`` or ``V0`` flag, or ``(?V0)`` in the pattern.
+
+ * Zero-width matches are not handled correctly in the re module before Python 3.7. The behaviour in those earlier versions is:
+
+ * ``.split`` won't split a string at a zero-width match.
+
+ * ``.sub`` will advance by one character after a zero-width match.
+
+ * Inline flags apply to the entire pattern, and they can't be turned off.
+
+ * Only simple sets are supported.
+
+ * Case-insensitive matches in Unicode use simple case-folding by default.
+
+ * **Version 1** behaviour (new behaviour, possibly different from the re module):
+
+ * Indicated by the ``VERSION1`` or ``V1`` flag, or ``(?V1)`` in the pattern.
+
+ * Zero-width matches are handled correctly.
+
+ * Inline flags apply to the end of the group or pattern, and they can be turned off.
+
+ * Nested sets and set operations are supported.
+
+ * Case-insensitive matches in Unicode use full case-folding by default.
+
+ If no version is specified, the regex module will default to ``regex.DEFAULT_VERSION``.
+
+ Case-insensitive matches in Unicode
+ -----------------------------------
+
+ The regex module supports both simple and full case-folding for case-insensitive matches in Unicode. Use of full case-folding can be turned on using the ``FULLCASE`` or ``F`` flag, or ``(?f)`` in the pattern. Please note that this flag affects how the ``IGNORECASE`` flag works; the ``FULLCASE`` flag itself does not turn on case-insensitive matching.
+
+ In the version 0 behaviour, the flag is off by default.
+
+ In the version 1 behaviour, the flag is on by default.
+
+ Nested sets and set operations
+ ------------------------------
+
+ It's not possible to support both simple sets, as used in the re module, and nested sets at the same time because of a difference in the meaning of an unescaped ``"["`` in a set.
+
+ For example, the pattern ``[[a-z]--[aeiou]]`` is treated in the version 0 behaviour (simple sets, compatible with the re module) as:
+
+ * Set containing "[" and the letters "a" to "z"
+
+ * Literal "--"
+
+ * Set containing letters "a", "e", "i", "o", "u"
+
+ * Literal "]"
+
+ but in the version 1 behaviour (nested sets, enhanced behaviour) as:
+
+ * Set which is:
+
+ * Set containing the letters "a" to "z"
+
+ * but excluding:
+
+ * Set containing the letters "a", "e", "i", "o", "u"
+
+ Version 0 behaviour: only simple sets are supported.
+
+ Version 1 behaviour: nested sets and set operations are supported.
+
+ Flags
+ -----
+
+ There are 2 kinds of flag: scoped and global. Scoped flags can apply to only part of a pattern and can be turned on or off; global flags apply to the entire pattern and can only be turned on.
+
+ The scoped flags are: ``FULLCASE``, ``IGNORECASE``, ``MULTILINE``, ``DOTALL``, ``VERBOSE``, ``WORD``.
+
+ The global flags are: ``ASCII``, ``BESTMATCH``, ``ENHANCEMATCH``, ``LOCALE``, ``POSIX``, ``REVERSE``, ``UNICODE``, ``VERSION0``, ``VERSION1``.
+
+ If neither the ``ASCII``, ``LOCALE`` nor ``UNICODE`` flag is specified, it will default to ``UNICODE`` if the regex pattern is a Unicode string and ``ASCII`` if it's a bytestring.
+
+ The ``ENHANCEMATCH`` flag makes fuzzy matching attempt to improve the fit of the next match that it finds.
+
+ The ``BESTMATCH`` flag makes fuzzy matching search for the best match instead of the next match.
+
+ Notes on named capture groups
+ -----------------------------
+
+ All capture groups have a group number, starting from 1.
+
+ Groups with the same group name will have the same group number, and groups with a different group name will have a different group number.
+
+ The same name can be used by more than one group, with later captures 'overwriting' earlier captures. All of the captures of the group will be available from the ``captures`` method of the match object.
+
+ Group numbers will be reused across different branches of a branch reset, eg. ``(?|(first)|(second))`` has only group 1. If capture groups have different group names then they will, of course, have different group numbers, eg. ``(?|(?P<foo>first)|(?P<bar>second))`` has group 1 ("foo") and group 2 ("bar").
+
+ In the regex ``(\s+)(?|(?P<foo>[A-Z]+)|(\w+) (?P<foo>[0-9]+)`` there are 2 groups:
+
+ * ``(\s+)`` is group 1.
+
+ * ``(?P<foo>[A-Z]+)`` is group 2, also called "foo".
+
+ * ``(\w+)`` is group 2 because of the branch reset.
+
+ * ``(?P<foo>[0-9]+)`` is group 2 because it's called "foo".
+
+ If you want to prevent ``(\w+)`` from being group 2, you need to name it (different name, different group number).
+
+ Multithreading
+ --------------
+
+ The regex module releases the GIL during matching on instances of the built-in (immutable) string classes, enabling other Python threads to run concurrently. It is also possible to force the regex module to release the GIL during matching by calling the matching methods with the keyword argument ``concurrent=True``. The behaviour is undefined if the string changes during matching, so use it *only* when it is guaranteed that that won't happen.
+
+ Unicode
+ -------
+
+ This module supports Unicode 13.0.0.
+
+ Full Unicode case-folding is supported.
+
+ Additional features
+ -------------------
+
+ The issue numbers relate to the Python bug tracker, except where listed as "Hg issue".
+
+ Added support for lookaround in conditional pattern (`Hg issue 163 <https://bitbucket.org/mrabarnett/mrab-regex/issues/163>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The test of a conditional pattern can now be a lookaround.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
+ <regex.Match object; span=(0, 3), match='123'>
+ >>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
+ <regex.Match object; span=(0, 6), match='abc123'>
+
+ This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
+ <regex.Match object; span=(0, 6), match='123abc'>
+ >>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
+ None
+
+ In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was **not** attempted.
+
+ Added POSIX matching (leftmost longest) (`Hg issue 150 <https://bitbucket.org/mrabarnett/mrab-regex/issues/150>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag (``(?p)``).
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> # Normal matching.
+ >>> regex.search(r'Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 2), match='Mr'>
+ >>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 7), match='oneself'>
+ >>> # POSIX matching.
+ >>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
+ <regex.Match object; span=(0, 3), match='Mrs'>
+ >>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
+ <regex.Match object; span=(0, 17), match='oneselfsufficient'>
+
+ Note that it will take longer to find matches because when it finds a match at a certain position, it won't return that immediately, but will keep looking to see if there's another longer match there.
+
+ Added ``(?(DEFINE)...)`` (`Hg issue 152 <https://bitbucket.org/mrabarnett/mrab-regex/issues/152>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ If there's no group called "DEFINE", then ... will be ignored, but any group definitions within it will be available.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
+ <regex.Match object; span=(0, 11), match='5 elephants'>
+
+ Added ``(*PRUNE)``, ``(*SKIP)`` and ``(*FAIL)`` (`Hg issue 153 <https://bitbucket.org/mrabarnett/mrab-regex/issues/153>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(*PRUNE)`` discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+
+ ``(*SKIP)`` is similar to ``(*PRUNE)``, except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won't affect the enclosing pattern.
+
+ ``(*FAIL)`` causes immediate backtracking. ``(*F)`` is a permitted abbreviation.
+
+ Added ``\K`` (`Hg issue 151 <https://bitbucket.org/mrabarnett/mrab-regex/issues/151>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Keeps the part of the entire match after the position where ``\K`` occurred; the part before it is discarded.
+
+ It does not affect what capture groups return.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'cde'
+ >>> m[1]
+ 'abcde'
+ >>>
+ >>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
+ >>> m[0]
+ 'bc'
+ >>> m[1]
+ 'bcdef'
+
+ Added capture subscripting for ``expandf`` and ``subf``/``subfn`` (`Hg issue 133 <https://bitbucket.org/mrabarnett/mrab-regex/issues/133>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ You can now use subscripting to get the captures of a repeated capture group.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.match(r"(\w)+", "abc")
+ >>> m.expandf("{1}")
+ 'c'
+ >>> m.expandf("{1[0]} {1[1]} {1[2]}")
+ 'a b c'
+ >>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
+ 'c b a'
+ >>>
+ >>> m = regex.match(r"(?P<letter>\w)+", "abc")
+ >>> m.expandf("{letter}")
+ 'c'
+ >>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
+ 'a b c'
+ >>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
+ 'c b a'
+
+ Added support for referring to a group by number using ``(?P=...)``.
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ This is in addition to the existing ``\g<...>``.
+
+ Fixed the handling of locale-sensitive regexes.
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The ``LOCALE`` flag is intended for legacy code and has limited support. You're still recommended to use Unicode instead.
+
+ Added partial matches (`Hg issue 102 <https://bitbucket.org/mrabarnett/mrab-regex/issues/102>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.
+
+ Partial matches are supported by ``match``, ``search``, ``fullmatch`` and ``finditer`` with the ``partial`` keyword argument.
+
+ Match objects have a ``partial`` attribute, which is ``True`` if it's a partial match.
+
+ For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:
+
+ .. sourcecode:: python
+
+ >>> pattern = regex.compile(r'\d{4}')
+
+ >>> # Initially, nothing has been entered:
+ >>> print(pattern.fullmatch('', partial=True))
+ <regex.Match object; span=(0, 0), match='', partial=True>
+
+ >>> # An empty string is OK, but it's only a partial match.
+ >>> # The user enters a letter:
+ >>> print(pattern.fullmatch('a', partial=True))
+ None
+ >>> # It'll never match.
+
+ >>> # The user deletes that and enters a digit:
+ >>> print(pattern.fullmatch('1', partial=True))
+ <regex.Match object; span=(0, 1), match='1', partial=True>
+ >>> # It matches this far, but it's only a partial match.
+
+ >>> # The user enters 2 more digits:
+ >>> print(pattern.fullmatch('123', partial=True))
+ <regex.Match object; span=(0, 3), match='123', partial=True>
+ >>> # It matches this far, but it's only a partial match.
+
+ >>> # The user enters another digit:
+ >>> print(pattern.fullmatch('1234', partial=True))
+ <regex.Match object; span=(0, 4), match='1234'>
+ >>> # It's a complete match.
+
+ >>> # If the user enters another digit:
+ >>> print(pattern.fullmatch('12345', partial=True))
+ None
+ >>> # It's no longer a match.
+
+ >>> # This is a partial match:
+ >>> pattern.match('123', partial=True).partial
+ True
+
+ >>> # This is a complete match:
+ >>> pattern.match('1233', partial=True).partial
+ False
+
+ ``*`` operator not working correctly with sub() (`Hg issue 106 <https://bitbucket.org/mrabarnett/mrab-regex/issues/106>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Sometimes it's not clear how zero-width matches should be handled. For example, should ``.*`` match 0 characters directly after matching >0 characters?
+
+ Examples:
+
+ .. sourcecode:: python
+
+ # Python 3.7 and later
+ >>> regex.sub('.*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('.*?', '|', 'test')
+ '|||||||||'
+
+ # Python 3.6 and earlier
+ >>> regex.sub('(?V0).*', 'x', 'test')
+ 'x'
+ >>> regex.sub('(?V1).*', 'x', 'test')
+ 'xx'
+ >>> regex.sub('(?V0).*?', '|', 'test')
+ '|t|e|s|t|'
+ >>> regex.sub('(?V1).*?', '|', 'test')
+ '|||||||||'
+
+ Added ``capturesdict`` (`Hg issue 86 <https://bitbucket.org/mrabarnett/mrab-regex/issues/86>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``capturesdict`` is a combination of ``groupdict`` and ``captures``:
+
+ ``groupdict`` returns a dict of the named groups and the last capture of those groups.
+
+ ``captures`` returns a list of all the captures of a group
+
+ ``capturesdict`` returns a dict of the named groups and lists of all the captures of those groups.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
+ >>> m.groupdict()
+ {'word': 'three', 'digits': '3'}
+ >>> m.captures("word")
+ ['one', 'two', 'three']
+ >>> m.captures("digits")
+ ['1', '2', '3']
+ >>> m.capturesdict()
+ {'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}
+
+ Allow duplicate names of groups (`Hg issue 87 <https://bitbucket.org/mrabarnett/mrab-regex/issues/87>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Group names can now be duplicated.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> # With optional groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Only the second group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['second']
+ >>> # Only the first group captures.
+ >>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
+ >>> m.group("item")
+ 'first'
+ >>> m.captures("item")
+ ['first']
+ >>>
+ >>> # With mandatory groups:
+ >>>
+ >>> # Both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['first', 'second']
+ >>> # Again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
+ >>> m.group("item")
+ 'second'
+ >>> m.captures("item")
+ ['', 'second']
+ >>> # And yet again, both groups capture, the second capture 'overwriting' the first.
+ >>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
+ >>> m.group("item")
+ ''
+ >>> m.captures("item")
+ ['first', '']
+
+ Added ``fullmatch`` (`issue #16203 <https://bugs.python.org/issue16203>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``fullmatch`` behaves like ``match``, except that it must match all of the string.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> print(regex.fullmatch(r"abc", "abc").span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "abcx"))
+ None
+ >>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
+ (0, 3)
+ >>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
+ (1, 4)
+ >>>
+ >>> regex.match(r"a.*?", "abcd").group(0)
+ 'a'
+ >>> regex.fullmatch(r"a.*?", "abcd").group(0)
+ 'abcd'
+
+ Added ``subf`` and ``subfn``
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``subf`` and ``subfn`` are alternatives to ``sub`` and ``subn`` respectively. When passed a replacement string, they treat it as a format string.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
+ 'foo bar => bar foo'
+ >>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
+ 'bar foo'
+
+ Added ``expandf`` to match object
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``expandf`` is an alternative to ``expand``. When passed a replacement string, it treats it as a format string.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.match(r"(\w+) (\w+)", "foo bar")
+ >>> m.expandf("{0} => {2} {1}")
+ 'foo bar => bar foo'
+ >>>
+ >>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
+ >>> m.expandf("{word2} {word1}")
+ 'bar foo'
+
+ Detach searched string
+ ^^^^^^^^^^^^^^^^^^^^^^
+
+ A match object contains a reference to the string that was searched, via its ``string`` attribute. The ``detach_string`` method will 'detach' that string, making it available for garbage collection, which might save valuable memory if that string is very large.
+
+ Example:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r"\w+", "Hello world")
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ Hello world
+ >>> m.detach_string()
+ >>> print(m.group())
+ Hello
+ >>> print(m.string)
+ None
+
+ Recursive patterns (`Hg issue 27 <https://bitbucket.org/mrabarnett/mrab-regex/issues/27>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Recursive and repeated patterns are supported.
+
+ ``(?R)`` or ``(?0)`` tries to match the entire regex recursively. ``(?1)``, ``(?2)``, etc, try to match the relevant capture group.
+
+ ``(?&name)`` tries to match the named capture group.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
+ ('Tarzan',)
+ >>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
+ ('Jane',)
+
+ >>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
+ >>> m.group(0, 1, 2)
+ ('kayak', 'k', None)
+
+ The first two examples show how the subpattern within the capture group is reused, but is _not_ itself a capture group. In other words, ``"(Tarzan|Jane) loves (?1)"`` is equivalent to ``"(Tarzan|Jane) loves (?:Tarzan|Jane)"``.
+
+ It's possible to backtrack into a recursed or repeated group.
+
+ You can't call a group if there is more than one group with that group name or group number (``"ambiguous group reference"``).
+
+ The alternative forms ``(?P>name)`` and ``(?P&name)`` are also supported.
+
+ Full Unicode case-folding is supported.
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.
+
+ Examples (in Python 3):
+
+ .. sourcecode:: python
+
+ >>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
+ (0, 6)
+ >>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
+ (0, 7)
+
+ In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.
+
+ Approximate "fuzzy" matching (`Hg issue 12 <https://bitbucket.org/mrabarnett/mrab-regex/issues/12>`_, `Hg issue 41 <https://bitbucket.org/mrabarnett/mrab-regex/issues/41>`_, `Hg issue 109 <https://bitbucket.org/mrabarnett/mrab-regex/issues/109>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Regex usually attempts an exact match, but sometimes an approximate, or "fuzzy", match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.
+
+ A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)
+
+ The 3 types of error are:
+
+ * Insertion, indicated by "i"
+
+ * Deletion, indicated by "d"
+
+ * Substitution, indicated by "s"
+
+ In addition, "e" indicates any type of error.
+
+ The fuzziness of a regex item is specified between "{" and "}" after the item.
+
+ Examples:
+
+ * ``foo`` match "foo" exactly
+
+ * ``(?:foo){i}`` match "foo", permitting insertions
+
+ * ``(?:foo){d}`` match "foo", permitting deletions
+
+ * ``(?:foo){s}`` match "foo", permitting substitutions
+
+ * ``(?:foo){i,s}`` match "foo", permitting insertions and substitutions
+
+ * ``(?:foo){e}`` match "foo", permitting errors
+
+ If a certain type of error is specified, then any type not specified will **not** be permitted.
+
+ In the following examples I'll omit the item and write only the fuzziness:
+
+ * ``{d<=3}`` permit at most 3 deletions, but no other types
+
+ * ``{i<=1,s<=2}`` permit at most 1 insertion and at most 2 substitutions, but no deletions
+
+ * ``{1<=e<=3}`` permit at least 1 and at most 3 errors
+
+ * ``{i<=2,d<=2,e<=3}`` permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions
+
+ It's also possible to state the costs of each type of error and the maximum permitted total cost.
+
+ Examples:
+
+ * ``{2i+2d+1s<=4}`` each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+
+ * ``{i<=1,d<=1,s<=1,2i+2d+1s<=4}`` at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4
+
+ You can also use "<" instead of "<=" if you want an exclusive minimum or maximum.
+
+ You can add a test to perform on a character that's substituted or inserted.
+
+ Examples:
+
+ * ``{s<=2:[a-z]}`` at most 2 substitutions, which must be in the character set ``[a-z]``.
+
+ * ``{s<=2,i<=3:\d}`` at most 2 substitutions, at most 3 insertions, which must be digits.
+
+ By default, fuzzy matching searches for the first match that meets the given constraints. The ``ENHANCEMATCH`` flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.
+
+ The ``BESTMATCH`` flag will make it search for the best match instead.
+
+ Further examples to note:
+
+ * ``regex.search("(dog){e}", "cat and dog")[1]`` returns ``"cat"`` because that matches ``"dog"`` with 3 errors (an unlimited number of errors is permitted).
+
+ * ``regex.search("(dog){e<=1}", "cat and dog")[1]`` returns ``" dog"`` (with a leading space) because that matches ``"dog"`` with 1 error, which is within the limit.
+
+ * ``regex.search("(?e)(dog){e<=1}", "cat and dog")[1]`` returns ``"dog"`` (without a leading space) because the fuzzy search matches ``" dog"`` with 1 error, which is within the limit, and the ``(?e)`` then it attempts a better fit.
+
+ In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.
+
+ The match object has an attribute ``fuzzy_counts`` which gives the total number of substitutions, insertions and deletions.
+
+ .. sourcecode:: python
+
+ >>> # A 'raw' fuzzy match:
+ >>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 1)
+ >>> # 0 substitutions, 0 insertions, 1 deletion.
+
+ >>> # A better match might be possible if the ENHANCEMATCH flag used:
+ >>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
+ (0, 0, 0)
+ >>> # 0 substitutions, 0 insertions, 0 deletions.
+
+ The match object also has an attribute ``fuzzy_changes`` which gives a tuple of the positions of the substitutions, insertions and deletions.
+
+ .. sourcecode:: python
+
+ >>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
+ >>> m
+ <regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
+ >>> m.fuzzy_changes
+ ([], [7, 8], [10, 11])
+
+ What this means is that if the matched part of the string had been:
+
+ .. sourcecode:: python
+
+ 'anacondfuuoo bar'
+
+ it would've been an exact match.
+
+ However, there were insertions at positions 7 and 8:
+
+ .. sourcecode:: python
+
+ 'anaconda fuuoo bar'
+ ^^
+
+ and deletions at positions 10 and 11:
+
+ .. sourcecode:: python
+
+ 'anaconda f~~oo bar'
+ ^^
+
+ So the actual string was:
+
+ .. sourcecode:: python
+
+ 'anaconda foo bar'
+
+ Named lists (`Hg issue 11 <https://bitbucket.org/mrabarnett/mrab-regex/issues/11>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``\L<name>``
+
+ There are occasions where you may want to include a list (actually, a set) of options in a regex.
+
+ One way is to build the pattern like this:
+
+ .. sourcecode:: python
+
+ >>> p = regex.compile(r"first|second|third|fourth|fifth")
+
+ but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, "cats" before "cat".
+
+ The new alternative is to use a named list:
+
+ .. sourcecode:: python
+
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set)
+
+ The order of the items is irrelevant, they are treated as a set. The named lists are available as the ``.named_lists`` attribute of the pattern object :
+
+ .. sourcecode:: python
+
+ >>> print(p.named_lists)
+ # Python 3
+ {'options': frozenset({'fifth', 'first', 'fourth', 'second', 'third'})}
+ # Python 2
+ {'options': frozenset(['fifth', 'fourth', 'second', 'third', 'first'])}
+
+ If there are any unused keyword arguments, ``ValueError`` will be raised unless you tell it otherwise:
+
+ .. sourcecode:: python
+
+ >>> option_set = ["first", "second", "third", "fourth", "fifth"]
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[])
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 348, in compile
+ return _compile(pattern, flags, ignore_unused, kwargs)
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 585, in _compile
+ raise ValueError('unused keyword argument {!a}'.format(any_one))
+ ValueError: unused keyword argument 'other_options'
+ >>> p = regex.compile(r"\L<options>", options=option_set, other_options=[], ignore_unused=True)
+ >>>
+
+ Start and end of word
+ ^^^^^^^^^^^^^^^^^^^^^
+
+ ``\m`` matches at the start of a word.
+
+ ``\M`` matches at the end of a word.
+
+ Compare with ``\b``, which matches at the start or end of a word.
+
+ Unicode line separators
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ Normally the only line separator is ``\n`` (``\x0A``), but if the ``WORD`` flag is turned on then the line separators are ``\x0D\x0A``, ``\x0A``, ``\x0B``, ``\x0C`` and ``\x0D``, plus ``\x85``, ``\u2028`` and ``\u2029`` when working with Unicode.
+
+ This affects the regex dot ``"."``, which, with the ``DOTALL`` flag turned off, matches any character except a line separator. It also affects the line anchors ``^`` and ``$`` (in multiline mode).
+
+ Set operators
+ ^^^^^^^^^^^^^
+
+ **Version 1 behaviour only**
+
+ Set operators have been added, and a set ``[...]`` can include nested sets.
+
+ The operators, in order of increasing precedence, are:
+
+ * ``||`` for union ("x||y" means "x or y")
+
+ * ``~~`` (double tilde) for symmetric difference ("x~~y" means "x or y, but not both")
+
+ * ``&&`` for intersection ("x&&y" means "x and y")
+
+ * ``--`` (double dash) for difference ("x--y" means "x but not y")
+
+ Implicit union, ie, simple juxtaposition like in ``[ab]``, has the highest precedence. Thus, ``[ab&&cd]`` is the same as ``[[a||b]&&[c||d]]``.
+
+ Examples:
+
+ * ``[ab]`` # Set containing 'a' and 'b'
+
+ * ``[a-z]`` # Set containing 'a' .. 'z'
+
+ * ``[[a-z]--[qw]]`` # Set containing 'a' .. 'z', but not 'q' or 'w'
+
+ * ``[a-z--qw]`` # Same as above
+
+ * ``[\p{L}--QW]`` # Set containing all letters except 'Q' and 'W'
+
+ * ``[\p{N}--[0-9]]`` # Set containing all numbers except '0' .. '9'
+
+ * ``[\p{ASCII}&&\p{Letter}]`` # Set containing all characters which are ASCII and letter
+
+ regex.escape (`issue #2650 <https://bugs.python.org/issue2650>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ regex.escape has an additional keyword parameter ``special_only``. When True, only 'special' regex characters, such as '?', are escaped.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.escape("foo!?", special_only=False)
+ 'foo\\!\\?'
+ >>> regex.escape("foo!?", special_only=True)
+ 'foo!\\?'
+
+ regex.escape (`Hg issue 249 <https://bitbucket.org/mrabarnett/mrab-regex/issues/249>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ regex.escape has an additional keyword parameter ``literal_spaces``. When True, spaces are not escaped.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.escape("foo bar!?", literal_spaces=False)
+ 'foo\\ bar!\\?'
+ >>> regex.escape("foo bar!?", literal_spaces=True)
+ 'foo bar!\\?'
+
+ Repeated captures (`issue #7132 <https://bugs.python.org/issue7132>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ A match object has additional methods which return information on all the successful matches of a repeated capture group. These methods are:
+
+ * ``matchobject.captures([group1, ...])``
+
+ * Returns a list of the strings matched in a group or groups. Compare with ``matchobject.group([group1, ...])``.
+
+ * ``matchobject.starts([group])``
+
+ * Returns a list of the start positions. Compare with ``matchobject.start([group])``.
+
+ * ``matchobject.ends([group])``
+
+ * Returns a list of the end positions. Compare with ``matchobject.end([group])``.
+
+ * ``matchobject.spans([group])``
+
+ * Returns a list of the spans. Compare with ``matchobject.span([group])``.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r"(\w{3})+", "123456789")
+ >>> m.group(1)
+ '789'
+ >>> m.captures(1)
+ ['123', '456', '789']
+ >>> m.start(1)
+ 6
+ >>> m.starts(1)
+ [0, 3, 6]
+ >>> m.end(1)
+ 9
+ >>> m.ends(1)
+ [3, 6, 9]
+ >>> m.span(1)
+ (6, 9)
+ >>> m.spans(1)
+ [(0, 3), (3, 6), (6, 9)]
+
+ Atomic grouping (`issue #433030 <https://bugs.python.org/issue433030>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(?>...)``
+
+ If the following pattern subsequently fails, then the subpattern as a whole will fail.
+
+ Possessive quantifiers.
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(?:...)?+`` ; ``(?:...)*+`` ; ``(?:...)++`` ; ``(?:...){min,max}+``
+
+ The subpattern is matched up to 'max' times. If the following pattern subsequently fails, then all of the repeated subpatterns will fail as a whole. For example, ``(?:...)++`` is equivalent to ``(?>(?:...)+)``.
+
+ Scoped flags (`issue #433028 <https://bugs.python.org/issue433028>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``(?flags-flags:...)``
+
+ The flags will apply only to the subpattern. Flags can be turned on or off.
+
+ Definition of 'word' character (`issue #1693050 <https://bugs.python.org/issue1693050>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The definition of a 'word' character has been expanded for Unicode. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+
+ Variable-length lookbehind
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ A lookbehind can match a variable-length string.
+
+ Flags argument for regex.split, regex.sub and regex.subn (`issue #3482 <https://bugs.python.org/issue3482>`_)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``regex.split``, ``regex.sub`` and ``regex.subn`` support a 'flags' argument.
+
+ Pos and endpos arguments for regex.sub and regex.subn
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``regex.sub`` and ``regex.subn`` support 'pos' and 'endpos' arguments.
+
+ 'Overlapped' argument for regex.findall and regex.finditer
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``regex.findall`` and ``regex.finditer`` support an 'overlapped' flag which permits overlapped matches.
+
+ Splititer
+ ^^^^^^^^^
+
+ ``regex.splititer`` has been added. It's a generator equivalent of ``regex.split``.
+
+ Subscripting for groups
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ A match object accepts access to the captured groups via subscripting and slicing:
+
+ .. sourcecode:: python
+
+ >>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
+ >>> print(m["before"])
+ pqr
+ >>> print(len(m))
+ 4
+ >>> print(m[:])
+ ('pqr123stu', 'pqr', '123', 'stu')
+
+ Named groups
+ ^^^^^^^^^^^^
+
+ Groups can be named with ``(?<name>...)`` as well as the current ``(?P<name>...)``.
+
+ Group references
+ ^^^^^^^^^^^^^^^^
+
+ Groups can be referenced within a pattern with ``\g<name>``. This also allows there to be more than 99 groups.
+
+ Named characters
+ ^^^^^^^^^^^^^^^^
+
+ ``\N{name}``
+
+ Named characters are supported. (Note: only those known by Python's Unicode database are supported.)
+
+ Unicode codepoint properties, including scripts and blocks
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``\p{property=value}``; ``\P{property=value}``; ``\p{value}`` ; ``\P{value}``
+
+ Many Unicode properties are supported, including blocks and scripts. ``\p{property=value}`` or ``\p{property:value}`` matches a character whose property ``property`` has value ``value``. The inverse of ``\p{property=value}`` is ``\P{property=value}`` or ``\p{^property=value}``.
+
+ If the short form ``\p{value}`` is used, the properties are checked in the order: ``General_Category``, ``Script``, ``Block``, binary property:
+
+ * ``Latin``, the 'Latin' script (``Script=Latin``).
+
+ * ``BasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+
+ * ``Alphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+
+ A short form starting with ``Is`` indicates a script or binary property:
+
+ * ``IsLatin``, the 'Latin' script (``Script=Latin``).
+
+ * ``IsAlphabetic``, the 'Alphabetic' binary property (``Alphabetic=Yes``).
+
+ A short form starting with ``In`` indicates a block property:
+
+ * ``InBasicLatin``, the 'BasicLatin' block (``Block=BasicLatin``).
+
+ POSIX character classes
+ ^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``[[:alpha:]]``; ``[[:^alpha:]]``
+
+ POSIX character classes are supported. These are normally treated as an alternative form of ``\p{...}``.
+
+ The exceptions are ``alnum``, ``digit``, ``punct`` and ``xdigit``, whose definitions are different from those of Unicode.
+
+ ``[[:alnum:]]`` is equivalent to ``\p{posix_alnum}``.
+
+ ``[[:digit:]]`` is equivalent to ``\p{posix_digit}``.
+
+ ``[[:punct:]]`` is equivalent to ``\p{posix_punct}``.
+
+ ``[[:xdigit:]]`` is equivalent to ``\p{posix_xdigit}``.
+
+ Search anchor
+ ^^^^^^^^^^^^^
+
+ ``\G``
+
+ A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:
+
+ .. sourcecode:: python
+
+ >>> regex.findall(r"\w{2}", "abcd ef")
+ ['ab', 'cd', 'ef']
+ >>> regex.findall(r"\G\w{2}", "abcd ef")
+ ['ab', 'cd']
+
+ * The search starts at position 0 and matches 2 letters 'ab'.
+
+ * The search continues at position 2 and matches 2 letters 'cd'.
+
+ * The search continues at position 4 and fails to match any letters.
+
+ * The anchor stops the search start position from being advanced, so there are no more results.
+
+ Reverse searching
+ ^^^^^^^^^^^^^^^^^
+
+ Searches can now work backwards:
+
+ .. sourcecode:: python
+
+ >>> regex.findall(r".", "abc")
+ ['a', 'b', 'c']
+ >>> regex.findall(r"(?r).", "abc")
+ ['c', 'b', 'a']
+
+ Note: the result of a reverse search is not necessarily the reverse of a forward search:
+
+ .. sourcecode:: python
+
+ >>> regex.findall(r"..", "abcde")
+ ['ab', 'cd']
+ >>> regex.findall(r"(?r)..", "abcde")
+ ['de', 'bc']
+
+ Matching a single grapheme
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``\X``
+
+ The grapheme matcher is supported. It now conforms to the Unicode specification at ``http://www.unicode.org/reports/tr29/``.
+
+ Branch reset
+ ^^^^^^^^^^^^
+
+ ``(?|...|...)``
+
+ Capture group numbers will be reused across the alternatives, but groups with different names will have different group numbers.
+
+ Examples:
+
+ .. sourcecode:: python
+
+ >>> regex.match(r"(?|(first)|(second))", "first").groups()
+ ('first',)
+ >>> regex.match(r"(?|(first)|(second))", "second").groups()
+ ('second',)
+
+ Note that there is only one group.
+
+ Default Unicode word boundary
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ The ``WORD`` flag changes the definition of a 'word boundary' to that of a default Unicode word boundary. This applies to ``\b`` and ``\B``.
+
+ Timeout (Python 3)
+ ^^^^^^^^^^^^^^^^^^
+
+ The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:
+
+ .. sourcecode:: python
+
+ >>> from time import sleep
+ >>>
+ >>> def fast_replace(m):
+ ... return 'X'
+ ...
+ >>> def slow_replace(m):
+ ... sleep(0.5)
+ ... return 'X'
+ ...
+ >>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
+ 'XXXXX'
+ >>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "C:\Python37\lib\site-packages\regex\regex.py", line 276, in sub
+ endpos, concurrent, timeout)
+ TimeoutError: regex timed out
+
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: Python Software Foundation License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Topic :: Scientific/Engineering :: Information Analysis
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Text Processing
+Classifier: Topic :: Text Processing :: General
diff --git a/regex.egg-info/SOURCES.txt b/regex.egg-info/SOURCES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..820e244ea6d7172422a2a725bddcd9bcecb82f00
--- /dev/null
+++ b/regex.egg-info/SOURCES.txt
@@ -0,0 +1,27 @@
+MANIFEST.in
+README.rst
+setup.py
+docs/Features.html
+docs/Features.rst
+docs/UnicodeProperties.rst
+regex.egg-info/PKG-INFO
+regex.egg-info/SOURCES.txt
+regex.egg-info/dependency_links.txt
+regex.egg-info/top_level.txt
+regex_2/__init__.py
+regex_2/_regex.c
+regex_2/_regex.h
+regex_2/_regex_core.py
+regex_2/_regex_unicode.c
+regex_2/_regex_unicode.h
+regex_2/regex.py
+regex_2/test_regex.py
+regex_3/__init__.py
+regex_3/_regex.c
+regex_3/_regex.h
+regex_3/_regex_core.py
+regex_3/_regex_unicode.c
+regex_3/_regex_unicode.h
+regex_3/regex.py
+regex_3/test_regex.py
+tools/build_regex_unicode.py
\ No newline at end of file
diff --git a/regex.egg-info/dependency_links.txt b/regex.egg-info/dependency_links.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/regex.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/regex.egg-info/top_level.txt b/regex.egg-info/top_level.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4f9256d62325c75de027d1cd48f1ff520117413e
--- /dev/null
+++ b/regex.egg-info/top_level.txt
@@ -0,0 +1 @@
+regex
diff --git a/regex_2/regex/__init__.py b/regex_2/__init__.py
similarity index 100%
rename from regex_2/regex/__init__.py
rename to regex_2/__init__.py
diff --git a/regex_2/_regex.c b/regex_2/_regex.c
index f87e706dae101a4acaac20432ef1789b4fcdef09..01ac858c3f68f5d8d04befa4813219afadb6778a 100644
--- a/regex_2/_regex.c
+++ b/regex_2/_regex.c
@@ -495,6 +495,7 @@ typedef struct RE_State {
Py_ssize_t req_pos; /* The position where the required string matched. */
Py_ssize_t req_end; /* The end position where the required string matched. */
int partial_side; /* The side that could truncate in a partial match. */
+ /* Various flags. */
RE_UINT16 iterations; /* The number of iterations the matching engine has performed since checking for KeyboardInterrupt. */
BOOL is_unicode; /* Whether the string to be matched is Unicode. */
BOOL should_release; /* Whether the buffer should be released. */
@@ -1829,7 +1830,7 @@ static BOOL unicode_at_grapheme_boundary(RE_State* state, Py_ssize_t text_pos)
return FALSE;
/* GB8 */
- if ((left_prop == RE_GBREAK_LVT || left_prop == RE_GBREAK_T) && left_prop
+ if ((left_prop == RE_GBREAK_LVT || left_prop == RE_GBREAK_T) && right_prop
== RE_GBREAK_T)
return FALSE;
@@ -1870,14 +1871,16 @@ static BOOL unicode_at_grapheme_boundary(RE_State* state, Py_ssize_t text_pos)
* number of RI characters before the break point.
*/
/* GB12 and GB13 */
- pos = left_pos;
+ if (right_prop == RE_GBREAK_REGIONALINDICATOR) {
+ pos = left_pos;
- while (pos >= 0 && re_get_grapheme_cluster_break(char_at(state->text, pos))
- == RE_WBREAK_REGIONALINDICATOR)
- --pos;
+ while (pos >= 0 && re_get_grapheme_cluster_break(char_at(state->text,
+ pos)) == RE_GBREAK_REGIONALINDICATOR)
+ --pos;
- if ((left_pos - pos) % 2 == 1)
- return FALSE;
+ if ((left_pos - pos) % 2 == 1)
+ return FALSE;
+ }
/* Otherwise, break everywhere. */
/* GB999 */
@@ -9318,7 +9321,8 @@ Py_LOCAL_INLINE(BOOL) is_repeat_guarded(RE_State* state, size_t index,
RE_GuardList* guard_list;
/* Is a guard active here? */
- if (!(state->pattern->repeat_info[index].status & guard_type))
+ if (!(state->pattern->repeat_info[index].status & guard_type) ||
+ state->is_fuzzy)
return FALSE;
/* Which guard list? */
@@ -9460,715 +9464,6 @@ too_wide:
return NULL;
}
-/* Looks for a string in a string set. */
-Py_LOCAL_INLINE(int) string_set_contains(RE_State* state, PyObject* string_set,
- Py_ssize_t first, Py_ssize_t last) {
- PyObject* string;
- int status;
-
- if (state->is_unicode)
- string = build_unicode_value(state->text, first, last,
- state->charsize);
- else
- string = build_bytes_value(state->text, first, last, state->charsize);
- if (!string)
- return RE_ERROR_INTERNAL;
-
- status = PySet_Contains(string_set, string);
- Py_DECREF(string);
-
- return status;
-}
-
-/* Looks for a string in a string set, ignoring case. */
-Py_LOCAL_INLINE(int) string_set_contains_ign(RE_State* state, PyObject*
- string_set, void* buffer, Py_ssize_t first, Py_ssize_t last, Py_ssize_t
- index, Py_ssize_t buffer_charsize) {
- Py_UCS4 (*char_at)(void* text, Py_ssize_t pos);
- void (*set_char_at)(void* text, Py_ssize_t pos, Py_UCS4 ch);
- RE_EncodingTable* encoding;
- RE_LocaleInfo* locale_info;
- BOOL (*possible_turkic)(RE_LocaleInfo* locale_info, Py_UCS4 ch);
- Py_UCS4 codepoints[4];
-
- switch (buffer_charsize) {
- case 1:
- char_at = bytes1_char_at;
- set_char_at = bytes1_set_char_at;
- break;
- case 2:
- char_at = bytes2_char_at;
- set_char_at = bytes2_set_char_at;
- break;
- case 4:
- char_at = bytes4_char_at;
- set_char_at = bytes4_set_char_at;
- break;
- default:
- char_at = bytes1_char_at;
- set_char_at = bytes1_set_char_at;
- break;
- }
-
- encoding = state->encoding;
- locale_info = state->locale_info;
- possible_turkic = encoding->possible_turkic;
-
- /* Look for a possible Turkic 'I'. */
- while (index < last && !possible_turkic(locale_info, char_at(buffer,
- index)))
- ++index;
-
- if (index < last) {
- /* Possible Turkic 'I'. */
- int count;
- int i;
-
- /* Try all the alternatives to the 'I'. */
- count = encoding->all_turkic_i(locale_info, char_at(buffer, index),
- codepoints);
-
- for (i = 0; i < count; i++) {
- int status;
-
- set_char_at(buffer, index, codepoints[i]);
-
- /* Recurse for the remainder of the string. */
- status = string_set_contains_ign(state, string_set, buffer, first,
- last, index + 1, buffer_charsize);
- if (status != 0)
- return status;
- }
-
- return 0;
- } else {
- /* No Turkic 'I'. */
- PyObject* string;
- int status;
-
- if (state->is_unicode)
- string = build_unicode_value(buffer, first, last, buffer_charsize);
- else
- string = build_bytes_value(buffer, first, last, buffer_charsize);
- if (!string)
- return RE_ERROR_MEMORY;
-
- status = PySet_Contains(string_set, string);
- Py_DECREF(string);
-
- return status;
- }
-}
-
-/* Creates a partial string set for truncation at the left or right side. */
-Py_LOCAL_INLINE(int) make_partial_string_set(RE_State* state, RE_Node* node) {
- PatternObject* pattern;
- int partial_side;
- PyObject* string_set;
- PyObject* partial_set;
- PyObject* iter = NULL;
- PyObject* item = NULL;
- PyObject* slice = NULL;
-
- pattern = state->pattern;
- partial_side = state->partial_side;
- if (partial_side != RE_PARTIAL_LEFT && partial_side != RE_PARTIAL_RIGHT)
- return RE_ERROR_INTERNAL;
-
- /* Fetch the full string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(pattern->named_list_indexes, node->values[0]);
- if (!string_set)
- return RE_ERROR_INTERNAL;
-
- /* Gets the list of partial string sets. */
- if (!pattern->partial_named_lists[partial_side]) {
- size_t size;
-
- size = pattern->named_lists_count * sizeof(PyObject*);
- pattern->partial_named_lists[partial_side] = re_alloc(size);
- if (!pattern->partial_named_lists[partial_side])
- return RE_ERROR_INTERNAL;
-
- memset(pattern->partial_named_lists[partial_side], 0, size);
- }
-
- /* Get the partial string set. */
- partial_set = pattern->partial_named_lists[partial_side][node->values[0]];
- if (partial_set)
- return 1;
-
- /* Build the partial string set. */
- partial_set = PySet_New(NULL);
- if (!partial_set)
- return RE_ERROR_INTERNAL;
-
- iter = PyObject_GetIter(string_set);
- if (!iter)
- goto error;
-
- item = PyIter_Next(iter);
-
- while (item) {
- Py_ssize_t len;
- Py_ssize_t first;
- Py_ssize_t last;
-
- len = PySequence_Length(item);
- if (len == -1)
- goto error;
-
- first = 0;
- last = len;
-
- while (last - first > 1) {
- int status;
-
- /* Shorten the entry. */
- if (partial_side == RE_PARTIAL_LEFT)
- ++first;
- else
- --last;
-
- slice = PySequence_GetSlice(item, first, last);
- if (!slice)
- goto error;
-
- status = PySet_Add(partial_set, slice);
- Py_DECREF(slice);
- if (status < 0)
- goto error;
- }
-
- Py_DECREF(item);
- item = PyIter_Next(iter);
- }
-
- if (PyErr_Occurred())
- goto error;
-
- Py_DECREF(iter);
-
- pattern->partial_named_lists[partial_side][node->values[0]] = partial_set;
-
- return 1;
-
-error:
- Py_XDECREF(item);
- Py_XDECREF(iter);
- Py_DECREF(partial_set);
-
- return RE_ERROR_INTERNAL;
-}
-
-/* Tries to match a string at the current position with a member of a string
- * set, forwards or backwards.
- */
-Py_LOCAL_INLINE(int) string_set_match_fwdrev(RE_State* state, RE_Node* node,
- BOOL reverse) {
- Py_ssize_t min_len;
- Py_ssize_t max_len;
- Py_ssize_t text_available;
- Py_ssize_t slice_available;
- int partial_side;
- Py_ssize_t len;
- Py_ssize_t first;
- Py_ssize_t last;
- int status;
- PyObject* string_set;
-
- min_len = (Py_ssize_t)node->values[1];
- max_len = (Py_ssize_t)node->values[2];
-
- acquire_GIL(state);
-
- if (reverse) {
- text_available = state->text_pos;
- slice_available = state->text_pos - state->slice_start;
- partial_side = RE_PARTIAL_LEFT;
- } else {
- text_available = state->text_length - state->text_pos;
- slice_available = state->slice_end - state->text_pos;
- partial_side = RE_PARTIAL_RIGHT;
- }
-
- /* Get as many characters as we need for the longest possible match. */
- len = min_ssize_t(max_len, slice_available);
-
- if (reverse) {
- first = state->text_pos - len;
- last = state->text_pos;
- } else {
- first = state->text_pos;
- last = state->text_pos + len;
- }
-
- /* If we didn't get all of the characters we need, is a partial match
- * allowed?
- */
- if (len < max_len && len == text_available && state->partial_side ==
- partial_side) {
- if (len == 0) {
- /* An empty string is always a possible partial match. */
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
-
- /* Make a set of the possible partial matches. */
- status = make_partial_string_set(state, node);
- if (status < 0)
- goto finished;
-
- /* Fetch the partial string set. */
- string_set =
- state->pattern->partial_named_lists[partial_side][node->values[0]];
-
- /* Is the text we have a partial match? */
- status = string_set_contains(state, string_set, first, last);
- if (status < 0)
- goto finished;
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
- }
-
- /* Fetch the string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(state->pattern->named_list_indexes,
- node->values[0]);
- if (!string_set) {
- status = RE_ERROR_INTERNAL;
- goto finished;
- }
-
- /* We've already looked for a partial match (if allowed), but what about a
- * complete match?
- */
- while (len >= min_len) {
- status = string_set_contains(state, string_set, first, last);
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = 1;
- goto finished;
- }
-
- /* Look for a shorter match. */
- --len;
- if (reverse)
- ++first;
- else
- --last;
- }
-
- /* No match. */
- status = 0;
-
-finished:
- release_GIL(state);
-
- return status;
-}
-
-/* Tries to match a string at the current position with a member of a string
- * set, ignoring case, forwards or backwards.
- */
-Py_LOCAL_INLINE(int) string_set_match_fld_fwdrev(RE_State* state, RE_Node*
- node, BOOL reverse) {
- int (*full_case_fold)(RE_LocaleInfo* locale_info, Py_UCS4 ch, Py_UCS4*
- folded);
- Py_UCS4 (*char_at)(void* text, Py_ssize_t pos);
- Py_ssize_t folded_charsize;
- void (*set_char_at)(void* text, Py_ssize_t pos, Py_UCS4 ch);
- Py_ssize_t min_len;
- Py_ssize_t max_len;
- Py_ssize_t buf_len;
- void* folded;
- int status;
- BOOL* end_of_fold = NULL;
- Py_ssize_t text_available;
- Py_ssize_t slice_available;
- Py_ssize_t t_pos;
- Py_ssize_t f_pos;
- int step;
- int partial_side;
- Py_ssize_t len;
- Py_ssize_t consumed;
- Py_UCS4 codepoints[RE_MAX_FOLDED];
- Py_ssize_t first;
- Py_ssize_t last;
- PyObject* string_set;
-
- full_case_fold = state->encoding->full_case_fold;
- char_at = state->char_at;
-
- /* The folded string will have the same width as the original string. */
- folded_charsize = state->charsize;
-
- switch (folded_charsize) {
- case 1:
- set_char_at = bytes1_set_char_at;
- break;
- case 2:
- set_char_at = bytes2_set_char_at;
- break;
- case 4:
- set_char_at = bytes4_set_char_at;
- break;
- default:
- return RE_ERROR_INTERNAL;
- }
-
- min_len = (Py_ssize_t)node->values[1];
- max_len = (Py_ssize_t)node->values[2];
-
- acquire_GIL(state);
-
- /* Allocate a buffer for the folded string. */
- buf_len = max_len + RE_MAX_FOLDED;
- folded = re_alloc((size_t)(buf_len * folded_charsize));
- if (!folded) {
- status = RE_ERROR_MEMORY;
- goto finished;
- }
-
- end_of_fold = re_alloc((size_t)buf_len * sizeof(BOOL));
- if (!end_of_fold) {
- status = RE_ERROR_MEMORY;
- goto finished;
- }
-
- memset(end_of_fold, 0, (size_t)buf_len * sizeof(BOOL));
-
- if (reverse) {
- text_available = state->text_pos;
- slice_available = state->text_pos - state->slice_start;
- t_pos = state->text_pos - 1;
- f_pos = buf_len;
- step = -1;
- partial_side = RE_PARTIAL_LEFT;
- } else {
- text_available = state->text_length - state->text_pos;
- slice_available = state->slice_end - state->text_pos;
- t_pos = state->text_pos;
- f_pos = 0;
- step = 1;
- partial_side = RE_PARTIAL_RIGHT;
- }
-
- /* We can stop getting characters as soon as the case-folded string is long
- * enough (each codepoint from the text can expand to more than one folded
- * codepoint).
- */
- len = 0;
- end_of_fold[len] = TRUE;
-
- consumed = 0;
- while (len < max_len && consumed < slice_available) {
- int count;
- int j;
-
- count = full_case_fold(state->locale_info, char_at(state->text, t_pos),
- codepoints);
-
- if (reverse)
- f_pos -= count;
-
- for (j = 0; j < count; j++)
- set_char_at(folded, f_pos + j, codepoints[j]);
-
- if (!reverse)
- f_pos += count;
-
- len += count;
- end_of_fold[len] = TRUE;
- ++consumed;
- t_pos += step;
- }
-
- if (reverse) {
- first = f_pos;
- last = buf_len;
- } else {
- first = 0;
- last = f_pos;
- }
-
- /* If we didn't get all of the characters we need, is a partial match
- * allowed?
- */
- if (len < max_len && len == text_available && state->partial_side ==
- partial_side) {
- if (len == 0) {
- /* An empty string is always a possible partial match. */
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
-
- /* Make a set of the possible partial matches. */
- status = make_partial_string_set(state, node);
- if (status < 0)
- goto finished;
-
- /* Fetch the partial string set. */
- string_set =
- state->pattern->partial_named_lists[partial_side][node->values[0]];
-
- /* Is the text we have a partial match? */
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
- if (status < 0)
- goto finished;
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= consumed;
- else
- state->text_pos += consumed;
-
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
- }
-
- /* Fetch the string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(state->pattern->named_list_indexes,
- node->values[0]);
- if (!string_set) {
- status = RE_ERROR_INTERNAL;
- goto finished;
- }
-
- /* We've already looked for a partial match (if allowed), but what about a
- * complete match?
- */
- while (len >= min_len) {
- if (end_of_fold[len]) {
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= consumed;
- else
- state->text_pos += consumed;
-
- status = 1;
- goto finished;
- }
-
- --consumed;
- }
-
- /* Look for a shorter match. */
- --len;
- if (reverse)
- ++first;
- else
- --last;
- }
-
- /* No match. */
- status = 0;
-
-finished:
- re_dealloc(end_of_fold);
- re_dealloc(folded);
-
- release_GIL(state);
-
- return status;
-}
-
-/* Tries to match a string at the current position with a member of a string
- * set, ignoring case, forwards or backwards.
- */
-Py_LOCAL_INLINE(int) string_set_match_ign_fwdrev(RE_State* state, RE_Node*
- node, BOOL reverse) {
- Py_UCS4 (*simple_case_fold)(RE_LocaleInfo* locale_info, Py_UCS4 ch);
- Py_UCS4 (*char_at)(void* text, Py_ssize_t pos);
- Py_ssize_t folded_charsize;
- void (*set_char_at)(void* text, Py_ssize_t pos, Py_UCS4 ch);
- Py_ssize_t min_len;
- Py_ssize_t max_len;
- void* folded;
- int status;
- Py_ssize_t text_available;
- Py_ssize_t slice_available;
- Py_ssize_t t_pos;
- Py_ssize_t f_pos;
- int step;
- int partial_side;
- Py_ssize_t len;
- Py_ssize_t i;
- Py_ssize_t first;
- Py_ssize_t last;
- PyObject* string_set;
-
- simple_case_fold = state->encoding->simple_case_fold;
- char_at = state->char_at;
-
- /* The folded string will have the same width as the original string. */
- folded_charsize = state->charsize;
-
- switch (folded_charsize) {
- case 1:
- set_char_at = bytes1_set_char_at;
- break;
- case 2:
- set_char_at = bytes2_set_char_at;
- break;
- case 4:
- set_char_at = bytes4_set_char_at;
- break;
- default:
- return RE_ERROR_INTERNAL;
- }
-
- min_len = (Py_ssize_t)node->values[1];
- max_len = (Py_ssize_t)node->values[2];
-
- acquire_GIL(state);
-
- /* Allocate a buffer for the folded string. */
- folded = re_alloc((size_t)(max_len * folded_charsize));
- if (!folded) {
- status = RE_ERROR_MEMORY;
- goto finished;
- }
-
- if (reverse) {
- text_available = state->text_pos;
- slice_available = state->text_pos - state->slice_start;
- t_pos = state->text_pos - 1;
- f_pos = max_len - 1;
- step = -1;
- partial_side = RE_PARTIAL_LEFT;
- } else {
- text_available = state->text_length - state->text_pos;
- slice_available = state->slice_end - state->text_pos;
- t_pos = state->text_pos;
- f_pos = 0;
- step = 1;
- partial_side = RE_PARTIAL_RIGHT;
- }
-
- /* Get as many characters as we need for the longest possible match. */
- len = min_ssize_t(max_len, slice_available);
-
- for (i = 0; i < len; i ++) {
- Py_UCS4 ch;
-
- ch = simple_case_fold(state->locale_info, char_at(state->text, t_pos));
- set_char_at(folded, f_pos, ch);
- t_pos += step;
- f_pos += step;
- }
-
- if (reverse) {
- first = f_pos + 1;
- last = max_len;
- } else {
- first = 0;
- last = f_pos;
- }
-
- /* If we didn't get all of the characters we need, is a partial match
- * allowed?
- */
- if (len < max_len && len == text_available && state->partial_side ==
- partial_side) {
- if (len == 0) {
- /* An empty string is always a possible partial match. */
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
-
- /* Make a set of the possible partial matches. */
- status = make_partial_string_set(state, node);
- if (status < 0)
- goto finished;
-
- /* Fetch the partial string set. */
- string_set =
- state->pattern->partial_named_lists[partial_side][node->values[0]];
-
- /* Is the text we have a partial match? */
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
- if (status < 0)
- goto finished;
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
- }
-
- /* Fetch the string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(state->pattern->named_list_indexes,
- node->values[0]);
- if (!string_set) {
- status = RE_ERROR_INTERNAL;
- goto finished;
- }
-
- /* We've already looked for a partial match (if allowed), but what about a
- * complete match?
- */
- while (len >= min_len) {
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = 1;
- goto finished;
- }
-
- /* Look for a shorter match. */
- --len;
- if (reverse)
- ++first;
- else
- --last;
- }
-
- /* No match. */
- status = 0;
-
-finished:
- re_dealloc(folded);
-
- release_GIL(state);
-
- return status;
-}
-
Py_LOCAL_INLINE(size_t) total_errors(size_t* fuzzy_counts) {
return fuzzy_counts[RE_FUZZY_DEL] + fuzzy_counts[RE_FUZZY_INS] +
fuzzy_counts[RE_FUZZY_SUB];
@@ -10330,16 +9625,25 @@ Py_LOCAL_INLINE(void) unrecord_fuzzy(RE_State* state) {
--state->fuzzy_changes.count;
}
-/* Makes a list of lists of fuzzy changes. */
-Py_LOCAL_INLINE(void) make_fuzzy_changes_list(RE_FuzzyChangesList*
+/* Initialises a list of fuzzy changes. */
+Py_LOCAL_INLINE(void) init_fuzzy_changes_list(RE_FuzzyChangesList*
changes_list) {
changes_list->capacity = 0;
changes_list->count = 0;
changes_list->items = NULL;
}
-/* Makes a list of lists of fuzzy changes. */
-Py_LOCAL_INLINE(void) make_best_changes_list(RE_BestChangesList*
+/* Finalises a list of fuzzy changes. */
+Py_LOCAL_INLINE(void) fini_fuzzy_changes_list(RE_State* state,
+ RE_FuzzyChangesList* changes_list) {
+ safe_dealloc(state, changes_list->items);
+ changes_list->capacity = 0;
+ changes_list->count = 0;
+ changes_list->items = NULL;
+}
+
+/* Initialises a list of lists of fuzzy changes. */
+Py_LOCAL_INLINE(void) init_best_changes_list(RE_BestChangesList*
best_changes_list) {
best_changes_list->capacity = 0;
best_changes_list->count = 0;
@@ -10364,11 +9668,14 @@ Py_LOCAL_INLINE(void) clear_best_fuzzy_changes(RE_State* state,
best_changes_list->count = 0;
}
-/* Destroys a list of lists of fuzzy changes. */
-Py_LOCAL_INLINE(void) destroy_best_changes_list(RE_State* state,
+/* Finalises a list of lists of fuzzy changes. */
+Py_LOCAL_INLINE(void) fini_best_changes_list(RE_State* state,
RE_BestChangesList* best_changes_list) {
clear_best_fuzzy_changes(state, best_changes_list);
safe_dealloc(state, best_changes_list->lists);
+ best_changes_list->capacity = 0;
+ best_changes_list->count = 0;
+ best_changes_list->lists = NULL;
}
/* Adds a list of fuzzy changes to a list of best fuzzy changes. */
@@ -10411,20 +9718,6 @@ Py_LOCAL_INLINE(BOOL) add_best_fuzzy_changes(RE_State* state,
return TRUE;
}
-/* Initialises a list of fuzzy changes. */
-Py_LOCAL_INLINE(void) make_changes_list(RE_State* state, RE_FuzzyChangesList*
- best_changes_list) {
- best_changes_list->capacity = 0;
- best_changes_list->count = 0;
- best_changes_list->items = NULL;
-}
-
-/* Finitialises a list of fuzzy changes. */
-Py_LOCAL_INLINE(void) destroy_changes_list(RE_State* state,
- RE_FuzzyChangesList* best_changes_list) {
- safe_dealloc(state, best_changes_list->items);
-}
-
/* Saves a list of fuzzy changes. */
Py_LOCAL_INLINE(BOOL) save_fuzzy_changes(RE_State* state, RE_FuzzyChangesList*
best_changes_list) {
@@ -10522,6 +9815,13 @@ Py_LOCAL_INLINE(BOOL) fuzzy_ext_match(RE_State* state, RE_Node* fuzzy_node,
return pos > state->slice_start && matches_RANGE(state->encoding,
state->locale_info, test_node, state->char_at(state->text, pos - 1))
== test_node->match;
+ case RE_OP_SET_DIFF:
+ case RE_OP_SET_INTER:
+ case RE_OP_SET_SYM_DIFF:
+ case RE_OP_SET_UNION:
+ return pos < state->slice_end && matches_SET(state->encoding,
+ state->locale_info, test_node, state->char_at(state->text, pos)) ==
+ test_node->match;
}
return TRUE;
@@ -10613,6 +9913,14 @@ Py_LOCAL_INLINE(BOOL) fuzzy_ext_match_group_fld(RE_State* state, RE_Node*
matches_RANGE(state->encoding, state->locale_info, test_node,
folded_char_at(state, state->text_pos - 1, folded_pos - 1)) ==
test_node->match;
+ case RE_OP_SET_DIFF:
+ case RE_OP_SET_INTER:
+ case RE_OP_SET_SYM_DIFF:
+ case RE_OP_SET_UNION:
+ return state->text_pos < state->slice_end &&
+ matches_SET(state->encoding, state->locale_info, test_node,
+ folded_char_at(state, state->text_pos, folded_pos)) ==
+ test_node->match;
}
return TRUE;
@@ -10623,58 +9931,60 @@ Py_LOCAL_INLINE(int) next_fuzzy_match_item(RE_State* state, RE_FuzzyData* data,
BOOL is_string, RE_INT8 step) {
Py_ssize_t new_pos;
- if (this_error_permitted(state, data->fuzzy_type)) {
- switch (data->fuzzy_type) {
- case RE_FUZZY_DEL:
- /* Could a character at text_pos have been deleted? */
- if (step == 0)
- return RE_ERROR_FAILURE;
+ if (!this_error_permitted(state, data->fuzzy_type))
+ return RE_ERROR_FAILURE;
- if (is_string)
- data->new_string_pos += step;
- else
- data->new_node = data->new_node->next_1.node;
- return RE_ERROR_SUCCESS;
- case RE_FUZZY_INS:
- /* Could the character at text_pos have been inserted? */
- if (!data->permit_insertion)
+ switch (data->fuzzy_type) {
+ case RE_FUZZY_DEL:
+ /* Could a character at text_pos have been deleted? */
+ if (step == 0)
+ return RE_ERROR_FAILURE;
+
+ if (is_string)
+ data->new_string_pos += step;
+ else
+ data->new_node = data->new_node->next_1.node;
+ return RE_ERROR_SUCCESS;
+ case RE_FUZZY_INS:
+ /* Could the character at text_pos have been inserted? */
+ if (!data->permit_insertion)
+ return RE_ERROR_FAILURE;
+
+ if (step == 0)
+ new_pos = data->new_text_pos + data->step;
+ else
+ new_pos = data->new_text_pos + step;
+
+ if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
+ if (!fuzzy_ext_match(state, state->fuzzy_node, data->new_text_pos))
return RE_ERROR_FAILURE;
- if (step == 0)
- new_pos = data->new_text_pos + data->step;
- else
- new_pos = data->new_text_pos + step;
- if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
- if (!fuzzy_ext_match(state, state->fuzzy_node,
- data->new_text_pos))
- return RE_ERROR_FAILURE;
+ data->new_text_pos = new_pos;
+ return RE_ERROR_SUCCESS;
+ }
- data->new_text_pos = new_pos;
- return RE_ERROR_SUCCESS;
- }
+ return check_fuzzy_partial(state, new_pos);
+ case RE_FUZZY_SUB:
+ /* Could the character at text_pos have been substituted? */
+ if (step == 0)
+ return RE_ERROR_FAILURE;
- return check_fuzzy_partial(state, new_pos);
- case RE_FUZZY_SUB:
- /* Could the character at text_pos have been substituted? */
- if (step == 0)
+ new_pos = data->new_text_pos + step;
+ if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
+ if (!fuzzy_ext_match(state, state->fuzzy_node, data->new_text_pos))
return RE_ERROR_FAILURE;
- new_pos = data->new_text_pos + step;
- if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
- if (!fuzzy_ext_match(state, state->fuzzy_node,
- data->new_text_pos))
- return RE_ERROR_FAILURE;
+ data->new_text_pos = new_pos;
- data->new_text_pos = new_pos;
- if (is_string)
- data->new_string_pos += step;
- else
- data->new_node = data->new_node->next_1.node;
- return RE_ERROR_SUCCESS;
- }
+ if (is_string)
+ data->new_string_pos += step;
+ else
+ data->new_node = data->new_node->next_1.node;
- return check_fuzzy_partial(state, new_pos);
+ return RE_ERROR_SUCCESS;
}
+
+ return check_fuzzy_partial(state, new_pos);
}
return RE_ERROR_FAILURE;
@@ -10685,11 +9995,14 @@ Py_LOCAL_INLINE(int) fuzzy_match_item(RE_State* state, BOOL search, Py_ssize_t*
text_pos, RE_Node** node, RE_INT8 step) {
size_t* fuzzy_counts;
RE_FuzzyData data;
+ TRACE(("<<fuzzy_match_item>>\n"))
fuzzy_counts = state->fuzzy_counts;
- if (!any_error_permitted(state))
+ if (!any_error_permitted(state)) {
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
+ }
data.new_text_pos = *text_pos;
data.new_node = *node;
@@ -10723,6 +10036,7 @@ Py_LOCAL_INLINE(int) fuzzy_match_item(RE_State* state, BOOL search, Py_ssize_t*
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -10739,7 +10053,8 @@ found:
/* bstack: node step text_pos fuzzy_type op */
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -10748,6 +10063,9 @@ found:
*text_pos = data.new_text_pos;
*node = data.new_node;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -10759,6 +10077,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_item(RE_State* state, RE_UINT8 op, BOOL
RE_FuzzyData data;
RE_INT8 step;
RE_Node* curr_node;
+ TRACE(("<<retry_fuzzy_match_item>>\n"))
fuzzy_counts = state->fuzzy_counts;
@@ -10804,6 +10123,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_item(RE_State* state, RE_UINT8 op, BOOL
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -10820,7 +10140,8 @@ found:
/* bstack: node step text_pos fuzzy_type op */
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -10829,6 +10150,9 @@ found:
*text_pos = data.new_text_pos;
*node = data.new_node;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -10925,11 +10249,14 @@ Py_LOCAL_INLINE(int) fuzzy_match_string(RE_State* state, BOOL search,
Py_ssize_t* text_pos, RE_Node* node, Py_ssize_t* string_pos, RE_INT8 step) {
size_t* fuzzy_counts;
RE_FuzzyData data;
+ TRACE(("<<fuzzy_match_string>>\n"))
fuzzy_counts = state->fuzzy_counts;
- if (!any_error_permitted(state))
+ if (!any_error_permitted(state)) {
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
+ }
data.new_text_pos = *text_pos;
data.new_string_pos = *string_pos;
@@ -10953,6 +10280,7 @@ Py_LOCAL_INLINE(int) fuzzy_match_string(RE_State* state, BOOL search,
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -10971,7 +10299,8 @@ found:
/* bstack: node step string_pos text_pos fuzzy_type op */
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -10980,6 +10309,9 @@ found:
*text_pos = data.new_text_pos;
*string_pos = data.new_string_pos;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -10991,6 +10323,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_string(RE_State* state, RE_UINT8 op,
Py_ssize_t curr_text_pos;
Py_ssize_t curr_string_pos;
RE_Node* new_node;
+ TRACE(("<<retry_fuzzy_match_string>>\n"))
fuzzy_counts = state->fuzzy_counts;
@@ -11032,6 +10365,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_string(RE_State* state, RE_UINT8 op,
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -11048,7 +10382,8 @@ found:
if (!push_uint8(state, &state->bstack, op))
return RE_ERROR_MEMORY;
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
/* bstack: node step string_pos text_pos fuzzy_type op */
@@ -11060,6 +10395,9 @@ found:
*node = new_node;
*string_pos = data.new_string_pos;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -11177,7 +10515,8 @@ found:
* op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11276,7 +10615,8 @@ found:
* op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11410,7 +10750,8 @@ found:
* folded_len text_pos fuzzy_type op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11515,7 +10856,8 @@ found:
* folded_len text_pos fuzzy_type op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -12966,7 +12308,7 @@ advance:
/* The counts are of type size_t, so the format needs to specify
* that.
*/
- TRACE(("min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
+ TRACE((" min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
node->values[1], node->values[2], rp_data->count))
/* Could the body or tail match? */
@@ -13193,7 +12535,7 @@ advance:
/* The counts are of type size_t, so the format needs to specify
* that.
*/
- TRACE(("min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
+ TRACE((" min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
node->values[1], node->values[2], rp_data->count))
/* Could the body or tail match? */
@@ -13615,6 +12957,11 @@ advance:
rp_data->capture_change = state->capture_change;
/* Could the body or tail match? */
+#if defined(VERBOSE)
+ printf(" is_repeat_guarded(..., RE_STATUS_BODY) returns %d\n",
+ is_repeat_guarded(state, index, state->text_pos,
+ RE_STATUS_BODY));
+#endif
try_body = node->values[2] > 0 && !is_repeat_guarded(state, index,
state->text_pos, RE_STATUS_BODY);
if (try_body) {
@@ -15538,66 +14885,6 @@ advance:
node = node->next_1.node;
break;
}
- case RE_OP_STRING_SET: /* Member of a string set. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fwdrev(state, node, FALSE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_FLD: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fld_fwdrev(state, node, FALSE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_FLD_REV: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fld_fwdrev(state, node, TRUE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_IGN: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_ign_fwdrev(state, node, FALSE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_IGN_REV: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_ign_fwdrev(state, node, TRUE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_REV: /* Member of a string set. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fwdrev(state, node, TRUE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
case RE_OP_SUCCESS: /* Success. */
/* Must the match advance past its start? */
TRACE(("%s\n", re_op_text[node->op]))
@@ -17923,8 +17210,17 @@ Py_LOCAL_INLINE(void) restore_fuzzy_counts(RE_State* state, size_t*
Py_MEMCPY(state->fuzzy_counts, fuzzy_counts, sizeof(state->fuzzy_counts));
}
-/* Makes the list of best matches found so far. */
-Py_LOCAL_INLINE(void) make_best_list(RE_BestList* best_list) {
+/* Initialises the list of best matches found so far. */
+Py_LOCAL_INLINE(void) init_best_list(RE_BestList* best_list) {
+ best_list->capacity = 0;
+ best_list->count = 0;
+ best_list->entries = NULL;
+}
+
+/* Finalises the list of best matches found so far. */
+Py_LOCAL_INLINE(void) fini_best_list(RE_State* state, RE_BestList*
+ best_list) {
+ safe_dealloc(state, best_list->entries);
best_list->capacity = 0;
best_list->count = 0;
best_list->entries = NULL;
@@ -17965,13 +17261,6 @@ Py_LOCAL_INLINE(BOOL) add_to_best_list(RE_State* state, RE_BestList* best_list,
return TRUE;
}
-/* Destroy the list of best matches found so far. */
-Py_LOCAL_INLINE(void) destroy_best_list(RE_State* state, RE_BestList*
- best_list) {
- if (best_list->entries)
- safe_dealloc(state, best_list->entries);
-}
-
/* Performs a match or search from the current text position for a best fuzzy
* match.
*/
@@ -18005,8 +17294,8 @@ Py_LOCAL_INLINE(int) do_best_fuzzy_match(RE_State* state, BOOL search) {
must_advance = state->must_advance;
found_match = FALSE;
- make_best_list(&best_list);
- make_best_changes_list(&best_changes_list);
+ init_best_list(&best_list);
+ init_best_changes_list(&best_changes_list);
/* Search the text for the best match. */
start_pos = state->text_pos;
@@ -18099,7 +17388,7 @@ Py_LOCAL_INLINE(int) do_best_fuzzy_match(RE_State* state, BOOL search) {
error_limit = RE_MAX_ERRORS;
best_groups = NULL;
- make_fuzzy_changes_list(&best_fuzzy_changes);
+ init_fuzzy_changes_list(&best_fuzzy_changes);
/* Look again at the best of the matches that we've seen. */
for (i = 0; i < best_list.count; i++) {
@@ -18220,27 +17509,29 @@ Py_LOCAL_INLINE(int) do_best_fuzzy_match(RE_State* state, BOOL search) {
state->text_pos = entry->match_pos;
init_match(state);
status = basic_match(state, search);
+
+ list = &best_changes_list.lists[0];
+ state->fuzzy_changes.count = list->count;
+ Py_MEMCPY(state->fuzzy_changes.items, list->items,
+ (size_t)list->count * sizeof(RE_FuzzyChange));
}
+ fini_fuzzy_changes_list(state, &best_fuzzy_changes);
+
state->slice_start = slice_start;
state->slice_end = slice_end;
-
- list = &best_changes_list.lists[0];
- state->fuzzy_changes.count = list->count;
- Py_MEMCPY(state->fuzzy_changes.items, list->items,
- (size_t)list->count * sizeof(RE_FuzzyChange));
} else
state->fuzzy_changes.count = 0;
}
- destroy_best_list(state, &best_list);
- destroy_best_changes_list(state, &best_changes_list);
+ fini_best_list(state, &best_list);
+ fini_best_changes_list(state, &best_changes_list);
return status;
error:
- destroy_best_list(state, &best_list);
- destroy_best_changes_list(state, &best_changes_list);
+ fini_best_list(state, &best_list);
+ fini_best_changes_list(state, &best_changes_list);
return RE_ERROR_MEMORY;
}
@@ -18264,7 +17555,7 @@ Py_LOCAL_INLINE(int) do_enhanced_fuzzy_match(RE_State* state, BOOL search) {
pattern = state->pattern;
- make_changes_list(state, &best_fuzzy_changes);
+ init_fuzzy_changes_list(&best_fuzzy_changes);
if (state->reverse)
available = state->text_pos - state->slice_start;
@@ -18400,12 +17691,12 @@ Py_LOCAL_INLINE(int) do_enhanced_fuzzy_match(RE_State* state, BOOL search) {
restore_fuzzy_changes(state, &best_fuzzy_changes);
}
- destroy_changes_list(state, &best_fuzzy_changes);
+ fini_fuzzy_changes_list(state, &best_fuzzy_changes);
return status;
error:
- destroy_changes_list(state, &best_fuzzy_changes);
+ fini_fuzzy_changes_list(state, &best_fuzzy_changes);
return status;
}
@@ -18967,7 +18258,6 @@ Py_LOCAL_INLINE(BOOL) state_init_2(RE_State* state, PatternObject* pattern,
break;
}
-
/* A state struct can sometimes be shared across threads. In such
* instances, if multithreading is enabled we need to protect the state
* with a lock (mutex) during matching.
@@ -19144,7 +18434,7 @@ Py_LOCAL_INLINE(Py_ssize_t) as_string_index(PyObject* obj, Py_ssize_t def) {
return value;
set_error(RE_ERROR_INDEX, NULL);
- return 0;
+ return -1;
}
/* Deallocates a MatchObject. */
@@ -20661,6 +19951,8 @@ static PyObject* match_lastgroup(PyObject* self_) {
PyObject* result;
index = Py_BuildValue("n", self->lastgroup);
+ if (!index)
+ return NULL;
/* PyDict_GetItem returns borrows a reference. */
result = PyDict_GetItem(self->pattern->indexgroup, index);
@@ -25291,12 +24583,6 @@ Py_LOCAL_INLINE(BOOL) section_contains_repeat(RE_CODE** code, RE_CODE*
case RE_OP_RANGE_IGN:
case RE_OP_RANGE_IGN_REV:
case RE_OP_RANGE_REV:
- case RE_OP_STRING_SET:
- case RE_OP_STRING_SET_FLD:
- case RE_OP_STRING_SET_FLD_REV:
- case RE_OP_STRING_SET_IGN:
- case RE_OP_STRING_SET_IGN_REV:
- case RE_OP_STRING_SET_REV:
/* codes: opcode, value, value, value. */
*code += 4;
break;
@@ -25671,37 +24957,6 @@ Py_LOCAL_INLINE(int) build_SET(RE_CompileArgs* args) {
return RE_ERROR_SUCCESS;
}
-/* Builds a STRING_SET node. */
-Py_LOCAL_INLINE(int) build_STRING_SET(RE_CompileArgs* args) {
- RE_CODE index;
- RE_CODE min_len;
- RE_CODE max_len;
- RE_Node* node;
-
- /* codes: opcode, index, min_len, max_len. */
- if (args->code + 3 > args->end_code)
- return RE_ERROR_ILLEGAL;
-
- index = args->code[1];
- min_len = args->code[2];
- max_len = args->code[3];
- node = create_node(args->pattern, (RE_UINT8)args->code[0], 0, 0, 3);
- if (!node)
- return RE_ERROR_MEMORY;
-
- node->values[0] = index;
- node->values[1] = min_len;
- node->values[2] = max_len;
-
- args->code += 4;
-
- /* Append the reference. */
- add_node(args->end, node);
- args->end = node;
-
- return RE_ERROR_SUCCESS;
-}
-
/* Builds a SUCCESS node . */
Py_LOCAL_INLINE(int) build_SUCCESS(RE_CompileArgs* args) {
RE_Node* node;
@@ -26011,17 +25266,6 @@ Py_LOCAL_INLINE(int) build_sequence(RE_CompileArgs* args) {
if (!build_STRING(args, FALSE))
return FALSE;
break;
- case RE_OP_STRING_SET:
- case RE_OP_STRING_SET_FLD:
- case RE_OP_STRING_SET_FLD_REV:
- case RE_OP_STRING_SET_IGN:
- case RE_OP_STRING_SET_IGN_REV:
- case RE_OP_STRING_SET_REV:
- /* A reference to a list. */
- status = build_STRING_SET(args);
- if (status != RE_ERROR_SUCCESS)
- return status;
- break;
default:
/* We've found an opcode which we don't recognise. We'll leave it
* for the caller.
@@ -26935,5 +26179,3 @@ PyMODINIT_FUNC init_regex(void) {
return;
}
}
-
-/* vim:ts=4:sw=4:et */
diff --git a/regex_2/_regex.h b/regex_2/_regex.h
index f2b7d67ebb610d6ceebd69b687ef629e39b29a6d..4c7f5fbdaae9fd02c21150591ee3ef8cf84d7e1f 100644
--- a/regex_2/_regex.h
+++ b/regex_2/_regex.h
@@ -98,29 +98,23 @@
#define RE_OP_STRING_IGN 77
#define RE_OP_STRING_IGN_REV 78
#define RE_OP_STRING_REV 79
-#define RE_OP_STRING_SET 80
-#define RE_OP_STRING_SET_FLD 81
-#define RE_OP_STRING_SET_FLD_REV 82
-#define RE_OP_STRING_SET_IGN 83
-#define RE_OP_STRING_SET_IGN_REV 84
-#define RE_OP_STRING_SET_REV 85
-#define RE_OP_FUZZY_EXT 86
-#define RE_OP_BODY_END 87
-#define RE_OP_BODY_START 88
-#define RE_OP_END_ATOMIC 89
-#define RE_OP_END_CONDITIONAL 90
-#define RE_OP_END_FUZZY 91
-#define RE_OP_END_GREEDY_REPEAT 92
-#define RE_OP_END_GROUP 93
-#define RE_OP_END_LAZY_REPEAT 94
-#define RE_OP_END_LOOKAROUND 95
-#define RE_OP_FUZZY_INSERT 96
-#define RE_OP_GREEDY_REPEAT_ONE 97
-#define RE_OP_GROUP_RETURN 98
-#define RE_OP_LAZY_REPEAT_ONE 99
-#define RE_OP_MATCH_BODY 100
-#define RE_OP_MATCH_TAIL 101
-#define RE_OP_START_GROUP 102
+#define RE_OP_FUZZY_EXT 80
+#define RE_OP_BODY_END 81
+#define RE_OP_BODY_START 82
+#define RE_OP_END_ATOMIC 83
+#define RE_OP_END_CONDITIONAL 84
+#define RE_OP_END_FUZZY 85
+#define RE_OP_END_GREEDY_REPEAT 86
+#define RE_OP_END_GROUP 87
+#define RE_OP_END_LAZY_REPEAT 88
+#define RE_OP_END_LOOKAROUND 89
+#define RE_OP_FUZZY_INSERT 90
+#define RE_OP_GREEDY_REPEAT_ONE 91
+#define RE_OP_GROUP_RETURN 92
+#define RE_OP_LAZY_REPEAT_ONE 93
+#define RE_OP_MATCH_BODY 94
+#define RE_OP_MATCH_TAIL 95
+#define RE_OP_START_GROUP 96
char* re_op_text[] = {
"RE_OP_FAILURE",
@@ -203,12 +197,6 @@ char* re_op_text[] = {
"RE_OP_STRING_IGN",
"RE_OP_STRING_IGN_REV",
"RE_OP_STRING_REV",
- "RE_OP_STRING_SET",
- "RE_OP_STRING_SET_FLD",
- "RE_OP_STRING_SET_FLD_REV",
- "RE_OP_STRING_SET_IGN",
- "RE_OP_STRING_SET_IGN_REV",
- "RE_OP_STRING_SET_REV",
"RE_OP_FUZZY_EXT",
"RE_OP_BODY_END",
"RE_OP_BODY_START",
diff --git a/regex_2/regex/_regex_core.py b/regex_2/_regex_core.py
similarity index 98%
rename from regex_2/regex/_regex_core.py
rename to regex_2/_regex_core.py
index 93b6e158be6cd11d0f5875919639df99cb3e6898..9a77fe0929150acca2582237c257d68cb40bc82e 100644
--- a/regex_2/regex/_regex_core.py
+++ b/regex_2/_regex_core.py
@@ -219,12 +219,6 @@ STRING_FLD_REV
STRING_IGN
STRING_IGN_REV
STRING_REV
-STRING_SET
-STRING_SET_FLD
-STRING_SET_FLD_REV
-STRING_SET_IGN
-STRING_SET_IGN_REV
-STRING_SET_REV
FUZZY_EXT
"""
@@ -2033,6 +2027,9 @@ class Branch(RegexBase):
b.fix_groups(pattern, reverse, fuzzy)
def optimise(self, info, reverse):
+ if not self.branches:
+ return Sequence([])
+
# Flatten branches within branches.
branches = Branch._flatten_branches(info, reverse, self.branches)
@@ -2452,6 +2449,9 @@ class CallGroup(RegexBase):
def max_width(self):
return UNLIMITED
+ def __del__(self):
+ self.info = None
+
class CallRef(RegexBase):
def __init__(self, ref, parsed):
self.ref = ref
@@ -2621,6 +2621,9 @@ class Conditional(RegexBase):
def max_width(self):
return max(self.yes_item.max_width(), self.no_item.max_width())
+ def __del__(self):
+ self.info = None
+
class DefaultBoundary(ZeroWidthBase):
_opcode = OP.DEFAULT_BOUNDARY
_op_name = "DEFAULT_BOUNDARY"
@@ -3015,6 +3018,9 @@ class Group(RegexBase):
def get_required_string(self, reverse):
return self.subpattern.get_required_string(reverse)
+ def __del__(self):
+ self.info = None
+
class Keep(ZeroWidthBase):
_opcode = OP.KEEP
_op_name = "KEEP"
@@ -3363,6 +3369,9 @@ class RefGroup(RegexBase):
def max_width(self):
return UNLIMITED
+ def __del__(self):
+ self.info = None
+
class SearchAnchor(ZeroWidthBase):
_opcode = OP.SEARCH_ANCHOR
_op_name = "SEARCH_ANCHOR"
@@ -3682,6 +3691,9 @@ class SetBase(RegexBase):
return max(len(folded) for folded in seen)
+ def __del__(self):
+ self.info = None
+
class SetDiff(SetBase):
_opcode = {(NOCASE, False): OP.SET_DIFF, (IGNORECASE, False):
OP.SET_DIFF_IGN, (FULLCASE, False): OP.SET_DIFF, (FULLIGNORECASE, False):
@@ -3919,13 +3931,7 @@ class Literal(String):
print "%sLITERAL MATCH %s%s" % (INDENT * indent, display,
CASE_TEXT[self.case_flags])
-class StringSet(RegexBase):
- _opcode = {(NOCASE, False): OP.STRING_SET, (IGNORECASE, False):
- OP.STRING_SET_IGN, (FULLCASE, False): OP.STRING_SET, (FULLIGNORECASE,
- False): OP.STRING_SET_FLD, (NOCASE, True): OP.STRING_SET_REV,
- (IGNORECASE, True): OP.STRING_SET_IGN_REV, (FULLCASE, True):
- OP.STRING_SET_REV, (FULLIGNORECASE, True): OP.STRING_SET_FLD_REV}
-
+class StringSet(Branch):
def __init__(self, info, name, case_flags=NOCASE):
self.info = info
self.name = name
@@ -3937,84 +3943,30 @@ class StringSet(RegexBase):
if self.set_key not in info.named_lists_used:
info.named_lists_used[self.set_key] = len(info.named_lists_used)
- def _compile(self, reverse, fuzzy):
index = self.info.named_lists_used[self.set_key]
items = self.info.kwargs[self.name]
case_flags = self.case_flags
- if not items:
- return []
-
encoding = self.info.flags & _ALL_ENCODINGS
fold_flags = encoding | case_flags
- if fuzzy:
- choices = [self._folded(fold_flags, i) for i in items]
-
- # Sort from longest to shortest.
- choices.sort(key=lambda s: (-len(s), s))
+ choices = []
+ for string in items:
+ choices.append([Character(ord(c), case_flags=case_flags) for c in
+ string])
- branches = []
- for string in choices:
- branches.append(Sequence([Character(c, case_flags=case_flags)
- for c in string]))
+ # Sort from longest to shortest.
+ choices.sort(key=len, reverse=True)
- if len(branches) > 1:
- branch = Branch(branches)
- else:
- branch = branches[0]
- branch = branch.optimise(self.info,
- reverse).pack_characters(self.info)
-
- return branch.compile(reverse, fuzzy)
- else:
- min_len = min(len(i) for i in items)
- max_len = max(len(self._folded(fold_flags, i)) for i in items)
- return [(self._opcode[case_flags, reverse], index, min_len,
- max_len)]
+ self.branches = [Sequence(choice) for choice in choices]
def dump(self, indent, reverse):
print "%sSTRING_SET %s%s" % (INDENT * indent, self.name,
CASE_TEXT[self.case_flags])
- def _folded(self, fold_flags, item):
- if isinstance(item, unicode):
- return [ord(c) for c in _regex.fold_case(fold_flags, item)]
- else:
- return [ord(c) for c in item]
-
- def _flatten(self, s):
- # Flattens the branches.
- if isinstance(s, Branch):
- for b in s.branches:
- self._flatten(b)
- elif isinstance(s, Sequence) and s.items:
- seq = s.items
-
- while isinstance(seq[-1], Sequence):
- seq[-1 : ] = seq[-1].items
-
- n = 0
- while n < len(seq) and isinstance(seq[n], Character):
- n += 1
-
- if n > 1:
- seq[ : n] = [String([c.value for c in seq[ : n]],
- case_flags=self.case_flags)]
-
- self._flatten(seq[-1])
-
- def max_width(self):
- if not self.info.kwargs[self.name]:
- return 0
-
- if self.case_flags & IGNORECASE:
- fold_flags = (self.info.flags & _ALL_ENCODINGS) | self.case_flags
- return max(len(_regex.fold_case(fold_flags, i)) for i in
- self.info.kwargs[self.name])
- else:
- return max(len(i) for i in self.info.kwargs[self.name])
+ def __del__(self):
+ self.info = None
class Source(object):
"Scanner for the regular expression source string."
@@ -4488,6 +4440,7 @@ CHARACTER_ESCAPES = {
CHARSET_ESCAPES = {
"d": lookup_property(None, "Digit", True),
"D": lookup_property(None, "Digit", False),
+ "h": lookup_property(None, "Blank", True),
"s": lookup_property(None, "Space", True),
"S": lookup_property(None, "Space", False),
"w": lookup_property(None, "Word", True),
diff --git a/regex_2/_regex_unicode.c b/regex_2/_regex_unicode.c
index eff2643f902cfa0e3188055c851748e9cd94a008..aec7fe7ad661b8843753d6bd9e7d6b2242c319f7 100644
--- a/regex_2/_regex_unicode.c
+++ b/regex_2/_regex_unicode.c
@@ -1,4 +1,4 @@
-/* For Unicode version 12.1.0 */
+/* For Unicode version 13.0.0 */
#include "_regex_unicode.h"
@@ -6,21 +6,20 @@
#define RE_GRAPH_MASK ((1 << RE_PROP_CC) | (1 << RE_PROP_CS) | (1 << RE_PROP_CN))
#define RE_WORD_MASK (RE_PROP_M_MASK | (1 << RE_PROP_ND) | (1 << RE_PROP_PC))
-typedef struct RE_ScriptExt {
+typedef struct {
RE_UINT8 scripts[RE_MAX_SCX];
} RE_ScriptExt;
-typedef struct RE_AllCases {
- RE_INT32 diffs[RE_MAX_CASES - 1];
+typedef struct {
+ RE_UINT32 delta;
+ RE_UINT16 others[RE_MAX_CASES - 1];
} RE_AllCases;
-typedef struct RE_FullCaseFolding {
- RE_INT32 diff;
- RE_UINT16 codepoints[RE_MAX_FOLDED - 1];
+typedef struct {
+ RE_UINT16 data[RE_MAX_FOLDED];
} RE_FullCaseFolding;
-/* strings. */
-
+/* Strings. */
char* re_strings[] = {
"-1/2",
"0",
@@ -393,6 +392,8 @@ char* re_strings[] = {
"CHEROKEESUP",
"CHEROKEESUPPLEMENT",
"CHESSSYMBOLS",
+ "CHORASMIAN",
+ "CHRS",
"CI",
"CIRCLE",
"CJ",
@@ -411,6 +412,7 @@ char* re_strings[] = {
"CJKEXTD",
"CJKEXTE",
"CJKEXTF",
+ "CJKEXTG",
"CJKRADICALSSUP",
"CJKRADICALSSUPPLEMENT",
"CJKSTROKES",
@@ -423,6 +425,7 @@ char* re_strings[] = {
"CJKUNIFIEDIDEOGRAPHSEXTENSIOND",
"CJKUNIFIEDIDEOGRAPHSEXTENSIONE",
"CJKUNIFIEDIDEOGRAPHSEXTENSIONF",
+ "CJKUNIFIEDIDEOGRAPHSEXTENSIONG",
"CL",
"CLOSE",
"CLOSEPARENTHESIS",
@@ -521,8 +524,10 @@ char* re_strings[] = {
"DIACRITICALSEXT",
"DIACRITICALSFORSYMBOLS",
"DIACRITICALSSUP",
+ "DIAK",
"DIGIT",
"DINGBATS",
+ "DIVESAKURU",
"DOGR",
"DOGRA",
"DOMINO",
@@ -544,6 +549,7 @@ char* re_strings[] = {
"EBASE",
"EBASEGAZ",
"EBG",
+ "ECOMP",
"EGYP",
"EGYPTIANHIEROGLYPHFORMATCONTROLS",
"EGYPTIANHIEROGLYPHS",
@@ -552,6 +558,7 @@ char* re_strings[] = {
"ELYM",
"ELYMAIC",
"EM",
+ "EMOD",
"EMODIFIER",
"EMOJI",
"EMOJICOMPONENT",
@@ -570,6 +577,7 @@ char* re_strings[] = {
"ENCLOSEDIDEOGRAPHICSUP",
"ENCLOSEDIDEOGRAPHICSUPPLEMENT",
"ENCLOSINGMARK",
+ "EPRES",
"ES",
"ET",
"ETHI",
@@ -590,6 +598,7 @@ char* re_strings[] = {
"EXTENDEDPICTOGRAPHIC",
"EXTENDER",
"EXTENDNUMLET",
+ "EXTPICT",
"F",
"FALSE",
"FARSIYEH",
@@ -678,6 +687,8 @@ char* re_strings[] = {
"HANIFIROHINGYAKINNAYA",
"HANIFIROHINGYAPA",
"HANO",
+ "HANR",
+ "HANREADING",
"HANUNOO",
"HATR",
"HATRAN",
@@ -781,12 +792,14 @@ char* re_strings[] = {
"KHAPH",
"KHAR",
"KHAROSHTHI",
+ "KHITANSMALLSCRIPT",
"KHMER",
"KHMERSYMBOLS",
"KHMR",
"KHOJ",
"KHOJKI",
"KHUDAWADI",
+ "KITS",
"KNDA",
"KNOTTEDHEH",
"KTHI",
@@ -844,6 +857,8 @@ char* re_strings[] = {
"LINEFEED",
"LINESEPARATOR",
"LISU",
+ "LISUSUP",
+ "LISUSUPPLEMENT",
"LL",
"LM",
"LO",
@@ -1299,6 +1314,7 @@ char* re_strings[] = {
"SYMBOL",
"SYMBOLSANDPICTOGRAPHSEXTA",
"SYMBOLSANDPICTOGRAPHSEXTENDEDA",
+ "SYMBOLSFORLEGACYCOMPUTING",
"SYRC",
"SYRIAC",
"SYRIACSUP",
@@ -1326,6 +1342,8 @@ char* re_strings[] = {
"TANG",
"TANGUT",
"TANGUTCOMPONENTS",
+ "TANGUTSUP",
+ "TANGUTSUPPLEMENT",
"TAVT",
"TAW",
"TEHMARBUTA",
@@ -1350,6 +1368,7 @@ char* re_strings[] = {
"TONEMARK",
"TOP",
"TOPANDBOTTOM",
+ "TOPANDBOTTOMANDLEFT",
"TOPANDBOTTOMANDRIGHT",
"TOPANDLEFT",
"TOPANDLEFTANDRIGHT",
@@ -1424,6 +1443,8 @@ char* re_strings[] = {
"YEHBARREE",
"YEHWITHTAIL",
"YES",
+ "YEZI",
+ "YEZIDI",
"YI",
"YIII",
"YIJING",
@@ -1449,1760 +1470,1777 @@ char* re_strings[] = {
"ZZZZ",
};
-/* strings: 13687 bytes. */
-
-/* properties. */
-
+/* Properties. */
RE_Property re_properties[] = {
- { 591, 0, 0},
- { 588, 0, 0},
- { 271, 1, 1},
- { 270, 1, 1},
- {1185, 2, 2},
- {1183, 2, 2},
- {1186, 3, 2},
- {1187, 3, 2},
- {1384, 4, 3},
- {1378, 4, 3},
- { 617, 5, 4},
- { 589, 5, 4},
- {1193, 6, 5},
- {1182, 6, 5},
- { 900, 7, 6},
- { 189, 8, 6},
- { 188, 8, 6},
- { 828, 9, 6},
- { 827, 9, 6},
- {1350, 10, 6},
- {1349, 10, 6},
- { 314, 11, 6},
- { 316, 12, 6},
- { 371, 12, 6},
- { 363, 13, 6},
- { 457, 13, 6},
- { 365, 14, 6},
- { 459, 14, 6},
- { 364, 15, 6},
- { 458, 15, 6},
- { 361, 16, 6},
- { 455, 16, 6},
- { 362, 17, 6},
- { 456, 17, 6},
- { 694, 18, 6},
- { 690, 18, 6},
- { 684, 19, 6},
- { 683, 19, 6},
- {1393, 20, 6},
- {1392, 20, 6},
- {1391, 21, 6},
- {1390, 21, 6},
- { 484, 22, 6},
- { 492, 22, 6},
- { 618, 23, 6},
- { 626, 23, 6},
- { 616, 24, 6},
- { 620, 24, 6},
- { 619, 25, 6},
- { 627, 25, 6},
- {1380, 26, 6},
- {1388, 26, 6},
- {1231, 26, 6},
- { 263, 27, 6},
- { 261, 27, 6},
- { 730, 28, 6},
- { 728, 28, 6},
- { 477, 29, 6},
- { 681, 30, 6},
- {1147, 31, 6},
- {1144, 31, 6},
- {1311, 32, 6},
- {1310, 32, 6},
- {1071, 33, 6},
- {1050, 33, 6},
- { 667, 34, 6},
- { 666, 34, 6},
- { 221, 35, 6},
- { 177, 35, 6},
- {1064, 36, 6},
- {1030, 36, 6},
- { 686, 37, 6},
- { 685, 37, 6},
- { 494, 38, 6},
- { 493, 38, 6},
- { 566, 39, 6},
- { 563, 39, 6},
- {1070, 40, 6},
- {1049, 40, 6},
- {1076, 41, 6},
- {1078, 41, 6},
- {1003, 42, 6},
- { 980, 42, 6},
- {1066, 43, 6},
- {1035, 43, 6},
- { 692, 44, 6},
- { 691, 44, 6},
- { 695, 45, 6},
- { 693, 45, 6},
- {1149, 46, 6},
- {1346, 47, 6},
- {1342, 47, 6},
- {1065, 48, 6},
- {1032, 48, 6},
- { 486, 49, 6},
- { 485, 49, 6},
- {1222, 50, 6},
- {1188, 50, 6},
- { 826, 51, 6},
- { 825, 51, 6},
- {1068, 52, 6},
- {1037, 52, 6},
- {1067, 53, 6},
- {1036, 53, 6},
- {1194, 54, 6},
- {1240, 54, 6},
- {1355, 55, 6},
- {1371, 55, 6},
- {1090, 56, 6},
- {1091, 56, 6},
- {1089, 57, 6},
- {1088, 57, 6},
- {1129, 58, 6},
- {1095, 58, 6},
- {1150, 59, 6},
- {1155, 59, 6},
- { 650, 60, 7},
- { 678, 60, 7},
- { 262, 61, 8},
- { 251, 61, 8},
- { 308, 62, 9},
- { 320, 62, 9},
- { 483, 63, 10},
- { 510, 63, 10},
- { 517, 64, 11},
- { 515, 64, 11},
- { 732, 65, 12},
- { 726, 65, 12},
- { 733, 66, 13},
- { 734, 66, 13},
- { 818, 67, 14},
- { 793, 67, 14},
- {1023, 68, 15},
- {1016, 68, 15},
- {1024, 69, 16},
- {1027, 69, 16},
- { 265, 70, 6},
- { 264, 70, 6},
- { 699, 71, 17},
- { 707, 71, 17},
- { 701, 72, 18},
- { 708, 72, 18},
- { 531, 73, 19},
- { 535, 74, 19},
- { 533, 75, 19},
- { 534, 76, 19},
- { 532, 77, 19},
- { 565, 78, 19},
- { 990, 79, 20},
- { 989, 79, 20},
- { 988, 80, 21},
- { 987, 80, 21},
- { 994, 81, 20},
- { 993, 81, 20},
- { 992, 82, 21},
- { 991, 82, 21},
- { 192, 83, 6},
- { 187, 83, 6},
- { 200, 84, 6},
- { 269, 85, 6},
- { 615, 86, 6},
- {1130, 87, 6},
- {1383, 88, 6},
- {1389, 89, 6},
- {1121, 90, 6},
- {1120, 91, 6},
- {1122, 92, 6},
- {1123, 93, 6},
-};
-
-/* properties: 672 bytes. */
-
-/* property values. */
-
+ { 189, 0, 0}, /* ALPHABETIC */
+ { 188, 0, 0}, /* ALPHA */
+ { 192, 1, 0}, /* ALPHANUMERIC */
+ { 187, 1, 0}, /* ALNUM */
+ { 200, 2, 0}, /* ANY */
+ { 221, 3, 0}, /* ASCIIHEXDIGIT */
+ { 177, 3, 0}, /* AHEX */
+ { 262, 4, 1}, /* BIDICLASS */
+ { 251, 4, 1}, /* BC */
+ { 263, 5, 0}, /* BIDICONTROL */
+ { 261, 5, 0}, /* BIDIC */
+ { 265, 6, 0}, /* BIDIMIRRORED */
+ { 264, 6, 0}, /* BIDIM */
+ { 269, 7, 0}, /* BLANK */
+ { 271, 8, 2}, /* BLOCK */
+ { 270, 8, 2}, /* BLK */
+ { 308, 9, 3}, /* CANONICALCOMBININGCLASS */
+ { 320, 9, 3}, /* CCC */
+ { 314, 10, 0}, /* CASED */
+ { 316, 11, 0}, /* CASEIGNORABLE */
+ { 373, 11, 0}, /* CI */
+ { 361, 12, 0}, /* CHANGESWHENCASEFOLDED */
+ { 459, 12, 0}, /* CWCF */
+ { 362, 13, 0}, /* CHANGESWHENCASEMAPPED */
+ { 460, 13, 0}, /* CWCM */
+ { 363, 14, 0}, /* CHANGESWHENLOWERCASED */
+ { 461, 14, 0}, /* CWL */
+ { 364, 15, 0}, /* CHANGESWHENTITLECASED */
+ { 462, 15, 0}, /* CWT */
+ { 365, 16, 0}, /* CHANGESWHENUPPERCASED */
+ { 463, 16, 0}, /* CWU */
+ { 481, 17, 0}, /* DASH */
+ { 487, 18, 4}, /* DECOMPOSITIONTYPE */
+ { 516, 18, 4}, /* DT */
+ { 488, 19, 0}, /* DEFAULTIGNORABLECODEPOINT */
+ { 496, 19, 0}, /* DI */
+ { 490, 20, 0}, /* DEPRECATED */
+ { 489, 20, 0}, /* DEP */
+ { 498, 21, 0}, /* DIACRITIC */
+ { 497, 21, 0}, /* DIA */
+ { 523, 22, 5}, /* EASTASIANWIDTH */
+ { 521, 22, 5}, /* EA */
+ { 539, 23, 0}, /* EMOJI */
+ { 540, 24, 0}, /* EMOJICOMPONENT */
+ { 528, 24, 0}, /* ECOMP */
+ { 541, 25, 0}, /* EMOJIMODIFIER */
+ { 537, 25, 0}, /* EMOD */
+ { 542, 26, 0}, /* EMOJIMODIFIERBASE */
+ { 525, 26, 0}, /* EBASE */
+ { 543, 27, 0}, /* EMOJIPRESENTATION */
+ { 556, 27, 0}, /* EPRES */
+ { 574, 28, 0}, /* EXTENDEDPICTOGRAPHIC */
+ { 577, 28, 0}, /* EXTPICT */
+ { 575, 29, 0}, /* EXTENDER */
+ { 572, 29, 0}, /* EXT */
+ { 601, 30, 6}, /* GENERALCATEGORY */
+ { 598, 30, 6}, /* GC */
+ { 625, 31, 0}, /* GRAPH */
+ { 626, 32, 0}, /* GRAPHEMEBASE */
+ { 630, 32, 0}, /* GRBASE */
+ { 627, 33, 7}, /* GRAPHEMECLUSTERBREAK */
+ { 599, 33, 7}, /* GCB */
+ { 628, 34, 0}, /* GRAPHEMEEXTEND */
+ { 636, 34, 0}, /* GREXT */
+ { 629, 35, 0}, /* GRAPHEMELINK */
+ { 637, 35, 0}, /* GRLINK */
+ { 660, 36, 8}, /* HANGULSYLLABLETYPE */
+ { 690, 36, 8}, /* HST */
+ { 679, 37, 0}, /* HEXDIGIT */
+ { 678, 37, 0}, /* HEX */
+ { 693, 38, 0}, /* HYPHEN */
+ { 696, 39, 0}, /* IDCONTINUE */
+ { 695, 39, 0}, /* IDC */
+ { 698, 40, 0}, /* IDEOGRAPHIC */
+ { 697, 40, 0}, /* IDEO */
+ { 704, 41, 0}, /* IDSBINARYOPERATOR */
+ { 703, 41, 0}, /* IDSB */
+ { 706, 42, 0}, /* IDSTART */
+ { 702, 42, 0}, /* IDS */
+ { 707, 43, 0}, /* IDSTRINARYOPERATOR */
+ { 705, 43, 0}, /* IDST */
+ { 711, 44, 9}, /* INDICPOSITIONALCATEGORY */
+ { 719, 44, 9}, /* INPC */
+ { 713, 45, 10}, /* INDICSYLLABICCATEGORY */
+ { 720, 45, 10}, /* INSC */
+ { 742, 46, 0}, /* JOINCONTROL */
+ { 740, 46, 0}, /* JOINC */
+ { 744, 47, 11}, /* JOININGGROUP */
+ { 738, 47, 11}, /* JG */
+ { 745, 48, 12}, /* JOININGTYPE */
+ { 746, 48, 12}, /* JT */
+ { 832, 49, 13}, /* LINEBREAK */
+ { 807, 49, 13}, /* LB */
+ { 842, 50, 0}, /* LOGICALORDEREXCEPTION */
+ { 841, 50, 0}, /* LOE */
+ { 844, 51, 0}, /* LOWERCASE */
+ { 843, 51, 0}, /* LOWER */
+ { 916, 52, 0}, /* MATH */
+ {1004, 53, 14}, /* NFCQUICKCHECK */
+ {1003, 53, 14}, /* NFCQC */
+ {1006, 54, 15}, /* NFDQUICKCHECK */
+ {1005, 54, 15}, /* NFDQC */
+ {1008, 55, 14}, /* NFKCQUICKCHECK */
+ {1007, 55, 14}, /* NFKCQC */
+ {1010, 56, 15}, /* NFKDQUICKCHECK */
+ {1009, 56, 15}, /* NFKDQC */
+ {1019, 57, 0}, /* NONCHARACTERCODEPOINT */
+ { 996, 57, 0}, /* NCHAR */
+ {1039, 58, 16}, /* NUMERICTYPE */
+ {1032, 58, 16}, /* NT */
+ {1040, 59, 17}, /* NUMERICVALUE */
+ {1043, 59, 17}, /* NV */
+ {1080, 60, 0}, /* OTHERALPHABETIC */
+ {1046, 60, 0}, /* OALPHA */
+ {1081, 61, 0}, /* OTHERDEFAULTIGNORABLECODEPOINT */
+ {1048, 61, 0}, /* ODI */
+ {1082, 62, 0}, /* OTHERGRAPHEMEEXTEND */
+ {1051, 62, 0}, /* OGREXT */
+ {1083, 63, 0}, /* OTHERIDCONTINUE */
+ {1052, 63, 0}, /* OIDC */
+ {1084, 64, 0}, /* OTHERIDSTART */
+ {1053, 64, 0}, /* OIDS */
+ {1086, 65, 0}, /* OTHERLOWERCASE */
+ {1065, 65, 0}, /* OLOWER */
+ {1087, 66, 0}, /* OTHERMATH */
+ {1066, 66, 0}, /* OMATH */
+ {1092, 67, 0}, /* OTHERUPPERCASE */
+ {1094, 67, 0}, /* OUPPER */
+ {1105, 68, 0}, /* PATTERNSYNTAX */
+ {1104, 68, 0}, /* PATSYN */
+ {1106, 69, 0}, /* PATTERNWHITESPACE */
+ {1107, 69, 0}, /* PATWS */
+ {1136, 70, 0}, /* POSIXALNUM */
+ {1137, 71, 0}, /* POSIXDIGIT */
+ {1138, 72, 0}, /* POSIXPUNCT */
+ {1139, 73, 0}, /* POSIXXDIGIT */
+ {1145, 74, 0}, /* PREPENDEDCONCATENATIONMARK */
+ {1111, 74, 0}, /* PCM */
+ {1146, 75, 0}, /* PRINT */
+ {1163, 76, 0}, /* QUOTATIONMARK */
+ {1160, 76, 0}, /* QMARK */
+ {1165, 77, 0}, /* RADICAL */
+ {1166, 78, 0}, /* REGIONALINDICATOR */
+ {1171, 78, 0}, /* RI */
+ {1201, 79, 18}, /* SCRIPT */
+ {1199, 79, 18}, /* SC */
+ {1202, 80, 18}, /* SCRIPTEXTENSIONS */
+ {1203, 80, 18}, /* SCX */
+ {1209, 81, 19}, /* SENTENCEBREAK */
+ {1198, 81, 19}, /* SB */
+ {1210, 82, 0}, /* SENTENCETERMINAL */
+ {1256, 82, 0}, /* STERM */
+ {1238, 83, 0}, /* SOFTDOTTED */
+ {1204, 83, 0}, /* SD */
+ {1330, 84, 0}, /* TERMINALPUNCTUATION */
+ {1329, 84, 0}, /* TERM */
+ {1366, 85, 0}, /* UNIFIEDIDEOGRAPH */
+ {1362, 85, 0}, /* UIDEO */
+ {1370, 86, 0}, /* UPPERCASE */
+ {1369, 86, 0}, /* UPPER */
+ {1375, 87, 0}, /* VARIATIONSELECTOR */
+ {1391, 87, 0}, /* VS */
+ {1400, 88, 0}, /* WHITESPACE */
+ {1408, 88, 0}, /* WSPACE */
+ {1247, 88, 0}, /* SPACE */
+ {1403, 89, 0}, /* WORD */
+ {1404, 90, 20}, /* WORDBREAK */
+ {1398, 90, 20}, /* WB */
+ {1409, 91, 0}, /* XDIGIT */
+ {1411, 92, 0}, /* XIDCONTINUE */
+ {1410, 92, 0}, /* XIDC */
+ {1413, 93, 0}, /* XIDSTART */
+ {1412, 93, 0}, /* XIDS */
+};
+
+/* Property values. */
RE_PropertyValue re_property_values[] = {
- {1343, 0, 0},
- { 406, 0, 0},
- {1351, 0, 1},
- { 835, 0, 1},
- { 829, 0, 2},
- { 822, 0, 2},
- {1323, 0, 3},
- { 834, 0, 3},
- { 946, 0, 4},
- { 823, 0, 4},
- {1069, 0, 5},
- { 824, 0, 5},
- {1007, 0, 6},
- { 944, 0, 6},
- { 547, 0, 7},
- { 910, 0, 7},
- {1233, 0, 8},
- { 909, 0, 8},
- { 482, 0, 9},
- { 981, 0, 9},
- { 499, 0, 9},
- { 808, 0, 10},
- { 998, 0, 10},
- {1073, 0, 11},
- { 999, 0, 11},
- {1232, 0, 12},
- {1419, 0, 12},
- { 820, 0, 13},
- {1417, 0, 13},
- {1087, 0, 14},
- {1418, 0, 14},
- { 439, 0, 15},
- { 319, 0, 15},
- { 407, 0, 15},
- { 580, 0, 16},
- { 358, 0, 16},
- {1131, 0, 17},
- { 408, 0, 17},
- {1267, 0, 18},
- { 449, 0, 18},
- { 478, 0, 19},
- {1096, 0, 19},
- {1053, 0, 20},
- {1134, 0, 20},
- { 404, 0, 21},
- {1099, 0, 21},
- { 424, 0, 22},
- {1094, 0, 22},
- {1074, 0, 23},
- {1117, 0, 23},
- { 905, 0, 24},
- {1214, 0, 24},
- { 453, 0, 25},
- {1183, 0, 25},
- { 948, 0, 26},
- {1213, 0, 26},
- {1075, 0, 27},
- {1221, 0, 27},
- { 706, 0, 28},
- {1114, 0, 28},
- { 575, 0, 29},
- {1101, 0, 29},
- {1063, 0, 30},
- { 301, 0, 30},
- { 302, 0, 30},
- { 806, 0, 31},
- { 769, 0, 31},
- { 770, 0, 31},
- { 898, 0, 32},
- { 844, 0, 32},
- { 415, 0, 32},
- { 845, 0, 32},
- {1019, 0, 33},
- { 968, 0, 33},
- { 969, 0, 33},
- {1138, 0, 34},
- {1082, 0, 34},
- {1137, 0, 34},
- {1083, 0, 34},
- {1274, 0, 35},
- {1172, 0, 35},
- {1173, 0, 35},
- {1196, 0, 36},
- {1410, 0, 36},
- {1411, 0, 36},
- { 315, 0, 37},
- { 794, 0, 37},
- { 222, 0, 38},
- {1000, 1, 0},
- { 978, 1, 0},
- { 245, 1, 1},
- { 220, 1, 1},
- { 779, 1, 2},
- { 778, 1, 2},
- { 777, 1, 2},
- { 786, 1, 3},
- { 780, 1, 3},
- { 788, 1, 4},
- { 782, 1, 4},
- { 716, 1, 5},
- { 715, 1, 5},
- {1234, 1, 6},
- { 947, 1, 6},
- { 410, 1, 7},
- { 495, 1, 7},
- { 622, 1, 8},
- { 621, 1, 8},
- { 462, 1, 9},
- { 470, 1, 10},
- { 469, 1, 10},
- { 471, 1, 10},
- { 216, 1, 11},
- { 661, 1, 12},
- { 203, 1, 13},
- {1278, 1, 14},
- { 215, 1, 15},
- { 214, 1, 15},
- {1316, 1, 16},
- { 996, 1, 17},
- {1177, 1, 18},
- { 865, 1, 19},
- {1280, 1, 20},
- {1279, 1, 20},
- { 205, 1, 21},
- { 204, 1, 21},
- { 489, 1, 22},
- { 257, 1, 23},
- { 631, 1, 24},
- { 628, 1, 25},
- {1055, 1, 26},
- {1297, 1, 27},
- {1309, 1, 28},
- { 749, 1, 29},
- { 852, 1, 30},
- {1211, 1, 31},
- {1317, 1, 32},
- { 774, 1, 33},
- {1318, 1, 34},
- { 962, 1, 35},
- { 597, 1, 36},
- { 646, 1, 37},
- { 721, 1, 37},
- { 551, 1, 38},
- { 557, 1, 39},
- { 556, 1, 39},
- { 367, 1, 40},
- {1344, 1, 41},
- {1338, 1, 41},
- { 306, 1, 41},
- {1034, 1, 42},
- {1170, 1, 43},
- {1283, 1, 44},
- { 656, 1, 45},
- { 297, 1, 46},
- {1285, 1, 47},
- { 759, 1, 48},
- { 952, 1, 49},
- {1345, 1, 50},
- {1339, 1, 50},
- { 811, 1, 51},
- {1288, 1, 52},
- { 985, 1, 53},
- { 760, 1, 54},
- { 295, 1, 55},
- {1289, 1, 56},
- { 411, 1, 57},
- { 496, 1, 57},
- { 240, 1, 58},
- {1244, 1, 59},
- { 248, 1, 60},
- { 805, 1, 61},
- {1038, 1, 62},
- { 468, 1, 63},
- { 465, 1, 63},
- { 599, 1, 64},
- { 598, 1, 64},
- {1246, 1, 65},
- {1245, 1, 65},
- {1359, 1, 66},
- {1358, 1, 66},
- {1111, 1, 67},
- {1110, 1, 67},
- {1112, 1, 68},
- {1113, 1, 68},
- { 413, 1, 69},
- { 498, 1, 69},
- { 787, 1, 70},
- { 781, 1, 70},
- { 624, 1, 71},
- { 623, 1, 71},
- { 592, 1, 72},
- {1138, 1, 72},
- {1253, 1, 73},
- {1252, 1, 73},
- { 454, 1, 74},
- { 412, 1, 75},
- { 497, 1, 75},
- { 416, 1, 75},
- { 807, 1, 76},
- {1020, 1, 77},
- { 219, 1, 78},
- { 903, 1, 79},
- { 904, 1, 79},
- { 936, 1, 80},
- { 941, 1, 80},
- { 440, 1, 81},
- {1054, 1, 82},
- {1031, 1, 82},
- { 540, 1, 83},
- { 539, 1, 83},
- { 282, 1, 84},
- { 272, 1, 85},
- { 593, 1, 86},
- { 933, 1, 87},
- { 940, 1, 87},
- { 500, 1, 88},
- { 931, 1, 89},
- { 937, 1, 89},
- {1255, 1, 90},
- {1248, 1, 90},
- { 289, 1, 91},
- { 288, 1, 91},
- {1256, 1, 92},
- {1249, 1, 92},
- { 932, 1, 93},
- { 938, 1, 93},
- {1258, 1, 94},
- {1254, 1, 94},
- { 934, 1, 95},
- { 930, 1, 95},
- { 604, 1, 96},
- { 789, 1, 97},
- { 783, 1, 97},
- { 442, 1, 98},
- { 601, 1, 99},
- { 600, 1, 99},
- {1320, 1, 100},
- { 554, 1, 101},
- { 552, 1, 101},
- { 466, 1, 102},
- { 463, 1, 102},
- {1259, 1, 103},
- {1265, 1, 103},
- { 390, 1, 104},
- { 389, 1, 104},
- { 748, 1, 105},
- { 747, 1, 105},
- { 687, 1, 106},
- { 683, 1, 106},
- { 393, 1, 107},
- { 392, 1, 107},
- { 672, 1, 108},
- { 751, 1, 109},
- { 275, 1, 110},
- { 645, 1, 111},
- { 421, 1, 111},
- { 746, 1, 112},
- { 277, 1, 113},
- { 276, 1, 113},
- { 391, 1, 114},
- { 754, 1, 115},
- { 752, 1, 115},
- { 544, 1, 116},
- { 543, 1, 116},
- { 377, 1, 117},
- { 375, 1, 117},
- { 395, 1, 118},
- { 383, 1, 118},
- {1405, 1, 119},
- {1404, 1, 119},
- { 394, 1, 120},
- { 374, 1, 120},
- {1407, 1, 121},
- {1406, 1, 122},
- { 821, 1, 123},
- {1353, 1, 124},
- { 467, 1, 125},
- { 464, 1, 125},
- { 242, 1, 126},
- { 949, 1, 127},
- { 790, 1, 128},
- { 784, 1, 128},
- {1273, 1, 129},
- { 418, 1, 130},
- { 698, 1, 130},
- {1103, 1, 131},
- {1181, 1, 132},
- { 491, 1, 133},
- { 490, 1, 133},
- { 755, 1, 134},
- {1153, 1, 135},
- { 647, 1, 136},
- { 722, 1, 136},
- { 725, 1, 137},
- { 966, 1, 138},
- { 964, 1, 138},
- { 360, 1, 139},
- { 965, 1, 140},
- { 963, 1, 140},
- {1290, 1, 141},
- { 918, 1, 142},
- { 917, 1, 142},
- { 555, 1, 143},
- { 553, 1, 143},
- { 791, 1, 144},
- { 785, 1, 144},
- { 369, 1, 145},
- { 368, 1, 145},
- { 916, 1, 146},
- { 649, 1, 147},
- { 644, 1, 147},
- { 648, 1, 148},
- { 723, 1, 148},
- { 670, 1, 149},
- { 668, 1, 150},
- { 669, 1, 150},
- { 830, 1, 151},
- {1132, 1, 152},
- {1136, 1, 152},
- {1131, 1, 152},
- { 379, 1, 153},
- { 381, 1, 153},
- { 191, 1, 154},
- { 190, 1, 154},
- { 212, 1, 155},
- { 210, 1, 155},
- {1356, 1, 156},
- {1371, 1, 156},
- {1362, 1, 157},
- { 414, 1, 158},
- { 638, 1, 158},
- { 378, 1, 159},
- { 376, 1, 159},
- {1217, 1, 160},
- {1216, 1, 160},
- { 213, 1, 161},
- { 211, 1, 161},
- { 640, 1, 162},
- { 637, 1, 162},
- {1235, 1, 163},
- { 817, 1, 164},
- { 816, 1, 165},
- { 172, 1, 166},
- { 198, 1, 167},
- { 199, 1, 168},
- {1105, 1, 169},
- {1104, 1, 169},
- { 841, 1, 170},
- { 312, 1, 171},
- { 443, 1, 172},
- {1041, 1, 173},
- { 612, 1, 174},
- {1043, 1, 175},
- {1341, 1, 176},
- {1044, 1, 177},
- { 487, 1, 178},
- {1200, 1, 179},
- {1062, 1, 180},
- {1059, 1, 181},
- { 526, 1, 182},
- { 317, 1, 183},
- { 814, 1, 184},
- { 461, 1, 185},
- { 696, 1, 186},
- {1086, 1, 187},
- { 971, 1, 188},
- { 658, 1, 189},
- {1109, 1, 190},
- { 843, 1, 191},
- { 924, 1, 192},
- { 923, 1, 193},
- { 758, 1, 194},
- {1046, 1, 195},
- {1042, 1, 196},
- { 868, 1, 197},
- { 234, 1, 198},
- { 710, 1, 199},
- { 709, 1, 200},
- {1135, 1, 201},
- {1047, 1, 202},
- {1040, 1, 203},
- { 652, 1, 204},
- {1169, 1, 205},
- {1168, 1, 205},
- {1045, 1, 206},
- {1224, 1, 207},
- { 528, 1, 208},
- { 285, 1, 209},
- { 738, 1, 210},
- {1227, 1, 211},
- { 359, 1, 212},
- { 846, 1, 213},
- {1199, 1, 214},
- {1212, 1, 215},
- { 763, 1, 216},
- { 959, 1, 217},
- { 764, 1, 218},
- { 614, 1, 219},
- { 983, 1, 220},
- {1322, 1, 221},
- {1206, 1, 222},
- { 945, 1, 223},
- { 954, 1, 224},
- { 953, 1, 224},
- {1294, 1, 225},
- { 178, 1, 226},
- { 502, 1, 227},
- {1376, 1, 228},
- { 974, 1, 229},
- {1413, 1, 230},
- {1229, 1, 231},
- {1093, 1, 232},
- { 259, 1, 233},
- { 897, 1, 234},
- { 899, 1, 235},
- { 630, 1, 236},
- { 851, 1, 237},
- {1299, 1, 238},
- {1298, 1, 238},
- { 450, 1, 239},
- { 452, 1, 240},
- { 451, 1, 240},
- { 516, 1, 241},
- { 524, 1, 242},
- { 523, 1, 243},
- { 195, 1, 244},
- { 244, 1, 245},
- { 243, 1, 245},
- { 955, 1, 246},
- { 247, 1, 247},
- {1084, 1, 248},
- { 912, 1, 249},
- { 925, 1, 250},
- { 689, 1, 251},
- { 688, 1, 251},
- {1302, 1, 252},
- {1303, 1, 253},
- { 744, 1, 254},
- { 743, 1, 254},
- { 742, 1, 255},
- { 741, 1, 255},
- {1219, 1, 256},
- {1218, 1, 256},
- {1026, 1, 257},
- { 513, 1, 258},
- {1203, 1, 259},
- { 300, 1, 260},
- { 299, 1, 260},
- { 961, 1, 261},
- { 960, 1, 261},
- { 197, 1, 262},
- { 196, 1, 262},
- { 906, 1, 263},
- {1292, 1, 264},
- {1291, 1, 264},
- { 445, 1, 265},
- { 444, 1, 265},
- { 902, 1, 266},
- { 901, 1, 266},
- {1268, 1, 267},
- { 606, 1, 268},
- { 605, 1, 268},
- {1029, 1, 269},
- {1374, 1, 270},
- { 920, 1, 271},
- { 170, 1, 272},
- { 700, 1, 273},
- {1077, 1, 274},
- { 208, 1, 275},
- { 207, 1, 275},
- { 849, 1, 276},
- { 848, 1, 276},
- { 504, 1, 277},
- { 503, 1, 277},
- {1115, 1, 278},
- { 541, 1, 279},
- { 542, 1, 279},
- { 546, 1, 280},
- { 545, 1, 280},
- { 935, 1, 281},
- { 939, 1, 281},
- { 536, 1, 282},
- {1057, 1, 283},
- {1335, 1, 284},
- {1334, 1, 284},
- { 184, 1, 285},
- { 183, 1, 285},
- { 595, 1, 286},
- { 594, 1, 286},
- {1257, 1, 287},
- {1250, 1, 287},
- {1260, 1, 288},
- {1266, 1, 288},
- { 370, 1, 289},
- {1276, 1, 290},
- {1275, 1, 290},
- { 396, 1, 291},
- { 384, 1, 291},
- { 397, 1, 292},
- { 385, 1, 292},
- { 398, 1, 293},
- { 386, 1, 293},
- { 399, 1, 294},
- { 387, 1, 294},
- { 400, 1, 295},
- { 388, 1, 295},
- { 380, 1, 296},
- { 382, 1, 296},
- {1286, 1, 297},
- {1357, 1, 298},
- {1372, 1, 298},
- {1261, 1, 299},
- {1263, 1, 299},
- {1262, 1, 300},
- {1264, 1, 300},
- {1347, 2, 0},
- {1424, 2, 0},
- { 417, 2, 1},
- {1423, 2, 1},
- { 776, 2, 2},
- { 792, 2, 2},
- { 621, 2, 3},
- { 625, 2, 3},
- { 462, 2, 4},
- { 472, 2, 4},
- { 216, 2, 5},
- { 218, 2, 5},
- { 661, 2, 6},
- { 660, 2, 6},
- { 203, 2, 7},
- { 202, 2, 7},
- {1278, 2, 8},
- {1277, 2, 8},
- {1316, 2, 9},
- {1315, 2, 9},
- { 489, 2, 10},
- { 488, 2, 10},
- { 257, 2, 11},
- { 256, 2, 11},
- { 631, 2, 12},
- { 632, 2, 12},
- { 628, 2, 13},
- { 629, 2, 13},
- {1055, 2, 14},
- {1058, 2, 14},
- {1297, 2, 15},
- {1300, 2, 15},
- {1309, 2, 16},
- {1308, 2, 16},
- { 749, 2, 17},
- { 765, 2, 17},
- { 852, 2, 18},
- { 943, 2, 18},
- {1211, 2, 19},
- {1210, 2, 19},
- {1317, 2, 20},
- { 774, 2, 21},
- { 775, 2, 21},
- {1318, 2, 22},
- {1319, 2, 22},
- { 962, 2, 23},
- { 967, 2, 23},
- { 597, 2, 24},
- { 596, 2, 24},
- { 644, 2, 25},
- { 643, 2, 25},
- { 551, 2, 26},
- { 550, 2, 26},
- { 367, 2, 27},
- { 366, 2, 27},
- { 305, 2, 28},
- { 309, 2, 28},
- {1034, 2, 29},
- {1033, 2, 29},
- {1170, 2, 30},
- {1171, 2, 30},
- { 759, 2, 31},
- { 761, 2, 31},
- { 952, 2, 32},
- { 951, 2, 32},
- { 672, 2, 33},
- { 671, 2, 33},
- { 751, 2, 34},
- { 740, 2, 34},
- { 275, 2, 35},
- { 274, 2, 35},
- { 642, 2, 36},
- { 651, 2, 36},
- {1402, 2, 37},
- {1403, 2, 37},
- {1041, 2, 38},
- { 720, 2, 38},
- { 612, 2, 39},
- { 611, 2, 39},
- { 487, 2, 40},
- { 509, 2, 40},
- { 703, 2, 41},
- {1416, 2, 41},
- {1141, 2, 41},
- {1283, 2, 42},
- {1314, 2, 42},
- { 656, 2, 43},
- { 655, 2, 43},
- { 297, 2, 44},
- { 296, 2, 44},
- {1285, 2, 45},
- {1284, 2, 45},
- { 811, 2, 46},
- { 810, 2, 46},
- {1288, 2, 47},
- {1295, 2, 47},
- { 815, 2, 48},
- { 813, 2, 48},
- {1341, 2, 49},
- {1340, 2, 49},
- {1200, 2, 50},
- {1201, 2, 50},
- {1062, 2, 51},
- {1061, 2, 51},
- { 460, 2, 52},
- { 447, 2, 52},
- { 288, 2, 53},
- { 287, 2, 53},
- { 295, 2, 54},
- { 294, 2, 54},
- { 442, 2, 55},
- { 441, 2, 55},
- {1140, 2, 55},
- { 985, 2, 56},
- {1296, 2, 56},
- { 604, 2, 57},
- { 603, 2, 57},
- {1320, 2, 58},
- {1313, 2, 58},
- {1273, 2, 59},
- {1272, 2, 59},
- {1044, 2, 60},
- {1394, 2, 60},
- { 758, 2, 61},
- { 757, 2, 61},
- { 240, 2, 62},
- { 239, 2, 62},
- { 450, 2, 63},
- {1395, 2, 63},
- {1109, 2, 64},
- {1108, 2, 64},
- {1103, 2, 65},
- {1102, 2, 65},
- { 996, 2, 66},
- { 997, 2, 66},
- {1244, 2, 67},
- {1243, 2, 67},
- { 805, 2, 68},
- { 804, 2, 68},
- {1038, 2, 69},
- {1039, 2, 69},
- {1353, 2, 70},
- {1354, 2, 70},
- {1181, 2, 71},
- {1180, 2, 71},
- { 755, 2, 72},
- { 739, 2, 72},
- {1153, 2, 73},
- {1162, 2, 73},
- { 841, 2, 74},
- { 840, 2, 74},
- { 312, 2, 75},
- { 311, 2, 75},
- { 843, 2, 76},
- { 842, 2, 76},
- { 360, 2, 77},
- {1289, 2, 78},
- { 773, 2, 78},
- {1290, 2, 79},
- {1304, 2, 79},
- { 234, 2, 80},
- { 235, 2, 80},
- { 524, 2, 81},
- { 522, 2, 81},
- {1177, 2, 82},
- {1178, 2, 82},
- { 821, 2, 83},
- { 242, 2, 84},
- { 241, 2, 84},
- { 725, 2, 85},
- { 724, 2, 85},
- { 916, 2, 86},
- { 957, 2, 86},
- { 696, 2, 87},
- { 217, 2, 87},
- {1046, 2, 88},
- {1179, 2, 88},
- { 710, 2, 89},
- {1133, 2, 89},
- { 709, 2, 90},
- {1106, 2, 90},
- {1047, 2, 91},
- {1056, 2, 91},
- { 738, 2, 92},
- { 767, 2, 92},
- { 248, 2, 93},
- { 249, 2, 93},
- { 285, 2, 94},
- { 284, 2, 94},
- { 865, 2, 95},
- { 864, 2, 95},
- { 359, 2, 96},
- { 303, 2, 96},
- { 923, 2, 97},
- { 921, 2, 97},
- { 924, 2, 98},
- { 922, 2, 98},
- { 925, 2, 99},
- {1116, 2, 99},
- {1199, 2, 100},
- {1204, 2, 100},
- {1227, 2, 101},
- {1226, 2, 101},
- {1294, 2, 102},
- {1293, 2, 102},
- { 317, 2, 103},
- { 176, 2, 103},
- { 247, 2, 104},
- { 246, 2, 104},
- { 513, 2, 105},
- { 512, 2, 105},
- { 526, 2, 106},
- { 525, 2, 106},
- { 614, 2, 107},
- { 613, 2, 107},
- {1084, 2, 108},
- { 675, 2, 108},
- { 763, 2, 109},
- { 762, 2, 109},
- { 814, 2, 110},
- { 812, 2, 110},
- { 846, 2, 111},
- { 847, 2, 111},
- { 868, 2, 112},
- { 867, 2, 112},
- { 920, 2, 113},
- { 919, 2, 113},
- { 945, 2, 114},
- { 955, 2, 115},
- { 956, 2, 115},
- {1042, 2, 116},
- { 976, 2, 116},
- { 971, 2, 117},
- { 979, 2, 117},
- {1086, 2, 118},
- {1085, 2, 118},
- {1093, 2, 119},
- {1092, 2, 119},
- {1043, 2, 120},
- {1100, 2, 120},
- {1135, 2, 121},
- {1107, 2, 121},
- {1206, 2, 122},
- {1205, 2, 122},
- { 764, 2, 123},
- {1208, 2, 123},
- {1322, 2, 124},
- {1321, 2, 124},
- {1376, 2, 125},
- {1375, 2, 125},
- { 178, 2, 126},
- { 195, 2, 127},
- { 674, 2, 127},
- { 658, 2, 128},
- { 657, 2, 128},
- { 959, 2, 129},
- { 958, 2, 129},
- {1040, 2, 130},
- { 679, 2, 130},
- {1207, 2, 131},
- {1198, 2, 131},
- { 170, 2, 132},
- { 171, 2, 132},
- { 259, 2, 133},
- { 260, 2, 133},
- { 897, 2, 134},
- { 896, 2, 134},
- { 983, 2, 135},
- {1059, 2, 136},
- {1060, 2, 136},
- {1302, 2, 137},
- {1301, 2, 137},
- { 899, 2, 138},
- { 610, 2, 138},
- {1026, 2, 139},
- {1014, 2, 139},
- {1229, 2, 140},
- {1228, 2, 140},
- {1413, 2, 141},
- {1414, 2, 141},
- { 502, 2, 142},
- { 501, 2, 142},
- { 630, 2, 143},
- { 609, 2, 143},
- { 851, 2, 144},
- { 850, 2, 144},
- { 912, 2, 145},
- { 913, 2, 145},
- { 652, 2, 146},
- {1166, 2, 146},
- {1224, 2, 147},
- {1223, 2, 147},
- {1045, 2, 148},
- {1225, 2, 148},
- { 528, 2, 149},
- { 527, 2, 149},
- { 974, 2, 150},
- { 973, 2, 150},
- {1029, 2, 151},
- { 676, 2, 151},
- {1374, 2, 152},
- {1379, 2, 152},
- { 753, 2, 153},
- { 677, 2, 153},
- {1063, 3, 0},
- {1396, 3, 0},
- { 507, 3, 1},
- { 508, 3, 1},
- {1209, 3, 2},
- {1236, 3, 2},
- { 662, 3, 3},
- { 673, 3, 3},
- { 448, 3, 4},
- { 809, 3, 5},
- { 984, 3, 6},
- { 998, 3, 6},
- { 564, 3, 7},
- {1150, 3, 8},
- {1155, 3, 8},
- { 580, 3, 9},
- { 578, 3, 9},
- { 751, 3, 10},
- { 736, 3, 10},
- { 186, 3, 11},
- { 795, 3, 11},
- { 926, 3, 12},
- { 942, 3, 12},
- { 927, 3, 13},
- { 944, 3, 13},
- { 928, 3, 14},
- { 908, 3, 14},
- {1022, 3, 15},
- {1017, 3, 15},
- { 567, 3, 16},
- { 561, 3, 16},
- {1421, 3, 17},
- {1387, 3, 18},
- { 519, 3, 19},
- { 518, 3, 19},
- { 520, 3, 20},
- { 521, 3, 20},
- { 530, 3, 21},
- { 529, 3, 21},
- { 608, 3, 22},
- { 587, 3, 22},
- {1063, 4, 0},
- {1396, 4, 0},
- {1128, 4, 1},
- {1125, 4, 1},
- { 448, 4, 2},
- { 809, 4, 3},
- { 439, 4, 4},
- { 406, 4, 4},
- { 564, 4, 5},
- { 561, 4, 5},
- {1150, 4, 6},
- {1155, 4, 6},
- {1233, 4, 7},
- {1214, 4, 7},
- { 769, 4, 8},
- {1352, 4, 9},
- {1282, 4, 10},
- { 836, 4, 11},
- { 838, 4, 12},
- {1421, 4, 13},
- { 519, 4, 14},
- { 518, 4, 14},
- { 520, 4, 15},
- { 521, 4, 15},
- { 530, 4, 16},
- { 529, 4, 16},
- { 608, 4, 17},
- { 587, 4, 17},
- {1063, 5, 0},
- {1396, 5, 0},
- { 448, 5, 1},
- { 809, 5, 2},
- { 564, 5, 3},
- { 561, 5, 3},
- {1195, 5, 4},
- {1189, 5, 4},
- { 580, 5, 5},
- { 578, 5, 5},
- {1230, 5, 6},
- { 827, 5, 7},
- { 824, 5, 7},
- {1349, 5, 8},
- {1348, 5, 8},
- {1048, 5, 9},
- { 795, 5, 9},
- {1022, 5, 10},
- {1017, 5, 10},
- { 228, 5, 11},
- { 223, 5, 11},
- {1240, 5, 12},
- {1239, 5, 12},
- { 402, 5, 13},
- { 401, 5, 13},
- {1184, 5, 14},
- {1183, 5, 14},
- { 999, 6, 0},
- { 968, 6, 0},
- { 568, 6, 0},
- { 569, 6, 0},
- {1401, 6, 1},
- {1397, 6, 1},
- {1282, 6, 1},
- {1336, 6, 1},
- {1010, 7, 0},
- { 970, 7, 0},
- { 796, 7, 1},
- { 769, 7, 1},
- {1369, 7, 2},
- {1352, 7, 2},
- {1332, 7, 3},
- {1282, 7, 3},
- { 837, 7, 4},
- { 836, 7, 4},
- { 839, 7, 5},
- { 838, 7, 5},
- { 800, 8, 0},
- { 769, 8, 0},
- {1158, 8, 1},
- {1148, 8, 1},
- { 558, 8, 2},
- { 537, 8, 2},
- { 559, 8, 3},
- { 548, 8, 3},
- { 560, 8, 4},
- { 549, 8, 4},
- { 209, 8, 5},
- { 194, 8, 5},
- { 419, 8, 6},
- { 449, 8, 6},
- {1087, 8, 7},
- { 236, 8, 7},
- {1191, 8, 8},
- {1172, 8, 8},
- {1380, 8, 9},
- {1386, 8, 9},
- {1072, 8, 10},
- {1051, 8, 10},
- { 281, 8, 11},
- { 273, 8, 11},
- {1007, 8, 12},
- {1015, 8, 12},
- { 206, 8, 13},
- { 181, 8, 13},
- { 803, 8, 14},
- { 833, 8, 14},
- {1161, 8, 15},
- {1165, 8, 15},
- { 801, 8, 16},
- { 831, 8, 16},
- {1159, 8, 17},
- {1163, 8, 17},
- {1118, 8, 18},
- {1097, 8, 18},
- { 802, 8, 19},
- { 832, 8, 19},
- {1160, 8, 20},
- {1164, 8, 20},
- { 577, 8, 21},
- { 583, 8, 21},
- {1119, 8, 22},
- {1098, 8, 22},
- {1011, 9, 0},
- { 1, 9, 0},
- {1012, 9, 0},
- {1080, 9, 1},
- { 2, 9, 1},
- {1079, 9, 1},
- {1018, 9, 2},
- { 142, 9, 2},
- { 995, 9, 2},
- { 745, 9, 3},
- { 151, 9, 3},
- { 768, 9, 3},
- {1363, 9, 4},
- { 158, 9, 4},
- {1370, 9, 4},
- { 321, 9, 5},
- { 21, 9, 5},
- { 324, 9, 6},
- { 33, 9, 6},
- { 326, 9, 7},
- { 37, 9, 7},
- { 329, 9, 8},
- { 40, 9, 8},
- { 333, 9, 9},
- { 45, 9, 9},
- { 334, 9, 10},
- { 46, 9, 10},
- { 335, 9, 11},
- { 48, 9, 11},
- { 336, 9, 12},
- { 49, 9, 12},
- { 337, 9, 13},
- { 51, 9, 13},
- { 338, 9, 14},
- { 52, 9, 14},
- { 339, 9, 15},
- { 56, 9, 15},
- { 340, 9, 16},
- { 63, 9, 16},
- { 341, 9, 17},
- { 68, 9, 17},
- { 342, 9, 18},
- { 74, 9, 18},
- { 343, 9, 19},
- { 79, 9, 19},
- { 344, 9, 20},
- { 81, 9, 20},
- { 345, 9, 21},
- { 82, 9, 21},
- { 346, 9, 22},
- { 83, 9, 22},
- { 347, 9, 23},
- { 84, 9, 23},
- { 348, 9, 24},
- { 85, 9, 24},
- { 349, 9, 25},
- { 95, 9, 25},
- { 350, 9, 26},
- { 100, 9, 26},
- { 351, 9, 27},
- { 101, 9, 27},
- { 352, 9, 28},
- { 102, 9, 28},
- { 353, 9, 29},
- { 103, 9, 29},
- { 354, 9, 30},
- { 104, 9, 30},
- { 355, 9, 31},
- { 105, 9, 31},
- { 356, 9, 32},
- { 157, 9, 32},
- { 357, 9, 33},
- { 165, 9, 33},
- { 322, 9, 34},
- { 31, 9, 34},
- { 323, 9, 35},
- { 32, 9, 35},
- { 325, 9, 36},
- { 36, 9, 36},
- { 327, 9, 37},
- { 38, 9, 37},
- { 328, 9, 38},
- { 39, 9, 38},
- { 330, 9, 39},
- { 42, 9, 39},
- { 331, 9, 40},
- { 43, 9, 40},
- { 231, 9, 41},
- { 62, 9, 41},
- { 226, 9, 41},
- { 229, 9, 42},
- { 64, 9, 42},
- { 224, 9, 42},
- { 230, 9, 43},
- { 65, 9, 43},
- { 225, 9, 43},
- { 254, 9, 44},
- { 67, 9, 44},
- { 268, 9, 44},
- { 253, 9, 45},
- { 69, 9, 45},
- { 236, 9, 45},
- { 255, 9, 46},
- { 70, 9, 46},
- { 283, 9, 46},
- { 797, 9, 47},
- { 71, 9, 47},
- { 769, 9, 47},
- {1156, 9, 48},
- { 72, 9, 48},
- {1148, 9, 48},
- { 168, 9, 49},
- { 73, 9, 49},
- { 181, 9, 49},
- { 167, 9, 50},
- { 75, 9, 50},
- { 166, 9, 50},
- { 169, 9, 51},
- { 76, 9, 51},
- { 201, 9, 51},
- { 506, 9, 52},
- { 77, 9, 52},
- { 479, 9, 52},
- { 505, 9, 53},
- { 78, 9, 53},
- { 474, 9, 53},
- { 714, 9, 54},
- { 80, 9, 54},
- { 717, 9, 54},
- { 332, 9, 55},
- { 44, 9, 55},
- { 232, 9, 56},
- { 57, 9, 56},
- { 227, 9, 56},
- {1004, 10, 0},
- { 307, 10, 1},
- { 304, 10, 1},
- { 420, 10, 2},
- { 409, 10, 2},
- { 579, 10, 3},
- {1001, 10, 4},
- { 978, 10, 4},
- { 705, 10, 5},
- { 704, 10, 5},
- { 914, 10, 6},
- { 911, 10, 6},
- { 574, 10, 7},
- { 573, 10, 7},
- { 719, 10, 8},
- { 718, 10, 8},
- { 372, 10, 9},
- { 538, 10, 9},
- {1251, 10, 10},
- {1247, 10, 10},
- {1242, 10, 11},
- {1361, 10, 12},
- {1360, 10, 12},
- {1381, 10, 13},
- { 977, 10, 14},
- { 975, 10, 14},
- {1215, 10, 15},
- {1220, 10, 15},
- {1238, 10, 16},
- {1237, 10, 16},
- { 582, 10, 17},
- { 581, 10, 17},
- { 982, 11, 0},
- { 968, 11, 0},
- { 193, 11, 1},
- { 166, 11, 1},
- { 639, 11, 2},
- { 633, 11, 2},
- {1381, 11, 3},
- {1373, 11, 3},
- { 584, 11, 4},
- { 568, 11, 4},
- { 977, 11, 5},
- { 970, 11, 5},
- {1002, 12, 0},
- { 180, 12, 1},
- { 182, 12, 2},
- { 185, 12, 3},
- { 252, 12, 4},
- { 258, 12, 5},
- { 475, 12, 6},
- { 476, 12, 7},
- { 514, 12, 8},
- { 572, 12, 9},
- { 576, 12, 10},
- { 585, 12, 11},
- { 586, 12, 12},
- { 636, 12, 13},
- { 641, 12, 14},
- {1307, 12, 14},
- { 659, 12, 15},
- { 663, 12, 16},
- { 664, 12, 17},
- { 665, 12, 18},
- { 737, 12, 19},
- { 750, 12, 20},
- { 766, 12, 21},
- { 771, 12, 22},
- { 772, 12, 23},
- { 915, 12, 24},
- { 929, 12, 25},
- {1009, 12, 26},
- {1025, 12, 27},
- {1099, 12, 28},
- {1142, 12, 29},
- {1143, 12, 30},
- {1152, 12, 31},
- {1154, 12, 32},
- {1175, 12, 33},
- {1176, 12, 34},
- {1190, 12, 35},
- {1192, 12, 36},
- {1202, 12, 37},
- {1269, 12, 38},
- {1287, 12, 39},
- {1305, 12, 40},
- {1306, 12, 41},
- {1312, 12, 42},
- {1377, 12, 43},
- {1281, 12, 44},
- {1398, 12, 45},
- {1399, 12, 46},
- {1400, 12, 47},
- {1408, 12, 48},
- {1409, 12, 49},
- {1412, 12, 50},
- {1415, 12, 51},
- { 756, 12, 52},
- { 571, 12, 53},
- { 298, 12, 54},
- { 570, 12, 55},
- {1028, 12, 56},
- {1167, 12, 57},
- {1241, 12, 58},
- { 869, 12, 59},
- { 870, 12, 60},
- { 871, 12, 61},
- { 872, 12, 62},
- { 873, 12, 63},
- { 874, 12, 64},
- { 875, 12, 65},
- { 876, 12, 66},
- { 877, 12, 67},
- { 878, 12, 68},
- { 879, 12, 69},
- { 880, 12, 70},
- { 881, 12, 71},
- { 882, 12, 72},
- { 883, 12, 73},
- { 884, 12, 74},
- { 885, 12, 75},
- { 886, 12, 76},
- { 887, 12, 77},
- { 888, 12, 78},
- { 889, 12, 79},
- { 890, 12, 80},
- { 891, 12, 81},
- { 892, 12, 82},
- { 893, 12, 83},
- { 894, 12, 84},
- { 895, 12, 85},
- { 173, 12, 86},
- { 175, 12, 87},
- { 174, 12, 88},
- { 857, 12, 89},
- { 854, 12, 90},
- { 860, 12, 91},
- { 863, 12, 92},
- { 858, 12, 93},
- { 859, 12, 94},
- { 853, 12, 95},
- { 861, 12, 96},
- { 855, 12, 97},
- { 856, 12, 98},
- { 862, 12, 99},
- { 654, 12, 100},
- { 653, 12, 101},
- {1006, 13, 0},
- {1337, 13, 0},
- { 729, 13, 1},
- { 301, 13, 1},
- { 511, 13, 2},
- { 473, 13, 2},
- {1157, 13, 3},
- {1148, 13, 3},
- { 799, 13, 4},
- { 769, 13, 4},
- {1333, 13, 5},
- {1282, 13, 5},
- {1347, 14, 0},
- {1396, 14, 0},
- {1053, 14, 1},
- {1052, 14, 1},
- { 404, 14, 2},
- { 401, 14, 2},
- {1146, 14, 3},
- {1145, 14, 3},
- { 607, 14, 4},
- { 602, 14, 4},
- {1008, 14, 5},
- {1013, 14, 5},
- { 562, 14, 6},
- { 561, 14, 6},
- { 293, 14, 7},
- {1270, 14, 7},
- { 702, 14, 8},
- { 717, 14, 8},
- {1127, 14, 9},
- {1126, 14, 9},
- {1124, 14, 10},
- {1117, 14, 10},
- {1022, 14, 11},
- {1017, 14, 11},
- { 189, 14, 12},
- { 181, 14, 12},
- { 686, 14, 13},
- { 682, 14, 13},
- { 711, 14, 14},
- { 697, 14, 14},
- { 712, 14, 14},
- { 681, 14, 15},
- { 680, 14, 15},
- { 415, 14, 16},
- { 405, 14, 16},
- { 291, 14, 17},
- { 250, 14, 17},
- { 290, 14, 18},
- { 238, 14, 18},
- {1231, 14, 19},
- {1230, 14, 19},
- { 866, 14, 20},
- { 267, 14, 20},
- { 313, 14, 21},
- { 448, 14, 21},
- { 819, 14, 22},
- { 809, 14, 22},
- { 438, 14, 23},
- { 318, 14, 23},
- { 422, 14, 24},
- {1174, 14, 24},
- { 193, 14, 25},
- { 179, 14, 25},
- { 292, 14, 26},
- { 237, 14, 26},
- {1267, 14, 27},
- {1197, 14, 27},
- {1422, 14, 28},
- {1420, 14, 28},
- { 986, 14, 29},
- { 998, 14, 29},
- {1385, 14, 30},
- {1382, 14, 30},
- { 727, 14, 31},
- { 735, 14, 32},
- { 734, 14, 33},
- { 634, 14, 34},
- { 635, 14, 35},
- { 403, 14, 36},
- { 446, 14, 36},
- { 662, 14, 37},
- { 673, 14, 37},
- { 423, 14, 38},
- { 373, 14, 38},
- {1150, 14, 39},
- {1155, 14, 39},
- { 519, 14, 40},
- { 518, 14, 40},
- { 530, 14, 41},
- { 529, 14, 41},
- {1421, 14, 42},
- {1004, 15, 0},
- {1022, 15, 1},
- {1017, 15, 1},
- { 499, 15, 2},
- { 492, 15, 2},
- { 481, 15, 3},
- { 480, 15, 3},
- { 972, 16, 0},
- { 0, 16, 1},
- { 1, 16, 2},
- { 11, 16, 3},
- { 6, 16, 4},
- { 19, 16, 5},
- { 16, 16, 6},
- { 13, 16, 7},
- { 10, 16, 8},
- { 94, 16, 9},
- { 92, 16, 10},
- { 8, 16, 11},
- { 5, 16, 12},
- { 4, 16, 13},
- { 3, 16, 14},
- { 20, 16, 15},
- { 18, 16, 16},
- { 17, 16, 17},
- { 89, 16, 18},
- { 15, 16, 19},
- { 87, 16, 20},
- { 14, 16, 21},
- { 12, 16, 22},
- { 9, 16, 23},
- { 93, 16, 24},
- { 55, 16, 25},
- { 127, 16, 26},
- { 7, 16, 27},
- { 143, 16, 28},
- { 91, 16, 29},
- { 130, 16, 30},
- { 54, 16, 31},
- { 90, 16, 32},
- { 110, 16, 33},
- { 129, 16, 34},
- { 145, 16, 35},
- { 34, 16, 36},
- { 2, 16, 37},
- { 88, 16, 38},
- { 53, 16, 39},
- { 128, 16, 40},
- { 86, 16, 41},
- { 144, 16, 42},
- { 109, 16, 43},
- { 159, 16, 44},
- { 126, 16, 45},
- { 35, 16, 46},
- { 136, 16, 47},
- { 41, 16, 48},
- { 142, 16, 49},
- { 47, 16, 50},
- { 151, 16, 51},
- { 50, 16, 52},
- { 158, 16, 53},
- { 21, 16, 54},
- { 33, 16, 55},
- { 37, 16, 56},
- { 40, 16, 57},
- { 45, 16, 58},
- { 46, 16, 59},
- { 48, 16, 60},
- { 49, 16, 61},
- { 51, 16, 62},
- { 52, 16, 63},
- { 56, 16, 64},
- { 63, 16, 65},
- { 68, 16, 66},
- { 74, 16, 67},
- { 79, 16, 68},
- { 81, 16, 69},
- { 82, 16, 70},
- { 83, 16, 71},
- { 84, 16, 72},
- { 85, 16, 73},
- { 95, 16, 74},
- { 100, 16, 75},
- { 101, 16, 76},
- { 102, 16, 77},
- { 103, 16, 78},
- { 104, 16, 79},
- { 105, 16, 80},
- { 106, 16, 81},
- { 107, 16, 82},
- { 108, 16, 83},
- { 111, 16, 84},
- { 116, 16, 85},
- { 117, 16, 86},
- { 118, 16, 87},
- { 120, 16, 88},
- { 121, 16, 89},
- { 122, 16, 90},
- { 123, 16, 91},
- { 124, 16, 92},
- { 125, 16, 93},
- { 131, 16, 94},
- { 137, 16, 95},
- { 146, 16, 96},
- { 152, 16, 97},
- { 160, 16, 98},
- { 22, 16, 99},
- { 57, 16, 100},
- { 96, 16, 101},
- { 112, 16, 102},
- { 132, 16, 103},
- { 138, 16, 104},
- { 147, 16, 105},
- { 153, 16, 106},
- { 161, 16, 107},
- { 23, 16, 108},
- { 58, 16, 109},
- { 97, 16, 110},
- { 113, 16, 111},
- { 133, 16, 112},
- { 139, 16, 113},
- { 148, 16, 114},
- { 154, 16, 115},
- { 162, 16, 116},
- { 24, 16, 117},
- { 59, 16, 118},
- { 98, 16, 119},
- { 114, 16, 120},
- { 134, 16, 121},
- { 140, 16, 122},
- { 149, 16, 123},
- { 155, 16, 124},
- { 163, 16, 125},
- { 25, 16, 126},
- { 60, 16, 127},
- { 66, 16, 128},
- { 99, 16, 129},
- { 115, 16, 130},
- { 119, 16, 131},
- { 135, 16, 132},
- { 141, 16, 133},
- { 150, 16, 134},
- { 156, 16, 135},
- { 164, 16, 136},
- { 26, 16, 137},
- { 27, 16, 138},
- { 61, 16, 139},
- { 28, 16, 140},
- { 29, 16, 141},
- { 30, 16, 142},
- { 970, 17, 0},
- {1156, 17, 1},
- { 797, 17, 2},
- {1365, 17, 3},
- { 798, 17, 4},
- {1326, 17, 5},
- { 278, 17, 6},
- {1327, 17, 7},
- {1331, 17, 8},
- {1329, 17, 9},
- {1330, 17, 10},
- { 280, 17, 11},
- { 279, 17, 12},
- {1328, 17, 13},
- {1081, 17, 14},
- {1063, 18, 0},
- { 266, 18, 1},
- {1364, 18, 2},
- { 233, 18, 3},
- {1018, 18, 4},
- {1363, 18, 5},
- {1139, 18, 6},
- { 713, 18, 7},
- {1368, 18, 8},
- {1367, 18, 9},
- {1366, 18, 10},
- { 432, 18, 11},
- { 425, 18, 12},
- { 426, 18, 13},
- { 437, 18, 14},
- { 434, 18, 15},
- { 433, 18, 16},
- { 429, 18, 17},
- { 436, 18, 18},
- { 435, 18, 19},
- { 431, 18, 20},
- { 427, 18, 21},
- { 428, 18, 22},
- { 950, 18, 23},
- {1324, 18, 24},
- {1325, 18, 25},
- { 590, 18, 26},
- { 310, 18, 27},
- {1151, 18, 28},
- {1271, 18, 29},
- { 430, 18, 30},
- {1005, 18, 31},
- { 731, 18, 32},
- {1021, 18, 33},
- {1019, 18, 34},
- { 286, 18, 35},
- { 999, 19, 0},
- {1401, 19, 1},
- {1401, 20, 0},
- {1397, 20, 0},
- { 999, 20, 1},
- { 968, 20, 1},
- {1401, 21, 0},
- {1397, 21, 0},
- { 999, 21, 1},
- { 968, 21, 1},
- { 907, 21, 2},
- { 844, 21, 2},
+ {1015, 0, 0}, /* NO */
+ { 984, 0, 0}, /* N */
+ { 578, 0, 0}, /* F */
+ { 579, 0, 0}, /* FALSE */
+ {1421, 0, 1}, /* YES */
+ {1417, 0, 1}, /* Y */
+ {1299, 0, 1}, /* T */
+ {1356, 0, 1}, /* TRUE */
+ { 814, 1, 0}, /* LEFTTORIGHT */
+ { 783, 1, 0}, /* L */
+ { 281, 1, 1}, /* BOUNDARYNEUTRAL */
+ { 273, 1, 1}, /* BN */
+ {1207, 1, 2}, /* SEGMENTSEPARATOR */
+ {1188, 1, 2}, /* S */
+ {1103, 1, 3}, /* PARAGRAPHSEPARATOR */
+ { 236, 1, 3}, /* B */
+ {1400, 1, 4}, /* WHITESPACE */
+ {1406, 1, 4}, /* WS */
+ {1088, 1, 5}, /* OTHERNEUTRAL */
+ {1067, 1, 5}, /* ON */
+ { 569, 1, 6}, /* EUROPEANTERMINATOR */
+ { 558, 1, 6}, /* ET */
+ { 568, 1, 7}, /* EUROPEANSEPARATOR */
+ { 557, 1, 7}, /* ES */
+ { 423, 1, 8}, /* COMMONSEPARATOR */
+ { 453, 1, 8}, /* CS */
+ { 567, 1, 9}, /* EUROPEANNUMBER */
+ { 545, 1, 9}, /* EN */
+ {1023, 1, 10}, /* NONSPACINGMARK */
+ {1031, 1, 10}, /* NSM */
+ {1174, 1, 11}, /* RIGHTTOLEFT */
+ {1164, 1, 11}, /* R */
+ { 209, 1, 12}, /* ARABICNUMBER */
+ { 194, 1, 12}, /* AN */
+ { 206, 1, 13}, /* ARABICLETTER */
+ { 181, 1, 13}, /* AL */
+ { 815, 1, 14}, /* LEFTTORIGHTEMBEDDING */
+ { 847, 1, 14}, /* LRE */
+ {1175, 1, 15}, /* RIGHTTOLEFTEMBEDDING */
+ {1179, 1, 15}, /* RLE */
+ {1134, 1, 16}, /* POPDIRECTIONALFORMAT */
+ {1113, 1, 16}, /* PDF */
+ { 817, 1, 17}, /* LEFTTORIGHTOVERRIDE */
+ { 849, 1, 17}, /* LRO */
+ {1177, 1, 18}, /* RIGHTTOLEFTOVERRIDE */
+ {1181, 1, 18}, /* RLO */
+ { 816, 1, 19}, /* LEFTTORIGHTISOLATE */
+ { 848, 1, 19}, /* LRI */
+ {1176, 1, 20}, /* RIGHTTOLEFTISOLATE */
+ {1180, 1, 20}, /* RLI */
+ { 587, 1, 21}, /* FIRSTSTRONGISOLATE */
+ { 593, 1, 21}, /* FSI */
+ {1135, 1, 22}, /* POPDIRECTIONALISOLATE */
+ {1114, 1, 22}, /* PDI */
+ {1016, 2, 0}, /* NOBLOCK */
+ { 994, 2, 0}, /* NB */
+ { 245, 2, 1}, /* BASICLATIN */
+ { 220, 2, 1}, /* ASCII */
+ { 793, 2, 2}, /* LATIN1SUPPLEMENT */
+ { 792, 2, 2}, /* LATIN1SUP */
+ { 791, 2, 2}, /* LATIN1 */
+ { 800, 2, 3}, /* LATINEXTENDEDA */
+ { 794, 2, 3}, /* LATINEXTA */
+ { 802, 2, 4}, /* LATINEXTENDEDB */
+ { 796, 2, 4}, /* LATINEXTB */
+ { 728, 2, 5}, /* IPAEXTENSIONS */
+ { 727, 2, 5}, /* IPAEXT */
+ {1250, 2, 6}, /* SPACINGMODIFIERLETTERS */
+ { 963, 2, 6}, /* MODIFIERLETTERS */
+ { 414, 2, 7}, /* COMBININGDIACRITICALMARKS */
+ { 499, 2, 7}, /* DIACRITICALS */
+ { 632, 2, 8}, /* GREEKANDCOPTIC */
+ { 631, 2, 8}, /* GREEK */
+ { 466, 2, 9}, /* CYRILLIC */
+ { 474, 2, 10}, /* CYRILLICSUPPLEMENT */
+ { 473, 2, 10}, /* CYRILLICSUP */
+ { 475, 2, 10}, /* CYRILLICSUPPLEMENTARY */
+ { 216, 2, 11}, /* ARMENIAN */
+ { 673, 2, 12}, /* HEBREW */
+ { 203, 2, 13}, /* ARABIC */
+ {1295, 2, 14}, /* SYRIAC */
+ { 215, 2, 15}, /* ARABICSUPPLEMENT */
+ { 214, 2, 15}, /* ARABICSUP */
+ {1335, 2, 16}, /* THAANA */
+ {1012, 2, 17}, /* NKO */
+ {1193, 2, 18}, /* SAMARITAN */
+ { 881, 2, 19}, /* MANDAIC */
+ {1297, 2, 20}, /* SYRIACSUPPLEMENT */
+ {1296, 2, 20}, /* SYRIACSUP */
+ { 205, 2, 21}, /* ARABICEXTENDEDA */
+ { 204, 2, 21}, /* ARABICEXTA */
+ { 493, 2, 22}, /* DEVANAGARI */
+ { 257, 2, 23}, /* BENGALI */
+ { 641, 2, 24}, /* GURMUKHI */
+ { 638, 2, 25}, /* GUJARATI */
+ {1071, 2, 26}, /* ORIYA */
+ {1314, 2, 27}, /* TAMIL */
+ {1328, 2, 28}, /* TELUGU */
+ { 761, 2, 29}, /* KANNADA */
+ { 868, 2, 30}, /* MALAYALAM */
+ {1227, 2, 31}, /* SINHALA */
+ {1336, 2, 32}, /* THAI */
+ { 788, 2, 33}, /* LAO */
+ {1337, 2, 34}, /* TIBETAN */
+ { 978, 2, 35}, /* MYANMAR */
+ { 607, 2, 36}, /* GEORGIAN */
+ { 656, 2, 37}, /* HANGULJAMO */
+ { 733, 2, 37}, /* JAMO */
+ { 560, 2, 38}, /* ETHIOPIC */
+ { 566, 2, 39}, /* ETHIOPICSUPPLEMENT */
+ { 565, 2, 39}, /* ETHIOPICSUP */
+ { 367, 2, 40}, /* CHEROKEE */
+ {1364, 2, 41}, /* UNIFIEDCANADIANABORIGINALSYLLABICS */
+ {1358, 2, 41}, /* UCAS */
+ { 306, 2, 41}, /* CANADIANSYLLABICS */
+ {1050, 2, 42}, /* OGHAM */
+ {1186, 2, 43}, /* RUNIC */
+ {1300, 2, 44}, /* TAGALOG */
+ { 668, 2, 45}, /* HANUNOO */
+ { 297, 2, 46}, /* BUHID */
+ {1302, 2, 47}, /* TAGBANWA */
+ { 772, 2, 48}, /* KHMER */
+ { 968, 2, 49}, /* MONGOLIAN */
+ {1365, 2, 50}, /* UNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED */
+ {1359, 2, 50}, /* UCASEXT */
+ { 825, 2, 51}, /* LIMBU */
+ {1305, 2, 52}, /* TAILE */
+ {1001, 2, 53}, /* NEWTAILUE */
+ { 773, 2, 54}, /* KHMERSYMBOLS */
+ { 295, 2, 55}, /* BUGINESE */
+ {1306, 2, 56}, /* TAITHAM */
+ { 415, 2, 57}, /* COMBININGDIACRITICALMARKSEXTENDED */
+ { 500, 2, 57}, /* DIACRITICALSEXT */
+ { 240, 2, 58}, /* BALINESE */
+ {1260, 2, 59}, /* SUNDANESE */
+ { 248, 2, 60}, /* BATAK */
+ { 819, 2, 61}, /* LEPCHA */
+ {1054, 2, 62}, /* OLCHIKI */
+ { 472, 2, 63}, /* CYRILLICEXTENDEDC */
+ { 469, 2, 63}, /* CYRILLICEXTC */
+ { 609, 2, 64}, /* GEORGIANEXTENDED */
+ { 608, 2, 64}, /* GEORGIANEXT */
+ {1262, 2, 65}, /* SUNDANESESUPPLEMENT */
+ {1261, 2, 65}, /* SUNDANESESUP */
+ {1379, 2, 66}, /* VEDICEXTENSIONS */
+ {1378, 2, 66}, /* VEDICEXT */
+ {1127, 2, 67}, /* PHONETICEXTENSIONS */
+ {1126, 2, 67}, /* PHONETICEXT */
+ {1128, 2, 68}, /* PHONETICEXTENSIONSSUPPLEMENT */
+ {1129, 2, 68}, /* PHONETICEXTSUP */
+ { 417, 2, 69}, /* COMBININGDIACRITICALMARKSSUPPLEMENT */
+ { 502, 2, 69}, /* DIACRITICALSSUP */
+ { 801, 2, 70}, /* LATINEXTENDEDADDITIONAL */
+ { 795, 2, 70}, /* LATINEXTADDITIONAL */
+ { 634, 2, 71}, /* GREEKEXTENDED */
+ { 633, 2, 71}, /* GREEKEXT */
+ { 602, 2, 72}, /* GENERALPUNCTUATION */
+ {1154, 2, 72}, /* PUNCTUATION */
+ {1269, 2, 73}, /* SUPERSCRIPTSANDSUBSCRIPTS */
+ {1268, 2, 73}, /* SUPERANDSUB */
+ { 458, 2, 74}, /* CURRENCYSYMBOLS */
+ { 416, 2, 75}, /* COMBININGDIACRITICALMARKSFORSYMBOLS */
+ { 501, 2, 75}, /* DIACRITICALSFORSYMBOLS */
+ { 420, 2, 75}, /* COMBININGMARKSFORSYMBOLS */
+ { 821, 2, 76}, /* LETTERLIKESYMBOLS */
+ {1036, 2, 77}, /* NUMBERFORMS */
+ { 219, 2, 78}, /* ARROWS */
+ { 919, 2, 79}, /* MATHEMATICALOPERATORS */
+ { 920, 2, 79}, /* MATHOPERATORS */
+ { 952, 2, 80}, /* MISCELLANEOUSTECHNICAL */
+ { 957, 2, 80}, /* MISCTECHNICAL */
+ { 444, 2, 81}, /* CONTROLPICTURES */
+ {1070, 2, 82}, /* OPTICALCHARACTERRECOGNITION */
+ {1047, 2, 82}, /* OCR */
+ { 548, 2, 83}, /* ENCLOSEDALPHANUMERICS */
+ { 547, 2, 83}, /* ENCLOSEDALPHANUM */
+ { 282, 2, 84}, /* BOXDRAWING */
+ { 272, 2, 85}, /* BLOCKELEMENTS */
+ { 603, 2, 86}, /* GEOMETRICSHAPES */
+ { 949, 2, 87}, /* MISCELLANEOUSSYMBOLS */
+ { 956, 2, 87}, /* MISCSYMBOLS */
+ { 505, 2, 88}, /* DINGBATS */
+ { 947, 2, 89}, /* MISCELLANEOUSMATHEMATICALSYMBOLSA */
+ { 953, 2, 89}, /* MISCMATHSYMBOLSA */
+ {1271, 2, 90}, /* SUPPLEMENTALARROWSA */
+ {1264, 2, 90}, /* SUPARROWSA */
+ { 289, 2, 91}, /* BRAILLEPATTERNS */
+ { 288, 2, 91}, /* BRAILLE */
+ {1272, 2, 92}, /* SUPPLEMENTALARROWSB */
+ {1265, 2, 92}, /* SUPARROWSB */
+ { 948, 2, 93}, /* MISCELLANEOUSMATHEMATICALSYMBOLSB */
+ { 954, 2, 93}, /* MISCMATHSYMBOLSB */
+ {1274, 2, 94}, /* SUPPLEMENTALMATHEMATICALOPERATORS */
+ {1270, 2, 94}, /* SUPMATHOPERATORS */
+ { 950, 2, 95}, /* MISCELLANEOUSSYMBOLSANDARROWS */
+ { 946, 2, 95}, /* MISCARROWS */
+ { 614, 2, 96}, /* GLAGOLITIC */
+ { 803, 2, 97}, /* LATINEXTENDEDC */
+ { 797, 2, 97}, /* LATINEXTC */
+ { 446, 2, 98}, /* COPTIC */
+ { 611, 2, 99}, /* GEORGIANSUPPLEMENT */
+ { 610, 2, 99}, /* GEORGIANSUP */
+ {1339, 2, 100}, /* TIFINAGH */
+ { 563, 2, 101}, /* ETHIOPICEXTENDED */
+ { 561, 2, 101}, /* ETHIOPICEXT */
+ { 470, 2, 102}, /* CYRILLICEXTENDEDA */
+ { 467, 2, 102}, /* CYRILLICEXTA */
+ {1275, 2, 103}, /* SUPPLEMENTALPUNCTUATION */
+ {1281, 2, 103}, /* SUPPUNCTUATION */
+ { 393, 2, 104}, /* CJKRADICALSSUPPLEMENT */
+ { 392, 2, 104}, /* CJKRADICALSSUP */
+ { 760, 2, 105}, /* KANGXIRADICALS */
+ { 759, 2, 105}, /* KANGXI */
+ { 699, 2, 106}, /* IDEOGRAPHICDESCRIPTIONCHARACTERS */
+ { 695, 2, 106}, /* IDC */
+ { 396, 2, 107}, /* CJKSYMBOLSANDPUNCTUATION */
+ { 395, 2, 107}, /* CJKSYMBOLS */
+ { 684, 2, 108}, /* HIRAGANA */
+ { 763, 2, 109}, /* KATAKANA */
+ { 275, 2, 110}, /* BOPOMOFO */
+ { 655, 2, 111}, /* HANGULCOMPATIBILITYJAMO */
+ { 425, 2, 111}, /* COMPATJAMO */
+ { 758, 2, 112}, /* KANBUN */
+ { 277, 2, 113}, /* BOPOMOFOEXTENDED */
+ { 276, 2, 113}, /* BOPOMOFOEXT */
+ { 394, 2, 114}, /* CJKSTROKES */
+ { 766, 2, 115}, /* KATAKANAPHONETICEXTENSIONS */
+ { 764, 2, 115}, /* KATAKANAEXT */
+ { 552, 2, 116}, /* ENCLOSEDCJKLETTERSANDMONTHS */
+ { 551, 2, 116}, /* ENCLOSEDCJK */
+ { 379, 2, 117}, /* CJKCOMPATIBILITY */
+ { 377, 2, 117}, /* CJKCOMPAT */
+ { 398, 2, 118}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONA */
+ { 385, 2, 118}, /* CJKEXTA */
+ {1427, 2, 119}, /* YIJINGHEXAGRAMSYMBOLS */
+ {1426, 2, 119}, /* YIJING */
+ { 397, 2, 120}, /* CJKUNIFIEDIDEOGRAPHS */
+ { 376, 2, 120}, /* CJK */
+ {1429, 2, 121}, /* YISYLLABLES */
+ {1428, 2, 122}, /* YIRADICALS */
+ { 835, 2, 123}, /* LISU */
+ {1373, 2, 124}, /* VAI */
+ { 471, 2, 125}, /* CYRILLICEXTENDEDB */
+ { 468, 2, 125}, /* CYRILLICEXTB */
+ { 242, 2, 126}, /* BAMUM */
+ { 965, 2, 127}, /* MODIFIERTONELETTERS */
+ { 804, 2, 128}, /* LATINEXTENDEDD */
+ { 798, 2, 128}, /* LATINEXTD */
+ {1289, 2, 129}, /* SYLOTINAGRI */
+ { 422, 2, 130}, /* COMMONINDICNUMBERFORMS */
+ { 710, 2, 130}, /* INDICNUMBERFORMS */
+ {1119, 2, 131}, /* PHAGSPA */
+ {1197, 2, 132}, /* SAURASHTRA */
+ { 495, 2, 133}, /* DEVANAGARIEXTENDED */
+ { 494, 2, 133}, /* DEVANAGARIEXT */
+ { 767, 2, 134}, /* KAYAHLI */
+ {1169, 2, 135}, /* REJANG */
+ { 657, 2, 136}, /* HANGULJAMOEXTENDEDA */
+ { 734, 2, 136}, /* JAMOEXTA */
+ { 737, 2, 137}, /* JAVANESE */
+ { 982, 2, 138}, /* MYANMAREXTENDEDB */
+ { 980, 2, 138}, /* MYANMAREXTB */
+ { 360, 2, 139}, /* CHAM */
+ { 981, 2, 140}, /* MYANMAREXTENDEDA */
+ { 979, 2, 140}, /* MYANMAREXTA */
+ {1307, 2, 141}, /* TAIVIET */
+ { 934, 2, 142}, /* MEETEIMAYEKEXTENSIONS */
+ { 933, 2, 142}, /* MEETEIMAYEKEXT */
+ { 564, 2, 143}, /* ETHIOPICEXTENDEDA */
+ { 562, 2, 143}, /* ETHIOPICEXTA */
+ { 805, 2, 144}, /* LATINEXTENDEDE */
+ { 799, 2, 144}, /* LATINEXTE */
+ { 369, 2, 145}, /* CHEROKEESUPPLEMENT */
+ { 368, 2, 145}, /* CHEROKEESUP */
+ { 932, 2, 146}, /* MEETEIMAYEK */
+ { 659, 2, 147}, /* HANGULSYLLABLES */
+ { 654, 2, 147}, /* HANGUL */
+ { 658, 2, 148}, /* HANGULJAMOEXTENDEDB */
+ { 735, 2, 148}, /* JAMOEXTB */
+ { 682, 2, 149}, /* HIGHSURROGATES */
+ { 680, 2, 150}, /* HIGHPRIVATEUSESURROGATES */
+ { 681, 2, 150}, /* HIGHPUSURROGATES */
+ { 846, 2, 151}, /* LOWSURROGATES */
+ {1148, 2, 152}, /* PRIVATEUSEAREA */
+ {1152, 2, 152}, /* PUA */
+ {1147, 2, 152}, /* PRIVATEUSE */
+ { 381, 2, 153}, /* CJKCOMPATIBILITYIDEOGRAPHS */
+ { 383, 2, 153}, /* CJKCOMPATIDEOGRAPHS */
+ { 191, 2, 154}, /* ALPHABETICPRESENTATIONFORMS */
+ { 190, 2, 154}, /* ALPHABETICPF */
+ { 212, 2, 155}, /* ARABICPRESENTATIONFORMSA */
+ { 210, 2, 155}, /* ARABICPFA */
+ {1376, 2, 156}, /* VARIATIONSELECTORS */
+ {1391, 2, 156}, /* VS */
+ {1382, 2, 157}, /* VERTICALFORMS */
+ { 418, 2, 158}, /* COMBININGHALFMARKS */
+ { 648, 2, 158}, /* HALFMARKS */
+ { 380, 2, 159}, /* CJKCOMPATIBILITYFORMS */
+ { 378, 2, 159}, /* CJKCOMPATFORMS */
+ {1233, 2, 160}, /* SMALLFORMVARIANTS */
+ {1232, 2, 160}, /* SMALLFORMS */
+ { 213, 2, 161}, /* ARABICPRESENTATIONFORMSB */
+ { 211, 2, 161}, /* ARABICPFB */
+ { 650, 2, 162}, /* HALFWIDTHANDFULLWIDTHFORMS */
+ { 647, 2, 162}, /* HALFANDFULLFORMS */
+ {1251, 2, 163}, /* SPECIALS */
+ { 831, 2, 164}, /* LINEARBSYLLABARY */
+ { 830, 2, 165}, /* LINEARBIDEOGRAMS */
+ { 172, 2, 166}, /* AEGEANNUMBERS */
+ { 198, 2, 167}, /* ANCIENTGREEKNUMBERS */
+ { 199, 2, 168}, /* ANCIENTSYMBOLS */
+ {1121, 2, 169}, /* PHAISTOSDISC */
+ {1120, 2, 169}, /* PHAISTOS */
+ { 857, 2, 170}, /* LYCIAN */
+ { 312, 2, 171}, /* CARIAN */
+ { 447, 2, 172}, /* COPTICEPACTNUMBERS */
+ {1057, 2, 173}, /* OLDITALIC */
+ { 622, 2, 174}, /* GOTHIC */
+ {1059, 2, 175}, /* OLDPERMIC */
+ {1361, 2, 176}, /* UGARITIC */
+ {1060, 2, 177}, /* OLDPERSIAN */
+ { 491, 2, 178}, /* DESERET */
+ {1216, 2, 179}, /* SHAVIAN */
+ {1078, 2, 180}, /* OSMANYA */
+ {1075, 2, 181}, /* OSAGE */
+ { 533, 2, 182}, /* ELBASAN */
+ { 317, 2, 183}, /* CAUCASIANALBANIAN */
+ { 828, 2, 184}, /* LINEARA */
+ { 465, 2, 185}, /* CYPRIOTSYLLABARY */
+ { 708, 2, 186}, /* IMPERIALARAMAIC */
+ {1102, 2, 187}, /* PALMYRENE */
+ { 987, 2, 188}, /* NABATAEAN */
+ { 670, 2, 189}, /* HATRAN */
+ {1125, 2, 190}, /* PHOENICIAN */
+ { 859, 2, 191}, /* LYDIAN */
+ { 940, 2, 192}, /* MEROITICHIEROGLYPHS */
+ { 939, 2, 193}, /* MEROITICCURSIVE */
+ { 770, 2, 194}, /* KHAROSHTHI */
+ {1062, 2, 195}, /* OLDSOUTHARABIAN */
+ {1058, 2, 196}, /* OLDNORTHARABIAN */
+ { 884, 2, 197}, /* MANICHAEAN */
+ { 234, 2, 198}, /* AVESTAN */
+ { 722, 2, 199}, /* INSCRIPTIONALPARTHIAN */
+ { 721, 2, 200}, /* INSCRIPTIONALPAHLAVI */
+ {1151, 2, 201}, /* PSALTERPAHLAVI */
+ {1063, 2, 202}, /* OLDTURKIC */
+ {1056, 2, 203}, /* OLDHUNGARIAN */
+ { 662, 2, 204}, /* HANIFIROHINGYA */
+ {1185, 2, 205}, /* RUMINUMERALSYMBOLS */
+ {1184, 2, 205}, /* RUMI */
+ {1423, 2, 206}, /* YEZIDI */
+ {1061, 2, 207}, /* OLDSOGDIAN */
+ {1240, 2, 208}, /* SOGDIAN */
+ { 371, 2, 209}, /* CHORASMIAN */
+ { 535, 2, 210}, /* ELYMAIC */
+ { 285, 2, 211}, /* BRAHMI */
+ { 750, 2, 212}, /* KAITHI */
+ {1243, 2, 213}, /* SORASOMPENG */
+ { 359, 2, 214}, /* CHAKMA */
+ { 862, 2, 215}, /* MAHAJANI */
+ {1215, 2, 216}, /* SHARADA */
+ {1228, 2, 217}, /* SINHALAARCHAICNUMBERS */
+ { 776, 2, 218}, /* KHOJKI */
+ { 975, 2, 219}, /* MULTANI */
+ { 777, 2, 220}, /* KHUDAWADI */
+ { 624, 2, 221}, /* GRANTHA */
+ { 999, 2, 222}, /* NEWA */
+ {1341, 2, 223}, /* TIRHUTA */
+ {1222, 2, 224}, /* SIDDHAM */
+ { 961, 2, 225}, /* MODI */
+ { 970, 2, 226}, /* MONGOLIANSUPPLEMENT */
+ { 969, 2, 226}, /* MONGOLIANSUP */
+ {1311, 2, 227}, /* TAKRI */
+ { 178, 2, 228}, /* AHOM */
+ { 508, 2, 229}, /* DOGRA */
+ {1396, 2, 230}, /* WARANGCITI */
+ { 506, 2, 231}, /* DIVESAKURU */
+ { 990, 2, 232}, /* NANDINAGARI */
+ {1435, 2, 233}, /* ZANABAZARSQUARE */
+ {1245, 2, 234}, /* SOYOMBO */
+ {1109, 2, 235}, /* PAUCINHAU */
+ { 259, 2, 236}, /* BHAIKSUKI */
+ { 913, 2, 237}, /* MARCHEN */
+ { 915, 2, 238}, /* MASARAMGONDI */
+ { 640, 2, 239}, /* GUNJALAGONDI */
+ { 867, 2, 240}, /* MAKASAR */
+ { 837, 2, 241}, /* LISUSUPPLEMENT */
+ { 836, 2, 241}, /* LISUSUP */
+ {1316, 2, 242}, /* TAMILSUPPLEMENT */
+ {1315, 2, 242}, /* TAMILSUP */
+ { 454, 2, 243}, /* CUNEIFORM */
+ { 456, 2, 244}, /* CUNEIFORMNUMBERSANDPUNCTUATION */
+ { 455, 2, 244}, /* CUNEIFORMNUMBERS */
+ { 522, 2, 245}, /* EARLYDYNASTICCUNEIFORM */
+ { 531, 2, 246}, /* EGYPTIANHIEROGLYPHS */
+ { 530, 2, 247}, /* EGYPTIANHIEROGLYPHFORMATCONTROLS */
+ { 195, 2, 248}, /* ANATOLIANHIEROGLYPHS */
+ { 244, 2, 249}, /* BAMUMSUPPLEMENT */
+ { 243, 2, 249}, /* BAMUMSUP */
+ { 971, 2, 250}, /* MRO */
+ { 247, 2, 251}, /* BASSAVAH */
+ {1100, 2, 252}, /* PAHAWHHMONG */
+ { 928, 2, 253}, /* MEDEFAIDRIN */
+ { 941, 2, 254}, /* MIAO */
+ { 701, 2, 255}, /* IDEOGRAPHICSYMBOLSANDPUNCTUATION */
+ { 700, 2, 255}, /* IDEOGRAPHICSYMBOLS */
+ {1319, 2, 256}, /* TANGUT */
+ {1320, 2, 257}, /* TANGUTCOMPONENTS */
+ { 771, 2, 258}, /* KHITANSMALLSCRIPT */
+ {1322, 2, 259}, /* TANGUTSUPPLEMENT */
+ {1321, 2, 259}, /* TANGUTSUP */
+ { 756, 2, 260}, /* KANASUPPLEMENT */
+ { 755, 2, 260}, /* KANASUP */
+ { 754, 2, 261}, /* KANAEXTENDEDA */
+ { 753, 2, 261}, /* KANAEXTA */
+ {1235, 2, 262}, /* SMALLKANAEXTENSION */
+ {1234, 2, 262}, /* SMALLKANAEXT */
+ {1042, 2, 263}, /* NUSHU */
+ { 519, 2, 264}, /* DUPLOYAN */
+ {1219, 2, 265}, /* SHORTHANDFORMATCONTROLS */
+ { 300, 2, 266}, /* BYZANTINEMUSICALSYMBOLS */
+ { 299, 2, 266}, /* BYZANTINEMUSIC */
+ { 977, 2, 267}, /* MUSICALSYMBOLS */
+ { 976, 2, 267}, /* MUSIC */
+ { 197, 2, 268}, /* ANCIENTGREEKMUSICALNOTATION */
+ { 196, 2, 268}, /* ANCIENTGREEKMUSIC */
+ { 922, 2, 269}, /* MAYANNUMERALS */
+ {1309, 2, 270}, /* TAIXUANJINGSYMBOLS */
+ {1308, 2, 270}, /* TAIXUANJING */
+ { 449, 2, 271}, /* COUNTINGRODNUMERALS */
+ { 448, 2, 271}, /* COUNTINGROD */
+ { 918, 2, 272}, /* MATHEMATICALALPHANUMERICSYMBOLS */
+ { 917, 2, 272}, /* MATHALPHANUM */
+ {1284, 2, 273}, /* SUTTONSIGNWRITING */
+ { 616, 2, 274}, /* GLAGOLITICSUPPLEMENT */
+ { 615, 2, 274}, /* GLAGOLITICSUP */
+ {1045, 2, 275}, /* NYIAKENGPUACHUEHMONG */
+ {1394, 2, 276}, /* WANCHO */
+ { 936, 2, 277}, /* MENDEKIKAKUI */
+ { 170, 2, 278}, /* ADLAM */
+ { 712, 2, 279}, /* INDICSIYAQNUMBERS */
+ {1093, 2, 280}, /* OTTOMANSIYAQNUMBERS */
+ { 208, 2, 281}, /* ARABICMATHEMATICALALPHABETICSYMBOLS */
+ { 207, 2, 281}, /* ARABICMATH */
+ { 865, 2, 282}, /* MAHJONGTILES */
+ { 864, 2, 282}, /* MAHJONG */
+ { 510, 2, 283}, /* DOMINOTILES */
+ { 509, 2, 283}, /* DOMINO */
+ {1131, 2, 284}, /* PLAYINGCARDS */
+ { 549, 2, 285}, /* ENCLOSEDALPHANUMERICSUPPLEMENT */
+ { 550, 2, 285}, /* ENCLOSEDALPHANUMSUP */
+ { 554, 2, 286}, /* ENCLOSEDIDEOGRAPHICSUPPLEMENT */
+ { 553, 2, 286}, /* ENCLOSEDIDEOGRAPHICSUP */
+ { 951, 2, 287}, /* MISCELLANEOUSSYMBOLSANDPICTOGRAPHS */
+ { 955, 2, 287}, /* MISCPICTOGRAPHS */
+ { 544, 2, 288}, /* EMOTICONS */
+ {1073, 2, 289}, /* ORNAMENTALDINGBATS */
+ {1355, 2, 290}, /* TRANSPORTANDMAPSYMBOLS */
+ {1354, 2, 290}, /* TRANSPORTANDMAP */
+ { 184, 2, 291}, /* ALCHEMICALSYMBOLS */
+ { 183, 2, 291}, /* ALCHEMICAL */
+ { 605, 2, 292}, /* GEOMETRICSHAPESEXTENDED */
+ { 604, 2, 292}, /* GEOMETRICSHAPESEXT */
+ {1273, 2, 293}, /* SUPPLEMENTALARROWSC */
+ {1266, 2, 293}, /* SUPARROWSC */
+ {1276, 2, 294}, /* SUPPLEMENTALSYMBOLSANDPICTOGRAPHS */
+ {1282, 2, 294}, /* SUPSYMBOLSANDPICTOGRAPHS */
+ { 370, 2, 295}, /* CHESSSYMBOLS */
+ {1292, 2, 296}, /* SYMBOLSANDPICTOGRAPHSEXTENDEDA */
+ {1291, 2, 296}, /* SYMBOLSANDPICTOGRAPHSEXTA */
+ {1293, 2, 297}, /* SYMBOLSFORLEGACYCOMPUTING */
+ { 399, 2, 298}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONB */
+ { 386, 2, 298}, /* CJKEXTB */
+ { 400, 2, 299}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONC */
+ { 387, 2, 299}, /* CJKEXTC */
+ { 401, 2, 300}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIOND */
+ { 388, 2, 300}, /* CJKEXTD */
+ { 402, 2, 301}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONE */
+ { 389, 2, 301}, /* CJKEXTE */
+ { 403, 2, 302}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONF */
+ { 390, 2, 302}, /* CJKEXTF */
+ { 382, 2, 303}, /* CJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT */
+ { 384, 2, 303}, /* CJKCOMPATIDEOGRAPHSSUP */
+ { 404, 2, 304}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONG */
+ { 391, 2, 304}, /* CJKEXTG */
+ {1303, 2, 305}, /* TAGS */
+ {1377, 2, 306}, /* VARIATIONSELECTORSSUPPLEMENT */
+ {1392, 2, 306}, /* VSSUP */
+ {1277, 2, 307}, /* SUPPLEMENTARYPRIVATEUSEAREAA */
+ {1279, 2, 307}, /* SUPPUAA */
+ {1278, 2, 308}, /* SUPPLEMENTARYPRIVATEUSEAREAB */
+ {1280, 2, 308}, /* SUPPUAB */
+ {1027, 3, 0}, /* NOTREORDERED */
+ { 1, 3, 0}, /* 0 */
+ {1028, 3, 0}, /* NR */
+ { 167, 3, 1}, /* ABOVE */
+ { 75, 3, 1}, /* 230 */
+ { 166, 3, 1}, /* A */
+ { 169, 3, 2}, /* ABOVERIGHT */
+ { 76, 3, 2}, /* 232 */
+ { 201, 3, 2}, /* AR */
+ { 253, 3, 3}, /* BELOW */
+ { 69, 3, 3}, /* 220 */
+ { 236, 3, 3}, /* B */
+ { 230, 3, 4}, /* ATTACHEDABOVERIGHT */
+ { 65, 3, 4}, /* 216 */
+ { 225, 3, 4}, /* ATAR */
+ { 231, 3, 5}, /* ATTACHEDBELOW */
+ { 62, 3, 5}, /* 202 */
+ { 226, 3, 5}, /* ATB */
+ {1096, 3, 6}, /* OVERLAY */
+ { 2, 3, 6}, /* 1 */
+ {1095, 3, 6}, /* OV */
+ { 726, 3, 7}, /* IOTASUBSCRIPT */
+ { 80, 3, 7}, /* 240 */
+ { 729, 3, 7}, /* IS */
+ { 512, 3, 8}, /* DOUBLEBELOW */
+ { 77, 3, 8}, /* 233 */
+ { 483, 3, 8}, /* DB */
+ { 511, 3, 9}, /* DOUBLEABOVE */
+ { 78, 3, 9}, /* 234 */
+ { 478, 3, 9}, /* DA */
+ { 255, 3, 10}, /* BELOWRIGHT */
+ { 70, 3, 10}, /* 222 */
+ { 283, 3, 10}, /* BR */
+ { 168, 3, 11}, /* ABOVELEFT */
+ { 73, 3, 11}, /* 228 */
+ { 181, 3, 11}, /* AL */
+ { 321, 3, 12}, /* CCC10 */
+ { 21, 3, 12}, /* 10 */
+ { 324, 3, 13}, /* CCC11 */
+ { 33, 3, 13}, /* 11 */
+ { 326, 3, 14}, /* CCC12 */
+ { 37, 3, 14}, /* 12 */
+ { 329, 3, 15}, /* CCC13 */
+ { 40, 3, 15}, /* 13 */
+ { 333, 3, 16}, /* CCC14 */
+ { 45, 3, 16}, /* 14 */
+ { 334, 3, 17}, /* CCC15 */
+ { 46, 3, 17}, /* 15 */
+ { 335, 3, 18}, /* CCC16 */
+ { 48, 3, 18}, /* 16 */
+ { 336, 3, 19}, /* CCC17 */
+ { 49, 3, 19}, /* 17 */
+ { 337, 3, 20}, /* CCC18 */
+ { 51, 3, 20}, /* 18 */
+ { 338, 3, 21}, /* CCC19 */
+ { 52, 3, 21}, /* 19 */
+ { 339, 3, 22}, /* CCC20 */
+ { 56, 3, 22}, /* 20 */
+ { 340, 3, 23}, /* CCC21 */
+ { 63, 3, 23}, /* 21 */
+ { 341, 3, 24}, /* CCC22 */
+ { 68, 3, 24}, /* 22 */
+ { 342, 3, 25}, /* CCC23 */
+ { 74, 3, 25}, /* 23 */
+ { 343, 3, 26}, /* CCC24 */
+ { 79, 3, 26}, /* 24 */
+ { 344, 3, 27}, /* CCC25 */
+ { 81, 3, 27}, /* 25 */
+ { 349, 3, 28}, /* CCC30 */
+ { 95, 3, 28}, /* 30 */
+ { 350, 3, 29}, /* CCC31 */
+ { 100, 3, 29}, /* 31 */
+ { 351, 3, 30}, /* CCC32 */
+ { 101, 3, 30}, /* 32 */
+ { 346, 3, 31}, /* CCC27 */
+ { 83, 3, 31}, /* 27 */
+ { 347, 3, 32}, /* CCC28 */
+ { 84, 3, 32}, /* 28 */
+ { 348, 3, 33}, /* CCC29 */
+ { 85, 3, 33}, /* 29 */
+ { 352, 3, 34}, /* CCC33 */
+ { 102, 3, 34}, /* 33 */
+ { 353, 3, 35}, /* CCC34 */
+ { 103, 3, 35}, /* 34 */
+ { 354, 3, 36}, /* CCC35 */
+ { 104, 3, 36}, /* 35 */
+ { 355, 3, 37}, /* CCC36 */
+ { 105, 3, 37}, /* 36 */
+ {1034, 3, 38}, /* NUKTA */
+ { 142, 3, 38}, /* 7 */
+ {1011, 3, 38}, /* NK */
+ {1383, 3, 39}, /* VIRAMA */
+ { 158, 3, 39}, /* 9 */
+ {1390, 3, 39}, /* VR */
+ { 356, 3, 40}, /* CCC84 */
+ { 157, 3, 40}, /* 84 */
+ { 357, 3, 41}, /* CCC91 */
+ { 165, 3, 41}, /* 91 */
+ { 322, 3, 42}, /* CCC103 */
+ { 31, 3, 42}, /* 103 */
+ { 323, 3, 43}, /* CCC107 */
+ { 32, 3, 43}, /* 107 */
+ { 325, 3, 44}, /* CCC118 */
+ { 36, 3, 44}, /* 118 */
+ { 327, 3, 45}, /* CCC122 */
+ { 38, 3, 45}, /* 122 */
+ { 328, 3, 46}, /* CCC129 */
+ { 39, 3, 46}, /* 129 */
+ { 330, 3, 47}, /* CCC130 */
+ { 42, 3, 47}, /* 130 */
+ { 331, 3, 48}, /* CCC132 */
+ { 43, 3, 48}, /* 132 */
+ { 229, 3, 49}, /* ATTACHEDABOVE */
+ { 64, 3, 49}, /* 214 */
+ { 224, 3, 49}, /* ATA */
+ { 254, 3, 50}, /* BELOWLEFT */
+ { 67, 3, 50}, /* 218 */
+ { 268, 3, 50}, /* BL */
+ { 811, 3, 51}, /* LEFT */
+ { 71, 3, 51}, /* 224 */
+ { 783, 3, 51}, /* L */
+ { 757, 3, 52}, /* KANAVOICING */
+ { 151, 3, 52}, /* 8 */
+ { 782, 3, 52}, /* KV */
+ { 345, 3, 53}, /* CCC26 */
+ { 82, 3, 53}, /* 26 */
+ { 667, 3, 54}, /* HANREADING */
+ { 136, 3, 54}, /* 6 */
+ { 666, 3, 54}, /* HANR */
+ {1172, 3, 55}, /* RIGHT */
+ { 72, 3, 55}, /* 226 */
+ {1164, 3, 55}, /* R */
+ { 332, 3, 56}, /* CCC133 */
+ { 44, 3, 56}, /* 133 */
+ { 232, 3, 57}, /* ATTACHEDBELOWLEFT */
+ { 57, 3, 57}, /* 200 */
+ { 227, 3, 57}, /* ATBL */
+ {1020, 4, 0}, /* NONE */
+ {1017, 4, 1}, /* NOBREAK */
+ { 994, 4, 1}, /* NB */
+ { 424, 4, 2}, /* COMPAT */
+ { 413, 4, 2}, /* COM */
+ {1267, 4, 3}, /* SUPER */
+ {1263, 4, 3}, /* SUP */
+ { 592, 4, 4}, /* FRACTION */
+ { 591, 4, 4}, /* FRA */
+ { 307, 4, 5}, /* CANONICAL */
+ { 304, 4, 5}, /* CAN */
+ {1258, 4, 6}, /* SUB */
+ { 589, 4, 7}, /* FONT */
+ { 374, 4, 8}, /* CIRCLE */
+ { 546, 4, 8}, /* ENC */
+ {1401, 4, 9}, /* WIDE */
+ {1381, 4, 10}, /* VERTICAL */
+ {1380, 4, 10}, /* VERT */
+ {1254, 4, 11}, /* SQUARE */
+ {1253, 4, 11}, /* SQR */
+ { 731, 4, 12}, /* ISOLATED */
+ { 730, 4, 12}, /* ISO */
+ { 584, 4, 13}, /* FINAL */
+ { 583, 4, 13}, /* FIN */
+ { 717, 4, 14}, /* INITIAL */
+ { 716, 4, 14}, /* INIT */
+ { 930, 4, 15}, /* MEDIAL */
+ { 927, 4, 15}, /* MED */
+ {1231, 4, 16}, /* SMALL */
+ {1236, 4, 16}, /* SML */
+ { 993, 4, 17}, /* NARROW */
+ { 991, 4, 17}, /* NAR */
+ { 998, 5, 0}, /* NEUTRAL */
+ { 984, 5, 0}, /* N */
+ { 993, 5, 1}, /* NARROW */
+ { 986, 5, 1}, /* NA */
+ { 193, 5, 2}, /* AMBIGUOUS */
+ { 166, 5, 2}, /* A */
+ {1401, 5, 3}, /* WIDE */
+ {1393, 5, 3}, /* W */
+ { 649, 5, 4}, /* HALFWIDTH */
+ { 643, 5, 4}, /* H */
+ { 594, 5, 5}, /* FULLWIDTH */
+ { 578, 5, 5}, /* F */
+ {1363, 6, 0}, /* UNASSIGNED */
+ { 410, 6, 0}, /* CN */
+ { 443, 6, 1}, /* CONTROL */
+ { 319, 6, 1}, /* CC */
+ { 411, 6, 1}, /* CNTRL */
+ {1248, 6, 2}, /* SPACESEPARATOR */
+ {1441, 6, 2}, /* ZS */
+ {1090, 6, 3}, /* OTHERPUNCTUATION */
+ {1133, 6, 3}, /* PO */
+ { 457, 6, 4}, /* CURRENCYSYMBOL */
+ {1199, 6, 4}, /* SC */
+ {1069, 6, 5}, /* OPENPUNCTUATION */
+ {1150, 6, 5}, /* PS */
+ { 408, 6, 6}, /* CLOSEPUNCTUATION */
+ {1115, 6, 6}, /* PE */
+ { 921, 6, 7}, /* MATHSYMBOL */
+ {1230, 6, 7}, /* SM */
+ { 482, 6, 8}, /* DASHPUNCTUATION */
+ {1112, 6, 8}, /* PD */
+ { 486, 6, 9}, /* DECIMALNUMBER */
+ { 997, 6, 9}, /* ND */
+ { 504, 6, 9}, /* DIGIT */
+ {1371, 6, 10}, /* UPPERCASELETTER */
+ { 851, 6, 10}, /* LU */
+ { 964, 6, 11}, /* MODIFIERSYMBOL */
+ {1229, 6, 11}, /* SK */
+ { 428, 6, 12}, /* CONNECTORPUNCTUATION */
+ {1110, 6, 12}, /* PC */
+ { 845, 6, 13}, /* LOWERCASELETTER */
+ { 838, 6, 13}, /* LL */
+ {1091, 6, 14}, /* OTHERSYMBOL */
+ {1237, 6, 14}, /* SO */
+ {1085, 6, 15}, /* OTHERLETTER */
+ { 840, 6, 15}, /* LO */
+ { 718, 6, 16}, /* INITIALPUNCTUATION */
+ {1130, 6, 16}, /* PI */
+ { 590, 6, 17}, /* FORMAT */
+ { 358, 6, 17}, /* CF */
+ {1089, 6, 18}, /* OTHERNUMBER */
+ {1015, 6, 18}, /* NO */
+ { 585, 6, 19}, /* FINALPUNCTUATION */
+ {1117, 6, 19}, /* PF */
+ {1342, 6, 20}, /* TITLECASELETTER */
+ { 850, 6, 20}, /* LT */
+ { 962, 6, 21}, /* MODIFIERLETTER */
+ { 839, 6, 21}, /* LM */
+ {1023, 6, 22}, /* NONSPACINGMARK */
+ { 960, 6, 22}, /* MN */
+ { 555, 6, 23}, /* ENCLOSINGMARK */
+ { 926, 6, 23}, /* ME */
+ {1249, 6, 24}, /* SPACINGMARK */
+ { 925, 6, 24}, /* MC */
+ { 822, 6, 25}, /* LETTERNUMBER */
+ {1014, 6, 25}, /* NL */
+ { 834, 6, 26}, /* LINESEPARATOR */
+ {1439, 6, 26}, /* ZL */
+ {1103, 6, 27}, /* PARAGRAPHSEPARATOR */
+ {1440, 6, 27}, /* ZP */
+ {1283, 6, 28}, /* SURROGATE */
+ { 453, 6, 28}, /* CS */
+ {1147, 6, 29}, /* PRIVATEUSE */
+ { 412, 6, 29}, /* CO */
+ {1079, 6, 30}, /* OTHER */
+ { 301, 6, 30}, /* C */
+ { 302, 6, 30}, /* C& */
+ { 820, 6, 31}, /* LETTER */
+ { 783, 6, 31}, /* L */
+ { 784, 6, 31}, /* L& */
+ { 914, 6, 32}, /* MARK */
+ { 860, 6, 32}, /* M */
+ { 419, 6, 32}, /* COMBININGMARK */
+ { 861, 6, 32}, /* M& */
+ {1035, 6, 33}, /* NUMBER */
+ { 984, 6, 33}, /* N */
+ { 985, 6, 33}, /* N& */
+ {1154, 6, 34}, /* PUNCTUATION */
+ {1098, 6, 34}, /* P */
+ {1153, 6, 34}, /* PUNCT */
+ {1099, 6, 34}, /* P& */
+ {1290, 6, 35}, /* SYMBOL */
+ {1188, 6, 35}, /* S */
+ {1189, 6, 35}, /* S& */
+ {1212, 6, 36}, /* SEPARATOR */
+ {1432, 6, 36}, /* Z */
+ {1433, 6, 36}, /* Z& */
+ { 315, 6, 37}, /* CASEDLETTER */
+ { 808, 6, 37}, /* LC */
+ { 222, 6, 38}, /* ASSIGNED */
+ {1079, 7, 0}, /* OTHER */
+ {1416, 7, 0}, /* XX */
+ { 443, 7, 1}, /* CONTROL */
+ { 410, 7, 1}, /* CN */
+ { 823, 7, 2}, /* LF */
+ { 452, 7, 3}, /* CR */
+ { 573, 7, 4}, /* EXTEND */
+ { 570, 7, 4}, /* EX */
+ {1144, 7, 5}, /* PREPEND */
+ {1141, 7, 5}, /* PP */
+ {1249, 7, 6}, /* SPACINGMARK */
+ {1230, 7, 6}, /* SM */
+ { 783, 7, 7}, /* L */
+ {1372, 7, 8}, /* V */
+ {1299, 7, 9}, /* T */
+ {1443, 7, 10}, /* ZWJ */
+ { 852, 7, 11}, /* LV */
+ { 854, 7, 12}, /* LVT */
+ {1166, 7, 13}, /* REGIONALINDICATOR */
+ {1171, 7, 13}, /* RI */
+ { 525, 7, 14}, /* EBASE */
+ { 524, 7, 14}, /* EB */
+ { 526, 7, 15}, /* EBASEGAZ */
+ { 527, 7, 15}, /* EBG */
+ { 538, 7, 16}, /* EMODIFIER */
+ { 536, 7, 16}, /* EM */
+ { 618, 7, 17}, /* GLUEAFTERZWJ */
+ { 597, 7, 17}, /* GAZ */
+ {1026, 8, 0}, /* NOTAPPLICABLE */
+ { 986, 8, 0}, /* NA */
+ { 810, 8, 1}, /* LEADINGJAMO */
+ { 783, 8, 1}, /* L */
+ {1389, 8, 2}, /* VOWELJAMO */
+ {1372, 8, 2}, /* V */
+ {1352, 8, 3}, /* TRAILINGJAMO */
+ {1299, 8, 3}, /* T */
+ { 853, 8, 4}, /* LVSYLLABLE */
+ { 852, 8, 4}, /* LV */
+ { 855, 8, 5}, /* LVTSYLLABLE */
+ { 854, 8, 5}, /* LVT */
+ { 986, 9, 0}, /* NA */
+ {1345, 9, 1}, /* TOP */
+ {1172, 9, 2}, /* RIGHT */
+ { 278, 9, 3}, /* BOTTOM */
+ { 811, 9, 4}, /* LEFT */
+ { 812, 9, 5}, /* LEFTANDRIGHT */
+ {1351, 9, 6}, /* TOPANDRIGHT */
+ {1349, 9, 7}, /* TOPANDLEFT */
+ {1350, 9, 8}, /* TOPANDLEFTANDRIGHT */
+ {1346, 9, 9}, /* TOPANDBOTTOM */
+ {1385, 9, 10}, /* VISUALORDERLEFT */
+ {1347, 9, 11}, /* TOPANDBOTTOMANDLEFT */
+ { 280, 9, 12}, /* BOTTOMANDRIGHT */
+ {1348, 9, 13}, /* TOPANDBOTTOMANDRIGHT */
+ {1097, 9, 14}, /* OVERSTRUCK */
+ { 279, 9, 15}, /* BOTTOMANDLEFT */
+ {1079, 10, 0}, /* OTHER */
+ { 436, 10, 1}, /* CONSONANTPLACEHOLDER */
+ {1035, 10, 2}, /* NUMBER */
+ {1287, 10, 3}, /* SYLLABLEMODIFIER */
+ { 266, 10, 4}, /* BINDU */
+ {1384, 10, 5}, /* VISARGA */
+ {1388, 10, 6}, /* VOWELINDEPENDENT */
+ { 429, 10, 7}, /* CONSONANT */
+ {1387, 10, 8}, /* VOWELDEPENDENT */
+ {1034, 10, 9}, /* NUKTA */
+ { 233, 10, 10}, /* AVAGRAHA */
+ {1383, 10, 11}, /* VIRAMA */
+ { 310, 10, 12}, /* CANTILLATIONMARK */
+ { 430, 10, 13}, /* CONSONANTDEAD */
+ { 600, 10, 14}, /* GEMINATIONMARK */
+ { 435, 10, 15}, /* CONSONANTMEDIAL */
+ { 966, 10, 16}, /* MODIFYINGLETTER */
+ { 441, 10, 17}, /* CONSONANTWITHSTACKER */
+ {1155, 10, 18}, /* PUREKILLER */
+ { 437, 10, 19}, /* CONSONANTPRECEDINGREPHA */
+ {1344, 10, 20}, /* TONEMARK */
+ { 434, 10, 21}, /* CONSONANTKILLER */
+ { 432, 10, 22}, /* CONSONANTHEADLETTER */
+ { 439, 10, 23}, /* CONSONANTSUBJOINED */
+ { 725, 10, 24}, /* INVISIBLESTACKER */
+ {1167, 10, 25}, /* REGISTERSHIFTER */
+ { 440, 10, 26}, /* CONSONANTSUCCEEDINGREPHA */
+ { 431, 10, 27}, /* CONSONANTFINAL */
+ {1386, 10, 28}, /* VOWEL */
+ {1343, 10, 29}, /* TONELETTER */
+ { 433, 10, 30}, /* CONSONANTINITIALPOSTFIXED */
+ {1021, 10, 31}, /* NONJOINER */
+ { 743, 10, 32}, /* JOINER */
+ { 286, 10, 33}, /* BRAHMIJOININGNUMBER */
+ {1037, 10, 34}, /* NUMBERJOINER */
+ { 438, 10, 35}, /* CONSONANTPREFIXED */
+ {1018, 11, 0}, /* NOJOININGGROUP */
+ {1418, 11, 1}, /* YEH */
+ { 185, 11, 2}, /* ALEF */
+ {1397, 11, 3}, /* WAW */
+ { 252, 11, 4}, /* BEH */
+ {1325, 11, 5}, /* TEHMARBUTA */
+ { 646, 11, 6}, /* HAH */
+ { 479, 11, 7}, /* DAL */
+ {1168, 11, 8}, /* REH */
+ {1206, 11, 9}, /* SEEN */
+ {1191, 11, 10}, /* SAD */
+ {1304, 11, 11}, /* TAH */
+ { 180, 11, 12}, /* AIN */
+ { 595, 11, 13}, /* GAF */
+ { 580, 11, 14}, /* FARSIYEH */
+ { 582, 11, 15}, /* FEH */
+ {1158, 11, 16}, /* QAF */
+ { 749, 11, 17}, /* KAF */
+ { 785, 11, 18}, /* LAM */
+ { 931, 11, 19}, /* MEEM */
+ {1025, 11, 20}, /* NOON */
+ { 675, 11, 21}, /* HEH */
+ {1285, 11, 22}, /* SWASHKAF */
+ {1044, 11, 23}, /* NYA */
+ { 780, 11, 24}, /* KNOTTEDHEH */
+ { 676, 11, 25}, /* HEHGOAL */
+ { 651, 11, 26}, /* HAMZAONHEHGOAL */
+ {1326, 11, 26}, /* TEHMARBUTAGOAL */
+ {1420, 11, 27}, /* YEHWITHTAIL */
+ {1419, 11, 28}, /* YEHBARREE */
+ { 182, 11, 29}, /* ALAPH */
+ { 258, 11, 30}, /* BETH */
+ { 596, 11, 31}, /* GAMAL */
+ { 480, 11, 32}, /* DALATHRISH */
+ { 671, 11, 33}, /* HE */
+ {1298, 11, 34}, /* SYRIACWAW */
+ {1434, 11, 35}, /* ZAIN */
+ { 677, 11, 36}, /* HETH */
+ {1331, 11, 37}, /* TETH */
+ {1430, 11, 38}, /* YUDH */
+ {1431, 11, 39}, /* YUDHHE */
+ { 762, 11, 40}, /* KAPH */
+ { 786, 11, 41}, /* LAMADH */
+ { 945, 11, 42}, /* MIM */
+ {1041, 11, 43}, /* NUN */
+ {1208, 11, 44}, /* SEMKATH */
+ { 586, 11, 45}, /* FINALSEMKATH */
+ { 520, 11, 46}, /* E */
+ {1115, 11, 47}, /* PE */
+ {1170, 11, 48}, /* REVERSEDPE */
+ {1192, 11, 49}, /* SADHE */
+ {1159, 11, 50}, /* QAPH */
+ {1218, 11, 51}, /* SHIN */
+ {1324, 11, 52}, /* TAW */
+ {1437, 11, 53}, /* ZHAIN */
+ { 768, 11, 54}, /* KHAPH */
+ { 581, 11, 55}, /* FE */
+ { 298, 11, 56}, /* BURUSHASKIYEHBARREE */
+ { 873, 11, 57}, /* MALAYALAMNGA */
+ { 870, 11, 58}, /* MALAYALAMJA */
+ { 876, 11, 59}, /* MALAYALAMNYA */
+ { 879, 11, 60}, /* MALAYALAMTTA */
+ { 874, 11, 61}, /* MALAYALAMNNA */
+ { 875, 11, 62}, /* MALAYALAMNNNA */
+ { 869, 11, 63}, /* MALAYALAMBHA */
+ { 877, 11, 64}, /* MALAYALAMRA */
+ { 871, 11, 65}, /* MALAYALAMLLA */
+ { 872, 11, 66}, /* MALAYALAMLLLA */
+ { 878, 11, 67}, /* MALAYALAMSSA */
+ {1183, 11, 68}, /* ROHINGYAYEH */
+ {1257, 11, 69}, /* STRAIGHTWAW */
+ { 173, 11, 70}, /* AFRICANFEH */
+ { 175, 11, 71}, /* AFRICANQAF */
+ { 174, 11, 72}, /* AFRICANNOON */
+ { 885, 11, 73}, /* MANICHAEANALEPH */
+ { 887, 11, 74}, /* MANICHAEANBETH */
+ { 891, 11, 75}, /* MANICHAEANGIMEL */
+ { 888, 11, 76}, /* MANICHAEANDALETH */
+ { 909, 11, 77}, /* MANICHAEANWAW */
+ { 911, 11, 78}, /* MANICHAEANZAYIN */
+ { 892, 11, 79}, /* MANICHAEANHETH */
+ { 906, 11, 80}, /* MANICHAEANTETH */
+ { 910, 11, 81}, /* MANICHAEANYODH */
+ { 894, 11, 82}, /* MANICHAEANKAPH */
+ { 895, 11, 83}, /* MANICHAEANLAMEDH */
+ { 889, 11, 84}, /* MANICHAEANDHAMEDH */
+ { 907, 11, 85}, /* MANICHAEANTHAMEDH */
+ { 896, 11, 86}, /* MANICHAEANMEM */
+ { 897, 11, 87}, /* MANICHAEANNUN */
+ { 903, 11, 88}, /* MANICHAEANSAMEKH */
+ { 886, 11, 89}, /* MANICHAEANAYIN */
+ { 899, 11, 90}, /* MANICHAEANPE */
+ { 902, 11, 91}, /* MANICHAEANSADHE */
+ { 900, 11, 92}, /* MANICHAEANQOPH */
+ { 901, 11, 93}, /* MANICHAEANRESH */
+ { 904, 11, 94}, /* MANICHAEANTAW */
+ { 898, 11, 95}, /* MANICHAEANONE */
+ { 890, 11, 96}, /* MANICHAEANFIVE */
+ { 905, 11, 97}, /* MANICHAEANTEN */
+ { 908, 11, 98}, /* MANICHAEANTWENTY */
+ { 893, 11, 99}, /* MANICHAEANHUNDRED */
+ { 664, 11, 100}, /* HANIFIROHINGYAPA */
+ { 663, 11, 101}, /* HANIFIROHINGYAKINNAYA */
+ {1022, 12, 0}, /* NONJOINING */
+ {1357, 12, 0}, /* U */
+ {1353, 12, 1}, /* TRANSPARENT */
+ {1299, 12, 1}, /* T */
+ { 517, 12, 2}, /* DUALJOINING */
+ { 477, 12, 2}, /* D */
+ {1173, 12, 3}, /* RIGHTJOINING */
+ {1164, 12, 3}, /* R */
+ { 741, 12, 4}, /* JOINCAUSING */
+ { 301, 12, 4}, /* C */
+ { 813, 12, 5}, /* LEFTJOINING */
+ { 783, 12, 5}, /* L */
+ {1367, 13, 0}, /* UNKNOWN */
+ {1416, 13, 0}, /* XX */
+ { 419, 13, 1}, /* COMBININGMARK */
+ { 409, 13, 1}, /* CM */
+ { 290, 13, 2}, /* BREAKAFTER */
+ { 238, 13, 2}, /* BA */
+ { 833, 13, 3}, /* LINEFEED */
+ { 823, 13, 3}, /* LF */
+ { 882, 13, 4}, /* MANDATORYBREAK */
+ { 267, 13, 4}, /* BK */
+ { 313, 13, 5}, /* CARRIAGERETURN */
+ { 452, 13, 5}, /* CR */
+ {1247, 13, 6}, /* SPACE */
+ {1246, 13, 6}, /* SP */
+ { 571, 13, 7}, /* EXCLAMATION */
+ { 570, 13, 7}, /* EX */
+ {1162, 13, 8}, /* QUOTATION */
+ {1161, 13, 8}, /* QU */
+ { 189, 13, 9}, /* ALPHABETIC */
+ { 181, 13, 9}, /* AL */
+ {1143, 13, 10}, /* PREFIXNUMERIC */
+ {1142, 13, 10}, /* PR */
+ {1140, 13, 11}, /* POSTFIXNUMERIC */
+ {1133, 13, 11}, /* PO */
+ {1069, 13, 12}, /* OPENPUNCTUATION */
+ {1068, 13, 12}, /* OP */
+ { 407, 13, 13}, /* CLOSEPARENTHESIS */
+ { 450, 13, 13}, /* CP */
+ { 714, 13, 14}, /* INFIXNUMERIC */
+ { 729, 13, 14}, /* IS */
+ { 693, 13, 15}, /* HYPHEN */
+ { 692, 13, 15}, /* HY */
+ { 293, 13, 16}, /* BREAKSYMBOLS */
+ {1286, 13, 16}, /* SY */
+ {1038, 13, 17}, /* NUMERIC */
+ {1033, 13, 17}, /* NU */
+ { 408, 13, 18}, /* CLOSEPUNCTUATION */
+ { 405, 13, 18}, /* CL */
+ {1002, 13, 19}, /* NEXTLINE */
+ {1014, 13, 19}, /* NL */
+ { 617, 13, 20}, /* GLUE */
+ { 612, 13, 20}, /* GL */
+ { 193, 13, 21}, /* AMBIGUOUS */
+ { 179, 13, 21}, /* AI */
+ { 291, 13, 22}, /* BREAKBEFORE */
+ { 250, 13, 22}, /* BB */
+ { 674, 13, 23}, /* HEBREWLETTER */
+ { 685, 13, 23}, /* HL */
+ { 426, 13, 24}, /* COMPLEXCONTEXT */
+ {1190, 13, 24}, /* SA */
+ { 739, 13, 25}, /* JL */
+ { 747, 13, 26}, /* JV */
+ { 746, 13, 27}, /* JT */
+ {1024, 13, 28}, /* NONSTARTER */
+ {1029, 13, 28}, /* NS */
+ {1444, 13, 29}, /* ZWSPACE */
+ {1442, 13, 29}, /* ZW */
+ {1443, 13, 30}, /* ZWJ */
+ { 292, 13, 31}, /* BREAKBOTH */
+ { 237, 13, 31}, /* B2 */
+ { 723, 13, 32}, /* INSEPARABLE */
+ { 709, 13, 32}, /* IN */
+ { 724, 13, 32}, /* INSEPERABLE */
+ {1405, 13, 33}, /* WORDJOINER */
+ {1402, 13, 33}, /* WJ */
+ { 698, 13, 34}, /* IDEOGRAPHIC */
+ { 694, 13, 34}, /* ID */
+ { 525, 13, 35}, /* EBASE */
+ { 524, 13, 35}, /* EB */
+ { 427, 13, 36}, /* CONDITIONALJAPANESESTARTER */
+ { 375, 13, 36}, /* CJ */
+ { 644, 13, 37}, /* H2 */
+ { 645, 13, 38}, /* H3 */
+ {1283, 13, 39}, /* SURROGATE */
+ {1213, 13, 39}, /* SG */
+ { 442, 13, 40}, /* CONTINGENTBREAK */
+ { 318, 13, 40}, /* CB */
+ {1166, 13, 41}, /* REGIONALINDICATOR */
+ {1171, 13, 41}, /* RI */
+ { 538, 13, 42}, /* EMODIFIER */
+ { 536, 13, 42}, /* EM */
+ {1015, 14, 0}, /* NO */
+ { 984, 14, 0}, /* N */
+ {1421, 14, 1}, /* YES */
+ {1417, 14, 1}, /* Y */
+ { 923, 14, 2}, /* MAYBE */
+ { 860, 14, 2}, /* M */
+ {1015, 15, 0}, /* NO */
+ { 984, 15, 0}, /* N */
+ {1421, 15, 1}, /* YES */
+ {1417, 15, 1}, /* Y */
+ {1020, 16, 0}, /* NONE */
+ { 485, 16, 1}, /* DECIMAL */
+ { 484, 16, 1}, /* DE */
+ { 504, 16, 2}, /* DIGIT */
+ { 496, 16, 2}, /* DI */
+ {1038, 16, 3}, /* NUMERIC */
+ {1033, 16, 3}, /* NU */
+ { 988, 17, 0}, /* NAN */
+ { 1, 17, 1}, /* 0 */
+ { 2, 17, 2}, /* 1 */
+ { 53, 17, 3}, /* 2 */
+ { 86, 17, 4}, /* 3 */
+ { 109, 17, 5}, /* 4 */
+ { 126, 17, 6}, /* 5 */
+ { 136, 17, 7}, /* 6 */
+ { 142, 17, 8}, /* 7 */
+ { 151, 17, 9}, /* 8 */
+ { 158, 17, 10}, /* 9 */
+ { 12, 17, 11}, /* 1/4 */
+ { 7, 17, 12}, /* 1/2 */
+ { 90, 17, 13}, /* 3/4 */
+ { 5, 17, 14}, /* 1/16 */
+ { 18, 17, 15}, /* 1/8 */
+ { 87, 17, 16}, /* 3/16 */
+ { 48, 17, 17}, /* 16 */
+ { 21, 17, 18}, /* 10 */
+ { 22, 17, 19}, /* 100 */
+ { 23, 17, 20}, /* 1000 */
+ { 6, 17, 21}, /* 1/160 */
+ { 13, 17, 22}, /* 1/40 */
+ { 94, 17, 23}, /* 3/80 */
+ { 8, 17, 24}, /* 1/20 */
+ { 3, 17, 25}, /* 1/10 */
+ { 89, 17, 26}, /* 3/20 */
+ { 14, 17, 27}, /* 1/5 */
+ { 88, 17, 28}, /* 3/2 */
+ { 128, 17, 29}, /* 5/2 */
+ { 144, 17, 30}, /* 7/2 */
+ { 159, 17, 31}, /* 9/2 */
+ { 35, 17, 32}, /* 11/2 */
+ { 41, 17, 33}, /* 13/2 */
+ { 47, 17, 34}, /* 15/2 */
+ { 50, 17, 35}, /* 17/2 */
+ { 0, 17, 36}, /* -1/2 */
+ { 56, 17, 37}, /* 20 */
+ { 95, 17, 38}, /* 30 */
+ { 111, 17, 39}, /* 40 */
+ { 131, 17, 40}, /* 50 */
+ { 137, 17, 41}, /* 60 */
+ { 146, 17, 42}, /* 70 */
+ { 152, 17, 43}, /* 80 */
+ { 160, 17, 44}, /* 90 */
+ { 24, 17, 45}, /* 10000 */
+ { 49, 17, 46}, /* 17 */
+ { 51, 17, 47}, /* 18 */
+ { 52, 17, 48}, /* 19 */
+ { 17, 17, 49}, /* 1/7 */
+ { 20, 17, 50}, /* 1/9 */
+ { 9, 17, 51}, /* 1/3 */
+ { 54, 17, 52}, /* 2/3 */
+ { 55, 17, 53}, /* 2/5 */
+ { 91, 17, 54}, /* 3/5 */
+ { 110, 17, 55}, /* 4/5 */
+ { 15, 17, 56}, /* 1/6 */
+ { 129, 17, 57}, /* 5/6 */
+ { 93, 17, 58}, /* 3/8 */
+ { 130, 17, 59}, /* 5/8 */
+ { 145, 17, 60}, /* 7/8 */
+ { 33, 17, 61}, /* 11 */
+ { 37, 17, 62}, /* 12 */
+ { 132, 17, 63}, /* 500 */
+ { 133, 17, 64}, /* 5000 */
+ { 134, 17, 65}, /* 50000 */
+ { 25, 17, 66}, /* 100000 */
+ { 40, 17, 67}, /* 13 */
+ { 45, 17, 68}, /* 14 */
+ { 46, 17, 69}, /* 15 */
+ { 63, 17, 70}, /* 21 */
+ { 68, 17, 71}, /* 22 */
+ { 74, 17, 72}, /* 23 */
+ { 79, 17, 73}, /* 24 */
+ { 81, 17, 74}, /* 25 */
+ { 82, 17, 75}, /* 26 */
+ { 83, 17, 76}, /* 27 */
+ { 84, 17, 77}, /* 28 */
+ { 85, 17, 78}, /* 29 */
+ { 100, 17, 79}, /* 31 */
+ { 101, 17, 80}, /* 32 */
+ { 102, 17, 81}, /* 33 */
+ { 103, 17, 82}, /* 34 */
+ { 104, 17, 83}, /* 35 */
+ { 105, 17, 84}, /* 36 */
+ { 106, 17, 85}, /* 37 */
+ { 107, 17, 86}, /* 38 */
+ { 108, 17, 87}, /* 39 */
+ { 116, 17, 88}, /* 41 */
+ { 117, 17, 89}, /* 42 */
+ { 118, 17, 90}, /* 43 */
+ { 120, 17, 91}, /* 44 */
+ { 121, 17, 92}, /* 45 */
+ { 122, 17, 93}, /* 46 */
+ { 123, 17, 94}, /* 47 */
+ { 124, 17, 95}, /* 48 */
+ { 125, 17, 96}, /* 49 */
+ { 28, 17, 97}, /* 100000000 */
+ { 30, 17, 98}, /* 1000000000000 */
+ { 57, 17, 99}, /* 200 */
+ { 96, 17, 100}, /* 300 */
+ { 112, 17, 101}, /* 400 */
+ { 138, 17, 102}, /* 600 */
+ { 147, 17, 103}, /* 700 */
+ { 153, 17, 104}, /* 800 */
+ { 161, 17, 105}, /* 900 */
+ { 58, 17, 106}, /* 2000 */
+ { 97, 17, 107}, /* 3000 */
+ { 113, 17, 108}, /* 4000 */
+ { 139, 17, 109}, /* 6000 */
+ { 148, 17, 110}, /* 7000 */
+ { 154, 17, 111}, /* 8000 */
+ { 162, 17, 112}, /* 9000 */
+ { 59, 17, 113}, /* 20000 */
+ { 98, 17, 114}, /* 30000 */
+ { 114, 17, 115}, /* 40000 */
+ { 140, 17, 116}, /* 60000 */
+ { 149, 17, 117}, /* 70000 */
+ { 155, 17, 118}, /* 80000 */
+ { 163, 17, 119}, /* 90000 */
+ { 34, 17, 120}, /* 11/12 */
+ { 60, 17, 121}, /* 200000 */
+ { 99, 17, 122}, /* 300000 */
+ { 115, 17, 123}, /* 400000 */
+ { 135, 17, 124}, /* 500000 */
+ { 141, 17, 125}, /* 600000 */
+ { 150, 17, 126}, /* 700000 */
+ { 156, 17, 127}, /* 800000 */
+ { 164, 17, 128}, /* 900000 */
+ { 4, 17, 129}, /* 1/12 */
+ { 127, 17, 130}, /* 5/12 */
+ { 143, 17, 131}, /* 7/12 */
+ { 11, 17, 132}, /* 1/320 */
+ { 19, 17, 133}, /* 1/80 */
+ { 16, 17, 134}, /* 1/64 */
+ { 10, 17, 135}, /* 1/32 */
+ { 92, 17, 136}, /* 3/64 */
+ { 66, 17, 137}, /* 216000 */
+ { 119, 17, 138}, /* 432000 */
+ { 26, 17, 139}, /* 1000000 */
+ { 29, 17, 140}, /* 10000000000 */
+ { 27, 17, 141}, /* 10000000 */
+ { 61, 17, 142}, /* 20000000 */
+ {1367, 18, 0}, /* UNKNOWN */
+ {1446, 18, 0}, /* ZZZZ */
+ { 421, 18, 1}, /* COMMON */
+ {1445, 18, 1}, /* ZYYY */
+ { 790, 18, 2}, /* LATIN */
+ { 806, 18, 2}, /* LATN */
+ { 275, 18, 3}, /* BOPOMOFO */
+ { 274, 18, 3}, /* BOPO */
+ { 715, 18, 4}, /* INHERITED */
+ {1438, 18, 4}, /* ZINH */
+ {1157, 18, 4}, /* QAAI */
+ { 631, 18, 5}, /* GREEK */
+ { 635, 18, 5}, /* GREK */
+ { 446, 18, 6}, /* COPTIC */
+ { 445, 18, 6}, /* COPT */
+ {1156, 18, 6}, /* QAAC */
+ { 466, 18, 7}, /* CYRILLIC */
+ { 476, 18, 7}, /* CYRL */
+ { 216, 18, 8}, /* ARMENIAN */
+ { 218, 18, 8}, /* ARMN */
+ { 673, 18, 9}, /* HEBREW */
+ { 672, 18, 9}, /* HEBR */
+ { 203, 18, 10}, /* ARABIC */
+ { 202, 18, 10}, /* ARAB */
+ {1295, 18, 11}, /* SYRIAC */
+ {1294, 18, 11}, /* SYRC */
+ {1335, 18, 12}, /* THAANA */
+ {1334, 18, 12}, /* THAA */
+ {1012, 18, 13}, /* NKO */
+ {1013, 18, 13}, /* NKOO */
+ {1193, 18, 14}, /* SAMARITAN */
+ {1194, 18, 14}, /* SAMR */
+ { 881, 18, 15}, /* MANDAIC */
+ { 880, 18, 15}, /* MAND */
+ { 493, 18, 16}, /* DEVANAGARI */
+ { 492, 18, 16}, /* DEVA */
+ { 257, 18, 17}, /* BENGALI */
+ { 256, 18, 17}, /* BENG */
+ { 641, 18, 18}, /* GURMUKHI */
+ { 642, 18, 18}, /* GURU */
+ { 638, 18, 19}, /* GUJARATI */
+ { 639, 18, 19}, /* GUJR */
+ {1071, 18, 20}, /* ORIYA */
+ {1074, 18, 20}, /* ORYA */
+ {1314, 18, 21}, /* TAMIL */
+ {1317, 18, 21}, /* TAML */
+ {1328, 18, 22}, /* TELUGU */
+ {1327, 18, 22}, /* TELU */
+ { 761, 18, 23}, /* KANNADA */
+ { 779, 18, 23}, /* KNDA */
+ { 868, 18, 24}, /* MALAYALAM */
+ { 959, 18, 24}, /* MLYM */
+ {1227, 18, 25}, /* SINHALA */
+ {1226, 18, 25}, /* SINH */
+ {1336, 18, 26}, /* THAI */
+ { 788, 18, 27}, /* LAO */
+ { 789, 18, 27}, /* LAOO */
+ {1337, 18, 28}, /* TIBETAN */
+ {1338, 18, 28}, /* TIBT */
+ { 978, 18, 29}, /* MYANMAR */
+ { 983, 18, 29}, /* MYMR */
+ { 607, 18, 30}, /* GEORGIAN */
+ { 606, 18, 30}, /* GEOR */
+ { 654, 18, 31}, /* HANGUL */
+ { 653, 18, 31}, /* HANG */
+ { 560, 18, 32}, /* ETHIOPIC */
+ { 559, 18, 32}, /* ETHI */
+ { 367, 18, 33}, /* CHEROKEE */
+ { 366, 18, 33}, /* CHER */
+ { 305, 18, 34}, /* CANADIANABORIGINAL */
+ { 309, 18, 34}, /* CANS */
+ {1050, 18, 35}, /* OGHAM */
+ {1049, 18, 35}, /* OGAM */
+ {1186, 18, 36}, /* RUNIC */
+ {1187, 18, 36}, /* RUNR */
+ {1300, 18, 37}, /* TAGALOG */
+ {1333, 18, 37}, /* TGLG */
+ { 668, 18, 38}, /* HANUNOO */
+ { 665, 18, 38}, /* HANO */
+ { 297, 18, 39}, /* BUHID */
+ { 296, 18, 39}, /* BUHD */
+ {1302, 18, 40}, /* TAGBANWA */
+ {1301, 18, 40}, /* TAGB */
+ { 772, 18, 41}, /* KHMER */
+ { 774, 18, 41}, /* KHMR */
+ { 968, 18, 42}, /* MONGOLIAN */
+ { 967, 18, 42}, /* MONG */
+ { 825, 18, 43}, /* LIMBU */
+ { 824, 18, 43}, /* LIMB */
+ {1305, 18, 44}, /* TAILE */
+ {1312, 18, 44}, /* TALE */
+ {1001, 18, 45}, /* NEWTAILUE */
+ {1313, 18, 45}, /* TALU */
+ { 295, 18, 46}, /* BUGINESE */
+ { 294, 18, 46}, /* BUGI */
+ {1306, 18, 47}, /* TAITHAM */
+ { 787, 18, 47}, /* LANA */
+ { 240, 18, 48}, /* BALINESE */
+ { 239, 18, 48}, /* BALI */
+ {1260, 18, 49}, /* SUNDANESE */
+ {1259, 18, 49}, /* SUND */
+ { 248, 18, 50}, /* BATAK */
+ { 249, 18, 50}, /* BATK */
+ { 819, 18, 51}, /* LEPCHA */
+ { 818, 18, 51}, /* LEPC */
+ {1054, 18, 52}, /* OLCHIKI */
+ {1055, 18, 52}, /* OLCK */
+ { 288, 18, 53}, /* BRAILLE */
+ { 287, 18, 53}, /* BRAI */
+ { 614, 18, 54}, /* GLAGOLITIC */
+ { 613, 18, 54}, /* GLAG */
+ {1339, 18, 55}, /* TIFINAGH */
+ {1332, 18, 55}, /* TFNG */
+ { 652, 18, 56}, /* HAN */
+ { 661, 18, 56}, /* HANI */
+ { 684, 18, 57}, /* HIRAGANA */
+ { 683, 18, 57}, /* HIRA */
+ { 763, 18, 58}, /* KATAKANA */
+ { 752, 18, 58}, /* KANA */
+ {1424, 18, 59}, /* YI */
+ {1425, 18, 59}, /* YIII */
+ { 835, 18, 60}, /* LISU */
+ {1373, 18, 61}, /* VAI */
+ {1374, 18, 61}, /* VAII */
+ { 242, 18, 62}, /* BAMUM */
+ { 241, 18, 62}, /* BAMU */
+ {1289, 18, 63}, /* SYLOTINAGRI */
+ {1288, 18, 63}, /* SYLO */
+ {1119, 18, 64}, /* PHAGSPA */
+ {1118, 18, 64}, /* PHAG */
+ {1197, 18, 65}, /* SAURASHTRA */
+ {1196, 18, 65}, /* SAUR */
+ { 767, 18, 66}, /* KAYAHLI */
+ { 751, 18, 66}, /* KALI */
+ {1169, 18, 67}, /* REJANG */
+ {1178, 18, 67}, /* RJNG */
+ { 737, 18, 68}, /* JAVANESE */
+ { 736, 18, 68}, /* JAVA */
+ { 360, 18, 69}, /* CHAM */
+ {1307, 18, 70}, /* TAIVIET */
+ {1323, 18, 70}, /* TAVT */
+ { 932, 18, 71}, /* MEETEIMAYEK */
+ { 973, 18, 71}, /* MTEI */
+ { 829, 18, 72}, /* LINEARB */
+ { 827, 18, 72}, /* LINB */
+ { 857, 18, 73}, /* LYCIAN */
+ { 856, 18, 73}, /* LYCI */
+ { 312, 18, 74}, /* CARIAN */
+ { 311, 18, 74}, /* CARI */
+ {1057, 18, 75}, /* OLDITALIC */
+ { 732, 18, 75}, /* ITAL */
+ { 622, 18, 76}, /* GOTHIC */
+ { 621, 18, 76}, /* GOTH */
+ {1059, 18, 77}, /* OLDPERMIC */
+ {1116, 18, 77}, /* PERM */
+ {1361, 18, 78}, /* UGARITIC */
+ {1360, 18, 78}, /* UGAR */
+ {1060, 18, 79}, /* OLDPERSIAN */
+ {1414, 18, 79}, /* XPEO */
+ { 491, 18, 80}, /* DESERET */
+ { 515, 18, 80}, /* DSRT */
+ {1216, 18, 81}, /* SHAVIAN */
+ {1217, 18, 81}, /* SHAW */
+ {1078, 18, 82}, /* OSMANYA */
+ {1077, 18, 82}, /* OSMA */
+ {1075, 18, 83}, /* OSAGE */
+ {1076, 18, 83}, /* OSGE */
+ { 533, 18, 84}, /* ELBASAN */
+ { 532, 18, 84}, /* ELBA */
+ { 317, 18, 85}, /* CAUCASIANALBANIAN */
+ { 176, 18, 85}, /* AGHB */
+ { 828, 18, 86}, /* LINEARA */
+ { 826, 18, 86}, /* LINA */
+ { 464, 18, 87}, /* CYPRIOT */
+ { 451, 18, 87}, /* CPRT */
+ { 708, 18, 88}, /* IMPERIALARAMAIC */
+ { 217, 18, 88}, /* ARMI */
+ {1102, 18, 89}, /* PALMYRENE */
+ {1101, 18, 89}, /* PALM */
+ { 987, 18, 90}, /* NABATAEAN */
+ { 995, 18, 90}, /* NBAT */
+ { 670, 18, 91}, /* HATRAN */
+ { 669, 18, 91}, /* HATR */
+ {1125, 18, 92}, /* PHOENICIAN */
+ {1124, 18, 92}, /* PHNX */
+ { 859, 18, 93}, /* LYDIAN */
+ { 858, 18, 93}, /* LYDI */
+ { 940, 18, 94}, /* MEROITICHIEROGLYPHS */
+ { 938, 18, 94}, /* MERO */
+ { 939, 18, 95}, /* MEROITICCURSIVE */
+ { 937, 18, 95}, /* MERC */
+ { 770, 18, 96}, /* KHAROSHTHI */
+ { 769, 18, 96}, /* KHAR */
+ {1062, 18, 97}, /* OLDSOUTHARABIAN */
+ {1195, 18, 97}, /* SARB */
+ {1058, 18, 98}, /* OLDNORTHARABIAN */
+ { 992, 18, 98}, /* NARB */
+ { 884, 18, 99}, /* MANICHAEAN */
+ { 883, 18, 99}, /* MANI */
+ { 234, 18, 100}, /* AVESTAN */
+ { 235, 18, 100}, /* AVST */
+ { 722, 18, 101}, /* INSCRIPTIONALPARTHIAN */
+ {1149, 18, 101}, /* PRTI */
+ { 721, 18, 102}, /* INSCRIPTIONALPAHLAVI */
+ {1122, 18, 102}, /* PHLI */
+ {1151, 18, 103}, /* PSALTERPAHLAVI */
+ {1123, 18, 103}, /* PHLP */
+ {1063, 18, 104}, /* OLDTURKIC */
+ {1072, 18, 104}, /* ORKH */
+ {1056, 18, 105}, /* OLDHUNGARIAN */
+ { 691, 18, 105}, /* HUNG */
+ { 662, 18, 106}, /* HANIFIROHINGYA */
+ {1182, 18, 106}, /* ROHG */
+ {1423, 18, 107}, /* YEZIDI */
+ {1422, 18, 107}, /* YEZI */
+ {1061, 18, 108}, /* OLDSOGDIAN */
+ {1241, 18, 108}, /* SOGO */
+ {1240, 18, 109}, /* SOGDIAN */
+ {1239, 18, 109}, /* SOGD */
+ { 371, 18, 110}, /* CHORASMIAN */
+ { 372, 18, 110}, /* CHRS */
+ { 535, 18, 111}, /* ELYMAIC */
+ { 534, 18, 111}, /* ELYM */
+ { 285, 18, 112}, /* BRAHMI */
+ { 284, 18, 112}, /* BRAH */
+ { 750, 18, 113}, /* KAITHI */
+ { 781, 18, 113}, /* KTHI */
+ {1243, 18, 114}, /* SORASOMPENG */
+ {1242, 18, 114}, /* SORA */
+ { 359, 18, 115}, /* CHAKMA */
+ { 303, 18, 115}, /* CAKM */
+ { 862, 18, 116}, /* MAHAJANI */
+ { 863, 18, 116}, /* MAHJ */
+ {1215, 18, 117}, /* SHARADA */
+ {1220, 18, 117}, /* SHRD */
+ { 776, 18, 118}, /* KHOJKI */
+ { 775, 18, 118}, /* KHOJ */
+ { 975, 18, 119}, /* MULTANI */
+ { 974, 18, 119}, /* MULT */
+ { 777, 18, 120}, /* KHUDAWADI */
+ {1224, 18, 120}, /* SIND */
+ { 624, 18, 121}, /* GRANTHA */
+ { 623, 18, 121}, /* GRAN */
+ { 999, 18, 122}, /* NEWA */
+ {1341, 18, 123}, /* TIRHUTA */
+ {1340, 18, 123}, /* TIRH */
+ {1222, 18, 124}, /* SIDDHAM */
+ {1221, 18, 124}, /* SIDD */
+ { 961, 18, 125}, /* MODI */
+ {1311, 18, 126}, /* TAKRI */
+ {1310, 18, 126}, /* TAKR */
+ { 178, 18, 127}, /* AHOM */
+ { 508, 18, 128}, /* DOGRA */
+ { 507, 18, 128}, /* DOGR */
+ {1396, 18, 129}, /* WARANGCITI */
+ {1395, 18, 129}, /* WARA */
+ { 506, 18, 130}, /* DIVESAKURU */
+ { 503, 18, 130}, /* DIAK */
+ { 990, 18, 131}, /* NANDINAGARI */
+ { 989, 18, 131}, /* NAND */
+ {1435, 18, 132}, /* ZANABAZARSQUARE */
+ {1436, 18, 132}, /* ZANB */
+ {1245, 18, 133}, /* SOYOMBO */
+ {1244, 18, 133}, /* SOYO */
+ {1109, 18, 134}, /* PAUCINHAU */
+ {1108, 18, 134}, /* PAUC */
+ { 259, 18, 135}, /* BHAIKSUKI */
+ { 260, 18, 135}, /* BHKS */
+ { 913, 18, 136}, /* MARCHEN */
+ { 912, 18, 136}, /* MARC */
+ { 915, 18, 137}, /* MASARAMGONDI */
+ { 620, 18, 137}, /* GONM */
+ { 640, 18, 138}, /* GUNJALAGONDI */
+ { 619, 18, 138}, /* GONG */
+ { 867, 18, 139}, /* MAKASAR */
+ { 866, 18, 139}, /* MAKA */
+ { 454, 18, 140}, /* CUNEIFORM */
+ {1415, 18, 140}, /* XSUX */
+ { 531, 18, 141}, /* EGYPTIANHIEROGLYPHS */
+ { 529, 18, 141}, /* EGYP */
+ { 195, 18, 142}, /* ANATOLIANHIEROGLYPHS */
+ { 686, 18, 142}, /* HLUW */
+ { 971, 18, 143}, /* MRO */
+ { 972, 18, 143}, /* MROO */
+ { 247, 18, 144}, /* BASSAVAH */
+ { 246, 18, 144}, /* BASS */
+ {1100, 18, 145}, /* PAHAWHHMONG */
+ { 687, 18, 145}, /* HMNG */
+ { 928, 18, 146}, /* MEDEFAIDRIN */
+ { 929, 18, 146}, /* MEDF */
+ { 941, 18, 147}, /* MIAO */
+ {1132, 18, 147}, /* PLRD */
+ {1319, 18, 148}, /* TANGUT */
+ {1318, 18, 148}, /* TANG */
+ {1042, 18, 149}, /* NUSHU */
+ {1030, 18, 149}, /* NSHU */
+ { 771, 18, 150}, /* KHITANSMALLSCRIPT */
+ { 778, 18, 150}, /* KITS */
+ { 519, 18, 151}, /* DUPLOYAN */
+ { 518, 18, 151}, /* DUPL */
+ {1223, 18, 152}, /* SIGNWRITING */
+ {1214, 18, 152}, /* SGNW */
+ {1045, 18, 153}, /* NYIAKENGPUACHUEHMONG */
+ { 688, 18, 153}, /* HMNP */
+ {1394, 18, 154}, /* WANCHO */
+ {1399, 18, 154}, /* WCHO */
+ { 936, 18, 155}, /* MENDEKIKAKUI */
+ { 935, 18, 155}, /* MEND */
+ { 170, 18, 156}, /* ADLAM */
+ { 171, 18, 156}, /* ADLM */
+ { 765, 18, 157}, /* KATAKANAORHIRAGANA */
+ { 689, 18, 157}, /* HRKT */
+ {1079, 19, 0}, /* OTHER */
+ {1416, 19, 0}, /* XX */
+ {1246, 19, 1}, /* SP */
+ { 823, 19, 2}, /* LF */
+ { 452, 19, 3}, /* CR */
+ {1256, 19, 4}, /* STERM */
+ {1255, 19, 4}, /* ST */
+ { 406, 19, 5}, /* CLOSE */
+ { 405, 19, 5}, /* CL */
+ {1200, 19, 6}, /* SCONTINUE */
+ {1199, 19, 6}, /* SC */
+ { 228, 19, 7}, /* ATERM */
+ { 223, 19, 7}, /* AT */
+ {1038, 19, 8}, /* NUMERIC */
+ {1033, 19, 8}, /* NU */
+ {1369, 19, 9}, /* UPPER */
+ {1368, 19, 9}, /* UP */
+ { 843, 19, 10}, /* LOWER */
+ { 840, 19, 10}, /* LO */
+ {1211, 19, 11}, /* SEP */
+ {1205, 19, 11}, /* SE */
+ { 590, 19, 12}, /* FORMAT */
+ { 588, 19, 12}, /* FO */
+ {1064, 19, 13}, /* OLETTER */
+ { 809, 19, 13}, /* LE */
+ { 573, 19, 14}, /* EXTEND */
+ { 570, 19, 14}, /* EX */
+ {1079, 20, 0}, /* OTHER */
+ {1416, 20, 0}, /* XX */
+ { 823, 20, 1}, /* LF */
+ {1000, 20, 2}, /* NEWLINE */
+ {1014, 20, 2}, /* NL */
+ { 452, 20, 3}, /* CR */
+ {1407, 20, 4}, /* WSEGSPACE */
+ { 513, 20, 5}, /* DOUBLEQUOTE */
+ { 514, 20, 5}, /* DQ */
+ {1225, 20, 6}, /* SINGLEQUOTE */
+ {1252, 20, 6}, /* SQ */
+ { 943, 20, 7}, /* MIDNUM */
+ { 960, 20, 7}, /* MN */
+ { 944, 20, 8}, /* MIDNUMLET */
+ { 924, 20, 8}, /* MB */
+ {1038, 20, 9}, /* NUMERIC */
+ {1033, 20, 9}, /* NU */
+ { 942, 20, 10}, /* MIDLETTER */
+ { 958, 20, 10}, /* ML */
+ { 186, 20, 11}, /* ALETTER */
+ { 809, 20, 11}, /* LE */
+ { 576, 20, 12}, /* EXTENDNUMLET */
+ { 570, 20, 12}, /* EX */
+ { 590, 20, 13}, /* FORMAT */
+ { 588, 20, 13}, /* FO */
+ { 573, 20, 14}, /* EXTEND */
+ { 674, 20, 15}, /* HEBREWLETTER */
+ { 685, 20, 15}, /* HL */
+ {1443, 20, 16}, /* ZWJ */
+ { 763, 20, 17}, /* KATAKANA */
+ { 748, 20, 17}, /* KA */
+ {1166, 20, 18}, /* REGIONALINDICATOR */
+ {1171, 20, 18}, /* RI */
+ { 525, 20, 19}, /* EBASE */
+ { 524, 20, 19}, /* EB */
+ { 526, 20, 20}, /* EBASEGAZ */
+ { 527, 20, 20}, /* EBG */
+ { 538, 20, 21}, /* EMODIFIER */
+ { 536, 20, 21}, /* EM */
+ { 618, 20, 22}, /* GLUEAFTERZWJ */
+ { 597, 20, 22}, /* GAZ */
};
-/* property values: 6272 bytes. */
-
/* Codepoints which expand on full case-folding. */
-
RE_UINT16 re_expand_on_folding[] = {
223, 304, 329, 496, 912, 944, 1415, 7830,
7831, 7832, 7833, 7834, 7838, 8016, 8018, 8020,
@@ -3216,4231 +3254,9697 @@ RE_UINT16 re_expand_on_folding[] = {
8131, 8132, 8134, 8135, 8140, 8146, 8147, 8150,
8151, 8162, 8163, 8164, 8166, 8167, 8178, 8179,
8180, 8182, 8183, 8188, 64256, 64257, 64258, 64259,
- 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279,
+ 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279
};
-/* expand_on_folding: 208 bytes. */
-
-/* General_Category. */
-
-static RE_UINT8 re_general_category_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28,
- 29, 26, 30, 31, 32, 33, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 26, 57, 58, 59, 59, 59, 59, 59, 26, 26, 60, 59, 59, 59, 59, 59,
- 59, 59, 26, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 26, 62, 59, 63, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 64, 26, 65, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 66, 67, 59, 59, 59, 59, 68, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 69, 70, 71, 72, 73, 74, 59, 59,
- 75, 76, 59, 59, 77, 59, 78, 79, 80, 81, 73, 82, 83, 84, 59, 59,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 85, 26, 26, 26, 26, 26, 26, 26, 86, 87, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 88, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 89, 59, 59, 59, 59, 59, 59, 26, 90, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 91, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 92,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 92,
+/* Alphabetic. */
+static RE_UINT8 re_alphabetic_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 10, 39, 10, 10, 40, 10, 41, 42, 43, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 44, 13, 13, 13, 45, 46, 13,
+ 13, 13, 13, 47, 13, 13, 13, 13, 13, 13, 48, 10, 10, 10, 49, 10,
+ 13, 13, 13, 13, 50, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT16 re_general_category_stage_2[] = {
- 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12,
- 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23,
- 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31,
- 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39,
- 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13,
- 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50,
- 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58,
- 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66,
- 48, 67, 68, 69, 48, 70, 71, 72, 72, 72, 48, 73, 72, 74, 75, 32,
- 76, 48, 48, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 83, 84, 91, 92, 93, 94, 95, 96, 97, 84, 98, 99, 100, 88, 101,
- 102, 83, 84, 103, 104, 105, 88, 106, 107, 108, 109, 110, 111, 112, 94, 113,
- 114, 115, 84, 116, 117, 118, 88, 119, 120, 115, 84, 121, 122, 123, 88, 124,
- 125, 115, 48, 126, 127, 128, 88, 129, 130, 131, 48, 132, 133, 134, 94, 135,
- 136, 48, 48, 137, 138, 139, 72, 72, 140, 48, 141, 142, 143, 144, 72, 72,
- 145, 146, 147, 148, 149, 48, 150, 151, 152, 153, 32, 154, 155, 156, 72, 72,
- 48, 48, 157, 158, 159, 160, 161, 162, 163, 164, 9, 9, 165, 11, 11, 166,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 167, 168, 48, 48, 167, 48, 48, 169, 170, 171, 48, 48,
- 48, 170, 48, 48, 48, 172, 173, 174, 48, 175, 9, 9, 9, 9, 9, 176,
- 177, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 178, 48, 179, 180, 48, 48, 48, 48, 181, 182,
- 183, 184, 48, 185, 48, 186, 183, 187, 48, 48, 48, 188, 189, 190, 191, 192,
- 193, 191, 48, 48, 194, 48, 48, 195, 196, 48, 197, 48, 48, 48, 48, 198,
- 48, 199, 200, 201, 202, 48, 203, 204, 48, 48, 205, 48, 206, 207, 208, 208,
- 48, 209, 48, 48, 48, 210, 211, 212, 191, 191, 213, 214, 72, 72, 72, 72,
- 215, 48, 48, 216, 217, 159, 218, 219, 220, 48, 221, 64, 48, 48, 222, 223,
- 48, 48, 224, 225, 226, 64, 48, 227, 228, 9, 9, 229, 230, 231, 232, 233,
- 11, 11, 234, 27, 27, 27, 235, 236, 11, 237, 27, 27, 32, 32, 32, 238,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 239, 13, 13, 13, 13, 13, 13,
- 240, 241, 240, 240, 241, 242, 240, 243, 244, 244, 244, 245, 246, 247, 248, 249,
- 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 260, 72, 261, 262, 263,
- 264, 265, 266, 267, 268, 269, 270, 270, 271, 272, 273, 208, 274, 275, 208, 276,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 278, 208, 279, 208, 208, 208, 208, 280, 208, 281, 277, 282, 208, 283, 284, 208,
- 208, 208, 285, 72, 286, 72, 269, 269, 269, 287, 208, 208, 208, 208, 288, 269,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 289, 290, 208, 208, 291,
- 208, 208, 208, 208, 208, 208, 292, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 293, 294, 269, 295, 208, 208, 296, 277, 297, 277,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 277, 277, 277, 277, 277, 277, 277, 277, 298, 299, 277, 277, 277, 300, 277, 301,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 208, 208, 208, 277, 302, 208, 208, 303, 208, 304, 208, 208, 208, 208, 208, 208,
- 9, 9, 305, 11, 11, 306, 307, 308, 13, 13, 13, 13, 13, 13, 309, 310,
- 11, 11, 311, 48, 48, 48, 312, 313, 48, 314, 315, 315, 315, 315, 32, 32,
- 316, 317, 318, 319, 320, 72, 72, 72, 208, 321, 208, 208, 208, 208, 208, 322,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 323, 72, 324,
- 325, 326, 327, 328, 136, 48, 48, 48, 48, 329, 177, 48, 48, 48, 48, 330,
- 331, 48, 48, 136, 48, 48, 48, 48, 199, 332, 48, 71, 208, 208, 322, 48,
- 208, 333, 334, 208, 335, 336, 208, 208, 334, 208, 208, 336, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 198, 208, 208, 208, 208,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 72,
- 48, 337, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 150, 208, 208, 208, 285, 48, 48, 227,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 338, 48, 339, 72, 13, 13, 340, 341, 13, 342, 48, 48, 48, 48, 343, 344,
- 31, 345, 346, 347, 13, 13, 13, 348, 349, 350, 351, 352, 353, 72, 72, 354,
- 355, 48, 356, 357, 48, 48, 48, 358, 359, 48, 48, 360, 361, 191, 32, 362,
- 64, 48, 363, 48, 364, 365, 48, 150, 76, 48, 48, 366, 367, 368, 369, 370,
- 48, 48, 371, 372, 373, 374, 48, 375, 48, 48, 48, 376, 377, 378, 379, 380,
- 381, 382, 315, 11, 11, 383, 384, 11, 11, 11, 11, 11, 48, 48, 385, 191,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 386, 48, 387, 48, 48, 205,
- 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388,
- 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 203, 48, 48, 48, 48, 48, 48, 206, 72, 72,
- 390, 391, 392, 393, 394, 48, 48, 48, 48, 48, 48, 395, 396, 397, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 398, 72, 48, 48, 48, 48, 399, 48, 48, 400, 72, 72, 401,
- 32, 402, 32, 403, 404, 405, 406, 407, 48, 48, 48, 48, 48, 48, 48, 408,
- 409, 2, 3, 4, 5, 410, 411, 412, 48, 413, 48, 199, 414, 415, 416, 417,
- 418, 48, 171, 419, 203, 203, 72, 72, 48, 48, 48, 48, 48, 48, 48, 71,
- 420, 269, 269, 421, 270, 270, 270, 422, 423, 324, 424, 72, 72, 208, 208, 425,
- 72, 72, 72, 72, 72, 72, 72, 72, 48, 150, 48, 48, 48, 100, 426, 427,
- 48, 48, 428, 48, 429, 48, 48, 430, 48, 431, 48, 48, 432, 433, 72, 72,
- 9, 9, 434, 11, 11, 48, 48, 48, 48, 203, 191, 9, 9, 435, 11, 436,
- 48, 48, 400, 48, 48, 48, 437, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 314, 48, 198, 400, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 438, 48, 48, 439, 48, 440, 48, 441, 48, 199, 442, 72, 72, 72, 48, 443,
- 48, 444, 48, 445, 72, 72, 72, 72, 48, 48, 48, 446, 269, 447, 269, 269,
- 448, 449, 48, 450, 451, 452, 48, 453, 48, 454, 72, 72, 455, 48, 456, 457,
- 48, 48, 48, 458, 48, 459, 48, 460, 48, 461, 462, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 195, 72, 72, 72, 9, 9, 9, 463, 11, 11, 11, 464,
- 48, 48, 465, 191, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 269, 466, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 454, 467, 48, 62, 468, 72, 72, 72, 72, 72, 72, 72, 72, 48, 314,
- 469, 48, 48, 470, 471, 447, 472, 473, 220, 48, 48, 474, 475, 48, 195, 191,
- 476, 48, 477, 478, 479, 48, 48, 480, 220, 48, 48, 481, 482, 483, 484, 485,
- 48, 97, 486, 487, 72, 72, 72, 72, 488, 489, 490, 48, 48, 491, 492, 191,
- 493, 83, 84, 494, 495, 496, 497, 498, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 499, 500, 501, 72, 72, 48, 48, 48, 502, 503, 191, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 504, 505, 506, 507, 72, 72,
- 48, 48, 48, 508, 509, 191, 510, 72, 48, 48, 511, 512, 191, 72, 72, 72,
- 48, 172, 513, 514, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 486, 515, 72, 72, 72, 72, 72, 72, 9, 9, 11, 11, 147, 516,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 517, 48, 48, 518, 519, 72,
- 520, 48, 48, 521, 522, 523, 48, 48, 524, 525, 526, 72, 48, 48, 48, 195,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 84, 48, 504, 527, 528, 147, 174, 529, 48, 530, 531, 532, 72, 72, 72, 72,
- 533, 48, 48, 534, 535, 191, 536, 48, 537, 538, 191, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 539,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 269, 540, 541, 542,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 206, 72, 72, 72, 72, 72, 72,
- 270, 270, 270, 270, 270, 270, 543, 544, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 386, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 199, 545, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 314, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 195, 48, 199, 368, 72, 72, 72, 72, 72, 72, 48, 203, 546,
- 48, 48, 48, 547, 548, 549, 550, 551, 48, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 9, 9, 11, 11, 269, 552, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 553, 554, 555, 555, 556, 557, 72, 72, 72, 72, 558, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 400,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 559,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 199, 72, 72, 72, 559, 560, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 205,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 71, 150, 195, 561, 562, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 323,
- 208, 208, 563, 208, 208, 208, 564, 565, 566, 208, 567, 208, 208, 208, 568, 72,
- 208, 208, 208, 208, 569, 72, 72, 72, 72, 72, 72, 72, 72, 72, 269, 570,
- 208, 208, 208, 208, 208, 285, 269, 451, 72, 72, 72, 72, 72, 72, 72, 72,
- 9, 571, 11, 572, 573, 574, 240, 9, 575, 576, 577, 578, 579, 9, 571, 11,
- 580, 581, 11, 582, 583, 584, 585, 9, 586, 11, 9, 571, 11, 572, 573, 11,
- 240, 9, 575, 585, 9, 586, 11, 9, 571, 11, 587, 9, 588, 589, 590, 591,
- 11, 592, 9, 593, 594, 595, 596, 11, 597, 9, 598, 11, 599, 600, 600, 600,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 32, 32, 32, 601, 32, 32, 602, 603, 604, 605, 45, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 606, 607, 608, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 150, 609, 610, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 611, 612,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 613, 614, 72, 72,
- 9, 9, 575, 11, 615, 368, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 484, 269, 269, 616, 617, 72, 72, 72, 72,
- 484, 269, 618, 619, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 620, 48, 621, 622, 623, 624, 625, 626, 627, 205, 628, 205, 72, 72, 72, 629,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 208, 208, 324, 208, 208, 208, 208, 208, 208, 322, 333, 630, 630, 630, 208, 323,
- 174, 208, 208, 208, 208, 208, 631, 208, 208, 208, 631, 72, 72, 72, 632, 208,
- 633, 208, 208, 324, 568, 634, 323, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 635,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 323, 631, 286,
- 208, 208, 208, 208, 208, 208, 208, 322, 208, 208, 208, 208, 208, 568, 324, 72,
- 324, 208, 208, 208, 636, 175, 208, 208, 636, 208, 637, 72, 72, 72, 72, 72,
- 638, 208, 208, 208, 208, 208, 208, 639, 208, 208, 640, 208, 641, 208, 208, 208,
- 208, 208, 208, 208, 208, 322, 637, 642, 633, 323, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 203, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 643, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 100, 72,
- 48, 203, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 644, 72, 645, 645, 645, 645, 645, 645, 72, 72, 72, 72, 72, 72, 72, 72,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 646,
+static RE_UINT8 re_alphabetic_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 7, 8, 9, 10, 4, 11,
+ 4, 4, 4, 4, 12, 4, 4, 4, 4, 13, 14, 4, 15, 16, 17, 18,
+ 19, 4, 20, 21, 4, 4, 22, 23, 24, 4, 25, 4, 4, 26, 27, 28,
+ 29, 30, 31, 32, 0, 33, 34, 35, 4, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 0,
+ 57, 58, 59, 60, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 0, 75, 76, 77, 0, 78, 0, 79, 80, 81, 82, 0, 0,
+ 4, 83, 24, 4, 84, 4, 85, 86, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 87, 4, 88, 89, 90, 4, 91, 4, 73, 0, 92, 4, 4, 93,
+ 72, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 94, 1, 4, 4, 95, 96, 97, 97, 98, 4, 99, 100, 0,
+ 0, 4, 4, 31, 4, 101, 4, 102, 103, 104, 24, 105, 4, 106, 107, 0,
+ 108, 4, 103, 109, 0, 110, 78, 0, 4, 111, 112, 0, 4, 113, 4, 114,
+ 4, 115, 116, 117, 118, 65, 0, 119, 4, 4, 4, 4, 4, 4, 0, 120,
+ 4, 4, 4, 4, 4, 4, 4, 4, 93, 4, 121, 117, 4, 122, 123, 124,
+ 0, 0, 0, 125, 126, 0, 0, 0, 127, 128, 129, 4, 15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 130, 4, 107, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 131, 103, 4, 4, 4, 4, 132, 4, 85, 4, 133, 115, 134, 134, 4,
+ 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 136, 137, 72, 4, 138, 72, 4, 86, 139, 13, 4, 4, 140, 4, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 82,
+ 4, 4, 4, 4, 30, 0, 24, 117, 4, 4, 4, 4, 4, 4, 4, 4,
+ 141, 142, 4, 143, 4, 4, 4, 92, 144, 145, 4, 4, 146, 4, 147, 148,
+ 149, 150, 4, 97, 4, 4, 151, 152, 27, 101, 153, 82, 4, 154, 135, 155,
+ 4, 115, 156, 157, 4, 103, 158, 159, 160, 161, 86, 162, 4, 4, 4, 32,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 163, 164, 108,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 165, 4, 4, 166, 0, 167, 168, 169, 4, 4, 26, 170, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 117, 24, 4, 171, 4, 150, 172,
+ 0, 0, 0, 173, 4, 4, 4, 82, 0, 1, 1, 174, 4, 103, 175, 0,
+ 176, 177, 178, 0, 4, 4, 4, 73, 0, 0, 4, 179, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 4, 180, 0, 4, 25, 101, 73, 117, 4, 181, 0,
+ 4, 4, 4, 4, 117, 24, 182, 108, 4, 183, 4, 60, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 115, 102, 150, 0, 0, 0, 0,
+ 184, 185, 102, 115, 103, 0, 0, 186, 102, 166, 0, 0, 4, 187, 0, 0,
+ 188, 102, 0, 82, 82, 0, 79, 189, 4, 102, 102, 153, 26, 0, 0, 0,
+ 4, 4, 15, 0, 4, 153, 4, 153, 4, 150, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 190, 0, 0, 82, 191, 192, 0, 0, 24, 189, 115,
+ 4, 4, 192, 0, 145, 31, 24, 15, 4, 153, 193, 194, 4, 4, 195, 0,
+ 196, 197, 0, 0, 198, 118, 4, 15, 39, 48, 199, 60, 0, 0, 0, 0,
+ 4, 4, 200, 201, 4, 4, 202, 0, 0, 0, 0, 0, 4, 203, 204, 0,
+ 4, 103, 205, 0, 4, 206, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0,
+ 4, 31, 0, 0, 0, 4, 4, 207, 208, 209, 210, 0, 0, 211, 29, 212,
+ 4, 213, 24, 4, 214, 0, 4, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 215, 216, 78, 217, 171, 218, 0, 0, 219, 220, 221, 222, 223, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 224, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 166, 0, 0, 0,
+ 4, 4, 4, 140, 4, 4, 4, 4, 4, 4, 60, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 31, 103, 0, 0, 0, 24, 156, 4, 92, 60, 226, 92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 227, 4, 228, 0, 0, 229,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 230,
+ 4, 4, 4, 4, 4, 4, 102, 0, 15, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 103, 0, 231, 193, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 33, 4, 234, 235, 236, 4, 237, 238, 239, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 240, 241, 86, 33, 33, 131, 131, 215, 215, 242, 0,
+ 243, 244, 0, 0, 0, 0, 0, 0, 4, 245, 246, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 247, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 189, 0, 4, 4, 248, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 236, 249, 250, 251, 252, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 162, 162, 107, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 117, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 179, 4, 4, 4, 4, 4, 4,
+ 117, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 254, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 78,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 32, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_general_category_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2,
- 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, 25,
- 26, 27, 15, 2, 28, 29, 27, 30, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 31, 11, 11, 11, 32, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 33, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 16, 32, 32, 32,
- 32, 32, 32, 32, 11, 34, 34, 16, 34, 32, 32, 11, 34, 11, 16, 11,
- 11, 34, 32, 11, 32, 16, 11, 34, 32, 32, 32, 11, 34, 16, 32, 11,
- 34, 11, 34, 34, 32, 35, 32, 16, 36, 36, 37, 34, 38, 37, 34, 34,
- 34, 34, 34, 34, 34, 34, 16, 32, 34, 38, 32, 11, 32, 32, 32, 32,
- 32, 32, 16, 16, 16, 11, 34, 32, 34, 34, 11, 32, 32, 32, 32, 32,
- 16, 16, 39, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 41, 41, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41,
- 40, 40, 42, 41, 41, 41, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41,
- 43, 43, 43, 43, 43, 43, 43, 43, 32, 32, 42, 32, 44, 45, 16, 10,
- 44, 44, 41, 46, 11, 47, 47, 11, 34, 11, 11, 11, 11, 11, 11, 11,
- 11, 48, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 34,
- 16, 11, 32, 16, 32, 32, 32, 32, 16, 16, 32, 49, 34, 32, 34, 11,
- 32, 50, 43, 43, 51, 32, 32, 32, 11, 34, 34, 34, 34, 34, 34, 16,
- 48, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 47, 52, 2, 2, 2,
- 16, 16, 16, 16, 53, 54, 55, 56, 57, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, 58, 59, 60, 43, 59, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 62,
- 36, 63, 64, 44, 44, 44, 44, 44, 65, 65, 65, 8, 9, 66, 2, 67,
- 43, 43, 43, 43, 43, 60, 68, 2, 69, 36, 36, 36, 36, 70, 43, 43,
- 7, 7, 7, 7, 7, 2, 2, 36, 71, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 72, 43, 43, 43, 73, 50, 43, 43, 74, 75, 76, 43, 43, 36,
- 7, 7, 7, 7, 7, 36, 77, 78, 2, 2, 2, 2, 2, 2, 2, 79,
- 70, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 80, 62, 36,
- 36, 36, 36, 43, 43, 43, 43, 43, 71, 44, 44, 44, 44, 44, 44, 44,
- 7, 7, 7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43,
- 43, 43, 40, 21, 2, 81, 57, 20, 36, 36, 36, 43, 43, 75, 43, 43,
- 43, 43, 75, 43, 75, 43, 43, 44, 2, 2, 2, 2, 2, 2, 2, 64,
- 36, 36, 36, 36, 70, 43, 44, 64, 36, 36, 36, 36, 36, 61, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 36, 36, 61, 36, 36, 36, 36, 44,
- 44, 57, 43, 43, 43, 43, 43, 43, 43, 82, 43, 43, 43, 43, 43, 43,
- 43, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 71, 84,
- 85, 43, 43, 43, 83, 84, 85, 84, 70, 43, 43, 43, 36, 36, 36, 36,
- 36, 43, 2, 7, 7, 7, 7, 7, 86, 36, 36, 36, 36, 36, 36, 36,
- 70, 84, 62, 36, 36, 36, 61, 62, 61, 62, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 61, 36, 36, 36, 61, 61, 44, 36, 36, 44, 71, 84,
- 85, 43, 80, 87, 88, 87, 85, 61, 44, 44, 44, 87, 44, 44, 36, 62,
- 36, 43, 44, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 56, 63, 80,
- 57, 83, 62, 36, 36, 61, 44, 62, 61, 36, 62, 61, 36, 44, 80, 84,
- 85, 80, 44, 57, 80, 57, 43, 44, 57, 44, 44, 44, 62, 36, 61, 61,
- 44, 44, 44, 7, 7, 7, 7, 7, 43, 36, 70, 64, 44, 44, 44, 44,
- 57, 83, 62, 36, 36, 36, 36, 62, 36, 62, 36, 36, 36, 36, 36, 36,
- 61, 36, 62, 36, 36, 44, 71, 84, 85, 43, 43, 57, 83, 87, 85, 44,
- 61, 44, 44, 44, 44, 44, 44, 44, 66, 44, 44, 44, 62, 43, 43, 43,
- 57, 84, 62, 36, 36, 36, 61, 62, 61, 36, 62, 36, 36, 44, 71, 85,
- 85, 43, 80, 87, 88, 87, 85, 44, 44, 44, 44, 83, 44, 44, 36, 62,
- 78, 27, 27, 27, 44, 44, 44, 44, 44, 71, 62, 36, 36, 61, 44, 36,
- 61, 36, 36, 44, 62, 61, 61, 36, 44, 62, 61, 44, 36, 61, 44, 36,
- 36, 36, 36, 36, 36, 44, 44, 84, 83, 88, 44, 84, 88, 84, 85, 44,
- 61, 44, 44, 87, 44, 44, 44, 44, 27, 89, 67, 67, 56, 90, 44, 44,
- 83, 84, 71, 36, 36, 36, 61, 36, 61, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 44, 62, 43, 83, 84, 88, 43, 80, 43, 43, 44,
- 44, 44, 57, 80, 36, 61, 44, 44, 44, 44, 44, 91, 27, 27, 27, 89,
- 70, 84, 72, 36, 36, 36, 61, 36, 36, 36, 62, 36, 36, 44, 71, 85,
- 84, 84, 88, 83, 88, 84, 43, 44, 44, 44, 87, 88, 44, 44, 44, 61,
- 62, 61, 44, 44, 44, 44, 44, 44, 43, 84, 62, 36, 36, 36, 61, 36,
- 36, 36, 36, 36, 36, 70, 71, 84, 85, 43, 80, 84, 88, 84, 85, 77,
- 44, 44, 36, 92, 27, 27, 27, 93, 27, 27, 27, 27, 89, 36, 36, 36,
- 44, 84, 62, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 36, 36, 36,
- 36, 62, 36, 36, 36, 36, 62, 44, 36, 36, 36, 61, 44, 80, 44, 87,
- 84, 43, 80, 80, 84, 84, 84, 84, 44, 84, 64, 44, 44, 44, 44, 44,
- 62, 36, 36, 36, 36, 36, 36, 36, 70, 36, 43, 43, 43, 80, 44, 94,
- 36, 36, 36, 75, 43, 43, 43, 60, 7, 7, 7, 7, 7, 2, 44, 44,
- 62, 61, 61, 36, 36, 61, 36, 36, 36, 36, 62, 62, 36, 36, 36, 36,
- 70, 36, 43, 43, 43, 43, 71, 44, 36, 36, 61, 81, 43, 43, 43, 44,
- 7, 7, 7, 7, 7, 44, 36, 36, 77, 67, 2, 2, 2, 2, 2, 2,
- 2, 95, 95, 67, 43, 67, 67, 67, 7, 7, 7, 7, 7, 27, 27, 27,
- 27, 27, 50, 50, 50, 4, 4, 84, 36, 36, 36, 36, 62, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 61, 44, 57, 43, 43, 43, 43, 43, 43, 83,
- 43, 43, 60, 43, 36, 36, 70, 43, 43, 43, 43, 43, 57, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 80, 67, 67, 67, 67, 76, 67, 67, 90, 67,
- 2, 2, 95, 67, 21, 64, 44, 44, 36, 36, 36, 36, 36, 92, 85, 43,
- 83, 43, 43, 43, 85, 83, 85, 71, 7, 7, 7, 7, 7, 2, 2, 2,
- 36, 36, 36, 84, 43, 36, 36, 43, 71, 84, 96, 92, 84, 84, 84, 36,
- 70, 43, 71, 36, 36, 36, 36, 36, 36, 83, 85, 83, 84, 84, 85, 92,
- 7, 7, 7, 7, 7, 84, 85, 67, 11, 11, 11, 48, 44, 44, 48, 44,
- 16, 16, 16, 16, 16, 53, 45, 16, 36, 36, 36, 36, 61, 36, 36, 44,
- 36, 36, 36, 61, 61, 36, 36, 44, 61, 36, 36, 44, 36, 36, 36, 61,
- 61, 36, 36, 44, 36, 36, 36, 36, 36, 36, 36, 61, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 61, 57, 43, 2, 2, 2, 2, 97, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 98, 44, 67, 67, 67, 67, 67, 44, 44, 44,
- 11, 11, 11, 44, 16, 16, 16, 44, 99, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 77, 72, 100, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 101, 102, 44, 36, 36, 36, 36, 36, 63, 2, 103,
- 104, 36, 36, 36, 61, 44, 44, 44, 36, 36, 36, 36, 36, 36, 61, 36,
- 36, 43, 80, 44, 44, 44, 44, 44, 36, 43, 60, 64, 44, 44, 44, 44,
- 36, 43, 44, 44, 44, 44, 44, 44, 61, 43, 44, 44, 44, 44, 44, 44,
- 36, 36, 43, 85, 43, 43, 43, 84, 84, 84, 84, 83, 85, 43, 43, 43,
- 43, 43, 2, 86, 2, 66, 70, 44, 7, 7, 7, 7, 7, 44, 44, 44,
- 27, 27, 27, 27, 27, 44, 44, 44, 2, 2, 2, 105, 2, 59, 43, 68,
- 36, 106, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 44, 44,
- 36, 36, 70, 71, 36, 36, 36, 36, 36, 36, 36, 36, 70, 61, 44, 44,
- 36, 36, 36, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 36, 61,
- 43, 83, 84, 85, 83, 84, 44, 44, 84, 83, 84, 84, 85, 43, 44, 44,
- 90, 44, 2, 7, 7, 7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 44,
- 36, 36, 61, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 44, 44,
- 36, 36, 36, 36, 36, 44, 44, 44, 7, 7, 7, 7, 7, 98, 44, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 36, 36, 36, 70, 83, 85, 44, 2,
- 36, 36, 92, 83, 43, 43, 43, 80, 83, 83, 85, 43, 43, 43, 83, 84,
- 84, 85, 43, 43, 43, 43, 80, 57, 2, 2, 2, 86, 2, 2, 2, 44,
- 43, 43, 43, 43, 43, 43, 43, 107, 43, 43, 96, 36, 36, 36, 36, 36,
- 36, 36, 83, 43, 43, 83, 83, 84, 84, 83, 96, 36, 36, 36, 44, 44,
- 95, 67, 67, 67, 67, 50, 43, 43, 43, 43, 67, 67, 67, 67, 90, 44,
- 43, 96, 36, 36, 36, 36, 36, 36, 92, 43, 43, 84, 43, 85, 43, 36,
- 36, 36, 36, 83, 43, 84, 85, 85, 43, 84, 44, 44, 44, 44, 2, 2,
- 36, 36, 84, 84, 84, 84, 43, 43, 43, 43, 84, 43, 44, 91, 2, 2,
- 7, 7, 7, 7, 7, 44, 62, 36, 36, 36, 36, 36, 40, 40, 40, 2,
- 16, 16, 16, 16, 108, 44, 44, 44, 11, 11, 11, 11, 11, 47, 48, 11,
- 2, 2, 2, 2, 44, 44, 44, 44, 43, 60, 43, 43, 43, 43, 43, 43,
- 83, 43, 43, 43, 71, 36, 70, 36, 36, 36, 71, 92, 43, 61, 44, 44,
- 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 45, 16, 16,
- 16, 16, 16, 16, 45, 16, 16, 16, 16, 16, 16, 16, 16, 109, 40, 40,
- 43, 43, 43, 43, 43, 57, 43, 43, 32, 32, 32, 16, 16, 16, 16, 32,
- 16, 16, 16, 16, 11, 11, 11, 11, 16, 16, 16, 44, 11, 11, 11, 44,
- 16, 16, 16, 16, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 44,
- 16, 16, 16, 16, 110, 110, 110, 110, 16, 16, 108, 16, 11, 11, 111, 112,
- 41, 16, 108, 16, 11, 11, 111, 41, 16, 16, 44, 16, 11, 11, 113, 41,
- 16, 16, 16, 16, 11, 11, 114, 41, 44, 16, 108, 16, 11, 11, 111, 115,
- 116, 116, 116, 116, 116, 117, 65, 65, 118, 118, 118, 2, 119, 120, 119, 120,
- 2, 2, 2, 2, 121, 65, 65, 122, 2, 2, 2, 2, 123, 124, 2, 125,
- 126, 2, 127, 128, 2, 2, 2, 2, 2, 9, 126, 2, 2, 2, 2, 129,
- 65, 65, 68, 65, 65, 65, 65, 65, 130, 44, 27, 27, 27, 8, 127, 131,
- 27, 27, 27, 27, 27, 8, 127, 102, 40, 40, 40, 40, 40, 40, 81, 44,
- 20, 20, 20, 20, 20, 20, 20, 20, 43, 43, 43, 43, 43, 43, 132, 51,
- 133, 51, 133, 43, 43, 43, 43, 43, 80, 44, 44, 44, 44, 44, 44, 44,
- 67, 134, 67, 135, 67, 34, 11, 16, 11, 32, 135, 67, 49, 11, 11, 67,
- 67, 67, 134, 134, 134, 11, 11, 136, 11, 11, 35, 36, 39, 67, 16, 11,
- 8, 8, 49, 16, 16, 26, 67, 137, 27, 27, 27, 27, 27, 27, 27, 27,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 138, 139, 103, 140, 67, 44, 44,
- 8, 8, 141, 67, 67, 8, 67, 67, 141, 26, 67, 141, 67, 67, 67, 141,
- 67, 67, 67, 67, 67, 67, 67, 8, 67, 141, 141, 67, 67, 67, 67, 67,
- 67, 67, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 67, 67, 67, 67, 4, 4, 67, 67, 8, 67, 67, 67, 142, 143, 67, 67,
- 67, 67, 67, 67, 67, 67, 141, 67, 67, 67, 67, 67, 67, 26, 8, 8,
- 8, 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8,
- 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90, 44, 44, 44, 44,
- 67, 67, 67, 67, 67, 90, 44, 44, 27, 27, 27, 27, 27, 27, 67, 67,
- 67, 67, 67, 67, 67, 27, 27, 27, 67, 67, 67, 26, 67, 67, 67, 67,
- 26, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8, 8, 8,
- 67, 67, 67, 67, 67, 67, 67, 26, 67, 67, 67, 67, 4, 4, 4, 4,
- 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67,
- 8, 8, 127, 144, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4,
- 8, 127, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 8, 8, 8,
- 8, 8, 8, 8, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8,
- 8, 8, 141, 26, 8, 8, 141, 67, 67, 67, 44, 67, 67, 67, 67, 67,
- 67, 67, 67, 44, 67, 67, 67, 67, 11, 11, 11, 11, 11, 11, 11, 47,
- 16, 16, 16, 16, 16, 16, 16, 108, 32, 11, 32, 34, 34, 34, 34, 11,
- 32, 32, 34, 16, 16, 16, 40, 11, 32, 32, 137, 67, 67, 135, 34, 146,
- 43, 32, 44, 44, 91, 2, 97, 2, 16, 16, 16, 147, 44, 44, 147, 44,
- 36, 36, 36, 36, 44, 44, 44, 52, 64, 44, 44, 44, 44, 44, 44, 57,
- 36, 36, 36, 61, 44, 44, 44, 44, 36, 36, 36, 61, 36, 36, 36, 61,
- 2, 119, 119, 2, 123, 124, 119, 2, 2, 2, 2, 6, 2, 105, 119, 2,
- 119, 4, 4, 4, 4, 2, 2, 86, 2, 2, 2, 2, 2, 118, 2, 2,
- 105, 148, 2, 2, 2, 2, 2, 2, 67, 67, 67, 67, 67, 55, 67, 67,
- 67, 67, 44, 44, 44, 44, 44, 44, 67, 67, 67, 44, 44, 44, 44, 44,
- 67, 67, 67, 67, 67, 67, 44, 44, 1, 2, 149, 150, 4, 4, 4, 4,
- 4, 67, 4, 4, 4, 4, 151, 152, 153, 103, 103, 103, 103, 43, 43, 84,
- 154, 40, 40, 67, 103, 155, 63, 67, 36, 36, 36, 61, 57, 156, 157, 69,
- 36, 36, 36, 36, 36, 63, 40, 69, 44, 44, 62, 36, 36, 36, 36, 36,
- 67, 27, 27, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90,
- 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27,
- 158, 27, 27, 27, 27, 27, 27, 27, 36, 36, 106, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 159, 2, 7, 7, 7, 7, 7, 36, 44, 44,
- 32, 32, 32, 32, 32, 32, 32, 70, 51, 160, 43, 43, 43, 43, 43, 86,
- 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36, 103, 103, 103, 103, 103,
- 43, 2, 2, 2, 44, 44, 44, 44, 41, 41, 41, 157, 40, 40, 40, 40,
- 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32,
- 45, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42, 161, 34, 35,
- 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32,
- 11, 11, 32, 32, 32, 32, 32, 32, 44, 32, 11, 47, 44, 44, 44, 44,
- 44, 44, 44, 62, 40, 35, 36, 36, 36, 71, 36, 71, 36, 70, 36, 36,
- 36, 92, 85, 83, 67, 67, 44, 44, 27, 27, 27, 67, 162, 44, 44, 44,
- 36, 36, 2, 2, 44, 44, 44, 44, 84, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 84, 84, 84, 84, 84, 84, 84, 84, 43, 44, 44, 44, 44, 2,
- 43, 36, 36, 36, 2, 72, 72, 70, 36, 36, 36, 43, 43, 43, 43, 2,
- 36, 36, 36, 70, 43, 43, 43, 43, 43, 84, 44, 44, 44, 44, 44, 91,
- 36, 70, 84, 43, 43, 84, 43, 84, 163, 2, 2, 2, 2, 2, 2, 52,
- 7, 7, 7, 7, 7, 44, 44, 2, 36, 36, 70, 69, 36, 36, 36, 36,
- 7, 7, 7, 7, 7, 36, 36, 61, 36, 36, 36, 36, 70, 43, 43, 83,
- 85, 83, 85, 80, 44, 44, 44, 44, 36, 70, 36, 36, 36, 36, 83, 44,
- 7, 7, 7, 7, 7, 44, 2, 2, 69, 36, 36, 77, 67, 92, 83, 36,
- 71, 43, 71, 70, 71, 36, 36, 43, 70, 61, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 62, 106, 2, 36, 36, 36, 36, 36, 92, 43, 84,
- 2, 106, 164, 80, 44, 44, 44, 44, 62, 36, 36, 61, 62, 36, 36, 61,
- 62, 36, 36, 61, 44, 44, 44, 44, 16, 16, 16, 16, 16, 112, 40, 40,
- 16, 16, 16, 16, 44, 44, 44, 44, 36, 92, 85, 84, 83, 163, 85, 44,
- 36, 36, 44, 44, 44, 44, 44, 44, 36, 36, 36, 61, 44, 62, 36, 36,
- 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166,
- 16, 16, 16, 108, 44, 44, 44, 44, 44, 147, 16, 16, 44, 44, 62, 71,
- 36, 36, 36, 36, 167, 36, 36, 36, 36, 36, 36, 61, 36, 36, 61, 61,
- 36, 62, 61, 36, 36, 36, 36, 36, 36, 41, 41, 41, 41, 41, 41, 41,
- 41, 44, 44, 44, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 145, 44, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 162, 44,
- 2, 2, 2, 168, 128, 44, 44, 44, 6, 169, 170, 145, 145, 145, 145, 145,
- 145, 145, 128, 168, 128, 2, 125, 171, 2, 64, 2, 2, 151, 145, 145, 128,
- 2, 172, 8, 173, 66, 2, 44, 44, 36, 36, 61, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 61, 79, 91, 2, 3, 2, 4, 5, 6, 2,
- 16, 16, 16, 16, 16, 17, 18, 127, 128, 4, 2, 36, 36, 36, 36, 36,
- 69, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 40,
- 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 61, 44,
- 20, 174, 56, 175, 26, 8, 141, 90, 44, 44, 44, 44, 79, 65, 67, 44,
- 36, 36, 36, 36, 36, 36, 62, 36, 36, 36, 36, 36, 36, 61, 36, 62,
- 2, 64, 44, 176, 27, 27, 27, 27, 27, 27, 44, 55, 67, 67, 67, 67,
- 103, 103, 140, 27, 89, 67, 67, 67, 67, 67, 67, 67, 67, 27, 67, 90,
- 90, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 50, 44,
- 177, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 44, 44,
- 27, 27, 44, 44, 44, 44, 62, 36, 150, 36, 36, 36, 36, 178, 44, 44,
- 36, 36, 36, 43, 43, 80, 44, 44, 36, 36, 36, 36, 36, 36, 36, 91,
- 36, 36, 44, 44, 36, 36, 36, 36, 179, 103, 103, 44, 44, 44, 44, 44,
- 11, 11, 11, 11, 16, 16, 16, 16, 11, 11, 44, 44, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 44, 44, 36, 36, 44, 44, 44, 44, 44, 91,
- 36, 36, 36, 44, 61, 36, 36, 36, 36, 36, 36, 62, 61, 44, 61, 62,
- 36, 36, 36, 91, 27, 27, 27, 27, 36, 36, 36, 77, 158, 27, 27, 27,
- 44, 44, 44, 176, 27, 27, 27, 27, 36, 61, 36, 44, 44, 176, 27, 27,
- 36, 36, 36, 27, 27, 27, 44, 91, 36, 36, 36, 36, 36, 44, 44, 91,
- 36, 36, 36, 36, 44, 44, 27, 36, 44, 27, 27, 27, 27, 27, 27, 27,
- 70, 43, 57, 80, 44, 44, 43, 43, 36, 36, 62, 36, 62, 36, 36, 36,
- 36, 36, 36, 44, 43, 80, 44, 57, 27, 27, 27, 27, 98, 44, 44, 44,
- 2, 2, 2, 2, 64, 44, 44, 44, 36, 36, 36, 36, 36, 36, 180, 30,
- 36, 36, 36, 36, 36, 36, 180, 27, 36, 36, 36, 36, 78, 36, 36, 36,
- 36, 36, 70, 80, 44, 176, 27, 27, 2, 2, 2, 64, 44, 44, 44, 44,
- 36, 36, 36, 44, 91, 2, 2, 2, 36, 36, 36, 44, 27, 27, 27, 27,
- 36, 61, 44, 44, 27, 27, 27, 27, 36, 44, 44, 44, 91, 2, 64, 44,
- 44, 44, 44, 44, 176, 27, 27, 27, 11, 47, 44, 44, 44, 44, 44, 44,
- 16, 108, 44, 44, 44, 27, 27, 27, 36, 36, 43, 43, 44, 44, 44, 44,
- 27, 27, 27, 27, 27, 27, 27, 98, 27, 27, 27, 93, 44, 44, 44, 44,
- 177, 27, 30, 2, 2, 44, 44, 44, 85, 96, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 43, 60, 2, 2, 2, 44,
- 27, 27, 27, 7, 7, 7, 7, 7, 44, 44, 44, 44, 44, 44, 44, 57,
- 84, 85, 43, 83, 85, 60, 181, 2, 2, 44, 44, 44, 44, 44, 79, 44,
- 43, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43, 85, 43,
- 43, 43, 80, 7, 7, 7, 7, 7, 2, 2, 92, 88, 44, 44, 44, 44,
- 36, 70, 2, 61, 44, 44, 44, 44, 36, 92, 84, 43, 43, 43, 43, 83,
- 96, 36, 63, 2, 59, 43, 60, 44, 7, 7, 7, 7, 7, 63, 63, 2,
- 176, 27, 27, 27, 27, 27, 27, 27, 27, 27, 98, 44, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 84, 85, 43, 84, 83, 43, 2, 2, 2, 80,
- 36, 36, 36, 61, 61, 36, 36, 62, 36, 36, 36, 36, 36, 36, 36, 62,
- 36, 36, 36, 36, 63, 44, 44, 44, 36, 36, 36, 36, 36, 36, 36, 70,
- 84, 85, 43, 43, 43, 80, 44, 44, 43, 84, 62, 36, 36, 36, 61, 62,
- 61, 36, 62, 36, 36, 57, 71, 84, 83, 84, 88, 87, 88, 87, 84, 44,
- 61, 44, 44, 87, 44, 44, 62, 36, 36, 84, 44, 43, 43, 43, 80, 44,
- 43, 43, 80, 44, 44, 44, 44, 44, 36, 36, 92, 84, 43, 43, 43, 43,
- 84, 43, 83, 71, 36, 63, 2, 2, 7, 7, 7, 7, 7, 91, 91, 71,
- 84, 85, 43, 43, 83, 83, 84, 85, 83, 43, 36, 72, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 92, 84, 43, 43, 44, 84, 84, 43, 85,
- 60, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 43, 44,
- 84, 85, 43, 43, 43, 83, 85, 85, 60, 2, 61, 44, 44, 44, 44, 44,
- 2, 2, 2, 2, 2, 2, 64, 44, 36, 36, 36, 36, 36, 70, 85, 84,
- 43, 43, 43, 85, 61, 44, 44, 44, 84, 43, 43, 85, 43, 43, 44, 44,
- 7, 7, 7, 7, 7, 27, 2, 95, 43, 43, 43, 43, 85, 60, 44, 44,
- 27, 98, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 44, 36, 36, 36,
- 92, 84, 43, 43, 44, 43, 84, 84, 71, 72, 88, 44, 44, 44, 44, 44,
- 70, 43, 43, 43, 43, 71, 36, 36, 36, 70, 43, 43, 83, 70, 43, 60,
- 2, 2, 2, 59, 44, 44, 44, 44, 70, 43, 43, 83, 85, 43, 36, 36,
- 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 83, 43, 2, 72, 2,
- 2, 64, 44, 44, 44, 44, 44, 44, 43, 43, 43, 80, 43, 43, 43, 85,
- 63, 2, 2, 44, 44, 44, 44, 44, 2, 36, 36, 36, 36, 36, 36, 36,
- 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 87, 43, 43, 43,
- 83, 43, 85, 80, 44, 44, 44, 44, 36, 36, 36, 61, 36, 62, 36, 36,
- 70, 43, 43, 80, 44, 80, 43, 57, 43, 43, 43, 70, 44, 44, 44, 44,
- 36, 36, 36, 62, 61, 36, 36, 36, 36, 36, 36, 36, 36, 84, 84, 88,
- 43, 87, 85, 85, 61, 44, 44, 44, 36, 70, 83, 163, 64, 44, 44, 44,
- 27, 27, 89, 67, 67, 67, 56, 20, 162, 67, 67, 67, 67, 67, 67, 67,
- 67, 44, 44, 44, 44, 44, 44, 91, 103, 103, 103, 103, 103, 103, 103, 178,
- 2, 2, 64, 44, 44, 44, 44, 44, 65, 65, 65, 65, 68, 44, 44, 44,
- 43, 43, 60, 44, 44, 44, 44, 44, 43, 43, 43, 60, 2, 2, 67, 67,
- 40, 40, 95, 44, 44, 44, 44, 44, 7, 7, 7, 7, 7, 176, 27, 27,
- 27, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 62, 36,
- 27, 27, 27, 30, 2, 64, 44, 44, 36, 36, 36, 36, 36, 61, 44, 57,
- 92, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 44, 44, 44, 57, 43, 74, 40, 40, 40, 40, 40, 40,
- 40, 86, 44, 44, 44, 44, 44, 44, 36, 61, 44, 44, 44, 44, 44, 44,
- 44, 44, 36, 36, 44, 44, 44, 44, 36, 36, 36, 36, 36, 44, 50, 60,
- 65, 65, 44, 44, 44, 44, 44, 44, 67, 67, 67, 90, 55, 67, 67, 67,
- 67, 67, 182, 85, 43, 67, 182, 84, 84, 183, 65, 65, 65, 82, 43, 43,
- 43, 76, 50, 43, 43, 43, 67, 67, 67, 67, 67, 67, 67, 43, 43, 67,
- 67, 67, 67, 67, 90, 44, 44, 44, 67, 43, 76, 44, 44, 44, 44, 44,
- 27, 27, 44, 44, 44, 44, 44, 44, 11, 11, 11, 11, 11, 16, 16, 16,
- 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16,
- 16, 16, 108, 16, 16, 16, 16, 16, 11, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 47, 11, 44, 47, 48, 47, 48, 11, 47, 11,
- 11, 11, 11, 16, 16, 147, 147, 16, 16, 16, 147, 16, 16, 16, 16, 16,
- 16, 16, 11, 48, 11, 47, 48, 11, 11, 11, 47, 11, 11, 11, 47, 16,
- 16, 16, 16, 16, 11, 48, 11, 47, 11, 11, 47, 47, 44, 11, 11, 11,
- 47, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 11,
- 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 44, 11, 11, 11, 11,
- 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, 16, 16,
- 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, 16, 16,
- 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16,
- 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 32, 44, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 43, 43, 43, 76, 67, 50, 43, 43,
- 43, 43, 43, 43, 43, 43, 76, 67, 67, 67, 50, 67, 67, 67, 67, 67,
- 67, 67, 76, 21, 2, 2, 44, 44, 44, 44, 44, 44, 44, 57, 43, 43,
- 43, 43, 43, 80, 43, 43, 43, 43, 43, 43, 43, 43, 80, 57, 43, 43,
- 43, 57, 80, 43, 43, 80, 44, 44, 43, 43, 43, 74, 40, 40, 40, 44,
- 7, 7, 7, 7, 7, 44, 44, 77, 36, 36, 36, 36, 36, 36, 43, 43,
- 7, 7, 7, 7, 7, 44, 44, 94, 36, 36, 61, 176, 27, 27, 27, 27,
- 43, 43, 43, 80, 44, 44, 44, 44, 16, 16, 43, 43, 43, 74, 44, 44,
- 27, 27, 27, 27, 27, 27, 158, 27, 184, 27, 98, 44, 44, 44, 44, 44,
- 27, 27, 27, 27, 27, 27, 27, 158, 27, 27, 27, 27, 27, 27, 27, 44,
- 36, 36, 62, 36, 36, 36, 36, 36, 62, 61, 61, 62, 62, 36, 36, 36,
- 36, 61, 36, 36, 62, 62, 44, 44, 44, 61, 44, 62, 62, 62, 62, 36,
- 62, 61, 61, 62, 62, 62, 62, 62, 62, 61, 61, 62, 36, 61, 36, 36,
- 36, 61, 36, 36, 62, 36, 61, 61, 36, 36, 36, 36, 36, 62, 36, 36,
- 62, 36, 62, 36, 36, 62, 36, 36, 8, 44, 44, 44, 44, 44, 44, 44,
- 55, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90, 44,
- 44, 44, 44, 67, 67, 67, 67, 67, 67, 90, 44, 44, 44, 44, 44, 44,
- 67, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 25, 41, 41,
- 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 67, 44,
- 67, 67, 67, 67, 67, 67, 55, 67, 67, 55, 67, 90, 44, 67, 67, 67,
- 67, 90, 55, 67, 67, 90, 44, 67, 67, 67, 67, 67, 67, 90, 55, 67,
- 67, 67, 44, 44, 67, 90, 44, 44, 36, 44, 44, 44, 44, 44, 44, 44,
- 79, 44, 44, 44, 44, 44, 44, 44, 65, 65, 65, 65, 65, 65, 65, 65,
- 166, 166, 166, 166, 166, 166, 166, 44,
+static RE_UINT8 re_alphabetic_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
+ 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 32, 0, 0, 0,
+ 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
+ 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0,
+ 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0, 0, 0, 255, 7,
+ 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31, 254, 225, 0, 156,
+ 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0, 0, 252, 255, 255,
+ 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0, 255, 255, 255, 1,
+ 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 240, 255, 248, 3, 255, 255,
+ 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255, 239, 159, 249, 255,
+ 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16, 238, 135, 249, 255,
+ 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0, 238, 191, 251, 255,
+ 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30, 238, 159, 249, 255,
+ 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195,
+ 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227, 223, 29, 96, 7,
+ 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64, 15, 0, 6, 0,
+ 255, 223, 253, 255, 255, 255, 255, 231, 223, 93, 240, 128, 15, 0, 0, 252,
+ 238, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0,
+ 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 0, 0, 214, 247, 255, 255,
+ 175, 255, 255, 59, 95, 32, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255,
+ 255, 31, 254, 255, 3, 255, 255, 254, 255, 255, 255, 31, 255, 255, 127, 249,
+ 255, 255, 0, 60, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
+ 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255,
+ 255, 1, 128, 16, 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0,
+ 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 128, 255, 255, 239, 255,
+ 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0, 255, 255, 127, 0,
+ 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 0, 222, 111, 4,
+ 128, 255, 31, 0, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
+ 80, 189, 255, 243, 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255,
+ 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0,
+ 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143,
+ 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255, 252, 7, 0, 0,
+ 0, 0, 224, 255, 191, 255, 255, 255, 255, 0, 0, 0, 47, 0, 0, 0,
+ 0, 0, 252, 232, 255, 255, 7, 0, 255, 255, 247, 255, 255, 255, 0, 124,
+ 255, 63, 0, 0, 255, 255, 127, 252, 5, 0, 0, 56, 255, 255, 60, 0,
+ 126, 126, 126, 0, 127, 127, 255, 255, 255, 3, 255, 255, 15, 0, 255, 255,
+ 127, 248, 255, 255, 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 224,
+ 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255,
+ 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 31, 0,
+ 255, 255, 1, 0, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192,
+ 111, 240, 239, 254, 31, 0, 0, 0, 255, 27, 3, 0, 128, 0, 255, 255,
+ 63, 0, 0, 0, 240, 0, 255, 255, 255, 255, 71, 0, 30, 192, 0, 20,
+ 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191, 159, 25, 129, 224,
+ 187, 7, 0, 128, 3, 0, 0, 0, 179, 0, 0, 0, 255, 255, 63, 127,
+ 0, 0, 0, 63, 17, 0, 0, 0, 255, 255, 63, 1, 0, 0, 0, 128,
+ 127, 242, 111, 255, 255, 255, 191, 153, 7, 0, 0, 0, 255, 252, 255, 255,
+ 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32, 255, 253, 255, 255,
+ 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255,
+ 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255, 255, 127, 123, 1,
+ 0, 0, 1, 0, 127, 0, 0, 0, 248, 255, 255, 224, 255, 135, 255, 255,
+ 255, 128, 255, 255, 11, 0, 3, 0, 255, 255, 255, 0, 0, 0, 7, 0,
+ 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 253, 255, 255, 247, 247, 15, 0, 0, 127, 255, 255, 249,
+ 219, 7, 0, 0, 255, 31, 128, 63, 0, 64, 0, 0, 255, 15, 0, 0,
+ 143, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
+ 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-static RE_UINT8 re_general_category_stage_4[] = {
- 15, 15, 12, 23, 23, 23, 25, 23, 20, 21, 23, 24, 23, 19, 9, 9,
- 24, 24, 24, 23, 23, 1, 1, 1, 1, 20, 23, 21, 26, 22, 26, 2,
- 2, 2, 2, 20, 24, 21, 24, 15, 25, 25, 27, 23, 26, 27, 5, 28,
- 24, 16, 27, 26, 27, 24, 11, 11, 26, 11, 5, 29, 11, 23, 1, 24,
- 1, 2, 2, 24, 2, 1, 2, 5, 5, 5, 1, 3, 3, 2, 5, 2,
- 4, 4, 26, 26, 4, 26, 6, 6, 0, 0, 4, 2, 1, 23, 1, 0,
- 0, 1, 24, 1, 27, 6, 7, 7, 0, 4, 2, 23, 19, 0, 0, 27,
- 27, 25, 0, 6, 19, 6, 23, 6, 6, 23, 5, 0, 0, 5, 5, 23,
- 23, 0, 16, 16, 23, 25, 27, 27, 16, 0, 4, 5, 5, 6, 6, 5,
- 23, 5, 6, 16, 6, 4, 4, 6, 6, 27, 5, 27, 27, 5, 0, 16,
- 6, 0, 4, 0, 16, 6, 6, 8, 8, 8, 8, 6, 23, 4, 0, 8,
- 8, 0, 11, 27, 27, 0, 0, 23, 5, 8, 11, 5, 0, 25, 23, 27,
- 8, 5, 23, 11, 11, 0, 19, 5, 12, 5, 5, 20, 21, 0, 10, 10,
- 10, 5, 19, 23, 5, 4, 7, 0, 2, 0, 2, 4, 3, 3, 3, 26,
- 2, 26, 0, 26, 1, 26, 26, 0, 12, 12, 12, 16, 19, 19, 28, 29,
- 20, 28, 13, 14, 16, 12, 23, 28, 29, 23, 23, 22, 22, 23, 24, 20,
- 21, 23, 23, 12, 11, 4, 21, 4, 6, 7, 7, 6, 1, 27, 27, 1,
- 27, 2, 2, 27, 10, 1, 2, 10, 10, 11, 24, 27, 27, 20, 21, 27,
- 21, 24, 21, 20, 2, 6, 0, 2, 20, 23, 27, 4, 5, 10, 19, 20,
- 21, 21, 27, 10, 19, 4, 10, 4, 6, 26, 26, 4, 27, 11, 4, 23,
- 7, 23, 26, 1, 25, 27, 8, 23, 4, 8, 18, 18, 17, 17, 5, 24,
- 23, 20, 19, 22, 22, 20, 22, 22, 24, 19, 24, 0, 24, 26, 25, 0,
- 0, 11, 6, 11, 10, 0, 23, 10, 5, 11, 23, 16, 27, 8, 8, 16,
- 25, 11,
-};
+RE_UINT32 re_get_alphabetic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* General_Category: 13674 bytes. */
-
-RE_UINT32 re_get_general_category(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 9;
- code = ch ^ (f << 9);
- pos = (RE_UINT32)re_general_category_stage_1[f] << 5;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_general_category_stage_2[pos + f] << 3;
- f = code >> 1;
- code ^= f << 1;
- pos = (RE_UINT32)re_general_category_stage_3[pos + f] << 1;
- value = re_general_category_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Block. */
+ v = re_alphabetic_table_1[field_2];
+ v = re_alphabetic_table_2[(v << 5) | field_1];
+ v = re_alphabetic_table_3[(v << 2) | field_0];
-static RE_UINT8 re_block_stage_1[] = {
+ return (v >> offset) & 0x1;
+}
+
+/* Alphanumeric. */
+static RE_UINT8 re_alphanumeric_table_1[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
- 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 16, 17, 18, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38, 36, 36,
- 36, 39, 36, 36, 36, 36, 36, 36, 36, 36, 40, 41, 42, 42, 42, 42,
- 42, 42, 43, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 36, 36, 45,
- 36, 36, 36, 36, 46, 47, 48, 36, 49, 36, 50, 51, 52, 53, 54, 36,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 57, 57, 57, 58, 59, 60,
- 60, 60, 60, 61, 62, 62, 62, 62, 62, 62, 63, 36, 36, 36, 64, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 65, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
-};
-
-static RE_UINT16 re_block_stage_2[] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10,
- 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 14, 15, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22,
- 23, 23, 24, 25, 26, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29,
- 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33,
- 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
- 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40,
- 41, 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 46, 46, 46,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 48, 49, 49, 49, 50, 51, 52, 53, 54, 54, 54, 54,
- 55, 55, 55, 55, 55, 56, 57, 57, 58, 58, 59, 60, 61, 61, 61, 62,
- 63, 64, 64, 64, 64, 65, 66, 66, 67, 67, 67, 67, 68, 68, 69, 69,
- 70, 70, 71, 72, 73, 74, 75, 76, 77, 77, 77, 77, 78, 78, 79, 79,
- 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81,
- 82, 82, 82, 83, 84, 85, 86, 87, 88, 88, 89, 90, 91, 92, 92, 92,
- 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94,
- 95, 95, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 100, 100,
- 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 104,
- 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 107,
- 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109,
- 110, 110, 110, 111, 112, 112, 112, 112, 113, 114, 115, 115, 116, 116, 116, 117,
- 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 121,
- 122, 122, 123, 123, 123, 124, 124, 124, 125, 126, 127, 127, 128, 129, 130, 131,
- 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133,
- 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
- 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
- 137, 137, 137, 137, 138, 139, 140, 141, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 143, 143, 143, 144, 144, 144, 145, 146, 146, 146, 146, 146, 146, 146,
- 147, 148, 149, 149, 150, 150, 150, 151, 152, 153, 154, 155, 156, 156, 156, 157,
- 158, 158, 158, 159, 160, 160, 160, 161, 162, 163, 164, 165, 166, 166, 167, 167,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 170, 170,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
- 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
- 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
- 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 177, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 179, 180, 181, 182, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 185,
- 186, 186, 186, 186, 187, 187, 187, 187, 188, 188, 189, 189, 190, 191, 192, 193,
- 26, 26, 26, 26, 194, 195, 195, 196, 197, 198, 199, 200, 201, 202, 202, 26,
- 203, 203, 204, 205, 206, 207, 208, 208, 209, 210, 211, 212, 26, 26, 26, 26,
- 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 26, 26, 26, 26,
- 214, 214, 215, 216, 217, 218, 26, 219, 220, 221, 26, 26, 222, 223, 223, 223,
- 224, 224, 224, 225, 226, 26, 227, 227, 228, 228, 229, 230, 231, 232, 26, 26,
- 233, 233, 234, 26, 235, 235, 235, 235, 236, 236, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 237, 26, 26, 26, 26, 238, 239, 240, 241, 26, 26, 26, 242,
- 243, 243, 243, 243, 244, 244, 245, 246, 247, 247, 248, 249, 250, 250, 250, 251,
- 252, 252, 253, 26, 254, 255, 256, 256, 257, 257, 257, 257, 26, 26, 26, 26,
- 258, 258, 258, 258, 259, 259, 259, 26, 26, 26, 26, 26, 260, 260, 260, 260,
- 261, 261, 261, 262, 263, 263, 264, 26, 265, 265, 26, 26, 26, 26, 26, 26,
- 266, 266, 267, 26, 26, 268, 268, 268, 26, 26, 26, 26, 26, 269, 269, 269,
- 270, 270, 271, 272, 272, 273, 274, 274, 26, 26, 26, 26, 26, 26, 26, 26,
- 275, 275, 275, 276, 277, 277, 26, 26, 278, 278, 278, 279, 279, 280, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 281, 26, 26, 26, 26, 26, 26, 282, 282,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 286, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 288, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
- 289, 289, 289, 289, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 291, 292, 26, 26, 293, 294, 295, 295, 295, 295, 296, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 297, 297, 297, 26, 26, 26, 298, 298, 298, 298, 298, 26, 26, 299,
- 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
- 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
- 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301, 26, 26, 26, 26, 26, 26, 26, 26,
- 302, 302, 302, 302, 302, 302, 302, 302, 303, 304, 305, 306, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 307, 307, 307, 26, 26, 26, 26, 26, 26, 26, 26,
- 308, 308, 308, 308, 308, 309, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, 311, 311, 311, 311, 311, 311,
- 312, 312, 313, 26, 26, 26, 26, 314, 315, 315, 315, 316, 26, 26, 26, 26,
- 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317,
- 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317,
- 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318,
- 318, 318, 318, 318, 318, 319, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 320, 321, 26, 26, 26, 26, 26, 26, 322, 322, 323, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 324, 324, 26, 26, 26, 26, 26, 26, 26, 26,
- 325, 325, 325, 325, 325, 325, 325, 26, 326, 326, 326, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 327, 328, 328, 26, 26, 329, 329, 330, 26, 26, 26, 26, 26,
- 331, 331, 331, 331, 331, 331, 331, 331, 26, 26, 26, 26, 26, 26, 26, 26,
- 332, 333, 334, 334, 334, 335, 335, 335, 336, 336, 336, 336, 336, 336, 336, 336,
- 337, 337, 337, 337, 337, 337, 337, 337, 338, 338, 338, 338, 338, 338, 338, 338,
- 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
- 339, 339, 340, 341, 342, 342, 342, 342, 343, 343, 343, 343, 344, 344, 344, 344,
- 345, 345, 345, 345, 345, 345, 345, 345, 346, 346, 346, 346, 346, 346, 346, 346,
- 347, 347, 347, 348, 349, 349, 349, 349, 26, 26, 26, 26, 26, 26, 26, 26,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 26, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 352, 352, 352, 352, 352, 352,
- 352, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 354, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 356,
- 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 358, 358, 358, 358, 26, 26, 26, 26, 359, 359, 359, 359, 359, 359, 359, 360,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
- 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
- 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
-};
-
-static RE_UINT16 re_block_stage_3[] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11,
- 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14,
- 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17,
- 18, 18, 18, 18, 19, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
- 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25,
- 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29,
- 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33,
- 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
- 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41,
- 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45,
- 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49,
- 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 52, 52,
- 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
- 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58,
- 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 62, 62,
- 62, 62, 62, 62, 63, 63, 64, 64, 64, 64, 64, 64, 65, 65, 66, 66,
- 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 69,
- 70, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 73, 73,
- 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75,
- 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78,
- 78, 78, 78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 81,
- 82, 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, 84, 85, 85, 85, 85,
- 86, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, 88, 89, 89, 89, 89,
- 89, 89, 90, 90, 91, 91, 91, 91, 92, 92, 92, 92, 93, 93, 93, 93,
- 94, 94, 94, 94, 95, 95, 95, 95, 96, 96, 96, 96, 97, 97, 97, 97,
- 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100,
- 101, 101, 101, 101, 102, 102, 102, 102, 103, 103, 103, 103, 104, 104, 104, 104,
- 105, 105, 105, 105, 20, 20, 106, 106, 107, 107, 107, 107, 108, 108, 108, 108,
- 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111,
- 111, 111, 112, 112, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115,
- 116, 116, 116, 116, 117, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 119,
- 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
- 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 125, 125, 125, 125,
- 126, 126, 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, 129, 129, 129, 129,
- 129, 129, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, 133, 133, 133, 133,
- 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136,
- 137, 137, 137, 137, 138, 138, 138, 138, 139, 139, 139, 139, 140, 140, 140, 140,
- 141, 141, 141, 141, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144,
- 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146,
- 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149,
- 150, 150, 150, 150, 151, 151, 151, 151, 152, 152, 152, 152, 153, 153, 153, 153,
- 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 157, 157,
- 158, 158, 159, 159, 159, 159, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161,
- 162, 162, 162, 162, 162, 162, 163, 163, 164, 164, 164, 164, 165, 165, 165, 165,
- 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168,
- 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 171, 171, 171, 171,
- 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 175, 175,
- 175, 175, 175, 175, 176, 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, 178,
- 178, 178, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 181, 181,
- 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183,
- 183, 183, 20, 20, 184, 184, 184, 184, 185, 185, 185, 185, 186, 186, 186, 186,
- 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 20, 20, 189, 189, 189, 189,
- 190, 190, 190, 190, 191, 191, 191, 191, 192, 192, 192, 192, 193, 193, 193, 193,
- 194, 194, 194, 194, 195, 195, 195, 195, 196, 196, 196, 196, 197, 197, 197, 197,
- 198, 198, 198, 198, 199, 199, 199, 199, 200, 200, 200, 200, 201, 201, 201, 201,
- 201, 201, 20, 20, 202, 202, 202, 202, 202, 202, 20, 20, 203, 203, 203, 203,
- 204, 204, 204, 204, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 207, 207,
- 207, 207, 207, 207, 207, 207, 20, 20, 208, 208, 208, 208, 209, 209, 209, 209,
- 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212,
- 212, 212, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 215, 215, 215, 215,
- 216, 216, 216, 216, 216, 216, 20, 20, 217, 217, 217, 217, 217, 217, 218, 218,
- 218, 218, 218, 218, 219, 219, 219, 219, 220, 220, 220, 220, 221, 221, 221, 221,
- 222, 222, 222, 222, 223, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 225,
- 225, 225, 20, 20, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 20, 20,
- 228, 228, 228, 228, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 231, 231,
- 231, 231, 231, 231, 231, 231, 20, 20, 232, 232, 232, 232, 233, 233, 233, 233,
- 233, 233, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 236, 236, 236, 236,
- 236, 236, 20, 20, 237, 237, 237, 237, 238, 238, 238, 238, 239, 239, 239, 239,
- 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 20, 20, 242, 242, 242, 242,
- 242, 242, 243, 243, 244, 244, 244, 244, 245, 245, 245, 245, 246, 246, 246, 246,
- 246, 246, 20, 20, 20, 20, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248,
- 248, 248, 20, 20, 249, 249, 249, 249, 250, 250, 250, 250, 251, 251, 251, 251,
- 252, 252, 252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 255, 255, 255, 255,
- 255, 255, 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, 257, 257, 257,
- 258, 258, 258, 258, 259, 259, 20, 20, 260, 260, 260, 260, 261, 261, 261, 261,
- 262, 262, 262, 262, 262, 262, 20, 20, 263, 263, 263, 263, 264, 264, 264, 264,
- 265, 265, 265, 265, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 20, 20,
- 268, 268, 268, 268, 268, 268, 20, 20, 269, 269, 269, 269, 269, 269, 20, 20,
- 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, 20, 20, 273, 273,
- 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 20, 20, 275, 275, 275, 275,
- 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278,
- 279, 279, 279, 279, 280, 280, 280, 280, 281, 281, 281, 281, 282, 282, 282, 282,
- 282, 282, 283, 283, 283, 283, 283, 283, 284, 284, 284, 284, 285, 285, 285, 285,
- 286, 286, 286, 286, 287, 287, 287, 287, 288, 288, 288, 288, 289, 289, 289, 289,
- 289, 289, 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, 292, 292, 292, 292,
- 293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295,
- 295, 295, 20, 20, 296, 296, 296, 296, 297, 297, 297, 297, 298, 298, 298, 298,
- 298, 298, 20, 20, 299, 299, 299, 299, 300, 300, 300, 300,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 10, 39, 10, 10, 40, 10, 41, 42, 43, 10, 44, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 45, 13, 13, 13, 46, 47, 13,
+ 13, 13, 13, 48, 13, 13, 13, 13, 13, 13, 49, 10, 10, 10, 50, 10,
+ 13, 13, 13, 13, 51, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT16 re_block_stage_4[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
- 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,
- 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
- 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18,
- 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20,
- 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
- 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
- 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
- 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31,
- 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
- 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35,
- 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37,
- 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
- 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41,
- 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43,
- 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45,
- 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47,
- 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49,
- 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51,
- 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53,
- 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55,
- 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57,
- 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59,
- 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61,
- 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63,
- 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65,
- 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67,
- 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
- 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71,
- 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73,
- 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75,
- 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77,
- 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79,
- 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81,
- 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83,
- 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85,
- 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87,
- 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89,
- 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91,
- 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93,
- 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95,
- 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97,
- 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99,
- 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
- 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103,
- 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105,
- 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107,
- 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109,
- 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111,
- 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113,
- 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117,
- 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119,
- 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121,
- 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123,
- 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
- 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127,
- 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129,
- 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131,
- 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133,
- 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135,
- 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137,
- 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139,
- 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141,
- 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143,
- 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145,
- 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147,
- 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149,
- 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151,
- 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153,
- 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155,
- 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157,
- 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159,
- 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161,
- 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163,
- 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165,
- 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167,
- 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169,
- 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171,
- 172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173,
- 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
- 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177,
- 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179,
- 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181,
- 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183,
- 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 185,
- 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187,
- 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 189, 189,
- 190, 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191,
- 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193,
- 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195,
- 196, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197,
- 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199,
- 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201,
- 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, 203,
- 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205,
- 206, 206, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 207, 207, 207,
- 208, 208, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, 209, 209,
- 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 211,
- 212, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213,
- 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 215,
- 216, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217,
- 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, 219,
- 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 221,
- 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, 223,
- 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 225,
- 226, 226, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227, 227,
- 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229,
- 230, 230, 230, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 231,
- 232, 232, 232, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233,
- 234, 234, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
- 236, 236, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 237, 237,
- 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 239, 239,
- 240, 240, 240, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 241, 241,
- 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 243, 243,
- 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245,
- 246, 246, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 247,
- 248, 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249,
- 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 251,
- 252, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 253,
- 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255,
- 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, 257, 257, 257, 257, 257,
- 258, 258, 258, 258, 258, 258, 258, 258, 259, 259, 259, 259, 259, 259, 259, 259,
- 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, 261,
- 262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, 263, 263, 263, 263, 263,
- 264, 264, 264, 264, 264, 264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265,
- 266, 266, 266, 266, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 267, 267,
- 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, 269, 269, 269, 269,
- 270, 270, 270, 270, 270, 270, 270, 270, 271, 271, 271, 271, 271, 271, 271, 271,
- 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273, 273,
- 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275,
- 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277,
- 278, 278, 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279,
- 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281,
- 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283, 283, 283, 283, 283, 283,
- 284, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285,
- 286, 286, 286, 286, 286, 286, 286, 286, 287, 287, 287, 287, 287, 287, 287, 287,
- 288, 288, 288, 288, 288, 288, 288, 288, 289, 289, 289, 289, 289, 289, 289, 289,
- 290, 290, 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, 291, 291, 291, 291,
- 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293,
- 294, 294, 294, 294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295, 295, 295,
- 296, 296, 296, 296, 296, 296, 296, 296, 297, 297, 297, 297, 297, 297, 297, 297,
- 298, 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, 299,
- 300, 300, 300, 300, 300, 300, 300, 300,
+static RE_UINT16 re_alphanumeric_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12,
+ 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 5, 16, 17, 18, 19,
+ 20, 5, 21, 22, 5, 5, 23, 24, 25, 5, 26, 5, 5, 27, 5, 28,
+ 29, 30, 31, 32, 0, 33, 34, 35, 5, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 0, 76, 77, 78, 0, 79, 80, 81, 82, 83, 84, 0, 0,
+ 5, 85, 86, 5, 87, 5, 88, 89, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 90, 5, 91, 92, 93, 5, 94, 5, 74, 0, 95, 5, 5, 96,
+ 73, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 97, 2, 5, 5, 98, 99, 100, 100, 101, 5, 102, 103, 80,
+ 1, 5, 5, 31, 5, 104, 5, 105, 106, 107, 108, 109, 5, 110, 111, 0,
+ 112, 5, 106, 113, 111, 114, 79, 0, 5, 115, 116, 0, 5, 117, 5, 118,
+ 5, 119, 120, 87, 121, 66, 0, 122, 5, 5, 5, 5, 5, 5, 0, 123,
+ 5, 5, 5, 5, 5, 5, 5, 5, 96, 5, 124, 87, 5, 125, 126, 127,
+ 0, 0, 0, 128, 129, 0, 0, 0, 130, 131, 132, 5, 16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 133, 5, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 134, 106, 5, 5, 5, 5, 135, 5, 88, 5, 136, 119, 137, 137, 5,
+ 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 140, 73, 5, 141, 73, 5, 89, 142, 14, 5, 5, 143, 5, 0, 25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 84,
+ 5, 5, 5, 5, 30, 0, 25, 87, 5, 5, 5, 5, 5, 5, 5, 5,
+ 144, 145, 5, 146, 5, 5, 5, 95, 147, 148, 5, 5, 149, 5, 150, 151,
+ 152, 153, 5, 100, 5, 5, 154, 155, 5, 104, 156, 84, 5, 157, 158, 106,
+ 5, 119, 159, 160, 5, 106, 161, 162, 163, 164, 89, 86, 5, 5, 5, 165,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 166, 167, 112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 168, 5, 5, 169, 0, 170, 171, 172, 5, 5, 27, 173, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 87, 25, 5, 174, 5, 153, 175,
+ 0, 0, 0, 176, 5, 5, 5, 84, 1, 2, 2, 108, 5, 106, 177, 0,
+ 178, 179, 180, 0, 5, 5, 5, 74, 0, 0, 5, 181, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 5, 182, 0, 5, 26, 104, 74, 87, 5, 183, 0,
+ 5, 5, 5, 5, 87, 86, 184, 112, 5, 185, 5, 186, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 119, 105, 153, 0, 0, 0, 0,
+ 187, 188, 105, 119, 106, 0, 0, 189, 105, 169, 0, 0, 5, 190, 0, 0,
+ 191, 105, 0, 84, 84, 0, 81, 192, 5, 105, 105, 156, 27, 0, 0, 0,
+ 5, 5, 16, 0, 5, 156, 5, 156, 5, 193, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 194, 0, 0, 84, 195, 196, 0, 0, 25, 192, 119,
+ 5, 5, 196, 57, 148, 31, 25, 197, 5, 198, 199, 200, 5, 5, 201, 0,
+ 202, 203, 0, 0, 204, 121, 5, 197, 39, 48, 205, 186, 0, 0, 0, 0,
+ 5, 5, 206, 207, 5, 5, 208, 0, 0, 0, 0, 0, 5, 209, 210, 0,
+ 5, 106, 211, 0, 5, 212, 80, 0, 66, 165, 0, 0, 0, 0, 0, 0,
+ 5, 31, 0, 0, 0, 5, 5, 213, 214, 215, 216, 0, 0, 217, 29, 218,
+ 5, 219, 25, 5, 220, 0, 5, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 221, 222, 223, 224, 174, 225, 0, 0, 226, 227, 228, 229, 230, 80, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 231, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 169, 0, 0, 0,
+ 5, 5, 5, 143, 5, 5, 5, 5, 5, 5, 186, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 31, 106, 80, 0, 0, 25, 233, 5, 95, 234, 235, 95, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 236, 5, 237, 0, 0, 238,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 239,
+ 5, 5, 5, 5, 5, 5, 105, 0, 16, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 106, 0, 240, 199, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 112, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 33, 5, 243, 244, 245, 5, 246, 247, 248, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 249, 250, 89, 33, 33, 134, 134, 221, 221, 251, 5,
+ 252, 253, 0, 0, 0, 0, 0, 0, 5, 254, 255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 256, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 192, 0, 5, 5, 257, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 245, 258, 259, 260, 261, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 86, 86, 80, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 87, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 181, 5, 5, 5, 5, 5, 5,
+ 87, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 263, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 79,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 32, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_alphanumeric_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4,
+ 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0,
+ 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 255, 255, 254, 255, 195, 255, 255, 255, 255, 239, 31,
+ 254, 225, 255, 159, 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0,
+ 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0, 255, 255, 255, 1,
+ 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 240, 255, 248, 3, 255, 255,
+ 255, 255, 255, 239, 255, 223, 225, 255, 207, 255, 254, 255, 239, 159, 249, 255,
+ 255, 253, 197, 227, 159, 89, 128, 176, 207, 255, 3, 16, 238, 135, 249, 255,
+ 255, 253, 109, 195, 135, 25, 2, 94, 192, 255, 63, 0, 238, 191, 251, 255,
+ 255, 253, 237, 227, 191, 27, 1, 0, 207, 255, 0, 30, 238, 159, 249, 255,
+ 159, 25, 192, 176, 207, 255, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195,
+ 199, 29, 129, 0, 192, 255, 0, 0, 239, 223, 253, 255, 255, 253, 255, 227,
+ 223, 29, 96, 7, 207, 255, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64,
+ 207, 255, 6, 0, 255, 223, 253, 255, 255, 255, 255, 231, 223, 93, 240, 128,
+ 207, 255, 0, 252, 238, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255,
+ 192, 255, 12, 0, 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 255, 3,
+ 214, 247, 255, 255, 175, 255, 255, 59, 95, 32, 255, 243, 1, 0, 0, 0,
+ 255, 3, 0, 0, 255, 254, 255, 255, 255, 31, 254, 255, 3, 255, 255, 254,
+ 255, 255, 255, 31, 255, 255, 127, 249, 255, 3, 255, 255, 255, 255, 255, 63,
+ 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255,
+ 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 0, 0,
+ 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 15, 0,
+ 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255, 255, 1, 128, 16,
+ 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 1,
+ 192, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 3,
+ 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 128, 255, 255, 239, 255,
+ 239, 15, 255, 3, 255, 243, 255, 255, 191, 255, 3, 0, 255, 255, 127, 0,
+ 255, 227, 255, 255, 255, 1, 255, 255, 0, 222, 111, 4, 128, 255, 31, 0,
+ 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
+ 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62, 80, 189, 255, 243,
+ 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255, 31, 120, 12, 0,
+ 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0, 224, 0, 0, 0,
+ 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255, 255, 127, 0, 0,
+ 255, 31, 255, 255, 255, 15, 0, 0, 255, 127, 240, 143, 0, 0, 128, 255,
+ 252, 255, 255, 255, 255, 249, 255, 255, 252, 7, 0, 0, 0, 0, 224, 255,
+ 191, 255, 255, 255, 255, 0, 0, 0, 47, 0, 255, 3, 0, 0, 252, 232,
+ 255, 255, 7, 0, 255, 255, 247, 255, 0, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 5, 0, 0, 56, 255, 255, 60, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 7, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95,
+ 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255, 0, 0, 255, 15,
+ 0, 0, 223, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
+ 255, 63, 255, 63, 255, 255, 31, 0, 255, 255, 1, 0, 15, 255, 62, 0,
+ 255, 255, 15, 255, 255, 0, 255, 255, 15, 0, 0, 0, 63, 253, 255, 255,
+ 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254,
+ 31, 0, 0, 0, 255, 0, 255, 3, 255, 27, 3, 0, 128, 0, 255, 255,
+ 63, 0, 0, 0, 255, 1, 255, 3, 255, 255, 199, 255, 240, 0, 255, 255,
+ 255, 255, 71, 0, 30, 192, 255, 23, 255, 255, 251, 255, 255, 255, 159, 64,
+ 127, 189, 255, 191, 159, 25, 129, 224, 187, 7, 255, 131, 3, 0, 0, 0,
+ 179, 0, 255, 3, 255, 255, 63, 127, 0, 0, 0, 63, 17, 0, 255, 3,
+ 255, 255, 63, 1, 255, 3, 0, 128, 127, 242, 111, 255, 255, 255, 191, 153,
+ 7, 0, 255, 3, 255, 252, 255, 255, 26, 0, 0, 0, 255, 255, 231, 127,
+ 255, 255, 255, 32, 255, 253, 255, 255, 255, 255, 127, 127, 1, 0, 255, 3,
+ 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255, 255, 255, 127, 180,
+ 203, 0, 255, 3, 191, 253, 255, 255, 255, 127, 123, 1, 0, 0, 1, 0,
+ 127, 0, 0, 0, 255, 63, 0, 0, 15, 0, 255, 3, 248, 255, 255, 224,
+ 255, 135, 255, 255, 255, 128, 255, 255, 11, 0, 3, 0, 255, 255, 255, 0,
+ 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 255, 223,
+ 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
+ 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 247, 207, 255, 255,
+ 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63, 255, 67, 0, 0,
+ 255, 15, 255, 3, 143, 8, 255, 3, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-/* Block: 13160 bytes. */
-
-RE_UINT32 re_get_block(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 10;
- code = ch ^ (f << 10);
- pos = (RE_UINT32)re_block_stage_1[f] << 5;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_block_stage_2[pos + f] << 2;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_block_stage_3[pos + f] << 3;
- value = re_block_stage_4[pos + code];
-
- return value;
-}
-
-/* Script. */
-
-static RE_UINT8 re_script_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 14, 15,
- 16, 17, 18, 19, 20, 14, 21, 14, 22, 14, 14, 14, 14, 23, 24, 24,
- 25, 26, 14, 14, 14, 14, 27, 28, 14, 14, 29, 30, 31, 32, 33, 34,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 14, 40,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 41, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-};
+RE_UINT32 re_get_alphanumeric(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_script_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54,
- 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59,
- 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 80,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 96,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 70, 70, 98, 99, 100, 101, 102, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 97, 113, 114, 115, 116, 117, 118, 97, 119, 119, 120, 97,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 97, 132, 97, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 97, 142, 143, 97, 144, 145, 146, 147, 97,
- 148, 149, 97, 150, 151, 152, 97, 97, 153, 154, 155, 156, 97, 157, 97, 158,
- 159, 159, 159, 159, 159, 159, 159, 160, 161, 159, 162, 97, 97, 97, 97, 97,
- 163, 163, 163, 163, 163, 163, 163, 163, 164, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 165, 165, 165, 165, 166, 97, 97, 97,
- 167, 167, 167, 167, 168, 169, 170, 171, 97, 97, 97, 97, 172, 173, 174, 175,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177,
- 176, 176, 176, 176, 176, 178, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 179, 180, 181, 182, 182, 183, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 184, 185, 97, 97, 97, 97, 97, 97,
- 59, 186, 187, 188, 189, 190, 191, 97, 192, 193, 194, 59, 59, 195, 59, 196,
- 197, 197, 197, 197, 197, 198, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 199, 97, 200, 97, 97, 201, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 202, 203, 204, 97, 97, 97, 97, 97, 205, 206, 207, 97, 208, 209, 97, 97,
- 210, 211, 212, 213, 214, 97, 59, 59, 59, 59, 59, 59, 59, 215, 216, 217,
- 218, 219, 220, 221, 222, 223, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 224, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 225, 70,
- 226, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 227, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 228, 97, 97, 97, 97, 97, 97, 97, 97,
- 70, 70, 70, 70, 229, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 230, 97, 231, 232, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT16 re_script_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3,
- 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11,
- 12, 13, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 14,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 20, 21, 21, 21, 22, 20, 21, 21, 21, 21,
- 21, 23, 24, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 27, 28, 26,
- 29, 30, 31, 32, 31, 31, 31, 31, 33, 34, 35, 31, 31, 31, 36, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 31, 31, 31, 31,
- 37, 38, 37, 37, 37, 37, 37, 37, 37, 39, 31, 31, 31, 31, 31, 31,
- 40, 40, 40, 40, 40, 40, 41, 26, 42, 42, 42, 42, 42, 42, 42, 43,
- 44, 44, 44, 44, 44, 45, 44, 46, 47, 47, 47, 48, 37, 49, 26, 26,
- 26, 26, 26, 26, 31, 31, 50, 51, 26, 26, 52, 31, 53, 31, 31, 31,
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 54, 56, 54, 54, 54,
- 57, 58, 59, 60, 60, 61, 62, 63, 58, 64, 65, 66, 67, 60, 60, 68,
- 69, 70, 71, 72, 72, 73, 74, 75, 70, 76, 77, 78, 79, 72, 80, 26,
- 81, 82, 83, 84, 84, 85, 86, 87, 82, 88, 89, 26, 90, 84, 91, 92,
- 93, 94, 95, 96, 96, 97, 98, 99, 94, 100, 101, 102, 103, 96, 96, 26,
- 104, 105, 106, 107, 108, 105, 109, 110, 105, 106, 111, 26, 112, 109, 109, 113,
- 114, 115, 116, 114, 114, 116, 114, 117, 115, 118, 119, 120, 121, 114, 122, 114,
- 123, 124, 125, 123, 123, 125, 126, 127, 124, 128, 129, 130, 131, 123, 132, 26,
- 133, 134, 135, 136, 136, 136, 136, 136, 134, 135, 137, 136, 138, 136, 136, 136,
- 139, 140, 141, 142, 140, 140, 143, 144, 141, 145, 146, 140, 147, 140, 148, 26,
- 149, 150, 150, 150, 150, 150, 150, 151, 150, 150, 150, 152, 26, 26, 26, 26,
- 153, 154, 155, 155, 156, 155, 155, 157, 158, 157, 155, 159, 26, 26, 26, 26,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 160, 160, 160, 162, 161, 160,
- 160, 160, 160, 161, 160, 160, 160, 163, 160, 163, 164, 165, 26, 26, 26, 26,
- 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
- 166, 166, 166, 166, 167, 167, 167, 167, 168, 169, 167, 167, 167, 167, 167, 170,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 174, 173, 172, 172, 172, 172,
- 172, 173, 172, 172, 172, 172, 173, 174, 173, 172, 174, 172, 172, 172, 172, 172,
- 172, 172, 173, 172, 172, 172, 172, 172, 172, 172, 172, 175, 172, 172, 172, 176,
- 172, 172, 172, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179,
- 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
- 181, 181, 181, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 183, 185,
- 186, 187, 188, 26, 189, 189, 190, 26, 191, 191, 192, 26, 193, 194, 195, 26,
- 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 196, 198, 196, 198,
- 199, 200, 201, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 203,
- 201, 201, 201, 201, 201, 204, 180, 180, 180, 180, 180, 180, 180, 180, 205, 26,
- 206, 206, 206, 207, 206, 208, 206, 208, 209, 206, 210, 210, 210, 211, 212, 26,
- 213, 213, 213, 213, 213, 214, 213, 213, 213, 215, 213, 216, 196, 196, 196, 196,
- 217, 217, 217, 218, 219, 219, 219, 219, 219, 219, 219, 220, 219, 219, 219, 221,
- 219, 222, 219, 222, 219, 223, 9, 224, 26, 26, 26, 26, 26, 26, 26, 26,
- 225, 225, 225, 225, 225, 225, 225, 225, 225, 226, 225, 225, 225, 225, 225, 227,
- 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 230, 231,
- 232, 232, 232, 232, 232, 232, 232, 233, 232, 234, 235, 235, 235, 235, 235, 235,
- 18, 236, 167, 167, 167, 167, 167, 237, 228, 26, 238, 9, 239, 240, 241, 242,
- 2, 2, 2, 2, 243, 244, 2, 2, 2, 2, 2, 245, 246, 247, 2, 248,
- 2, 2, 2, 2, 2, 2, 2, 249, 9, 9, 9, 9, 9, 9, 9, 250,
- 14, 14, 251, 251, 14, 14, 14, 14, 251, 251, 14, 252, 14, 14, 14, 251,
- 14, 14, 14, 14, 14, 14, 253, 14, 253, 14, 254, 255, 14, 14, 256, 257,
- 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 260, 261,
- 0, 262, 2, 263, 0, 0, 0, 0, 26, 26, 9, 9, 9, 9, 264, 26,
- 0, 0, 0, 0, 265, 266, 4, 0, 0, 267, 0, 0, 2, 2, 2, 2,
- 2, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 262, 26, 26, 26, 0, 269, 26, 26, 0, 0, 0, 0,
- 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0,
- 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 273, 273, 273, 273, 273, 274, 273, 273, 273, 273, 273, 274, 2, 2, 2, 2,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 275, 276,
- 167, 167, 167, 167, 168, 169, 277, 277, 277, 277, 277, 277, 277, 278, 279, 278,
- 172, 172, 174, 26, 174, 174, 174, 174, 174, 174, 174, 174, 18, 18, 18, 18,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26,
- 280, 280, 280, 281, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 282, 26,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 283, 26, 26, 26, 0, 284,
- 285, 0, 0, 0, 286, 287, 0, 288, 289, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 291, 292, 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 295,
- 296, 297, 297, 297, 297, 297, 298, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 299, 0, 0, 297, 297, 297, 300, 0, 0, 0, 0, 284, 26, 294, 294,
- 171, 171, 171, 299, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 301,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 294, 294, 294, 294, 302,
- 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 0, 0, 0, 0, 0,
- 280, 280, 280, 280, 280, 280, 283, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 26, 26,
- 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
- 303, 304, 303, 303, 303, 303, 303, 303, 305, 26, 306, 306, 306, 306, 306, 306,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 308, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 26,
- 0, 0, 0, 0, 310, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 311, 2, 2, 2, 2, 2, 2, 312, 26, 26, 26, 26, 26, 313, 2,
- 314, 314, 314, 314, 314, 315, 0, 316, 317, 317, 317, 317, 317, 317, 317, 26,
- 318, 318, 318, 318, 318, 318, 318, 318, 319, 320, 318, 321, 54, 54, 54, 54,
- 322, 322, 322, 322, 322, 323, 324, 324, 324, 324, 325, 326, 171, 171, 171, 327,
- 328, 328, 328, 328, 328, 328, 328, 328, 328, 329, 328, 330, 166, 166, 166, 331,
- 332, 332, 332, 332, 332, 332, 333, 26, 332, 334, 332, 335, 166, 166, 166, 166,
- 336, 336, 336, 336, 336, 336, 336, 336, 337, 26, 26, 338, 339, 339, 340, 26,
- 341, 341, 341, 26, 174, 174, 2, 2, 2, 2, 2, 342, 343, 26, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 339, 339, 339, 339, 339, 344, 339, 345,
- 171, 171, 171, 171, 346, 26, 171, 171, 299, 347, 171, 171, 171, 171, 171, 346,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 283, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 348, 26, 26, 26, 26,
- 349, 26, 350, 351, 25, 25, 352, 353, 354, 25, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 355, 26, 52, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 356, 26, 26, 31, 31, 31, 31, 31, 31,
- 31, 31, 357, 31, 31, 31, 31, 31, 31, 26, 26, 26, 26, 26, 31, 51,
- 9, 9, 0, 316, 9, 358, 0, 0, 0, 0, 359, 0, 262, 284, 50, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 360,
- 361, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 362, 294, 293, 294,
- 294, 294, 294, 363, 171, 171, 171, 299, 364, 364, 364, 365, 262, 262, 26, 366,
- 367, 368, 367, 367, 369, 367, 367, 370, 367, 371, 367, 371, 26, 26, 26, 26,
- 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 372,
- 373, 0, 0, 0, 0, 0, 374, 0, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 257, 0, 284, 375, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 376,
- 377, 377, 377, 378, 379, 379, 379, 379, 379, 379, 380, 26, 381, 0, 0, 284,
- 382, 382, 382, 382, 383, 384, 385, 385, 385, 386, 387, 387, 387, 387, 387, 388,
- 389, 389, 389, 390, 391, 391, 391, 391, 392, 391, 393, 26, 26, 26, 26, 26,
- 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 395, 395, 395, 395, 395, 395,
- 396, 396, 396, 397, 396, 398, 399, 399, 399, 399, 400, 399, 399, 399, 399, 400,
- 401, 401, 401, 401, 401, 26, 402, 402, 402, 402, 402, 402, 403, 404, 26, 26,
- 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405,
- 405, 405, 405, 405, 405, 405, 406, 26, 405, 405, 407, 26, 405, 26, 26, 26,
- 408, 409, 410, 410, 410, 410, 411, 412, 413, 413, 414, 413, 415, 415, 415, 415,
- 416, 416, 416, 417, 418, 416, 26, 26, 26, 26, 26, 26, 419, 419, 420, 421,
- 422, 422, 422, 423, 424, 424, 424, 425, 26, 26, 26, 26, 26, 26, 26, 26,
- 426, 426, 426, 426, 427, 427, 427, 428, 427, 427, 429, 427, 427, 427, 427, 427,
- 430, 431, 432, 433, 434, 434, 435, 436, 434, 437, 434, 437, 438, 438, 438, 438,
- 439, 439, 439, 439, 26, 26, 26, 26, 440, 440, 440, 440, 441, 442, 441, 26,
- 443, 443, 443, 443, 443, 443, 444, 445, 446, 446, 447, 446, 448, 448, 449, 448,
- 450, 450, 451, 452, 26, 453, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 454, 454, 454, 454, 454, 454, 454, 454, 454, 455, 26, 26, 26, 26, 26, 26,
- 456, 456, 456, 456, 456, 456, 457, 26, 456, 456, 456, 456, 456, 456, 457, 458,
- 459, 459, 459, 459, 459, 26, 459, 460, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 31, 31, 31, 461,
- 462, 462, 462, 462, 462, 26, 463, 463, 463, 463, 463, 464, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 465, 465, 466, 26,
- 467, 467, 467, 467, 467, 467, 467, 467, 467, 468, 469, 467, 467, 467, 26, 470,
- 471, 471, 471, 471, 471, 471, 471, 471, 472, 473, 474, 474, 474, 475, 474, 476,
- 477, 477, 477, 477, 477, 477, 478, 477, 479, 26, 480, 480, 480, 480, 481, 26,
- 482, 482, 482, 482, 482, 482, 482, 482, 482, 483, 482, 482, 484, 140, 485, 26,
- 486, 486, 487, 486, 486, 486, 486, 488, 26, 26, 26, 26, 26, 26, 26, 26,
- 489, 490, 491, 492, 491, 493, 494, 494, 494, 494, 494, 494, 494, 495, 494, 496,
- 497, 498, 499, 500, 500, 501, 502, 503, 498, 504, 505, 506, 507, 508, 508, 26,
- 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 510, 26, 26, 26, 26,
- 511, 511, 511, 511, 511, 511, 511, 511, 511, 26, 511, 512, 26, 26, 26, 26,
- 513, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 514, 26, 26, 26, 26,
- 515, 515, 515, 515, 515, 515, 515, 515, 516, 26, 515, 517, 201, 518, 26, 26,
- 519, 519, 519, 519, 519, 519, 519, 520, 519, 521, 26, 26, 26, 26, 26, 26,
- 522, 522, 522, 523, 522, 524, 522, 522, 26, 26, 26, 26, 26, 26, 26, 26,
- 525, 525, 525, 525, 525, 525, 525, 526, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 528, 529,
- 26, 26, 26, 26, 530, 531, 530, 530, 530, 530, 530, 531, 532, 26, 26, 26,
- 533, 533, 533, 533, 533, 533, 533, 533, 533, 26, 534, 534, 534, 534, 534, 534,
- 534, 534, 534, 534, 535, 26, 26, 26, 536, 536, 536, 536, 536, 536, 536, 537,
- 538, 539, 538, 538, 538, 538, 540, 538, 541, 26, 538, 538, 538, 542, 543, 543,
- 543, 543, 544, 543, 543, 545, 546, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 547, 548, 549, 549, 549, 549, 547, 550, 549, 26, 549, 551, 552, 553, 554, 554,
- 554, 555, 556, 557, 554, 558, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 559, 559, 559, 560,
- 26, 26, 26, 26, 26, 26, 26, 26, 109, 109, 109, 109, 109, 109, 561, 562,
- 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563,
- 563, 563, 563, 564, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 565, 566, 26,
- 563, 563, 563, 563, 563, 563, 563, 563, 567, 26, 26, 26, 26, 26, 26, 26,
- 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
- 568, 568, 568, 568, 568, 569, 568, 570, 26, 26, 26, 26, 26, 26, 26, 26,
- 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571,
- 571, 571, 571, 571, 571, 571, 571, 571, 572, 26, 26, 26, 26, 26, 26, 26,
- 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
- 309, 309, 309, 309, 309, 309, 309, 573, 574, 574, 574, 575, 574, 576, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 577, 577, 577, 578, 578, 26,
- 579, 579, 579, 579, 579, 579, 579, 579, 580, 26, 579, 581, 581, 579, 579, 582,
- 579, 579, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 583, 583, 583, 583, 583, 583, 583, 583,
- 583, 583, 583, 584, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 585, 585, 585, 585, 585, 585, 585, 585, 585, 586, 585, 585, 585, 585, 585, 585,
- 585, 587, 585, 585, 26, 26, 26, 26, 26, 26, 26, 26, 588, 26, 26, 26,
- 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589,
- 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 26,
- 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 590, 26,
- 591, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 291, 26, 26, 26, 26, 26, 26, 592, 26, 593, 26, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 595,
- 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 597, 596, 598,
- 596, 599, 596, 600, 284, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 26,
- 0, 0, 0, 0, 262, 361, 0, 0, 0, 0, 0, 0, 601, 602, 0, 603,
- 604, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, 26, 26,
- 14, 14, 14, 14, 14, 14, 14, 14, 251, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 284, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 26, 0, 0, 0, 607,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0,
- 0, 0, 0, 259, 608, 609, 0, 610, 611, 0, 0, 0, 0, 0, 0, 0,
- 612, 613, 259, 259, 0, 0, 0, 614, 615, 616, 617, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0,
- 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618,
- 618, 619, 26, 620, 621, 618, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 274, 273, 273, 622, 623, 624, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 625, 625, 625, 625, 625, 626, 625, 627, 625, 628, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 629, 629, 629, 629, 629, 629, 629, 630,
- 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631, 632, 631, 633, 26, 26, 26, 26, 26,
- 634, 634, 634, 634, 634, 634, 634, 634, 634, 635, 634, 636, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 361, 0,
- 0, 0, 0, 0, 0, 0, 637, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 361, 0, 0, 0, 0, 0, 0, 272, 26, 26, 26, 26, 26, 26, 26, 26,
- 638, 31, 31, 31, 639, 640, 641, 642, 643, 644, 639, 645, 639, 641, 641, 646,
- 31, 647, 31, 648, 649, 647, 31, 648, 26, 26, 26, 26, 26, 26, 355, 26,
- 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 284, 26, 0, 262, 361, 0, 361, 0, 361, 0, 0, 0, 272, 26,
- 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0,
- 0, 0, 0, 0, 0, 637, 26, 26, 26, 26, 26, 26, 650, 0, 0, 0,
- 651, 26, 0, 0, 0, 0, 0, 284, 0, 607, 316, 26, 272, 26, 26, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 26, 0, 637, 0, 269,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 284, 26, 26,
- 0, 284, 0, 0, 0, 0, 0, 0, 0, 26, 0, 316, 0, 0, 0, 0,
- 0, 26, 0, 0, 0, 272, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 616,
- 0, 0, 0, 0, 613, 652, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 26, 0, 272, 284, 269,
- 269, 26, 272, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 653, 26, 26, 26, 26, 26,
- 280, 280, 280, 280, 280, 280, 654, 26, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 283, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 348, 26, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 655, 26, 26, 26,
- 280, 280, 280, 283, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 656, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 26, 26,
-};
+ v = re_alphanumeric_table_1[field_2];
+ v = re_alphanumeric_table_2[(v << 5) | field_1];
+ v = re_alphanumeric_table_3[(v << 2) | field_0];
-static RE_UINT8 re_script_stage_4[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1,
- 1, 1, 35, 35, 1, 1, 1, 1, 41, 41, 41, 41, 41, 41, 41, 41,
- 3, 3, 3, 3, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3, 1, 3,
- 0, 0, 0, 0, 3, 1, 3, 1, 3, 3, 3, 0, 3, 0, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
- 3, 3, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 41, 41, 4,
- 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 5, 1, 5, 0, 0, 5, 5, 5,
- 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 0, 0, 6,
- 6, 6, 6, 6, 6, 0, 0, 0, 7, 7, 7, 7, 7, 1, 7, 7,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 1, 7, 0, 7, 1, 1, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 7, 7,
- 41, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 8, 0, 0, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 0, 66, 66, 66,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0,
- 82, 82, 82, 82, 82, 82, 82, 0, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 0, 0, 95, 0, 8, 8, 8, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 41, 41, 41, 41, 10, 10, 10,
- 10, 10, 10, 10, 1, 1, 10, 10, 11, 11, 11, 11, 0, 11, 11, 11,
- 11, 11, 11, 11, 11, 0, 0, 11, 11, 0, 0, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
- 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11,
- 11, 0, 0, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11,
- 0, 0, 0, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 0, 0, 12, 12, 12, 0, 12, 12, 12,
- 12, 12, 12, 0, 0, 0, 0, 12, 12, 0, 0, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12,
- 12, 0, 12, 12, 0, 12, 12, 0, 12, 12, 0, 0, 12, 0, 12, 12,
- 12, 0, 0, 12, 12, 12, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 12, 12, 12, 12, 0, 12, 0, 0, 0, 0, 0, 0, 0, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 0, 0, 13, 13, 13, 0, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
- 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13,
- 13, 13, 0, 13, 13, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0,
- 0, 13, 13, 13, 13, 13, 13, 13, 0, 14, 14, 14, 0, 14, 14, 14,
- 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14,
- 14, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14,
- 14, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14,
- 0, 0, 0, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 14, 14,
- 0, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15,
- 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, 15, 0, 15, 15,
- 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 15,
- 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16,
- 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, 16,
- 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0,
- 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16,
- 0, 0, 0, 0, 0, 0, 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 0, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17,
- 17, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0,
- 0, 0, 0, 0, 0, 0, 17, 0, 17, 17, 17, 17, 0, 0, 17, 17,
- 0, 17, 17, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 18, 18,
- 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18, 18, 18, 18,
- 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 19, 19, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19,
- 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19,
- 0, 0, 19, 19, 19, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 1,
- 20, 20, 20, 20, 0, 0, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
- 21, 21, 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, 0, 0,
- 21, 21, 21, 21, 21, 0, 21, 0, 21, 21, 0, 0, 21, 21, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22, 22, 22, 0, 22, 22,
- 22, 22, 22, 22, 22, 1, 1, 1, 1, 22, 22, 0, 0, 0, 0, 0,
- 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 0, 24, 0, 0, 0, 0, 0, 24, 0, 0,
- 24, 24, 24, 1, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 0,
- 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 0, 0, 26, 26, 26,
- 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 0, 0, 0, 0, 0, 0,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 1, 1, 1, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 42, 42,
- 42, 42, 42, 42, 42, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 1, 1, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0,
- 31, 31, 0, 0, 0, 0, 0, 0, 32, 32, 1, 1, 32, 1, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 0, 0, 0, 0, 0, 28, 28, 28, 28, 28, 28, 0, 0,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0,
- 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, 46, 46, 46, 46,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
- 47, 47, 47, 47, 47, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 0, 0,
- 56, 56, 56, 0, 0, 0, 56, 56, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 0, 0, 54, 54, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 0, 78, 78, 78, 78, 78, 0, 0, 78,
- 78, 78, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 78, 78, 0, 0,
- 41, 41, 41, 41, 41, 41, 41, 0, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 0, 0, 0, 0, 62, 62, 62, 62, 62, 0, 0, 0,
- 67, 67, 67, 67, 67, 67, 67, 67, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93, 93,
- 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 68, 68, 68, 68, 68,
- 68, 68, 0, 0, 0, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
- 4, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 0, 0, 24, 24, 24,
- 41, 41, 41, 1, 41, 41, 41, 41, 41, 1, 41, 41, 41, 41, 41, 41,
- 41, 1, 1, 1, 1, 41, 1, 1, 1, 1, 1, 1, 41, 1, 1, 1,
- 41, 41, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
- 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 41, 41, 0, 41, 41, 41, 41, 41, 3, 3, 3, 3, 3, 3, 0, 0,
- 0, 3, 0, 3, 0, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3,
- 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
- 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 1, 1, 1, 1, 41, 41, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
- 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 2, 2, 2, 0, 0, 0,
- 41, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 3, 1,
- 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 2, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 53, 53, 53, 53, 53, 53, 53, 53, 1, 1, 1, 1, 0, 0, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 0, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 0, 55, 55, 55, 55, 0, 0, 0, 0,
- 0, 55, 55, 55, 55, 55, 55, 55, 58, 58, 58, 58, 58, 58, 58, 58,
- 0, 0, 0, 0, 0, 0, 0, 58, 58, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 36, 1, 36,
- 1, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 41, 41, 41, 25, 25,
- 36, 36, 36, 36, 1, 1, 1, 1, 0, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0,
- 0, 41, 41, 1, 1, 33, 33, 33, 1, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 34, 34, 34,
- 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
- 35, 35, 35, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 1,
- 34, 34, 34, 34, 34, 34, 34, 1, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 0,
- 83, 83, 83, 83, 83, 83, 83, 83, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 0, 0, 0, 0, 84, 84, 84, 84, 84, 84, 84, 84,
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2,
- 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
- 0, 0, 0, 0, 0, 0, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 1, 72,
- 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 73, 25, 25, 25, 25, 25, 0, 0, 0,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 1,
- 85, 85, 0, 0, 0, 0, 85, 85, 23, 23, 23, 23, 23, 23, 23, 0,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0,
- 77, 77, 77, 77, 77, 77, 0, 0, 77, 77, 0, 0, 77, 77, 77, 77,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0,
- 0, 0, 0, 79, 79, 79, 79, 79, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 0, 0, 26, 26, 26, 26, 26, 26, 0,
- 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
- 86, 86, 86, 86, 86, 86, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0,
- 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25,
- 36, 36, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 0,
- 6, 6, 0, 6, 6, 0, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 1, 1, 0, 0, 7, 7, 7, 7, 7, 7,
- 41, 41, 41, 41, 41, 41, 4, 4, 1, 1, 1, 0, 1, 1, 1, 1,
- 7, 7, 7, 7, 7, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1,
- 0, 0, 25, 25, 25, 25, 25, 25, 0, 0, 25, 25, 25, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
- 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0,
- 48, 48, 48, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 41, 0, 0, 74, 74, 74, 74, 74, 74, 74, 74,
- 74, 74, 74, 74, 74, 0, 0, 0, 75, 75, 75, 75, 75, 75, 75, 75,
- 75, 0, 0, 0, 0, 0, 0, 0, 41, 1, 1, 1, 1, 1, 1, 1,
- 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 49, 49, 49, 0, 49, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 0, 0,
- 40, 40, 40, 40, 40, 40, 40, 40, 50, 50, 50, 50, 50, 50, 50, 50,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0,
- 51, 51, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 0, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 103, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 0, 110, 110, 110, 110, 110, 110, 0, 0,
- 52, 52, 52, 52, 52, 52, 0, 0, 52, 0, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 52,
- 52, 0, 0, 0, 52, 0, 0, 52, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 0, 87, 118, 118, 118, 118, 118, 118, 118, 118,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 0,
- 0, 0, 0, 0, 0, 0, 0, 117, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 64,
- 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0, 76,
- 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97,
- 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97,
- 61, 61, 61, 61, 0, 61, 61, 0, 0, 0, 0, 0, 61, 61, 61, 61,
- 61, 61, 61, 61, 0, 61, 61, 61, 0, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0,
- 61, 61, 61, 0, 0, 0, 0, 61, 61, 0, 0, 0, 0, 0, 0, 0,
- 88, 88, 88, 88, 88, 88, 88, 88, 116, 116, 116, 116, 116, 116, 116, 116,
- 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0,
- 0, 0, 0, 112, 112, 112, 112, 112, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0, 0, 0, 0, 0,
- 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0,
- 0, 121, 121, 121, 121, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121,
- 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 0, 0,
- 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 130, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 147, 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 0, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 0, 0, 0, 0, 94, 94, 94, 94, 94, 94,
- 0, 0, 0, 0, 0, 0, 0, 94, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0,
- 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0,
- 101, 101, 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0,
- 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0,
- 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 0, 129, 129, 129, 129, 129, 129, 129, 0,
- 129, 0, 129, 129, 129, 129, 0, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 129, 129, 129, 129, 0, 129, 129, 129, 0, 0, 0, 0, 0, 0,
- 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0,
- 123, 123, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 0, 107, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 107, 107, 0, 0, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107,
- 107, 0, 107, 107, 0, 107, 107, 107, 107, 107, 0, 41, 107, 107, 107, 107,
- 107, 0, 0, 107, 107, 107, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107,
- 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 0, 0, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 0, 135, 0, 135, 135, 135, 124, 124, 124, 124, 124, 124, 124, 124,
- 124, 124, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 0, 0, 0, 114, 114, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 0, 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, 0,
- 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 126, 126, 126,
- 126, 126, 126, 126, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 142, 142, 0, 0, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125,
- 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125,
- 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0,
- 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133, 0, 0,
- 133, 133, 133, 133, 133, 0, 0, 0, 134, 134, 134, 134, 134, 134, 134, 134,
- 0, 0, 134, 134, 134, 134, 134, 134, 0, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 0, 138, 138, 138, 138, 138, 138, 138, 0,
- 138, 138, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
- 0, 0, 138, 0, 138, 138, 0, 138, 138, 138, 0, 0, 0, 0, 0, 0,
- 143, 143, 143, 143, 143, 143, 0, 143, 143, 0, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
- 143, 143, 0, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 0, 0, 0,
- 143, 143, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 15, 63, 63, 63, 63, 63, 63, 63, 63,
- 63, 63, 0, 0, 0, 0, 0, 0, 63, 63, 63, 63, 63, 63, 63, 0,
- 63, 63, 63, 63, 63, 0, 0, 0, 63, 63, 63, 63, 0, 0, 0, 0,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 0,
- 81, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 0, 84, 0, 0, 0, 0, 0, 0, 0,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0,
- 115, 115, 0, 0, 0, 0, 115, 115, 104, 104, 104, 104, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 104, 0, 0, 108, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 108, 0, 0, 108, 108, 0, 108, 108, 108, 108, 108,
- 0, 0, 0, 0, 0, 108, 108, 108, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 99,
- 137, 139, 1, 1, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137,
- 137, 137, 137, 0, 0, 0, 0, 0, 34, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0,
- 105, 105, 105, 105, 105, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
- 105, 105, 0, 0, 105, 105, 105, 105, 1, 1, 1, 1, 1, 1, 1, 41,
- 41, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 41, 41, 41, 41,
- 41, 41, 41, 1, 1, 41, 41, 41, 41, 41, 41, 41, 1, 1, 1, 1,
- 1, 1, 41, 41, 41, 41, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
- 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
- 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0,
- 0, 0, 0, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131,
- 57, 0, 0, 57, 57, 57, 57, 57, 57, 57, 0, 57, 57, 0, 57, 57,
- 57, 57, 57, 0, 0, 0, 0, 0, 151, 151, 151, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 0, 0, 0, 151, 151, 151, 151, 151, 151, 0, 0,
- 151, 151, 0, 0, 0, 0, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 152, 0, 0, 0, 0, 0, 152, 113, 113, 113, 113, 113, 113, 113, 113,
- 113, 113, 113, 113, 113, 0, 0, 113, 113, 113, 113, 113, 113, 113, 113, 0,
- 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0,
- 132, 132, 0, 0, 0, 0, 132, 132, 1, 1, 1, 1, 1, 0, 0, 0,
- 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 0, 7, 0, 0, 7,
- 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
- 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7,
- 0, 7, 0, 7, 0, 7, 7, 7, 0, 7, 0, 7, 0, 7, 0, 7,
- 0, 7, 7, 7, 7, 0, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 7, 7, 7,
- 0, 0, 0, 0, 0, 0, 1, 1, 33, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 36, 36, 36, 36, 36, 36, 36, 0,
- 36, 36, 36, 36, 36, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
-};
+ return (v >> offset) & 0x1;
+}
-/* Script: 13928 bytes. */
-
-RE_UINT32 re_get_script(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_script_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_script_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_script_stage_3[pos + f] << 3;
- value = re_script_stage_4[pos + code];
-
- return value;
+/* Any. */
+RE_UINT32 re_get_any(RE_UINT32 codepoint) {
+ return 1;
}
-/* Script_Extensions. */
+/* ASCII_Hex_Digit. */
+RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
+ if (0x41 <= codepoint && codepoint <= 0x46)
+ return 1;
+ if (0x61 <= codepoint && codepoint <= 0x66)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_script_extensions_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 14, 15,
- 16, 17, 18, 19, 20, 14, 21, 14, 22, 14, 14, 14, 14, 23, 24, 24,
- 25, 26, 14, 14, 14, 14, 27, 28, 14, 14, 29, 30, 31, 32, 33, 34,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 14, 40,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 41, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-};
-
-static RE_UINT8 re_script_extensions_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54,
- 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59,
- 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 80, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 81,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 84, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 70, 70, 99, 100, 101, 102, 103, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 98, 114, 115, 116, 117, 118, 119, 98, 120, 120, 121, 98,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 98, 133, 98, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 98, 143, 144, 98, 145, 146, 147, 148, 98,
- 149, 150, 98, 151, 152, 153, 98, 98, 154, 155, 156, 157, 98, 158, 98, 159,
- 160, 160, 160, 160, 160, 160, 160, 161, 162, 160, 163, 98, 98, 98, 98, 98,
- 164, 164, 164, 164, 164, 164, 164, 164, 165, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 166, 166, 166, 166, 167, 98, 98, 98,
- 168, 168, 168, 168, 169, 170, 171, 172, 98, 98, 98, 98, 173, 174, 175, 176,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
- 177, 177, 177, 177, 177, 179, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 180, 181, 182, 183, 183, 184, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 185, 186, 98, 98, 98, 98, 98, 98,
- 59, 187, 188, 189, 190, 191, 192, 98, 193, 194, 195, 59, 59, 196, 59, 197,
- 198, 198, 198, 198, 198, 199, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 200, 98, 201, 98, 98, 202, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 203, 204, 205, 98, 98, 98, 98, 98, 206, 207, 208, 98, 209, 210, 98, 98,
- 211, 212, 213, 214, 215, 98, 59, 59, 59, 59, 59, 59, 59, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 225, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 226, 70,
- 227, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 228, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 229, 98, 98, 98, 98, 98, 98, 98, 98,
- 70, 70, 70, 70, 230, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 231, 98, 232, 233, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
-};
-
-static RE_UINT16 re_script_extensions_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3,
- 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 11, 2, 12, 13,
- 14, 15, 16, 16, 17, 16, 16, 16, 16, 16, 16, 16, 18, 19, 16, 16,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 22, 23, 23, 23, 24, 22, 23, 23, 23, 23,
- 23, 25, 26, 27, 27, 27, 27, 27, 27, 28, 27, 27, 27, 29, 30, 28,
- 31, 32, 33, 34, 33, 33, 33, 33, 35, 36, 37, 33, 38, 39, 40, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 41, 31, 33, 33, 33, 33,
- 42, 43, 42, 42, 42, 42, 42, 42, 42, 44, 33, 33, 33, 33, 33, 33,
- 45, 45, 45, 45, 45, 45, 46, 28, 47, 47, 47, 47, 47, 47, 47, 48,
- 49, 49, 49, 49, 49, 50, 49, 51, 52, 52, 52, 53, 42, 54, 28, 28,
- 28, 28, 28, 28, 33, 33, 55, 56, 28, 28, 57, 33, 58, 33, 33, 33,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 59, 61, 62, 59, 59,
- 63, 64, 65, 66, 66, 67, 68, 69, 64, 70, 71, 72, 73, 74, 66, 75,
- 76, 77, 78, 79, 79, 80, 81, 82, 77, 83, 84, 85, 86, 87, 88, 28,
- 89, 90, 91, 92, 92, 93, 94, 95, 90, 96, 97, 28, 98, 99, 100, 101,
- 102, 103, 104, 105, 105, 106, 107, 108, 103, 109, 110, 111, 112, 105, 105, 28,
- 113, 114, 115, 116, 117, 114, 118, 119, 114, 115, 120, 28, 121, 122, 123, 124,
- 125, 126, 127, 125, 125, 127, 125, 128, 126, 129, 130, 131, 132, 125, 133, 125,
- 134, 135, 136, 134, 134, 136, 137, 138, 135, 139, 140, 141, 142, 143, 144, 28,
- 145, 146, 147, 148, 148, 148, 148, 148, 146, 147, 149, 148, 150, 148, 148, 148,
- 151, 152, 153, 154, 152, 152, 155, 156, 153, 157, 158, 152, 159, 152, 160, 28,
- 161, 162, 162, 162, 162, 162, 162, 163, 162, 162, 162, 164, 28, 28, 28, 28,
- 165, 166, 167, 167, 168, 167, 167, 169, 170, 169, 167, 171, 28, 28, 28, 28,
- 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 172, 172, 172, 174, 173, 172,
- 172, 172, 172, 173, 172, 172, 172, 175, 172, 175, 176, 177, 28, 28, 28, 28,
- 178, 178, 178, 178, 178, 178, 178, 178, 179, 180, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 181, 181, 181, 181, 182, 183, 181, 181, 181, 181, 181, 184,
- 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 188, 187, 186, 186, 186, 186,
- 186, 187, 186, 186, 186, 186, 187, 188, 187, 186, 188, 186, 186, 186, 186, 186,
- 186, 186, 187, 186, 186, 186, 186, 186, 186, 186, 186, 189, 186, 186, 186, 190,
- 186, 186, 186, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 193,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 195, 195, 195, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198, 197, 199,
- 200, 201, 202, 28, 203, 203, 204, 28, 205, 205, 206, 28, 207, 208, 209, 28,
- 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 210, 212, 210, 212,
- 213, 214, 215, 216, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 217,
- 215, 215, 215, 215, 215, 218, 194, 194, 194, 194, 194, 194, 194, 194, 219, 28,
- 220, 220, 220, 221, 220, 222, 220, 222, 223, 220, 224, 224, 224, 225, 226, 28,
- 227, 227, 227, 227, 227, 228, 227, 227, 227, 229, 227, 230, 210, 210, 210, 210,
- 231, 231, 231, 232, 233, 233, 233, 233, 233, 233, 233, 234, 233, 233, 233, 235,
- 233, 236, 233, 236, 233, 237, 9, 238, 28, 28, 28, 28, 28, 28, 28, 28,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 240, 239, 239, 239, 239, 239, 241,
- 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 244, 245,
- 246, 246, 246, 246, 246, 246, 246, 247, 246, 248, 249, 249, 249, 249, 249, 249,
- 20, 250, 181, 181, 181, 181, 181, 251, 242, 28, 252, 253, 254, 255, 256, 257,
- 2, 2, 2, 2, 258, 259, 2, 2, 2, 2, 2, 260, 261, 262, 2, 263,
- 2, 2, 2, 2, 2, 2, 2, 264, 265, 9, 9, 9, 9, 9, 9, 266,
- 16, 16, 267, 267, 16, 16, 16, 16, 267, 267, 16, 268, 16, 16, 16, 267,
- 16, 16, 16, 16, 16, 16, 269, 16, 269, 16, 270, 271, 16, 16, 272, 273,
- 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 277, 278,
- 0, 279, 2, 280, 0, 0, 0, 0, 28, 28, 9, 9, 9, 9, 281, 28,
- 0, 0, 0, 0, 282, 283, 4, 0, 0, 284, 0, 0, 2, 2, 2, 2,
- 2, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 279, 28, 28, 28, 0, 286, 28, 28, 0, 0, 0, 0,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0,
- 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 290, 290, 290, 290, 290, 291, 290, 290, 290, 290, 290, 291, 2, 2, 2, 2,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 292, 293,
- 181, 181, 181, 181, 182, 183, 294, 294, 294, 294, 294, 294, 294, 295, 296, 295,
- 186, 186, 188, 28, 188, 188, 188, 188, 188, 188, 188, 188, 20, 20, 20, 20,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 28, 28, 28, 28, 28, 28,
- 298, 298, 298, 299, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 300, 28,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 301, 28, 28, 28, 0, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 313, 314, 315, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 317,
- 318, 319, 319, 319, 319, 319, 320, 185, 185, 185, 185, 185, 185, 185, 185, 185,
- 185, 321, 298, 298, 319, 319, 319, 322, 298, 298, 298, 298, 300, 28, 316, 316,
- 185, 185, 185, 321, 298, 298, 298, 298, 298, 0, 0, 0, 185, 185, 185, 323,
- 298, 298, 298, 298, 298, 298, 324, 0, 298, 325, 316, 316, 316, 316, 316, 326,
- 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 298, 298, 298, 324, 327,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 298, 298, 328,
- 298, 298, 298, 298, 298, 298, 301, 28, 0, 0, 0, 0, 0, 0, 0, 0,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 28, 28,
- 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- 329, 330, 329, 329, 329, 329, 329, 329, 331, 28, 332, 332, 332, 332, 332, 332,
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
- 333, 333, 333, 333, 333, 334, 28, 28, 20, 20, 20, 20, 20, 335, 20, 20,
- 20, 20, 20, 20, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 28,
- 0, 0, 0, 0, 337, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 338, 2, 2, 2, 2, 2, 2, 339, 28, 28, 28, 28, 28, 340, 2,
- 341, 341, 341, 341, 341, 342, 343, 344, 345, 345, 345, 345, 345, 345, 345, 28,
- 346, 346, 346, 346, 346, 346, 346, 346, 347, 348, 346, 349, 59, 59, 350, 59,
- 351, 351, 351, 351, 351, 352, 353, 353, 353, 353, 354, 355, 185, 185, 185, 356,
- 357, 357, 357, 357, 357, 357, 357, 357, 357, 358, 357, 359, 178, 178, 178, 360,
- 361, 361, 361, 361, 361, 361, 362, 28, 361, 363, 361, 364, 178, 178, 178, 178,
- 365, 365, 365, 365, 365, 365, 365, 365, 366, 28, 28, 367, 368, 368, 369, 28,
- 370, 370, 370, 28, 188, 188, 2, 2, 2, 2, 2, 371, 372, 28, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 368, 368, 368, 368, 368, 373, 368, 374,
- 185, 185, 185, 185, 375, 28, 185, 185, 321, 376, 185, 185, 185, 185, 185, 375,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 301, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 377, 28, 28, 28, 28,
- 378, 28, 379, 380, 27, 27, 381, 382, 383, 27, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 384, 28, 57, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 385, 28, 28, 33, 33, 33, 33, 33, 33,
- 33, 33, 386, 33, 33, 33, 33, 33, 33, 28, 28, 28, 28, 28, 387, 388,
- 9, 9, 0, 389, 9, 390, 0, 0, 391, 0, 392, 0, 279, 302, 55, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 393,
- 394, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 395, 316, 315, 316,
- 316, 316, 316, 396, 185, 185, 185, 321, 397, 397, 397, 398, 279, 279, 28, 399,
- 400, 401, 400, 400, 402, 400, 400, 403, 400, 404, 400, 404, 28, 28, 28, 28,
- 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 405,
- 406, 407, 407, 407, 407, 407, 408, 409, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 273, 0, 302, 410, 28, 28, 28, 28, 28, 0, 0, 0, 0, 0, 411,
- 412, 412, 412, 413, 414, 414, 414, 414, 414, 414, 415, 28, 416, 416, 416, 417,
- 418, 418, 418, 418, 419, 420, 421, 421, 421, 422, 423, 423, 423, 423, 423, 424,
- 425, 425, 425, 426, 427, 427, 427, 427, 428, 427, 429, 28, 28, 28, 28, 28,
- 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 431, 431, 431, 431, 431, 431,
- 432, 432, 432, 433, 432, 434, 435, 435, 435, 435, 436, 435, 435, 435, 435, 436,
- 437, 437, 437, 437, 437, 28, 438, 438, 438, 438, 438, 438, 439, 440, 28, 28,
- 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
- 441, 441, 441, 441, 441, 441, 442, 28, 441, 441, 443, 28, 441, 28, 28, 28,
- 444, 445, 446, 446, 446, 446, 447, 448, 449, 449, 450, 449, 451, 451, 451, 451,
- 452, 452, 452, 453, 454, 452, 28, 28, 28, 28, 28, 28, 455, 455, 456, 457,
- 458, 458, 458, 459, 460, 460, 460, 461, 28, 28, 28, 28, 28, 28, 28, 28,
- 462, 462, 462, 462, 463, 463, 463, 464, 463, 463, 465, 463, 463, 463, 463, 463,
- 466, 467, 468, 469, 470, 470, 471, 472, 470, 473, 470, 473, 474, 474, 474, 474,
- 475, 475, 475, 475, 28, 28, 28, 28, 476, 476, 476, 476, 477, 478, 477, 28,
- 479, 479, 479, 479, 479, 479, 480, 481, 482, 482, 483, 482, 484, 484, 485, 484,
- 486, 486, 487, 488, 28, 489, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 490, 490, 490, 490, 490, 490, 490, 490, 490, 491, 28, 28, 28, 28, 28, 28,
- 492, 492, 492, 492, 492, 492, 493, 28, 492, 492, 492, 492, 492, 492, 493, 494,
- 495, 495, 495, 495, 495, 28, 495, 496, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 33, 33, 33, 497,
- 498, 498, 498, 498, 498, 28, 499, 499, 499, 499, 499, 500, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 501, 501, 502, 28,
- 503, 503, 503, 503, 503, 503, 503, 503, 503, 504, 505, 503, 503, 503, 28, 506,
- 507, 507, 507, 507, 507, 507, 507, 507, 508, 509, 510, 510, 510, 511, 510, 512,
- 513, 513, 513, 513, 513, 513, 514, 513, 515, 28, 516, 516, 516, 516, 517, 28,
- 518, 518, 518, 518, 518, 518, 518, 518, 518, 519, 518, 518, 520, 152, 521, 28,
- 522, 522, 523, 522, 522, 522, 522, 524, 28, 28, 28, 28, 28, 28, 28, 28,
- 525, 526, 527, 528, 527, 529, 530, 530, 530, 530, 530, 530, 530, 531, 530, 532,
- 533, 534, 535, 536, 536, 537, 538, 539, 534, 540, 541, 542, 543, 544, 544, 28,
- 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 546, 28, 28, 28, 28,
- 547, 547, 547, 547, 547, 547, 547, 547, 547, 28, 547, 548, 28, 28, 28, 28,
- 549, 549, 549, 549, 549, 549, 550, 549, 549, 549, 549, 550, 28, 28, 28, 28,
- 551, 551, 551, 551, 551, 551, 551, 551, 552, 28, 551, 553, 215, 554, 28, 28,
- 555, 555, 555, 555, 555, 555, 555, 556, 555, 557, 28, 28, 28, 28, 28, 28,
- 558, 558, 558, 559, 558, 560, 558, 558, 28, 28, 28, 28, 28, 28, 28, 28,
- 561, 561, 561, 561, 561, 561, 561, 562, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 564, 565,
- 28, 28, 28, 28, 566, 567, 566, 566, 566, 566, 566, 567, 568, 28, 28, 28,
- 569, 569, 569, 569, 569, 569, 569, 569, 569, 28, 570, 570, 570, 570, 570, 570,
- 570, 570, 570, 570, 571, 28, 28, 28, 572, 572, 572, 572, 572, 572, 572, 573,
- 574, 575, 574, 574, 574, 574, 576, 574, 577, 28, 574, 574, 574, 578, 579, 579,
- 579, 579, 580, 579, 579, 581, 582, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 583, 584, 585, 585, 585, 585, 583, 586, 585, 28, 585, 587, 588, 589, 590, 590,
- 590, 591, 592, 593, 590, 594, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 595, 595, 595, 596,
- 28, 28, 28, 28, 28, 28, 28, 28, 118, 118, 597, 118, 118, 118, 598, 599,
- 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
- 600, 600, 600, 601, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 602, 603, 28,
- 600, 600, 600, 600, 600, 600, 600, 600, 604, 28, 28, 28, 28, 28, 28, 28,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 606, 605, 607, 28, 28, 28, 28, 28, 28, 28, 28,
- 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608,
- 608, 608, 608, 608, 608, 608, 608, 608, 609, 28, 28, 28, 28, 28, 28, 28,
- 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336,
- 336, 336, 336, 336, 336, 336, 336, 610, 611, 611, 611, 612, 611, 613, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 614, 614, 614, 615, 615, 28,
- 616, 616, 616, 616, 616, 616, 616, 616, 617, 28, 616, 618, 618, 616, 616, 619,
- 616, 616, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 620, 620, 620, 620, 620, 620, 620, 620,
- 620, 620, 620, 621, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 622, 622, 622, 622, 622, 622, 622, 622, 622, 623, 622, 622, 622, 622, 622, 622,
- 622, 624, 622, 622, 28, 28, 28, 28, 28, 28, 28, 28, 625, 28, 28, 28,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 28,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 627, 28,
- 628, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 312, 313, 28, 28, 28, 28, 28, 28, 629, 28, 630, 28, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 632,
- 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 634, 633, 635,
- 633, 636, 633, 637, 638, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 28,
- 0, 0, 0, 0, 279, 394, 0, 0, 0, 0, 0, 0, 639, 640, 0, 641,
- 642, 643, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 645, 28, 28,
- 16, 16, 16, 16, 16, 16, 16, 16, 267, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 302, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 28, 298, 298, 646, 645,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
- 0, 0, 0, 276, 647, 648, 0, 649, 650, 0, 0, 0, 0, 0, 0, 0,
- 651, 652, 276, 276, 0, 0, 0, 653, 654, 655, 656, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0,
- 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
- 657, 658, 28, 659, 660, 657, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 291, 290, 290, 661, 662, 663, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 664, 664, 664, 664, 664, 665, 664, 666, 664, 667, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 668, 668, 668, 668, 668, 668, 668, 669,
- 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670,
- 670, 670, 670, 670, 670, 670, 670, 670, 671, 670, 672, 28, 28, 28, 28, 28,
- 673, 673, 673, 673, 673, 673, 673, 673, 673, 674, 673, 675, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 394, 0,
- 0, 0, 0, 0, 0, 0, 676, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 394, 0, 0, 0, 0, 0, 0, 289, 28, 28, 28, 28, 28, 28, 28, 28,
- 677, 33, 33, 33, 678, 679, 680, 681, 682, 683, 678, 684, 678, 680, 680, 685,
- 33, 686, 33, 687, 688, 686, 33, 687, 28, 28, 28, 28, 28, 28, 384, 28,
- 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 302, 28, 0, 279, 394, 0, 394, 0, 394, 0, 0, 0, 289, 28,
- 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0,
- 0, 0, 0, 0, 0, 676, 28, 28, 28, 28, 28, 28, 689, 0, 0, 0,
- 690, 28, 0, 0, 0, 0, 0, 302, 0, 645, 377, 28, 289, 28, 28, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 28, 0, 676, 0, 286,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 302, 28, 28,
- 0, 302, 0, 0, 0, 0, 0, 0, 0, 28, 0, 389, 0, 0, 0, 0,
- 0, 28, 0, 0, 0, 289, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 655,
- 0, 0, 0, 0, 652, 691, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 28, 0, 289, 302, 286,
- 286, 28, 289, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 692, 28, 28, 28, 28, 28,
- 298, 298, 298, 298, 298, 298, 693, 28, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 301, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 377, 28, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 694, 28, 28, 28,
- 298, 298, 298, 301, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 695, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 28, 28,
-};
-
-static RE_UINT8 re_script_extensions_stage_4[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1,
- 1, 1, 35, 35, 1, 1, 1, 1, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 3, 41, 41, 3, 41, 41, 41, 41, 41, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3, 1, 3,
- 0, 0, 0, 0, 3, 1, 3, 1, 3, 3, 3, 0, 3, 0, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
- 3, 3, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 164, 162, 163, 163, 162,
- 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 5, 157, 5, 0, 0, 5, 5, 5,
- 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 0, 0, 6,
- 6, 6, 6, 6, 6, 0, 0, 0, 7, 7, 7, 7, 7, 1, 7, 7,
- 7, 7, 7, 7, 185, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 185, 177, 0, 7, 185, 192, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 7, 7,
- 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 7, 7, 7, 7, 7, 7,
- 155, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 154, 7, 7, 7,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 8,
- 8, 8, 8, 0, 0, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 0, 0, 66, 66, 66, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 0, 0, 82, 82, 82, 82, 82, 82, 82, 0,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 95, 0,
- 8, 8, 8, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 1, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 196, 195, 41, 41, 10, 10, 10, 10, 10, 10, 10, 199, 200, 188, 188,
- 188, 188, 188, 188, 188, 188, 188, 188, 11, 11, 11, 11, 0, 11, 11, 11,
- 11, 11, 11, 11, 11, 0, 0, 11, 11, 0, 0, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
- 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11,
- 11, 0, 0, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11,
- 0, 0, 0, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 11, 11, 11, 11, 11, 11, 11, 0,
- 0, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 12,
- 12, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 0, 12, 12, 0,
- 12, 12, 0, 0, 12, 0, 12, 12, 12, 0, 0, 12, 12, 12, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
- 12, 12, 12, 12, 12, 12, 12, 0, 0, 13, 13, 13, 0, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
- 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13,
- 13, 13, 0, 13, 13, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 13, 13, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13,
- 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14,
- 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 0, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 14, 14, 14,
- 14, 14, 0, 0, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 0, 0,
- 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 14, 14, 0, 14,
- 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 15, 15, 0, 15, 15, 15,
- 15, 15, 15, 0, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0,
- 0, 15, 15, 0, 15, 0, 15, 15, 0, 0, 0, 15, 15, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15,
- 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 170, 170,
- 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 15, 15, 15, 15,
- 15, 15, 15, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16,
- 16, 16, 0, 0, 0, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0,
- 0, 0, 0, 0, 0, 16, 16, 0, 16, 16, 16, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 16,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17,
- 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17,
- 17, 17, 0, 0, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0,
- 17, 17, 17, 17, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
- 0, 17, 17, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 18, 18,
- 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18, 18, 18, 18,
- 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 19, 19, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19,
- 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19,
- 0, 0, 19, 19, 19, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 1,
- 20, 20, 20, 20, 0, 0, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
- 21, 21, 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, 0, 0,
- 21, 21, 21, 21, 21, 0, 21, 0, 21, 21, 0, 0, 21, 21, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22, 22, 22, 0, 22, 22,
- 22, 22, 22, 22, 22, 1, 1, 1, 1, 22, 22, 0, 0, 0, 0, 0,
- 23, 23, 23, 23, 23, 23, 23, 23, 179, 179, 179, 179, 179, 179, 179, 179,
- 179, 179, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 0, 24, 0, 0, 0, 0, 0, 24, 0, 0,
- 24, 24, 24, 169, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 0,
- 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 0, 0, 26, 26, 26,
- 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 0, 0, 0, 0, 0, 0,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 1, 1, 1, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 42, 42,
- 42, 42, 42, 42, 42, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 187, 187, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0,
- 31, 31, 0, 0, 0, 0, 0, 0, 32, 32, 176, 176, 32, 176, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 0, 0, 0, 0, 0, 28, 28, 28, 28, 28, 28, 0, 0,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0,
- 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, 46, 46, 46, 46,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
- 47, 47, 47, 47, 47, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 0, 0,
- 56, 56, 56, 0, 0, 0, 56, 56, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 0, 0, 54, 54, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 0, 78, 78, 78, 78, 78, 0, 0, 78,
- 78, 78, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 78, 78, 0, 0,
- 41, 41, 41, 41, 41, 41, 41, 0, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 0, 0, 0, 0, 62, 62, 62, 62, 62, 0, 0, 0,
- 67, 67, 67, 67, 67, 67, 67, 67, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93, 93,
- 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 68, 68, 68, 68, 68,
- 68, 68, 0, 0, 0, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
- 4, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 0, 0, 24, 24, 24,
- 186, 10, 186, 165, 10, 158, 158, 167, 158, 167, 191, 10, 167, 167, 10, 10,
- 167, 158, 10, 10, 10, 10, 10, 10, 10, 166, 158, 10, 10, 158, 10, 10,
- 10, 10, 193, 165, 181, 158, 158, 11, 165, 165, 150, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 41, 41, 41, 41, 41, 41,
- 41, 41, 0, 41, 41, 41, 41, 41, 3, 3, 3, 3, 3, 3, 0, 0,
- 0, 3, 0, 3, 0, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3,
- 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
- 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 1, 1, 1, 1, 41, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 175,
- 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0,
- 2, 2, 2, 2, 2, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
- 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
- 55, 55, 55, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55,
- 58, 58, 58, 58, 58, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 58,
- 58, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 162, 1, 1, 1, 1,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 190, 190, 189, 1, 36, 36, 36,
- 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 1, 189, 190, 190, 190, 190,
- 190, 190, 190, 190, 189, 189, 189, 189, 1, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 159, 159, 159, 159, 25, 25, 189, 173, 173, 173, 173, 173, 1, 189,
- 36, 36, 36, 36, 183, 183, 36, 36, 0, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0,
- 0, 173, 173, 173, 173, 33, 33, 33, 173, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 190, 173, 34, 34, 34,
- 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
- 35, 35, 35, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 1,
- 36, 1, 1, 1, 1, 1, 1, 1, 36, 36, 36, 36, 1, 1, 1, 1,
- 34, 34, 34, 34, 34, 34, 34, 36, 1, 1, 1, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 1, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 0,
- 83, 83, 83, 83, 83, 83, 83, 83, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 162,
- 84, 84, 84, 84, 84, 84, 84, 84, 1, 1, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 0, 0, 0, 0, 198, 198, 198, 197, 197, 197, 194, 194,
- 194, 194, 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
- 0, 0, 0, 0, 0, 0, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
- 10, 158, 10, 168, 10, 10, 10, 10, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 184, 72, 73, 73, 73, 73, 73, 73, 73, 73,
- 73, 73, 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
- 25, 25, 25, 25, 25, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 0, 160, 85, 85, 0, 0, 0, 0, 85, 85,
- 23, 23, 23, 23, 23, 23, 23, 0, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 0, 77, 77, 77, 77, 77, 77, 0, 0,
- 77, 77, 0, 0, 77, 77, 77, 77, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 0,
- 0, 26, 26, 26, 26, 26, 26, 0, 2, 2, 2, 1, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 2, 86, 86, 86, 86, 86, 86, 0, 0,
- 86, 86, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 0, 0, 0, 0,
- 0, 0, 0, 25, 25, 25, 25, 25, 36, 36, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5,
- 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 6, 6, 6, 6, 6, 0, 6, 0, 6, 6, 0, 6, 6, 0, 6, 6,
- 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 1, 1,
- 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 156, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 156, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 41, 41, 41, 41, 41, 41, 4, 4, 1, 1, 1, 1, 1, 189, 189, 1,
- 1, 1, 1, 0, 1, 1, 1, 1, 7, 7, 7, 7, 7, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 190, 190, 190, 190, 190, 34, 34,
- 34, 34, 34, 34, 34, 34, 173, 173, 0, 0, 25, 25, 25, 25, 25, 25,
- 0, 0, 25, 25, 25, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 0, 48,
- 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 0, 0, 0, 0, 0,
- 161, 161, 161, 0, 0, 0, 0, 180, 180, 180, 180, 180, 180, 180, 180, 180,
- 180, 180, 180, 180, 0, 0, 0, 161, 161, 161, 161, 161, 161, 161, 161, 161,
- 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 41, 0, 0,
- 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 0, 0, 0,
- 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0,
- 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0, 0,
- 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 49, 49, 49, 0, 49, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 0, 0,
- 40, 40, 40, 40, 40, 40, 40, 40, 50, 50, 50, 50, 50, 50, 50, 50,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0,
- 51, 51, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 0, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 103, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 0, 110, 110, 110, 110, 110, 110, 0, 0,
- 52, 52, 52, 52, 52, 52, 0, 0, 52, 0, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 52,
- 52, 0, 0, 0, 52, 0, 0, 52, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 0, 87, 118, 118, 118, 118, 118, 118, 118, 118,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 0,
- 0, 0, 0, 0, 0, 0, 0, 117, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 64,
- 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0, 76,
- 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97,
- 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97,
- 61, 61, 61, 61, 0, 61, 61, 0, 0, 0, 0, 0, 61, 61, 61, 61,
- 61, 61, 61, 61, 0, 61, 61, 61, 0, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0,
- 61, 61, 61, 0, 0, 0, 0, 61, 61, 0, 0, 0, 0, 0, 0, 0,
- 88, 88, 88, 88, 88, 88, 88, 88, 116, 116, 116, 116, 116, 116, 116, 116,
- 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0,
- 0, 0, 0, 112, 112, 112, 112, 112, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0, 0, 0, 0, 0,
- 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0,
- 0, 121, 121, 121, 121, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121,
- 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 0, 0,
- 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 130, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 147, 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 0, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 0, 0, 0, 0, 94, 94, 94, 94, 94, 94,
- 0, 0, 0, 0, 0, 0, 0, 94, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0,
- 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0,
- 101, 101, 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0,
- 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0,
- 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 0, 129, 129, 129, 129, 129, 129, 129, 0,
- 129, 0, 129, 129, 129, 129, 0, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 129, 129, 129, 129, 0, 129, 129, 129, 0, 0, 0, 0, 0, 0,
- 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0,
- 123, 123, 0, 0, 0, 0, 0, 0, 107, 170, 107, 170, 0, 107, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 107, 107, 0, 0, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107,
- 107, 0, 107, 107, 0, 107, 107, 107, 107, 107, 0, 170, 170, 107, 107, 107,
- 107, 0, 0, 107, 107, 107, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107,
- 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 0, 0, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 0, 135, 0, 135, 135, 135, 124, 124, 124, 124, 124, 124, 124, 124,
- 124, 124, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 0, 0, 0, 114, 114, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 0, 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, 0,
- 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 126, 126, 126,
- 126, 126, 126, 126, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 142, 142, 0, 0, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125,
- 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125,
- 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0,
- 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133, 0, 0,
- 133, 133, 133, 133, 133, 0, 0, 0, 134, 134, 134, 134, 134, 134, 134, 134,
- 0, 0, 134, 134, 134, 134, 134, 134, 0, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 0, 138, 138, 138, 138, 138, 138, 138, 0,
- 138, 138, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
- 0, 0, 138, 0, 138, 138, 0, 138, 138, 138, 0, 0, 0, 0, 0, 0,
- 143, 143, 143, 143, 143, 143, 0, 143, 143, 0, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
- 143, 143, 0, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 0, 0, 0,
- 143, 143, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 0, 0, 0, 0, 0, 0, 0, 170, 170, 15, 170, 15, 15, 15, 15,
- 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
- 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0, 0, 0, 0,
- 63, 63, 63, 63, 63, 63, 63, 0, 63, 63, 63, 63, 63, 0, 0, 0,
- 63, 63, 63, 63, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 0, 81, 0, 0, 0, 0, 0, 0, 0,
- 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 0, 115, 115, 0, 0, 0, 0, 115, 115,
- 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 0, 0,
- 108, 108, 0, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 108, 108, 108,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 99,
- 0, 0, 0, 0, 0, 0, 0, 99, 137, 139, 1, 1, 0, 0, 0, 0,
- 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0,
- 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 34, 34, 34, 34, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 0, 0, 0,
- 105, 0, 0, 0, 0, 0, 0, 0, 105, 105, 0, 0, 105, 105, 105, 105,
- 105, 105, 105, 105, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 41,
- 41, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 41, 41, 41, 41,
- 41, 41, 41, 1, 1, 41, 41, 41, 41, 41, 41, 41, 1, 1, 1, 1,
- 1, 1, 41, 41, 41, 41, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 1, 1, 1, 1, 1, 1, 131, 131, 131, 131, 131, 131, 131, 131,
- 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131,
- 0, 131, 131, 131, 131, 131, 131, 131, 57, 0, 0, 57, 57, 57, 57, 57,
- 57, 57, 0, 57, 57, 0, 57, 57, 57, 57, 57, 0, 0, 0, 0, 0,
- 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0,
- 151, 151, 151, 151, 151, 151, 0, 0, 151, 151, 0, 0, 0, 0, 151, 151,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 152,
- 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, 0, 113,
- 113, 113, 113, 113, 113, 113, 113, 0, 132, 132, 132, 132, 132, 132, 132, 132,
- 132, 132, 132, 132, 0, 0, 0, 0, 132, 132, 0, 0, 0, 0, 132, 132,
- 1, 1, 1, 1, 1, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7,
- 0, 7, 7, 0, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 0, 7, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 7, 7,
- 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 7, 7, 7, 0, 7, 0,
- 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 1, 1,
- 33, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1,
- 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36, 0, 0, 0,
- 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
-};
-
-/* Script_Extensions: 14272 bytes. */
-
-static RE_ScriptExt re_scripts_extensions_table[] = {
- {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 5, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 54, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 4, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 4, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 15, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 13, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 12, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 17, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 11, 59, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 23, 47, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 48, 52, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 17, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 10, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 33, 34, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 23, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 9, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 17, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 92, 111, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 25, 33, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 25, 33, 34, 35, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 95, 112, 121, 132, 146, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 14, 16, 17, 107, 124, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 12, 13, 92, 102, 109, 111, 114, 123, 124, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 10, 11, 12, 13, 14, 15, 16, 17, 18, 107, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 10, 11, 12, 13, 14, 15, 16, 17, 18, 100, 107, 124, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 12, 13, 17, 92, 102, 109, 111, 114, 123, 124, 142, 150, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 12, 13, 17, 18, 92, 102, 109, 111, 114, 123, 124, 142, 150, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 59, 102, 107, 111, 123, 124, 138, 142, 143, 150, 0}},
- {{ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 46, 59, 102, 107, 111, 123, 124, 138, 142, 143, 150}}
-};
-
-int re_get_script_extensions(RE_UINT32 ch, RE_UINT8* scripts) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_UINT8* scr;
- int count;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_script_extensions_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_script_extensions_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_script_extensions_stage_3[pos + f] << 3;
- value = re_script_extensions_stage_4[pos + code];
-
- scr = re_scripts_extensions_table[value].scripts;
- scripts[0] = scr[0];
- count = 1;
-
- if (scr[0] != 0) {
- while (count < RE_MAX_SCX && scr[count] != 0) {
- scripts[count] = scr[count];
- ++count;
- }
- }
-
- return count;
-}
-
-/* Word_Break. */
-
-static RE_UINT8 re_word_break_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 6, 7, 4, 8,
- 9, 10, 11, 12, 13, 4, 14, 4, 4, 4, 4, 15, 4, 16, 17, 18,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 19, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_word_break_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 50, 2, 2, 51, 52,
- 53, 54, 55, 56, 57, 57, 57, 57, 57, 58, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 59, 60, 61, 62, 63, 57, 57, 57,
- 64, 65, 66, 67, 57, 68, 69, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 70, 2, 2, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 83,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 84, 85, 2, 2, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 57, 96, 97, 98, 2, 99, 100, 57, 2, 2, 101, 57,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 57, 57, 57, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 57, 122, 123, 57, 124, 125, 126, 127, 57,
- 128, 129, 57, 130, 131, 132, 57, 57, 133, 134, 135, 136, 57, 137, 57, 57,
- 2, 2, 2, 2, 2, 2, 2, 138, 139, 2, 140, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 2, 2, 2, 2, 2, 2, 2, 141, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 2, 2, 142, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 2, 2, 2, 143, 144, 145, 146, 57, 57, 57, 57, 147, 57, 148, 149,
- 150, 57, 151, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 152, 153, 57, 57, 57, 57, 57, 57,
- 57, 57, 154, 155, 156, 57, 57, 57, 157, 158, 159, 2, 2, 160, 161, 162,
- 57, 57, 57, 57, 163, 164, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 165, 57, 166, 57, 57, 167, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 168, 169, 57, 57, 57, 57, 57, 57, 57, 57, 57, 170, 171, 57, 57,
- 57, 57, 172, 173, 57, 57, 57, 174, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 175, 57, 176, 177, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-};
-
-static RE_UINT8 re_word_break_stage_3[] = {
- 0, 0, 1, 2, 0, 0, 0, 0, 3, 4, 0, 5, 6, 6, 7, 0,
- 8, 9, 9, 9, 9, 9, 10, 11, 8, 9, 9, 9, 9, 9, 10, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 13, 0,
- 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 0, 16, 9, 17, 0, 9, 9, 9, 9, 9,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 19, 16, 20,
- 0, 21, 10, 19, 9, 9, 9, 9, 22, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9,
- 23, 18, 24, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,
- 9, 9, 9, 9, 9, 10, 25, 26, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 27, 0, 28, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 29,
- 30, 29, 0, 0, 31, 31, 31, 31, 31, 31, 32, 33, 34, 35, 0, 0,
- 36, 37, 0, 38, 18, 18, 39, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 41, 18, 18, 18, 18, 18, 6, 6, 42, 43, 44, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 45, 18, 46, 18, 47, 48, 24, 6, 6, 49, 50,
- 0, 0, 0, 51, 52, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18,
- 18, 18, 39, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 18, 18, 54, 0, 0, 0,
- 6, 6, 49, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 55, 56, 57,
- 9, 9, 9, 9, 9, 53, 58, 18, 18, 59, 59, 60, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 59, 0, 9, 9, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 19, 9, 55,
- 0, 0, 0, 0, 61, 18, 18, 18, 62, 18, 18, 18, 18, 18, 18, 18,
- 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 63,
- 18, 18, 18, 18, 59, 18, 9, 9, 53, 64, 6, 6, 8, 9, 9, 9,
- 59, 8, 9, 50, 50, 9, 9, 9, 9, 9, 19, 9, 26, 16, 55, 63,
- 18, 65, 65, 66, 0, 61, 0, 22, 53, 64, 6, 6, 55, 0, 0, 67,
- 28, 8, 10, 68, 50, 9, 9, 9, 9, 9, 19, 9, 19, 69, 55, 48,
- 39, 61, 65, 60, 57, 0, 8, 26, 0, 64, 6, 6, 24, 70, 0, 0,
- 28, 8, 9, 22, 22, 9, 9, 9, 9, 9, 19, 9, 19, 8, 55, 63,
- 18, 29, 29, 60, 17, 0, 0, 0, 53, 64, 6, 6, 0, 0, 45, 18,
- 28, 8, 9, 50, 50, 9, 9, 9, 9, 9, 19, 9, 19, 8, 55, 63,
- 18, 65, 65, 60, 0, 71, 0, 22, 53, 64, 6, 6, 72, 0, 0, 0,
- 73, 8, 10, 16, 19, 55, 69, 19, 68, 17, 10, 16, 9, 9, 55, 71,
- 39, 71, 48, 60, 17, 61, 0, 0, 0, 64, 6, 6, 0, 0, 0, 0,
- 18, 44, 9, 19, 19, 9, 9, 9, 9, 9, 19, 9, 9, 9, 55, 45,
- 18, 48, 48, 60, 0, 30, 10, 0, 53, 64, 6, 6, 0, 0, 0, 0,
- 59, 8, 9, 19, 19, 9, 9, 9, 9, 9, 19, 9, 9, 8, 55, 63,
- 18, 48, 48, 60, 0, 30, 0, 13, 53, 64, 6, 6, 69, 0, 0, 0,
- 18, 8, 9, 19, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 63,
- 18, 48, 48, 66, 0, 41, 0, 68, 53, 64, 6, 6, 0, 0, 16, 9,
- 71, 8, 9, 9, 9, 10, 16, 9, 9, 9, 9, 9, 22, 9, 9, 72,
- 9, 10, 74, 61, 18, 75, 18, 18, 0, 64, 6, 6, 71, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 18, 39, 0,
- 0, 61, 18, 39, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 18, 18, 77,
- 0, 0, 18, 60, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 60, 0, 6, 6, 76, 0, 0, 78, 57, 71,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 17, 28, 18, 18, 18,
- 18, 48, 9, 59, 18, 18, 28, 18, 18, 18, 18, 18, 18, 18, 18, 77,
- 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 18, 18, 18, 18, 39,
- 6, 6, 76, 0, 0, 71, 60, 71, 48, 65, 18, 60, 28, 77, 0, 0,
- 71, 18, 18, 29, 6, 6, 79, 60, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 22, 0, 72, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 19, 55, 9, 10, 19, 55, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 19, 55, 9, 9, 9, 9, 9, 9, 9, 9, 19, 55, 9, 10,
- 19, 55, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 19, 55, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 10, 28, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 9, 55,
- 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 50, 9, 9, 9, 9,
- 80, 9, 9, 9, 9, 9, 10, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 16, 9, 9, 17, 0,
- 9, 9, 9, 19, 53, 77, 0, 0, 9, 9, 9, 9, 53, 77, 0, 0,
- 9, 9, 9, 9, 53, 0, 0, 0, 9, 9, 9, 19, 81, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18,
- 18, 18, 18, 18, 18, 0, 0, 57, 6, 6, 76, 0, 0, 0, 0, 0,
- 0, 0, 61, 82, 6, 6, 76, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0,
- 9, 83, 9, 9, 9, 9, 9, 9, 9, 9, 84, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 18, 18, 18, 0, 18, 18, 18, 0,
- 0, 64, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 41, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 28, 18, 39, 18, 18, 18, 18, 18, 18, 18, 65,
- 6, 6, 76, 0, 6, 6, 76, 0, 0, 0, 0, 0, 18, 18, 18, 39,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 44, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18,
- 18, 44, 9, 0, 6, 6, 76, 0, 0, 0, 61, 18, 18, 0, 0, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 59, 18, 18, 24, 6, 6, 49, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 18, 18, 18, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 0, 0,
- 6, 6, 76, 8, 6, 6, 49, 9, 9, 9, 9, 9, 9, 9, 9, 55,
- 9, 9, 17, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 8,
- 0, 0, 0, 0, 39, 18, 18, 18, 18, 18, 44, 52, 9, 47, 66, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 29, 18,
- 9, 9, 9, 9, 9, 55, 9, 55, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 55, 9, 55, 9, 9, 25, 25, 9, 9, 9, 9, 9, 9, 9, 55,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 9, 26,
- 16, 19, 9, 17, 9, 16, 9, 0, 9, 9, 9, 17, 16, 19, 9, 17,
- 86, 87, 87, 88, 0, 0, 89, 0, 0, 90, 91, 92, 0, 0, 0, 11,
- 93, 94, 0, 0, 0, 93, 0, 95, 36, 96, 36, 36, 72, 0, 0, 68,
- 0, 0, 0, 0, 9, 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 77, 0, 0, 0,
- 13, 68, 16, 9, 9, 72, 8, 55, 0, 26, 19, 22, 9, 9, 55, 9,
- 0, 8, 55, 13, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 68, 41, 24, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 0, 72, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 68, 0, 0, 0, 61,
- 9, 9, 9, 9, 9, 10, 0, 0, 9, 10, 9, 10, 9, 10, 9, 10,
- 9, 10, 9, 10, 9, 10, 9, 10, 18, 18, 18, 18, 18, 18, 18, 18,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 97, 72, 0, 0, 0, 0, 0, 0, 0, 0, 71, 18, 98, 99, 68, 17,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 100, 101, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 102,
- 0, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 10, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103,
- 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55,
- 9, 9, 9, 17, 9, 9, 9, 9, 6, 6, 49, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 39, 18, 18, 104,
- 9, 9, 9, 9, 9, 9, 9, 53, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 60, 0, 0, 0,
- 0, 0, 0, 0, 0, 68, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 16, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 9, 9,
- 105, 105, 41, 9, 9, 9, 9, 9, 41, 18, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
- 24, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18,
- 18, 60, 0, 0, 6, 6, 76, 0, 18, 18, 18, 18, 24, 9, 68, 106,
- 6, 6, 49, 9, 9, 9, 9, 9, 9, 53, 18, 60, 9, 9, 9, 9,
- 9, 41, 18, 18, 18, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 17,
- 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18,
- 77, 0, 0, 68, 6, 6, 76, 0, 0, 57, 0, 0, 6, 6, 76, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 18, 18, 39, 0, 0,
- 41, 9, 9, 60, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 61, 60,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 65, 77, 71,
- 57, 0, 0, 0, 0, 0, 0, 0, 9, 9, 41, 18, 16, 107, 0, 0,
- 8, 10, 8, 10, 8, 10, 0, 0, 9, 10, 9, 10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 39, 60, 6, 6, 76, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9,
- 9, 10, 68, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
- 9, 10, 0, 0, 68, 9, 0, 108, 31, 31, 109, 31, 31, 32, 31, 110,
- 111, 109, 31, 31, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0, 0,
- 0, 0, 0, 0, 68, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55,
- 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 16, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0,
- 18, 18, 18, 18, 112, 94, 0, 0, 18, 18, 18, 18, 11, 93, 0, 0,
- 0, 0, 0, 113, 5, 114, 0, 0, 0, 0, 0, 0, 9, 19, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 115,
- 0, 116, 0, 5, 6, 6, 7, 0, 8, 9, 9, 9, 9, 9, 10, 11,
- 8, 9, 9, 9, 9, 9, 10, 0, 0, 117, 102, 102, 102, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 102, 118, 9, 9, 9, 9, 9, 9, 9, 10,
- 16, 9, 16, 9, 16, 9, 16, 17, 0, 0, 0, 0, 0, 0, 119, 0,
- 9, 9, 9, 8, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 10, 22,
- 9, 9, 9, 55, 9, 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
- 9, 9, 9, 9, 9, 9, 9, 17, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 17, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 8, 9, 9, 9, 9,
- 9, 9, 10, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 39, 0,
- 9, 9, 9, 9, 9, 9, 9, 55, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 0, 9, 9, 8, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 55, 6, 6, 76, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0,
- 9, 55, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 17, 50,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 9, 9, 9, 10, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 10, 55, 0, 0,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 9, 9, 9, 9, 55, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 16,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 59, 30, 0, 18, 9, 8, 8, 9, 9, 9, 9, 9, 9, 55, 39, 61,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 17,
- 9, 9, 9, 9, 9, 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 107, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 9, 9, 10, 0, 0, 0,
- 9, 9, 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 6, 6, 76, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 17, 0, 68, 0, 0, 9, 9, 9, 9,
- 9, 53, 18, 18, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 10, 0, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18,
- 18, 39, 0, 0, 0, 0, 0, 0, 0, 64, 6, 6, 0, 0, 0, 61,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 39, 14,
- 0, 0, 0, 14, 9, 9, 9, 9, 9, 9, 17, 0, 6, 6, 76, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18, 120, 6, 6,
- 0, 107, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 41, 13, 0, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18,
- 44, 17, 28, 77, 6, 6, 121, 17, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 22, 9, 9, 9, 9, 9, 9, 18, 18, 18, 0, 74,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 10, 19, 22, 9, 9, 9, 22, 9, 9, 17, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 39, 0, 6, 6, 76, 0,
- 18, 8, 9, 50, 50, 9, 9, 9, 9, 9, 19, 9, 19, 8, 23, 63,
- 18, 65, 65, 60, 17, 61, 0, 8, 53, 71, 18, 77, 18, 77, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 18, 18,
- 18, 85, 10, 0, 6, 6, 76, 73, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18,
- 18, 22, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 60, 18, 18,
- 77, 0, 0, 0, 0, 0, 9, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18,
- 77, 17, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18, 17, 0,
- 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 28, 18, 18, 18, 0, 6, 6, 76, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 39, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 76, 0, 0, 0, 0, 68,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 16, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 59, 18, 71, 18, 122, 77, 0, 0, 0, 0, 0, 0,
- 59, 18, 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 58, 39,
- 0, 61, 0, 0, 59, 18, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 53, 18, 18, 18, 60, 72, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0,
- 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 39, 18, 18,
- 17, 0, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 16, 9, 9, 9,
- 9, 9, 9, 9, 71, 18, 18, 18, 18, 18, 28, 18, 18, 39, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 10, 22, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 39, 74, 29,
- 18, 58, 0, 0, 6, 6, 76, 0, 9, 22, 19, 9, 9, 9, 9, 9,
- 9, 9, 53, 39, 29, 18, 17, 0, 6, 6, 76, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 41, 39, 0, 0,
- 9, 9, 9, 9, 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 36, 36, 40, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 6, 6, 76, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 55, 18, 77, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 39, 0, 0,
- 9, 0, 0, 0, 6, 6, 76, 0, 68, 9, 9, 9, 9, 9, 0, 8,
- 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 10, 61, 59, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 0, 61, 85, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0,
- 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 9, 9, 9, 17,
- 9, 9, 17, 0, 9, 9, 55, 30, 36, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 60, 28, 123, 36, 124, 18,
- 39, 28, 18, 0, 0, 0, 0, 0, 0, 0, 71, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 71, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 19, 13, 69, 8, 19, 9, 9, 22, 8,
- 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 22, 10, 8, 9, 19, 9, 19, 9, 9, 9, 9, 9, 9, 22, 10,
- 9, 26, 16, 9, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 9, 9, 9, 9, 9, 9,
- 19, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9,
- 9, 9, 9, 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 19, 9, 9,
- 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9,
- 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 19, 9, 9, 9, 9, 9,
- 10, 9, 9, 64, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 39, 61, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 77, 0, 57, 0, 0,
- 0, 77, 0, 0, 0, 0, 61, 18, 28, 18, 18, 18, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 39, 18, 18, 18, 18, 65, 18, 29, 48, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 18, 85, 9, 55,
- 6, 6, 76, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 6, 6, 76, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 17, 0, 0, 18, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 18, 85, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 8, 9, 9, 9, 9, 9, 9, 69, 50, 8, 9, 10, 9, 25, 0,
- 13, 68, 25, 8, 69, 50, 25, 25, 69, 50, 10, 9, 10, 9, 8, 26,
- 9, 9, 22, 9, 9, 9, 9, 0, 8, 8, 22, 9, 9, 9, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
- 9, 9, 55, 0, 9, 9, 9, 9, 9, 9, 55, 0, 9, 9, 9, 9,
- 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 126, 126, 126, 126, 126,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 18,
- 14, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_word_break_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 5, 6, 6, 4, 0, 0, 18, 0, 1, 0,
- 0, 0, 0, 2, 13, 0, 14, 0, 15, 15, 15, 15, 15, 15, 12, 13,
- 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 16,
- 0, 6, 0, 0, 0, 0, 11, 0, 0, 9, 0, 0, 0, 11, 0, 12,
- 0, 0, 11, 11, 11, 0, 0, 0, 7, 7, 7, 7, 11, 0, 11, 11,
- 11, 11, 13, 11, 0, 0, 11, 12, 11, 11, 0, 11, 11, 11, 0, 7,
- 7, 7, 11, 11, 0, 11, 0, 11, 11, 0, 11, 0, 11, 13, 0, 0,
- 0, 7, 7, 7, 7, 7, 0, 7, 0, 7, 7, 0, 3, 3, 3, 3,
- 3, 3, 3, 0, 0, 0, 0, 3, 3, 3, 3, 11, 12, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 0, 0, 13, 13, 0, 0, 7, 7, 7, 0,
- 9, 0, 0, 0, 11, 11, 11, 7, 15, 15, 0, 15, 13, 0, 11, 11,
- 7, 11, 11, 11, 0, 11, 7, 7, 7, 9, 0, 7, 7, 11, 11, 7,
- 7, 0, 7, 7, 15, 15, 11, 11, 11, 0, 0, 11, 0, 0, 0, 9,
- 11, 7, 11, 11, 11, 11, 7, 7, 7, 11, 0, 0, 11, 11, 0, 0,
- 13, 0, 11, 0, 0, 7, 0, 0, 7, 7, 11, 7, 11, 7, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 9, 7, 7, 11, 7, 7,
- 0, 0, 15, 15, 7, 0, 0, 7, 7, 7, 11, 0, 11, 0, 7, 0,
- 0, 0, 0, 11, 0, 11, 11, 0, 11, 7, 0, 0, 0, 0, 7, 7,
- 0, 11, 0, 0, 0, 0, 7, 11, 0, 0, 7, 0, 7, 0, 7, 0,
- 15, 15, 0, 0, 7, 0, 0, 0, 0, 7, 0, 7, 15, 15, 7, 7,
- 18, 11, 11, 11, 11, 0, 7, 7, 7, 7, 9, 0, 11, 7, 7, 11,
- 11, 7, 11, 0, 7, 7, 7, 11, 18, 18, 18, 18, 18, 18, 18, 0,
- 7, 17, 9, 9, 14, 14, 0, 0, 14, 0, 0, 12, 6, 6, 9, 9,
- 9, 9, 9, 16, 16, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 18,
- 9, 0, 9, 9, 18, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0,
- 0, 7, 7, 10, 10, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0,
- 7, 7, 0, 11, 11, 11, 7, 11, 0, 11, 11, 7, 11, 7, 7, 0,
- 0, 3, 7, 3, 3, 0, 3, 3, 3, 0, 3, 0, 3, 3, 0, 3,
- 13, 0, 0, 12, 0, 16, 16, 16, 13, 12, 0, 0, 11, 0, 0, 9,
- 0, 0, 0, 14, 0, 0, 10, 10, 10, 10, 7, 7, 0, 9, 9, 9,
- 7, 0, 15, 15, 15, 15, 11, 0, 7, 11, 0, 11, 7, 7, 7, 9,
- 9, 9, 9, 7, 0, 0, 8, 8, 8, 8, 8, 8,
-};
-
-/* Word_Break: 7116 bytes. */
-
-RE_UINT32 re_get_word_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_word_break_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_word_break_stage_2[pos + f] << 5;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_word_break_stage_3[pos + f] << 2;
- value = re_word_break_stage_4[pos + code];
-
- return value;
-}
-
-/* Grapheme_Cluster_Break. */
-
-static RE_UINT8 re_grapheme_cluster_break_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 4, 9,
- 10, 11, 4, 12, 4, 4, 13, 4, 4, 4, 4, 14, 4, 15, 16, 17,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 18, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_grapheme_cluster_break_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 3, 3,
- 3, 3, 6, 3, 3, 3, 7, 8, 9, 10, 3, 11, 12, 13, 14, 15,
- 16, 17, 3, 18, 19, 20, 21, 22, 23, 24, 23, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 3, 49, 50, 51, 52, 3, 3, 3, 3, 3, 53, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 54, 55, 56, 57,
- 58, 3, 59, 3, 60, 3, 3, 3, 61, 62, 63, 3, 64, 65, 66, 67,
- 68, 3, 3, 69, 3, 3, 3, 70, 3, 3, 3, 3, 3, 3, 3, 3,
- 71, 72, 3, 73, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 74, 3, 75, 3, 76, 3, 3, 3, 3, 3, 3, 3, 3,
- 77, 3, 78, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 79, 80, 81, 3, 3, 3, 3,
- 82, 3, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 3, 3, 3, 93,
- 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95,
- 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97,
- 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99,
- 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94,
- 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96,
- 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98,
- 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100,
- 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95,
- 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97,
- 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99,
- 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 101, 102,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 103, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 104, 3, 3, 1, 3, 3, 80, 105,
- 3, 3, 3, 3, 3, 3, 3, 106, 3, 3, 3, 107, 3, 108, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 109, 3, 3, 110, 3, 3, 3, 3,
- 3, 3, 3, 3, 111, 3, 3, 3, 3, 3, 3, 3, 3, 112, 3, 3,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 3, 3, 122, 34, 123, 3, 3,
- 124, 125, 126, 127, 3, 3, 128, 129, 130, 131, 132, 3, 133, 3, 3, 3,
- 134, 3, 3, 3, 3, 3, 3, 135, 136, 137, 138, 3, 3, 3, 3, 3,
- 139, 3, 140, 3, 141, 142, 143, 3, 3, 3, 3, 144, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 145, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 146, 147, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 148, 149, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 150, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 151, 152, 3, 3, 153, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 154, 155, 156, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 157, 3, 3, 3, 147, 3, 3, 3, 3, 3, 3, 158, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 159, 3, 160, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 161, 3, 3, 3, 3, 3, 3, 3, 162,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 163, 4, 164, 164, 4, 4, 4, 165, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
-};
-
-static RE_UINT8 re_grapheme_cluster_break_stage_3[] = {
- 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 0, 0, 0, 0, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2,
- 6, 7, 2, 2, 2, 2, 2, 2, 2, 2, 8, 5, 5, 5, 5, 9,
- 10, 2, 2, 2, 2, 2, 2, 2, 11, 2, 5, 12, 2, 2, 2, 2,
- 2, 6, 5, 5, 2, 2, 13, 2, 2, 2, 14, 15, 16, 17, 2, 2,
- 2, 18, 19, 2, 2, 2, 5, 5, 5, 20, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 14, 5, 13, 2, 2, 2, 2, 2, 2, 6, 21, 22,
- 2, 2, 14, 23, 24, 25, 2, 2, 2, 2, 2, 26, 2, 2, 2, 2,
- 2, 2, 6, 5, 27, 5, 5, 5, 28, 2, 2, 2, 2, 2, 2, 29,
- 30, 31, 8, 2, 32, 2, 2, 2, 33, 2, 2, 2, 2, 2, 2, 34,
- 35, 36, 37, 2, 32, 2, 2, 38, 39, 2, 2, 2, 2, 2, 2, 40,
- 41, 42, 19, 2, 2, 2, 43, 2, 44, 45, 2, 2, 32, 2, 2, 46,
- 33, 2, 2, 2, 2, 2, 2, 47, 35, 36, 14, 2, 32, 2, 2, 2,
- 48, 2, 2, 2, 2, 2, 2, 49, 50, 51, 37, 2, 2, 2, 2, 2,
- 52, 2, 2, 2, 2, 2, 2, 14, 53, 17, 54, 2, 32, 2, 2, 2,
- 33, 2, 2, 2, 2, 2, 2, 55, 56, 57, 54, 2, 32, 2, 2, 2,
- 58, 2, 2, 2, 2, 2, 2, 59, 60, 61, 37, 2, 32, 2, 2, 2,
- 62, 2, 2, 2, 2, 2, 2, 2, 2, 63, 64, 65, 2, 2, 62, 2,
- 2, 2, 2, 2, 2, 2, 66, 20, 37, 67, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 66, 68, 2, 69, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 7, 2, 2, 70, 71, 2, 2, 2, 2, 2, 2, 8, 72,
- 73, 74, 5, 8, 5, 5, 5, 68, 38, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 74, 75, 76, 2, 2, 77, 78, 13, 2, 79, 2,
- 80, 22, 2, 22, 2, 2, 2, 2, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83,
- 83, 83, 83, 83, 83, 83, 83, 83, 2, 2, 2, 74, 2, 2, 2, 2,
- 2, 2, 84, 2, 2, 2, 84, 2, 2, 2, 32, 2, 2, 2, 32, 2,
- 2, 2, 2, 2, 2, 2, 85, 86, 87, 30, 21, 22, 2, 2, 2, 2,
- 2, 88, 2, 2, 2, 2, 2, 2, 54, 2, 2, 2, 2, 19, 2, 2,
- 2, 2, 2, 2, 89, 90, 91, 92, 2, 2, 37, 93, 2, 2, 2, 2,
- 2, 2, 94, 67, 95, 96, 97, 16, 2, 2, 2, 2, 2, 2, 5, 67,
- 98, 2, 2, 2, 2, 2, 99, 100, 101, 2, 2, 2, 2, 6, 21, 2,
- 102, 2, 2, 2, 103, 104, 2, 2, 2, 2, 2, 2, 49, 105, 58, 2,
- 2, 2, 2, 2, 106, 107, 108, 2, 2, 2, 109, 5, 75, 110, 111, 7,
- 5, 5, 5, 5, 5, 5, 5, 23, 2, 112, 2, 2, 2, 113, 2, 2,
- 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 5, 5, 5, 5, 13, 2,
- 2, 2, 2, 2, 2, 37, 7, 2, 2, 2, 2, 2, 2, 2, 2, 37,
- 2, 2, 2, 2, 5, 5, 5, 5, 2, 2, 2, 2, 2, 46, 2, 2,
- 2, 2, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 37, 109, 69,
- 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2,
- 115, 116, 2, 2, 117, 2, 2, 2, 118, 2, 2, 2, 2, 2, 106, 119,
- 120, 2, 2, 2, 5, 5, 7, 37, 2, 2, 2, 2, 14, 69, 2, 2,
- 37, 5, 58, 2, 81, 81, 81, 121, 28, 2, 2, 2, 2, 2, 122, 123,
- 124, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 2, 2, 125, 126, 2,
- 116, 127, 2, 2, 2, 2, 2, 128, 2, 2, 2, 2, 2, 2, 129, 130,
- 19, 2, 2, 2, 2, 131, 132, 2, 2, 2, 2, 2, 133, 134, 2, 2,
- 135, 136, 136, 137, 136, 136, 136, 135, 136, 136, 137, 136, 136, 136, 135, 136,
- 136, 137, 136, 136, 136, 135, 136, 136, 137, 136, 136, 136, 135, 136, 136, 137,
- 136, 136, 136, 135, 136, 136, 137, 136, 136, 136, 135, 136, 136, 137, 136, 136,
- 136, 135, 136, 136, 137, 136, 136, 136, 136, 135, 136, 136, 138, 2, 82, 82,
- 139, 140, 83, 83, 83, 83, 83, 141, 2, 2, 2, 38, 2, 2, 2, 2,
- 5, 5, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 142,
- 2, 2, 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 13, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 14, 20, 143, 99, 2, 2, 2, 2, 2, 144,
- 2, 2, 2, 2, 54, 2, 2, 2, 2, 2, 2, 2, 99, 2, 2, 2,
- 14, 5, 13, 2, 2, 2, 2, 2, 145, 2, 2, 2, 2, 2, 2, 5,
- 67, 2, 2, 2, 2, 2, 2, 37, 102, 2, 2, 2, 2, 2, 146, 147,
- 2, 148, 2, 2, 2, 2, 2, 2, 20, 2, 2, 2, 37, 149, 68, 2,
- 150, 2, 2, 2, 2, 2, 116, 2, 102, 2, 2, 2, 2, 2, 151, 72,
- 152, 79, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 153, 154, 38,
- 2, 2, 2, 37, 97, 20, 2, 2, 155, 156, 37, 2, 157, 68, 68, 2,
- 2, 2, 2, 2, 2, 2, 158, 5, 159, 2, 2, 38, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 160, 161, 162, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 37, 163, 164, 13, 2, 2, 165, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 97, 166, 13, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 167, 168, 2, 2, 2, 2, 74, 169, 21, 2, 2,
- 2, 2, 2, 2, 2, 153, 5, 170, 2, 2, 171, 172, 173, 2, 2, 2,
- 8, 20, 2, 2, 2, 2, 6, 174, 37, 2, 125, 92, 2, 2, 2, 2,
- 175, 176, 72, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 177, 67, 168,
- 2, 2, 46, 5, 5, 178, 179, 2, 2, 2, 2, 2, 2, 2, 180, 181,
- 182, 2, 2, 2, 2, 2, 2, 2, 2, 183, 184, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 185, 2, 2, 2, 2, 2, 2, 2, 0, 186,
- 2, 2, 2, 2, 2, 2, 68, 2, 2, 2, 2, 2, 2, 2, 67, 2,
- 2, 37, 187, 119, 119, 119, 119, 119, 119, 37, 20, 2, 2, 2, 2, 2,
- 2, 2, 2, 54, 142, 2, 2, 2, 2, 2, 2, 2, 188, 189, 190, 191,
- 192, 21, 2, 2, 2, 193, 2, 2, 84, 2, 2, 2, 2, 2, 2, 2,
- 5, 5, 5, 5, 5, 5, 67, 6, 5, 5, 5, 5, 5, 68, 22, 2,
- 128, 2, 2, 6, 8, 5, 2, 2, 67, 5, 5, 194, 195, 20, 2, 2,
- 2, 2, 2, 2, 2, 99, 2, 2, 2, 2, 67, 2, 2, 2, 2, 2,
- 99, 20, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 196, 197, 197, 197,
- 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 5, 5, 5, 5,
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_cluster_break_stage_4[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 2, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 4, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
- 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
- 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5,
- 0, 5, 5, 0, 5, 5, 0, 5, 1, 1, 1, 1, 1, 1, 0, 0,
- 5, 5, 5, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 1, 0, 5,
- 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0,
- 0, 5, 5, 5, 0, 0, 0, 0, 5, 5, 1, 5, 5, 5, 5, 5,
- 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 5, 7, 5, 0, 7, 7,
- 7, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 5, 7, 7,
- 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 5, 7, 7, 5, 5, 5, 5, 0, 0, 7,
- 7, 0, 0, 7, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 7, 7, 7, 5, 5, 0, 0, 0, 0, 5,
- 5, 0, 0, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 5, 0, 0,
- 7, 5, 5, 5, 5, 5, 0, 5, 5, 7, 0, 7, 7, 5, 0, 0,
- 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 0, 5, 5,
- 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7,
- 5, 7, 7, 0, 0, 0, 7, 7, 7, 0, 7, 7, 7, 5, 0, 0,
- 5, 7, 7, 7, 5, 0, 0, 0, 5, 7, 7, 7, 7, 0, 5, 5,
- 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 0, 7, 5,
- 7, 7, 5, 7, 7, 0, 5, 7, 7, 0, 7, 7, 5, 5, 0, 0,
- 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5, 7,
- 7, 5, 5, 5, 5, 0, 7, 7, 7, 0, 7, 7, 7, 5, 1, 0,
- 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5,
- 7, 7, 5, 5, 5, 0, 5, 0, 7, 7, 7, 7, 7, 7, 7, 5,
- 0, 5, 0, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
- 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 7, 7,
- 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 0, 5, 5,
- 0, 0, 0, 0, 0, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5,
- 0, 5, 5, 7, 7, 5, 5, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 5, 5, 0, 0, 0, 0, 5, 5, 0, 5, 5, 5, 5, 0, 0, 0,
- 0, 0, 5, 0, 7, 5, 5, 0, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 7, 5,
- 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 5, 7,
- 0, 0, 0, 5, 5, 5, 4, 0, 5, 5, 5, 7, 7, 7, 7, 5,
- 5, 7, 7, 7, 0, 0, 0, 0, 7, 7, 5, 7, 7, 7, 7, 7,
- 7, 5, 5, 5, 0, 0, 0, 0, 5, 7, 7, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 5, 7, 5, 0, 5, 0, 0, 5, 5, 5,
- 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
- 5, 5, 5, 7, 5, 7, 7, 7, 7, 7, 5, 7, 7, 0, 0, 0,
- 5, 5, 7, 0, 0, 0, 0, 0, 0, 7, 5, 5, 5, 5, 7, 7,
- 5, 5, 7, 5, 5, 5, 0, 0, 5, 5, 7, 7, 7, 5, 7, 5,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5,
- 5, 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5,
- 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 7,
- 0, 0, 0, 4, 5, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
- 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 7, 5, 5, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 5, 5, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0,
- 0, 0, 0, 5, 7, 7, 5, 5, 5, 5, 7, 7, 5, 5, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 7,
- 7, 5, 5, 7, 7, 5, 5, 0, 0, 0, 0, 0, 5, 7, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 5, 5, 5, 0, 0, 5,
- 5, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 7, 5, 5, 7, 7,
- 0, 0, 0, 0, 0, 7, 5, 0, 0, 0, 0, 7, 7, 5, 7, 7,
- 5, 7, 7, 0, 7, 5, 0, 0, 11, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12,
- 12, 12, 12, 12, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0,
- 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
- 4, 4, 4, 4, 0, 0, 0, 0, 0, 5, 5, 5, 0, 5, 5, 0,
- 5, 5, 5, 0, 0, 0, 0, 5, 7, 5, 7, 0, 0, 0, 0, 0,
- 7, 7, 7, 5, 5, 5, 5, 7, 7, 5, 5, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 5, 5, 5, 5, 7, 5, 5, 5,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 7, 7, 7, 5, 5,
- 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 5,
- 5, 5, 7, 7, 5, 7, 5, 5, 5, 7, 7, 7, 7, 0, 0, 7,
- 7, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 5, 5,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 5, 5, 5, 7, 5, 0,
- 5, 7, 7, 5, 5, 5, 5, 5, 5, 7, 5, 7, 7, 5, 7, 5,
- 5, 7, 5, 5, 0, 0, 0, 0, 7, 7, 5, 5, 5, 5, 0, 0,
- 7, 7, 7, 7, 5, 5, 7, 5, 0, 0, 0, 0, 5, 5, 0, 0,
- 5, 5, 5, 7, 7, 5, 7, 5, 0, 0, 0, 5, 7, 5, 7, 7,
- 5, 5, 5, 5, 5, 5, 7, 5, 7, 7, 5, 5, 5, 5, 7, 5,
- 7, 5, 5, 0, 0, 0, 0, 0, 0, 7, 7, 7, 5, 5, 5, 5,
- 0, 0, 5, 5, 7, 7, 7, 7, 5, 0, 0, 0, 7, 0, 0, 0,
- 5, 7, 1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 1, 1, 1, 1,
- 1, 1, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 7, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 7, 5, 5, 0,
- 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 0, 5, 5, 0, 5,
- 5, 5, 5, 5, 5, 5, 1, 5, 0, 0, 7, 7, 7, 7, 7, 0,
- 5, 5, 0, 7, 7, 5, 7, 5, 0, 0, 0, 5, 5, 7, 7, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 0, 0, 5, 7, 5, 5, 5, 0, 0, 0, 7, 5, 5,
- 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
- 5, 5, 5, 0, 0, 5, 5, 5, 0, 0, 5, 5, 5, 5, 0, 0,
- 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5, 5,
- 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-/* Grapheme_Cluster_Break: 4400 bytes. */
-
-RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_grapheme_cluster_break_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_grapheme_cluster_break_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_grapheme_cluster_break_stage_3[pos + f] << 3;
- value = re_grapheme_cluster_break_stage_4[pos + code];
-
- return value;
-}
-
-/* Sentence_Break. */
-
-static RE_UINT8 re_sentence_break_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 13, 13, 13, 14,
- 15, 16, 17, 18, 19, 13, 20, 13, 21, 13, 13, 13, 13, 22, 7, 7,
- 23, 24, 13, 13, 13, 13, 25, 26, 13, 13, 27, 28, 29, 30, 31, 13,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 32, 7, 33, 34, 7, 35, 7, 7, 7, 36, 13, 37,
+/* Bidi_Class. */
+static RE_UINT8 re_bidi_class_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 17, 18,
+ 19, 13, 20, 21, 22, 23, 24, 25, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 26, 27, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 28,
+ 13, 13, 13, 13, 29, 30, 31, 13, 32, 13, 33, 34, 35, 36, 37, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 38, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-};
-
-static RE_UINT8 re_sentence_break_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 34, 35, 36, 37, 38, 39, 34, 34, 34, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 64, 65, 64, 64, 66, 64, 64, 64, 64, 67, 68,
- 64, 64, 64, 69, 64, 64, 64, 64, 70, 71, 72, 73, 74, 64, 64, 64,
- 75, 76, 77, 78, 64, 64, 64, 64, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 79, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 80,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 81, 34, 34, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 94,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 34, 34, 95, 96, 97, 98, 34, 34, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 64, 109, 110, 111, 112, 113, 114, 64, 34, 34, 115, 64,
- 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 64, 64, 64, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 64, 136, 137, 64, 138, 139, 140, 141, 64,
- 142, 143, 64, 144, 145, 146, 64, 64, 147, 148, 149, 150, 64, 151, 64, 64,
- 34, 34, 34, 34, 34, 34, 34, 152, 153, 34, 154, 64, 64, 64, 64, 64,
- 34, 34, 34, 34, 34, 34, 34, 34, 155, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 34, 34, 34, 34, 156, 64, 64, 64,
- 34, 34, 34, 34, 157, 158, 159, 160, 64, 64, 64, 64, 161, 162, 163, 164,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 165,
- 34, 34, 34, 34, 34, 166, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 34, 34, 167, 34, 34, 168, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 169, 170, 64, 64, 64, 64, 64, 64,
- 64, 64, 171, 172, 173, 64, 64, 64, 174, 175, 176, 177, 178, 179, 180, 181,
- 64, 64, 64, 64, 182, 183, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 184, 64, 185, 64, 64, 186, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 34, 187, 188, 64, 64, 64, 64, 64, 64, 64, 64, 64, 189, 190, 64, 64,
- 64, 64, 191, 192, 64, 64, 64, 64, 64, 64, 64, 64, 193, 64, 64, 64,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 194, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 195, 34,
- 196, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 197, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 198, 64, 64, 64, 64, 64, 64, 64, 64,
- 34, 34, 34, 34, 199, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 200, 64, 201, 202, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-};
-
-static RE_UINT8 re_sentence_break_stage_3[] = {
- 0, 0, 1, 2, 0, 0, 0, 0, 3, 4, 5, 6, 7, 7, 8, 9,
- 10, 11, 11, 11, 11, 11, 12, 13, 14, 15, 15, 15, 15, 15, 16, 13,
- 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 19, 20, 0, 21, 19, 0,
- 11, 11, 11, 11, 11, 22, 11, 23, 15, 15, 15, 15, 15, 24, 15, 15,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26,
- 26, 26, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 28, 29,
- 30, 31, 32, 33, 28, 31, 34, 28, 25, 31, 29, 31, 32, 26, 35, 34,
- 36, 28, 31, 26, 26, 26, 26, 27, 25, 25, 25, 25, 30, 31, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 15, 33, 30,
- 26, 23, 25, 25, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 37, 15, 15, 15, 15, 15, 15, 15, 15, 38, 36,
- 39, 40, 36, 36, 41, 0, 0, 0, 15, 42, 0, 43, 0, 0, 0, 0,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 25, 45, 46, 47,
- 0, 48, 22, 49, 32, 11, 11, 11, 50, 11, 11, 15, 15, 15, 15, 15,
- 15, 15, 15, 51, 33, 34, 25, 25, 25, 25, 25, 25, 15, 52, 30, 32,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 25, 25, 25, 25, 25, 25, 25, 25,
- 53, 44, 54, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 28, 26, 26, 29, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 10, 11, 11, 11,
- 11, 11, 11, 11, 11, 22, 55, 56, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 57, 0, 58, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 59,
- 60, 59, 0, 0, 36, 36, 36, 36, 36, 36, 61, 62, 36, 0, 0, 0,
- 63, 64, 0, 65, 44, 44, 66, 67, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 68, 44, 44, 44, 44, 44, 7, 7, 69, 70, 71, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 72, 44, 73, 44, 74, 75, 76, 7, 7, 77, 78,
- 79, 0, 0, 80, 81, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44,
- 44, 44, 66, 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 44, 44, 84, 0, 0, 0,
- 7, 7, 77, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 41, 85, 86,
- 36, 36, 36, 36, 36, 83, 87, 44, 44, 88, 88, 89, 0, 9, 90, 91,
- 36, 36, 36, 36, 36, 36, 88, 0, 36, 36, 61, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, 92, 36, 41,
- 0, 0, 0, 0, 93, 44, 44, 44, 94, 44, 44, 44, 44, 44, 44, 44,
- 44, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 95,
- 44, 44, 44, 44, 88, 44, 36, 36, 83, 96, 7, 7, 82, 36, 36, 36,
- 88, 82, 36, 78, 78, 36, 36, 36, 36, 36, 92, 36, 43, 40, 41, 95,
- 44, 97, 97, 98, 0, 93, 0, 99, 83, 100, 7, 7, 41, 0, 0, 101,
- 58, 82, 61, 62, 78, 36, 36, 36, 36, 36, 92, 36, 92, 102, 41, 75,
- 66, 93, 97, 89, 86, 0, 82, 43, 0, 100, 7, 7, 76, 103, 0, 0,
- 58, 82, 36, 99, 99, 36, 36, 36, 36, 36, 92, 36, 92, 82, 41, 95,
- 44, 59, 59, 89, 104, 0, 0, 0, 83, 100, 7, 7, 0, 0, 105, 44,
- 58, 82, 36, 78, 78, 36, 36, 36, 36, 36, 92, 36, 92, 82, 41, 95,
- 44, 97, 97, 89, 0, 106, 0, 99, 83, 100, 7, 7, 55, 0, 0, 0,
- 107, 82, 61, 40, 92, 41, 102, 92, 62, 104, 61, 40, 36, 36, 41, 106,
- 66, 106, 75, 89, 104, 93, 0, 0, 0, 100, 7, 7, 0, 0, 0, 0,
- 44, 71, 36, 92, 92, 36, 36, 36, 36, 36, 92, 36, 36, 36, 41, 105,
- 44, 75, 75, 89, 0, 60, 61, 0, 83, 100, 7, 7, 0, 0, 0, 0,
- 88, 82, 36, 92, 92, 36, 36, 36, 36, 36, 92, 36, 36, 82, 41, 95,
- 44, 75, 75, 89, 0, 60, 0, 108, 83, 100, 7, 7, 102, 0, 0, 0,
- 44, 82, 36, 92, 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 95,
- 44, 75, 75, 98, 0, 68, 0, 62, 83, 100, 7, 7, 0, 0, 40, 36,
- 106, 82, 36, 36, 36, 61, 40, 36, 36, 36, 36, 36, 99, 36, 36, 55,
- 36, 61, 109, 93, 44, 110, 44, 44, 0, 100, 7, 7, 106, 0, 0, 0,
- 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 81, 44, 66, 0,
- 36, 68, 44, 66, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 102, 92, 61, 36, 36, 36, 36, 36, 36, 112, 36, 36, 81, 44, 44, 84,
- 36, 43, 44, 89, 7, 7, 111, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 104, 0, 0, 0, 0, 0, 89, 0, 7, 7, 111, 0, 0, 113, 114, 115,
- 36, 36, 82, 36, 36, 36, 36, 36, 36, 36, 36, 104, 58, 44, 44, 44,
- 44, 75, 36, 88, 44, 44, 58, 44, 44, 44, 44, 44, 44, 44, 44, 116,
- 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44, 44, 117,
- 7, 7, 118, 0, 36, 83, 76, 83, 95, 74, 44, 76, 88, 71, 36, 36,
- 83, 44, 44, 87, 7, 7, 119, 89, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 50, 0, 120, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 92, 41, 36, 61, 92, 41, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 92, 41, 36, 36, 36, 36, 36, 36, 36, 36, 92, 41, 36, 61,
- 92, 41, 36, 36, 36, 61, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 92, 41, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 61, 58, 121, 9, 122, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 123, 15, 39,
- 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 124, 36, 36, 36, 36,
- 125, 36, 36, 36, 36, 36, 126, 127, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 40, 36, 36, 104, 0,
- 36, 36, 36, 92, 83, 116, 0, 0, 36, 36, 36, 36, 83, 128, 0, 0,
- 36, 36, 36, 36, 83, 0, 0, 0, 36, 36, 36, 92, 129, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44,
- 44, 44, 44, 44, 44, 62, 0, 103, 7, 7, 111, 0, 0, 0, 0, 0,
- 130, 0, 131, 132, 7, 7, 111, 0, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0,
- 36, 133, 36, 36, 36, 36, 36, 36, 36, 36, 134, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 44, 44, 44, 0, 44, 44, 44, 0,
- 0, 96, 7, 7, 36, 36, 36, 36, 36, 36, 36, 41, 36, 104, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36,
- 36, 36, 41, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 68, 44, 0, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 88, 44, 66, 44, 44, 44, 44, 44, 44, 44, 97,
- 7, 7, 111, 0, 7, 7, 111, 0, 0, 62, 135, 0, 44, 44, 44, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 44, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44,
- 44, 71, 36, 0, 7, 7, 118, 136, 0, 0, 93, 44, 44, 0, 0, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 88, 44, 44, 76, 7, 7, 77, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 44, 44, 44, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44, 44, 9, 122,
- 7, 7, 111, 82, 7, 7, 77, 36, 36, 36, 36, 36, 36, 36, 36, 137,
- 15, 15, 42, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 82,
- 0, 0, 0, 0, 66, 44, 44, 44, 44, 44, 71, 81, 36, 74, 98, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 59, 44,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 34, 15, 27, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 15, 15, 11, 11, 15, 39, 11, 123, 15, 15, 11, 11, 15, 15, 11, 11,
- 15, 39, 11, 123, 15, 15, 138, 138, 15, 15, 11, 11, 15, 15, 15, 39,
- 15, 15, 11, 11, 15, 15, 11, 11, 15, 15, 11, 11, 15, 139, 11, 140,
- 46, 139, 11, 141, 15, 46, 11, 0, 15, 15, 11, 141, 46, 139, 11, 141,
- 142, 142, 143, 144, 145, 146, 147, 147, 0, 148, 149, 150, 0, 0, 151, 152,
- 0, 153, 152, 0, 0, 0, 0, 154, 63, 155, 63, 63, 21, 0, 0, 156,
- 0, 0, 0, 151, 15, 15, 15, 42, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 116, 0, 0, 0,
- 48, 157, 158, 159, 23, 120, 10, 123, 0, 160, 49, 161, 11, 38, 162, 33,
- 0, 163, 39, 164, 0, 0, 0, 0, 11, 11, 11, 11, 15, 15, 15, 15,
- 165, 38, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 11, 11,
- 11, 11, 11, 11, 15, 15, 15, 15, 15, 15, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 147, 127, 0, 147, 147, 147, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 151, 0, 0, 0, 0, 0, 0, 0, 167, 147, 147, 0, 0, 0, 0,
- 4, 147, 147, 147, 147, 147, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 22, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 24, 31, 168, 26, 32, 25, 29, 15, 33,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 42, 157, 169, 54, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 170, 0, 21, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 62, 0, 0, 0, 93,
- 36, 36, 36, 36, 36, 61, 0, 0, 36, 61, 36, 61, 36, 61, 36, 61,
- 36, 61, 36, 61, 36, 61, 36, 61, 44, 44, 44, 44, 44, 44, 44, 44,
- 147, 147, 147, 5, 0, 0, 0, 5, 147, 147, 5, 171, 0, 0, 0, 122,
- 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 173, 82, 147, 147, 5, 147, 147, 174, 82, 36, 83, 44, 82, 41, 36, 104,
- 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 61, 60, 82, 82, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 36,
- 0, 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 82, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 61, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 61, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0,
- 36, 36, 36, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 175,
- 36, 36, 36, 176, 36, 36, 36, 36, 7, 7, 77, 0, 0, 0, 0, 0,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 177, 66, 44, 44, 178,
- 25, 25, 25, 25, 25, 25, 25, 179, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 180, 9, 0, 0,
- 0, 0, 0, 0, 0, 62, 36, 36, 181, 25, 25, 25, 27, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 15, 15, 26, 30,
- 25, 25, 182, 183, 25, 27, 25, 25, 25, 25, 31, 23, 11, 25, 25, 25,
- 181, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 184, 36,
- 185, 185, 68, 36, 36, 36, 36, 36, 68, 44, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 136, 0, 0,
- 76, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44,
- 44, 89, 0, 136, 7, 7, 111, 0, 44, 44, 44, 44, 76, 36, 62, 186,
- 7, 7, 77, 36, 36, 36, 36, 36, 36, 83, 44, 180, 36, 36, 36, 36,
- 36, 68, 44, 44, 44, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 104,
- 44, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44,
- 116, 0, 152, 62, 7, 7, 111, 0, 36, 81, 36, 36, 7, 7, 77, 61,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 88, 44, 44, 66, 0, 0,
- 68, 36, 36, 89, 7, 7, 111, 187, 36, 36, 36, 36, 36, 61, 188, 76,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 95, 74, 71, 83,
- 134, 0, 0, 0, 0, 0, 62, 41, 36, 36, 68, 44, 189, 190, 0, 0,
- 82, 61, 82, 61, 82, 61, 0, 0, 36, 61, 36, 61, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 24, 15, 15, 15, 0, 0, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 191, 89, 7, 7, 111, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 36, 36, 36, 36,
- 36, 61, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 24, 0, 0, 192, 15, 0, 193, 36, 36, 92, 36, 36, 61, 36, 43,
- 99, 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0, 0,
- 0, 0, 0, 0, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 194,
- 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 40, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0,
- 44, 44, 44, 44, 195, 4, 127, 0, 44, 44, 44, 44, 196, 174, 147, 147,
- 147, 197, 127, 0, 6, 198, 199, 200, 145, 0, 0, 0, 36, 92, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 201,
- 90, 0, 5, 6, 7, 7, 8, 9, 10, 11, 11, 11, 11, 11, 12, 13,
- 14, 15, 15, 15, 15, 15, 16, 202, 203, 204, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 83, 36, 36, 36, 36, 36, 36, 36, 61,
- 40, 36, 40, 36, 40, 36, 40, 104, 0, 0, 0, 0, 0, 0, 205, 0,
- 36, 36, 36, 82, 36, 36, 36, 36, 36, 61, 36, 36, 36, 36, 61, 99,
- 36, 36, 36, 41, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
- 36, 36, 36, 36, 36, 36, 36, 104, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 104, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 82, 36, 36, 36, 36,
- 36, 36, 61, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 66, 0,
- 36, 36, 36, 36, 36, 36, 36, 41, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 0, 36, 36, 82, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 41, 7, 7, 111, 0, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 0,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 0, 0, 0, 0, 0, 0,
- 36, 41, 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 99, 104, 78,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 36, 36, 36, 61, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 61, 41, 0, 0,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 36, 36, 36, 36, 41, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 40,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 60, 0, 44, 36, 82, 82, 36, 36, 36, 36, 36, 36, 41, 66, 93,
- 0, 0, 0, 0, 0, 136, 0, 0, 36, 36, 36, 36, 36, 36, 36, 104,
- 36, 36, 36, 36, 36, 36, 36, 104, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 82, 36, 36, 36, 36, 36, 36, 190, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 36, 36, 61, 0, 0, 0,
- 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 22, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 0, 0, 7, 7, 111, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 104, 0, 62, 0, 0, 36, 36, 36, 36,
- 36, 83, 44, 44, 116, 187, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, 61, 0, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44,
- 44, 191, 122, 0, 0, 0, 0, 0, 0, 100, 7, 7, 0, 0, 0, 93,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 66, 206,
- 152, 0, 0, 20, 36, 36, 36, 36, 36, 36, 104, 0, 7, 7, 111, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44, 207, 7, 7,
- 187, 190, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 68, 108, 0, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44,
- 71, 208, 58, 209, 7, 7, 210, 176, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 99, 36, 36, 36, 36, 36, 36, 44, 44, 44, 211, 212,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 61, 92, 99, 36, 36, 36, 99, 36, 36, 213, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 66, 0, 7, 7, 111, 0,
- 44, 82, 36, 78, 78, 36, 36, 36, 36, 36, 92, 36, 92, 82, 214, 95,
- 44, 97, 97, 89, 104, 93, 0, 82, 83, 106, 44, 116, 44, 116, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 88, 44, 44,
- 44, 117, 215, 122, 7, 7, 111, 107, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44,
- 44, 99, 0, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 89, 44, 44,
- 216, 0, 187, 135, 135, 135, 36, 89, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44,
- 128, 104, 0, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44, 104, 0,
- 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 61, 58, 44, 44, 44, 0, 7, 7, 111, 79,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 66, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
- 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 111, 0, 0, 0, 0, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 40, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 88, 44, 106, 44, 217, 116, 0, 0, 0, 0, 0, 0,
- 88, 44, 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 87, 66,
- 136, 93, 0, 0, 88, 44, 44, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 83, 44, 44, 44, 180, 218, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0,
- 36, 36, 92, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 66, 44, 44,
- 208, 0, 0, 0, 7, 7, 111, 0, 0, 0, 0, 0, 40, 36, 36, 36,
- 36, 36, 36, 36, 106, 44, 44, 44, 44, 44, 58, 44, 44, 66, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 61, 99, 36, 36, 36, 36, 36, 36, 36, 36, 36, 88, 66, 109, 59,
- 44, 87, 0, 0, 7, 7, 111, 0, 36, 99, 92, 36, 36, 36, 36, 36,
- 36, 36, 83, 66, 59, 44, 104, 0, 7, 7, 111, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 68, 191, 122, 0,
- 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 63, 63, 219, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 39, 40, 40, 40, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38
+};
+
+static RE_UINT16 re_bidi_class_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 8, 9, 10, 11, 11, 11, 12, 13, 7, 7, 14,
+ 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 7, 7, 16, 17, 18, 19,
+ 20, 21, 22, 23, 21, 21, 24, 25, 26, 27, 28, 21, 21, 29, 19, 30,
+ 31, 32, 33, 34, 19, 21, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 42, 46, 47, 45, 42, 48, 49, 41, 50, 51, 40, 52, 7, 53, 54,
+ 55, 56, 57, 58, 41, 42, 59, 40, 60, 61, 43, 40, 41, 7, 62, 7,
+ 7, 63, 64, 7, 7, 65, 66, 7, 67, 68, 7, 69, 70, 71, 72, 7,
+ 7, 73, 74, 75, 76, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 77, 7, 78, 7, 7, 7,
+ 79, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 80, 7, 7, 7, 81, 81, 82, 82, 7, 83, 84, 78,
+ 85, 7, 7, 7, 86, 87, 7, 7, 7, 88, 89, 7, 7, 7, 90, 91,
+ 92, 7, 93, 94, 7, 95, 96, 7, 97, 98, 52, 99, 60, 100, 7, 101,
+ 7, 102, 7, 7, 7, 7, 103, 104, 7, 7, 7, 7, 7, 7, 11, 105,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 106, 107, 108,
+ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 7, 120, 91, 91, 91,
+ 121, 91, 91, 91, 91, 91, 91, 91, 91, 122, 7, 123, 124, 91, 91, 91,
+ 91, 125, 126, 91, 127, 7, 7, 128, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 129, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 7, 7, 7, 7, 7, 7, 7, 7, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 130, 131, 91, 91, 91,
+ 7, 7, 7, 7, 7, 7, 7, 132, 7, 7, 7, 133, 7, 7, 7, 11,
+ 91, 91, 134, 7, 135, 91, 91, 136, 91, 91, 91, 91, 91, 91, 122, 137,
+ 138, 139, 7, 7, 140, 79, 7, 141, 7, 7, 7, 7, 7, 7, 91, 142,
+ 143, 7, 144, 145, 7, 146, 147, 7, 7, 7, 7, 148, 7, 7, 90, 149,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 91, 91,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 144, 91, 125, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 150, 7, 7, 151, 56, 7, 7, 152, 91, 153, 7, 7, 154, 7, 7, 7,
+ 155, 156, 7, 157, 7, 7, 158, 159, 7, 160, 161, 7, 37, 162, 7, 163,
+ 7, 164, 165, 42, 7, 166, 41, 167, 7, 7, 7, 168, 7, 7, 7, 169,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 170, 171, 172, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 173, 21, 21, 21, 21, 174, 175,
+ 176, 177, 178, 179, 21, 21, 21, 180, 181, 2, 2, 182, 7, 7, 7, 183,
+ 7, 7, 7, 7, 7, 7, 7, 7, 184, 7, 91, 91, 185, 79, 7, 186,
+ 7, 7, 7, 7, 7, 7, 7, 187, 7, 7, 7, 188, 7, 7, 7, 7,
+ 19, 19, 19, 19, 19, 19, 19, 19, 189, 19, 19, 19, 19, 19, 19, 19,
+ 190, 191, 19, 19, 19, 19, 19, 192, 19, 193, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 21, 194, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 195, 19, 196, 19, 19, 19, 172, 29, 34, 19, 19, 19, 19,
+ 41, 197, 198, 199, 60, 200, 7, 7, 37, 201, 7, 202, 60, 203, 204, 7,
+ 7, 205, 7, 7, 7, 7, 133, 206, 60, 61, 96, 207, 7, 7, 7, 7,
+ 7, 197, 208, 7, 7, 209, 210, 7, 7, 7, 7, 7, 7, 211, 212, 7,
+ 7, 213, 96, 214, 7, 215, 7, 7, 77, 216, 7, 7, 7, 7, 7, 7,
+ 7, 217, 7, 7, 7, 7, 7, 7, 7, 218, 219, 7, 7, 7, 220, 96,
+ 221, 222, 223, 7, 224, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 225, 7, 7, 226, 227, 7, 7, 7, 228, 229, 7, 230, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 231, 7, 7, 7, 7, 7, 7, 232, 233,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 234, 7, 235, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 236, 7, 237, 7, 7, 238,
+ 7, 7, 7, 7, 239, 240, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 241, 242, 243, 7, 7,
+ 91, 91, 244, 7, 7, 7, 7, 7, 91, 91, 245, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 141, 7, 246, 7, 247, 7, 248, 7, 249, 250,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 11, 251, 11, 252, 253, 254, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 255, 256, 7, 7, 7, 7, 7, 7, 7, 235, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 257, 7, 7, 7, 7, 7, 7, 7, 7,
+ 19, 19, 19, 19, 19, 19, 258, 19, 19, 19, 259, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 172, 21, 21, 19, 19, 21, 21, 34, 19, 19, 19, 19, 19,
+ 21, 21, 21, 21, 21, 21, 21, 260, 19, 19, 19, 19, 19, 19, 19, 19,
+ 91, 261, 91, 91, 136, 262, 263, 122, 264, 247, 7, 265, 7, 266, 7, 7,
+ 7, 7, 7, 182, 7, 7, 7, 7, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 267, 185, 91, 91, 91, 136, 91, 91, 268, 269,
+ 261, 91, 270, 91, 271, 272, 7, 7, 91, 91, 91, 273, 91, 91, 129, 91,
+ 91, 91, 136, 274, 275, 276, 277, 7, 91, 91, 91, 91, 278, 91, 126, 279,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 280,
+ 281, 281, 281, 281, 281, 281, 281, 281, 11, 11, 11, 11, 11, 11, 11, 282,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281
+};
+
+static RE_UINT8 re_bidi_class_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2,
+ 4, 5, 5, 6, 6, 6, 5, 5, 5, 5, 5, 7, 8, 7, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 1,
+ 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 8, 5, 6, 6, 6, 6, 5, 5, 5, 5, 0, 5, 5, 1, 5, 5,
+ 6, 6, 9, 9, 5, 0, 5, 5, 5, 9, 0, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 6,
+ 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 10,
+ 11, 10, 10, 11, 10, 10, 11, 10, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 12, 12, 12, 12, 12, 12, 5, 5, 13, 6, 6, 13, 8, 13, 5, 5,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 12, 12, 13, 13, 13,
+ 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 12, 5, 10,
+ 10, 10, 10, 10, 10, 13, 13, 10, 10, 5, 10, 10, 10, 10, 13, 13,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 11, 11, 5, 5, 5, 5, 11, 11, 11, 10, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 11, 10, 10, 10, 11, 10, 10, 10, 10, 10, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 12, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 0,
+ 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 0, 0, 0, 0, 10, 10, 0, 0, 10, 10, 10, 0, 0,
+ 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10,
+ 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 5, 5, 5, 5, 5, 6, 5, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10,
+ 10, 0, 0, 0, 0, 0, 10, 10, 10, 0, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 10, 0, 10, 5, 5, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10,
+ 10, 0, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 10, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 6, 0, 10, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0,
+ 5, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0,
+ 10, 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 0, 0, 0, 10, 0, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 0, 11,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 14, 15, 16, 17, 18, 8,
+ 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,
+ 1, 1, 1, 1, 1, 1, 19, 20, 21, 22, 1, 1, 1, 1, 1, 1,
+ 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 7, 7, 5, 5, 5, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 7, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 5, 5, 5, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5,
+ 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 7, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+ 4, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0,
+ 5, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 10, 5, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 5, 5, 5, 5, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 0,
+ 0, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 7, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 5,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 8, 5, 8, 0, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6,
+ 5, 5, 7, 7, 5, 5, 5, 0, 5, 6, 6, 5, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1,
+ 0, 5, 5, 6, 6, 6, 5, 5, 5, 5, 5, 7, 8, 7, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 5, 5, 5, 6, 6, 0, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 1, 1,
+ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5,
+ 11, 10, 10, 10, 11, 10, 10, 11, 11, 11, 11, 11, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 11, 11, 11, 11, 10,
+ 11, 11, 11, 11, 11, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 5, 5, 5, 5, 5,
+ 13, 13, 13, 13, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 0, 0, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 10, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 10,
+ 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 10, 10, 0, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 0, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 0, 0,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 10, 0,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10,
+ 10, 0, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 10, 0, 10, 10, 0, 10,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
+ 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 10, 10, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10,
+ 10, 10, 0, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 5, 5, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+RE_UINT32 re_get_bidi_class(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_bidi_class_table_1[field_2];
+ v = re_bidi_class_table_2[(v << 5) | field_1];
+ v = re_bidi_class_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Bidi_Control. */
+RE_UINT32 re_get_bidi_control(RE_UINT32 codepoint) {
+ if (codepoint == 0x061C)
+ return 1;
+ if (0x200E <= codepoint && codepoint <= 0x200F)
+ return 1;
+ if (0x202A <= codepoint && codepoint <= 0x202E)
+ return 1;
+ if (0x2066 <= codepoint && codepoint <= 0x2069)
+ return 1;
+
+ return 0;
+}
+
+/* Bidi_Mirrored. */
+static RE_UINT8 re_bidi_mirrored_table_1[] = {
+ 0, 1, 1, 2, 1, 3, 1, 1, 4, 5, 6, 7, 8, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_bidi_mirrored_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, 0, 36,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40, 41, 0, 0, 0, 0, 1, 2, 42, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0
+};
+
+static RE_UINT8 re_bidi_mirrored_table_3[] = {
+ 0, 0, 0, 0, 0, 3, 0, 80, 0, 0, 0, 40, 0, 8, 0, 8,
+ 0, 0, 0, 60, 0, 0, 0, 24, 0, 0, 0, 6, 96, 0, 0, 0,
+ 0, 0, 0, 96, 0, 96, 0, 0, 1, 0, 0, 0, 30, 63, 98, 188,
+ 87, 248, 15, 250, 255, 31, 60, 128, 245, 207, 255, 255, 255, 159, 7, 1,
+ 204, 255, 255, 193, 0, 62, 195, 255, 255, 63, 255, 255, 0, 15, 0, 0,
+ 3, 6, 0, 0, 0, 255, 63, 0, 121, 59, 120, 112, 252, 255, 0, 0,
+ 248, 255, 255, 249, 253, 255, 0, 1, 63, 194, 55, 31, 58, 3, 240, 51,
+ 0, 252, 255, 223, 83, 122, 48, 112, 0, 0, 128, 1, 48, 188, 25, 254,
+ 255, 255, 255, 255, 207, 191, 255, 255, 255, 255, 127, 80, 124, 112, 136, 47,
+ 0, 0, 0, 64, 60, 54, 0, 48, 255, 3, 0, 0, 0, 255, 243, 15,
+ 0, 0, 0, 126, 48, 0, 0, 0, 0, 0, 0, 168, 13, 0, 0, 0,
+ 0, 0, 0, 8, 0, 0, 32, 0, 0, 128, 0, 0, 0, 2, 0, 0,
+ 8, 0, 0, 0
+};
+
+RE_UINT32 re_get_bidi_mirrored(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_bidi_mirrored_table_1[field_2];
+ v = re_bidi_mirrored_table_2[(v << 5) | field_1];
+ v = re_bidi_mirrored_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Blank. */
+RE_UINT32 re_get_blank(RE_UINT32 codepoint) {
+ if (codepoint == 0x09)
+ return 1;
+ if (codepoint == 0x20)
+ return 1;
+ if (codepoint == 0xA0)
+ return 1;
+ if (codepoint == 0x1680)
+ return 1;
+ if (0x2000 <= codepoint && codepoint <= 0x200A)
+ return 1;
+ if (codepoint == 0x202F)
+ return 1;
+ if (codepoint == 0x205F)
+ return 1;
+ if (codepoint == 0x3000)
+ return 1;
+
+ return 0;
+}
+
+/* Block. */
+static RE_UINT8 re_block_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 16, 17, 18, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38, 36, 36,
+ 36, 39, 36, 36, 36, 36, 36, 36, 36, 36, 40, 41, 42, 42, 42, 42,
+ 42, 42, 43, 44, 36, 36, 36, 36, 36, 36, 36, 36, 45, 36, 36, 46,
+ 36, 36, 36, 36, 47, 48, 49, 36, 50, 36, 51, 52, 53, 54, 55, 36,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 58, 58, 58, 59, 60, 61,
+ 61, 61, 61, 62, 63, 63, 63, 63, 63, 63, 64, 36, 36, 36, 65, 36,
+ 66, 66, 66, 66, 67, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 68, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70
+};
+
+static RE_UINT16 re_block_table_2[] = {
+ 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
+ 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 14, 15, 16, 16, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22,
+ 23, 23, 24, 25, 26, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29,
+ 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33,
+ 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
+ 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40,
+ 41, 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 46, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 48, 49, 49, 49, 50, 51, 52, 53, 54, 54, 54, 54,
+ 55, 55, 55, 55, 55, 56, 57, 57, 58, 58, 59, 60, 61, 61, 61, 62,
+ 63, 64, 64, 64, 64, 65, 66, 66, 67, 67, 67, 67, 68, 68, 69, 69,
+ 70, 70, 71, 72, 73, 74, 75, 76, 77, 77, 77, 77, 78, 78, 79, 79,
+ 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 83, 84, 85, 86, 87, 88, 88, 89, 90, 91, 92, 92, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 104,
+ 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 107,
+ 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109,
+ 110, 110, 110, 111, 112, 112, 112, 112, 113, 114, 115, 115, 116, 116, 116, 117,
+ 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 121,
+ 122, 122, 123, 123, 123, 124, 124, 124, 125, 126, 127, 127, 128, 129, 130, 131,
+ 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 138, 139, 140, 141, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 143, 143, 143, 144, 144, 144, 145, 146, 146, 146, 146, 146, 146, 146,
+ 147, 148, 149, 149, 150, 150, 150, 151, 152, 153, 154, 155, 156, 156, 156, 157,
+ 158, 158, 158, 159, 160, 160, 160, 161, 162, 163, 164, 165, 166, 166, 167, 167,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 170, 170,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 177, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 179, 180, 181, 182, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 185,
+ 186, 186, 186, 186, 187, 187, 187, 187, 188, 188, 189, 189, 190, 191, 192, 193,
+ 26, 26, 26, 26, 194, 195, 195, 196, 197, 198, 199, 200, 201, 202, 202, 26,
+ 203, 203, 204, 205, 206, 207, 208, 208, 209, 210, 211, 212, 26, 26, 26, 26,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 26, 26, 26, 26,
+ 214, 214, 215, 216, 217, 218, 26, 219, 220, 221, 26, 26, 222, 223, 223, 223,
+ 224, 224, 224, 225, 226, 26, 227, 227, 228, 228, 229, 230, 231, 232, 26, 26,
+ 233, 233, 234, 26, 235, 235, 235, 235, 236, 236, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 237, 238, 238, 26, 26, 239, 240, 241, 242, 26, 243, 244, 245,
+ 246, 246, 246, 246, 247, 247, 248, 249, 250, 250, 251, 252, 253, 253, 253, 254,
+ 255, 255, 256, 26, 257, 258, 259, 259, 260, 260, 260, 260, 26, 26, 26, 26,
+ 261, 261, 261, 261, 262, 262, 262, 26, 26, 26, 26, 26, 263, 263, 263, 263,
+ 264, 264, 264, 265, 266, 266, 267, 26, 268, 268, 26, 26, 26, 26, 26, 26,
+ 269, 269, 270, 26, 26, 271, 271, 271, 272, 272, 272, 26, 26, 273, 273, 273,
+ 274, 274, 275, 276, 276, 277, 278, 278, 26, 26, 26, 26, 26, 26, 26, 26,
+ 279, 279, 279, 280, 281, 281, 26, 26, 282, 282, 282, 283, 283, 284, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 285, 26, 26, 26, 26, 26, 286, 287, 287,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 289, 289, 289, 289, 290, 290, 290, 290, 290, 290, 291, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 293, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
+ 294, 294, 294, 294, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 296, 297, 26, 26, 298, 299, 300, 300, 300, 300, 301, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 302, 302, 302, 26, 26, 26, 303, 303, 303, 303, 303, 26, 26, 304,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 306, 306, 306, 306, 306, 306, 306, 306, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 308, 308, 308, 308, 309, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 310, 310, 310, 310, 310, 310, 310, 310, 311, 312, 313, 314, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315, 26, 26, 26, 26, 26, 26, 26, 26,
+ 316, 316, 316, 316, 316, 317, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 318, 318, 318, 318, 318, 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, 319,
+ 320, 320, 321, 26, 26, 26, 26, 322, 323, 323, 323, 324, 26, 26, 26, 26,
+ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ 326, 326, 326, 326, 326, 327, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 328, 329, 26, 26, 26, 26, 26, 26, 330, 330, 331, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 332, 332, 26, 26, 26, 26, 26, 26, 26, 26,
+ 333, 333, 333, 333, 333, 333, 333, 26, 334, 334, 334, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 335, 336, 336, 26, 26, 337, 337, 338, 26, 26, 26, 26, 26,
+ 339, 339, 339, 339, 339, 339, 339, 339, 26, 26, 26, 26, 26, 26, 26, 26,
+ 340, 341, 342, 342, 342, 343, 343, 343, 344, 344, 344, 344, 344, 344, 344, 344,
+ 345, 345, 345, 345, 345, 345, 345, 345, 346, 346, 346, 346, 346, 346, 346, 346,
+ 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346,
+ 347, 347, 348, 349, 350, 350, 350, 350, 351, 351, 351, 351, 352, 352, 352, 352,
+ 353, 353, 353, 353, 353, 353, 353, 353, 354, 354, 354, 354, 354, 354, 354, 354,
+ 355, 355, 355, 356, 357, 357, 357, 357, 358, 358, 358, 358, 358, 358, 358, 358,
+ 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 26, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, 361, 361,
+ 361, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 363, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 365,
+ 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
+ 366, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 368, 26, 26, 26, 26, 26,
+ 369, 369, 369, 369, 26, 26, 26, 26, 370, 370, 370, 370, 370, 370, 370, 371,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
+ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
+ 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373,
+ 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373
+};
+
+static RE_UINT16 re_block_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 7, 7, 111, 136, 0, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+ 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+ 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
+ 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
+ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
+ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
+ 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
+ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
+ 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
+ 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
+ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
+ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
+ 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
+ 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
+ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
+ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
+ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
+ 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
+ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260,
+ 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
+ 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
+ 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
+ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
+ 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285,
+ 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285,
+ 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
+ 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
+ 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
+ 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
+ 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
+ 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
+ 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
+ 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
+ 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
+ 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308,
+ 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308
+};
+
+RE_UINT32 re_get_block(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_block_table_1[field_2];
+ v = re_block_table_2[(v << 5) | field_1];
+ v = re_block_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Canonical_Combining_Class. */
+static RE_UINT8 re_canonical_combining_class_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15,
+ 16, 9, 17, 18, 19, 20, 21, 22, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25,
+ 9, 9, 9, 9, 26, 9, 9, 9, 27, 9, 28, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_canonical_combining_class_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0,
+ 9, 0, 10, 11, 0, 0, 12, 13, 14, 15, 16, 0, 0, 0, 0, 17,
+ 18, 19, 20, 0, 0, 0, 21, 22, 0, 23, 24, 0, 0, 23, 25, 26,
+ 0, 23, 25, 0, 0, 23, 25, 0, 0, 23, 25, 0, 0, 0, 25, 0,
+ 0, 0, 27, 0, 0, 23, 25, 0, 0, 28, 25, 0, 0, 0, 29, 0,
+ 0, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 36, 37, 0, 38, 0,
+ 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 0, 0, 0, 0, 43, 0,
+ 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
+ 46, 0, 0, 47, 0, 48, 49, 0, 0, 50, 51, 52, 0, 53, 0, 54,
+ 0, 55, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 58, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
+ 70, 71, 0, 0, 0, 0, 51, 72, 0, 73, 74, 0, 0, 75, 76, 0,
+ 0, 0, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
+ 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 83, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0,
+ 0, 0, 70, 63, 0, 90, 0, 0, 91, 92, 0, 75, 0, 0, 93, 0,
+ 0, 94, 0, 0, 0, 0, 0, 95, 0, 96, 25, 97, 0, 0, 0, 0,
+ 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 63, 100, 0,
+ 0, 63, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
+ 0, 90, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 76,
+ 0, 42, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111,
+ 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 0, 0,
+ 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 118, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_canonical_combining_class_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 4, 3, 3, 3, 3,
+ 3, 5, 5, 3, 3, 3, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 6, 6, 6, 6, 6, 3, 3, 3, 3, 1, 1, 1,
+ 1, 1, 1, 1, 1, 7, 1, 3, 3, 3, 1, 1, 1, 3, 3, 0,
+ 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 3, 1, 8, 9, 9, 8,
+ 9, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 1, 1, 1, 1, 3, 1, 1, 1, 10, 3, 1, 1, 1, 1,
+ 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 1, 1, 10, 11, 1,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24, 0, 25,
+ 0, 26, 27, 0, 1, 3, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 28, 29, 30, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 28, 29,
+ 30, 34, 35, 1, 1, 3, 3, 1, 1, 1, 1, 1, 3, 1, 1, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 1, 1, 1, 3, 1, 0, 0, 1, 1, 0, 3, 1, 1, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 3, 1, 1, 3, 1, 1, 3, 3, 3, 1, 3, 3, 1, 3, 1,
+ 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 3, 1, 1, 3, 1, 1, 3, 1, 1, 1, 3, 3, 3,
+ 31, 32, 33, 1, 1, 1, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0,
+ 0, 1, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0,
+ 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 46, 47, 0, 48, 0, 0, 0, 0, 0, 47, 47, 47, 47, 0, 0,
+ 47, 0, 1, 1, 39, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 0, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 6, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3,
+ 1, 0, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 9, 49, 3,
+ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 11, 11, 3, 0, 1, 8, 3, 1, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 6, 6, 1, 1, 1, 1, 6, 6, 6, 1, 1, 0, 0, 0,
+ 0, 1, 0, 0, 0, 6, 6, 1, 3, 1, 6, 6, 3, 3, 3, 3,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 11, 2, 10, 51, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
+ 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 39,
+ 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 1, 3, 1, 3, 3, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 39, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0,
+ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 38, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 4, 4, 6, 6, 6, 0, 0, 0, 55, 4, 4,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 0, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_canonical_combining_class(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_canonical_combining_class_table_1[field_2];
+ v = re_canonical_combining_class_table_2[(v << 5) | field_1];
+ v = re_canonical_combining_class_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Cased. */
+static RE_UINT8 re_cased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 17, 2, 18, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_cased_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 5, 6, 4,
+ 4, 4, 4, 4, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 4, 15,
+ 4, 4, 4, 4, 16, 4, 4, 4, 4, 17, 18, 4, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 22,
+ 0, 0, 0, 0, 23, 21, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 22, 4, 24, 25, 4, 26, 27, 28,
+ 0, 0, 0, 29, 30, 0, 0, 0, 31, 32, 33, 4, 34, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 35, 4, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 37, 38, 4, 4, 4, 4, 39, 4, 40, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 41, 25, 0, 0, 0, 0, 42, 4, 4, 43, 4, 44, 45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 5, 23, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 4, 4, 48, 0, 0, 46, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 51, 4, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 52, 4, 53, 54, 55, 4, 56, 57, 58, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 59, 60, 5, 52, 52, 37, 37, 61, 61, 62, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 64, 64, 36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_cased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
+ 255, 255, 255, 255, 255, 255, 255, 247, 240, 255, 255, 255, 255, 255, 239, 255,
+ 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 207, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
+ 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 0, 255, 1, 0, 0,
+ 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
+ 63, 63, 255, 170, 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
+ 80, 189, 31, 242, 224, 67, 0, 0, 24, 0, 0, 0, 0, 0, 192, 255,
+ 255, 3, 0, 0, 255, 127, 255, 255, 255, 255, 255, 127, 31, 120, 12, 0,
+ 191, 32, 0, 0, 255, 63, 0, 0, 252, 255, 255, 255, 255, 120, 255, 255,
+ 252, 7, 0, 0, 0, 0, 96, 7, 0, 0, 255, 255, 127, 0, 248, 0,
+ 255, 255, 0, 0, 255, 255, 15, 255, 255, 255, 255, 15, 255, 255, 7, 0,
+ 255, 255, 223, 255, 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 253, 255, 255, 247, 255, 253, 255, 255, 247, 15, 0, 0, 15, 0, 0, 0,
+ 255, 3, 255, 255
+};
+
+RE_UINT32 re_get_cased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_cased_table_1[field_2];
+ v = re_cased_table_2[(v << 5) | field_1];
+ v = re_cased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Case_Ignorable. */
+static RE_UINT8 re_case_ignorable_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 14, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 16,
+ 17, 9, 18, 19, 20, 21, 22, 23, 9, 9, 9, 9, 9, 24, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25, 26, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 27,
+ 9, 9, 9, 9, 28, 9, 29, 9, 30, 9, 31, 9, 32, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 33, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_case_ignorable_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 6, 6, 6, 6, 7, 8, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 14,
+ 15, 0, 16, 17, 0, 0, 18, 19, 20, 5, 21, 0, 0, 22, 0, 23,
+ 24, 25, 26, 0, 0, 0, 27, 6, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 33, 37, 38, 36, 33, 39, 40, 32, 41, 42, 43, 44, 0, 45, 0,
+ 46, 47, 48, 43, 32, 41, 49, 43, 50, 51, 34, 43, 32, 0, 52, 0,
+ 0, 53, 54, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 62, 0,
+ 0, 63, 64, 65, 66, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 69, 69, 0, 70, 71, 0,
+ 72, 0, 73, 0, 74, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0,
+ 77, 0, 78, 79, 0, 80, 3, 0, 81, 82, 44, 83, 50, 84, 0, 85,
+ 0, 86, 0, 87, 0, 0, 88, 89, 0, 90, 6, 91, 92, 6, 6, 93,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, 96,
+ 97, 98, 0, 99, 100, 0, 5, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 6,
+ 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 107, 0, 0, 108, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 111, 0, 0, 112, 113, 0, 0, 114, 6, 50, 0, 17, 115, 0, 0, 57,
+ 116, 117, 0, 0, 0, 0, 118, 119, 0, 120, 121, 0, 28, 122, 105, 74,
+ 0, 123, 124, 125, 0, 126, 127, 128, 0, 0, 92, 129, 0, 0, 0, 130,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 131, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 133, 134, 0, 0, 0, 0, 135, 1, 2, 3, 17, 47, 0, 0, 136,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 138, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 140, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
+ 32, 143, 144, 135, 50, 145, 146, 0, 28, 147, 0, 148, 50, 149, 150, 0,
+ 0, 151, 0, 0, 0, 0, 135, 152, 50, 51, 3, 153, 0, 0, 0, 0,
+ 0, 143, 154, 0, 0, 155, 156, 0, 0, 0, 0, 0, 0, 157, 158, 0,
+ 0, 159, 3, 0, 0, 160, 0, 0, 67, 161, 0, 0, 0, 0, 0, 0,
+ 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 73, 0, 0, 0, 164, 3,
+ 165, 166, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 169, 0, 0, 131, 170, 0, 0, 0, 171, 172, 0, 173, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 176, 0, 177, 81, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 178, 0, 0, 179,
+ 0, 0, 0, 0, 180, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0,
+ 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 185, 6, 186, 187, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 189, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 193, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
+ 32, 6, 6, 6, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 133,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_case_ignorable_table_3[] = {
+ 0, 0, 0, 0, 128, 64, 0, 4, 0, 0, 0, 64, 1, 0, 0, 0,
+ 0, 161, 144, 1, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 48, 4,
+ 176, 0, 0, 0, 248, 3, 0, 0, 0, 0, 0, 130, 0, 0, 254, 255,
+ 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 16, 0, 63, 0, 255, 23,
+ 1, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 191, 255, 61, 0, 0,
+ 0, 128, 2, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 36,
+ 0, 0, 192, 255, 255, 63, 0, 0, 0, 0, 0, 14, 0, 0, 248, 255,
+ 7, 0, 0, 0, 0, 0, 0, 20, 254, 33, 254, 0, 12, 0, 2, 0,
+ 2, 0, 0, 0, 0, 0, 0, 16, 30, 32, 0, 0, 12, 0, 0, 64,
+ 6, 0, 0, 0, 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0,
+ 12, 0, 0, 252, 0, 0, 0, 144, 30, 32, 96, 0, 12, 0, 0, 0,
+ 4, 0, 0, 0, 1, 32, 0, 0, 17, 0, 0, 0, 0, 0, 0, 192,
+ 193, 61, 96, 0, 64, 48, 0, 0, 3, 0, 0, 0, 0, 0, 0, 24,
+ 0, 4, 92, 0, 0, 0, 242, 7, 192, 127, 0, 0, 0, 0, 242, 31,
+ 64, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
+ 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
+ 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
+ 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 143, 32,
+ 0, 120, 0, 0, 8, 0, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0,
+ 135, 1, 4, 14, 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159,
+ 128, 0, 255, 255, 15, 0, 0, 0, 0, 0, 208, 23, 0, 248, 15, 0,
+ 60, 59, 0, 0, 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 0, 63,
+ 0, 0, 247, 255, 253, 33, 16, 3, 0, 240, 255, 255, 255, 7, 0, 1,
+ 0, 0, 0, 248, 255, 255, 255, 251, 0, 0, 0, 160, 3, 224, 0, 224,
+ 0, 224, 0, 96, 0, 248, 0, 3, 144, 124, 0, 0, 223, 255, 2, 128,
+ 0, 0, 255, 31, 255, 255, 1, 0, 0, 0, 0, 48, 0, 128, 3, 0,
+ 0, 128, 0, 128, 0, 128, 0, 0, 32, 0, 0, 0, 0, 60, 62, 8,
+ 0, 0, 0, 126, 0, 0, 0, 112, 0, 0, 32, 0, 0, 16, 0, 0,
+ 0, 128, 247, 191, 0, 0, 0, 240, 0, 0, 3, 0, 0, 7, 0, 0,
+ 68, 8, 0, 0, 96, 16, 0, 0, 48, 0, 0, 0, 255, 255, 3, 128,
+ 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 200, 51, 0, 126, 102, 0,
+ 8, 16, 0, 0, 0, 0, 1, 16, 0, 0, 157, 193, 2, 0, 0, 32,
+ 0, 48, 88, 0, 0, 14, 0, 0, 32, 33, 0, 0, 0, 0, 252, 255,
+ 255, 255, 8, 0, 255, 255, 0, 0, 0, 0, 36, 0, 0, 0, 0, 128,
+ 8, 0, 0, 14, 0, 0, 0, 32, 0, 0, 192, 7, 110, 240, 0, 0,
+ 0, 0, 0, 135, 240, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 255,
+ 127, 0, 0, 0, 0, 0, 120, 38, 0, 32, 0, 0, 128, 239, 31, 0,
+ 0, 0, 8, 0, 0, 0, 192, 127, 0, 158, 0, 0, 0, 128, 211, 64,
+ 248, 7, 0, 0, 192, 31, 31, 0, 92, 0, 0, 64, 0, 0, 248, 133,
+ 13, 0, 0, 0, 0, 0, 60, 176, 1, 0, 0, 48, 0, 0, 248, 167,
+ 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6, 0, 0, 0, 88,
+ 0, 0, 240, 12, 254, 7, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14,
+ 0, 252, 127, 3, 0, 0, 127, 191, 255, 252, 109, 0, 0, 0, 126, 180,
+ 191, 0, 0, 0, 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 255, 1,
+ 0, 0, 31, 0, 0, 0, 127, 0, 0, 128, 255, 255, 27, 0, 0, 0,
+ 0, 0, 0, 96, 128, 3, 248, 255, 231, 15, 0, 0, 0, 60, 0, 0,
+ 28, 0, 0, 0, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
+ 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 0, 0, 255, 63,
+ 0, 240, 0, 0, 240, 15, 0, 0
+};
+
+RE_UINT32 re_get_case_ignorable(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_case_ignorable_table_1[field_2];
+ v = re_case_ignorable_table_2[(v << 5) | field_1];
+ v = re_case_ignorable_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Casefolded. */
+static RE_UINT8 re_changes_when_casefolded_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_casefolded_table_2[] = {
+ 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 20, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
+ 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 20, 36, 37, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 21, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 41, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 42, 0, 43, 4, 4, 4, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 50, 51, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 20, 20, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 20, 54, 0, 0, 0, 52, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 20, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 20, 57, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_casefolded_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
+ 85, 85, 85, 85, 85, 85, 85, 170, 170, 86, 85, 85, 85, 85, 85, 171,
+ 214, 206, 219, 177, 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85,
+ 85, 85, 5, 108, 122, 85, 0, 0, 32, 0, 0, 0, 0, 0, 69, 128,
+ 64, 215, 254, 255, 251, 15, 0, 0, 4, 128, 99, 85, 85, 85, 179, 230,
+ 255, 255, 255, 255, 255, 255, 0, 0, 1, 84, 85, 85, 171, 42, 85, 85,
+ 85, 85, 254, 255, 255, 255, 127, 0, 128, 0, 0, 0, 191, 32, 0, 0,
+ 0, 0, 0, 63, 255, 1, 255, 255, 255, 255, 255, 231, 85, 85, 21, 76,
+ 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170, 0, 255, 0, 0,
+ 255, 255, 156, 31, 156, 31, 0, 15, 0, 31, 156, 31, 64, 12, 4, 0,
+ 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192,
+ 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85,
+ 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85, 244, 2, 0, 0,
+ 0, 0, 255, 255, 127, 0, 248, 0, 255, 0, 0, 0, 255, 255, 15, 0,
+ 255, 255, 7, 0, 3, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_casefolded_table_1[field_2];
+ v = re_changes_when_casefolded_table_2[(v << 5) | field_1];
+ v = re_changes_when_casefolded_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Casemapped. */
+static RE_UINT8 re_changes_when_casemapped_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_casemapped_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 5, 4, 4, 6, 7, 8, 4,
+ 4, 9, 10, 11, 12, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
+ 4, 4, 4, 4, 19, 4, 4, 4, 4, 20, 21, 22, 23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 26,
+ 0, 0, 0, 0, 27, 25, 0, 0, 0, 0, 0, 28, 29, 0, 0, 0,
+ 4, 4, 4, 4, 30, 4, 4, 4, 26, 4, 31, 32, 4, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 29, 4, 37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 38, 4, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 40, 41, 42, 4, 4, 4, 43, 4, 44, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 40, 50, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 4, 4, 55, 0, 0, 53, 56, 46, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 57, 4, 57, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 58, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_casemapped_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
+ 255, 255, 255, 255, 255, 255, 255, 254, 255, 223, 255, 247, 255, 243, 255, 179,
+ 240, 255, 255, 255, 253, 255, 15, 252, 255, 255, 223, 26, 107, 159, 38, 32,
+ 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 207, 184, 64, 215, 255, 255,
+ 251, 255, 255, 255, 255, 255, 227, 255, 255, 255, 191, 239, 3, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 0, 254, 255, 255, 255, 255, 0, 0, 0,
+ 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
+ 0, 0, 0, 34, 0, 64, 0, 0, 255, 255, 255, 79, 63, 63, 255, 170,
+ 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
+ 64, 12, 4, 0, 24, 0, 0, 0, 0, 0, 192, 255, 255, 3, 0, 0,
+ 255, 127, 255, 255, 255, 255, 255, 127, 255, 255, 109, 192, 15, 120, 12, 0,
+ 191, 32, 0, 0, 255, 63, 0, 0, 255, 255, 255, 15, 252, 255, 252, 255,
+ 255, 255, 0, 254, 255, 56, 223, 255, 252, 7, 0, 0, 0, 0, 96, 0,
+ 0, 0, 8, 0, 0, 0, 255, 255, 127, 0, 248, 0, 255, 255, 0, 0,
+ 255, 255, 15, 255, 255, 255, 7, 0, 15, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_casemapped_table_1[field_2];
+ v = re_changes_when_casemapped_table_2[(v << 5) | field_1];
+ v = re_changes_when_casemapped_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Lowercased. */
+static RE_UINT8 re_changes_when_lowercased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
+ 2, 10, 2, 11, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_lowercased_table_2[] = {
+ 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
+ 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
+ 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
+ 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 30, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 19, 37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 39, 0, 40, 3, 3, 3, 41, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 42, 43, 0, 0, 0, 0, 44, 3, 45, 46, 47, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 18, 50, 0, 0, 0, 26, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_lowercased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
+ 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
+ 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85, 85, 85, 5, 108,
+ 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
+ 0, 128, 0, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
+ 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
+ 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
+ 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
+ 0, 255, 0, 0, 0, 255, 0, 31, 0, 31, 0, 15, 0, 31, 0, 31,
+ 64, 12, 4, 0, 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0,
+ 157, 234, 37, 192, 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5,
+ 84, 85, 84, 85, 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85,
+ 244, 2, 0, 0, 0, 0, 32, 0, 255, 0, 0, 0, 255, 255, 15, 0,
+ 255, 255, 7, 0, 3, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_lowercased_table_1[field_2];
+ v = re_changes_when_lowercased_table_2[(v << 5) | field_1];
+ v = re_changes_when_lowercased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Titlecased. */
+static RE_UINT8 re_changes_when_titlecased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_titlecased_table_2[] = {
+ 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
+ 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
+ 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0,
+ 5, 5, 5, 5, 34, 5, 5, 5, 35, 36, 37, 38, 36, 39, 40, 41,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 23, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 23, 44, 45, 5, 5, 5, 46, 24, 47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 48, 49, 0, 0, 0, 0, 50, 5, 51, 52, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 23, 24, 24, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 58, 59, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_titlecased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
+ 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
+ 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 208, 86, 85, 181,
+ 170, 170, 43, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
+ 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
+ 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
+ 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
+ 254, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 63, 255, 1, 0, 0,
+ 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15, 255, 0, 63, 0,
+ 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64,
+ 220, 0, 207, 0, 255, 0, 220, 0, 16, 0, 0, 0, 255, 3, 0, 0,
+ 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0, 191, 32, 0, 0,
+ 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170, 170, 170, 0, 148,
+ 170, 16, 154, 170, 170, 2, 160, 170, 8, 5, 0, 0, 0, 0, 64, 0,
+ 0, 0, 8, 0, 127, 0, 248, 0, 0, 255, 255, 255, 255, 255, 0, 0,
+ 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0, 252, 255, 255, 255,
+ 15, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_titlecased_table_1[field_2];
+ v = re_changes_when_titlecased_table_2[(v << 5) | field_1];
+ v = re_changes_when_titlecased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Uppercased. */
+static RE_UINT8 re_changes_when_uppercased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_uppercased_table_2[] = {
+ 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
+ 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
+ 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, 0,
+ 5, 5, 5, 5, 35, 5, 5, 5, 36, 37, 38, 39, 24, 40, 41, 42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 23, 43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 23, 45, 46, 5, 5, 5, 47, 24, 48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 49, 50, 0, 0, 0, 0, 51, 5, 52, 53, 54, 55, 56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 23, 24, 24, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 59, 60, 0, 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_uppercased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
+ 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
+ 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 96, 91, 85, 181,
+ 170, 170, 45, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
+ 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
+ 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
+ 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
+ 254, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 231, 0, 0, 0, 63,
+ 255, 1, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15,
+ 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63,
+ 255, 255, 223, 80, 220, 16, 207, 0, 255, 0, 220, 16, 16, 0, 0, 0,
+ 255, 3, 0, 0, 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0,
+ 191, 32, 0, 0, 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170,
+ 170, 170, 0, 148, 170, 16, 154, 170, 170, 2, 160, 170, 8, 5, 0, 0,
+ 0, 0, 64, 0, 0, 0, 8, 0, 127, 0, 248, 0, 0, 255, 255, 255,
+ 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0,
+ 252, 255, 255, 255, 15, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_uppercased_table_1[field_2];
+ v = re_changes_when_uppercased_table_2[(v << 5) | field_1];
+ v = re_changes_when_uppercased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Dash. */
+static RE_UINT8 re_dash_table_1[] = {
+ 0, 1, 2, 2, 2, 3, 4, 2, 5, 2, 2, 6, 7, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8,
+ 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_dash_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 16, 17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_dash_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 4, 0, 0, 0, 0, 0, 64,
+ 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 8, 0,
+ 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 4, 0, 0, 0, 128, 4,
+ 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 6, 0,
+ 0, 0, 0, 1, 8, 0, 0, 0
+};
+
+RE_UINT32 re_get_dash(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_dash_table_1[field_2];
+ v = re_dash_table_2[(v << 5) | field_1];
+ v = re_dash_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Decomposition_Type. */
+static RE_UINT8 re_decomposition_type_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 17, 18,
+ 5, 5, 5, 5, 19, 20, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 22, 23, 5, 5, 5, 5, 5, 24, 25, 5, 26, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+static RE_UINT8 re_decomposition_type_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
+ 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
+ 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0,
+ 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0,
+ 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 42, 0,
+ 0, 43, 0, 0, 0, 43, 44, 0, 45, 0, 46, 47, 48, 49, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
+ 60, 60, 60, 60, 61, 60, 60, 62, 63, 60, 64, 65, 60, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 0, 0, 75, 76, 77, 78, 79, 80, 81, 0,
+ 82, 83, 84, 85, 86, 87, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 90, 78, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 94, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
+ 0, 0, 0, 0, 99, 0, 0, 43, 78, 78, 78, 78, 78, 78, 100, 0,
+ 101, 102, 103, 104, 105, 103, 104, 106, 0, 107, 78, 78, 108, 0, 0, 0,
+ 109, 78, 110, 111, 92, 92, 112, 113, 114, 114, 115, 116, 114, 114, 114, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 123, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, 60,
+ 124, 125, 60, 126, 60, 60, 62, 0, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 135, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 158, 159, 160, 161, 162, 163,
+ 0, 0, 0, 0, 164, 165, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 172, 0, 173, 174, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 175, 175, 176, 175, 177, 178, 179, 175, 180, 181, 182, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 183, 175, 175, 175, 175, 175, 175, 175, 175, 184, 175,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 179, 185, 186, 187, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, 193, 194, 0, 0, 0,
+ 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_decomposition_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 2,
+ 0, 0, 3, 3, 2, 2, 0, 0, 2, 3, 3, 0, 4, 4, 4, 0,
+ 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 0, 2, 2, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 2,
+ 2, 0, 0, 5, 5, 5, 5, 5, 5, 2, 0, 0, 5, 5, 5, 5,
+ 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 2, 2, 2, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5,
+ 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0,
+ 2, 2, 2, 5, 5, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 5, 5, 2, 5, 2, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0,
+ 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 2, 5, 2,
+ 2, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0,
+ 5, 5, 2, 2, 2, 2, 2, 1, 2, 2, 2, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 2, 0, 0, 7, 7, 7, 7, 7, 0, 0,
+ 3, 2, 3, 0, 7, 0, 5, 0, 7, 0, 5, 5, 7, 7, 0, 7,
+ 7, 7, 0, 7, 7, 2, 2, 2, 2, 7, 0, 2, 7, 7, 7, 7,
+ 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0, 2, 2, 0, 2,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 0, 5, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0,
+ 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0,
+ 5, 0, 5, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 2, 0, 5, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 5, 5, 5, 5, 0, 0, 0, 5, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
+ 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
+ 2, 2, 2, 2, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 5, 0, 5, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 5, 0, 5,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 0,
+ 5, 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
+ 12, 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 14, 15, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
+ 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 12, 13, 14, 15, 12, 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 12, 13, 14, 15, 12, 13, 12, 13, 12, 13, 12, 12, 13,
+ 12, 13, 12, 13, 12, 13, 14, 15, 14, 15, 12, 13, 12, 13, 12, 13,
+ 12, 13, 12, 13, 12, 13, 12, 13, 14, 12, 13, 14, 12, 13, 14, 15,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
+ 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 13, 12, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 13, 14, 14, 14, 14, 14, 14, 13, 14, 13, 13, 14, 14, 13, 13,
+ 14, 14, 13, 14, 13, 14, 13, 13, 14, 13, 13, 14, 13, 14, 13, 13,
+ 14, 13, 14, 14, 13, 13, 13, 14, 13, 13, 13, 13, 13, 14, 13, 13,
+ 13, 13, 13, 14, 13, 13, 14, 13, 14, 14, 14, 13, 14, 14, 14, 14,
+ 0, 0, 14, 14, 14, 14, 13, 13, 14, 13, 13, 13, 13, 14, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 14, 14, 13, 13, 14, 13, 14, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 0, 10, 10, 2, 2, 2, 2, 2, 2, 2,
+ 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0,
+ 12, 15, 12, 0, 12, 0, 12, 15, 12, 15, 12, 15, 12, 15, 12, 15,
+ 12, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 14, 15, 12, 13, 12,
+ 13, 14, 15, 12, 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 12, 13, 12, 13, 12,
+ 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 12,
+ 13, 12, 13, 14, 15, 12, 13, 12, 13, 12, 13, 12, 13, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 0, 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17, 17, 17,
+ 0, 0, 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 0, 0, 7, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 0, 0, 7, 7, 7,
+ 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 0,
+ 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 7, 7, 0, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 0, 7, 0, 0, 0, 0,
+ 0, 0, 7, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 7, 7,
+ 0, 7, 7, 0, 7, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7,
+ 0, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7,
+ 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_decomposition_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_decomposition_type_table_1[field_2];
+ v = re_decomposition_type_table_2[(v << 5) | field_1];
+ v = re_decomposition_type_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Default_Ignorable_Code_Point. */
+static RE_UINT8 re_default_ignorable_code_point_table_1[] = {
+ 0, 1, 2, 2, 3, 4, 5, 2, 6, 2, 2, 2, 7, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
+ 2, 2, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 11, 11, 11, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_default_ignorable_code_point_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 12,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
+};
+
+static RE_UINT8 re_default_ignorable_code_point_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 128, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 128, 1, 0, 0, 0, 0, 0, 48, 0, 0, 120, 0, 0,
+ 0, 248, 0, 0, 0, 124, 0, 0, 255, 255, 0, 0, 16, 0, 0, 0,
+ 0, 0, 255, 1, 15, 0, 0, 0, 0, 0, 248, 7, 255, 255, 255, 255
+};
+
+RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_default_ignorable_code_point_table_1[field_2];
+ v = re_default_ignorable_code_point_table_2[(v << 5) | field_1];
+ v = re_default_ignorable_code_point_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Deprecated. */
+RE_UINT32 re_get_deprecated(RE_UINT32 codepoint) {
+ if (codepoint == 0x0149)
+ return 1;
+ if (codepoint == 0x0673)
+ return 1;
+ if (codepoint == 0x0F77)
+ return 1;
+ if (codepoint == 0x0F79)
+ return 1;
+ if (0x17A3 <= codepoint && codepoint <= 0x17A4)
+ return 1;
+ if (0x206A <= codepoint && codepoint <= 0x206F)
+ return 1;
+ if (0x2329 <= codepoint && codepoint <= 0x232A)
+ return 1;
+ if (codepoint == 0x0E0001)
+ return 1;
+
+ return 0;
+}
+
+/* Diacritic. */
+static RE_UINT8 re_diacritic_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 12, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 14,
+ 15, 8, 16, 17, 18, 19, 20, 21, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 22, 23, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 24, 8, 8, 8, 25, 8, 26, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
+};
+
+static RE_UINT8 re_diacritic_table_2[] = {
+ 0, 0, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 5, 5, 5, 5, 6, 7, 8, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 0,
+ 0, 0, 14, 0, 0, 0, 15, 16, 0, 4, 17, 0, 0, 18, 0, 19,
+ 20, 0, 0, 0, 0, 0, 0, 21, 0, 22, 23, 24, 0, 22, 25, 0,
+ 0, 22, 25, 0, 0, 22, 25, 26, 0, 22, 27, 0, 0, 0, 25, 0,
+ 0, 0, 25, 0, 0, 22, 25, 0, 0, 28, 25, 0, 0, 0, 29, 0,
+ 0, 0, 30, 0, 0, 31, 32, 0, 20, 33, 0, 0, 34, 0, 35, 0,
+ 0, 36, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 41, 0, 42, 0, 0, 0, 43, 44, 45, 0, 46, 0, 0,
+ 0, 47, 0, 48, 0, 0, 4, 49, 0, 50, 5, 17, 0, 0, 51, 52,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 58, 0, 0, 59, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 60, 61, 0, 0, 62, 5, 63, 0, 0, 64, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 44, 65, 0, 66, 67, 0, 0, 67, 2, 68,
+ 0, 0, 0, 69, 0, 15, 70, 71, 0, 0, 72, 73, 0, 0, 0, 74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 75, 0, 0, 0, 0, 0, 0, 0, 1, 2, 76, 77, 0, 0, 78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 67, 0, 0, 83, 0,
+ 0, 84, 0, 0, 0, 0, 0, 85, 0, 22, 25, 86, 0, 0, 0, 0,
+ 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 15, 2, 0,
+ 0, 15, 0, 0, 0, 47, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0,
+ 0, 81, 0, 0, 0, 0, 0, 0, 0, 90, 78, 0, 0, 0, 0, 2,
+ 0, 43, 91, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 101, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_diacritic_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 129, 144, 1,
+ 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 224, 7, 0, 48, 4,
+ 48, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 2, 0, 0, 254, 255,
+ 251, 255, 255, 191, 22, 0, 0, 0, 0, 248, 135, 1, 0, 0, 0, 128,
+ 97, 28, 0, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 0,
+ 0, 0, 0, 3, 248, 255, 255, 127, 0, 0, 0, 16, 0, 32, 30, 0,
+ 0, 0, 2, 0, 0, 32, 0, 0, 0, 0, 0, 224, 0, 32, 32, 0,
+ 0, 0, 0, 24, 0, 4, 0, 0, 128, 95, 0, 0, 0, 0, 0, 4,
+ 0, 31, 0, 0, 0, 0, 160, 194, 220, 0, 0, 0, 64, 0, 0, 0,
+ 0, 0, 128, 6, 24, 62, 0, 0, 128, 191, 0, 12, 0, 254, 15, 32,
+ 0, 0, 0, 14, 0, 0, 224, 159, 0, 0, 255, 63, 0, 0, 16, 0,
+ 16, 0, 0, 0, 0, 248, 15, 0, 0, 12, 0, 0, 0, 0, 192, 0,
+ 0, 0, 0, 63, 255, 33, 144, 3, 0, 240, 255, 255, 240, 255, 0, 0,
+ 0, 0, 224, 227, 0, 0, 0, 160, 3, 224, 0, 224, 0, 224, 0, 96,
+ 0, 128, 3, 0, 0, 128, 0, 0, 0, 252, 0, 0, 0, 0, 0, 30,
+ 0, 128, 0, 176, 0, 0, 0, 48, 0, 0, 3, 0, 3, 0, 0, 0,
+ 0, 7, 0, 0, 255, 255, 3, 0, 0, 120, 0, 0, 0, 0, 8, 0,
+ 32, 0, 0, 0, 0, 0, 0, 56, 7, 0, 0, 0, 0, 0, 64, 0,
+ 0, 0, 0, 248, 0, 14, 0, 0, 0, 48, 0, 0, 255, 255, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 192, 8, 0, 0, 0, 96, 0, 0, 0,
+ 252, 0, 0, 0, 0, 0, 0, 6, 0, 0, 24, 0, 1, 28, 0, 0,
+ 0, 0, 96, 0, 0, 6, 0, 0, 192, 31, 31, 0, 68, 0, 0, 0,
+ 12, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 96, 128, 0, 0, 0,
+ 52, 0, 0, 0, 0, 0, 128, 0, 0, 0, 31, 0, 0, 0, 127, 0,
+ 0, 128, 255, 255, 128, 227, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0,
+ 0, 240, 0, 0, 112, 7, 0, 0
+};
+
+RE_UINT32 re_get_diacritic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_diacritic_table_1[field_2];
+ v = re_diacritic_table_2[(v << 5) | field_1];
+ v = re_diacritic_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* East_Asian_Width. */
+static RE_UINT8 re_east_asian_width_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 2, 4, 5, 6, 7, 8, 9, 9, 9,
+ 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 12, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 13, 2, 2, 14, 14, 14, 14, 14, 14, 15, 16,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 9, 9, 9, 9,
+ 9, 18, 9, 19, 2, 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 22, 23, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 26,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 26
+};
+
+static RE_UINT8 re_east_asian_width_table_2[] = {
+ 0, 1, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 0, 0, 10, 0,
+ 0, 0, 11, 12, 0, 0, 13, 0, 14, 14, 14, 15, 16, 17, 18, 0,
+ 19, 14, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 23, 0, 24, 25, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 0, 41, 42, 0, 0, 0, 0, 0, 43,
+ 0, 0, 0, 14, 14, 14, 14, 44, 14, 14, 45, 46, 47, 48, 49, 50,
+ 51, 0, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 21, 21, 69, 21, 21, 21, 21, 21, 21, 70, 71,
+ 72, 73, 74, 21, 75, 21, 21, 21, 76, 77, 21, 21, 78, 21, 21, 79,
+ 73, 21, 80, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 81, 21, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 84, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 86, 87, 88, 0, 0, 0, 0, 89, 90, 90, 91, 92, 93, 94, 95,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 97,
+ 21, 21, 21, 21, 21, 21, 70, 0, 98, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 73, 0, 99, 100, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 102, 0, 0, 0, 0, 0, 103, 0, 104, 105, 14, 106, 107, 108, 0, 0,
+ 109, 101, 110, 111, 0, 0, 0, 0, 21, 112, 21, 113, 69, 21, 114, 115,
+ 21, 73, 116, 21, 21, 21, 21, 117, 21, 118, 119, 120, 121, 102, 0, 122,
+ 21, 21, 123, 0, 21, 21, 124, 125, 0, 0, 0, 0, 0, 0, 0, 126,
+ 0, 0, 0, 0, 0, 0, 0, 0, 127, 128, 129, 130, 21, 21, 131, 21,
+ 0, 0, 0, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 118,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 136
+};
+
+static RE_UINT8 re_east_asian_width_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 2, 1, 1, 2, 1, 1, 2, 2, 0, 2, 0, 1, 2, 2, 1,
+ 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 2,
+ 2, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 2, 2, 0, 0,
+ 2, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2,
+ 2, 2, 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 0,
+ 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 2, 0, 2, 2, 2, 0, 2, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 2, 2, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0,
+ 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 2, 2, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 2,
+ 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2,
+ 2, 0, 0, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0,
+ 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0,
+ 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0,
+ 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 2, 2,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2,
+ 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0,
+ 2, 0, 2, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2,
+ 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 2, 0, 0, 0, 0, 2, 2, 3, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0,
+ 0, 0, 0, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+ 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4,
+ 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 4, 4, 4, 4, 4, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 3, 3, 3, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0
+};
+
+RE_UINT32 re_get_east_asian_width(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_east_asian_width_table_1[field_2];
+ v = re_east_asian_width_table_2[(v << 5) | field_1];
+ v = re_east_asian_width_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Emoji. */
+static RE_UINT8 re_emoji_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_emoji_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 10, 11,
+ 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0,
+ 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 36, 37, 0, 0, 38,
+ 39, 40, 41, 0, 0, 0, 0, 0, 42, 43, 42, 42, 44, 42, 42, 45,
+ 42, 42, 42, 42, 42, 42, 42, 46, 42, 47, 48, 49, 50, 51, 52, 53,
+ 42, 42, 54, 0, 42, 42, 55, 56, 0, 0, 0, 0, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, 42, 42, 62, 42,
+ 0, 0, 0, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_table_3[] = {
+ 0, 0, 0, 0, 8, 4, 255, 3, 0, 66, 0, 0, 0, 0, 0, 16,
+ 0, 2, 0, 0, 4, 0, 0, 2, 0, 0, 240, 3, 0, 6, 0, 0,
+ 0, 0, 0, 12, 0, 1, 0, 0, 0, 128, 0, 0, 0, 254, 15, 7,
+ 4, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120,
+ 31, 64, 50, 33, 77, 196, 0, 7, 5, 255, 15, 128, 105, 1, 0, 200,
+ 0, 0, 252, 26, 131, 12, 3, 96, 48, 193, 26, 0, 0, 6, 191, 39,
+ 36, 191, 84, 32, 2, 1, 24, 0, 144, 80, 184, 0, 24, 0, 0, 0,
+ 0, 0, 224, 0, 2, 0, 1, 128, 0, 0, 48, 0, 224, 0, 0, 24,
+ 0, 0, 33, 0, 0, 0, 1, 32, 0, 0, 128, 2, 16, 0, 0, 0,
+ 0, 0, 3, 192, 0, 64, 254, 7, 192, 255, 255, 255, 6, 0, 0, 4,
+ 0, 128, 252, 7, 0, 0, 3, 0, 255, 255, 255, 255, 243, 255, 255, 255,
+ 255, 255, 207, 206, 255, 255, 185, 255, 255, 255, 255, 191, 255, 255, 255, 63,
+ 0, 126, 255, 255, 255, 128, 249, 7, 128, 60, 97, 0, 48, 1, 6, 16,
+ 28, 0, 14, 112, 10, 129, 8, 252, 255, 255, 0, 0, 63, 248, 231, 0,
+ 63, 26, 249, 31, 255, 15, 0, 0, 0, 240, 255, 255, 255, 255, 255, 247,
+ 191, 255, 255, 255, 255, 255, 255, 253, 255, 239, 255, 255, 0, 0, 31, 7,
+ 127, 0, 255, 255, 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_emoji(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_table_1[field_2];
+ v = re_emoji_table_2[(v << 5) | field_1];
+ v = re_emoji_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Emoji_Component. */
+static RE_UINT8 re_emoji_component_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_emoji_component_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_component_table_3[] = {
+ 0, 0, 0, 0, 8, 4, 255, 3, 0, 32, 0, 0, 8, 0, 0, 0,
+ 0, 128, 0, 0, 192, 255, 255, 255, 0, 0, 0, 248, 0, 0, 15, 0,
+ 255, 255, 255, 255
+};
+
+RE_UINT32 re_get_emoji_component(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_component_table_1[field_2];
+ v = re_emoji_component_table_2[(v << 5) | field_1];
+ v = re_emoji_component_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Emoji_Modifier. */
+RE_UINT32 re_get_emoji_modifier(RE_UINT32 codepoint) {
+ if (0x01F3FB <= codepoint && codepoint <= 0x01F3FF)
+ return 1;
+
+ return 0;
+}
+
+/* Emoji_Modifier_Base. */
+static RE_UINT8 re_emoji_modifier_base_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_modifier_base_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0,
+ 0, 0, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 11, 0, 0, 0,
+ 0, 0, 12, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 17, 0, 18, 19, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_modifier_base_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 2, 0, 60, 0, 0,
+ 32, 0, 0, 0, 156, 28, 0, 0, 204, 255, 1, 0, 192, 255, 255, 17,
+ 238, 128, 2, 0, 0, 4, 0, 0, 0, 0, 48, 4, 0, 0, 97, 0,
+ 224, 248, 0, 0, 8, 0, 112, 0, 1, 16, 0, 0, 0, 144, 0, 255,
+ 64, 0, 255, 115, 0, 0, 128, 0, 0, 0, 96, 11, 0, 224, 254, 63
+};
+
+RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_modifier_base_table_1[field_2];
+ v = re_emoji_modifier_base_table_2[(v << 5) | field_1];
+ v = re_emoji_modifier_base_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Emoji_Presentation. */
+static RE_UINT8 re_emoji_presentation_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_presentation_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 14, 15, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0,
+ 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 21,
+ 22, 23, 24, 0, 0, 0, 0, 0, 25, 26, 25, 27, 28, 25, 29, 30,
+ 25, 31, 32, 25, 25, 25, 25, 33, 25, 34, 35, 36, 37, 18, 0, 38,
+ 25, 25, 39, 0, 25, 25, 40, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 46, 25, 25, 47, 25,
+ 0, 0, 0, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_presentation_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 12, 0, 30, 9, 0, 0, 0, 0, 96,
+ 0, 0, 48, 0, 0, 255, 15, 0, 0, 0, 0, 128, 0, 0, 8, 0,
+ 2, 12, 0, 96, 48, 64, 16, 0, 0, 4, 44, 36, 32, 12, 0, 0,
+ 0, 1, 0, 0, 0, 80, 184, 0, 0, 0, 224, 0, 0, 0, 1, 128,
+ 0, 0, 0, 24, 0, 0, 33, 0, 16, 0, 0, 0, 0, 128, 0, 0,
+ 0, 64, 254, 7, 192, 255, 255, 255, 2, 0, 0, 4, 0, 128, 124, 7,
+ 0, 0, 3, 0, 255, 255, 255, 255, 1, 224, 191, 255, 255, 255, 255, 223,
+ 255, 255, 15, 0, 255, 135, 15, 0, 255, 255, 17, 255, 255, 255, 255, 127,
+ 253, 255, 255, 255, 255, 255, 255, 159, 255, 255, 255, 63, 0, 120, 255, 255,
+ 255, 0, 0, 4, 0, 0, 96, 0, 0, 0, 0, 248, 255, 255, 0, 0,
+ 63, 16, 231, 0, 0, 24, 240, 31, 255, 15, 0, 0, 0, 240, 255, 255,
+ 255, 255, 255, 247, 191, 255, 255, 255, 255, 255, 255, 253, 255, 239, 255, 255,
+ 0, 0, 31, 7, 127, 0, 255, 255, 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_emoji_presentation(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_presentation_table_1[field_2];
+ v = re_emoji_presentation_table_2[(v << 5) | field_1];
+ v = re_emoji_presentation_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Extended_Pictographic. */
+static RE_UINT8 re_extended_pictographic_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_extended_pictographic_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 8, 0, 9, 10,
+ 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 13, 14,
+ 15, 16, 16, 16, 17, 16, 16, 16, 18, 19, 20, 21, 22, 23, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0,
+ 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 29, 9, 0, 30, 31, 32, 16, 33,
+ 34, 35, 36, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 37,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 38, 39, 16, 16, 16, 16, 16,
+ 16, 16, 40, 0, 16, 16, 16, 16, 0, 0, 0, 41, 0, 0, 42, 16,
+ 43, 0, 44, 0, 45, 46, 16, 16, 47, 48, 49, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 38
+};
+
+static RE_UINT8 re_extended_pictographic_table_3[] = {
+ 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0,
+ 4, 0, 0, 2, 0, 0, 240, 3, 0, 6, 0, 0, 0, 0, 0, 12,
+ 0, 1, 0, 0, 0, 128, 0, 0, 0, 254, 15, 7, 4, 0, 0, 0,
+ 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120, 191, 255, 247, 255,
+ 255, 255, 255, 255, 63, 0, 255, 255, 63, 255, 87, 32, 2, 1, 24, 0,
+ 144, 80, 184, 0, 248, 0, 0, 0, 0, 0, 224, 0, 2, 0, 1, 128,
+ 0, 0, 48, 0, 224, 0, 0, 24, 0, 0, 33, 0, 0, 0, 1, 32,
+ 0, 0, 128, 2, 0, 224, 0, 0, 0, 240, 3, 192, 0, 64, 254, 7,
+ 0, 224, 255, 255, 63, 0, 0, 0, 254, 255, 0, 4, 0, 128, 252, 247,
+ 0, 254, 255, 255, 255, 255, 255, 7, 255, 255, 255, 63, 192, 255, 255, 255,
+ 255, 255, 0, 0, 0, 0, 240, 255, 0, 0, 224, 255, 0, 240, 0, 0,
+ 0, 255, 0, 252, 0, 255, 0, 0, 0, 192, 255, 255, 0, 240, 255, 255,
+ 255, 255, 255, 247, 191, 255, 255, 255
+};
+
+RE_UINT32 re_get_extended_pictographic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_extended_pictographic_table_1[field_2];
+ v = re_extended_pictographic_table_2[(v << 5) | field_1];
+ v = re_extended_pictographic_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Extender. */
+static RE_UINT8 re_extender_table_1[] = {
+ 0, 1, 2, 3, 4, 4, 5, 6, 4, 4, 4, 4, 7, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 10, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 11,
+ 4, 4, 4, 4, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, 16, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 17, 4, 18, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
+};
+
+static RE_UINT8 re_extender_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 13, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 6,
+ 0, 0, 0, 18, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_extender_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 3, 0, 1, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 32, 0, 64, 0, 0, 0, 0, 4, 0, 0,
+ 8, 0, 0, 0, 128, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 8,
+ 32, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 96, 0, 0, 0, 112,
+ 0, 16, 0, 0, 0, 128, 0, 0, 0, 0, 1, 0, 0, 0, 0, 32,
+ 0, 0, 24, 0, 192, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 48, 112, 0, 0, 0
+};
+
+RE_UINT32 re_get_extender(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_extender_table_1[field_2];
+ v = re_extender_table_2[(v << 5) | field_1];
+ v = re_extender_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* General_Category. */
+static RE_UINT8 re_general_category_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 19, 20, 20, 21, 21, 21, 21, 21, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 34, 13, 35, 34, 34,
+ 34, 36, 34, 34, 34, 34, 34, 34, 34, 34, 37, 38, 13, 13, 13, 13,
+ 13, 39, 13, 40, 34, 34, 34, 34, 34, 34, 34, 34, 41, 34, 34, 42,
+ 34, 34, 34, 34, 43, 44, 45, 34, 46, 34, 47, 48, 49, 50, 51, 34,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 52, 13, 13, 13, 53, 54, 13,
+ 13, 13, 13, 55, 13, 13, 13, 13, 13, 13, 56, 34, 34, 34, 57, 34,
+ 13, 13, 13, 13, 58, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 59, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 60,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 60
+};
+
+static RE_UINT16 re_general_category_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 7, 15, 16, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 25, 26, 27,
+ 28, 29, 17, 7, 30, 7, 31, 7, 7, 32, 33, 17, 34, 35, 36, 37,
+ 38, 39, 40, 41, 39, 39, 42, 43, 44, 45, 46, 39, 39, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 54, 101, 102, 103, 54, 104, 105, 106, 107, 108, 109, 110, 54,
+ 39, 111, 112, 113, 114, 28, 115, 116, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 117, 39, 118, 119, 120, 39, 121, 39, 122, 123, 124, 28, 28, 125,
+ 126, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 127, 128, 39, 39, 129, 130, 131, 132, 133, 39, 134, 135, 136,
+ 137, 39, 138, 139, 140, 141, 39, 142, 143, 144, 145, 146, 39, 147, 148, 149,
+ 150, 39, 151, 152, 153, 154, 155, 54, 156, 157, 158, 159, 160, 161, 39, 162,
+ 39, 163, 164, 165, 166, 167, 168, 169, 17, 170, 171, 172, 173, 171, 22, 174,
+ 7, 7, 7, 7, 175, 7, 7, 7, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 200, 200, 200, 200, 200, 200, 200, 201, 202, 149, 203, 204, 205, 206, 207,
+ 149, 208, 209, 210, 211, 149, 149, 212, 149, 149, 149, 149, 149, 213, 214, 215,
+ 149, 149, 149, 216, 149, 149, 149, 149, 149, 149, 149, 217, 218, 149, 219, 220,
+ 149, 149, 149, 149, 149, 149, 149, 149, 200, 200, 200, 200, 221, 200, 222, 223,
+ 200, 200, 200, 200, 200, 200, 200, 200, 149, 224, 225, 226, 227, 149, 149, 149,
+ 28, 228, 229, 230, 7, 7, 7, 231, 17, 232, 39, 233, 234, 235, 235, 22,
+ 236, 237, 238, 54, 239, 149, 149, 240, 149, 149, 149, 149, 149, 149, 241, 242,
+ 243, 244, 98, 39, 245, 126, 39, 246, 247, 248, 39, 39, 249, 39, 149, 250,
+ 251, 252, 253, 149, 252, 254, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 149, 149,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 255,
+ 256, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 257, 149, 258, 165, 39, 39, 39, 39, 39, 39, 39, 39,
+ 259, 260, 7, 261, 262, 39, 39, 263, 264, 265, 7, 266, 267, 268, 269, 270,
+ 271, 272, 39, 273, 274, 275, 276, 277, 48, 278, 279, 255, 58, 280, 281, 282,
+ 39, 283, 284, 285, 39, 286, 287, 288, 289, 290, 291, 292, 17, 17, 39, 293,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 294, 295, 296,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 299, 39, 39, 300, 54, 301, 302, 303, 39, 39, 304, 305, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 306, 307, 39, 308, 39, 309, 310,
+ 311, 312, 313, 314, 39, 39, 39, 315, 316, 2, 317, 318, 319, 143, 320, 321,
+ 322, 323, 324, 54, 39, 39, 39, 325, 326, 327, 195, 328, 329, 330, 331, 332,
+ 54, 54, 54, 54, 255, 39, 333, 334, 39, 335, 336, 337, 338, 39, 339, 54,
+ 28, 340, 341, 39, 342, 343, 344, 345, 39, 346, 39, 347, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 234, 142, 309, 54, 54, 54, 54,
+ 348, 349, 350, 351, 143, 352, 54, 353, 354, 355, 54, 54, 39, 356, 357, 210,
+ 358, 359, 360, 361, 362, 54, 363, 364, 39, 365, 366, 367, 368, 369, 54, 54,
+ 39, 39, 370, 54, 28, 371, 17, 372, 39, 373, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 374, 39, 375, 54, 54, 362, 376, 377, 54, 54, 307, 378, 234,
+ 379, 380, 381, 382, 160, 383, 384, 385, 386, 387, 388, 389, 160, 390, 391, 392,
+ 393, 394, 54, 54, 395, 396, 397, 398, 399, 400, 401, 402, 54, 54, 54, 54,
+ 39, 403, 404, 405, 39, 406, 407, 54, 54, 54, 54, 54, 39, 408, 409, 54,
+ 39, 410, 411, 412, 39, 413, 414, 54, 122, 415, 54, 54, 54, 54, 54, 54,
+ 39, 416, 54, 54, 54, 28, 17, 417, 418, 419, 420, 54, 54, 421, 422, 423,
+ 424, 425, 426, 39, 427, 428, 39, 139, 54, 54, 54, 54, 54, 54, 54, 54,
+ 429, 430, 431, 432, 433, 434, 54, 54, 435, 436, 437, 438, 439, 414, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 440, 54, 54, 54, 54, 54, 441, 442, 443,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 300, 54, 54, 54,
+ 195, 195, 195, 444, 39, 39, 39, 39, 39, 39, 445, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 446, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 447, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 139, 143, 448, 54, 54, 307, 449, 39, 450, 451, 452, 453, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 28, 17, 454, 54, 54, 54, 39, 39, 455, 456, 457, 54, 54, 458,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 459,
+ 39, 39, 39, 39, 39, 39, 142, 54, 370, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 143, 54, 460, 461, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 296, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 462, 463, 464, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 149, 149, 149, 149, 149, 149, 149, 241, 149, 465, 149, 466, 467, 468, 149, 469,
+ 149, 149, 470, 54, 54, 54, 54, 471, 149, 149, 472, 473, 54, 54, 54, 54,
+ 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 474, 475, 487,
+ 477, 488, 489, 490, 481, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 22, 502, 22, 503, 504, 505, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 506, 507, 54, 54, 54, 54, 54, 54, 39, 508, 509, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 39, 510, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 511, 54, 28, 512, 513, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 514, 210, 515, 54, 54, 516, 517, 54, 54, 54, 54, 54, 54,
+ 518, 519, 520, 521, 522, 523, 54, 524, 54, 54, 54, 54, 54, 54, 54, 54,
+ 149, 525, 149, 149, 240, 526, 527, 241, 528, 149, 149, 149, 149, 529, 54, 530,
+ 531, 532, 533, 534, 54, 54, 54, 54, 149, 149, 149, 149, 149, 149, 149, 535,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 536, 537, 149, 149, 149, 240, 149, 149, 538, 539,
+ 525, 149, 540, 149, 541, 542, 54, 54, 149, 149, 149, 543, 149, 149, 544, 149,
+ 149, 149, 240, 545, 546, 547, 548, 54, 149, 149, 149, 149, 549, 149, 209, 550,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 342, 54, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 551, 39, 39, 39, 39, 39, 39,
+ 342, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 552, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 553,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 342, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 53, 54, 54, 54, 54, 54,
+ 554, 555, 555, 555, 54, 54, 54, 54, 22, 22, 22, 22, 22, 22, 22, 556,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 557
+};
+
+static RE_UINT8 re_general_category_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 3, 3, 3, 4, 3, 3, 3, 5, 6, 3, 7, 3, 8, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 7, 7, 7, 3,
+ 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 3, 6, 11, 12,
+ 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 7, 6, 7, 1,
+ 2, 3, 4, 4, 4, 4, 14, 3, 11, 14, 15, 16, 7, 17, 14, 11,
+ 14, 7, 18, 18, 11, 13, 3, 3, 11, 18, 15, 19, 18, 18, 18, 3,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 7, 10, 10, 10, 10, 10, 10, 10, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, 10, 13, 10, 13, 10,
+ 13, 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 10, 13, 10, 13, 10, 13, 13,
+ 13, 10, 10, 13, 10, 13, 10, 10, 13, 10, 10, 10, 13, 13, 10, 10,
+ 10, 10, 13, 10, 10, 13, 10, 10, 10, 13, 13, 13, 10, 10, 13, 10,
+ 10, 13, 10, 13, 10, 13, 10, 10, 13, 10, 13, 13, 10, 13, 10, 10,
+ 13, 10, 10, 10, 13, 10, 13, 10, 10, 13, 13, 15, 10, 13, 13, 13,
+ 15, 15, 15, 15, 10, 20, 13, 10, 20, 13, 10, 20, 13, 10, 13, 10,
+ 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 10, 20, 13, 10, 13, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 13, 13, 13, 13, 13, 13, 10, 10, 13, 10, 10, 13,
+ 13, 10, 13, 10, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 15, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 11, 11, 11, 11, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 21, 21, 21, 21, 21, 11, 11, 11, 11, 11, 11, 11, 21, 11, 21, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 10, 13, 10, 13, 21, 11, 10, 13, 0, 0, 21, 13, 13, 13, 3, 10,
+ 0, 0, 0, 0, 11, 11, 10, 3, 10, 10, 10, 0, 10, 0, 10, 10,
+ 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10,
+ 13, 13, 10, 10, 10, 13, 13, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 13, 13, 13, 10, 13, 7, 10, 13, 10, 10, 13, 13, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 13, 14, 22, 22, 22, 22, 22, 23, 23, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 21, 3, 3, 3, 3, 3, 3,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 3, 8, 0, 0, 14, 14, 4,
+ 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 8, 22,
+ 3, 22, 22, 3, 22, 22, 3, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15,
+ 15, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 7, 7, 7, 3, 3, 4, 3, 3, 14, 14,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 3, 17, 0, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 15,
+ 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 3, 15, 22, 22, 22, 22, 22, 22, 22, 17, 14, 22,
+ 22, 22, 22, 22, 22, 21, 21, 22, 22, 14, 22, 22, 22, 22, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 14, 14, 15,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 17,
+ 15, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 21, 21, 14, 3, 3, 3, 21, 0, 0, 22, 4, 4,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 21, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 21, 22, 22, 22, 21, 22, 22, 22, 22, 22, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 0, 0, 3, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 24, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24, 22, 24, 24,
+ 15, 22, 22, 22, 22, 22, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 22, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 3, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 0, 0, 0, 15, 15, 15, 15, 0, 0, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 0, 0, 24, 24, 0, 0, 24, 24, 22, 15, 0,
+ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 15, 15, 0, 15,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 15, 15, 4, 4, 18, 18, 18, 18, 18, 18, 14, 4, 15, 3, 22, 0,
+ 0, 22, 22, 24, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 0, 15, 15, 0, 0, 22, 0, 24, 24,
+ 24, 22, 22, 0, 0, 0, 0, 22, 22, 0, 0, 22, 22, 22, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 15, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 22, 22, 15, 15, 15, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 22, 22, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15,
+ 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 22, 0, 22, 22, 24, 0, 24, 24, 22, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 3, 4, 0, 0, 0, 0, 0, 0, 0, 15, 22, 22, 22, 22, 22, 22,
+ 0, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 22, 15, 24, 22,
+ 24, 22, 22, 22, 22, 0, 0, 24, 24, 0, 0, 24, 24, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 24, 0, 0, 0, 0, 15, 15, 0, 15,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 15, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 22, 15, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, 15, 0, 15, 15,
+ 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 0, 0, 0, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 24, 24,
+ 22, 24, 24, 0, 0, 0, 24, 24, 24, 0, 24, 24, 24, 22, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 18, 18, 18, 14, 14, 14, 14, 14, 14, 4, 14, 0, 0, 0, 0, 0,
+ 22, 24, 24, 24, 22, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 22, 22,
+ 22, 24, 24, 24, 24, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 0, 15, 15, 15, 0, 0, 0, 0, 0,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 3, 18, 18, 18, 18, 18, 18, 18, 14,
+ 15, 22, 24, 24, 3, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 22, 15, 24, 22,
+ 24, 24, 24, 24, 24, 0, 22, 24, 24, 0, 24, 24, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 15, 0,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 24, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 0, 24, 24, 24, 0, 24, 24, 24, 22, 15, 14,
+ 0, 0, 0, 0, 15, 15, 15, 24, 18, 18, 18, 18, 18, 18, 18, 15,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 15, 15, 15, 15, 15, 15,
+ 0, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 22, 0, 0, 0, 0, 24,
+ 24, 24, 22, 22, 22, 0, 22, 0, 24, 24, 24, 24, 24, 24, 24, 24,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 24, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 15, 15, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 4,
+ 15, 15, 15, 15, 15, 15, 21, 22, 22, 22, 22, 22, 22, 22, 22, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 0, 0, 0, 0,
+ 0, 15, 15, 0, 15, 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 15, 0, 0,
+ 15, 15, 15, 15, 15, 0, 21, 0, 22, 22, 22, 22, 22, 22, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 15, 15, 15, 15,
+ 15, 14, 14, 14, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 14, 3, 14, 14, 14, 22, 22, 14, 14, 14, 14, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 14, 22, 14, 22, 14, 22, 5, 6, 5, 6, 24, 24,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24,
+ 22, 22, 22, 22, 22, 3, 22, 22, 15, 15, 15, 15, 15, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 14, 14,
+ 14, 14, 14, 14, 14, 14, 22, 14, 14, 14, 14, 14, 14, 0, 14, 14,
+ 3, 3, 3, 3, 3, 14, 14, 14, 14, 3, 3, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 22, 22, 22,
+ 22, 24, 22, 22, 22, 22, 22, 22, 24, 22, 22, 24, 24, 22, 22, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 24, 24, 22, 22, 15, 15, 15, 15, 22, 22,
+ 22, 15, 24, 24, 24, 15, 15, 24, 24, 24, 24, 24, 24, 24, 15, 15,
+ 15, 22, 22, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 24, 24, 22, 22, 24, 24, 24, 24, 24, 24, 22, 15, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24, 24, 24, 22, 14, 14,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 3, 21, 13, 13, 13,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 22, 22, 22,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 0, 0, 13, 13, 13, 13, 13, 13, 0, 0,
+ 8, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 3, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 5, 6, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 25, 25,
+ 25, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 15, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 22, 22, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 22, 22, 24, 22, 22, 22, 22, 22, 22, 22, 24, 24,
+ 24, 24, 24, 24, 24, 24, 22, 24, 24, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 3, 3, 3, 21, 3, 3, 3, 4, 15, 22, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 22, 22, 22, 17, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 15, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
+ 22, 22, 22, 24, 24, 24, 24, 22, 22, 24, 24, 24, 0, 0, 0, 0,
+ 24, 24, 22, 24, 24, 24, 24, 24, 24, 22, 22, 22, 0, 0, 0, 0,
+ 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 0, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 22, 22, 24, 24, 22, 0, 0, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 24, 22, 24, 22, 22, 22, 22, 22, 22, 22, 0,
+ 22, 24, 22, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 21, 3, 3, 3, 3, 3, 3, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 22,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 22, 24, 22, 22, 22, 22, 22, 24, 22, 24, 24, 24,
+ 24, 24, 22, 24, 24, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3,
+ 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 22, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 24, 22, 22, 22, 22, 24, 24, 22, 22, 24, 22, 22, 22, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 24, 22, 22, 24, 24, 24, 22, 24, 22,
+ 22, 22, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3,
+ 15, 15, 15, 15, 24, 24, 24, 24, 24, 24, 24, 24, 22, 22, 22, 22,
+ 22, 22, 22, 22, 24, 24, 22, 22, 0, 0, 0, 3, 3, 3, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 15, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 21, 21, 21, 21, 21, 21, 3, 3,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 3, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 24, 22, 22, 22, 22, 22, 22, 22, 15, 15, 15, 15, 22, 15, 15,
+ 15, 15, 15, 15, 22, 15, 15, 24, 22, 22, 15, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 21, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21, 21,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 10, 0, 10, 0, 10, 0, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 13, 13, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 13, 11,
+ 11, 11, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 11, 11,
+ 13, 13, 13, 13, 0, 0, 13, 13, 10, 10, 10, 10, 0, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 11, 11, 11,
+ 0, 0, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 11, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 17,
+ 8, 8, 8, 8, 8, 8, 3, 3, 16, 19, 5, 16, 16, 19, 5, 16,
+ 3, 3, 3, 3, 3, 3, 3, 3, 26, 27, 17, 17, 17, 17, 17, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 16, 19, 3, 3, 3, 3, 12,
+ 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
+ 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 18, 21, 0, 0, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 21,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23,
+ 23, 22, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 10, 14, 14, 14, 14, 10, 14, 14, 13, 10, 10, 10, 13, 13,
+ 10, 10, 10, 13, 14, 10, 14, 14, 7, 10, 10, 10, 10, 10, 14, 14,
+ 14, 14, 14, 14, 10, 14, 10, 14, 10, 14, 10, 10, 10, 10, 14, 13,
+ 10, 10, 10, 10, 13, 15, 15, 15, 15, 13, 14, 14, 13, 13, 10, 10,
+ 7, 7, 7, 7, 7, 10, 13, 13, 13, 13, 14, 7, 14, 14, 13, 14,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 10, 13, 25, 25, 25, 25, 18, 14, 14, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14,
+ 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7,
+ 14, 14, 7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 7, 14, 14, 14, 14, 14, 14, 14, 5, 6, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7,
+ 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6,
+ 5, 6, 5, 6, 5, 6, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 7, 7, 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 7, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 14, 14, 7, 7, 7, 7, 7, 7, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 10, 13, 10, 10, 10, 13, 13, 10, 13, 10, 13, 10, 13, 10, 10, 10,
+ 10, 13, 10, 13, 13, 10, 13, 13, 13, 13, 13, 13, 21, 21, 10, 10,
+ 10, 13, 10, 13, 13, 14, 14, 14, 14, 14, 14, 10, 13, 10, 13, 22,
+ 22, 22, 10, 13, 0, 0, 0, 0, 0, 3, 3, 3, 3, 18, 3, 3,
+ 13, 13, 13, 13, 13, 13, 0, 13, 0, 0, 0, 0, 0, 13, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 21,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 3, 3, 16, 19, 16, 19, 3, 3, 3, 16, 19, 3, 16, 19, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 8, 3, 3, 8, 3, 16, 19, 3, 3,
+ 16, 19, 5, 6, 5, 6, 5, 6, 5, 6, 3, 3, 3, 3, 3, 21,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 3, 3, 3, 3,
+ 8, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 14, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 2, 3, 3, 3, 14, 21, 15, 25, 5, 6, 5, 6, 5, 6, 5, 6,
+ 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 8, 5, 6, 6,
+ 14, 25, 25, 25, 25, 25, 25, 25, 25, 25, 22, 22, 22, 22, 24, 24,
+ 8, 21, 21, 21, 21, 21, 14, 14, 25, 25, 25, 21, 15, 3, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 22, 22, 11, 11, 21, 21, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 21, 21, 21, 15,
+ 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
+ 14, 14, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18,
+ 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 21, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 15, 22,
+ 23, 23, 23, 3, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 3, 21,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 21, 21, 22, 22,
+ 15, 15, 15, 15, 15, 15, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 22, 22, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 11, 11, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 21, 13, 13, 13, 13, 13, 13, 13, 13, 10, 13, 10, 13, 10, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 21, 11, 11, 10, 13, 10, 13, 15,
+ 10, 13, 10, 13, 13, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 10, 10, 10, 10, 13,
+ 10, 10, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 0, 0, 10, 13, 10, 10, 10, 10, 13, 10, 13, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 13, 15, 21, 21, 13, 15, 15, 15, 15, 15,
+ 15, 15, 22, 15, 15, 15, 22, 15, 15, 15, 15, 22, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 24, 24, 22, 22, 24, 14, 14, 14, 14, 22, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 14, 14, 4, 14, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 15, 15, 15, 15, 15, 15, 3, 3, 3, 15, 3, 15, 15, 22,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 24, 24, 22, 22, 22, 22, 24, 24, 22, 22, 24, 24,
+ 24, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3,
+ 15, 15, 15, 15, 15, 22, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 24,
+ 24, 22, 22, 24, 24, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 22, 15, 15, 15, 15, 15, 15, 15, 15, 22, 24, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 3, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 21, 15, 15, 15, 15, 15, 15, 14, 14, 14, 15, 24, 22, 24, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 22, 15, 22, 22, 22, 15, 15, 22, 22, 15, 15, 15, 15, 15, 22, 22,
+ 15, 22, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 21, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 22, 22, 24, 24,
+ 3, 3, 15, 21, 21, 24, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 0,
+ 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 21, 21, 21, 21,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 11, 11, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 15, 15, 15, 24, 24, 22, 24, 24, 22, 24, 24, 3, 24, 22, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 15, 22, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 0,
+ 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 6, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 4, 14, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 3, 3, 3, 3, 3, 3, 3, 5, 6, 3, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 3, 8, 8, 12, 12, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 6, 5, 6, 5, 6, 3, 3, 5, 6, 3, 3, 3, 3, 12, 12, 12,
+ 3, 3, 3, 0, 3, 3, 3, 3, 8, 5, 6, 5, 6, 5, 6, 3,
+ 3, 3, 7, 8, 7, 7, 7, 0, 3, 4, 3, 3, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 17,
+ 0, 3, 3, 3, 4, 3, 3, 3, 5, 6, 3, 7, 3, 8, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 7, 7, 7, 3,
+ 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 7, 6, 7, 5,
+ 6, 3, 5, 6, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 21, 21,
+ 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15,
+ 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 0, 0, 0,
+ 4, 4, 7, 11, 14, 4, 4, 0, 14, 7, 7, 7, 7, 14, 14, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 14, 14, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 14, 14, 14, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0,
+ 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 25, 15, 15, 15, 15, 15, 15, 15, 15, 25, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 3,
+ 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 3, 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 0, 0, 15, 0, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 3, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 14, 14, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 0, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 18, 18, 18, 18, 18, 18, 0, 0, 0, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 18, 18, 15, 15,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 22, 22, 22, 0, 22, 22, 0, 0, 0, 0, 0, 22, 22, 22, 22,
+ 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 22, 22, 22, 0, 0, 0, 0, 22,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 18, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 22, 22, 0, 0, 0, 0, 18, 18, 18, 18, 18,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 22, 22, 8, 0, 0,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 18, 18, 18, 18, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 22, 22, 22, 22, 24, 24, 22, 22, 3, 3, 17, 3, 3,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 24, 22, 22, 22,
+ 22, 22, 22, 22, 22, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 3, 3, 3, 3, 15, 24, 24, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24,
+ 24, 15, 15, 15, 15, 3, 3, 3, 3, 22, 22, 22, 22, 3, 24, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 3, 15, 3, 3, 3,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 24, 22,
+ 22, 22, 24, 24, 22, 24, 22, 22, 3, 3, 3, 3, 3, 3, 22, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 22, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 22, 22, 15, 24, 24,
+ 22, 24, 24, 24, 24, 0, 0, 24, 24, 0, 0, 24, 24, 24, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 15, 15, 15,
+ 15, 15, 24, 24, 0, 0, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0,
+ 22, 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22,
+ 24, 24, 22, 22, 22, 24, 22, 15, 15, 15, 15, 3, 3, 3, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 0, 3, 22, 15,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 24, 22, 24, 24, 24, 24, 22,
+ 22, 24, 22, 22, 15, 15, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24,
+ 24, 24, 22, 22, 22, 22, 0, 0, 24, 24, 24, 24, 22, 22, 24, 22,
+ 22, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 22, 22, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 22, 24, 22,
+ 22, 3, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 24, 22, 24, 24,
+ 22, 22, 22, 22, 22, 22, 24, 22, 15, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 22, 22, 22, 22, 24, 22, 22, 22, 22, 22, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 3, 3, 3, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 24, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 22, 3, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 0, 0, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 24, 24, 24, 0, 24, 24, 0, 0, 22, 22, 24, 22, 15,
+ 24, 15, 24, 22, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 24, 24, 24, 22, 22, 22, 22, 0, 0, 22, 22, 24, 24, 24, 24,
+ 22, 15, 3, 15, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 22, 22, 22, 22, 22, 24, 15, 22, 22, 22, 22, 3,
+ 3, 3, 3, 3, 3, 3, 3, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 22, 22, 22, 22, 22, 22, 24, 24, 22, 22, 22, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 24, 22, 22, 3, 3, 3, 15, 3, 3,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24,
+ 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 24, 22,
+ 15, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0,
+ 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 0, 24, 22, 22, 22, 22, 22, 22,
+ 22, 24, 22, 22, 24, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 0, 22, 22, 0, 22,
+ 22, 22, 22, 22, 22, 22, 15, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 24, 24, 24, 0,
+ 22, 22, 0, 24, 24, 22, 24, 22, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 22, 24, 24, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 4, 4, 4,
+ 4, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 22, 22, 22, 22, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 22, 22, 22, 22, 22, 22, 22, 3, 3, 3, 3, 3, 14, 14, 14, 14,
+ 21, 21, 21, 21, 3, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 18, 18, 18, 18, 18,
+ 18, 18, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 3, 3, 3, 3, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 22,
+ 15, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 22,
+ 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 3, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 14, 22, 22, 3,
+ 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 24, 24, 22, 22, 22, 14, 14, 14, 24, 24, 24,
+ 24, 24, 24, 17, 17, 17, 17, 17, 17, 17, 17, 22, 22, 22, 22, 22,
+ 22, 22, 22, 14, 14, 22, 22, 22, 22, 22, 22, 22, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 22, 22, 22, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 22, 22, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 0, 10, 10,
+ 0, 0, 10, 0, 0, 10, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10,
+ 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 10, 10, 0, 10, 10, 10, 10, 0, 0, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 0, 10, 10, 10, 10, 0,
+ 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 10, 10, 10, 10, 10, 10,
+ 10, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13,
+ 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7,
+ 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 10, 13, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 14, 14, 14, 14, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 14, 14, 14,
+ 14, 14, 14, 14, 14, 22, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 22, 14, 14, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22,
+ 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 22, 22, 22, 22, 22,
+ 22, 22, 0, 22, 22, 0, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 15, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 4,
+ 15, 15, 15, 15, 15, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 22, 22, 22, 22, 22, 22, 22, 21, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 18, 18, 18,
+ 4, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0,
+ 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0, 15, 0, 0, 0, 0,
+ 0, 0, 15, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 15, 15, 15,
+ 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15,
+ 0, 15, 15, 0, 15, 0, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15,
+ 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0, 0
+};
+
+RE_UINT32 re_get_general_category(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_general_category_table_1[field_2];
+ v = re_general_category_table_2[(v << 5) | field_1];
+ v = re_general_category_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Graph. */
+static RE_UINT8 re_graph_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 17, 18, 18, 13, 13, 13, 13, 13, 13, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 18, 18, 13, 31, 18, 18,
+ 18, 32, 18, 18, 18, 18, 18, 18, 18, 18, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 18, 38,
+ 18, 18, 18, 18, 39, 40, 41, 18, 42, 18, 43, 44, 45, 46, 47, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 48, 13, 13, 13, 49, 50, 13,
+ 13, 13, 13, 51, 13, 13, 13, 13, 13, 13, 52, 18, 18, 18, 53, 18,
+ 13, 13, 13, 13, 54, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 55, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56
+};
+
+static RE_UINT16 re_graph_table_2[] = {
+ 0, 1, 2, 3, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 5, 6, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 8, 2, 9, 2, 10, 11,
+ 12, 2, 2, 2, 2, 2, 2, 2, 13, 2, 14, 2, 2, 15, 2, 16,
+ 2, 17, 18, 19, 0, 20, 21, 2, 2, 2, 2, 2, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 31, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 41, 45, 46, 47, 41, 2, 48, 49, 50, 51, 52, 53,
+ 1, 54, 55, 0, 56, 57, 58, 0, 2, 2, 59, 60, 61, 12, 62, 0,
+ 2, 2, 2, 2, 2, 2, 63, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 64, 2, 65, 66, 67, 2, 68, 2, 16, 69, 70, 2, 2, 71,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 72, 2, 2, 73, 74, 75, 76, 77, 2, 2, 78, 79,
+ 80, 2, 2, 73, 2, 81, 2, 82, 3, 83, 84, 85, 2, 86, 87, 2,
+ 88, 2, 3, 89, 79, 90, 91, 0, 2, 2, 86, 69, 2, 2, 2, 92,
+ 2, 93, 94, 2, 95, 16, 10, 96, 2, 2, 2, 2, 2, 2, 2, 97,
+ 2, 2, 2, 2, 2, 2, 2, 2, 71, 2, 98, 78, 2, 20, 99, 100,
+ 101, 102, 3, 103, 104, 2, 105, 106, 2, 2, 2, 2, 86, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 107, 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 108, 109, 2, 2, 2,
+ 2, 110, 3, 2, 2, 2, 2, 111, 2, 63, 2, 112, 75, 113, 113, 2,
+ 2, 2, 114, 0, 97, 2, 2, 76, 2, 2, 2, 2, 2, 2, 82, 115,
+ 1, 2, 1, 2, 8, 2, 2, 2, 116, 7, 2, 2, 110, 2, 2, 117,
+ 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69,
+ 2, 2, 2, 2, 118, 2, 119, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 120, 2, 2, 2, 2, 2, 121, 2, 2, 2, 2, 2, 2, 122, 123,
+ 2, 124, 2, 121, 2, 2, 125, 2, 2, 2, 126, 69, 2, 2, 127, 3,
+ 2, 75, 128, 2, 2, 2, 129, 75, 130, 131, 2, 86, 2, 2, 2, 132,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 117, 133, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 90, 2, 2, 70, 0, 134, 135, 136, 2, 2, 2, 137, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 105, 2, 138, 2, 139, 140,
+ 70, 2, 141, 142, 2, 2, 2, 89, 1, 2, 2, 2, 2, 3, 143, 144,
+ 145, 146, 147, 0, 2, 2, 2, 96, 148, 149, 2, 2, 104, 91, 105, 78,
+ 0, 0, 0, 0, 69, 2, 106, 55, 2, 150, 81, 96, 151, 2, 152, 0,
+ 2, 2, 2, 2, 78, 153, 154, 55, 2, 10, 2, 155, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 75, 82, 139, 0, 0, 0, 0,
+ 156, 157, 109, 2, 3, 158, 0, 159, 160, 161, 0, 0, 2, 162, 138, 2,
+ 163, 164, 165, 2, 2, 0, 2, 166, 2, 167, 168, 169, 170, 171, 0, 0,
+ 2, 2, 172, 0, 2, 114, 2, 173, 2, 174, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 2, 175, 0, 0, 2, 10, 70, 0, 0, 105, 120, 75,
+ 2, 2, 176, 177, 2, 2, 178, 179, 2, 20, 10, 75, 2, 2, 2, 180,
+ 181, 3, 0, 0, 182, 153, 2, 183, 22, 184, 185, 186, 0, 0, 0, 0,
+ 2, 2, 187, 188, 2, 2, 174, 0, 0, 0, 0, 0, 2, 168, 78, 0,
+ 2, 2, 189, 190, 2, 73, 191, 0, 16, 86, 0, 0, 0, 0, 0, 0,
+ 2, 55, 0, 0, 0, 2, 2, 192, 193, 194, 195, 0, 0, 196, 4, 197,
+ 2, 2, 10, 2, 2, 198, 2, 73, 0, 0, 0, 0, 0, 0, 0, 0,
+ 199, 200, 201, 118, 138, 202, 0, 0, 203, 204, 174, 205, 206, 191, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 207, 2, 208,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 70, 0, 0, 0,
+ 2, 2, 2, 209, 2, 2, 2, 2, 2, 2, 210, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 73, 3, 212, 0, 0, 105, 213, 2, 2, 214, 215, 216, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 96, 0, 0, 0, 2, 2, 217, 2, 218, 0, 0, 219,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 121,
+ 2, 2, 2, 2, 2, 2, 82, 0, 172, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 220, 221, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 222, 223, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 82, 2, 224, 2, 2, 2, 2, 2, 172,
+ 2, 2, 225, 0, 0, 0, 0, 76, 2, 2, 75, 73, 0, 0, 0, 0,
+ 2, 2, 20, 2, 12, 226, 227, 2, 228, 229, 230, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 231, 2, 2, 2, 2, 2, 2, 2, 2, 232, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 235, 236, 0, 0, 0, 0, 0, 0, 2, 237, 212, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 161, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 238, 0, 2, 2, 239, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 240, 2, 241, 0, 0, 1, 78, 0, 0, 0, 0, 0, 0,
+ 227, 242, 243, 244, 245, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 86, 2, 2, 76, 248, 249, 82, 2, 2, 2, 2, 2, 250, 0, 251,
+ 252, 55, 253, 225, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 121, 254, 2, 2, 2, 76, 2, 2, 73, 120,
+ 86, 2, 174, 2, 10, 255, 0, 0, 2, 2, 2, 256, 2, 2, 145, 2,
+ 2, 2, 76, 257, 119, 258, 259, 0, 2, 2, 2, 2, 141, 2, 19, 260,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 78, 0, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 241, 2, 2, 2, 2, 2, 2,
+ 78, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 261, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 91,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 0, 0, 0, 0, 0,
+ 262, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 216,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78
+};
+
+static RE_UINT8 re_graph_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127,
+ 255, 255, 255, 252, 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 254, 255,
+ 255, 255, 127, 254, 255, 231, 254, 255, 255, 0, 255, 255, 255, 135, 31, 0,
+ 255, 255, 255, 223, 255, 191, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0,
+ 255, 255, 255, 231, 255, 63, 255, 127, 255, 255, 255, 79, 255, 7, 0, 0,
+ 255, 255, 223, 255, 255, 0, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243,
+ 159, 121, 128, 176, 207, 255, 255, 127, 238, 135, 249, 255, 255, 253, 109, 211,
+ 135, 57, 2, 94, 192, 255, 127, 0, 238, 191, 251, 255, 255, 253, 237, 243,
+ 191, 59, 1, 0, 207, 255, 3, 254, 238, 159, 249, 255, 159, 57, 224, 176,
+ 207, 255, 255, 0, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
+ 192, 255, 255, 7, 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7,
+ 207, 255, 128, 255, 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0,
+ 223, 253, 240, 255, 207, 255, 255, 255, 238, 255, 127, 252, 255, 255, 251, 47,
+ 127, 132, 95, 255, 192, 255, 28, 0, 255, 255, 255, 135, 255, 255, 255, 15,
+ 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243, 255, 254, 255, 255,
+ 255, 31, 254, 255, 255, 255, 255, 254, 255, 223, 255, 7, 191, 32, 255, 255,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 31, 255, 255, 255, 3, 255, 255, 63, 63,
+ 254, 255, 255, 31, 255, 255, 255, 1, 255, 223, 31, 0, 255, 255, 127, 0,
+ 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 255, 63, 255, 3, 255, 3,
+ 255, 127, 255, 3, 255, 7, 255, 255, 255, 255, 63, 0, 255, 15, 255, 15,
+ 241, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199,
+ 255, 255, 255, 207, 255, 255, 255, 159, 255, 63, 255, 255, 1, 0, 0, 0,
+ 255, 255, 15, 240, 255, 255, 255, 248, 255, 227, 255, 255, 255, 1, 255, 255,
+ 255, 255, 255, 7, 255, 255, 255, 251, 63, 63, 255, 170, 223, 255, 207, 239,
+ 255, 255, 220, 127, 0, 248, 255, 255, 255, 124, 255, 255, 223, 255, 243, 255,
+ 255, 127, 255, 31, 0, 0, 255, 255, 255, 255, 1, 0, 127, 0, 0, 0,
+ 255, 255, 207, 255, 255, 255, 191, 255, 255, 127, 255, 255, 255, 255, 15, 254,
+ 255, 128, 1, 128, 127, 127, 127, 127, 255, 255, 7, 0, 0, 0, 255, 15,
+ 224, 255, 255, 255, 15, 0, 255, 255, 255, 31, 255, 255, 127, 0, 255, 255,
+ 255, 15, 0, 0, 255, 255, 255, 0, 252, 7, 0, 0, 0, 0, 224, 255,
+ 255, 31, 255, 3, 63, 192, 255, 3, 255, 255, 15, 128, 255, 191, 255, 195,
+ 255, 63, 255, 243, 7, 0, 0, 248, 126, 126, 126, 0, 127, 127, 255, 255,
+ 255, 63, 255, 3, 127, 248, 255, 255, 127, 0, 248, 224, 255, 255, 127, 95,
+ 219, 255, 255, 255, 3, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0,
+ 0, 0, 255, 63, 255, 255, 247, 255, 127, 15, 223, 255, 252, 252, 252, 28,
+ 127, 127, 0, 62, 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63,
+ 135, 255, 255, 255, 255, 255, 143, 255, 15, 224, 255, 255, 255, 255, 255, 191,
+ 15, 255, 63, 0, 255, 3, 255, 255, 255, 255, 15, 255, 15, 128, 0, 0,
+ 63, 253, 255, 255, 255, 255, 191, 145, 128, 255, 0, 0, 255, 255, 55, 248,
+ 255, 255, 255, 143, 255, 255, 255, 131, 255, 255, 255, 240, 111, 240, 239, 254,
+ 255, 255, 63, 135, 255, 1, 255, 1, 127, 248, 127, 0, 255, 255, 63, 254,
+ 255, 255, 63, 255, 255, 255, 7, 255, 255, 255, 3, 30, 0, 254, 0, 0,
+ 255, 1, 0, 0, 255, 255, 7, 252, 255, 0, 255, 3, 255, 59, 3, 0,
+ 255, 63, 252, 255, 255, 255, 0, 128, 3, 32, 255, 255, 255, 1, 255, 3,
+ 254, 255, 31, 0, 255, 255, 251, 255, 127, 189, 255, 191, 255, 7, 255, 3,
+ 255, 253, 237, 251, 159, 57, 129, 224, 207, 31, 31, 0, 255, 255, 255, 239,
+ 3, 0, 0, 0, 31, 0, 255, 3, 255, 31, 0, 0, 255, 3, 0, 0,
+ 255, 255, 7, 128, 127, 242, 111, 255, 255, 255, 191, 249, 127, 0, 255, 3,
+ 255, 252, 255, 255, 31, 0, 0, 0, 7, 0, 0, 0, 255, 253, 255, 255,
+ 255, 255, 127, 255, 63, 0, 255, 255, 255, 254, 127, 0, 127, 251, 255, 255,
+ 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1, 0, 0, 1, 0,
+ 255, 255, 3, 128, 255, 127, 31, 0, 15, 0, 0, 0, 255, 127, 255, 1,
+ 255, 195, 0, 0, 255, 63, 63, 0, 63, 0, 255, 251, 251, 255, 255, 224,
+ 255, 255, 0, 0, 255, 135, 255, 255, 255, 128, 255, 255, 31, 0, 3, 0,
+ 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31, 255, 1, 255, 243,
+ 127, 254, 255, 255, 63, 0, 0, 0, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 255, 207, 255, 255, 255, 15, 0, 248, 254, 255, 0, 0, 127, 255, 255, 249,
+ 219, 7, 0, 0, 255, 31, 255, 63, 159, 255, 127, 0, 255, 15, 255, 195,
+ 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 3, 0,
+ 255, 127, 254, 255, 254, 255, 254, 255, 255, 63, 0, 0, 192, 255, 255, 255,
+ 7, 0, 255, 255, 255, 1, 3, 0, 255, 31, 255, 31, 255, 63, 3, 0,
+ 255, 255, 255, 253, 255, 63, 31, 7, 255, 1, 127, 0, 7, 0, 127, 0,
+ 0, 0, 255, 3, 3, 0, 255, 255, 2, 0, 0, 0
+};
+
+RE_UINT32 re_get_graph(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_graph_table_1[field_2];
+ v = re_graph_table_2[(v << 5) | field_1];
+ v = re_graph_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Grapheme_Base. */
+static RE_UINT8 re_grapheme_base_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 18, 18, 13, 31, 18, 18,
+ 18, 32, 18, 18, 18, 18, 18, 18, 18, 18, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 18, 38,
+ 18, 18, 18, 18, 39, 40, 41, 18, 42, 18, 43, 44, 45, 46, 47, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 48, 13, 13, 13, 49, 50, 13,
+ 13, 13, 13, 51, 13, 13, 13, 13, 13, 13, 52, 18, 18, 18, 53, 18,
+ 13, 13, 13, 13, 54, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18
+};
+
+static RE_UINT16 re_grapheme_base_table_2[] = {
+ 0, 1, 1, 2, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 4, 5, 6, 1, 1,
+ 1, 1, 1, 1, 7, 1, 1, 1, 1, 8, 9, 1, 10, 11, 12, 13,
+ 14, 1, 15, 8, 1, 1, 16, 17, 18, 19, 20, 1, 1, 21, 1, 22,
+ 23, 24, 25, 15, 0, 26, 27, 0, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 0, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 0,
+ 1, 81, 82, 83, 84, 1, 85, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 86, 1, 87, 88, 89, 1, 90, 1, 91, 92, 93, 1, 1, 94,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 92, 1, 1, 95, 96, 97, 98, 99, 1, 100, 101, 102,
+ 103, 1, 1, 95, 104, 105, 1, 106, 2, 107, 108, 109, 1, 110, 111, 1,
+ 112, 1, 113, 114, 102, 115, 0, 0, 116, 117, 118, 119, 120, 121, 1, 122,
+ 1, 123, 124, 1, 125, 126, 127, 128, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 94, 1, 129, 130, 1, 26, 131, 132,
+ 133, 134, 1, 135, 136, 1, 0, 0, 1, 1, 1, 1, 110, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 137, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 138, 139, 1, 1, 1,
+ 1, 140, 2, 1, 1, 1, 1, 141, 1, 85, 1, 142, 143, 144, 144, 0,
+ 1, 1, 145, 0, 146, 1, 1, 147, 1, 1, 1, 1, 1, 1, 106, 148,
+ 1, 149, 68, 1, 150, 1, 1, 1, 151, 8, 1, 1, 140, 1, 1, 152,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 92,
+ 1, 1, 1, 1, 153, 1, 154, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 155, 1, 156, 130, 1, 1, 157, 1, 1, 1, 1, 1, 1, 158, 159,
+ 160, 161, 1, 162, 1, 1, 163, 164, 1, 165, 166, 92, 28, 167, 168, 169,
+ 1, 170, 171, 172, 1, 173, 174, 175, 176, 177, 1, 110, 1, 1, 1, 178,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 152, 179, 180,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 181, 1, 1, 93, 0, 182, 183, 184, 1, 1, 1, 185, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 186, 1, 187, 1, 27, 188,
+ 189, 186, 190, 191, 1, 1, 1, 92, 68, 1, 1, 1, 130, 2, 192, 193,
+ 194, 195, 196, 0, 1, 1, 1, 91, 197, 198, 1, 1, 136, 199, 186, 92,
+ 0, 0, 0, 0, 92, 1, 200, 201, 1, 202, 133, 106, 203, 1, 204, 0,
+ 1, 1, 1, 1, 130, 149, 205, 180, 1, 206, 1, 207, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 143, 106, 27, 0, 0, 0, 0,
+ 208, 209, 139, 1, 2, 210, 0, 211, 212, 213, 0, 0, 1, 214, 187, 1,
+ 215, 106, 216, 1, 1, 0, 1, 217, 1, 218, 219, 220, 221, 222, 0, 0,
+ 1, 1, 223, 0, 1, 145, 1, 224, 1, 225, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 1, 226, 0, 0, 1, 206, 227, 0, 0, 186, 155, 143,
+ 228, 162, 229, 19, 120, 230, 231, 232, 28, 233, 206, 234, 120, 235, 236, 237,
+ 238, 239, 0, 0, 240, 149, 2, 241, 44, 242, 243, 244, 0, 0, 0, 0,
+ 1, 162, 245, 246, 1, 247, 248, 0, 0, 0, 0, 0, 1, 249, 201, 0,
+ 1, 250, 251, 252, 1, 253, 254, 0, 91, 255, 0, 0, 0, 0, 0, 0,
+ 1, 256, 0, 0, 0, 1, 1, 257, 258, 259, 260, 0, 0, 261, 262, 263,
+ 264, 265, 266, 1, 267, 268, 1, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+ 269, 270, 271, 153, 19, 272, 0, 0, 273, 200, 274, 275, 276, 254, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 1, 279,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 93, 0, 0, 0,
+ 1, 1, 1, 280, 1, 1, 1, 1, 1, 1, 244, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 95, 2, 282, 0, 0, 186, 283, 1, 284, 285, 286, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 91, 0, 0, 0, 1, 1, 133, 1, 287, 0, 0, 288,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 162,
+ 1, 1, 1, 1, 1, 1, 106, 0, 223, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 289, 290, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 180, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 291, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 106, 1, 293, 1, 294, 295, 296, 1, 223,
+ 1, 1, 297, 0, 0, 0, 0, 147, 1, 1, 143, 95, 0, 0, 0, 0,
+ 1, 1, 26, 1, 298, 299, 300, 1, 301, 302, 303, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 304, 1, 1, 1, 1, 1, 1, 1, 1, 305, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 306, 0, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 309, 282, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 310, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 311, 0, 1, 1, 312, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 313, 1, 314, 0, 0, 68, 130, 0, 0, 0, 0, 0, 0,
+ 300, 315, 316, 317, 318, 319, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 110, 1, 1, 147, 321, 322, 106, 1, 1, 1, 1, 1, 115, 0, 323,
+ 324, 180, 325, 326, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 162, 327, 1, 1, 1, 147, 1, 1, 95, 155,
+ 110, 1, 328, 1, 206, 329, 0, 0, 1, 1, 1, 330, 1, 1, 194, 1,
+ 1, 1, 147, 331, 154, 332, 333, 0, 1, 1, 1, 1, 190, 1, 15, 189,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 130, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 314, 1, 1, 1, 1, 1, 1,
+ 130, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_base_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 223, 255, 255,
+ 0, 0, 255, 252, 240, 215, 255, 255, 251, 255, 255, 255, 7, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 254, 255, 231, 0, 0, 0, 0, 0, 64,
+ 73, 0, 255, 255, 255, 135, 31, 0, 192, 255, 0, 200, 255, 7, 0, 0,
+ 255, 255, 63, 64, 96, 194, 255, 255, 255, 63, 253, 255, 255, 255, 0, 0,
+ 0, 224, 255, 255, 63, 0, 2, 0, 255, 7, 240, 199, 255, 255, 63, 4,
+ 16, 1, 255, 127, 255, 255, 255, 65, 255, 255, 223, 255, 255, 0, 0, 0,
+ 248, 255, 255, 255, 255, 255, 255, 235, 1, 222, 1, 255, 243, 255, 255, 255,
+ 237, 159, 249, 255, 255, 253, 197, 163, 129, 89, 0, 176, 195, 255, 255, 63,
+ 232, 135, 249, 255, 255, 253, 109, 195, 1, 0, 0, 94, 192, 255, 92, 0,
+ 232, 191, 251, 255, 255, 253, 237, 227, 1, 26, 1, 0, 195, 255, 3, 2,
+ 236, 159, 249, 255, 255, 253, 237, 35, 129, 25, 0, 176, 195, 255, 255, 0,
+ 232, 199, 61, 214, 24, 199, 255, 131, 198, 29, 1, 0, 192, 255, 255, 7,
+ 238, 223, 253, 255, 255, 253, 255, 35, 30, 0, 0, 7, 195, 255, 128, 255,
+ 253, 223, 253, 255, 255, 253, 239, 99, 155, 13, 0, 64, 195, 255, 6, 0,
+ 252, 223, 253, 255, 255, 255, 255, 167, 193, 221, 112, 255, 195, 255, 255, 255,
+ 236, 255, 127, 252, 255, 255, 251, 47, 127, 0, 3, 127, 192, 255, 28, 0,
+ 254, 255, 255, 255, 255, 255, 13, 128, 127, 128, 255, 15, 214, 247, 255, 255,
+ 175, 255, 13, 32, 95, 0, 255, 243, 255, 255, 255, 252, 255, 255, 95, 253,
+ 255, 254, 255, 255, 255, 31, 0, 128, 32, 31, 0, 0, 0, 0, 0, 192,
+ 191, 223, 255, 7, 255, 31, 2, 153, 255, 255, 255, 60, 254, 255, 225, 255,
+ 155, 223, 255, 223, 191, 32, 255, 255, 255, 61, 127, 61, 255, 61, 255, 255,
+ 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 7,
+ 255, 255, 255, 31, 255, 255, 255, 3, 255, 255, 63, 63, 255, 255, 255, 1,
+ 255, 223, 3, 0, 255, 255, 99, 0, 255, 255, 3, 0, 255, 223, 1, 0,
+ 255, 255, 79, 192, 191, 1, 240, 31, 255, 3, 255, 3, 255, 7, 255, 3,
+ 159, 255, 255, 255, 255, 5, 255, 255, 255, 255, 63, 0, 120, 14, 251, 1,
+ 241, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199,
+ 255, 255, 127, 198, 255, 255, 191, 0, 26, 224, 7, 0, 255, 63, 0, 0,
+ 240, 255, 255, 255, 255, 255, 15, 232, 251, 15, 255, 255, 255, 7, 240, 31,
+ 252, 255, 255, 255, 195, 196, 255, 255, 191, 92, 12, 240, 255, 15, 48, 248,
+ 255, 227, 255, 255, 255, 1, 255, 255, 255, 255, 255, 231, 255, 0, 8, 0,
+ 2, 222, 239, 4, 63, 63, 255, 170, 255, 255, 255, 63, 223, 255, 207, 239,
+ 255, 255, 220, 127, 255, 7, 255, 255, 255, 128, 255, 255, 0, 0, 243, 255,
+ 255, 127, 255, 31, 127, 0, 0, 0, 255, 255, 207, 255, 255, 255, 191, 255,
+ 255, 127, 255, 255, 255, 127, 12, 254, 255, 128, 1, 0, 255, 255, 127, 0,
+ 127, 127, 127, 127, 255, 255, 7, 0, 255, 255, 255, 251, 255, 255, 15, 0,
+ 0, 0, 255, 15, 255, 3, 255, 255, 255, 255, 127, 248, 224, 255, 255, 255,
+ 15, 0, 255, 255, 255, 31, 255, 255, 127, 0, 255, 255, 255, 15, 0, 0,
+ 255, 127, 8, 192, 255, 255, 252, 0, 252, 7, 0, 0, 0, 0, 224, 255,
+ 187, 247, 255, 255, 159, 15, 255, 3, 255, 255, 255, 0, 15, 192, 255, 3,
+ 0, 0, 252, 127, 63, 192, 255, 255, 127, 0, 12, 128, 255, 255, 55, 204,
+ 255, 191, 255, 195, 223, 255, 255, 127, 255, 129, 25, 0, 247, 47, 255, 243,
+ 255, 255, 255, 239, 255, 255, 98, 62, 5, 0, 0, 248, 255, 207, 63, 0,
+ 126, 126, 126, 0, 127, 127, 255, 255, 223, 30, 255, 3, 127, 248, 255, 255,
+ 255, 255, 255, 15, 255, 63, 255, 255, 127, 0, 248, 160, 255, 255, 127, 95,
+ 219, 255, 255, 255, 3, 0, 248, 255, 0, 0, 255, 255, 255, 255, 252, 255,
+ 0, 0, 255, 63, 0, 0, 255, 3, 255, 255, 247, 255, 127, 15, 223, 255,
+ 252, 252, 252, 28, 127, 127, 0, 48, 255, 239, 255, 255, 127, 255, 255, 183,
+ 255, 63, 255, 63, 135, 255, 255, 255, 255, 255, 143, 255, 1, 0, 0, 0,
+ 255, 255, 1, 0, 254, 255, 255, 15, 15, 224, 255, 255, 255, 255, 255, 191,
+ 15, 255, 63, 0, 255, 255, 15, 255, 255, 0, 255, 255, 15, 128, 0, 0,
+ 63, 253, 255, 255, 255, 255, 191, 145, 128, 255, 0, 0, 255, 255, 55, 248,
+ 255, 255, 255, 143, 255, 255, 255, 131, 255, 255, 255, 240, 1, 0, 239, 254,
+ 255, 1, 255, 1, 31, 248, 127, 0, 255, 255, 63, 254, 255, 255, 63, 255,
+ 255, 255, 7, 255, 255, 255, 3, 30, 0, 254, 0, 0, 255, 1, 0, 0,
+ 255, 255, 7, 252, 15, 0, 255, 3, 255, 35, 3, 0, 63, 0, 254, 3,
+ 253, 255, 255, 255, 128, 63, 252, 255, 255, 255, 135, 217, 3, 0, 255, 255,
+ 255, 1, 255, 3, 127, 16, 192, 255, 255, 255, 119, 0, 255, 255, 63, 128,
+ 255, 97, 255, 255, 254, 255, 31, 0, 255, 255, 251, 255, 255, 127, 44, 63,
+ 127, 189, 255, 191, 7, 0, 255, 3, 255, 253, 237, 163, 158, 57, 1, 224,
+ 15, 0, 0, 0, 163, 255, 255, 175, 3, 0, 0, 0, 255, 255, 6, 90,
+ 242, 0, 255, 3, 255, 127, 3, 79, 255, 255, 7, 88, 30, 0, 255, 3,
+ 255, 31, 0, 0, 255, 215, 64, 1, 255, 3, 0, 0, 67, 0, 255, 255,
+ 255, 127, 0, 9, 255, 255, 7, 128, 127, 242, 111, 255, 255, 255, 190, 161,
+ 119, 0, 255, 3, 255, 252, 255, 255, 255, 255, 15, 240, 30, 0, 0, 0,
+ 1, 248, 255, 255, 255, 255, 7, 134, 127, 0, 129, 241, 255, 3, 128, 252,
+ 7, 0, 0, 0, 255, 253, 255, 255, 255, 255, 0, 64, 63, 0, 255, 255,
+ 0, 2, 18, 0, 127, 251, 255, 255, 64, 0, 255, 3, 191, 253, 255, 255,
+ 255, 127, 88, 1, 255, 255, 231, 1, 0, 0, 1, 0, 255, 255, 3, 128,
+ 255, 127, 31, 0, 255, 127, 0, 0, 255, 195, 0, 0, 255, 63, 32, 0,
+ 255, 255, 128, 255, 63, 0, 255, 251, 251, 255, 255, 224, 255, 0, 248, 255,
+ 15, 0, 3, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 147, 127, 254, 255, 255, 95, 60, 0, 0, 24, 240, 255, 255,
+ 255, 195, 255, 255, 35, 0, 0, 0, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 255, 207, 255, 255, 0, 0, 128, 7, 0, 224, 223, 255,
+ 239, 15, 0, 0, 255, 31, 128, 63, 255, 15, 255, 131, 159, 255, 0, 0,
+ 15, 8, 255, 195, 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10,
+ 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
+ 0, 0, 3, 0, 255, 127, 254, 255, 254, 255, 254, 255, 192, 255, 255, 255,
+ 7, 0, 255, 255, 255, 1, 3, 0, 63, 0, 0, 0, 255, 31, 255, 31,
+ 255, 0, 255, 3, 255, 63, 3, 0, 255, 255, 255, 253, 255, 63, 31, 7,
+ 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_grapheme_base(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_grapheme_base_table_1[field_2];
+ v = re_grapheme_base_table_2[(v << 5) | field_1];
+ v = re_grapheme_base_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Grapheme_Cluster_Break. */
+static RE_UINT8 re_grapheme_cluster_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 14, 15, 16, 21, 9, 9, 9, 9, 9, 9, 9, 9, 22, 23,
+ 24, 9, 25, 26, 27, 28, 29, 30, 9, 9, 9, 9, 9, 31, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34,
+ 9, 9, 9, 9, 35, 9, 36, 9, 37, 9, 38, 9, 39, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 40, 41, 41, 41, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_grapheme_cluster_break_table_2[] = {
+ 0, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 6, 1, 1, 1, 1,
+ 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 1,
+ 11, 1, 12, 13, 1, 1, 14, 15, 16, 17, 18, 1, 1, 19, 1, 20,
+ 21, 22, 23, 1, 1, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 34, 35, 38, 39, 30, 40, 41, 29, 42, 43, 44, 1,
+ 45, 46, 47, 29, 30, 48, 49, 29, 50, 51, 52, 29, 30, 1, 53, 54,
+ 1, 55, 56, 1, 1, 57, 58, 1, 59, 60, 1, 61, 62, 63, 64, 1,
+ 1, 65, 66, 67, 68, 1, 1, 1, 69, 69, 69, 70, 70, 71, 72, 72,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 74, 74, 75, 75, 1, 76, 77, 1,
+ 78, 1, 1, 1, 79, 80, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1,
+ 82, 1, 83, 84, 1, 17, 85, 1, 86, 87, 88, 89, 90, 91, 1, 92,
+ 1, 93, 1, 1, 1, 1, 94, 95, 1, 1, 1, 1, 1, 1, 5, 96,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 97, 98, 1, 99, 1, 1, 17, 100, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 101, 1, 1, 1, 102, 1, 1, 1, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 103, 1, 1, 104, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 105, 46, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1,
+ 107, 108, 1, 1, 109, 110, 111, 112, 1, 113, 114, 115, 26, 116, 117, 118,
+ 1, 119, 120, 121, 1, 122, 123, 124, 1, 1, 1, 1, 1, 1, 1, 125,
+ 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127,
+ 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129,
+ 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131,
+ 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126,
+ 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128,
+ 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130,
+ 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132,
+ 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127,
+ 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129,
+ 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131,
+ 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126,
+ 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128,
+ 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130,
+ 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132,
+ 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132,
+ 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 133, 134, 135,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 136, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 6, 6, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 46, 1, 1, 137,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 138,
+ 1, 1, 1, 1, 1, 1, 1, 85, 1, 1, 1, 139, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 140, 141, 1, 1, 1, 1, 1, 79, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 142, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 143, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1,
+ 144, 145, 146, 102, 90, 147, 148, 1, 149, 150, 151, 152, 90, 153, 154, 1,
+ 1, 155, 1, 1, 1, 1, 102, 156, 50, 51, 157, 158, 1, 1, 1, 1,
+ 1, 159, 160, 1, 1, 161, 162, 1, 1, 1, 1, 1, 1, 163, 164, 1,
+ 1, 165, 85, 1, 1, 166, 1, 1, 73, 167, 1, 1, 1, 1, 1, 1,
+ 1, 168, 1, 1, 1, 1, 1, 1, 1, 169, 170, 1, 1, 1, 171, 172,
+ 173, 174, 175, 1, 176, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 177, 1, 1, 178, 179, 1, 1, 1, 180, 181, 1, 182, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 183, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 184, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 185, 1, 186, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 187, 188, 189, 1, 1, 190,
+ 1, 1, 1, 1, 191, 192, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 193, 194, 195, 1, 1,
+ 1, 1, 196, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 5, 197, 5, 198, 199, 200, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 201, 202, 1, 1, 1, 1, 1, 1, 1, 186, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 203, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 186, 1, 1, 1, 204, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 205,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 206,
+ 3, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 207,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
+};
+
+static RE_UINT8 re_grapheme_cluster_break_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4,
+ 0, 4, 4, 0, 4, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 5, 0, 4,
+ 4, 4, 4, 4, 4, 0, 0, 4, 4, 0, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 4, 4, 4, 0, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 4, 0, 6, 6,
+ 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 4, 6, 6,
+ 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 6,
+ 6, 4, 4, 4, 4, 0, 0, 6, 6, 0, 0, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 6,
+ 6, 4, 4, 0, 0, 0, 0, 4, 4, 0, 0, 4, 4, 4, 0, 0,
+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 4, 4, 4, 4, 4, 0, 4, 4, 6, 0, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4,
+ 6, 4, 4, 4, 4, 0, 0, 6, 6, 0, 0, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6,
+ 4, 6, 6, 0, 0, 0, 6, 6, 6, 0, 6, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,
+ 4, 6, 6, 6, 6, 0, 4, 4, 4, 0, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 4,
+ 6, 6, 4, 6, 6, 0, 4, 6, 6, 0, 6, 6, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 6,
+ 6, 4, 4, 4, 4, 0, 6, 6, 6, 0, 6, 6, 6, 4, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
+ 6, 6, 4, 4, 4, 0, 4, 0, 6, 6, 6, 6, 6, 6, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, 6, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0, 0, 0, 0, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 4, 4, 4, 4, 4, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4,
+ 4, 6, 4, 4, 4, 4, 4, 4, 0, 4, 4, 6, 6, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 6, 4, 4, 0, 0, 0, 0, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 6, 4, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 6,
+ 6, 6, 6, 6, 6, 6, 4, 6, 6, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 6, 6, 6, 6, 4, 4, 6, 6, 6, 0, 0, 0, 0,
+ 6, 6, 4, 6, 6, 6, 6, 6, 6, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 6, 6, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 4, 6, 4, 4, 4, 4, 4, 4, 4, 0,
+ 4, 0, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6,
+ 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 6, 4, 6, 6, 6,
+ 6, 6, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 4, 4, 4, 4, 6, 6, 4, 4, 6, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 6, 4, 4, 6, 6, 6, 4, 6, 4,
+ 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4,
+ 4, 4, 4, 4, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 6, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 6, 4, 4, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 10, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6, 4, 4, 6, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 6, 6, 4, 4, 4, 4, 6, 6, 4, 4, 6, 6,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 6,
+ 6, 4, 4, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 4, 4, 4, 0, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4,
+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 6, 6,
+ 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6, 4, 6, 6, 4, 6, 6, 0, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 4, 4, 4, 4, 6, 6, 4, 4, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 6, 4, 4, 4,
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 6, 0, 5, 5, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 4,
+ 4, 4, 6, 6, 4, 6, 4, 4, 0, 0, 0, 0, 0, 0, 4, 0,
+ 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 6, 6, 0, 0, 6, 6, 0, 0, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4,
+ 6, 6, 4, 4, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 4, 4, 4, 4, 4, 4, 6, 4, 6, 6, 4, 6, 4,
+ 4, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 6, 6, 4, 4, 4, 4, 0, 0, 6, 6, 6, 6, 4, 4, 6, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 4, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 4, 6, 6,
+ 4, 4, 4, 4, 4, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 6, 6, 6, 0, 6, 6, 0, 0, 4, 4, 6, 4, 5,
+ 6, 5, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 6, 6, 4, 4, 4, 4, 0, 0, 4, 4, 6, 6, 6, 6,
+ 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 6, 5, 4, 4, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 6, 6, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 6, 4, 4, 4, 4, 4, 4,
+ 4, 6, 4, 4, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 4, 0, 4, 4, 0, 4,
+ 4, 4, 4, 4, 4, 4, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 0,
+ 4, 4, 0, 6, 6, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 4,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 6, 4, 4, 4, 0, 0, 0, 6, 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 0, 4, 4, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_grapheme_cluster_break_table_1[field_2];
+ v = re_grapheme_cluster_break_table_2[(v << 5) | field_1];
+ v = re_grapheme_cluster_break_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Grapheme_Extend. */
+static RE_UINT8 re_grapheme_extend_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15,
+ 16, 9, 17, 18, 19, 20, 21, 22, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25,
+ 9, 9, 9, 9, 26, 9, 27, 9, 28, 9, 29, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 30, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_grapheme_extend_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0,
+ 7, 0, 8, 9, 0, 0, 10, 11, 12, 13, 14, 0, 0, 15, 0, 16,
+ 17, 18, 19, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 30, 31, 34, 35, 26, 36, 37, 25, 38, 39, 40, 0,
+ 41, 42, 43, 25, 26, 44, 45, 25, 46, 47, 28, 25, 26, 0, 48, 0,
+ 0, 49, 50, 0, 0, 51, 52, 0, 53, 54, 0, 55, 56, 57, 58, 0,
+ 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 65, 65, 0, 66, 67, 0,
+ 68, 0, 0, 0, 69, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0,
+ 72, 0, 73, 74, 0, 13, 75, 0, 76, 77, 38, 78, 46, 79, 0, 80,
+ 0, 81, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, 0, 0, 1, 84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 0, 0, 0, 0, 0, 13, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 91, 42, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0,
+ 93, 94, 0, 0, 0, 0, 95, 96, 0, 97, 98, 0, 22, 99, 0, 100,
+ 0, 101, 102, 31, 0, 103, 26, 104, 0, 0, 0, 0, 0, 0, 0, 105,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106,
+ 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 107, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 108, 109, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
+ 26, 112, 113, 88, 46, 114, 0, 0, 22, 115, 0, 116, 46, 117, 118, 0,
+ 0, 119, 0, 0, 0, 0, 88, 120, 46, 47, 121, 122, 0, 0, 0, 0,
+ 0, 112, 123, 0, 0, 124, 125, 0, 0, 0, 0, 0, 0, 126, 127, 0,
+ 0, 128, 75, 0, 0, 129, 0, 0, 63, 130, 0, 0, 0, 0, 0, 0,
+ 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, 134, 75,
+ 135, 136, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 139, 0, 0, 140, 141, 0, 0, 0, 142, 143, 0, 144, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150,
+ 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 153, 154, 0, 0,
+ 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 156, 1, 157, 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 160, 161, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 163, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_extend_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 248, 3, 0, 0,
+ 0, 0, 254, 255, 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 255, 7,
+ 0, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 159, 159, 61, 0, 0,
+ 0, 0, 2, 0, 0, 0, 255, 255, 255, 7, 0, 0, 192, 255, 1, 0,
+ 0, 248, 15, 32, 0, 0, 192, 251, 239, 62, 0, 0, 0, 0, 0, 14,
+ 0, 0, 248, 255, 251, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 20,
+ 254, 33, 254, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 80,
+ 30, 32, 128, 0, 12, 0, 0, 64, 6, 0, 0, 0, 0, 0, 0, 16,
+ 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0, 12, 0, 0, 252,
+ 0, 0, 0, 208, 30, 32, 224, 0, 4, 0, 0, 0, 0, 0, 0, 64,
+ 1, 32, 128, 0, 17, 0, 0, 0, 0, 0, 0, 192, 193, 61, 96, 0,
+ 0, 0, 0, 144, 68, 48, 96, 0, 3, 0, 0, 0, 0, 0, 0, 88,
+ 0, 132, 92, 128, 0, 0, 242, 7, 128, 127, 0, 0, 0, 0, 242, 31,
+ 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
+ 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
+ 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
+ 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 15, 32,
+ 0, 56, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0, 135, 1, 4, 14,
+ 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159, 1, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 240, 23, 0, 248, 15, 0, 60, 59, 0, 0,
+ 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 247, 255, 253, 33, 16, 3,
+ 255, 255, 255, 251, 0, 16, 0, 0, 255, 255, 1, 0, 0, 128, 3, 0,
+ 0, 0, 0, 128, 0, 252, 0, 0, 0, 0, 0, 6, 0, 128, 247, 63,
+ 0, 0, 3, 0, 68, 8, 0, 0, 96, 16, 0, 0, 48, 0, 0, 0,
+ 255, 255, 3, 128, 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 200, 51,
+ 32, 0, 0, 0, 0, 126, 102, 0, 8, 16, 0, 0, 0, 0, 157, 193,
+ 0, 48, 64, 0, 32, 33, 0, 0, 0, 0, 0, 32, 0, 0, 192, 7,
+ 110, 240, 0, 0, 0, 0, 0, 135, 240, 0, 0, 0, 0, 24, 0, 0,
+ 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 120, 6, 128, 239, 31, 0,
+ 0, 0, 8, 0, 0, 0, 192, 127, 0, 158, 0, 0, 0, 128, 211, 64,
+ 248, 7, 0, 0, 1, 0, 128, 0, 192, 31, 31, 0, 92, 0, 0, 64,
+ 0, 0, 249, 165, 13, 0, 0, 0, 0, 128, 60, 176, 1, 0, 0, 48,
+ 0, 0, 248, 167, 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6,
+ 0, 0, 1, 88, 8, 0, 0, 0, 0, 0, 240, 12, 254, 7, 0, 0,
+ 0, 0, 248, 121, 128, 0, 126, 14, 0, 252, 127, 3, 0, 0, 127, 191,
+ 0, 0, 252, 255, 255, 252, 109, 0, 0, 0, 126, 180, 191, 0, 0, 0,
+ 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 31, 0, 0, 0, 127, 0,
+ 0, 128, 0, 0, 0, 128, 7, 0, 16, 0, 0, 0, 0, 0, 0, 96,
+ 160, 195, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
+ 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0,
+ 127, 255, 255, 249, 219, 7, 0, 0, 0, 240, 0, 0, 240, 7, 0, 0
+};
+
+RE_UINT32 re_get_grapheme_extend(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_grapheme_extend_table_1[field_2];
+ v = re_grapheme_extend_table_2[(v << 5) | field_1];
+ v = re_grapheme_extend_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Grapheme_Link. */
+static RE_UINT8 re_grapheme_link_table_1[] = {
+ 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 8, 0, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_link_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 3, 0,
+ 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 5, 0, 0, 10, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 0, 0, 0, 0, 5, 0, 0, 0, 15, 0, 0, 0, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 12, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 9, 0,
+ 0, 19, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 20, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 12, 0, 0,
+ 0, 12, 0, 0, 0, 16, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0,
+ 0, 17, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 9,
+ 0, 7, 23, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_link_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 24, 0, 4, 0, 0,
+ 0, 0, 0, 4, 16, 0, 0, 0, 0, 0, 0, 6, 0, 0, 16, 0,
+ 0, 0, 4, 0, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 0,
+ 0, 0, 0, 128, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 8, 0,
+ 0, 0, 64, 0, 0, 0, 0, 2, 0, 0, 24, 0, 0, 0, 32, 0,
+ 4, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 96, 128, 0, 0, 0,
+ 48, 0, 0, 0, 0, 0, 128, 0
+};
+
+RE_UINT32 re_get_grapheme_link(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_grapheme_link_table_1[field_2];
+ v = re_grapheme_link_table_2[(v << 5) | field_1];
+ v = re_grapheme_link_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Hangul_Syllable_Type. */
+static RE_UINT8 re_hangul_syllable_type_table_1[] = {
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7,
+ 8, 9, 3, 4, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_hangul_syllable_type_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7,
+ 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9,
+ 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11,
+ 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6,
+ 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8,
+ 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10,
+ 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12,
+ 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7,
+ 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9,
+ 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11,
+ 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6,
+ 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8,
+ 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10,
+ 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12,
+ 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12,
+ 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 13, 14, 15
+};
+
+static RE_UINT8 re_hangul_syllable_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_hangul_syllable_type_table_1[field_2];
+ v = re_hangul_syllable_type_table_2[(v << 5) | field_1];
+ v = re_hangul_syllable_type_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Hex_Digit. */
+RE_UINT32 re_get_hex_digit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
+ if (0x41 <= codepoint && codepoint <= 0x46)
+ return 1;
+ if (0x61 <= codepoint && codepoint <= 0x66)
+ return 1;
+ if (0xFF10 <= codepoint && codepoint <= 0xFF19)
+ return 1;
+ if (0xFF21 <= codepoint && codepoint <= 0xFF26)
+ return 1;
+ if (0xFF41 <= codepoint && codepoint <= 0xFF46)
+ return 1;
+
+ return 0;
+}
+
+/* Hyphen. */
+static RE_UINT8 re_hyphen_table_1[] = {
+ 0, 1, 2, 2, 2, 2, 3, 2, 4, 2, 2, 5, 6, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_hyphen_table_2[] = {
+ 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 0, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_hyphen_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 4, 0, 0, 64, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 128, 0, 0, 0, 0, 8, 8, 0, 0, 0,
+ 32, 0, 0, 0
+};
+
+RE_UINT32 re_get_hyphen(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_hyphen_table_1[field_2];
+ v = re_hyphen_table_2[(v << 5) | field_1];
+ v = re_hyphen_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* ID_Continue. */
+static RE_UINT8 re_id_continue_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 38, 39, 40, 9, 41, 9, 42, 43, 9, 9, 44, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 45, 12, 12, 12, 46, 47, 12,
+ 12, 12, 12, 48, 12, 12, 12, 12, 12, 12, 49, 9, 9, 9, 50, 9,
+ 12, 12, 12, 12, 51, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 52, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT16 re_id_continue_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 7, 8, 6, 6, 6, 9, 10, 11, 6, 12,
+ 6, 6, 6, 6, 13, 6, 6, 6, 6, 14, 15, 6, 16, 17, 18, 19,
+ 20, 6, 6, 21, 6, 6, 22, 23, 24, 6, 25, 6, 6, 26, 6, 27,
+ 6, 28, 29, 30, 0, 31, 32, 11, 6, 6, 6, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 43, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 53, 6, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 0, 70, 71, 72, 0, 73, 74, 75, 76, 77, 78, 79, 0,
+ 6, 6, 80, 6, 81, 6, 82, 83, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 84, 6, 85, 86, 87, 6, 88, 6, 89, 90, 91, 6, 6, 92,
+ 67, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 93, 3, 6, 6, 94, 95, 96, 97, 98, 6, 6, 99, 100,
+ 101, 6, 6, 102, 6, 103, 6, 104, 105, 106, 107, 108, 6, 109, 110, 0,
+ 29, 6, 105, 111, 112, 113, 114, 0, 6, 6, 115, 116, 6, 6, 6, 97,
+ 6, 117, 118, 81, 119, 89, 120, 68, 6, 6, 6, 6, 6, 6, 6, 121,
+ 6, 6, 6, 6, 6, 6, 6, 6, 92, 6, 122, 81, 6, 123, 124, 125,
+ 0, 126, 127, 128, 129, 0, 129, 130, 131, 132, 133, 6, 134, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 41, 44, 209, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 191, 122, 0,
- 36, 122, 0, 0, 7, 7, 111, 0, 62, 36, 36, 36, 36, 36, 0, 82,
- 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 15, 15, 15, 15, 15, 15, 15, 15,
- 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 135, 105, 6, 6, 6, 6, 136, 6, 82, 6, 137, 138, 139, 139, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 61, 93, 88, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 0, 93, 117, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 61, 0, 0, 0, 0, 36, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 36, 36, 36, 104,
- 36, 36, 104, 0, 36, 36, 41, 220, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 89, 58, 221, 63, 222, 44,
- 66, 58, 44, 0, 0, 0, 0, 0, 0, 0, 106, 89, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 106, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 11, 11, 11,
- 11, 11, 11, 159, 15, 139, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11,
- 159, 15, 15, 15, 15, 15, 15, 49, 48, 223, 10, 49, 11, 159, 170, 14,
- 15, 14, 15, 15, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15,
- 15, 50, 22, 10, 11, 49, 11, 224, 15, 15, 15, 15, 15, 15, 50, 22,
- 11, 160, 166, 11, 224, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11,
- 11, 159, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11, 159, 15,
- 15, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15,
- 15, 15, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 11,
- 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11,
- 11, 11, 159, 15, 15, 15, 15, 15, 15, 39, 11, 11, 11, 11, 11, 11,
- 224, 15, 15, 15, 15, 15, 24, 15, 33, 11, 11, 11, 11, 11, 22, 15,
- 15, 15, 15, 15, 15, 139, 15, 11, 11, 11, 11, 11, 11, 224, 15, 15,
- 15, 15, 15, 24, 15, 33, 11, 11, 11, 11, 11, 22, 15, 15, 15, 15,
- 15, 15, 139, 15, 11, 11, 11, 11, 11, 11, 224, 15, 15, 15, 15, 15,
- 24, 15, 27, 100, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 66, 93, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 116, 0, 86, 0, 0,
- 0, 116, 122, 0, 0, 0, 93, 44, 58, 44, 44, 44, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 44, 66, 44, 44, 44, 44, 97, 44, 59, 75, 66, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 44, 117, 36, 41,
- 7, 7, 111, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 7, 7, 111, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 104, 0, 0, 44, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 15,
- 15, 44, 117, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 82, 36, 36, 36, 36, 36, 36, 102, 78, 82, 36, 61, 36, 112, 0,
- 108, 62, 112, 82, 102, 78, 112, 112, 102, 78, 61, 36, 61, 36, 82, 43,
- 36, 36, 99, 36, 36, 36, 36, 0, 82, 82, 99, 36, 36, 36, 36, 0,
+ 140, 141, 67, 6, 142, 67, 6, 83, 143, 14, 6, 6, 144, 6, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 78,
+ 6, 6, 6, 6, 145, 0, 24, 81, 6, 6, 6, 6, 6, 6, 6, 6,
+ 146, 147, 6, 148, 6, 6, 6, 26, 149, 150, 6, 6, 151, 6, 152, 153,
+ 6, 154, 6, 97, 6, 6, 155, 156, 6, 157, 97, 78, 6, 6, 158, 105,
+ 6, 138, 159, 160, 6, 6, 161, 162, 163, 164, 83, 80, 6, 6, 6, 165,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 166, 167, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 157, 6, 6, 168, 0, 169, 170, 171, 6, 6, 26, 172, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 81, 24, 6, 173, 6, 174, 175,
+ 91, 176, 177, 178, 6, 6, 6, 78, 1, 2, 3, 107, 6, 105, 179, 0,
+ 180, 181, 182, 0, 6, 6, 6, 68, 0, 0, 6, 96, 0, 0, 0, 183,
+ 0, 0, 0, 0, 78, 6, 184, 114, 6, 185, 103, 68, 81, 6, 186, 0,
+ 6, 6, 6, 6, 81, 80, 187, 29, 6, 188, 6, 189, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 138, 104, 174, 0, 0, 0, 0,
+ 190, 191, 104, 138, 105, 0, 0, 192, 104, 168, 0, 0, 6, 193, 0, 0,
+ 194, 195, 0, 78, 78, 0, 75, 196, 6, 104, 104, 197, 26, 0, 0, 0,
+ 6, 6, 134, 0, 6, 197, 6, 197, 6, 198, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 199, 0, 0, 78, 200, 184, 0, 0, 24, 201, 138,
+ 6, 6, 196, 202, 6, 68, 24, 203, 6, 31, 204, 205, 6, 6, 206, 0,
+ 207, 208, 0, 0, 209, 119, 6, 210, 34, 211, 212, 213, 0, 0, 0, 0,
+ 6, 6, 214, 215, 6, 6, 216, 0, 0, 0, 0, 0, 6, 217, 218, 0,
+ 6, 6, 219, 0, 6, 102, 100, 0, 89, 115, 0, 0, 0, 0, 0, 0,
+ 6, 68, 0, 0, 0, 6, 6, 220, 221, 222, 223, 0, 0, 224, 225, 226,
+ 6, 105, 200, 6, 227, 0, 6, 102, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 5, 229, 230, 173, 231, 0, 0, 232, 233, 198, 234, 235, 100, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 236, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 168, 0, 0, 0,
+ 6, 6, 6, 144, 6, 6, 6, 6, 6, 6, 189, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11,
- 11, 11, 123, 0, 11, 11, 11, 11, 11, 11, 123, 0, 11, 11, 11, 11,
- 11, 11, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 102, 105, 100, 0, 0, 24, 108, 6, 138, 223, 237, 91, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 127, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 41, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 104, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 238, 6, 239, 0, 0, 240,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 117,
+ 6, 6, 6, 6, 6, 6, 104, 0, 134, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 105, 0, 241, 204, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0,
+ 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 31, 6, 248, 249, 250, 6, 251, 252, 253, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 254, 255, 83, 31, 31, 135, 135, 228, 228, 256, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 257, 6, 258, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 261, 262, 0, 0, 0, 0, 0, 0, 6, 263, 264, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 265, 0, 6, 6, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 250, 266, 267, 268, 269, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 81, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 96, 6, 6, 6, 6, 6, 6,
+ 81, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 271, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 114,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 30, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_id_continue_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7,
+ 0, 4, 160, 4, 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0,
+ 31, 80, 0, 0, 255, 255, 223, 188, 192, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 251, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 254, 255, 255, 255, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 195, 255, 255, 255, 255, 239, 159, 255, 253, 255, 159,
+ 0, 0, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 63, 36,
+ 255, 63, 0, 0, 255, 255, 255, 15, 255, 7, 0, 0, 255, 255, 223, 255,
+ 255, 0, 248, 255, 207, 255, 254, 255, 239, 159, 249, 255, 255, 253, 197, 243,
+ 159, 121, 128, 176, 207, 255, 3, 80, 238, 135, 249, 255, 255, 253, 109, 211,
+ 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 251, 255, 255, 253, 237, 243,
+ 191, 59, 1, 0, 207, 255, 0, 254, 238, 159, 249, 255, 159, 57, 224, 176,
+ 207, 255, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
+ 192, 255, 0, 0, 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7,
+ 207, 255, 0, 0, 239, 223, 253, 255, 255, 253, 239, 243, 223, 61, 96, 64,
+ 207, 255, 6, 0, 223, 125, 240, 128, 207, 255, 0, 252, 238, 255, 127, 252,
+ 255, 255, 251, 47, 127, 132, 95, 255, 192, 255, 12, 0, 254, 255, 255, 255,
+ 255, 255, 255, 7, 255, 127, 255, 3, 214, 247, 255, 255, 175, 255, 255, 63,
+ 95, 63, 255, 243, 1, 0, 0, 3, 255, 3, 160, 194, 255, 254, 255, 255,
+ 255, 31, 254, 255, 223, 255, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0,
+ 255, 3, 255, 255, 255, 255, 255, 63, 191, 32, 255, 255, 255, 255, 255, 247,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 231, 0, 254, 3, 0, 255, 255, 0, 0,
+ 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 31, 0,
+ 255, 255, 31, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 143, 48,
+ 255, 3, 0, 0, 0, 56, 255, 3, 255, 255, 255, 1, 255, 7, 255, 255,
+ 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 15, 192, 255, 255, 255,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 7, 255, 255, 255, 159,
+ 255, 3, 255, 3, 128, 0, 255, 191, 1, 0, 0, 0, 255, 15, 255, 3,
+ 0, 248, 15, 0, 255, 255, 255, 0, 255, 227, 255, 255, 255, 1, 255, 255,
+ 0, 0, 247, 255, 255, 255, 255, 251, 63, 63, 255, 170, 255, 255, 223, 95,
+ 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 0, 128, 1, 0, 16, 0,
+ 0, 0, 2, 128, 0, 0, 255, 31, 226, 255, 1, 0, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 1, 0, 0, 255, 127, 255, 255,
+ 31, 248, 15, 0, 255, 128, 0, 128, 255, 255, 127, 0, 127, 127, 127, 127,
+ 224, 0, 0, 0, 254, 255, 62, 31, 255, 255, 127, 254, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 0, 0, 255, 31, 255, 255, 255, 15, 0, 0,
+ 255, 255, 240, 191, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 16, 0, 0, 63, 0, 255, 3,
+ 255, 255, 255, 232, 255, 63, 255, 255, 1, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 7, 0, 0, 56, 255, 255, 124, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 55, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
+ 0, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 15,
+ 255, 255, 24, 0, 0, 224, 0, 0, 0, 0, 223, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 32,
+ 255, 255, 1, 0, 0, 224, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255,
+ 255, 0, 255, 255, 15, 0, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145,
+ 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254, 255, 255, 63, 135,
+ 127, 0, 0, 0, 255, 255, 7, 0, 255, 0, 255, 3, 255, 27, 3, 0,
+ 128, 0, 255, 255, 31, 0, 0, 0, 192, 255, 0, 128, 255, 1, 255, 3,
+ 240, 0, 255, 255, 255, 255, 79, 0, 31, 222, 255, 23, 255, 255, 251, 255,
+ 255, 255, 255, 64, 127, 189, 255, 191, 255, 7, 255, 3, 255, 253, 237, 251,
+ 159, 57, 129, 224, 207, 31, 31, 0, 255, 7, 255, 195, 3, 0, 0, 0,
+ 191, 0, 255, 3, 255, 255, 63, 255, 1, 0, 0, 63, 17, 0, 255, 3,
+ 255, 3, 0, 128, 127, 242, 111, 255, 255, 255, 191, 249, 15, 0, 255, 3,
+ 255, 252, 255, 255, 255, 255, 255, 252, 27, 0, 0, 0, 255, 255, 255, 35,
+ 255, 253, 255, 255, 1, 0, 255, 3, 0, 0, 252, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1,
+ 0, 0, 1, 0, 248, 255, 255, 224, 255, 135, 255, 255, 255, 128, 255, 255,
+ 27, 0, 3, 0, 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 99,
+ 224, 227, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
+ 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
+ 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
+ 247, 207, 255, 255, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
+ 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63,
+ 255, 67, 0, 0, 31, 0, 127, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-static RE_UINT8 re_sentence_break_stage_4[] = {
- 0, 0, 0, 0, 0, 6, 2, 6, 6, 1, 0, 0, 6, 12, 13, 0,
- 0, 0, 0, 13, 13, 13, 0, 0, 14, 14, 11, 0, 10, 10, 10, 10,
- 10, 10, 14, 0, 0, 0, 0, 12, 0, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 13, 0, 13, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 13, 0, 4, 0, 0, 6, 0, 0, 0, 0, 0, 7, 13,
- 0, 5, 0, 0, 0, 7, 0, 0, 8, 8, 8, 0, 8, 8, 8, 7,
- 7, 7, 7, 0, 8, 7, 8, 7, 7, 8, 7, 8, 7, 7, 8, 7,
- 8, 8, 7, 8, 7, 8, 7, 7, 7, 8, 8, 7, 8, 7, 8, 8,
- 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 7, 7, 8, 7, 7, 9,
- 9, 9, 9, 9, 9, 7, 7, 7, 7, 9, 9, 9, 7, 7, 0, 0,
- 0, 0, 9, 9, 9, 9, 0, 0, 7, 0, 0, 0, 9, 0, 9, 0,
- 3, 3, 3, 3, 9, 0, 8, 7, 0, 0, 7, 7, 7, 7, 0, 8,
- 0, 0, 8, 0, 8, 0, 8, 8, 8, 8, 0, 8, 7, 7, 7, 8,
- 8, 7, 0, 8, 8, 7, 0, 3, 3, 3, 8, 7, 0, 9, 0, 0,
- 0, 14, 0, 0, 7, 12, 0, 0, 0, 3, 3, 3, 3, 3, 0, 3,
- 0, 3, 3, 0, 9, 9, 9, 0, 0, 0, 0, 9, 5, 5, 5, 5,
- 5, 5, 0, 0, 14, 14, 0, 0, 3, 3, 3, 0, 5, 0, 12, 12,
- 9, 9, 9, 3, 10, 10, 0, 10, 10, 0, 9, 9, 3, 9, 9, 9,
- 12, 9, 3, 3, 3, 5, 0, 3, 3, 9, 9, 3, 3, 0, 3, 3,
- 3, 3, 9, 9, 10, 10, 9, 9, 9, 0, 0, 9, 12, 12, 12, 0,
- 0, 0, 0, 5, 9, 3, 9, 9, 0, 9, 9, 9, 9, 9, 3, 3,
- 3, 9, 0, 0, 14, 12, 9, 0, 0, 3, 0, 0, 3, 3, 9, 3,
- 9, 3, 3, 3, 3, 3, 0, 0, 0, 12, 0, 0, 0, 12, 12, 0,
- 9, 0, 9, 9, 0, 0, 0, 3, 3, 3, 5, 3, 3, 9, 3, 3,
- 12, 12, 10, 10, 3, 0, 0, 3, 3, 3, 9, 0, 9, 9, 0, 9,
- 0, 0, 10, 10, 9, 0, 3, 0, 0, 9, 9, 0, 9, 3, 0, 0,
- 9, 0, 0, 0, 0, 9, 3, 3, 0, 0, 3, 3, 0, 0, 3, 9,
- 0, 0, 9, 0, 0, 0, 3, 0, 3, 0, 3, 0, 10, 10, 0, 0,
- 0, 9, 0, 9, 0, 3, 0, 3, 0, 3, 13, 13, 13, 13, 3, 3,
- 3, 0, 0, 0, 3, 3, 3, 9, 10, 10, 12, 12, 10, 10, 3, 3,
- 0, 8, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0, 8, 8, 0, 0,
- 9, 0, 12, 9, 6, 9, 9, 9, 9, 9, 9, 13, 13, 0, 0, 0,
- 3, 12, 12, 0, 9, 0, 3, 3, 0, 0, 14, 12, 14, 12, 0, 3,
- 3, 3, 5, 0, 9, 3, 3, 9, 9, 3, 9, 0, 12, 12, 12, 12,
- 0, 0, 12, 12, 9, 9, 12, 12, 0, 8, 0, 8, 7, 0, 7, 7,
- 8, 0, 7, 0, 8, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 5,
- 3, 3, 5, 5, 0, 0, 0, 14, 14, 0, 0, 0, 13, 13, 13, 13,
- 11, 0, 0, 0, 4, 4, 5, 5, 5, 5, 5, 6, 0, 13, 13, 0,
- 12, 12, 0, 0, 0, 13, 13, 12, 0, 0, 0, 6, 5, 0, 5, 5,
- 0, 13, 13, 7, 0, 0, 0, 8, 0, 0, 7, 8, 8, 8, 7, 7,
- 8, 0, 8, 0, 8, 8, 0, 7, 9, 7, 0, 0, 0, 8, 7, 7,
- 0, 0, 7, 0, 9, 9, 9, 8, 0, 0, 8, 8, 0, 0, 13, 13,
- 8, 7, 7, 8, 7, 8, 7, 3, 7, 7, 0, 7, 0, 0, 12, 9,
- 0, 0, 13, 0, 6, 14, 12, 0, 0, 13, 13, 13, 9, 9, 0, 12,
- 9, 0, 12, 12, 8, 7, 9, 3, 3, 3, 0, 9, 7, 7, 3, 3,
- 3, 3, 0, 12, 0, 0, 8, 7, 9, 0, 0, 8, 7, 8, 7, 9,
- 7, 7, 7, 9, 9, 9, 3, 9, 0, 9, 9, 3, 0, 12, 12, 12,
- 0, 0, 9, 3, 12, 12, 9, 9, 9, 3, 3, 0, 3, 3, 3, 12,
- 0, 0, 0, 7, 0, 9, 3, 9, 9, 9, 13, 13, 14, 14, 0, 14,
- 0, 14, 14, 0, 13, 0, 0, 13, 0, 14, 12, 12, 14, 13, 13, 13,
- 13, 13, 13, 0, 9, 0, 0, 5, 0, 13, 0, 13, 13, 12, 13, 13,
- 14, 0, 9, 9, 0, 5, 5, 5, 0, 5, 12, 12, 3, 0, 10, 10,
- 9, 12, 12, 0, 3, 12, 0, 0, 10, 10, 9, 0, 12, 12, 0, 12,
- 12, 0, 3, 0, 9, 12, 0, 0, 9, 9, 0, 3, 9, 9, 9, 12,
- 3, 0, 12, 12, 3, 9, 0, 9, 12, 9, 0, 0, 5, 0, 0, 0,
- 0, 3, 3, 12, 3, 3, 3, 5, 5, 5, 5, 3, 0, 8, 8, 0,
- 8, 0, 7, 7,
-};
+RE_UINT32 re_get_id_continue(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Sentence_Break: 8564 bytes. */
-
-RE_UINT32 re_get_sentence_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_sentence_break_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_sentence_break_stage_2[pos + f] << 5;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_sentence_break_stage_3[pos + f] << 2;
- value = re_sentence_break_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Math. */
+ v = re_id_continue_table_1[field_2];
+ v = re_id_continue_table_2[(v << 5) | field_1];
+ v = re_id_continue_table_3[(v << 2) | field_0];
-static RE_UINT8 re_math_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_math_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 7,
- 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2,
+/* Ideographic. */
+static RE_UINT8 re_ideographic_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 2, 2, 2,
+ 2, 7, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 11, 12, 2,
+ 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 14, 0, 0, 0, 15, 0,
+ 2, 2, 2, 2, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_math_stage_3[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
- 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 16, 17, 18, 19,
- 4, 4, 4, 4, 4, 4, 20, 21, 22, 23, 4, 4, 4, 4, 4, 15,
- 4, 4, 4, 4, 15, 15, 15, 15, 15, 15, 15, 15, 24, 25, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 27, 4, 4, 28, 29, 4, 30,
- 15, 31, 32, 33, 34, 35, 15, 15, 15, 15, 36, 15, 15, 15, 15, 37,
- 4, 4, 4, 4, 4, 4, 4, 4, 38, 39, 40, 41, 4, 4, 4, 4,
+static RE_UINT8 re_ideographic_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 5, 3, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8,
+ 3, 3, 3, 3, 3, 3, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 13, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 14, 3, 3, 3, 3, 3, 3,
+ 13, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 16,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 17, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_math_stage_4[] = {
- 0, 0, 0, 0, 0, 8, 0, 112, 0, 0, 0, 64, 0, 0, 0, 80,
- 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 128, 0, 0, 0, 128, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 115, 0,
- 192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 28, 0,
- 17, 0, 4, 0, 30, 0, 0, 124, 0, 124, 0, 0, 0, 0, 0, 0,
- 0, 0, 255, 31, 98, 248, 0, 0, 132, 252, 47, 63, 16, 179, 251, 241,
- 255, 11, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 126, 195, 240,
- 255, 255, 255, 47, 48, 0, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 0, 15, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 0, 248, 255, 255, 191, 0, 0, 0, 1, 240, 7, 0, 0, 0,
- 0, 0, 0, 0, 3, 192, 255, 240, 195, 140, 15, 0, 148, 31, 0, 255,
- 96, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 15, 224, 0, 0,
- 0, 0, 0, 0, 0, 0, 255, 255, 159, 31, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 126, 1, 0, 0,
- 0, 8, 0, 112, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 30, 0, 0, 255, 255, 223, 255, 255, 255, 255, 255,
- 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 255, 255, 255, 255,
- 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 63, 255, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255,
- 239, 255, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
- 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 0, 0, 0, 0, 3, 0,
+static RE_UINT8 re_ideographic_table_3[] = {
+ 0, 0, 0, 0, 192, 0, 0, 0, 254, 3, 0, 7, 255, 255, 255, 255,
+ 255, 255, 255, 31, 255, 63, 255, 255, 255, 255, 255, 3, 16, 0, 0, 0,
+ 255, 255, 255, 0, 255, 255, 63, 0, 255, 1, 0, 0, 0, 0, 255, 255,
+ 255, 255, 255, 15, 255, 255, 255, 63, 255, 255, 31, 0, 3, 0, 255, 255,
+ 1, 0, 0, 0, 255, 7, 0, 0
};
-/* Math: 628 bytes. */
-
-RE_UINT32 re_get_math(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_math_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_math_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_math_stage_3[pos + f] << 6;
- pos += code;
- value = (re_math_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+RE_UINT32 re_get_ideographic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_ideographic_table_1[field_2];
+ v = re_ideographic_table_2[(v << 5) | field_1];
+ v = re_ideographic_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Alphabetic. */
+/* IDS_Binary_Operator. */
+RE_UINT32 re_get_ids_binary_operator(RE_UINT32 codepoint) {
+ if (0x2FF0 <= codepoint && codepoint <= 0x2FF1)
+ return 1;
+ if (0x2FF4 <= codepoint && codepoint <= 0x2FFB)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_alphabetic_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
+/* ID_Start. */
+static RE_UINT8 re_id_start_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 9, 38, 9, 9, 39, 9, 40, 41, 9, 9, 9, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 42, 12, 12, 12, 43, 44, 12,
+ 12, 12, 12, 45, 12, 12, 12, 12, 12, 12, 46, 9, 9, 9, 47, 9,
+ 12, 12, 12, 12, 48, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -7455,3134 +12959,5435 @@ static RE_UINT8 re_alphabetic_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_alphabetic_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 31, 31, 31, 95, 96, 97, 98, 31, 31, 31, 31, 31, 31, 31, 31,
- 99, 100, 101, 31, 31, 31, 31, 31, 102, 103, 31, 31, 31, 31, 104, 31,
- 31, 105, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_alphabetic_stage_3[] = {
+static RE_UINT8 re_id_start_table_2[] = {
0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 7, 8, 9, 10, 4, 11,
- 4, 4, 4, 4, 12, 4, 4, 4, 4, 13, 14, 4, 15, 16, 17, 18,
- 19, 4, 20, 21, 4, 4, 22, 23, 24, 4, 25, 4, 4, 26, 27, 28,
- 29, 30, 31, 32, 0, 33, 34, 35, 4, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 0,
- 57, 58, 59, 60, 57, 61, 62, 63, 57, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 0, 74, 75, 76, 0, 77, 0, 78, 79, 80, 81, 0, 0,
- 4, 82, 24, 4, 83, 4, 84, 85, 4, 4, 86, 4, 87, 88, 89, 4,
- 90, 4, 72, 0, 91, 4, 4, 92, 71, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 93, 1, 4, 4, 94, 95, 96, 96, 97, 4, 98, 99, 0,
- 0, 4, 4, 31, 4, 100, 4, 101, 102, 103, 24, 104, 4, 105, 106, 0,
- 107, 4, 102, 108, 0, 109, 0, 0, 4, 110, 111, 0, 4, 112, 4, 113,
- 4, 114, 115, 116, 117, 64, 0, 118, 4, 4, 4, 4, 4, 4, 0, 119,
- 92, 4, 120, 116, 4, 121, 122, 123, 0, 0, 0, 124, 125, 0, 0, 0,
- 126, 127, 128, 4, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 129, 4, 106, 4, 130, 102, 4, 4, 4, 4, 131,
- 4, 84, 4, 132, 114, 133, 133, 4, 0, 134, 0, 0, 0, 0, 0, 0,
- 135, 136, 71, 4, 137, 71, 4, 85, 138, 13, 4, 4, 139, 72, 0, 24,
- 4, 4, 4, 4, 4, 101, 0, 0, 4, 4, 4, 4, 4, 4, 4, 91,
- 4, 4, 4, 4, 30, 0, 24, 116, 140, 141, 4, 142, 4, 4, 4, 91,
- 143, 144, 4, 4, 145, 4, 146, 143, 147, 148, 4, 96, 4, 4, 149, 150,
- 27, 100, 151, 81, 4, 152, 134, 153, 4, 114, 154, 155, 4, 102, 156, 157,
- 158, 159, 85, 160, 4, 4, 4, 32, 4, 4, 4, 4, 4, 161, 162, 107,
- 4, 4, 4, 163, 4, 4, 164, 0, 165, 166, 167, 4, 4, 26, 168, 4,
- 4, 116, 24, 4, 169, 4, 148, 170, 0, 0, 0, 171, 4, 4, 4, 81,
- 0, 1, 1, 172, 4, 102, 173, 0, 174, 175, 176, 0, 4, 4, 4, 72,
- 0, 0, 4, 177, 0, 0, 0, 0, 0, 0, 0, 0, 81, 4, 178, 0,
- 4, 25, 100, 72, 116, 4, 179, 0, 4, 4, 4, 4, 116, 24, 180, 107,
- 4, 160, 4, 60, 0, 0, 0, 0, 4, 114, 101, 148, 0, 0, 0, 0,
- 181, 182, 101, 114, 102, 0, 0, 183, 101, 164, 0, 0, 4, 184, 0, 0,
- 185, 101, 0, 81, 81, 0, 78, 186, 4, 101, 101, 151, 26, 0, 0, 0,
- 4, 4, 15, 0, 4, 151, 4, 151, 4, 148, 0, 0, 0, 0, 0, 0,
- 81, 187, 188, 0, 0, 0, 0, 114, 4, 4, 188, 0, 144, 31, 24, 15,
- 4, 151, 189, 190, 4, 4, 191, 0, 192, 193, 0, 0, 194, 117, 4, 15,
- 39, 48, 195, 60, 0, 0, 0, 0, 4, 4, 196, 0, 4, 4, 197, 0,
- 0, 0, 0, 0, 4, 198, 199, 0, 4, 102, 200, 0, 4, 201, 0, 0,
- 64, 32, 0, 0, 0, 0, 0, 0, 4, 31, 0, 0, 0, 4, 4, 202,
- 0, 0, 0, 0, 0, 203, 29, 204, 4, 205, 24, 4, 206, 0, 4, 31,
- 207, 208, 77, 209, 169, 210, 0, 0, 211, 212, 213, 214, 215, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 114, 4, 4, 4, 4, 164, 0, 0, 0,
- 4, 4, 4, 139, 4, 4, 4, 4, 4, 4, 60, 0, 0, 0, 0, 0,
- 4, 139, 0, 0, 0, 0, 0, 0, 4, 4, 216, 0, 0, 0, 0, 0,
- 4, 31, 102, 0, 0, 0, 24, 154, 4, 91, 60, 217, 91, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 218, 4, 219, 0, 0, 220,
- 4, 4, 4, 4, 4, 4, 4, 221, 4, 4, 4, 4, 4, 4, 4, 151,
- 102, 0, 222, 223, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 107,
- 4, 4, 4, 224, 225, 0, 0, 0, 4, 4, 226, 4, 227, 228, 229, 4,
- 230, 231, 232, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 233, 234, 85,
- 226, 226, 130, 130, 207, 207, 235, 0, 236, 237, 0, 0, 0, 0, 0, 0,
- 4, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 240,
- 4, 4, 4, 4, 4, 4, 186, 0, 4, 4, 241, 0, 0, 0, 0, 0,
- 229, 242, 243, 244, 245, 246, 0, 0, 0, 24, 247, 247, 106, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 114, 0, 4, 177, 4, 4, 4, 4, 4, 4,
- 116, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 248, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 77, 116, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
+ 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
+ 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
+ 27, 28, 29, 17, 0, 30, 31, 0, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 45, 49, 50, 51, 52, 46, 0,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0,
+ 68, 69, 67, 0, 70, 71, 72, 0, 73, 0, 74, 75, 76, 0, 0, 0,
+ 4, 77, 78, 79, 80, 4, 81, 82, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 83, 4, 84, 85, 86, 4, 87, 4, 88, 0, 22, 4, 4, 89,
+ 68, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 90, 1, 4, 4, 91, 92, 93, 93, 94, 4, 95, 96, 0,
+ 0, 4, 4, 29, 4, 97, 4, 98, 99, 0, 15, 100, 4, 101, 102, 0,
+ 103, 4, 104, 0, 0, 105, 0, 0, 106, 95, 107, 0, 108, 109, 4, 110,
+ 4, 111, 112, 113, 114, 115, 0, 116, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 89, 4, 117, 113, 4, 118, 119, 120,
+ 0, 0, 0, 121, 122, 0, 0, 0, 123, 124, 125, 4, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 126, 99, 4, 4, 4, 4, 127, 4, 81, 4, 128, 103, 129, 129, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 131, 68, 4, 132, 68, 4, 82, 106, 12, 4, 4, 133, 4, 0, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 134,
+ 4, 4, 4, 4, 75, 0, 15, 113, 4, 4, 4, 4, 4, 4, 4, 4,
+ 135, 136, 4, 137, 113, 4, 4, 22, 138, 139, 4, 4, 140, 4, 141, 142,
+ 143, 144, 4, 95, 139, 95, 0, 145, 25, 146, 67, 134, 32, 147, 148, 149,
+ 4, 14, 150, 151, 4, 152, 153, 154, 155, 156, 82, 157, 4, 4, 4, 144,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 158, 159, 160,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 161, 4, 4, 162, 0, 163, 164, 165, 4, 4, 93, 166, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 113, 15, 4, 167, 4, 31, 168,
+ 0, 0, 0, 169, 4, 4, 4, 134, 0, 1, 1, 170, 4, 99, 171, 0,
+ 172, 173, 174, 0, 4, 4, 4, 88, 0, 0, 4, 104, 0, 0, 0, 0,
+ 0, 0, 0, 0, 134, 4, 175, 0, 4, 23, 176, 98, 113, 4, 177, 0,
+ 4, 4, 4, 4, 113, 15, 178, 160, 4, 179, 4, 111, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 103, 98, 31, 0, 0, 0, 0,
+ 180, 181, 98, 103, 99, 0, 0, 182, 98, 162, 0, 0, 4, 183, 0, 0,
+ 184, 98, 0, 134, 134, 0, 74, 185, 4, 98, 98, 147, 93, 0, 0, 0,
+ 4, 4, 14, 0, 4, 147, 4, 147, 4, 111, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 186, 0, 0, 134, 187, 110, 0, 0, 15, 185, 103,
+ 108, 188, 0, 0, 108, 22, 15, 14, 108, 67, 189, 190, 108, 147, 191, 0,
+ 192, 193, 0, 0, 194, 114, 99, 0, 48, 45, 195, 56, 0, 0, 0, 0,
+ 4, 104, 196, 56, 4, 22, 197, 0, 0, 0, 0, 0, 4, 133, 198, 0,
+ 4, 22, 199, 0, 4, 200, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
+ 4, 193, 0, 0, 0, 4, 4, 201, 202, 203, 204, 0, 0, 205, 175, 206,
+ 207, 208, 209, 4, 210, 0, 4, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 211, 133, 73, 212, 22, 0, 0, 0, 213, 175, 214, 215, 216, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 46, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 162, 0, 0, 0,
+ 4, 4, 4, 133, 4, 4, 4, 4, 4, 4, 111, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 29, 99, 0, 0, 0, 15, 217, 4, 22, 111, 218, 22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 219, 0, 166, 0, 0, 220,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 188,
+ 4, 4, 4, 4, 4, 4, 98, 0, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 99, 0, 221, 222, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 30, 4, 225, 226, 227, 4, 228, 229, 230, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 231, 232, 82, 30, 30, 126, 126, 211, 211, 150, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 233, 234, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 193, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 185, 0, 4, 4, 235, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 227, 236, 237, 238, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 113, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 104, 4, 4, 4, 4, 4, 4,
+ 113, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 241, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 73,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 17, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_alphabetic_stage_4[] = {
+static RE_UINT8 re_id_start_table_3[] = {
0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 32, 0, 0, 0,
- 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
- 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0,
- 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0, 0, 0, 255, 7,
- 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31, 254, 225, 0, 156,
- 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0, 0, 252, 255, 255,
- 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0, 255, 255, 255, 1,
- 255, 7, 0, 0, 255, 255, 223, 63, 0, 0, 240, 255, 248, 3, 255, 255,
- 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255, 239, 159, 249, 255,
- 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16, 238, 135, 249, 255,
- 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0, 238, 191, 251, 255,
- 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30, 238, 159, 249, 255,
- 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195,
- 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227, 223, 29, 96, 7,
- 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64, 15, 0, 6, 0,
- 255, 255, 255, 231, 223, 93, 240, 128, 15, 0, 0, 252, 236, 255, 127, 252,
- 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0, 254, 255, 255, 255,
- 255, 255, 255, 7, 127, 32, 0, 0, 214, 247, 255, 255, 175, 255, 255, 59,
- 95, 32, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 254, 255,
- 3, 255, 255, 254, 255, 255, 255, 31, 255, 255, 127, 249, 255, 255, 0, 60,
- 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255,
- 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 0, 0,
- 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 15, 0,
- 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255, 255, 1, 128, 16,
- 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 1,
- 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0, 255, 255, 255, 15,
- 254, 255, 31, 0, 128, 0, 0, 0, 255, 255, 239, 255, 239, 15, 0, 0,
- 255, 243, 0, 252, 191, 255, 3, 0, 255, 255, 127, 0, 0, 224, 0, 252,
- 255, 255, 255, 63, 255, 1, 255, 255, 0, 222, 111, 4, 128, 255, 31, 0,
- 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
- 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62, 80, 189, 255, 243,
- 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255, 31, 120, 12, 0,
- 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0, 224, 0, 0, 0,
- 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255, 255, 127, 0, 0,
- 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143, 0, 0, 128, 255,
- 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0, 191, 255, 255, 255,
- 255, 0, 0, 0, 47, 0, 0, 0, 0, 0, 252, 232, 255, 255, 7, 0,
- 255, 255, 247, 255, 255, 255, 0, 124, 255, 63, 0, 0, 255, 255, 127, 252,
- 5, 0, 0, 56, 255, 255, 60, 0, 126, 126, 126, 0, 127, 127, 255, 255,
- 255, 0, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
- 0, 0, 248, 255, 255, 255, 252, 255, 0, 0, 255, 15, 0, 0, 223, 255,
- 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
- 255, 63, 255, 63, 255, 255, 31, 0, 255, 255, 1, 0, 15, 255, 62, 0,
- 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
- 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0, 128, 0, 255, 255,
- 63, 0, 0, 0, 112, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
- 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191, 159, 25, 129, 224,
- 187, 7, 0, 128, 179, 0, 0, 0, 255, 255, 63, 127, 0, 0, 0, 63,
- 17, 0, 0, 0, 255, 255, 63, 1, 0, 0, 0, 128, 255, 252, 255, 255,
- 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32, 255, 253, 255, 255,
- 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255,
- 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255, 255, 127, 123, 1,
- 127, 0, 0, 0, 248, 255, 255, 224, 255, 135, 255, 255, 255, 128, 255, 255,
- 11, 0, 0, 0, 255, 255, 255, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 223, 255, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 247, 15, 0, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63, 0, 64, 0, 0,
- 255, 15, 0, 0, 143, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 255, 3, 255, 255,
- 3, 0, 255, 255,
-};
-
-/* Alphabetic: 2596 bytes. */
-
-RE_UINT32 re_get_alphabetic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_alphabetic_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_alphabetic_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_alphabetic_stage_3[pos + f] << 5;
- pos += code;
- value = (re_alphabetic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 188,
+ 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
+ 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
+ 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
+ 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
+ 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 255, 255, 0, 0, 0,
+ 240, 255, 255, 255, 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255,
+ 225, 159, 249, 255, 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16,
+ 224, 135, 249, 255, 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0,
+ 224, 191, 251, 255, 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2,
+ 224, 159, 249, 255, 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214,
+ 24, 199, 255, 3, 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7,
+ 3, 0, 0, 0, 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64,
+ 3, 0, 6, 0, 240, 223, 253, 255, 255, 255, 255, 39, 0, 64, 112, 128,
+ 3, 0, 0, 252, 224, 255, 127, 252, 255, 255, 251, 47, 127, 0, 0, 0,
+ 254, 255, 255, 255, 255, 255, 13, 0, 214, 247, 255, 255, 175, 255, 13, 32,
+ 95, 0, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 0, 0,
+ 0, 31, 0, 0, 255, 7, 0, 128, 0, 0, 63, 60, 98, 192, 225, 255,
+ 3, 64, 0, 0, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 255, 7, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
+ 255, 223, 3, 0, 255, 255, 3, 0, 255, 223, 1, 0, 255, 255, 15, 0,
+ 0, 0, 128, 16, 255, 5, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0, 255, 255, 127, 0,
+ 255, 255, 31, 0, 128, 0, 0, 0, 224, 255, 255, 255, 224, 15, 0, 0,
+ 248, 255, 255, 255, 1, 192, 0, 252, 63, 0, 0, 0, 15, 0, 0, 0,
+ 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 255, 255, 255, 231,
+ 0, 222, 111, 4, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 127, 255, 255, 31, 120, 12, 0,
+ 255, 128, 0, 0, 127, 127, 127, 127, 224, 0, 0, 0, 254, 3, 62, 31,
+ 255, 255, 127, 248, 255, 127, 0, 0, 255, 255, 255, 31, 255, 31, 255, 255,
+ 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255, 252, 255, 255, 255,
+ 255, 249, 255, 255, 252, 7, 0, 0, 0, 0, 224, 255, 187, 247, 255, 255,
+ 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 7, 0,
+ 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0, 255, 255, 127, 196,
+ 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 3, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 160,
+ 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255,
+ 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 1, 0,
+ 255, 7, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192,
+ 1, 0, 239, 254, 31, 0, 0, 0, 255, 3, 3, 0, 128, 0, 255, 255,
+ 255, 255, 255, 0, 144, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
+ 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
+ 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
+ 255, 7, 0, 1, 0, 0, 0, 128, 127, 242, 111, 255, 255, 255, 0, 128,
+ 2, 0, 0, 0, 255, 252, 255, 255, 10, 0, 0, 0, 1, 248, 255, 255,
+ 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32, 255, 253, 255, 255,
+ 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0, 191, 253, 255, 255,
+ 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224, 255, 7, 1, 0,
+ 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 3, 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 253, 255, 255, 247, 255, 31, 128, 63, 0, 64, 0, 0, 15, 8, 0, 0,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15, 3, 0, 255, 255
+};
+
+RE_UINT32 re_get_id_start(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_id_start_table_1[field_2];
+ v = re_id_start_table_2[(v << 5) | field_1];
+ v = re_id_start_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Lowercase. */
-
-static RE_UINT8 re_lowercase_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_lowercase_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 19, 20, 3, 3, 3, 3,
- 3, 3, 3, 3, 21, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_lowercase_stage_3[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 5, 13, 14, 15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 24, 25,
- 0, 26, 15, 5, 27, 5, 28, 5, 5, 29, 0, 15, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 31, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
- 0, 0, 0, 0, 30, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0,
- 5, 5, 5, 5, 33, 5, 5, 5, 34, 35, 36, 37, 35, 38, 39, 40,
- 0, 0, 0, 41, 42, 0, 0, 0, 43, 44, 45, 26, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 47, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 26, 48, 49, 5, 5, 5, 50, 15, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 52, 53, 0, 0, 0, 0, 54, 5, 55, 56, 57, 58, 59,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 60, 61, 15, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 63, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 68, 69, 81,
- 71, 72, 82, 64, 75, 83, 84, 85, 86, 82, 87, 26, 88, 75, 89, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_lowercase_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 0, 0, 0, 128,
- 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 85, 85, 171, 170, 170,
- 170, 170, 170, 212, 41, 49, 36, 78, 42, 45, 81, 230, 64, 82, 85, 181,
- 170, 170, 41, 170, 170, 170, 250, 147, 133, 170, 255, 255, 255, 255, 255, 255,
- 255, 255, 239, 255, 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 138, 60, 0, 0, 1, 0, 0, 240, 255, 255,
- 255, 127, 227, 170, 170, 170, 47, 25, 0, 0, 255, 255, 2, 168, 170, 170,
- 84, 213, 170, 170, 170, 170, 0, 0, 255, 1, 0, 0, 255, 255, 255, 231,
- 0, 0, 0, 63, 170, 170, 234, 191, 255, 0, 63, 0, 255, 0, 255, 0,
- 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64, 220, 0, 207, 0,
- 255, 0, 220, 0, 0, 0, 2, 128, 0, 0, 255, 31, 0, 196, 8, 0,
- 0, 128, 16, 50, 192, 67, 0, 0, 16, 0, 0, 0, 255, 3, 0, 0,
- 255, 255, 255, 127, 98, 21, 218, 63, 26, 80, 8, 0, 191, 32, 0, 0,
- 170, 42, 0, 0, 170, 170, 170, 58, 168, 170, 171, 170, 170, 170, 255, 149,
- 170, 80, 186, 170, 170, 130, 160, 170, 8, 0, 0, 0, 0, 0, 0, 7,
- 255, 255, 255, 247, 255, 0, 255, 255, 127, 0, 248, 0, 0, 255, 255, 255,
- 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0,
- 0, 0, 0, 252, 255, 255, 15, 0, 0, 192, 223, 255, 255, 0, 0, 0,
- 252, 255, 255, 15, 0, 0, 192, 235, 239, 255, 0, 0, 0, 252, 255, 255,
- 15, 0, 0, 192, 255, 255, 255, 0, 0, 0, 252, 255, 255, 15, 0, 0,
- 192, 255, 255, 255, 0, 192, 255, 255, 0, 0, 192, 255, 63, 0, 0, 0,
- 252, 255, 255, 247, 3, 0, 0, 240, 255, 255, 223, 15, 255, 127, 63, 0,
- 255, 253, 0, 0, 247, 11, 0, 0, 252, 255, 255, 255, 15, 0, 0, 0,
-};
+/* IDS_Trinary_Operator. */
+RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 codepoint) {
+ if (0x2FF2 <= codepoint && codepoint <= 0x2FF3)
+ return 1;
-/* Lowercase: 1000 bytes. */
-
-RE_UINT32 re_get_lowercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_lowercase_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_lowercase_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_lowercase_stage_3[pos + f] << 5;
- pos += code;
- value = (re_lowercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return 0;
}
-/* Uppercase. */
-
-static RE_UINT8 re_uppercase_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_uppercase_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12,
- 3, 3, 13, 3, 3, 3, 14, 3, 3, 3, 3, 3, 15, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 16, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 17, 18, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 20, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_uppercase_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
- 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
- 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+/* Indic_Positional_Category. */
+static RE_UINT8 re_indic_positional_category_table_1[] = {
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
- 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 0, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 19, 39, 0, 0, 0,
- 0, 0, 0, 0, 0, 40, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 41, 0, 42, 3, 3, 3, 43, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 44, 45, 0, 0, 0, 0, 46, 3, 47, 48, 49, 50, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 18, 51, 0, 0, 0, 26, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 55, 56, 57, 58, 59, 26, 60, 61, 62, 63, 64, 65, 54, 55, 56,
- 57, 66, 25, 26, 60, 57, 67, 68, 69, 70, 40, 41, 26, 71, 72, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 73, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 74, 74, 60, 0, 0, 0,
-};
-
-static RE_UINT8 re_uppercase_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
- 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
- 213, 210, 174, 17, 144, 164, 170, 74, 85, 85, 210, 85, 85, 85, 5, 108,
- 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
- 0, 128, 28, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
- 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
- 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
- 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
- 0, 255, 0, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 31, 0, 15,
- 132, 56, 39, 62, 80, 61, 15, 192, 32, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192, 5, 40, 4, 0,
- 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85, 85, 85, 0, 106,
- 85, 40, 69, 85, 85, 125, 95, 85, 116, 0, 0, 0, 255, 0, 0, 0,
- 255, 255, 15, 0, 255, 255, 7, 0, 255, 255, 255, 3, 0, 0, 240, 255,
- 255, 63, 0, 0, 0, 255, 255, 255, 3, 0, 0, 208, 100, 222, 63, 0,
- 255, 3, 0, 0, 176, 231, 223, 31, 0, 0, 0, 123, 95, 252, 1, 0,
- 0, 240, 255, 255, 63, 0, 0, 0, 3, 0, 0, 240, 1, 0, 0, 0,
- 252, 255, 255, 7, 0, 0, 0, 240, 255, 255, 31, 0, 255, 1, 0, 0,
- 0, 4, 0, 0, 3, 0, 0, 0, 255, 3, 255, 255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Uppercase: 916 bytes. */
-
-RE_UINT32 re_get_uppercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_uppercase_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_uppercase_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_uppercase_stage_3[pos + f] << 5;
- pos += code;
- value = (re_uppercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Cased. */
-
-static RE_UINT8 re_cased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_indic_positional_category_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 6, 10, 11, 9, 6, 12, 13, 5, 14, 15, 4, 16, 17, 18, 0,
+ 19, 20, 21, 4, 5, 14, 22, 4, 23, 24, 25, 4, 5, 0, 26, 27,
+ 0, 28, 29, 0, 0, 30, 31, 0, 32, 33, 0, 34, 35, 36, 37, 0,
+ 0, 38, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 43, 43, 0, 44, 45, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 47, 48, 0,
+ 49, 0, 50, 51, 0, 0, 0, 0, 52, 53, 54, 55, 56, 57, 0, 58,
+ 0, 59, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 65, 0, 0, 66, 67, 68, 69, 0, 70, 71, 0, 1, 72, 73, 74,
+ 0, 75, 76, 77, 0, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 81,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 85, 86, 0, 56, 87, 0, 0, 88, 89, 90, 91, 56, 92, 93, 0,
+ 0, 94, 0, 0, 0, 0, 95, 96, 23, 97, 98, 99, 0, 0, 0, 0,
+ 0, 100, 101, 0, 0, 102, 103, 0, 0, 0, 0, 0, 0, 104, 105, 0,
+ 0, 106, 107, 0, 0, 108, 0, 0, 109, 110, 0, 0, 0, 0, 0, 0,
+ 0, 111, 0, 0, 0, 0, 0, 0, 0, 112, 113, 0, 0, 0, 114, 115,
+ 116, 117, 118, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 120, 0, 0, 121, 122, 0, 0, 0, 123, 124, 0, 125, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_cased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+static RE_UINT8 re_indic_positional_category_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 2, 4,
+ 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 2,
+ 0, 1, 3, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 4,
+ 2, 3, 3, 3, 3, 0, 0, 4, 4, 0, 0, 5, 5, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 3, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 3, 3, 3, 1, 0, 1, 1, 6, 0, 2, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 1,
+ 2, 3, 3, 3, 3, 0, 0, 4, 7, 0, 0, 5, 8, 3, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 1, 2, 2, 0, 0, 0, 4, 4, 4, 0, 5, 5, 5, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 2, 2, 2, 2, 0, 1, 1, 9, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 2, 2, 2, 2, 0, 1, 6, 6, 0, 6, 6, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2,
+ 2, 2, 2, 3, 3, 0, 4, 4, 4, 0, 5, 5, 5, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2,
+ 2, 2, 1, 1, 3, 0, 3, 0, 2, 4, 7, 4, 5, 8, 5, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 1, 3, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 3, 0, 1, 0, 0, 0, 0, 2, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 1, 9, 3, 3, 9, 9, 9, 9, 1, 1, 1, 1, 1, 2,
+ 1, 9, 1, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 19, 20, 3, 3, 3, 3,
- 3, 3, 3, 3, 21, 3, 3, 3, 22, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_cased_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 5, 6, 4,
- 4, 4, 4, 4, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 4, 15,
- 4, 4, 4, 4, 16, 4, 4, 4, 4, 17, 18, 4, 19, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 22,
- 0, 0, 0, 0, 23, 21, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4, 22, 4, 24, 25, 4, 26, 27, 28,
- 0, 0, 0, 29, 30, 0, 0, 0, 31, 32, 33, 4, 34, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 4, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 37, 38, 4, 4, 4, 4, 39, 4, 40, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 41, 25, 0, 0, 0, 0, 42, 4, 4, 43, 4, 44, 45,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 5, 47, 4, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 4, 4, 49, 0, 0, 46, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 52, 4, 52, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 53, 4, 54, 55, 56, 4, 57, 58, 59, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 60, 61, 5, 53, 53, 37, 37, 62, 62, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 65, 65, 36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 3,
+ 3, 4, 1, 1, 1, 1, 1, 3, 2, 0, 1, 2, 11, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 3, 3, 0, 0, 0, 0, 3, 3,
+ 3, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 2, 4, 1, 1, 2, 2, 2, 2, 2, 2, 3, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 3, 3, 3, 7, 8,
+ 5, 4, 4, 4, 5, 5, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 1, 1, 3, 2, 2, 6, 6, 1, 1, 2, 2, 2, 0, 0, 0, 0,
+ 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 1, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 10, 10, 10, 2, 2, 10, 2, 2, 2, 2, 2,
+ 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 2, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 3, 2, 1, 1, 1, 3, 3, 3, 3, 0,
+ 0, 2, 1, 2, 2, 1, 1, 1, 1, 3, 3, 1, 3, 2, 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3,
+ 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 1, 1, 3, 3, 3, 12, 9, 13, 4, 4,
+ 5, 5, 1, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 3, 1, 3, 4, 2, 1, 1, 2, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1,
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 4, 4, 7, 2, 2, 3, 1, 1, 1,
+ 1, 1, 1, 1, 4, 4, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 14, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3,
+ 1, 2, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 3, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 1, 3, 3, 3, 3, 1,
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 2, 2, 1, 1, 3, 3, 4, 4, 1, 3, 12, 15,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 1, 4,
+ 4, 1, 3, 2, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 1, 1, 3, 10, 10, 1, 1, 10, 2, 10, 10, 2, 1, 1,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 1, 4, 2,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 1, 2, 2, 3, 2, 2, 0, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 3, 3, 0, 1, 14, 0, 0, 0, 0, 0, 3, 3, 3, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0,
+ 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 4, 2, 3, 3, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 4, 1, 9, 9,
+ 1, 3, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 4, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 6,
+ 2, 0, 1, 1, 0, 0, 0, 0, 0, 3, 3, 1, 3, 0, 4, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3,
+ 1, 1, 6, 6, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 2, 4, 2, 3, 3, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 2, 2,
+ 1, 2, 2, 2, 2, 0, 0, 4, 4, 0, 0, 5, 5, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 4, 2, 3, 3, 3, 3, 3, 3, 1, 1,
+ 2, 2, 3, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 4, 2, 3, 3, 3, 3, 3, 3, 4, 1, 7, 5, 2, 5, 1,
+ 1, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 4, 2, 3, 3, 3, 3, 0, 0, 4, 7, 5, 8, 1, 1, 2, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 1, 2, 3,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 4, 2,
+ 3, 3, 1, 1, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 1,
+ 2, 2, 1, 1, 3, 3, 4, 1, 3, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 2, 3,
+ 3, 3, 3, 1, 1, 1, 1, 1, 2, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 4, 0, 4, 5, 0, 0, 1, 1, 2, 0, 1,
+ 2, 1, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 4, 2, 3, 3, 3, 3, 0, 0, 1, 1, 2, 2, 2, 2,
+ 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 3, 1, 1, 1, 1, 2, 1, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 3, 3, 1, 1, 1, 2, 2, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 1, 1, 3, 3, 3, 3, 3, 0, 1, 1, 1, 1, 1, 1, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 2, 3, 3, 3, 3, 3, 3,
+ 3, 4, 3, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 3, 0, 0, 0, 1, 0, 1, 1, 0, 1,
+ 1, 1, 3, 1, 3, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0,
+ 1, 1, 0, 2, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 3, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_cased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 255, 255, 255, 247, 240, 255, 255, 255, 255, 255, 239, 255,
- 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 207, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
- 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 0, 255, 1, 0, 0,
- 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
- 63, 63, 255, 170, 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15,
- 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
- 80, 189, 31, 242, 224, 67, 0, 0, 24, 0, 0, 0, 0, 0, 192, 255,
- 255, 3, 0, 0, 255, 127, 255, 255, 255, 255, 255, 127, 31, 120, 12, 0,
- 191, 32, 0, 0, 255, 63, 0, 0, 252, 255, 255, 255, 255, 120, 255, 255,
- 124, 0, 0, 0, 0, 0, 0, 7, 0, 0, 255, 255, 255, 0, 255, 255,
- 127, 0, 248, 0, 255, 255, 0, 0, 255, 255, 15, 255, 255, 255, 255, 15,
- 255, 255, 7, 0, 255, 255, 223, 255, 255, 255, 255, 223, 100, 222, 255, 235,
- 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
- 63, 255, 255, 255, 253, 255, 255, 247, 255, 253, 255, 255, 247, 15, 0, 0,
- 15, 0, 0, 0, 255, 3, 255, 255,
-};
+RE_UINT32 re_get_indic_positional_category(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-/* Cased: 912 bytes. */
-
-RE_UINT32 re_get_cased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_cased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_cased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_cased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_cased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-/* Case_Ignorable. */
+ v = re_indic_positional_category_table_1[field_2];
+ v = re_indic_positional_category_table_2[(v << 5) | field_1];
+ v = re_indic_positional_category_table_3[(v << 5) | field_0];
-static RE_UINT8 re_case_ignorable_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9, 10,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ return v;
+}
-static RE_UINT8 re_case_ignorable_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 1, 17, 1, 1, 1, 18, 19, 20, 21, 22, 23, 24, 1, 25,
- 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 28, 29, 1,
- 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Indic_Syllabic_Category. */
+static RE_UINT8 re_indic_syllabic_category_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 31, 1, 1, 1, 32, 1, 33, 34, 35, 36, 37, 38, 1, 1, 1, 1,
+ 1, 1, 11, 1, 12, 13, 14, 15, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39, 1, 1, 40, 41,
- 1, 42, 43, 44, 1, 1, 1, 1, 1, 1, 45, 1, 1, 46, 1, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 64, 1, 1, 1, 65,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 66, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 67, 68, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1,
- 70, 71, 72, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 76, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_case_ignorable_stage_3[] = {
- 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 6, 6, 6, 6, 6, 7, 8, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 14,
- 15, 0, 16, 17, 0, 0, 18, 19, 20, 5, 21, 0, 0, 22, 0, 23,
- 24, 25, 26, 0, 0, 0, 27, 6, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 33, 37, 38, 36, 33, 39, 40, 32, 41, 42, 43, 44, 0, 45, 0,
- 46, 47, 48, 43, 32, 41, 49, 43, 50, 51, 34, 43, 0, 0, 52, 0,
- 0, 53, 54, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 62, 0,
- 0, 63, 64, 65, 66, 0, 0, 33, 0, 0, 67, 0, 0, 0, 0, 0,
- 68, 68, 69, 69, 0, 70, 71, 0, 72, 0, 73, 0, 74, 75, 0, 0,
- 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 78, 79, 0, 80, 0, 0,
- 81, 82, 44, 83, 50, 84, 0, 85, 0, 86, 0, 87, 0, 0, 88, 89,
- 0, 90, 6, 91, 92, 6, 6, 93, 0, 0, 0, 0, 0, 94, 95, 96,
- 97, 98, 0, 99, 100, 0, 5, 101, 0, 0, 0, 102, 0, 0, 0, 103,
- 0, 0, 0, 104, 0, 0, 0, 6, 0, 105, 0, 0, 0, 0, 0, 0,
- 106, 107, 0, 0, 108, 0, 0, 109, 110, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 87, 111, 0, 0, 112, 113, 0, 0, 114,
- 6, 50, 0, 17, 115, 0, 0, 57, 116, 74, 0, 0, 0, 0, 117, 118,
- 0, 119, 120, 0, 28, 121, 105, 74, 0, 122, 123, 124, 0, 125, 126, 127,
- 0, 0, 92, 0, 0, 0, 0, 128, 2, 0, 0, 0, 0, 129, 50, 0,
- 130, 131, 132, 0, 0, 0, 0, 133, 1, 2, 3, 17, 47, 0, 0, 134,
- 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 136, 0, 0, 0, 0, 137, 138, 0, 0, 0, 0, 0, 74,
- 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 32, 140, 141, 133, 50, 142, 143, 0, 28, 144, 0, 145, 50, 146, 147, 0,
- 0, 148, 0, 0, 0, 0, 133, 149, 50, 51, 3, 150, 0, 0, 0, 0,
- 0, 140, 151, 0, 0, 152, 153, 0, 0, 0, 0, 0, 0, 154, 155, 0,
- 0, 156, 3, 0, 0, 157, 0, 0, 67, 158, 0, 0, 0, 0, 0, 0,
- 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 3,
- 161, 162, 163, 0, 164, 0, 0, 0, 0, 165, 0, 0, 129, 166, 0, 0,
- 0, 167, 168, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
- 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
- 0, 173, 81, 0, 0, 0, 0, 0, 0, 0, 105, 0, 174, 0, 0, 175,
- 0, 0, 0, 0, 176, 81, 0, 0, 0, 0, 0, 177, 178, 179, 0, 0,
- 0, 0, 180, 0, 0, 0, 0, 0, 6, 181, 6, 182, 183, 184, 0, 0,
- 185, 186, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 173, 0,
- 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
- 32, 6, 6, 6, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 131,
-};
-
-static RE_UINT8 re_case_ignorable_stage_4[] = {
- 0, 0, 0, 0, 128, 64, 0, 4, 0, 0, 0, 64, 1, 0, 0, 0,
- 0, 161, 144, 1, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 48, 4,
- 176, 0, 0, 0, 248, 3, 0, 0, 0, 0, 0, 2, 0, 0, 254, 255,
- 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 16, 0, 63, 0, 255, 23,
- 1, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 191, 255, 61, 0, 0,
- 0, 128, 2, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 36,
- 0, 0, 192, 255, 255, 63, 0, 0, 0, 0, 0, 14, 0, 0, 248, 255,
- 7, 0, 0, 0, 0, 0, 0, 20, 254, 33, 254, 0, 12, 0, 2, 0,
- 2, 0, 0, 0, 0, 0, 0, 16, 30, 32, 0, 0, 12, 0, 0, 64,
- 6, 0, 0, 0, 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0,
- 12, 0, 0, 252, 0, 0, 0, 144, 30, 32, 64, 0, 12, 0, 0, 0,
- 4, 0, 0, 0, 1, 32, 0, 0, 17, 0, 0, 0, 0, 0, 0, 192,
- 193, 61, 96, 0, 64, 48, 0, 0, 3, 0, 0, 0, 0, 0, 0, 24,
- 0, 4, 92, 0, 0, 0, 242, 7, 192, 127, 0, 0, 0, 0, 242, 31,
- 64, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
- 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
- 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
- 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 143, 32,
- 0, 120, 0, 0, 8, 0, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0,
- 135, 1, 4, 14, 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159,
- 128, 0, 255, 127, 15, 0, 0, 0, 0, 0, 208, 23, 0, 248, 15, 0,
- 60, 59, 0, 0, 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 0, 63,
- 0, 0, 247, 255, 253, 33, 16, 3, 0, 240, 255, 255, 255, 7, 0, 1,
- 0, 0, 0, 248, 255, 255, 255, 251, 0, 0, 0, 160, 3, 224, 0, 224,
- 0, 224, 0, 96, 0, 248, 0, 3, 144, 124, 0, 0, 223, 255, 2, 128,
- 0, 0, 255, 31, 255, 255, 1, 0, 0, 0, 0, 48, 0, 128, 3, 0,
- 0, 128, 0, 128, 0, 128, 0, 0, 32, 0, 0, 0, 0, 60, 62, 8,
- 0, 0, 0, 126, 0, 0, 0, 112, 0, 0, 32, 0, 0, 16, 0, 0,
- 0, 128, 247, 191, 0, 0, 0, 240, 0, 0, 3, 0, 0, 7, 0, 0,
- 68, 8, 0, 0, 48, 0, 0, 0, 255, 255, 3, 128, 192, 63, 0, 0,
- 128, 255, 3, 0, 0, 0, 200, 51, 0, 126, 102, 0, 8, 16, 0, 0,
- 0, 0, 1, 16, 0, 0, 157, 193, 2, 0, 0, 32, 0, 48, 88, 0,
- 32, 33, 0, 0, 0, 0, 252, 255, 255, 255, 8, 0, 255, 255, 0, 0,
- 0, 0, 36, 0, 0, 0, 0, 128, 8, 0, 0, 14, 0, 0, 0, 32,
- 0, 0, 192, 7, 110, 240, 0, 0, 0, 0, 0, 135, 240, 0, 0, 0,
- 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 120, 38, 0, 32, 0, 0,
- 128, 239, 31, 0, 0, 0, 8, 0, 0, 0, 192, 127, 0, 30, 0, 0,
- 0, 128, 211, 64, 248, 7, 0, 0, 192, 31, 31, 0, 92, 0, 0, 64,
- 0, 0, 248, 133, 13, 0, 0, 0, 0, 0, 60, 176, 1, 0, 0, 48,
- 0, 0, 248, 167, 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6,
- 0, 0, 240, 12, 254, 7, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14,
- 0, 252, 127, 3, 0, 0, 127, 191, 255, 252, 109, 0, 0, 0, 126, 180,
- 191, 0, 0, 0, 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 255, 1,
- 0, 0, 31, 0, 0, 0, 127, 0, 0, 128, 255, 255, 11, 0, 0, 0,
- 0, 0, 0, 96, 128, 3, 248, 255, 231, 15, 0, 0, 0, 60, 0, 0,
- 28, 0, 0, 0, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
- 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 0, 0, 255, 63,
- 0, 240, 0, 0, 240, 15, 0, 0,
-};
-
-/* Case_Ignorable: 1904 bytes. */
-
-RE_UINT32 re_get_case_ignorable(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_case_ignorable_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_case_ignorable_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_case_ignorable_stage_3[pos + f] << 5;
- pos += code;
- value = (re_case_ignorable_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Changes_When_Lowercased. */
-
-static RE_UINT8 re_changes_when_lowercased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_changes_when_lowercased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12,
- 3, 3, 13, 3, 3, 3, 14, 3, 3, 3, 3, 3, 15, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 16, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 17, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+static RE_UINT8 re_indic_syllabic_category_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 17, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 27, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 0, 48, 49, 50, 51, 52, 53, 0,
+ 54, 55, 56, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 54, 63, 64, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 68, 69, 54, 70, 71, 0,
+ 72, 54, 73, 74, 75, 0, 0, 0, 76, 77, 78, 0, 79, 80, 54, 81,
+ 54, 82, 83, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 0, 0, 86,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 0, 0, 88, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 0, 103, 104, 105, 106,
+ 107, 108, 109, 110, 54, 111, 112, 113, 0, 0, 0, 0, 0, 0, 114, 115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 119, 120, 121, 122, 123, 124, 0, 0, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 0, 0, 135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0,
+ 143, 144, 145, 146, 147, 148, 149, 0, 0, 0, 0, 0, 143, 150, 151, 0,
+ 143, 152, 153, 0, 154, 155, 65, 0, 156, 157, 0, 0, 0, 0, 0, 0,
+ 154, 158, 0, 0, 0, 0, 0, 0, 159, 160, 161, 0, 0, 162, 163, 164,
+ 165, 166, 167, 54, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 169, 170, 171, 172, 173, 174, 0, 0, 175, 176, 177, 178, 179, 65, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_lowercased_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
- 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
- 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+static RE_UINT8 re_indic_syllabic_category_table_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
- 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 30, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 19, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 39, 0, 40, 3, 3, 3, 41, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 42, 43, 0, 0, 0, 0, 44, 3, 45, 46, 47, 48, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 18, 49, 0, 0, 0, 26, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 52, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_changes_when_lowercased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
- 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
- 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85, 85, 85, 5, 108,
- 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
- 0, 128, 0, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
- 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
- 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
- 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
- 0, 255, 0, 0, 0, 255, 0, 31, 0, 31, 0, 15, 0, 31, 0, 31,
- 64, 12, 4, 0, 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0,
- 157, 234, 37, 192, 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5,
- 84, 85, 84, 85, 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85,
- 116, 0, 0, 0, 255, 0, 0, 0, 255, 255, 15, 0, 255, 255, 7, 0,
- 3, 0, 0, 0,
-};
-
-/* Changes_When_Lowercased: 764 bytes. */
-
-RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_lowercased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_lowercased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_lowercased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_lowercased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Changes_When_Uppercased. */
-
-static RE_UINT8 re_changes_when_uppercased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 8, 8,
+ 0, 12, 12, 0, 0, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 1, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0, 8, 8, 11, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 7, 0, 7,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 0,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 0, 7, 7, 0, 7, 7, 0, 0, 9, 0, 8, 8,
+ 8, 8, 8, 0, 0, 0, 0, 8, 8, 0, 0, 8, 8, 11, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4, 14, 1, 1, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6,
+ 6, 6, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 0, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 12, 12, 12, 9, 9, 9,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 8, 8, 8, 0, 0, 0, 0, 7, 7, 0, 7,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 16, 0, 6, 6, 6, 6, 6, 6, 0, 0, 0, 6, 6,
+ 6, 0, 6, 6, 6, 7, 0, 0, 0, 7, 7, 0, 7, 0, 7, 7,
+ 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 7, 0, 0, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 8, 8,
+ 8, 8, 8, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6,
+ 6, 0, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 8, 8, 0, 7, 7, 7, 0, 0, 0, 0, 0,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6,
+ 6, 0, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 0, 0, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 7, 0,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 18, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 11, 19, 0,
+ 0, 0, 0, 0, 13, 13, 13, 8, 0, 0, 0, 0, 0, 0, 0, 6,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 11, 0, 0, 0, 0, 8,
+ 8, 8, 8, 8, 8, 0, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 0, 8, 20, 20, 20, 20, 21, 4, 18, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 7, 7, 0, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 8, 15, 15, 0, 0,
+ 8, 8, 8, 8, 8, 0, 0, 0, 20, 20, 20, 20, 0, 4, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 7, 7, 7, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 0, 3, 0, 3, 0, 9, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 5,
+ 8, 8, 4, 4, 18, 10, 0, 0, 22, 22, 22, 22, 22, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 4, 20, 5, 24, 18, 15, 15, 15, 15, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 1, 0,
+ 7, 7, 6, 6, 6, 6, 8, 8, 8, 8, 7, 7, 7, 7, 15, 15,
+ 15, 7, 8, 20, 20, 7, 7, 8, 8, 20, 20, 20, 20, 20, 7, 7,
+ 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 15, 8, 8, 8, 8, 20, 20, 20, 20, 20, 20, 20, 7, 20,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 20, 8, 8, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 8, 8, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 8, 8, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 4, 5, 8, 25, 25, 3, 26, 21, 3, 3,
+ 3, 18, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 23, 23, 23, 0, 0, 0, 0,
+ 27, 27, 4, 27, 27, 27, 27, 27, 27, 27, 8, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0,
+ 29, 29, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 27, 27, 27, 27, 27, 27, 27, 20, 20, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6,
+ 6, 6, 6, 7, 7, 15, 15, 23, 27, 27, 30, 23, 23, 23, 23, 0,
+ 24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 4, 20, 20, 20, 20, 20, 18, 3, 3, 0, 0, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 26, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 11, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 4, 26, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 23, 23, 23, 8, 8, 8, 8, 8, 8, 18, 24, 23, 23, 7, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 7, 7, 7, 27, 27,
+ 7, 7, 7, 7, 6, 6, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 27, 27, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 23, 23, 8, 8, 8, 8, 8, 8, 8, 27, 27, 27,
+ 27, 27, 27, 27, 4, 4, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 7, 7, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 13, 12, 17, 17, 12, 12, 12, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 8, 6, 6, 6, 11, 7, 7, 7, 7, 4, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 8, 8, 8, 8, 8, 0, 0, 0, 0, 18, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 28, 28,
+ 28, 28, 7, 7, 7, 7, 28, 23, 23, 7, 7, 7, 7, 7, 7, 7,
+ 7, 23, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 20, 20, 20, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 27,
+ 27, 27, 27, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 26, 5, 6, 6, 6, 6, 6, 7, 7, 7, 6, 6, 6, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 15, 15, 15,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 8, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 0,
+ 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 7, 7, 7, 1, 1, 1, 0, 0, 0, 7, 20, 20, 20, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20,
+ 29, 20, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 5, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
+ 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 27, 27, 27, 27, 27,
+ 27, 27, 27, 8, 8, 8, 8, 8, 8, 8, 8, 0, 20, 18, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 8, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 4, 5,
+ 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 0, 9, 9, 9, 0, 0, 0, 0, 24,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 5, 17, 17, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,
+ 4, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 9, 0, 0, 0, 0, 0,
+ 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 24, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 28, 28, 28, 28, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 11, 10, 35, 35, 0, 0, 0, 0, 0, 3, 9, 8, 8, 0, 8, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 8, 8, 8, 8, 4, 11, 9, 14, 0, 0, 0, 0, 0, 0, 12, 0,
+ 6, 6, 6, 6, 7, 7, 7, 0, 7, 0, 7, 7, 7, 7, 0, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 18, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 9, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 4, 4,
+ 6, 6, 8, 8, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0,
+ 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 11, 4, 4, 5, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 4,
+ 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4,
+ 4, 5, 11, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
+ 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 4, 4, 5, 11,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 8, 8, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 5, 11,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 5, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 11, 9, 7, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 15, 15, 15,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 4, 5, 11, 9, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 0, 0, 6, 0, 0, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 0, 8, 8, 0, 0, 4, 4, 18, 24, 35,
+ 15, 19, 15, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6, 6, 6, 6, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 4, 5,
+ 11, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 3, 18, 4, 4, 4, 4, 5, 35, 15, 15, 15, 15, 1,
+ 0, 0, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7,
+ 7, 7, 7, 7, 35, 35, 35, 35, 35, 35, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 4, 5, 14, 24, 0, 0, 0, 10, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 8, 4, 4, 5, 11,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
+ 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23, 23,
+ 8, 8, 8, 8, 8, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 0, 0, 0, 8, 0, 8, 8, 0, 8,
+ 4, 5, 9, 8, 18, 24, 19, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6, 6, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 0,
+ 8, 8, 0, 8, 8, 4, 5, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 1, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_uppercased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_changes_when_uppercased_stage_3[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
- 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, 0,
- 5, 5, 5, 5, 35, 5, 5, 5, 36, 37, 38, 39, 24, 40, 41, 42,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 23, 43, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 44, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 45, 46, 5, 5, 5, 47, 24, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 49, 50, 0, 0, 0, 0, 51, 5, 52, 53, 54, 55, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 23, 24, 24, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 58, 59, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_changes_when_uppercased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
- 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
- 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 96, 91, 85, 181,
- 170, 170, 45, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
- 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
- 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
- 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
- 254, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 231, 0, 0, 0, 63,
- 255, 1, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15,
- 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63,
- 255, 255, 223, 80, 220, 16, 207, 0, 255, 0, 220, 16, 16, 0, 0, 0,
- 255, 3, 0, 0, 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0,
- 191, 32, 0, 0, 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170,
- 170, 170, 0, 148, 170, 16, 154, 170, 170, 2, 160, 170, 8, 0, 0, 0,
- 0, 0, 8, 0, 127, 0, 248, 0, 0, 255, 255, 255, 255, 255, 0, 0,
- 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0, 252, 255, 255, 255,
- 15, 0, 0, 0,
-};
+ v = re_indic_syllabic_category_table_1[field_2];
+ v = re_indic_syllabic_category_table_2[(v << 5) | field_1];
+ v = re_indic_syllabic_category_table_3[(v << 5) | field_0];
-/* Changes_When_Uppercased: 844 bytes. */
-
-RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_uppercased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_uppercased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_uppercased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_uppercased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* Changes_When_Titlecased. */
-
-static RE_UINT8 re_changes_when_titlecased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+/* Join_Control. */
+RE_UINT32 re_get_join_control(RE_UINT32 codepoint) {
+ if (0x200C <= codepoint && codepoint <= 0x200D)
+ return 1;
-static RE_UINT8 re_changes_when_titlecased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 5, 6,
- 7, 3, 8, 3, 3, 3, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 10, 3, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 3, 13,
- 3, 3, 14, 3, 3, 3, 15, 3, 3, 3, 3, 3, 16, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 17, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+ return 0;
+}
-static RE_UINT8 re_changes_when_titlecased_stage_3[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
- 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
+/* Joining_Group. */
+static RE_UINT8 re_joining_group_table_1[] = {
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_joining_group_table_2[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
- 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0,
- 5, 5, 5, 5, 34, 5, 5, 5, 35, 36, 37, 38, 36, 39, 40, 41,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 23, 42, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 43, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 44, 45, 5, 5, 5, 46, 24, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 48, 49, 0, 0, 0, 0, 50, 5, 51, 52, 53, 54, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 23, 24, 24, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 57, 58, 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0,
+ 0, 0, 0, 12, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_titlecased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
- 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
- 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 208, 86, 85, 181,
- 170, 170, 43, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
- 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
- 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
- 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
- 254, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 63, 255, 1, 0, 0,
- 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15, 255, 0, 63, 0,
- 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64,
- 220, 0, 207, 0, 255, 0, 220, 0, 16, 0, 0, 0, 255, 3, 0, 0,
- 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0, 191, 32, 0, 0,
- 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170, 170, 170, 0, 148,
- 170, 16, 154, 170, 170, 2, 160, 170, 8, 0, 0, 0, 0, 0, 8, 0,
- 127, 0, 248, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255,
- 255, 255, 255, 15, 255, 255, 7, 0, 252, 255, 255, 255, 15, 0, 0, 0,
+static RE_UINT8 re_joining_group_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 2, 2, 3, 2, 1, 2, 4, 5, 4, 4, 6, 6, 6, 7,
+ 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14,
+ 0, 15, 16, 17, 18, 19, 20, 21, 3, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16,
+ 0, 2, 2, 2, 0, 2, 3, 3, 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 10, 10, 11,
+ 12, 15, 15, 15, 15, 15, 15, 16, 16, 13, 22, 13, 17, 17, 17, 13,
+ 13, 13, 13, 13, 13, 18, 18, 18, 18, 20, 20, 20, 20, 23, 24, 6,
+ 5, 25, 25, 26, 3, 3, 3, 3, 3, 3, 3, 3, 14, 27, 14, 3,
+ 1, 1, 28, 28, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 12, 0, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 0, 30, 31, 31, 32, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 32, 51, 52, 30, 31, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 55,
+ 4, 4, 4, 4, 4, 4, 4, 6, 6, 7, 7, 8, 9, 12, 12, 12,
+ 15, 15, 13, 13, 13, 19, 19, 20, 20, 20, 18, 8, 8, 9, 6, 6,
+ 9, 8, 6, 2, 2, 14, 14, 1, 3, 3, 56, 56, 6, 9, 9, 17,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 6, 11, 15, 16, 18, 19, 1, 1, 8, 3, 68, 0, 7, 10,
+ 13, 69, 8, 12, 17, 0, 4, 4, 4, 8, 1, 70, 71, 72, 4, 4,
+ 4, 6, 13, 12, 71, 6, 6, 18, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 73, 74, 74, 75, 75, 76, 0, 77, 0, 78, 78, 0, 0, 79, 80, 81,
+ 82, 82, 82, 83, 84, 85, 86, 87, 88, 89, 89, 90, 90, 91, 92, 92,
+ 92, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 96, 97, 98, 99,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 100, 0, 101, 0,
+ 101, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Changes_When_Titlecased: 824 bytes. */
-
-RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_titlecased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_titlecased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_titlecased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_titlecased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+RE_UINT32 re_get_joining_group(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-/* Changes_When_Casefolded. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_changes_when_casefolded_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ v = re_joining_group_table_1[field_2];
+ v = re_joining_group_table_2[(v << 5) | field_1];
+ v = re_joining_group_table_3[(v << 5) | field_0];
-static RE_UINT8 re_changes_when_casefolded_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+ return v;
+}
-static RE_UINT8 re_changes_when_casefolded_stage_3[] = {
- 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
- 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
- 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 20, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
- 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 20, 36, 37, 38,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 21, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 41, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 42, 0, 43, 4, 4, 4, 44, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 50, 51, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 20, 20, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 20, 54, 0, 0, 0, 52, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 20, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 57, 0, 0, 0, 0, 0, 0,
+/* Joining_Type. */
+static RE_UINT8 re_joining_type_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15,
+ 16, 9, 17, 18, 19, 20, 21, 22, 9, 9, 9, 9, 9, 23, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24, 25, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 26,
+ 9, 9, 9, 9, 27, 9, 28, 9, 29, 9, 30, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 31, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_changes_when_casefolded_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
- 85, 85, 85, 85, 85, 85, 85, 170, 170, 86, 85, 85, 85, 85, 85, 171,
- 214, 206, 219, 177, 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85,
- 85, 85, 5, 108, 122, 85, 0, 0, 32, 0, 0, 0, 0, 0, 69, 128,
- 64, 215, 254, 255, 251, 15, 0, 0, 4, 128, 99, 85, 85, 85, 179, 230,
- 255, 255, 255, 255, 255, 255, 0, 0, 1, 84, 85, 85, 171, 42, 85, 85,
- 85, 85, 254, 255, 255, 255, 127, 0, 128, 0, 0, 0, 191, 32, 0, 0,
- 0, 0, 0, 63, 255, 1, 255, 255, 255, 255, 255, 231, 85, 85, 21, 76,
- 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170, 0, 255, 0, 0,
- 255, 255, 156, 31, 156, 31, 0, 15, 0, 31, 156, 31, 64, 12, 4, 0,
- 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192,
- 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85,
- 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85, 116, 0, 0, 0,
- 0, 0, 255, 255, 127, 0, 248, 0, 255, 0, 0, 0, 255, 255, 15, 0,
- 255, 255, 7, 0, 3, 0, 0, 0,
+static RE_UINT8 re_joining_type_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 21, 22,
+ 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 35, 39, 40, 38, 35, 41, 42, 34, 43, 44, 33, 45, 0, 46, 0,
+ 47, 48, 49, 33, 34, 43, 50, 33, 51, 52, 36, 33, 34, 0, 53, 0,
+ 0, 54, 55, 0, 0, 56, 57, 0, 58, 59, 0, 60, 61, 62, 63, 0,
+ 0, 64, 65, 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 70, 70, 0, 71, 72, 0,
+ 73, 13, 13, 74, 75, 76, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0,
+ 78, 0, 79, 80, 0, 81, 82, 0, 83, 84, 45, 85, 51, 86, 0, 87,
+ 0, 88, 0, 0, 0, 0, 89, 90, 0, 0, 0, 0, 0, 0, 2, 91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 93, 0, 94, 0, 0, 81, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 98, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 100, 48, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 102, 103, 13, 104, 0, 0, 105, 106, 0, 107, 108, 0, 30, 109, 0, 110,
+ 0, 111, 112, 35, 0, 113, 34, 114, 0, 0, 0, 0, 0, 0, 0, 115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
+ 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 119, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 120, 121, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 124, 125, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 128, 0, 0, 0, 129, 130, 0, 0, 131, 132, 0,
+ 34, 133, 134, 97, 51, 135, 0, 0, 30, 136, 0, 137, 51, 138, 139, 0,
+ 0, 140, 0, 0, 0, 0, 97, 141, 51, 52, 82, 142, 0, 0, 0, 0,
+ 0, 133, 143, 0, 0, 144, 145, 0, 0, 0, 0, 0, 0, 146, 147, 0,
+ 0, 148, 82, 0, 0, 149, 0, 0, 68, 150, 0, 0, 0, 0, 0, 0,
+ 0, 151, 0, 0, 0, 0, 0, 0, 0, 152, 153, 0, 0, 0, 154, 82,
+ 155, 156, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 159, 0, 0, 160, 161, 0, 0, 0, 162, 163, 0, 164, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 171,
+ 0, 0, 0, 0, 172, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 98, 0, 0,
+ 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 176, 2, 177, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 180, 181, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 168, 0, 13, 13, 183, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Changes_When_Casefolded: 816 bytes. */
-
-RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_casefolded_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_casefolded_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_casefolded_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_casefolded_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Changes_When_Casemapped. */
-
-static RE_UINT8 re_changes_when_casemapped_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
+static RE_UINT8 re_joining_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
+ 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 2, 0, 3, 3, 3, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 3,
+ 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 1, 3, 3, 3, 0, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3,
+ 2, 2, 3, 3, 0, 3, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 3, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
+ 2, 3, 2, 3, 3, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 2, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0,
+ 2, 0, 2, 2, 2, 2, 0, 3, 2, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 0, 3, 2,
+ 2, 3, 3, 2, 2, 0, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 4, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
+ 2, 2, 2, 2, 2, 3, 0, 3, 0, 3, 3, 0, 0, 5, 3, 3,
+ 3, 3, 3, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 3, 2, 2,
+ 2, 3, 0, 0, 3, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 2, 3, 3,
+ 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 2, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 2, 2, 3, 3, 3, 0, 2, 3, 3, 2, 2, 3, 2, 2,
+ 0, 2, 3, 3, 2, 0, 0, 0, 0, 3, 2, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
+ 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_casemapped_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+RE_UINT32 re_get_joining_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_changes_when_casemapped_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 5, 4, 4, 6, 7, 8, 4,
- 4, 9, 10, 11, 12, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
- 4, 4, 4, 4, 19, 4, 4, 4, 4, 20, 21, 22, 23, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 26,
- 0, 0, 0, 0, 27, 25, 0, 0, 0, 0, 0, 28, 29, 0, 0, 0,
- 4, 4, 4, 4, 30, 4, 4, 4, 26, 4, 31, 32, 4, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 29, 4, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 4, 39, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 40, 41, 42, 4, 4, 4, 43, 4, 44, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 40, 50, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 4, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 4, 4, 54, 0, 0, 52, 55, 46, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 56, 4, 56, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 57, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_changes_when_casemapped_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
- 255, 255, 255, 255, 255, 255, 255, 254, 255, 223, 255, 247, 255, 243, 255, 179,
- 240, 255, 255, 255, 253, 255, 15, 252, 255, 255, 223, 26, 107, 159, 38, 32,
- 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 207, 184, 64, 215, 255, 255,
- 251, 255, 255, 255, 255, 255, 227, 255, 255, 255, 191, 239, 3, 252, 255, 255,
- 255, 255, 254, 255, 255, 255, 127, 0, 254, 255, 255, 255, 255, 0, 0, 0,
- 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
- 0, 0, 0, 34, 0, 64, 0, 0, 255, 255, 255, 79, 63, 63, 255, 170,
- 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
- 64, 12, 4, 0, 24, 0, 0, 0, 0, 0, 192, 255, 255, 3, 0, 0,
- 255, 127, 255, 255, 255, 255, 255, 127, 255, 255, 109, 192, 15, 120, 12, 0,
- 191, 32, 0, 0, 255, 63, 0, 0, 255, 255, 255, 15, 252, 255, 252, 255,
- 255, 255, 0, 254, 255, 56, 223, 255, 124, 0, 0, 0, 0, 0, 8, 0,
- 0, 0, 255, 255, 127, 0, 248, 0, 255, 255, 0, 0, 255, 255, 15, 255,
- 255, 255, 7, 0, 15, 0, 0, 0,
-};
+ v = re_joining_type_table_1[field_2];
+ v = re_joining_type_table_2[(v << 5) | field_1];
+ v = re_joining_type_table_3[(v << 5) | field_0];
-/* Changes_When_Casemapped: 816 bytes. */
-
-RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_casemapped_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_casemapped_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_casemapped_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_casemapped_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* ID_Start. */
-
-static RE_UINT8 re_id_start_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
+/* Line_Break. */
+static RE_UINT8 re_line_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 18, 19, 20, 25, 26, 26, 27, 27, 27, 27, 27, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 27, 40, 41, 27, 27,
+ 27, 42, 27, 27, 27, 27, 27, 27, 27, 27, 43, 44, 13, 13, 13, 13,
+ 13, 45, 46, 47, 27, 27, 27, 27, 27, 27, 27, 27, 48, 27, 27, 49,
+ 27, 27, 27, 27, 50, 51, 52, 27, 53, 27, 54, 55, 56, 57, 58, 59,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 59,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 59,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 60, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27
+};
+
+static RE_UINT16 re_line_break_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 8, 7, 9, 9, 10, 11, 12, 13, 7, 7,
+ 7, 7, 7, 7, 14, 7, 7, 7, 7, 15, 16, 7, 17, 18, 19, 20,
+ 21, 7, 22, 23, 7, 7, 24, 25, 26, 27, 28, 7, 7, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 53, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 36, 82, 83, 84, 36, 85, 86, 87, 88, 89, 90, 91, 36,
+ 92, 92, 93, 92, 94, 7, 95, 7, 96, 96, 96, 97, 97, 98, 99, 99,
+ 7, 7, 100, 7, 101, 102, 103, 7, 104, 7, 105, 106, 107, 7, 7, 108,
+ 109, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 110, 7, 7, 111, 112, 113, 114, 115, 92, 92, 116, 117,
+ 118, 7, 7, 119, 120, 121, 7, 122, 123, 124, 125, 126, 92, 127, 128, 7,
+ 129, 92, 130, 131, 132, 133, 134, 36, 135, 136, 137, 138, 139, 140, 7, 141,
+ 7, 142, 143, 144, 145, 146, 147, 148, 7, 7, 7, 7, 7, 7, 9, 149,
+ 7, 7, 7, 7, 7, 7, 7, 7, 108, 7, 150, 151, 7, 37, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 7, 167, 7,
+ 168, 169, 170, 171, 172, 173, 7, 174, 175, 176, 7, 7, 7, 7, 7, 177,
+ 7, 178, 35, 179, 179, 179, 179, 180, 179, 179, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 7, 196, 197, 198, 7, 199, 200,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 201, 7, 202, 203,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 204, 205, 206, 7, 7, 7,
+ 7, 207, 123, 7, 7, 7, 7, 208, 7, 95, 7, 209, 210, 211, 211, 9,
+ 212, 213, 214, 36, 215, 216, 216, 217, 216, 216, 216, 216, 216, 216, 218, 219,
+ 220, 221, 222, 223, 224, 225, 223, 226, 227, 228, 216, 216, 229, 216, 216, 230,
+ 231, 216, 232, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 7, 7,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 233, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 234, 216, 235, 144, 7, 7, 7, 7, 7, 7, 7, 7,
+ 236, 237, 7, 238, 239, 7, 7, 240, 7, 7, 7, 7, 7, 7, 241, 242,
+ 243, 244, 7, 245, 246, 136, 247, 248, 30, 249, 250, 251, 40, 252, 253, 254,
+ 7, 255, 256, 92, 92, 92, 257, 258, 259, 260, 7, 261, 7, 7, 7, 262,
+ 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264,
+ 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266,
+ 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268,
+ 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263,
+ 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265,
+ 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267,
+ 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269,
+ 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264,
+ 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266,
+ 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268,
+ 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263,
+ 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265,
+ 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267,
+ 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269,
+ 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269,
+ 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 270, 271, 272,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 274, 275, 276, 7, 7, 7, 277, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 278, 279, 7, 280, 7, 281, 282,
+ 283, 284, 285, 286, 7, 7, 7, 287, 288, 289, 290, 291, 292, 231, 293, 294,
+ 295, 296, 297, 36, 7, 7, 7, 298, 299, 300, 7, 7, 301, 302, 279, 303,
+ 36, 36, 36, 36, 304, 7, 305, 306, 7, 307, 308, 309, 310, 7, 311, 36,
+ 7, 7, 7, 7, 151, 312, 313, 314, 7, 315, 7, 316, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 210, 122, 281, 36, 36, 36, 36,
+ 317, 318, 319, 7, 123, 320, 36, 321, 322, 323, 36, 36, 7, 324, 280, 7,
+ 325, 326, 327, 7, 7, 36, 7, 328, 7, 329, 330, 331, 332, 333, 36, 36,
+ 7, 7, 334, 36, 7, 335, 7, 336, 7, 337, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 123, 7, 338, 36, 36, 7, 315, 339, 36, 36, 279, 340, 210,
+ 139, 341, 342, 343, 139, 344, 345, 346, 139, 347, 348, 349, 139, 252, 350, 351,
+ 352, 353, 36, 36, 354, 355, 356, 357, 358, 359, 360, 361, 36, 36, 36, 36,
+ 7, 362, 363, 364, 7, 27, 365, 36, 36, 36, 36, 36, 7, 366, 367, 36,
+ 7, 27, 368, 369, 7, 370, 371, 36, 372, 373, 36, 36, 36, 36, 36, 36,
+ 7, 374, 36, 36, 36, 7, 7, 375, 376, 377, 378, 36, 36, 379, 380, 381,
+ 382, 383, 384, 7, 385, 386, 7, 119, 36, 36, 36, 36, 36, 36, 36, 36,
+ 387, 388, 389, 390, 391, 392, 36, 36, 393, 394, 395, 396, 397, 371, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 398, 36, 36, 36, 36, 36, 399, 400, 401,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 107, 36, 36, 36,
+ 7, 7, 7, 402, 7, 7, 7, 7, 7, 7, 403, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 404, 7, 405, 7, 7, 7, 7, 7, 7, 406, 7, 7, 7, 7,
+ 7, 407, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 408, 7,
+ 7, 7, 178, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 119, 123, 409, 36, 36, 279, 410, 7, 411, 412, 413, 414, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 7, 7, 415, 36, 36, 36, 7, 7, 416, 9, 417, 36, 36, 418,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 419,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 122, 36, 420, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 216, 216, 216, 216, 216, 216, 216, 216, 231, 36, 421, 422, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 423, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 424, 425, 426, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 122, 7, 427, 7, 428, 429, 430, 7, 334,
+ 7, 7, 431, 36, 36, 36, 36, 432, 7, 7, 210, 119, 36, 36, 36, 36,
+ 7, 7, 37, 7, 433, 434, 435, 7, 436, 437, 438, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 439, 7, 7, 7, 7, 7, 7, 7, 7, 440, 441,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 9, 442, 9, 443, 444, 445, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 446, 447, 36, 36, 36, 36, 36, 36, 7, 448, 449, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 7, 450, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 451, 36, 7, 7, 452, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 453, 7, 454, 36, 36, 455, 151, 36, 36, 36, 36, 36, 36,
+ 435, 456, 457, 458, 459, 460, 36, 461, 36, 36, 36, 36, 36, 36, 36, 36,
+ 216, 216, 216, 216, 216, 216, 216, 216, 462, 463, 179, 464, 179, 465, 216, 466,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 467, 468, 469, 470,
+ 216, 216, 471, 472, 473, 474, 216, 216, 475, 476, 477, 478, 479, 216, 480, 481,
+ 216, 216, 482, 483, 216, 484, 485, 216, 7, 7, 7, 486, 7, 7, 487, 216,
+ 488, 7, 489, 7, 490, 491, 216, 216, 492, 493, 216, 494, 216, 495, 496, 216,
+ 7, 7, 486, 216, 216, 216, 216, 216, 7, 7, 7, 7, 497, 7, 35, 498,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 499,
+ 500, 9, 9, 9, 36, 36, 36, 36, 9, 9, 9, 9, 9, 9, 9, 501,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36
+};
+
+static RE_UINT8 re_line_break_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 5, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 6, 7, 8, 9, 10, 11, 9, 8, 12, 13, 9, 10, 14, 15, 14, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14, 9, 9, 9, 7,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 10, 13, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 2, 18, 9, 1,
+ 1, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 20, 12, 11, 10, 10, 10, 9, 21, 21, 9, 21, 8, 9, 2, 9, 9,
+ 11, 10, 21, 21, 22, 9, 21, 21, 21, 21, 21, 8, 21, 21, 21, 12,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 21, 22, 21, 21, 21, 22, 21, 9, 9,
+ 21, 9, 9, 9, 9, 9, 9, 9, 21, 21, 21, 21, 9, 21, 9, 22,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20,
+ 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 14, 9,
+ 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 2, 0, 0, 9, 9, 10,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 9, 1, 1, 9, 1, 1, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 23,
+ 23, 23, 23, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 14, 14, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 0, 7, 7,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 11, 17, 17, 9, 9, 9,
+ 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 7, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 1,
+ 1, 1, 1, 1, 1, 9, 9, 1, 1, 9, 1, 1, 1, 1, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 14, 7, 9, 0, 0, 1, 10, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 1, 1, 1, 9, 1, 1, 1, 1, 1, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 0, 0, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 2, 2, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 9, 0, 9,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 11, 11, 9, 9, 9, 9, 9, 11, 9, 10, 9, 9, 1, 0,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 0, 9, 9, 0, 9, 9, 0, 0, 1, 0, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 0,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 1, 1, 9, 9, 9, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 10, 0, 0, 0, 0, 0, 0, 0, 9, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 9, 9, 0, 9,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 0, 9, 0, 9, 9,
+ 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 9, 0, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 9, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 0, 0, 22, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 22, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 9, 0,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 9, 9,
+ 0, 0, 0, 0, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 9, 9, 9, 9, 9,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 1, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 10,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 0, 0, 0, 0,
+ 0, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0,
+ 24, 24, 24, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 24, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 24, 24, 24, 24,
+ 9, 22, 22, 22, 22, 9, 22, 22, 20, 22, 22, 2, 20, 7, 7, 7,
+ 7, 7, 20, 9, 7, 9, 9, 9, 1, 1, 9, 9, 9, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 2, 1, 9, 1, 9, 1, 12, 18, 12, 18, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 2, 1, 1, 9, 9, 9, 9, 9, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2,
+ 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 22, 22, 2, 22, 9, 9, 9, 9, 9, 20, 20, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 9, 9, 9, 9,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 24, 24, 24, 24, 24,
+ 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 1, 1, 1,
+ 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 9, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 2, 2, 28, 24, 2, 9, 2, 10, 24, 24, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 7, 7, 2, 2, 22, 9, 7, 7, 9, 1, 1, 1, 20, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 9, 0, 0, 0, 7, 7, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0,
+ 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 0, 0, 0, 24, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 0, 0, 9, 9,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 9, 2, 2, 2,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 1, 9, 9,
+ 9, 9, 9, 9, 1, 9, 9, 1, 1, 1, 9, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 0, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 22, 9, 0,
+ 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 2, 29, 1, 30, 1, 1,
+ 2, 20, 2, 2, 31, 21, 21, 9, 8, 8, 12, 8, 8, 8, 12, 8,
+ 21, 21, 9, 9, 32, 32, 32, 2, 4, 4, 1, 1, 1, 1, 1, 20,
+ 11, 11, 11, 11, 11, 11, 11, 11, 9, 8, 8, 21, 28, 28, 9, 9,
+ 9, 9, 9, 9, 14, 12, 18, 28, 28, 28, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 2, 9, 2, 2, 2, 2, 9, 2, 2, 2,
+ 33, 9, 9, 9, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 9, 0, 0, 21, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 21,
+ 9, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 11, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 11, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 11, 9, 21, 9, 9, 9, 11, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 21, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 21, 21, 9, 9, 9, 9, 9, 21, 9, 9, 21, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 9, 21, 21, 9, 9, 9, 21, 21, 9, 9, 21, 9, 9, 9, 21,
+ 9, 21, 10, 10, 9, 21, 9, 9, 9, 9, 21, 9, 9, 21, 21, 21,
+ 21, 9, 9, 21, 9, 21, 9, 21, 21, 21, 21, 21, 21, 9, 21, 9,
+ 9, 9, 9, 9, 21, 21, 21, 21, 9, 9, 9, 9, 21, 21, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 21, 9, 9, 9,
+ 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 9, 9, 21, 21, 21, 21, 9, 9, 21, 21, 9, 9, 21, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 21, 9, 9, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 21, 9, 9, 9, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 32,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 12, 18, 9, 9, 9, 9,
+ 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 34, 34, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 9, 9, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 9, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 21, 9, 9, 21, 21, 9, 9, 9, 9, 21, 21, 9, 9,
+ 21, 21, 9, 9, 9, 9, 21, 21, 21, 9, 9, 21, 9, 9, 21, 21,
+ 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 34, 34, 34, 34, 9, 21, 21, 9, 9, 21, 9, 9, 9, 9, 21, 21,
+ 9, 9, 9, 9, 34, 34, 21, 21, 34, 9, 34, 34, 34, 35, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 9, 9, 9, 9,
+ 21, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 9, 21, 21, 21, 9, 21, 34, 21, 21, 9, 21, 21, 9, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 21, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 21, 21, 21, 34, 9, 34,
+ 34, 34, 21, 34, 34, 21, 21, 21, 34, 34, 21, 21, 34, 21, 21, 34,
+ 34, 34, 9, 21, 9, 9, 9, 9, 21, 21, 34, 21, 21, 21, 21, 21,
+ 21, 34, 34, 34, 34, 34, 21, 34, 34, 35, 34, 21, 21, 34, 34, 34,
+ 34, 34, 34, 34, 34, 9, 9, 9, 34, 34, 35, 35, 35, 35, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 8, 8, 8, 8, 8,
+ 8, 9, 7, 7, 34, 9, 9, 9, 12, 18, 12, 18, 12, 18, 12, 18,
+ 12, 18, 12, 18, 12, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 12, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18, 12,
+ 18, 12, 18, 12, 18, 12, 18, 12, 18, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 12, 18, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 9, 9, 0, 0, 0, 0, 0, 7, 2, 2, 2, 9, 7, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2,
+ 2, 2, 2, 2, 2, 2, 9, 2, 12, 2, 9, 9, 8, 8, 9, 9,
+ 8, 8, 12, 18, 12, 18, 12, 18, 12, 18, 2, 2, 2, 2, 7, 9,
+ 2, 2, 9, 2, 2, 9, 9, 9, 9, 9, 31, 31, 2, 2, 2, 9,
+ 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 9, 2, 9, 2, 2,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0,
+ 2, 18, 18, 34, 34, 28, 34, 34, 12, 18, 12, 18, 12, 18, 12, 18,
+ 12, 18, 34, 34, 12, 18, 12, 18, 12, 18, 12, 18, 28, 12, 18, 18,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 1, 1, 1, 1,
+ 34, 34, 34, 34, 34, 1, 34, 34, 34, 34, 34, 28, 28, 34, 34, 34,
+ 0, 36, 34, 36, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34, 36, 34,
+ 34, 34, 34, 34, 34, 36, 36, 0, 0, 1, 1, 28, 28, 28, 28, 34,
+ 28, 36, 34, 36, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34, 36, 34,
+ 34, 34, 34, 34, 34, 36, 36, 34, 34, 34, 34, 28, 36, 28, 28, 34,
+ 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 21, 21, 21, 21, 21, 21, 21, 21,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 7, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 9, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 9, 9, 9, 1, 9, 9, 9, 9, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 9, 9, 9, 9, 1, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 22, 22, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9, 1,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 9, 9, 9, 0, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 9, 9,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 24, 24, 24, 24, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 9, 2, 2, 2,
+ 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 2, 2, 9, 9, 9, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0,
+ 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 23, 1, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 9, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 0, 23, 0,
+ 23, 23, 0, 23, 23, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 14, 18, 18, 14, 14, 7, 7, 12, 18, 32, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 34, 34, 34, 34, 34, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18, 12,
+ 18, 12, 18, 12, 18, 34, 34, 12, 18, 34, 34, 34, 34, 34, 34, 34,
+ 18, 34, 18, 0, 28, 28, 7, 7, 34, 12, 18, 12, 18, 12, 18, 34,
+ 34, 34, 34, 34, 34, 34, 34, 0, 34, 10, 11, 34, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 33,
+ 0, 7, 34, 34, 10, 11, 34, 34, 12, 18, 34, 34, 18, 34, 18, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 28, 28, 34, 34, 34, 7,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 12, 34, 18, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 12, 34, 18, 34, 12,
+ 18, 18, 12, 18, 18, 28, 34, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 28, 28,
+ 0, 0, 34, 34, 34, 34, 34, 34, 0, 0, 34, 34, 34, 34, 34, 34,
+ 0, 0, 34, 34, 34, 34, 34, 34, 0, 0, 34, 34, 34, 0, 0, 0,
+ 11, 10, 34, 34, 34, 10, 10, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 40, 21, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 2, 2, 2, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 2,
+ 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 2, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_id_start_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 1, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 1, 57, 58, 59, 60, 61, 62, 63, 31, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 31, 76, 77, 78, 31,
- 1, 1, 1, 79, 80, 81, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 84, 85, 31, 31, 86, 87,
- 1, 1, 1, 1, 1, 1, 1, 88, 1, 1, 89, 31, 31, 31, 31, 31,
- 1, 90, 91, 31, 31, 31, 31, 31, 31, 31, 31, 31, 92, 31, 31, 31,
- 31, 31, 31, 31, 93, 94, 95, 96, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 97, 98, 31, 31, 31, 31, 31, 99, 100, 31, 31, 31, 31, 101, 31,
- 1, 1, 1, 1, 1, 1, 102, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 103, 104, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 105, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 107, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_id_start_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
- 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
- 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
- 27, 28, 29, 17, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 44, 48, 49, 50, 51, 45, 0,
- 52, 53, 54, 55, 56, 57, 58, 59, 52, 60, 61, 62, 63, 64, 65, 0,
- 66, 67, 65, 0, 68, 69, 70, 0, 71, 0, 72, 73, 74, 0, 0, 0,
- 4, 75, 76, 77, 78, 4, 79, 80, 4, 4, 81, 4, 82, 83, 84, 4,
- 85, 4, 86, 0, 22, 4, 4, 87, 66, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 88, 1, 4, 4, 89, 90, 91, 91, 92, 4, 93, 94, 0,
- 0, 4, 4, 29, 4, 95, 4, 96, 97, 0, 15, 98, 4, 99, 100, 0,
- 101, 4, 102, 0, 0, 103, 0, 0, 104, 93, 105, 0, 106, 107, 4, 108,
- 4, 109, 110, 111, 112, 113, 0, 114, 4, 4, 4, 4, 4, 4, 0, 0,
- 87, 4, 115, 111, 4, 116, 117, 118, 0, 0, 0, 119, 120, 0, 0, 0,
- 121, 122, 123, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 124, 97, 4, 4, 4, 4, 125, 4, 79, 4, 126, 101, 127, 127, 0,
- 128, 129, 66, 4, 130, 66, 4, 80, 104, 12, 4, 4, 131, 86, 0, 15,
- 4, 4, 4, 4, 4, 96, 0, 0, 4, 4, 4, 4, 4, 4, 4, 22,
- 4, 4, 4, 4, 73, 0, 15, 111, 132, 133, 4, 134, 111, 4, 4, 22,
- 135, 136, 4, 4, 137, 4, 138, 135, 139, 140, 4, 93, 136, 93, 0, 141,
- 25, 142, 65, 143, 31, 144, 145, 146, 4, 14, 147, 148, 4, 149, 150, 151,
- 152, 153, 80, 154, 4, 4, 4, 140, 4, 4, 4, 4, 4, 155, 156, 157,
- 4, 4, 4, 158, 4, 4, 159, 0, 160, 161, 162, 4, 4, 91, 163, 4,
- 4, 111, 15, 4, 164, 4, 165, 166, 0, 0, 0, 167, 4, 4, 4, 143,
- 0, 1, 1, 168, 4, 97, 169, 0, 170, 171, 172, 0, 4, 4, 4, 86,
- 0, 0, 4, 102, 0, 0, 0, 0, 0, 0, 0, 0, 143, 4, 173, 0,
- 4, 23, 174, 96, 111, 4, 175, 0, 4, 4, 4, 4, 111, 15, 176, 157,
- 4, 154, 4, 109, 0, 0, 0, 0, 4, 101, 96, 165, 0, 0, 0, 0,
- 177, 178, 96, 101, 97, 0, 0, 179, 96, 159, 0, 0, 4, 180, 0, 0,
- 181, 96, 0, 143, 143, 0, 72, 182, 4, 96, 96, 144, 91, 0, 0, 0,
- 4, 4, 14, 0, 4, 144, 4, 144, 4, 109, 0, 0, 0, 0, 0, 0,
- 143, 183, 108, 0, 0, 0, 0, 101, 106, 184, 0, 0, 106, 22, 15, 14,
- 106, 65, 185, 186, 106, 144, 187, 0, 188, 189, 0, 0, 190, 112, 97, 0,
- 47, 44, 191, 55, 0, 0, 0, 0, 4, 102, 192, 0, 4, 22, 193, 0,
- 0, 0, 0, 0, 4, 131, 194, 0, 4, 22, 195, 0, 4, 196, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 4, 189, 0, 0, 0, 4, 4, 197,
- 0, 0, 0, 0, 0, 198, 173, 199, 200, 201, 202, 4, 203, 0, 4, 29,
- 204, 131, 71, 205, 22, 0, 0, 0, 206, 173, 207, 208, 209, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 144, 4, 4, 4, 4, 159, 0, 0, 0,
- 4, 4, 4, 131, 4, 4, 4, 4, 4, 4, 109, 0, 0, 0, 0, 0,
- 4, 131, 0, 0, 0, 0, 0, 0, 4, 4, 65, 0, 0, 0, 0, 0,
- 4, 29, 97, 0, 0, 0, 15, 210, 4, 22, 109, 211, 22, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 212, 0, 163, 0, 0, 213,
- 4, 4, 4, 4, 4, 4, 4, 184, 4, 4, 4, 4, 4, 4, 4, 144,
- 97, 0, 214, 215, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 157,
- 4, 4, 4, 216, 217, 0, 0, 0, 4, 4, 218, 4, 219, 220, 221, 4,
- 222, 223, 224, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 225, 226, 80,
- 218, 218, 124, 124, 204, 204, 147, 0, 4, 227, 228, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 189, 4, 4, 4, 4, 4, 4, 182, 0,
- 4, 4, 229, 0, 0, 0, 0, 0, 221, 230, 231, 232, 233, 234, 0, 0,
- 4, 4, 4, 4, 4, 4, 101, 0, 4, 102, 4, 4, 4, 4, 4, 4,
- 111, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 235, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 71, 111, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_id_start_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 188,
- 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
- 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
- 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
- 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
- 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
- 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 63, 240, 255, 255, 255,
- 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255, 225, 159, 249, 255,
- 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16, 224, 135, 249, 255,
- 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0, 224, 191, 251, 255,
- 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2, 224, 159, 249, 255,
- 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214, 24, 199, 255, 3,
- 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7, 3, 0, 0, 0,
- 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64, 3, 0, 6, 0,
- 255, 255, 255, 39, 0, 64, 112, 128, 3, 0, 0, 252, 224, 255, 127, 252,
- 255, 255, 251, 47, 127, 0, 0, 0, 254, 255, 255, 255, 255, 255, 13, 0,
- 214, 247, 255, 255, 175, 255, 13, 32, 95, 0, 0, 240, 1, 0, 0, 0,
- 255, 254, 255, 255, 255, 31, 0, 0, 0, 31, 0, 0, 255, 7, 0, 128,
- 0, 0, 63, 60, 98, 192, 225, 255, 3, 64, 0, 0, 191, 32, 255, 255,
- 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127,
- 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 7, 255, 255, 63, 63,
- 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 3, 0, 255, 255, 3, 0,
- 255, 223, 1, 0, 255, 255, 15, 0, 0, 0, 128, 16, 255, 5, 255, 255,
- 255, 255, 63, 0, 255, 255, 255, 127, 255, 63, 31, 0, 255, 15, 255, 255,
- 255, 3, 0, 0, 255, 255, 127, 0, 255, 255, 31, 0, 128, 0, 0, 0,
- 224, 255, 255, 255, 224, 15, 0, 0, 248, 255, 255, 255, 1, 192, 0, 252,
- 63, 0, 0, 0, 15, 0, 0, 0, 0, 224, 0, 252, 255, 255, 255, 63,
- 255, 1, 255, 255, 255, 255, 255, 231, 0, 222, 111, 4, 63, 63, 255, 170,
- 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 2, 128,
- 0, 0, 255, 31, 132, 252, 47, 63, 80, 253, 255, 243, 224, 67, 0, 0,
- 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127,
- 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 248, 255, 127, 0, 0,
- 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255,
- 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0, 187, 247, 255, 255,
- 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 255, 31,
- 255, 255, 7, 0, 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0,
- 255, 255, 127, 196, 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 0, 255, 255, 15, 0, 255, 255,
- 127, 248, 255, 255, 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3,
- 127, 0, 248, 160, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255,
- 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 15, 0, 0, 223, 255,
- 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
- 255, 63, 255, 63, 255, 255, 1, 0, 255, 7, 255, 255, 15, 255, 62, 0,
- 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
- 255, 255, 255, 192, 1, 0, 239, 254, 31, 0, 0, 0, 128, 0, 255, 255,
- 255, 255, 255, 0, 16, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
- 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
- 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
- 255, 7, 0, 1, 0, 0, 0, 128, 255, 252, 255, 255, 10, 0, 0, 0,
- 1, 248, 255, 255, 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32,
- 255, 253, 255, 255, 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0,
- 191, 253, 255, 255, 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224,
- 255, 7, 1, 0, 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 7, 255, 31, 255, 1, 255, 3, 255, 255, 223, 255, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 255, 31, 128, 63,
- 0, 64, 0, 0, 15, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255,
-};
-
-/* ID_Start: 2496 bytes. */
-
-RE_UINT32 re_get_id_start(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_id_start_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_id_start_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_id_start_stage_3[pos + f] << 5;
- pos += code;
- value = (re_id_start_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* ID_Continue. */
-
-static RE_UINT8 re_id_continue_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 2, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 2,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9,
+ 2, 2, 2, 2, 2, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 26, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_id_continue_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 1, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 1, 57, 58, 59, 60, 61, 62, 63, 31, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 31, 76, 77, 78, 31,
- 1, 1, 1, 79, 80, 81, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 84, 85, 31, 31, 86, 87,
- 1, 1, 1, 1, 1, 1, 1, 88, 1, 1, 89, 31, 31, 31, 31, 31,
- 1, 90, 91, 31, 31, 31, 31, 31, 31, 31, 31, 31, 92, 31, 31, 31,
- 31, 93, 94, 31, 95, 96, 97, 98, 31, 31, 99, 31, 31, 31, 31, 31,
- 100, 101, 102, 31, 31, 31, 31, 31, 103, 104, 31, 31, 31, 31, 105, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
- 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_id_continue_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 4, 0, 0, 5, 6, 7, 8, 7, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 0,
- 7, 7, 7, 7, 7, 7, 7, 12, 13, 7, 14, 7, 7, 7, 7, 15,
- 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 2, 7, 17, 7, 7, 18, 2, 7, 19, 20, 7, 3, 21,
- 0, 4, 7, 7, 7, 7, 22, 7, 7, 7, 7, 7, 7, 23, 24, 25,
- 0, 7, 7, 7, 26, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 27,
- 7, 7, 28, 0, 7, 29, 4, 0, 0, 0, 7, 30, 0, 31, 14, 7,
- 7, 7, 7, 7, 7, 7, 32, 2, 23, 33, 24, 34, 35, 36, 32, 37,
- 38, 33, 24, 39, 40, 41, 42, 43, 44, 14, 24, 45, 46, 47, 32, 48,
- 49, 33, 24, 45, 50, 51, 32, 52, 53, 54, 55, 22, 56, 57, 42, 0,
- 58, 59, 24, 60, 61, 62, 32, 0, 63, 59, 24, 64, 61, 65, 32, 66,
- 63, 59, 7, 7, 67, 68, 32, 69, 70, 71, 7, 72, 73, 74, 42, 75,
- 2, 7, 7, 4, 76, 1, 0, 0, 77, 7, 78, 28, 79, 80, 0, 0,
- 47, 81, 1, 82, 83, 7, 84, 2, 85, 83, 7, 84, 86, 0, 0, 0,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 28, 7, 7, 87, 7, 7, 88,
- 7, 7, 7, 7, 89, 90, 7, 7, 89, 7, 7, 91, 92, 8, 7, 7,
- 7, 92, 7, 7, 7, 26, 48, 10, 7, 0, 7, 7, 7, 7, 7, 93,
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 25, 7, 2, 4, 7, 7, 7, 7, 94, 18,
- 58, 95, 7, 95, 7, 96, 58, 97, 7, 7, 7, 7, 7, 98, 1, 0,
- 99, 1, 7, 7, 7, 7, 7, 18, 7, 7, 4, 7, 7, 7, 7, 43,
- 7, 76, 29, 29, 42, 7, 28, 95, 7, 7, 29, 7, 1, 4, 0, 0,
- 7, 29, 7, 7, 7, 76, 7, 25, 1, 1, 100, 28, 0, 0, 0, 0,
- 7, 7, 7, 7, 29, 1, 101, 96, 7, 7, 7, 7, 7, 7, 7, 96,
- 7, 7, 7, 102, 60, 7, 7, 28, 18, 7, 7, 26, 0, 103, 7, 4,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 104,
- 7, 93, 7, 7, 93, 105, 7, 28, 7, 7, 7, 106, 107, 108, 84, 107,
- 0, 0, 0, 109, 47, 110, 0, 111, 0, 84, 0, 0, 0, 84, 112, 47,
- 113, 114, 115, 80, 116, 0, 7, 7, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 7, 7, 76, 7, 7, 7, 7, 7, 7, 7, 7, 117, 96,
- 7, 7, 87, 7, 7, 7, 118, 109, 7, 119, 120, 120, 120, 120, 7, 7,
- 121, 0, 2, 122, 2, 7, 7, 7, 7, 123, 2, 7, 7, 7, 7, 88,
- 124, 7, 7, 2, 7, 7, 7, 7, 76, 0, 7, 4, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 84, 0, 0, 0, 0, 7, 7, 28,
- 84, 7, 29, 0, 7, 7, 7, 125, 7, 7, 7, 7, 7, 7, 7, 10,
- 0, 126, 127, 7, 7, 7, 7, 7, 128, 7, 7, 7, 129, 0, 0, 126,
- 7, 7, 102, 0, 7, 7, 7, 96, 7, 7, 7, 7, 43, 1, 7, 130,
- 7, 7, 28, 7, 7, 96, 7, 84, 7, 7, 7, 7, 131, 1, 7, 76,
- 7, 7, 7, 119, 28, 1, 7, 71, 7, 7, 7, 7, 21, 99, 7, 129,
- 132, 133, 120, 7, 7, 88, 102, 7, 7, 7, 7, 7, 7, 7, 134, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 96, 7, 135, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 28, 7, 7, 7, 7, 7, 7, 1, 0, 0,
- 119, 136, 24, 137, 138, 7, 7, 7, 7, 7, 7, 10, 0, 31, 7, 7,
- 7, 7, 7, 28, 0, 7, 7, 7, 7, 127, 7, 7, 102, 0, 0, 29,
- 7, 0, 7, 139, 140, 0, 0, 85, 7, 7, 7, 7, 7, 7, 7, 84,
- 0, 1, 2, 3, 2, 4, 42, 7, 7, 7, 7, 76, 141, 142, 0, 0,
- 143, 7, 8, 144, 28, 28, 0, 0, 7, 7, 7, 7, 7, 7, 7, 4,
- 0, 0, 0, 0, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 145,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 84, 7, 7, 7, 47, 47, 0,
- 7, 7, 140, 7, 4, 7, 7, 4, 7, 28, 7, 7, 146, 147, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 28, 1, 7, 7, 146, 7, 29,
- 7, 7, 102, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 119, 7, 43, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 148, 7, 7, 149, 7, 43, 7, 119, 7, 76, 0, 0, 0, 0, 7, 150,
- 7, 43, 7, 1, 0, 0, 0, 0, 7, 7, 7, 151, 0, 0, 0, 0,
- 152, 153, 7, 154, 0, 0, 7, 84, 7, 84, 0, 0, 83, 7, 119, 0,
- 7, 7, 7, 43, 7, 43, 7, 21, 7, 10, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 18, 0, 0, 0, 7, 7, 7, 21, 7, 7, 7, 21,
- 7, 7, 102, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 84, 100, 7, 7, 47, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 119, 0, 42, 109, 7, 7, 7, 4, 0, 7, 18, 1,
- 7, 7, 7, 85, 155, 7, 7, 156, 7, 7, 7, 7, 157, 158, 0, 0,
- 7, 14, 7, 159, 0, 0, 0, 0, 160, 19, 18, 7, 7, 7, 4, 1,
- 23, 33, 24, 161, 50, 162, 163, 95, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 4, 22, 0, 0, 7, 7, 7, 7, 164, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 165, 47, 166, 0, 0,
- 7, 7, 7, 7, 167, 1, 0, 0, 7, 7, 7, 18, 1, 0, 0, 0,
- 7, 26, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 1, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 7, 7, 168, 169, 0,
- 7, 7, 7, 76, 100, 7, 7, 7, 7, 170, 0, 0, 7, 7, 7, 18,
- 24, 7, 7, 8, 47, 1, 0, 127, 7, 127, 83, 119, 0, 0, 0, 0,
- 171, 7, 7, 172, 102, 1, 173, 7, 76, 174, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 76, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 18, 7, 76, 1, 0, 0, 0, 0, 0, 0, 7, 28, 95,
- 7, 7, 7, 119, 96, 1, 31, 175, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 3, 7, 7, 7, 118, 7, 0, 0, 0, 0, 176, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 102,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21,
- 7, 76, 0, 0, 0, 21, 177, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 4, 84, 18, 178, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 179, 180, 181, 0, 182, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 85, 7, 7, 7, 58, 184, 185, 186, 7, 7, 7,
- 187, 188, 7, 189, 190, 59, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 165, 7, 59, 88, 7, 88,
- 7, 85, 7, 85, 76, 7, 76, 7, 24, 7, 24, 7, 191, 7, 7, 7,
- 7, 7, 7, 135, 7, 7, 84, 192, 110, 101, 2, 0, 0, 0, 0, 0,
- 8, 128, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 84, 28, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95, 119, 0, 0,
- 7, 7, 7, 7, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 186, 7, 195, 196, 197, 198, 199, 200, 104, 29, 201, 29, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 119, 0, 0,
- 7, 7, 7, 95, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 47, 0,
- 7, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_id_continue_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 135, 255, 7, 0, 4, 160, 4, 255, 255,
- 127, 255, 195, 255, 3, 0, 31, 80, 223, 188, 192, 215, 251, 255, 191, 255,
- 251, 252, 127, 2, 255, 1, 255, 191, 182, 0, 7, 0, 255, 195, 239, 159,
- 255, 253, 255, 159, 255, 231, 63, 36, 255, 63, 255, 15, 223, 63, 248, 255,
- 207, 255, 249, 255, 197, 243, 159, 121, 128, 176, 3, 80, 238, 135, 109, 211,
- 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 237, 243, 191, 59, 1, 0,
- 0, 254, 238, 159, 159, 57, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199,
- 199, 61, 129, 0, 255, 223, 253, 255, 255, 227, 223, 61, 96, 7, 239, 223,
- 239, 243, 96, 64, 6, 0, 223, 125, 240, 128, 0, 252, 236, 255, 127, 252,
- 251, 47, 127, 132, 95, 255, 12, 0, 255, 127, 214, 247, 175, 255, 95, 63,
- 255, 243, 0, 3, 160, 194, 255, 254, 255, 31, 223, 255, 64, 0, 191, 32,
- 255, 247, 255, 61, 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 31, 0,
- 15, 0, 13, 0, 143, 48, 0, 56, 128, 0, 0, 248, 255, 0, 247, 255,
- 255, 251, 255, 170, 223, 95, 220, 31, 207, 15, 0, 128, 16, 0, 2, 128,
- 226, 255, 132, 252, 47, 63, 80, 253, 224, 67, 31, 248, 255, 128, 127, 0,
- 127, 127, 224, 0, 62, 31, 127, 254, 224, 255, 240, 191, 128, 255, 252, 255,
- 255, 249, 124, 0, 255, 232, 1, 128, 126, 126, 126, 0, 255, 55, 127, 248,
- 248, 224, 127, 95, 219, 255, 24, 0, 0, 224, 252, 252, 252, 28, 255, 239,
- 255, 183, 0, 32, 15, 255, 62, 0, 63, 253, 191, 145, 55, 0, 255, 192,
- 111, 240, 239, 254, 63, 135, 112, 0, 79, 0, 31, 30, 255, 23, 255, 64,
- 127, 189, 237, 251, 129, 224, 207, 31, 191, 0, 63, 255, 0, 63, 17, 0,
- 255, 252, 27, 0, 255, 35, 127, 251, 127, 180, 191, 253, 251, 1, 255, 224,
- 11, 0, 240, 0, 255, 99, 224, 227, 7, 248, 231, 15, 0, 60, 28, 0,
- 100, 222, 255, 235, 239, 255, 191, 231, 223, 223, 255, 123, 95, 252, 247, 207,
- 32, 0, 219, 7, 255, 67, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247,
- 247, 94, 238, 251,
-};
-
-/* ID_Continue: 2900 bytes. */
-
-RE_UINT32 re_get_id_continue(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_id_continue_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_id_continue_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_id_continue_stage_3[pos + f] << 4;
- pos += code;
- value = (re_id_continue_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* XID_Start. */
-
-static RE_UINT8 re_xid_start_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 1, 1, 2, 0, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 2, 2,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 2, 2, 2, 2, 9, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 9, 22, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 9, 9, 9, 9, 2, 2, 9, 2, 1, 1, 1, 1, 9, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 22, 9, 2, 2, 2,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 2, 2, 9, 1, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 1, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 2, 2, 2, 2, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 0, 9, 1, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 22, 2, 2, 7, 7, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 1, 1, 0, 0,
+ 1, 2, 2, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 24, 2, 2, 2, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 9,
+ 1, 9, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 9, 22, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_xid_start_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 1, 58, 59, 60, 61, 62, 63, 64, 31, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 31, 77, 78, 79, 31,
- 1, 1, 1, 80, 81, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 85, 86, 31, 31, 87, 88,
- 1, 1, 1, 1, 1, 1, 1, 89, 1, 1, 90, 31, 31, 31, 31, 31,
- 1, 91, 92, 31, 31, 31, 31, 31, 31, 31, 31, 31, 93, 31, 31, 31,
- 31, 31, 31, 31, 94, 95, 96, 97, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 98, 99, 31, 31, 31, 31, 31, 100, 101, 31, 31, 31, 31, 102, 31,
- 1, 1, 1, 1, 1, 1, 103, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 104, 105, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 108, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_xid_start_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
- 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
- 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
- 27, 28, 29, 17, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 44, 48, 49, 50, 51, 45, 0,
- 52, 53, 54, 55, 56, 57, 58, 59, 52, 60, 61, 62, 63, 64, 65, 0,
- 66, 67, 65, 0, 68, 69, 70, 0, 71, 0, 72, 73, 74, 0, 0, 0,
- 4, 75, 76, 77, 78, 4, 79, 80, 4, 4, 81, 4, 82, 83, 84, 4,
- 85, 4, 86, 0, 22, 4, 4, 87, 66, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 88, 1, 4, 4, 89, 90, 91, 91, 92, 4, 93, 94, 0,
- 0, 4, 4, 29, 4, 95, 4, 96, 97, 0, 15, 98, 4, 99, 100, 0,
- 101, 4, 102, 0, 0, 103, 0, 0, 104, 93, 105, 0, 106, 107, 4, 108,
- 4, 109, 110, 111, 112, 113, 0, 114, 4, 4, 4, 4, 4, 4, 0, 0,
- 87, 4, 115, 111, 4, 116, 117, 118, 0, 0, 0, 119, 120, 0, 0, 0,
- 121, 122, 123, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 124, 97, 4, 4, 4, 4, 125, 4, 79, 4, 126, 101, 127, 127, 0,
- 128, 129, 66, 4, 130, 66, 4, 80, 104, 12, 4, 4, 131, 86, 0, 15,
- 4, 4, 4, 4, 4, 96, 0, 0, 4, 4, 4, 4, 4, 4, 4, 22,
- 4, 4, 4, 4, 73, 0, 15, 111, 132, 133, 4, 134, 111, 4, 4, 22,
- 135, 136, 4, 4, 137, 4, 138, 135, 139, 140, 4, 93, 136, 93, 0, 141,
- 25, 142, 65, 143, 31, 144, 145, 146, 4, 14, 147, 148, 4, 149, 150, 151,
- 152, 153, 80, 154, 4, 4, 4, 140, 4, 4, 4, 4, 4, 155, 156, 157,
- 4, 4, 4, 158, 4, 4, 159, 0, 160, 161, 162, 4, 4, 91, 163, 4,
- 4, 4, 111, 31, 4, 4, 4, 4, 4, 111, 15, 4, 164, 4, 165, 166,
- 0, 0, 0, 167, 4, 4, 4, 143, 0, 1, 1, 168, 111, 97, 169, 0,
- 170, 171, 172, 0, 4, 4, 4, 86, 0, 0, 4, 102, 0, 0, 0, 0,
- 0, 0, 0, 0, 143, 4, 173, 0, 4, 23, 174, 96, 111, 4, 175, 0,
- 4, 4, 4, 4, 111, 15, 176, 157, 4, 154, 4, 109, 0, 0, 0, 0,
- 4, 101, 96, 165, 0, 0, 0, 0, 177, 178, 96, 101, 97, 0, 0, 179,
- 96, 159, 0, 0, 4, 180, 0, 0, 181, 96, 0, 143, 143, 0, 72, 182,
- 4, 96, 96, 144, 91, 0, 0, 0, 4, 4, 14, 0, 4, 144, 4, 144,
- 4, 109, 0, 0, 0, 0, 0, 0, 143, 183, 108, 0, 0, 0, 0, 101,
- 106, 184, 0, 0, 106, 22, 15, 14, 106, 65, 185, 186, 106, 144, 187, 0,
- 188, 189, 0, 0, 190, 112, 97, 0, 47, 44, 191, 55, 0, 0, 0, 0,
- 4, 102, 192, 0, 4, 22, 193, 0, 0, 0, 0, 0, 4, 131, 194, 0,
- 4, 22, 195, 0, 4, 196, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0,
- 4, 189, 0, 0, 0, 4, 4, 197, 0, 0, 0, 0, 0, 198, 173, 199,
- 200, 201, 202, 4, 203, 0, 4, 29, 204, 131, 71, 205, 22, 0, 0, 0,
- 206, 173, 207, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
- 4, 4, 4, 4, 159, 0, 0, 0, 4, 4, 4, 131, 4, 4, 4, 4,
- 4, 4, 109, 0, 0, 0, 0, 0, 4, 131, 0, 0, 0, 0, 0, 0,
- 4, 4, 65, 0, 0, 0, 0, 0, 4, 29, 97, 0, 0, 0, 15, 210,
- 4, 22, 109, 211, 22, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0,
- 4, 4, 212, 0, 163, 0, 0, 213, 4, 4, 4, 4, 4, 4, 4, 184,
- 4, 4, 4, 4, 4, 4, 4, 144, 97, 0, 214, 215, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 157, 4, 4, 4, 216, 217, 0, 0, 0,
- 4, 4, 218, 4, 219, 220, 221, 4, 222, 223, 224, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 225, 226, 80, 218, 218, 124, 124, 204, 204, 147, 0,
- 4, 227, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 189,
- 4, 4, 4, 4, 4, 4, 182, 0, 4, 4, 229, 0, 0, 0, 0, 0,
- 221, 230, 231, 232, 233, 234, 0, 0, 4, 4, 4, 4, 4, 4, 101, 0,
- 4, 102, 4, 4, 4, 4, 4, 4, 111, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 235, 4, 4, 4, 4, 4, 4, 4, 4, 4, 71,
- 111, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_xid_start_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 184,
- 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
- 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
- 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
- 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
- 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
- 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 63, 240, 255, 255, 255,
- 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255, 225, 159, 249, 255,
- 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16, 224, 135, 249, 255,
- 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0, 224, 191, 251, 255,
- 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2, 224, 159, 249, 255,
- 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214, 24, 199, 255, 3,
- 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7, 3, 0, 0, 0,
- 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64, 3, 0, 6, 0,
- 255, 255, 255, 39, 0, 64, 112, 128, 3, 0, 0, 252, 224, 255, 127, 252,
- 255, 255, 251, 47, 127, 0, 0, 0, 254, 255, 255, 255, 255, 255, 5, 0,
- 214, 247, 255, 255, 175, 255, 5, 32, 95, 0, 0, 240, 1, 0, 0, 0,
- 255, 254, 255, 255, 255, 31, 0, 0, 0, 31, 0, 0, 255, 7, 0, 128,
- 0, 0, 63, 60, 98, 192, 225, 255, 3, 64, 0, 0, 191, 32, 255, 255,
- 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127,
- 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 7, 255, 255, 63, 63,
- 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 3, 0, 255, 255, 3, 0,
- 255, 223, 1, 0, 255, 255, 15, 0, 0, 0, 128, 16, 255, 5, 255, 255,
- 255, 255, 63, 0, 255, 255, 255, 127, 255, 63, 31, 0, 255, 15, 255, 255,
- 255, 3, 0, 0, 255, 255, 127, 0, 255, 255, 31, 0, 128, 0, 0, 0,
- 224, 255, 255, 255, 224, 15, 0, 0, 248, 255, 255, 255, 1, 192, 0, 252,
- 63, 0, 0, 0, 15, 0, 0, 0, 0, 224, 0, 252, 255, 255, 255, 63,
- 255, 1, 255, 255, 255, 255, 255, 231, 0, 222, 111, 4, 63, 63, 255, 170,
- 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 2, 128,
- 0, 0, 255, 31, 132, 252, 47, 63, 80, 253, 255, 243, 224, 67, 0, 0,
- 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127,
- 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224, 255, 127, 0, 0,
- 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255,
- 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0, 187, 247, 255, 255,
- 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 255, 31,
- 255, 255, 7, 0, 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0,
- 255, 255, 127, 196, 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 0, 255, 255, 15, 0, 255, 255,
- 127, 248, 255, 255, 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3,
- 127, 0, 248, 160, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255,
- 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 3, 0, 0, 138, 170,
- 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
- 255, 63, 255, 63, 255, 255, 1, 0, 255, 7, 255, 255, 15, 255, 62, 0,
- 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
- 255, 255, 255, 192, 1, 0, 239, 254, 31, 0, 0, 0, 128, 0, 255, 255,
- 255, 255, 255, 0, 16, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
- 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
- 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
- 255, 7, 0, 1, 0, 0, 0, 128, 255, 252, 255, 255, 10, 0, 0, 0,
- 1, 248, 255, 255, 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32,
- 255, 253, 255, 255, 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0,
- 191, 253, 255, 255, 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224,
- 255, 7, 1, 0, 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 7, 255, 31, 255, 1, 255, 3, 255, 255, 223, 255, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 255, 31, 128, 63,
- 0, 64, 0, 0, 15, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255,
-};
-
-/* XID_Start: 2504 bytes. */
-
-RE_UINT32 re_get_xid_start(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_xid_start_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_xid_start_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_xid_start_stage_3[pos + f] << 5;
- pos += code;
- value = (re_xid_start_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* XID_Continue. */
-
-static RE_UINT8 re_xid_continue_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 22,
+ 9, 2, 2, 2, 2, 22, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 9, 22, 22,
+ 22, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 22, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 0,
+ 1, 1, 0, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11,
+ 11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 12, 12, 18, 18, 18, 9, 9,
+ 9, 9, 18, 9, 9, 9, 12, 18, 12, 18, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 18, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 20, 20, 20, 20, 20, 20, 20, 12, 18, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 1,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 28, 28, 28, 28, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 1, 1, 2,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 9, 9, 9, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 0, 0, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9,
+ 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 9, 9, 2, 2, 2, 2, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 10,
+ 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 12, 12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 9, 9,
+ 11, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9,
+ 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
+ 0, 9, 9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 34, 34, 34,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 34, 34, 34,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 9, 9, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 9, 9, 34, 34, 34, 34, 34, 9, 34, 34, 34,
+ 34, 34, 35, 35, 35, 34, 34, 35, 34, 34, 35, 35, 35, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42,
+ 34, 34, 35, 35, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 35, 34, 34, 34,
+ 34, 35, 35, 35, 34, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 35,
+ 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 34, 9, 34, 9, 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 9,
+ 34, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 35, 35, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 34, 34, 34, 34, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 35, 35, 35, 34, 34, 34, 35, 35, 35, 35, 35,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 8, 8, 8, 28, 28, 28, 9, 9, 9, 9,
+ 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 26, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 35, 34, 34, 35,
+ 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35,
+ 34, 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 35, 35, 35, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 35, 35, 34, 35, 35, 34, 35, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35,
+ 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_xid_continue_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 1, 58, 59, 60, 61, 62, 63, 64, 31, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 31, 77, 78, 79, 31,
- 1, 1, 1, 80, 81, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 85, 86, 31, 31, 87, 88,
- 1, 1, 1, 1, 1, 1, 1, 89, 1, 1, 90, 31, 31, 31, 31, 31,
- 1, 91, 92, 31, 31, 31, 31, 31, 31, 31, 31, 31, 93, 31, 31, 31,
- 31, 94, 95, 31, 96, 97, 98, 99, 31, 31, 100, 31, 31, 31, 31, 31,
- 101, 102, 103, 31, 31, 31, 31, 31, 104, 105, 31, 31, 31, 31, 106, 31,
- 1, 1, 1, 1, 1, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 108, 109, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 111, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 112, 31, 31, 31, 31, 31,
- 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+RE_UINT32 re_get_line_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_line_break_table_1[field_2];
+ v = re_line_break_table_2[(v << 5) | field_1];
+ v = re_line_break_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Logical_Order_Exception. */
+RE_UINT32 re_get_logical_order_exception(RE_UINT32 codepoint) {
+ if (0x0E40 <= codepoint && codepoint <= 0x0E44)
+ return 1;
+ if (0x0EC0 <= codepoint && codepoint <= 0x0EC4)
+ return 1;
+ if (0x19B5 <= codepoint && codepoint <= 0x19B7)
+ return 1;
+ if (codepoint == 0x19BA)
+ return 1;
+ if (0xAAB5 <= codepoint && codepoint <= 0xAAB6)
+ return 1;
+ if (codepoint == 0xAAB9)
+ return 1;
+ if (0xAABB <= codepoint && codepoint <= 0xAABC)
+ return 1;
+
+ return 0;
+}
+
+/* Lowercase. */
+static RE_UINT8 re_lowercase_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 17, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_lowercase_table_2[] = {
+ 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 5, 13, 14, 15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 24, 25,
+ 0, 26, 15, 5, 27, 5, 28, 5, 5, 29, 0, 15, 30, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 26, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
+ 0, 0, 0, 0, 30, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0,
+ 5, 5, 5, 5, 33, 5, 5, 5, 34, 35, 36, 37, 35, 38, 39, 40,
+ 0, 0, 0, 41, 42, 0, 0, 0, 43, 44, 45, 26, 46, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 26, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 48, 49, 5, 5, 5, 50, 15, 51, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 52, 53, 0, 0, 0, 0, 54, 5, 55, 56, 57, 58, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 60, 61, 15, 15, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 63, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 68, 69, 81,
+ 71, 72, 82, 64, 75, 83, 84, 85, 86, 82, 87, 26, 88, 75, 89, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_lowercase_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 0, 0, 0, 128,
+ 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 85, 85, 171, 170, 170,
+ 170, 170, 170, 212, 41, 49, 36, 78, 42, 45, 81, 230, 64, 82, 85, 181,
+ 170, 170, 41, 170, 170, 170, 250, 147, 133, 170, 255, 255, 255, 255, 255, 255,
+ 255, 255, 239, 255, 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0,
+ 32, 0, 0, 0, 0, 0, 138, 60, 0, 0, 1, 0, 0, 240, 255, 255,
+ 255, 127, 227, 170, 170, 170, 47, 25, 0, 0, 255, 255, 2, 168, 170, 170,
+ 84, 213, 170, 170, 170, 170, 0, 0, 255, 1, 0, 0, 255, 255, 255, 231,
+ 0, 0, 0, 63, 170, 170, 234, 191, 255, 0, 63, 0, 255, 0, 255, 0,
+ 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64, 220, 0, 207, 0,
+ 255, 0, 220, 0, 0, 0, 2, 128, 0, 0, 255, 31, 0, 196, 8, 0,
+ 0, 128, 16, 50, 192, 67, 0, 0, 16, 0, 0, 0, 255, 3, 0, 0,
+ 255, 255, 255, 127, 98, 21, 218, 63, 26, 80, 8, 0, 191, 32, 0, 0,
+ 170, 42, 0, 0, 170, 170, 170, 58, 168, 170, 171, 170, 170, 170, 255, 149,
+ 170, 80, 186, 170, 170, 130, 160, 170, 8, 5, 0, 0, 0, 0, 64, 7,
+ 255, 255, 255, 247, 255, 1, 255, 255, 127, 0, 248, 0, 0, 255, 255, 255,
+ 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0,
+ 0, 0, 0, 252, 255, 255, 15, 0, 0, 192, 223, 255, 255, 0, 0, 0,
+ 252, 255, 255, 15, 0, 0, 192, 235, 239, 255, 0, 0, 0, 252, 255, 255,
+ 15, 0, 0, 192, 255, 255, 255, 0, 0, 0, 252, 255, 255, 15, 0, 0,
+ 192, 255, 255, 255, 0, 192, 255, 255, 0, 0, 192, 255, 63, 0, 0, 0,
+ 252, 255, 255, 247, 3, 0, 0, 240, 255, 255, 223, 15, 255, 127, 63, 0,
+ 255, 253, 0, 0, 247, 11, 0, 0, 252, 255, 255, 255, 15, 0, 0, 0
};
-static RE_UINT8 re_xid_continue_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 4, 0, 0, 5, 6, 7, 8, 7, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 0,
- 7, 7, 7, 7, 7, 7, 7, 12, 13, 7, 14, 7, 7, 7, 7, 15,
- 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 2, 7, 17, 7, 7, 18, 2, 7, 19, 20, 7, 3, 21,
- 0, 4, 7, 7, 7, 7, 22, 7, 7, 7, 7, 7, 7, 23, 24, 25,
- 0, 7, 7, 7, 26, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 27,
- 7, 7, 28, 0, 7, 29, 4, 0, 0, 0, 7, 30, 0, 31, 14, 7,
- 7, 7, 7, 7, 7, 7, 32, 2, 23, 33, 24, 34, 35, 36, 32, 37,
- 38, 33, 24, 39, 40, 41, 42, 43, 44, 14, 24, 45, 46, 47, 32, 48,
- 49, 33, 24, 45, 50, 51, 32, 52, 53, 54, 55, 22, 56, 57, 42, 0,
- 58, 59, 24, 60, 61, 62, 32, 0, 63, 59, 24, 64, 61, 65, 32, 66,
- 63, 59, 7, 7, 67, 68, 32, 69, 70, 71, 7, 72, 73, 74, 42, 75,
- 2, 7, 7, 4, 76, 1, 0, 0, 77, 7, 78, 28, 79, 80, 0, 0,
- 47, 81, 1, 82, 83, 7, 84, 2, 85, 83, 7, 84, 86, 0, 0, 0,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 28, 7, 7, 87, 7, 7, 88,
- 7, 7, 7, 7, 89, 90, 7, 7, 89, 7, 7, 91, 92, 8, 7, 7,
- 7, 92, 7, 7, 7, 26, 48, 10, 7, 0, 7, 7, 7, 7, 7, 93,
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 25, 7, 2, 4, 7, 7, 7, 7, 94, 18,
- 58, 95, 7, 95, 7, 96, 58, 97, 7, 7, 7, 7, 7, 98, 1, 0,
- 99, 1, 7, 7, 7, 7, 7, 18, 7, 7, 4, 7, 7, 7, 7, 43,
- 7, 76, 29, 29, 42, 7, 28, 95, 7, 7, 29, 7, 1, 4, 0, 0,
- 7, 29, 7, 7, 7, 76, 7, 25, 1, 1, 100, 28, 0, 0, 0, 0,
- 7, 7, 7, 7, 29, 1, 101, 96, 7, 7, 7, 7, 7, 7, 7, 96,
- 7, 7, 7, 102, 60, 7, 7, 28, 18, 7, 7, 26, 0, 103, 7, 4,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 104,
- 7, 93, 7, 7, 93, 105, 7, 28, 7, 7, 7, 106, 107, 108, 84, 107,
- 0, 0, 0, 109, 47, 110, 0, 111, 0, 84, 0, 0, 0, 84, 112, 47,
- 113, 114, 115, 80, 116, 0, 7, 7, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 7, 7, 76, 7, 7, 7, 7, 7, 7, 7, 7, 117, 96,
- 7, 7, 87, 7, 7, 7, 118, 109, 7, 119, 120, 120, 120, 120, 7, 7,
- 121, 0, 2, 122, 2, 7, 7, 7, 7, 123, 2, 7, 7, 7, 7, 88,
- 124, 7, 7, 2, 7, 7, 7, 7, 76, 0, 7, 4, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 84, 0, 0, 0, 0, 7, 7, 28,
- 84, 7, 29, 0, 7, 7, 7, 125, 7, 7, 7, 7, 7, 7, 7, 10,
- 0, 126, 127, 7, 7, 7, 7, 7, 128, 7, 7, 7, 129, 0, 0, 126,
- 7, 7, 102, 0, 7, 7, 7, 96, 7, 7, 7, 7, 43, 1, 7, 130,
- 7, 7, 28, 7, 7, 96, 7, 84, 7, 7, 7, 7, 131, 1, 7, 76,
- 7, 7, 7, 119, 28, 1, 7, 71, 7, 7, 7, 7, 21, 99, 7, 129,
- 132, 133, 120, 7, 7, 88, 102, 7, 7, 7, 7, 7, 7, 7, 134, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 96, 7, 135, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 28, 7, 7, 7, 7, 7, 7, 1, 0, 0,
- 119, 136, 24, 137, 138, 7, 7, 7, 7, 7, 7, 10, 0, 31, 7, 7,
- 7, 7, 7, 7, 7, 28, 139, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 28, 0, 7, 7, 7, 7, 127, 7, 7, 102, 0, 0, 1,
- 7, 0, 7, 140, 141, 0, 0, 142, 7, 7, 7, 7, 7, 7, 7, 84,
- 0, 1, 2, 3, 2, 4, 42, 7, 7, 7, 7, 76, 143, 144, 0, 0,
- 145, 7, 8, 146, 28, 28, 0, 0, 7, 7, 7, 7, 7, 7, 7, 4,
- 0, 0, 0, 0, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 147,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 84, 7, 7, 7, 47, 47, 0,
- 7, 7, 141, 7, 4, 7, 7, 4, 7, 28, 7, 7, 148, 149, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 28, 1, 7, 7, 148, 7, 29,
- 7, 7, 102, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 119, 7, 43, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 150, 7, 7, 151, 7, 43, 7, 119, 7, 76, 0, 0, 0, 0, 7, 152,
- 7, 43, 7, 1, 0, 0, 0, 0, 7, 7, 7, 153, 0, 0, 0, 0,
- 154, 155, 7, 156, 0, 0, 7, 84, 7, 84, 0, 0, 83, 7, 119, 0,
- 7, 7, 7, 43, 7, 43, 7, 21, 7, 10, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 18, 0, 0, 0, 7, 7, 7, 21, 7, 7, 7, 21,
- 7, 7, 102, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 84, 100, 7, 7, 47, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 119, 0, 42, 109, 7, 7, 7, 4, 0, 7, 18, 1,
- 7, 7, 7, 85, 157, 7, 7, 158, 7, 7, 7, 7, 159, 160, 0, 0,
- 7, 14, 7, 161, 0, 0, 0, 0, 162, 19, 18, 7, 7, 7, 4, 1,
- 23, 33, 24, 163, 50, 164, 165, 95, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 4, 22, 0, 0, 7, 7, 7, 7, 166, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 167, 47, 168, 0, 0,
- 7, 7, 7, 7, 169, 1, 0, 0, 7, 7, 7, 18, 1, 0, 0, 0,
- 7, 26, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 1, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 7, 7, 170, 171, 0,
- 7, 7, 7, 76, 100, 7, 7, 7, 7, 172, 0, 0, 7, 7, 7, 18,
- 24, 7, 7, 8, 47, 1, 0, 127, 7, 127, 83, 119, 0, 0, 0, 0,
- 173, 7, 7, 174, 102, 1, 175, 7, 76, 176, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 76, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 18, 7, 76, 1, 0, 0, 0, 0, 0, 0, 7, 28, 95,
- 7, 7, 7, 119, 96, 1, 31, 177, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 3, 7, 7, 7, 118, 7, 0, 0, 0, 0, 178, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 102,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21,
- 7, 76, 0, 0, 0, 21, 179, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 4, 84, 18, 180, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 181, 182, 183, 0, 184, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 85, 7, 7, 7, 58, 186, 187, 188, 7, 7, 7,
- 189, 190, 7, 191, 192, 59, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 167, 7, 59, 88, 7, 88,
- 7, 85, 7, 85, 76, 7, 76, 7, 24, 7, 24, 7, 193, 7, 7, 7,
- 7, 7, 7, 135, 7, 7, 84, 194, 110, 101, 2, 0, 0, 0, 0, 0,
- 8, 128, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 84, 28, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95, 119, 0, 0,
- 7, 7, 7, 7, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 188, 7, 197, 198, 199, 200, 201, 202, 104, 29, 203, 29, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 119, 0, 0,
- 7, 7, 7, 95, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 47, 0,
- 7, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_lowercase(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_xid_continue_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 135, 255, 7, 0, 4, 160, 4, 255, 255,
- 127, 255, 195, 255, 3, 0, 31, 80, 223, 184, 192, 215, 251, 255, 191, 255,
- 251, 252, 127, 2, 255, 1, 255, 191, 182, 0, 7, 0, 255, 195, 239, 159,
- 255, 253, 255, 159, 255, 231, 63, 36, 255, 63, 255, 15, 223, 63, 248, 255,
- 207, 255, 249, 255, 197, 243, 159, 121, 128, 176, 3, 80, 238, 135, 109, 211,
- 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 237, 243, 191, 59, 1, 0,
- 0, 254, 238, 159, 159, 57, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199,
- 199, 61, 129, 0, 255, 223, 253, 255, 255, 227, 223, 61, 96, 7, 239, 223,
- 239, 243, 96, 64, 6, 0, 223, 125, 240, 128, 0, 252, 236, 255, 127, 252,
- 251, 47, 127, 132, 95, 255, 12, 0, 255, 127, 214, 247, 175, 255, 95, 63,
- 255, 243, 0, 3, 160, 194, 255, 254, 255, 31, 223, 255, 64, 0, 191, 32,
- 255, 247, 255, 61, 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 31, 0,
- 15, 0, 13, 0, 143, 48, 0, 56, 128, 0, 0, 248, 255, 0, 247, 255,
- 255, 251, 255, 170, 223, 95, 220, 31, 207, 15, 0, 128, 16, 0, 2, 128,
- 226, 255, 132, 252, 47, 63, 80, 253, 224, 67, 31, 248, 255, 128, 127, 0,
- 127, 127, 224, 0, 62, 31, 127, 230, 224, 255, 240, 191, 128, 255, 252, 255,
- 255, 249, 124, 0, 255, 232, 1, 128, 126, 126, 126, 0, 255, 55, 127, 248,
- 248, 224, 127, 95, 219, 255, 240, 255, 24, 0, 0, 224, 138, 170, 252, 252,
- 252, 28, 255, 239, 255, 183, 0, 32, 15, 255, 62, 0, 63, 253, 191, 145,
- 55, 0, 255, 192, 111, 240, 239, 254, 63, 135, 112, 0, 79, 0, 31, 30,
- 255, 23, 255, 64, 127, 189, 237, 251, 129, 224, 207, 31, 191, 0, 63, 255,
- 0, 63, 17, 0, 255, 252, 27, 0, 255, 35, 127, 251, 127, 180, 191, 253,
- 251, 1, 255, 224, 11, 0, 240, 0, 255, 99, 224, 227, 7, 248, 231, 15,
- 0, 60, 28, 0, 100, 222, 255, 235, 239, 255, 191, 231, 223, 223, 255, 123,
- 95, 252, 247, 207, 32, 0, 219, 7, 255, 67, 150, 254, 247, 10, 132, 234,
- 150, 170, 150, 247, 247, 94, 238, 251,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* XID_Continue: 2920 bytes. */
-
-RE_UINT32 re_get_xid_continue(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_xid_continue_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_xid_continue_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_xid_continue_stage_3[pos + f] << 4;
- pos += code;
- value = (re_xid_continue_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ v = re_lowercase_table_1[field_2];
+ v = re_lowercase_table_2[(v << 5) | field_1];
+ v = re_lowercase_table_3[(v << 2) | field_0];
-/* Default_Ignorable_Code_Point. */
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_default_ignorable_code_point_stage_1[] = {
- 0, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 4, 5, 2,
+/* Math. */
+static RE_UINT8 re_math_table_1[] = {
+ 0, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_default_ignorable_code_point_stage_2[] = {
- 0, 1, 2, 3, 2, 2, 2, 2, 4, 2, 2, 5, 6, 2, 2, 2,
- 7, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2,
- 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_math_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 10, 11, 12, 13, 0, 14, 15, 16, 17, 18, 0, 19, 20, 21, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 24, 25, 0, 26, 27, 28, 29, 30,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33,
+ 34, 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 0, 19, 37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 40,
+ 23, 23, 41, 23, 42, 43, 44, 23, 45, 46, 47, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 48, 23, 23, 23, 23, 23, 23, 23, 23, 49, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 50, 51, 52, 53, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_default_ignorable_code_point_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 13,
- 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16,
+static RE_UINT8 re_math_table_3[] = {
+ 0, 0, 0, 0, 0, 8, 0, 112, 0, 0, 0, 64, 0, 0, 0, 80,
+ 0, 16, 2, 0, 0, 0, 128, 0, 0, 0, 39, 0, 0, 0, 115, 0,
+ 192, 1, 0, 0, 0, 0, 64, 0, 0, 0, 28, 0, 17, 0, 4, 0,
+ 30, 0, 0, 124, 0, 124, 0, 0, 0, 0, 255, 31, 98, 248, 0, 0,
+ 132, 252, 47, 63, 16, 179, 251, 241, 255, 11, 0, 0, 0, 0, 255, 255,
+ 255, 126, 195, 240, 255, 255, 255, 47, 48, 0, 240, 255, 255, 255, 255, 255,
+ 0, 15, 0, 0, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 248,
+ 255, 255, 191, 0, 0, 0, 1, 240, 7, 0, 0, 0, 3, 192, 255, 240,
+ 195, 140, 15, 0, 148, 31, 0, 255, 96, 0, 0, 0, 5, 0, 0, 0,
+ 15, 224, 0, 0, 159, 31, 0, 0, 0, 2, 0, 0, 126, 1, 0, 0,
+ 4, 30, 0, 0, 255, 255, 223, 255, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 255, 207, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 3, 0
};
-static RE_UINT8 re_default_ignorable_code_point_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
- 0, 120, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 124, 0, 0,
- 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1,
- 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 7,
- 255, 255, 255, 255, 255, 255, 255, 255,
-};
+RE_UINT32 re_get_math(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_math_table_1[field_2];
+ v = re_math_table_2[(v << 5) | field_1];
+ v = re_math_table_3[(v << 2) | field_0];
-/* Default_Ignorable_Code_Point: 488 bytes. */
-
-RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_default_ignorable_code_point_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_default_ignorable_code_point_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_default_ignorable_code_point_stage_3[pos + f] << 6;
- pos += code;
- value = (re_default_ignorable_code_point_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Grapheme_Extend. */
+/* NFC_Quick_Check. */
+static RE_UINT8 re_nfc_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 5, 10, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 5,
+ 5, 5, 5, 5, 12, 13, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 16, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
-static RE_UINT8 re_grapheme_extend_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 7, 8, 9,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_nfc_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 9, 10, 0,
+ 0, 11, 12, 0, 0, 0, 0, 0, 0, 9, 13, 0, 0, 9, 14, 0,
+ 0, 0, 15, 0, 0, 0, 16, 0, 0, 9, 14, 0, 0, 0, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 20, 21, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 30,
+ 31, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36,
+ 37, 38, 36, 39, 36, 36, 40, 0, 41, 42, 43, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_nfc_quick_check_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2,
+ 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1,
+ 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 2, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
};
-static RE_UINT8 re_grapheme_extend_stage_2[] = {
- 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 0, 0, 15, 0, 0, 0, 16, 17, 18, 19, 20, 21, 22, 0, 0,
- 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 0, 0,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+RE_UINT32 re_get_nfc_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_nfc_quick_check_table_1[field_2];
+ v = re_nfc_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfc_quick_check_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* NFD_Quick_Check. */
+static RE_UINT8 re_nfd_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 5, 10, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5,
+ 5, 5, 5, 5, 14, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+static RE_UINT8 re_nfd_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 7, 8, 9,
+ 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 15, 16, 0,
+ 17, 18, 19, 20, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 0,
+ 0, 28, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0,
+ 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 39, 0, 0,
+ 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 30, 31, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 34,
- 0, 35, 36, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 52, 53, 54, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 45, 44, 44, 46, 47, 44, 48, 49, 44, 50, 51, 52,
+ 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 0,
+ 58, 59, 60, 61, 62, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67, 68, 13, 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0,
- 62, 56, 63, 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 70, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
+ 71, 72, 44, 73, 44, 44, 46, 0, 74, 75, 76, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_extend_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0,
- 7, 0, 8, 9, 0, 0, 10, 11, 12, 13, 14, 0, 0, 15, 0, 16,
- 17, 18, 19, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 30, 31, 34, 35, 26, 36, 37, 25, 38, 39, 40, 0,
- 41, 42, 43, 25, 26, 44, 45, 25, 46, 47, 28, 25, 0, 0, 48, 0,
- 0, 49, 50, 0, 0, 51, 52, 0, 53, 54, 0, 55, 56, 57, 58, 0,
- 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 64, 64, 65, 65, 0, 66, 67, 0, 68, 0, 0, 0, 69, 70, 0, 0,
- 0, 71, 0, 0, 0, 0, 0, 0, 72, 0, 73, 74, 0, 75, 0, 0,
- 76, 77, 38, 78, 46, 79, 0, 80, 0, 81, 0, 0, 0, 0, 82, 83,
- 0, 0, 0, 0, 0, 0, 1, 84, 85, 0, 0, 0, 0, 0, 13, 86,
- 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 1,
- 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 42, 0, 0, 92,
- 93, 69, 0, 0, 0, 0, 94, 95, 0, 96, 97, 0, 22, 98, 0, 99,
- 0, 100, 101, 31, 0, 102, 26, 103, 0, 0, 0, 0, 0, 0, 0, 104,
- 39, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, 0, 0,
- 108, 109, 0, 0, 0, 0, 0, 69, 0, 110, 0, 0, 0, 0, 0, 0,
- 0, 0, 15, 0, 0, 0, 0, 0, 26, 111, 112, 88, 46, 113, 0, 0,
- 22, 114, 0, 115, 46, 116, 117, 0, 0, 118, 0, 0, 0, 0, 88, 119,
- 46, 47, 120, 121, 0, 0, 0, 0, 0, 111, 122, 0, 0, 123, 124, 0,
- 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, 106, 0, 0, 128, 0, 0,
- 63, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 131, 106, 132, 133, 134, 0, 135, 0, 0, 0,
- 0, 136, 0, 0, 137, 138, 0, 0, 0, 139, 140, 0, 141, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143,
- 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 146, 0, 0, 0,
- 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 148, 149, 150, 0, 0,
- 0, 0, 151, 0, 0, 0, 0, 0, 1, 152, 1, 153, 154, 155, 0, 0,
- 156, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
- 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 159, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2,
-};
-
-static RE_UINT8 re_grapheme_extend_stage_4[] = {
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 248, 3, 0, 0,
- 0, 0, 254, 255, 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 255, 7,
- 0, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 159, 159, 61, 0, 0,
- 0, 0, 2, 0, 0, 0, 255, 255, 255, 7, 0, 0, 192, 255, 1, 0,
- 0, 248, 15, 32, 0, 0, 192, 251, 239, 62, 0, 0, 0, 0, 0, 14,
- 0, 0, 248, 255, 251, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 20,
- 254, 33, 254, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 80,
- 30, 32, 128, 0, 12, 0, 0, 64, 6, 0, 0, 0, 0, 0, 0, 16,
- 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0, 12, 0, 0, 252,
- 0, 0, 0, 208, 30, 32, 192, 0, 4, 0, 0, 0, 0, 0, 0, 64,
- 1, 32, 128, 0, 17, 0, 0, 0, 0, 0, 0, 192, 193, 61, 96, 0,
- 0, 0, 0, 144, 68, 48, 96, 0, 3, 0, 0, 0, 0, 0, 0, 88,
- 0, 132, 92, 128, 0, 0, 242, 7, 128, 127, 0, 0, 0, 0, 242, 31,
- 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
- 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
- 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
- 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 15, 32,
- 0, 56, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0, 135, 1, 4, 14,
- 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159, 0, 0, 255, 127,
- 15, 0, 0, 0, 0, 0, 240, 23, 0, 248, 15, 0, 60, 59, 0, 0,
- 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 247, 255, 253, 33, 16, 3,
- 255, 255, 255, 251, 0, 16, 0, 0, 255, 255, 1, 0, 0, 128, 3, 0,
- 0, 0, 0, 128, 0, 252, 0, 0, 0, 0, 0, 6, 0, 128, 247, 63,
- 0, 0, 3, 0, 68, 8, 0, 0, 48, 0, 0, 0, 255, 255, 3, 128,
- 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 200, 51, 32, 0, 0, 0,
- 0, 126, 102, 0, 8, 16, 0, 0, 0, 0, 157, 193, 0, 48, 64, 0,
- 32, 33, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 192, 7,
- 110, 240, 0, 0, 0, 0, 0, 135, 240, 0, 0, 0, 0, 0, 0, 255,
- 127, 0, 0, 0, 0, 0, 120, 6, 128, 239, 31, 0, 0, 0, 8, 0,
- 0, 0, 192, 127, 0, 30, 0, 0, 0, 128, 211, 64, 248, 7, 0, 0,
- 1, 0, 128, 0, 192, 31, 31, 0, 92, 0, 0, 64, 0, 0, 249, 165,
- 13, 0, 0, 0, 0, 128, 60, 176, 1, 0, 0, 48, 0, 0, 248, 167,
- 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6, 0, 0, 240, 12,
- 254, 7, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14, 0, 252, 127, 3,
- 0, 0, 127, 191, 0, 0, 252, 255, 255, 252, 109, 0, 0, 0, 126, 180,
- 191, 0, 0, 0, 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 31, 0,
- 0, 0, 127, 0, 0, 128, 0, 0, 0, 128, 7, 0, 0, 0, 0, 96,
- 160, 195, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
- 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 0, 240, 0, 0, 240, 7, 0, 0,
-};
-
-/* Grapheme_Extend: 1672 bytes. */
-
-RE_UINT32 re_get_grapheme_extend(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_grapheme_extend_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_grapheme_extend_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_grapheme_extend_stage_3[pos + f] << 5;
- pos += code;
- value = (re_grapheme_extend_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 0, 85, 86, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_nfd_quick_check_table_3[] = {
+ 255, 255, 255, 255, 64, 0, 129, 193, 64, 0, 129, 65, 0, 0, 3, 0,
+ 192, 0, 14, 129, 7, 14, 12, 0, 192, 0, 0, 128, 252, 127, 254, 255,
+ 255, 31, 0, 32, 48, 0, 206, 0, 0, 0, 0, 48, 63, 0, 240, 255,
+ 228, 255, 255, 255, 255, 255, 239, 191, 31, 40, 254, 255, 255, 3, 254, 255,
+ 255, 131, 231, 255, 116, 143, 255, 253, 255, 255, 255, 253, 255, 255, 116, 143,
+ 255, 255, 63, 255, 249, 255, 48, 3, 3, 3, 192, 252, 131, 255, 255, 255,
+ 250, 255, 247, 255, 255, 253, 237, 255, 255, 255, 255, 0, 255, 231, 255, 79,
+ 255, 255, 183, 255, 255, 255, 255, 177, 255, 230, 255, 207, 255, 255, 239, 255,
+ 255, 227, 255, 255, 255, 254, 255, 255, 126, 242, 255, 255, 255, 255, 255, 139,
+ 247, 223, 123, 239, 255, 253, 151, 254, 253, 255, 247, 223, 123, 239, 255, 253,
+ 191, 255, 255, 255, 191, 170, 251, 255, 255, 255, 255, 215, 244, 255, 255, 255,
+ 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 252, 0, 0, 192, 192,
+ 192, 192, 0, 85, 0, 0, 0, 192, 0, 0, 32, 160, 33, 0, 48, 16,
+ 0, 0, 35, 192, 252, 255, 255, 255, 191, 243, 255, 255, 255, 255, 255, 243,
+ 255, 191, 255, 255, 255, 31, 255, 255, 239, 237, 255, 255, 175, 255, 255, 255,
+ 109, 253, 255, 255, 250, 31, 204, 252, 204, 252, 255, 255, 255, 15, 255, 255,
+ 240, 195, 255, 255, 255, 249, 255, 255, 255, 255, 255, 239, 255, 175, 170, 170,
+ 90, 253, 36, 201, 255, 255, 111, 184, 240, 255, 255, 255, 0, 192, 26, 128,
+ 154, 3, 0, 0, 0, 192, 0, 0, 255, 255, 255, 95, 255, 3, 128, 160,
+ 36, 128, 255, 255, 255, 255, 255, 235, 255, 247, 255, 255, 255, 63, 255, 255,
+ 255, 231, 255, 255, 255, 255, 255, 167, 255, 255, 255, 254, 255, 255, 255, 63,
+ 224, 255, 255, 255, 255, 255, 255, 7, 254, 255, 255, 255
+};
+
+RE_UINT32 re_get_nfd_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_nfd_quick_check_table_1[field_2];
+ v = re_nfd_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfd_quick_check_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Grapheme_Base. */
-
-static RE_UINT8 re_grapheme_base_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6,
-};
-
-static RE_UINT8 re_grapheme_base_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
- 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 19, 19, 13, 32, 19, 19,
- 19, 33, 19, 19, 19, 19, 19, 19, 19, 19, 34, 35, 13, 13, 13, 13,
- 13, 36, 37, 19, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 19, 39,
- 19, 19, 19, 19, 40, 41, 42, 19, 43, 19, 44, 45, 46, 47, 48, 19,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 49, 13, 13, 13, 50, 51, 13,
- 13, 13, 13, 52, 13, 13, 13, 13, 13, 13, 53, 19, 19, 19, 54, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-};
-
-static RE_UINT8 re_grapheme_base_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 2, 2, 30, 31, 32, 33, 2, 2, 2, 2, 2, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 2, 47, 2, 2, 48, 49,
- 50, 51, 2, 52, 2, 2, 2, 2, 53, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 54, 55, 56, 57, 58, 59, 60, 61, 2, 62,
- 63, 64, 65, 66, 67, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 68, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69,
- 2, 70, 2, 2, 71, 72, 2, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- 2, 2, 2, 2, 2, 2, 2, 82, 83, 83, 83, 83, 83, 83, 83, 83,
- 83, 83, 2, 2, 84, 85, 86, 87, 2, 2, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 83, 98, 99, 100, 2, 101, 102, 83, 2, 2, 103, 83,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 83, 115, 83, 116, 117,
- 118, 119, 120, 121, 122, 123, 124, 83, 125, 126, 83, 127, 128, 129, 130, 83,
- 131, 132, 83, 133, 134, 135, 83, 83, 136, 137, 138, 139, 83, 140, 83, 141,
- 2, 2, 2, 2, 2, 2, 2, 142, 143, 2, 144, 83, 83, 83, 83, 83,
- 145, 83, 83, 83, 83, 83, 83, 83, 2, 2, 2, 2, 146, 83, 83, 83,
- 2, 2, 2, 2, 147, 148, 149, 150, 83, 83, 83, 83, 151, 152, 153, 154,
- 2, 2, 2, 2, 2, 2, 2, 155, 2, 2, 2, 2, 2, 156, 83, 83,
- 2, 2, 157, 2, 2, 158, 83, 83, 159, 160, 83, 83, 83, 83, 83, 83,
- 2, 161, 162, 163, 164, 165, 166, 83, 167, 168, 169, 2, 2, 170, 2, 171,
- 2, 2, 2, 2, 172, 173, 83, 83, 83, 83, 174, 83, 83, 175, 83, 83,
- 2, 176, 177, 83, 83, 83, 83, 83, 178, 179, 180, 83, 181, 182, 83, 83,
- 183, 184, 185, 186, 187, 83, 2, 2, 2, 2, 2, 2, 2, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 83, 83, 2, 2, 2, 2, 2, 197, 2, 2,
- 2, 2, 2, 2, 2, 2, 198, 2, 199, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 200, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201,
- 2, 2, 2, 2, 202, 83, 83, 83,
+/* NFKC_Quick_Check. */
+static RE_UINT8 re_nfkc_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 16,
+ 5, 5, 5, 5, 17, 18, 19, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 20, 21, 5, 5, 5, 5, 5, 22, 23, 5, 24, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
};
-static RE_UINT8 re_grapheme_base_stage_4[] = {
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127,
- 0, 0, 0, 0, 255, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 252,
- 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 7, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 127, 254, 255, 255, 255, 255,
- 255, 231, 0, 0, 0, 0, 0, 64, 73, 0, 255, 255, 255, 135, 31, 0,
- 192, 255, 0, 200, 255, 255, 255, 255, 255, 7, 0, 0, 255, 255, 254, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 64, 96, 194, 255, 255,
- 255, 63, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 63, 0, 2, 0, 255, 255, 255, 255, 255, 7, 240, 199,
- 255, 255, 63, 4, 16, 1, 255, 127, 255, 255, 255, 65, 255, 7, 0, 0,
- 0, 0, 0, 0, 255, 255, 223, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 248, 255, 255, 255, 255, 255, 255, 235, 1, 222, 1, 255, 243, 255, 255, 255,
- 237, 159, 249, 255, 255, 253, 197, 163, 129, 89, 0, 176, 195, 255, 255, 63,
- 232, 135, 249, 255, 255, 253, 109, 195, 1, 0, 0, 94, 192, 255, 92, 0,
- 232, 191, 251, 255, 255, 253, 237, 227, 1, 26, 1, 0, 195, 255, 3, 2,
- 236, 159, 249, 255, 255, 253, 237, 35, 129, 25, 0, 176, 195, 255, 255, 0,
- 232, 199, 61, 214, 24, 199, 255, 131, 198, 29, 1, 0, 192, 255, 255, 7,
- 238, 223, 253, 255, 255, 253, 255, 35, 30, 0, 0, 7, 195, 255, 128, 255,
- 253, 223, 253, 255, 255, 253, 239, 99, 155, 13, 0, 64, 195, 255, 6, 0,
- 236, 223, 253, 255, 255, 255, 255, 167, 193, 221, 112, 255, 195, 255, 255, 255,
- 236, 255, 127, 252, 255, 255, 251, 47, 127, 0, 3, 127, 192, 255, 28, 0,
- 254, 255, 255, 255, 255, 255, 13, 128, 127, 128, 255, 15, 0, 0, 0, 0,
- 214, 247, 255, 255, 175, 255, 13, 32, 95, 0, 255, 243, 0, 0, 0, 0,
- 255, 255, 255, 252, 255, 255, 95, 253, 255, 254, 255, 255, 255, 31, 0, 128,
- 32, 31, 0, 0, 0, 0, 0, 192, 191, 223, 255, 7, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 31, 2, 153, 255, 255, 255, 60, 254, 255, 225, 255,
- 155, 223, 255, 223, 255, 255, 255, 255, 191, 32, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 127, 61, 255, 255, 255, 255,
- 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 255, 255,
- 255, 255, 61, 255, 255, 255, 255, 255, 255, 255, 255, 7, 255, 255, 255, 31,
- 255, 255, 255, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 63,
- 255, 255, 255, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1,
- 255, 223, 3, 0, 255, 255, 99, 0, 255, 255, 3, 0, 255, 223, 1, 0,
- 255, 255, 255, 255, 255, 255, 79, 192, 191, 1, 240, 31, 255, 3, 255, 3,
- 255, 7, 255, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1,
- 159, 255, 255, 255, 255, 5, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 127, 120, 14, 251, 1, 241, 255, 255, 255, 255, 63, 31, 0,
- 255, 255, 255, 255, 255, 15, 255, 255, 255, 3, 255, 199, 255, 255, 255, 255,
- 255, 255, 127, 198, 255, 255, 255, 255, 255, 255, 191, 0, 26, 224, 7, 0,
- 255, 3, 255, 3, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 240, 255, 255, 255, 255, 255, 15, 232, 251, 15, 255, 255, 255, 7, 240, 31,
- 252, 255, 255, 255, 195, 196, 255, 255, 255, 255, 255, 255, 191, 92, 12, 240,
- 255, 255, 255, 255, 255, 15, 48, 248, 255, 227, 255, 255, 255, 255, 255, 255,
- 255, 1, 255, 255, 255, 255, 255, 231, 255, 0, 8, 0, 2, 222, 239, 4,
- 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 63, 63, 255, 255, 255, 255, 63, 63, 255, 170, 255, 255, 255, 63,
- 255, 255, 255, 255, 255, 255, 223, 255, 223, 255, 207, 239, 255, 255, 220, 127,
- 255, 7, 255, 255, 255, 128, 255, 255, 255, 255, 255, 255, 0, 0, 243, 255,
- 255, 127, 255, 31, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 127, 0, 0, 0, 255, 7, 0, 0, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 255,
- 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 12, 254,
- 255, 255, 255, 255, 191, 32, 255, 255, 255, 255, 255, 255, 255, 128, 1, 0,
- 255, 255, 127, 0, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 255, 15,
- 255, 255, 255, 255, 255, 3, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 127, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 224, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 127, 255, 255, 255, 255, 255, 7, 255, 255, 255, 255, 15, 0, 255, 255,
- 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 63, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0,
- 255, 31, 255, 255, 255, 255, 255, 255, 127, 0, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 127, 8, 192,
- 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 124, 0, 0, 0, 0, 0, 128, 255,
- 187, 247, 255, 255, 159, 15, 255, 3, 255, 255, 255, 255, 255, 255, 255, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 15, 192, 255, 3, 0, 0, 252, 127,
- 255, 255, 255, 255, 63, 192, 255, 255, 127, 0, 12, 128, 255, 255, 255, 31,
- 248, 255, 255, 255, 255, 255, 55, 204, 255, 191, 255, 195, 223, 255, 255, 127,
- 255, 255, 255, 255, 255, 129, 25, 0, 247, 47, 255, 243, 255, 255, 255, 239,
- 255, 255, 255, 255, 255, 255, 98, 62, 5, 0, 0, 248, 255, 207, 63, 0,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 30, 255, 3,
- 255, 255, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255, 255, 255, 255, 15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 0, 0, 0,
- 127, 0, 248, 160, 255, 255, 127, 95, 219, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 248, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255,
- 255, 255, 252, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 63,
- 0, 0, 255, 3, 0, 0, 255, 255, 255, 255, 247, 255, 127, 15, 223, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31,
- 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 63, 255, 255, 255, 127, 252, 252, 252, 28, 127, 127, 0, 48,
- 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7,
- 135, 255, 255, 255, 255, 255, 143, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 127, 255, 15, 1, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 31,
- 255, 255, 255, 31, 255, 255, 255, 255, 255, 255, 1, 0, 254, 255, 255, 15,
- 255, 255, 255, 255, 15, 224, 255, 255, 255, 7, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 191, 255, 255, 255, 255, 15, 255, 63, 0, 0, 0, 0, 0,
- 255, 255, 255, 63, 255, 3, 255, 255, 255, 255, 15, 255, 255, 255, 255, 15,
- 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 15, 128, 0, 0,
- 255, 255, 255, 255, 255, 255, 127, 0, 255, 255, 63, 0, 255, 0, 0, 0,
- 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 191, 255, 255, 255, 255, 255,
- 255, 255, 255, 127, 128, 255, 0, 0, 0, 0, 0, 0, 255, 255, 55, 248,
- 255, 255, 255, 143, 255, 255, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 252, 255, 255, 255, 255, 255,
- 1, 0, 239, 254, 255, 255, 63, 0, 255, 1, 255, 1, 255, 255, 255, 255,
- 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 31, 248, 127, 0,
- 255, 255, 255, 255, 255, 255, 63, 254, 255, 255, 63, 255, 255, 255, 7, 255,
- 255, 255, 3, 30, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 7, 0, 255, 255, 255, 255, 255, 255, 7, 252,
- 255, 255, 255, 255, 15, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 127,
- 255, 255, 255, 255, 255, 0, 255, 255, 63, 0, 254, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 127, 0,
- 253, 255, 255, 255, 255, 255, 255, 0, 128, 63, 252, 255, 255, 255, 0, 0,
- 252, 255, 255, 255, 255, 255, 135, 217, 3, 0, 255, 255, 255, 1, 255, 3,
- 248, 255, 255, 255, 127, 16, 192, 255, 127, 0, 255, 255, 255, 255, 119, 0,
- 252, 255, 255, 255, 255, 255, 63, 128, 255, 33, 255, 255, 254, 255, 31, 0,
- 255, 255, 251, 255, 255, 127, 44, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 127, 189, 255, 191, 255, 3, 255, 255, 255, 255, 255, 127, 7, 0, 255, 3,
- 236, 159, 249, 255, 255, 253, 237, 163, 158, 57, 1, 224, 15, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 0, 163, 255, 255, 171, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 6, 90, 242, 0, 255, 3, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 127, 3, 79, 254, 255, 255, 15, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 7, 88, 30, 0, 255, 3, 255, 31, 0, 0,
- 255, 255, 255, 255, 255, 215, 64, 1, 255, 3, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 7, 67, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 127, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 128,
- 0, 0, 0, 0, 255, 252, 255, 255, 255, 255, 15, 240, 30, 0, 0, 0,
- 1, 248, 255, 255, 255, 255, 7, 134, 127, 0, 129, 241, 255, 255, 255, 255,
- 255, 3, 128, 252, 7, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 1,
- 255, 253, 255, 255, 255, 255, 0, 64, 63, 0, 255, 255, 255, 31, 255, 255,
- 255, 255, 0, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 127, 251, 255, 255, 255, 255, 1, 0, 64, 0, 255, 3, 191, 253, 255, 255,
- 255, 127, 88, 1, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 231, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 3, 128,
- 255, 255, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 31, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 1, 255, 255, 255, 127, 255, 195, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 63, 32, 0,
- 255, 255, 255, 255, 255, 255, 128, 255, 63, 0, 255, 251, 251, 255, 255, 224,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 255, 255, 255, 255, 255, 255,
- 255, 0, 248, 255, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 0,
- 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 255, 31,
- 255, 1, 255, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 255, 255, 95, 60, 0, 0,
- 24, 240, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 35, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 255, 255, 255, 1,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 255, 255,
- 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 255, 255, 255, 255,
- 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 128, 7, 0, 0, 0, 0, 0, 224, 223, 255,
- 239, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 31, 128, 63, 255, 195, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 15, 255, 131,
- 255, 255, 255, 255, 255, 255, 255, 255, 159, 255, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 15, 8, 255, 195, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255,
- 255, 255, 255, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 254, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 239, 255, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
- 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 0, 0, 0, 0, 3, 0,
- 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 15, 0, 255, 127, 254, 255, 254, 255, 254, 255, 255, 255, 63, 0,
- 255, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 255, 255,
- 255, 255, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255,
- 7, 0, 255, 255, 255, 255, 255, 15, 255, 1, 3, 0, 63, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 255, 31, 255, 7,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 255, 15, 0, 0,
- 255, 15, 255, 255, 255, 255, 255, 255, 255, 0, 255, 3, 255, 255, 255, 255,
- 255, 0, 255, 255, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 239, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 123, 252,
- 255, 255, 255, 255, 231, 199, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 63, 15, 7,
- 7, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 31, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 3, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0,
- 255, 255, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_nfkc_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 4, 0, 0, 5, 6,
+ 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 0, 15, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 22, 23, 0,
+ 0, 24, 25, 0, 0, 0, 0, 0, 0, 22, 26, 0, 0, 22, 27, 0,
+ 0, 0, 28, 0, 0, 0, 29, 0, 0, 22, 27, 0, 0, 0, 30, 0,
+ 0, 31, 0, 0, 0, 31, 32, 0, 33, 0, 34, 35, 36, 37, 0, 0,
+ 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 41, 42, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 47, 48, 0, 0,
+ 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 0, 0, 60, 61, 62, 48, 63, 0, 0, 0,
+ 0, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 48, 48, 48, 48, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 33, 0, 0, 67, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 31, 48, 48, 48, 48, 48, 48, 69, 0,
+ 70, 71, 0, 0, 72, 0, 0, 4, 0, 73, 48, 48, 74, 0, 0, 0,
+ 75, 48, 76, 75, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+ 80, 81, 48, 82, 48, 48, 83, 0, 84, 85, 86, 48, 48, 87, 88, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 89, 90, 48, 91, 48, 92, 93,
+ 94, 90, 95, 96, 48, 48, 48, 97, 98, 48, 48, 48, 48, 75, 99, 100,
+ 0, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 27, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 9, 0, 47, 70, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 107, 48, 108, 109, 110, 48, 111, 112, 113, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 114, 48, 48, 48, 48, 48, 48, 48, 48, 115, 48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 77, 0, 0, 0,
+ 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Grapheme_Base: 3946 bytes. */
-
-RE_UINT32 re_get_grapheme_base(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_grapheme_base_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_grapheme_base_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_grapheme_base_stage_3[pos + f] << 7;
- pos += code;
- value = (re_grapheme_base_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Grapheme_Link. */
-
-static RE_UINT8 re_grapheme_link_stage_1[] = {
- 0, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_nfkc_quick_check_table_3[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0,
+ 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_grapheme_link_stage_2[] = {
- 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_link_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 2, 1, 0, 3, 4, 0, 4, 0, 0, 0, 5, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 5, 10, 11,
- 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 0, 0, 5, 0, 14, 0, 15, 0, 0, 0, 16, 0, 0, 0, 17,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 18, 19, 0, 20, 0, 0, 15, 21, 0, 0, 22, 0, 1, 0, 0,
- 0, 23, 0, 23, 0, 0, 12, 0, 12, 0, 16, 0, 24, 0, 0, 0,
- 19, 0, 0, 0, 0, 0, 0, 9, 25, 26, 27, 0, 0, 0, 0, 0,
- 12, 0, 0, 0, 0, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_link_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 24, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 16, 0, 0, 0, 16, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 0, 128, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
-};
-
-/* Grapheme_Link: 580 bytes. */
-
-RE_UINT32 re_get_grapheme_link(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_grapheme_link_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_grapheme_link_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_grapheme_link_stage_3[pos + f] << 6;
- pos += code;
- value = (re_grapheme_link_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* White_Space. */
-
-static RE_UINT8 re_white_space_stage_1[] = {
+ 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2,
+ 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1,
+ 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 2, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_white_space_stage_2[] = {
- 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_white_space_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 3, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_white_space_stage_4[] = {
- 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 7, 0, 0, 0, 131, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
-};
-
-/* White_Space: 218 bytes. */
-
-RE_UINT32 re_get_white_space(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_white_space_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_white_space_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_white_space_stage_3[pos + f] << 7;
- pos += code;
- value = (re_white_space_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Bidi_Control. */
-
-static RE_UINT8 re_bidi_control_stage_1[] = {
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_bidi_control_stage_2[] = {
- 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_bidi_control_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_bidi_control_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 192, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 192, 3, 0, 0,
-};
-
-/* Bidi_Control: 162 bytes. */
-
-RE_UINT32 re_get_bidi_control(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_bidi_control_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_bidi_control_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_bidi_control_stage_3[pos + f] << 7;
- pos += code;
- value = (re_bidi_control_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Join_Control. */
-
-static RE_UINT8 re_join_control_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_join_control_stage_2[] = {
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_join_control_stage_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_join_control_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Join_Control: 130 bytes. */
-
-RE_UINT32 re_get_join_control(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_join_control_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_join_control_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_join_control_stage_3[pos + f] << 7;
- pos += code;
- value = (re_join_control_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Dash. */
-
-static RE_UINT8 re_dash_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_dash_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, 1,
- 5, 6, 1, 1, 1, 1, 1, 7, 8, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9,
-};
-
-static RE_UINT8 re_dash_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 1, 1, 1, 1, 1,
- 8, 1, 1, 1, 1, 1, 1, 1, 9, 3, 1, 1, 1, 1, 1, 1,
- 10, 1, 11, 1, 1, 1, 1, 1, 12, 13, 1, 1, 14, 1, 1, 1,
-};
-
-static RE_UINT8 re_dash_stage_4[] = {
- 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 128, 4, 0, 0, 0, 12,
- 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 8, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0,
-};
-
-/* Dash: 364 bytes. */
-
-RE_UINT32 re_get_dash(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_dash_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_dash_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_dash_stage_3[pos + f] << 6;
- pos += code;
- value = (re_dash_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Hyphen. */
-
-static RE_UINT8 re_hyphen_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_hyphen_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 5, 6, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_hyphen_stage_3[] = {
- 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 8, 9, 1, 1,
-};
+RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_hyphen_stage_4[] = {
- 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 8, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-/* Hyphen: 308 bytes. */
-
-RE_UINT32 re_get_hyphen(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_hyphen_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_hyphen_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_hyphen_stage_3[pos + f] << 6;
- pos += code;
- value = (re_hyphen_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ v = re_nfkc_quick_check_table_1[field_2];
+ v = re_nfkc_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfkc_quick_check_table_3[(v << 5) | field_0];
-/* Quotation_Mark. */
+ return v;
+}
-static RE_UINT8 re_quotation_mark_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+/* NFKD_Quick_Check. */
+static RE_UINT8 re_nfkd_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 17, 18,
+ 5, 5, 5, 5, 19, 20, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 22, 23, 5, 5, 5, 5, 5, 24, 25, 5, 26, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
};
-static RE_UINT8 re_quotation_mark_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+static RE_UINT8 re_nfkd_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
+ 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
+ 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0,
+ 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0,
+ 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 42, 0,
+ 0, 43, 0, 0, 0, 43, 44, 0, 45, 0, 46, 47, 48, 49, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
+ 59, 59, 59, 59, 60, 59, 59, 61, 62, 59, 63, 64, 59, 65, 66, 67,
+ 68, 69, 70, 71, 72, 40, 0, 0, 73, 74, 75, 59, 76, 77, 78, 0,
+ 79, 80, 81, 82, 83, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 59, 59, 59, 59, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 0, 0, 88, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
+ 0, 0, 0, 0, 90, 0, 0, 43, 59, 59, 59, 59, 59, 59, 91, 0,
+ 92, 93, 94, 95, 96, 94, 95, 97, 0, 98, 59, 59, 99, 0, 0, 0,
+ 100, 59, 101, 100, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 106, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59,
+ 107, 108, 59, 109, 59, 59, 61, 0, 110, 111, 112, 59, 59, 113, 114, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 64, 115, 59, 4, 59, 116, 117,
+ 118, 115, 119, 120, 59, 59, 59, 121, 122, 59, 59, 59, 59, 100, 123, 124,
+ 0, 0, 0, 0, 125, 126, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 15, 0, 58, 92, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 59, 59, 65, 59, 133, 134, 135, 59, 136, 137, 138, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 7, 59, 59, 59, 59, 59, 59, 59, 59, 139, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 140, 141, 142, 143, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 145, 146, 147, 39, 102, 0, 0, 0,
+ 148, 60, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_nfkd_quick_check_table_3[] = {
+ 255, 255, 255, 255, 254, 122, 195, 136, 64, 0, 129, 193, 64, 0, 129, 65,
+ 0, 0, 3, 0, 192, 0, 2, 1, 6, 12, 12, 0, 192, 0, 0, 0,
+ 252, 127, 254, 255, 15, 0, 0, 32, 48, 0, 192, 0, 0, 0, 0, 48,
+ 63, 0, 240, 255, 255, 255, 0, 254, 255, 255, 255, 192, 224, 255, 255, 255,
+ 228, 255, 255, 255, 255, 255, 239, 187, 15, 40, 254, 255, 255, 3, 254, 255,
+ 255, 131, 128, 255, 255, 255, 200, 253, 116, 143, 255, 253, 255, 255, 255, 253,
+ 255, 255, 116, 143, 255, 255, 63, 255, 249, 255, 48, 3, 3, 3, 192, 252,
+ 127, 255, 255, 255, 131, 255, 255, 255, 255, 255, 31, 254, 250, 255, 247, 255,
+ 255, 253, 237, 255, 255, 255, 255, 0, 255, 231, 255, 79, 255, 255, 183, 255,
+ 255, 255, 255, 177, 255, 230, 255, 207, 255, 255, 239, 255, 255, 227, 255, 255,
+ 255, 254, 255, 255, 126, 242, 255, 255, 255, 255, 255, 139, 255, 255, 247, 255,
+ 255, 255, 255, 207, 255, 239, 255, 255, 247, 223, 123, 239, 255, 253, 23, 252,
+ 253, 255, 247, 223, 123, 239, 255, 253, 191, 255, 255, 255, 255, 255, 255, 239,
+ 191, 170, 251, 255, 255, 255, 255, 215, 244, 255, 255, 255, 255, 143, 0, 8,
+ 0, 64, 0, 0, 0, 248, 255, 254, 255, 255, 255, 7, 0, 0, 0, 0,
+ 0, 0, 0, 240, 0, 0, 0, 252, 0, 0, 192, 192, 192, 192, 0, 85,
+ 0, 0, 0, 192, 0, 0, 32, 0, 32, 0, 48, 16, 0, 0, 35, 128,
+ 0, 248, 125, 255, 143, 127, 39, 175, 127, 252, 127, 127, 255, 255, 12, 0,
+ 0, 128, 0, 224, 16, 1, 144, 193, 168, 66, 4, 4, 30, 252, 0, 0,
+ 255, 253, 255, 243, 255, 191, 255, 255, 255, 31, 255, 255, 239, 237, 255, 255,
+ 175, 79, 254, 255, 109, 253, 255, 255, 250, 31, 204, 252, 204, 252, 255, 255,
+ 255, 15, 255, 255, 240, 195, 255, 255, 255, 249, 255, 255, 0, 248, 255, 255,
+ 255, 255, 143, 255, 255, 127, 255, 255, 255, 255, 255, 127, 0, 0, 192, 255,
+ 254, 255, 255, 255, 255, 255, 191, 248, 255, 175, 170, 170, 90, 253, 36, 201,
+ 255, 255, 239, 39, 255, 255, 111, 56, 255, 255, 1, 0, 0, 128, 3, 0,
+ 0, 0, 0, 128, 0, 255, 0, 0, 255, 255, 254, 255, 255, 255, 255, 252,
+ 255, 255, 255, 15, 255, 253, 255, 255, 240, 255, 255, 255, 0, 192, 26, 128,
+ 154, 3, 0, 0, 0, 192, 0, 0, 128, 255, 7, 95, 0, 0, 128, 160,
+ 36, 0, 0, 0, 0, 0, 252, 255, 255, 255, 7, 0, 255, 255, 0, 0,
+ 0, 255, 255, 255, 255, 255, 0, 224, 255, 255, 0, 252, 96, 0, 8, 0,
+ 128, 240, 40, 0, 0, 0, 0, 224, 1, 0, 0, 0, 3, 3, 3, 227,
+ 128, 128, 255, 255, 255, 255, 255, 235, 255, 247, 255, 255, 255, 63, 255, 255,
+ 255, 231, 255, 255, 255, 255, 255, 167, 255, 255, 255, 243, 255, 255, 255, 254,
+ 255, 255, 255, 63, 0, 0, 0, 32, 155, 33, 0, 20, 16, 0, 0, 0,
+ 64, 24, 32, 32, 0, 0, 0, 132, 160, 3, 2, 0, 0, 48, 0, 0,
+ 105, 1, 8, 245, 123, 21, 105, 85, 105, 8, 8, 161, 0, 4, 0, 240,
+ 17, 4, 0, 240, 0, 248, 0, 0, 0, 128, 0, 0, 0, 0, 255, 255,
+ 248, 255, 0, 0, 0, 254, 252, 255
+};
+
+RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_nfkd_quick_check_table_1[field_2];
+ v = re_nfkd_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfkd_quick_check_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Noncharacter_Code_Point. */
+static RE_UINT8 re_noncharacter_code_point_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2
};
-static RE_UINT8 re_quotation_mark_stage_3[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1,
- 5, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 7, 8, 1, 1,
+static RE_UINT8 re_noncharacter_code_point_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3
};
-static RE_UINT8 re_quotation_mark_stage_4[] = {
- 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 255, 0, 0, 0, 6,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 224, 0, 0, 0, 0,
- 30, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 0, 0,
+static RE_UINT8 re_noncharacter_code_point_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 192
};
-/* Quotation_Mark: 284 bytes. */
-
-RE_UINT32 re_get_quotation_mark(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_quotation_mark_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_quotation_mark_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_quotation_mark_stage_3[pos + f] << 6;
- pos += code;
- value = (re_quotation_mark_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Terminal_Punctuation. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_terminal_punctuation_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ v = re_noncharacter_code_point_table_1[field_2];
+ v = re_noncharacter_code_point_table_2[(v << 5) | field_1];
+ v = re_noncharacter_code_point_table_3[(v << 2) | field_0];
-static RE_UINT8 re_terminal_punctuation_stage_2[] = {
- 0, 1, 1, 2, 1, 3, 4, 5, 6, 7, 1, 1, 1, 1, 8, 9,
- 10, 1, 1, 11, 1, 1, 12, 13, 14, 15, 16, 17, 18, 1, 1, 1,
- 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1,
- 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 22, 1, 23, 1, 24, 25, 26, 27, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 29,
- 1, 1, 1, 30, 1, 1, 1, 1, 31, 32, 33, 34, 1, 1, 1, 35,
- 36, 37, 38, 1, 39, 40, 41, 42, 1, 1, 43, 1, 44, 1, 45, 1,
- 1, 1, 1, 1, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 48, 1, 1, 49, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51, 1, 1, 1, 1, 1,
-};
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_terminal_punctuation_stage_3[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0,
- 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 9,
- 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 19, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 0, 23, 0, 24, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 0, 0,
- 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 24, 30, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 26, 0,
- 0, 0, 35, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 38,
- 0, 0, 39, 0, 0, 0, 0, 0, 1, 0, 0, 40, 0, 0, 0, 0,
- 0, 0, 0, 0, 36, 0, 41, 0, 0, 0, 42, 0, 0, 0, 0, 0,
- 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 43,
- 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0,
- 0, 0, 47, 0, 0, 24, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0,
- 0, 51, 0, 0, 0, 4, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 29, 0, 0, 0, 0, 0,
- 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 29, 0, 0,
- 0, 0, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
- 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 60,
- 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
- 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+/* Numeric_Type. */
+static RE_UINT8 re_numeric_type_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 10,
+ 10, 10, 10, 15, 16, 17, 18, 19, 20, 21, 10, 22, 23, 24, 10, 10,
+ 25, 26, 10, 27, 10, 28, 10, 10, 10, 29, 30, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 10, 41, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 42, 43, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 44, 45, 10, 10, 46, 10, 47, 48, 49, 10, 50, 10,
+ 51, 10, 52, 10, 10, 10, 10, 10, 53, 10, 54, 10, 10, 10, 55, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 56, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 57, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT8 re_terminal_punctuation_stage_4[] = {
- 0, 0, 0, 0, 2, 80, 0, 140, 0, 0, 0, 64, 128, 0, 0, 0,
- 0, 2, 0, 0, 8, 0, 0, 0, 0, 16, 0, 200, 0, 0, 16, 0,
- 255, 23, 0, 0, 0, 0, 0, 3, 0, 0, 255, 127, 48, 0, 0, 0,
- 0, 0, 0, 12, 0, 225, 7, 0, 0, 12, 0, 0, 254, 1, 0, 0,
- 0, 64, 0, 0, 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 4,
- 60, 3, 0, 0, 0, 15, 0, 0, 0, 0, 0, 236, 0, 0, 0, 248,
- 0, 0, 0, 192, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
- 2, 208, 0, 0, 6, 0, 0, 0, 0, 224, 0, 0, 0, 0, 248, 0,
- 0, 0, 192, 0, 0, 192, 0, 0, 0, 128, 0, 0, 0, 0, 0, 224,
- 0, 0, 0, 128, 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 247, 0,
- 18, 0, 0, 0, 0, 0, 1, 0, 0, 0, 128, 0, 0, 0, 63, 0,
- 0, 0, 0, 252, 0, 0, 0, 30, 0, 0, 224, 3, 128, 63, 0, 0,
- 3, 0, 0, 0, 14, 0, 0, 0, 96, 32, 0, 192, 0, 0, 0, 31,
- 0, 56, 0, 8, 60, 254, 255, 0, 0, 0, 0, 112, 12, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 2, 0, 0, 0, 128, 1, 0, 0, 31, 0,
- 0, 0, 32, 0, 0, 0, 128, 3, 16, 0, 0, 0, 128, 7, 0, 0,
+static RE_UINT8 re_numeric_type_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 7,
+ 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 9, 10, 0, 0, 0, 4,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
+ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0,
+ 0, 31, 32, 0, 31, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 0, 27, 0, 39, 40, 41, 42, 37, 0, 0, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 0, 0, 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 58, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 59, 60, 61, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 63, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 56, 65, 27,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 20, 68, 69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 72, 0, 0, 0, 73, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 74, 75, 0, 76, 0, 77, 78, 0, 0, 0, 0, 79, 80, 20,
+ 0, 0, 81, 82, 83, 0, 0, 84, 0, 0, 74, 74, 0, 85, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 86, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 87, 0, 0, 0, 0, 83, 88, 89, 0, 0, 0, 90, 0,
+ 0, 0, 91, 92, 0, 0, 0, 1, 0, 93, 0, 0, 0, 0, 1, 94,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 97, 98, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0,
+ 20, 20, 20, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 101, 102, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 20, 106, 0, 0, 107, 108, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 59, 0, 0, 44, 0, 0, 0, 110, 0, 59, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 111, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 112, 113, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Terminal_Punctuation: 1128 bytes. */
-
-RE_UINT32 re_get_terminal_punctuation(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_terminal_punctuation_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_terminal_punctuation_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_terminal_punctuation_stage_3[pos + f] << 5;
- pos += code;
- value = (re_terminal_punctuation_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Math. */
-
-static RE_UINT8 re_other_math_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_numeric_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 3, 3, 3, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 3, 3, 3, 3,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
+ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_math_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
- 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_numeric_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_other_math_stage_3[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 11, 0, 12, 13,
- 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, 18,
- 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0,
- 23, 24, 25, 26, 27, 28, 23, 23, 23, 23, 29, 30, 31, 32, 33, 34,
- 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_other_math_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 51, 0, 0, 0, 64, 0, 0, 0, 28, 0,
- 1, 0, 0, 0, 30, 0, 0, 96, 0, 96, 0, 0, 0, 0, 0, 0,
- 0, 0, 255, 31, 98, 248, 0, 0, 132, 252, 47, 62, 16, 179, 251, 241,
- 224, 3, 0, 0, 0, 0, 0, 0, 0, 0, 224, 243, 182, 62, 195, 240,
- 255, 63, 235, 47, 48, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 1, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 3, 192, 127, 240, 193, 140, 15, 0, 148, 31, 0, 0,
- 96, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 15, 96, 0, 0,
- 96, 0, 0, 0, 192, 255, 0, 0, 248, 255, 255, 1, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 48, 0, 0, 0, 0, 10, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 80, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 223, 255, 255, 255, 255, 255, 255, 255, 255, 223, 100, 222, 255, 235,
- 239, 255, 255, 255, 255, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 255, 255, 255,
- 253, 255, 255, 247, 255, 255, 255, 247, 255, 255, 223, 255, 255, 255, 223, 255,
- 255, 127, 255, 255, 255, 127, 255, 255, 255, 253, 255, 255, 255, 253, 255, 255,
- 247, 207, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 150, 254, 247, 10,
- 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
-};
+ v = re_numeric_type_table_1[field_2];
+ v = re_numeric_type_table_2[(v << 5) | field_1];
+ v = re_numeric_type_table_3[(v << 5) | field_0];
-/* Other_Math: 564 bytes. */
-
-RE_UINT32 re_get_other_math(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_math_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_math_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_math_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_math_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* Hex_Digit. */
-
-static RE_UINT8 re_hex_digit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1,
-};
-
-static RE_UINT8 re_hex_digit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_hex_digit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+/* Numeric_Value. */
+static RE_UINT8 re_numeric_value_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 10,
+ 10, 10, 10, 15, 16, 17, 18, 19, 20, 21, 10, 22, 23, 24, 10, 10,
+ 25, 26, 10, 27, 10, 28, 10, 10, 10, 29, 30, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 10, 41, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 42, 43, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 44, 45, 10, 10, 46, 10, 47, 48, 49, 10, 50, 10,
+ 51, 10, 52, 10, 10, 10, 10, 10, 53, 10, 54, 10, 10, 10, 55, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 56, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 57, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT8 re_hex_digit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
+static RE_UINT8 re_numeric_value_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Hex_Digit: 177 bytes. */
-
-RE_UINT32 re_get_hex_digit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 16;
- code = ch ^ (f << 16);
- pos = (RE_UINT32)re_hex_digit_stage_1[f] << 5;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_hex_digit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_hex_digit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_hex_digit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* ASCII_Hex_Digit. */
-
-static RE_UINT8 re_ascii_hex_digit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_ascii_hex_digit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_ascii_hex_digit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_ascii_hex_digit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 7,
+ 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 9, 10, 0, 0, 0, 4,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15, 0,
+ 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 3, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 20, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0,
+ 0, 29, 30, 0, 29, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 0, 37, 0, 38, 39, 40, 41, 42, 0, 0, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 0, 0, 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 64, 65, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 69, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 72, 73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 76, 77, 78, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 81, 0, 0, 0, 82, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 83, 84, 0, 85, 0, 86, 87, 0, 0, 0, 0, 88, 89, 90,
+ 0, 0, 91, 92, 93, 0, 0, 94, 0, 0, 95, 95, 0, 96, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 97, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 98, 0, 0, 0, 0, 99, 100, 101, 0, 0, 0, 102, 0,
+ 0, 0, 103, 104, 0, 0, 0, 1, 0, 105, 0, 0, 0, 0, 1, 106,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 107, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 109, 110, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0,
+ 112, 113, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 116, 117, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 124, 125, 126, 0, 0, 127, 128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 130, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 136, 137, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* ASCII_Hex_Digit: 130 bytes. */
-
-RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_ascii_hex_digit_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_ascii_hex_digit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_ascii_hex_digit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_ascii_hex_digit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Alphabetic. */
-
-static RE_UINT8 re_other_alphabetic_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 7, 2, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_numeric_value_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 4, 0, 0, 0, 0, 0, 2, 0, 0, 11, 12, 13, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 14, 15, 16, 11, 13, 17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 2, 3, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 18, 19, 20, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 18, 37, 38, 39, 40, 41, 42, 43, 44, 19, 45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47,
+ 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 49, 50, 25, 51, 52, 27, 53, 54, 55, 56, 57, 15, 58, 59, 60, 2,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 40, 19, 63, 20,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 40, 19, 63, 20,
+ 20, 64, 45, 0, 0, 7, 40, 65, 66, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 67, 68, 69, 17,
+ 46, 47, 48, 37, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62,
+ 67, 68, 69, 17, 46, 47, 48, 37, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 18, 61, 62, 67, 68, 69, 17, 46, 47, 48, 37, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 61, 62, 67, 68, 69,
+ 17, 46, 47, 48, 37, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 37, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 37, 38, 39, 40, 41, 42, 43,
+ 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, 38, 79, 80, 81, 82, 83,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 84, 85, 86, 87, 39, 88, 89, 90, 91, 92, 93, 94, 95, 96, 40,
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 8, 0, 0, 0, 45, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 6, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
+ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 9, 0, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 0, 20, 37, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 37,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 18, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 18, 37, 38, 39, 40, 41, 42, 43, 44, 19, 99, 100, 101, 63, 102, 103,
+ 104, 105, 20, 106, 107, 108, 64, 109, 110, 111, 112, 45, 113, 114, 115, 65,
+ 116, 117, 118, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 2, 6, 40, 63, 64, 65, 6, 18, 40, 19, 63, 20, 64, 6,
+ 18, 40, 19, 63, 20, 45, 65, 18, 2, 2, 2, 3, 3, 3, 3, 6,
+ 18, 18, 18, 18, 18, 38, 40, 40, 40, 40, 19, 100, 63, 63, 63, 63,
+ 63, 20, 64, 6, 40, 12, 12, 52, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 0, 0, 0, 0,
+ 2, 6, 18, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 18, 37, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 18, 37, 19, 20, 45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 18, 37,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 5, 6, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 18, 37, 19, 3, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 12, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41, 42,
+ 0, 0, 19, 99, 100, 101, 63, 102, 103, 104, 105, 20, 106, 107, 108, 64,
+ 109, 110, 111, 112, 45, 113, 114, 115, 65, 116, 117, 118, 119, 66, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 56, 11, 51, 130, 12, 131, 52, 13, 57,
+ 2, 3, 4, 5, 18, 37, 19, 20, 12, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 37,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 18, 37, 19, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 18, 40, 19, 20,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41, 42,
+ 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 12, 11, 51, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4,
+ 5, 6, 18, 37, 38, 19, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 18, 37, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 5, 18, 37, 19, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40,
+ 41, 42, 43, 44, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 18, 37, 38, 39, 40, 41, 42, 43, 44, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 21, 133, 134, 22, 135, 23, 136, 24, 14, 14, 25, 15, 26, 16, 27,
+ 11, 12, 12, 13, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 5,
+ 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3,
+ 4, 5, 6, 3, 4, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 4,
+ 5, 6, 137, 138, 2, 3, 4, 4, 5, 6, 4, 4, 5, 5, 5, 5,
+ 7, 8, 8, 8, 9, 9, 10, 10, 10, 10, 3, 4, 5, 6, 7, 2,
+ 3, 4, 5, 5, 6, 6, 3, 4, 2, 3, 51, 52, 57, 51, 52, 15,
+ 11, 56, 11, 11, 12, 51, 52, 39, 40, 5, 6, 7, 8, 9, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 18, 19, 45, 139, 97,
+ 140, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 67, 68, 69,
+ 17, 46, 47, 48, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 67, 68, 69,
+ 17, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41, 42,
+ 43, 44, 2, 3, 4, 5, 6, 2, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 20, 106, 107, 108,
+ 64, 109, 110, 111, 112, 45, 113, 114, 115, 65, 116, 117, 118, 119, 66, 121,
+ 66, 141, 142, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 11, 12, 13,
+ 0, 2, 3, 45, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 20, 106, 107, 108,
+ 64, 109, 110, 111, 112, 45, 113, 114, 115, 65, 116, 117, 118, 119, 0, 3,
+ 4, 5, 6, 7, 8, 9, 10, 18, 101, 102, 106, 45, 12, 56, 0, 0,
+ 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_alphabetic_stage_2[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 0,
- 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 26, 27, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0,
- 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 0, 43, 44, 45, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+RE_UINT32 re_get_numeric_value(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_numeric_value_table_1[field_2];
+ v = re_numeric_value_table_2[(v << 5) | field_1];
+ v = re_numeric_value_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Other_Alphabetic. */
+static RE_UINT8 re_other_alphabetic_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 10, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 12, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 8,
+ 14, 8, 15, 16, 17, 18, 19, 20, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 22,
+ 8, 8, 8, 8, 8, 8, 8, 8, 23, 8, 24, 8, 25, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
};
-static RE_UINT8 re_other_alphabetic_stage_3[] = {
+static RE_UINT8 re_other_alphabetic_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 3, 0, 4, 0, 5, 6, 0, 0, 7, 8,
- 9, 10, 0, 0, 0, 11, 0, 0, 12, 13, 0, 0, 0, 0, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 19, 20, 21, 23, 24, 20, 21, 25, 26,
- 20, 21, 27, 19, 28, 21, 29, 0, 16, 21, 30, 19, 20, 21, 30, 19,
- 16, 21, 31, 19, 19, 0, 32, 33, 0, 34, 35, 0, 0, 36, 35, 0,
- 0, 0, 0, 37, 38, 39, 0, 0, 0, 40, 41, 42, 43, 0, 0, 0,
- 33, 33, 33, 33, 0, 44, 45, 0, 0, 0, 0, 0, 46, 47, 0, 0,
- 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 50, 51, 0, 0, 0, 0,
- 52, 53, 16, 0, 54, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 44, 59, 60,
- 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 61, 21, 0, 0, 0,
- 62, 63, 0, 0, 64, 14, 65, 66, 0, 67, 68, 0, 16, 14, 0, 1,
- 0, 69, 70, 71, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 74,
- 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0,
- 77, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0,
- 54, 79, 80, 0, 28, 81, 0, 0, 54, 68, 46, 0, 54, 82, 0, 0,
- 0, 83, 0, 0, 0, 0, 66, 45, 16, 21, 22, 19, 0, 0, 0, 0,
- 0, 53, 84, 0, 0, 10, 64, 0, 0, 0, 0, 0, 0, 85, 86, 0,
- 0, 87, 88, 0, 0, 89, 0, 0, 90, 91, 0, 0, 0, 0, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 94,
- 95, 96, 97, 0, 98, 0, 0, 0, 0, 99, 0, 0, 100, 101, 0, 0,
- 0, 102, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 0, 0, 106, 59, 107, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
- 108, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0,
- 0, 10, 111, 111, 60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0,
+ 4, 0, 5, 6, 0, 0, 7, 8, 9, 10, 0, 0, 0, 11, 0, 0,
+ 12, 13, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 19,
+ 20, 21, 23, 24, 20, 21, 25, 26, 20, 21, 27, 19, 28, 21, 29, 0,
+ 16, 21, 30, 19, 20, 21, 30, 19, 16, 21, 31, 19, 20, 0, 32, 33,
+ 0, 34, 35, 0, 0, 36, 35, 0, 0, 0, 0, 37, 38, 39, 0, 0,
+ 0, 40, 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 33, 33, 0, 44, 45, 0,
+ 0, 0, 0, 0, 46, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
+ 49, 0, 50, 51, 0, 52, 53, 0, 54, 55, 16, 0, 56, 57, 0, 58,
+ 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 44, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 65, 0, 0, 66, 14, 67, 52, 0, 68, 69, 0, 16, 14, 0, 1,
+ 0, 70, 71, 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 81, 82, 0, 28, 83, 0, 0, 56, 69, 46, 0, 56, 84, 85, 0,
+ 0, 86, 0, 0, 0, 0, 52, 45, 16, 21, 22, 19, 0, 0, 0, 0,
+ 0, 55, 87, 0, 0, 10, 66, 0, 0, 0, 0, 0, 0, 88, 89, 0,
+ 0, 90, 53, 0, 0, 91, 0, 0, 92, 93, 0, 0, 0, 0, 0, 0,
+ 0, 94, 0, 0, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 97, 98,
+ 99, 100, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 103, 0, 0, 104, 105, 0, 0, 0, 106, 107, 0, 108, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 61, 111, 0, 0, 112,
+ 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 113, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 116, 116, 62, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_alphabetic_stage_4[] = {
+static RE_UINT8 re_other_alphabetic_table_3[] = {
0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 255, 191, 182, 0, 0, 0,
0, 0, 255, 7, 0, 248, 255, 254, 0, 0, 1, 0, 0, 0, 192, 31,
158, 33, 0, 0, 0, 0, 2, 0, 0, 0, 255, 255, 192, 255, 1, 0,
@@ -10596,5620 +18401,7541 @@ static RE_UINT8 re_other_alphabetic_stage_4[] = {
0, 248, 127, 121, 0, 0, 192, 195, 157, 63, 30, 0, 252, 191, 0, 60,
0, 0, 192, 255, 255, 1, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0,
255, 15, 255, 1, 0, 0, 128, 15, 0, 0, 224, 127, 254, 255, 31, 0,
- 31, 0, 0, 0, 0, 0, 224, 255, 7, 0, 0, 0, 254, 51, 0, 0,
- 128, 255, 3, 0, 240, 255, 127, 0, 128, 255, 31, 0, 255, 255, 255, 255,
- 255, 3, 0, 0, 0, 0, 240, 15, 4, 8, 0, 0, 248, 0, 0, 0,
- 3, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 128, 192, 7, 0, 0,
- 128, 255, 7, 0, 0, 254, 127, 0, 8, 48, 0, 0, 0, 0, 0, 56,
- 0, 0, 157, 65, 0, 248, 32, 0, 248, 7, 0, 0, 0, 0, 0, 64,
- 0, 0, 192, 7, 110, 240, 0, 0, 240, 0, 0, 0, 0, 0, 0, 255,
- 63, 0, 0, 0, 0, 0, 255, 1, 0, 0, 248, 255, 0, 240, 159, 64,
- 59, 0, 0, 0, 0, 128, 63, 127, 0, 0, 0, 48, 0, 0, 255, 127,
- 1, 0, 0, 0, 0, 248, 63, 0, 0, 0, 0, 224, 255, 7, 0, 0,
- 0, 240, 255, 1, 0, 0, 254, 252, 16, 0, 0, 0, 254, 7, 0, 0,
+ 0, 0, 0, 128, 1, 0, 0, 0, 31, 0, 0, 0, 0, 0, 224, 255,
+ 7, 0, 0, 0, 254, 51, 0, 0, 128, 255, 3, 0, 240, 255, 127, 0,
+ 128, 255, 31, 0, 255, 255, 255, 255, 255, 3, 0, 0, 0, 0, 240, 15,
+ 4, 8, 0, 0, 248, 0, 0, 0, 3, 0, 0, 0, 47, 0, 0, 0,
+ 192, 7, 0, 0, 128, 255, 7, 0, 0, 254, 127, 0, 8, 48, 0, 0,
+ 0, 0, 0, 56, 0, 0, 157, 65, 0, 248, 32, 0, 248, 7, 0, 0,
+ 0, 0, 0, 64, 0, 0, 192, 7, 110, 240, 0, 0, 240, 0, 0, 0,
+ 0, 24, 0, 0, 0, 0, 0, 255, 63, 0, 0, 0, 0, 0, 255, 1,
+ 0, 0, 248, 255, 0, 192, 0, 0, 0, 240, 159, 64, 59, 0, 0, 0,
+ 0, 128, 63, 127, 0, 0, 0, 48, 0, 0, 255, 127, 0, 248, 63, 0,
+ 0, 0, 0, 224, 255, 7, 0, 0, 0, 240, 255, 1, 0, 0, 191, 25,
+ 5, 0, 0, 0, 0, 0, 254, 252, 16, 0, 0, 0, 254, 7, 0, 0,
0, 0, 224, 123, 0, 0, 254, 15, 0, 252, 255, 0, 0, 128, 127, 127,
0, 0, 252, 255, 255, 254, 127, 0, 0, 0, 126, 180, 139, 0, 0, 0,
0, 124, 123, 0, 0, 0, 120, 0, 0, 128, 254, 255, 255, 128, 7, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 128, 0, 0, 0, 255, 3, 255, 255,
-};
-
-/* Other_Alphabetic: 1280 bytes. */
-
-RE_UINT32 re_get_other_alphabetic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_other_alphabetic_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_other_alphabetic_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_other_alphabetic_stage_3[pos + f] << 5;
- pos += code;
- value = (re_other_alphabetic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Ideographic. */
-
-static RE_UINT8 re_ideographic_stage_1[] = {
- 0, 1, 2, 3, 4, 0, 0, 5, 0, 0, 0, 6, 7, 8, 0, 0,
- 3, 3, 3, 3, 3, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_ideographic_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 7, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 12, 13, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 15, 0, 0, 0, 0, 0, 0, 2, 16, 0, 0,
-};
-
-static RE_UINT8 re_ideographic_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0,
- 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 2, 2, 2, 2,
- 2, 5, 2, 6, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 7,
- 2, 2, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 2, 2,
- 2, 2, 2, 10, 0, 0, 0, 0, 2, 2, 2, 11, 2, 2, 2, 2,
- 2, 2, 2, 2, 12, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15,
- 16, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_ideographic_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 254, 3, 0, 7,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 3, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 0,
- 255, 255, 255, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 127, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 31, 0, 255, 255, 255, 63, 255, 255, 255, 255,
- 255, 255, 255, 255, 3, 0, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0,
- 255, 255, 255, 63, 0, 0, 0, 0,
-};
-
-/* Ideographic: 600 bytes. */
-
-RE_UINT32 re_get_ideographic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_ideographic_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_ideographic_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_ideographic_stage_3[pos + f] << 6;
- pos += code;
- value = (re_ideographic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Diacritic. */
-
-static RE_UINT8 re_diacritic_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_diacritic_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 1, 17, 1, 1, 1, 18, 1, 19, 20, 21, 22, 23, 1, 24,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 26, 1,
- 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 28, 29, 30, 31, 32, 33, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 35, 36,
- 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1, 39, 1, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 37, 50, 1, 51, 52, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 53, 54, 1, 1, 1, 55,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 56, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 54, 57, 1, 1, 1, 1, 1, 58, 59, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_diacritic_stage_3[] = {
- 0, 0, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 5, 5, 5, 5, 6, 7, 8, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 0,
- 0, 0, 14, 0, 0, 0, 15, 16, 0, 4, 17, 0, 0, 18, 0, 19,
- 20, 0, 0, 0, 0, 0, 0, 21, 0, 22, 23, 24, 0, 22, 25, 0,
- 0, 22, 25, 0, 0, 22, 25, 26, 0, 22, 25, 0, 0, 0, 25, 0,
- 0, 0, 25, 0, 0, 22, 25, 0, 0, 27, 25, 0, 0, 0, 28, 0,
- 0, 0, 29, 0, 0, 30, 31, 0, 20, 32, 0, 0, 33, 0, 34, 0,
- 0, 35, 0, 36, 37, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, 43, 44, 0, 45, 0, 0,
- 0, 46, 0, 47, 0, 0, 4, 48, 0, 49, 5, 17, 0, 0, 50, 51,
- 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 55,
- 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 22,
- 0, 0, 0, 59, 60, 0, 0, 61, 5, 62, 0, 0, 63, 0, 0, 20,
- 0, 0, 0, 0, 0, 0, 43, 64, 0, 65, 66, 0, 0, 66, 2, 67,
- 0, 0, 0, 68, 0, 15, 69, 70, 0, 0, 71, 0, 0, 0, 0, 72,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 74, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0,
- 0, 80, 0, 66, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 0, 83,
- 0, 22, 25, 84, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 86, 0,
- 0, 0, 0, 0, 0, 15, 2, 0, 0, 15, 0, 0, 0, 46, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
- 0, 42, 88, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0,
- 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
- 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 98, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_diacritic_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 129, 144, 1,
- 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 224, 7, 0, 48, 4,
- 48, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 2, 0, 0, 254, 255,
- 251, 255, 255, 191, 22, 0, 0, 0, 0, 248, 135, 1, 0, 0, 0, 128,
- 97, 28, 0, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 0,
- 0, 0, 0, 3, 248, 255, 255, 127, 0, 0, 0, 16, 0, 32, 30, 0,
- 0, 0, 2, 0, 0, 32, 0, 0, 0, 0, 0, 224, 0, 0, 0, 24,
- 0, 4, 0, 0, 128, 95, 0, 0, 0, 0, 0, 4, 0, 31, 0, 0,
- 0, 0, 160, 194, 220, 0, 0, 0, 64, 0, 0, 0, 0, 0, 128, 6,
- 24, 62, 0, 0, 128, 191, 0, 12, 0, 254, 15, 32, 0, 0, 0, 14,
- 0, 0, 224, 159, 0, 0, 255, 63, 0, 0, 16, 0, 16, 0, 0, 0,
- 0, 248, 15, 0, 0, 12, 0, 0, 0, 0, 192, 0, 0, 0, 0, 63,
- 255, 33, 144, 3, 0, 240, 255, 255, 240, 255, 0, 0, 0, 0, 224, 227,
- 0, 0, 0, 160, 3, 224, 0, 224, 0, 224, 0, 96, 0, 128, 3, 0,
- 0, 128, 0, 0, 0, 252, 0, 0, 0, 0, 0, 30, 0, 128, 0, 176,
- 0, 0, 0, 48, 0, 0, 3, 0, 3, 0, 0, 0, 0, 7, 0, 0,
- 255, 255, 3, 0, 0, 120, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0,
- 0, 0, 0, 56, 7, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 248,
- 0, 48, 0, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 0, 192,
- 8, 0, 0, 0, 96, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 24, 0, 1, 28, 0, 0, 0, 0, 96, 0, 0, 6, 0, 0,
- 192, 31, 31, 0, 68, 0, 0, 0, 12, 0, 0, 0, 0, 8, 0, 0,
- 128, 0, 0, 0, 52, 0, 0, 0, 0, 0, 128, 0, 0, 0, 31, 0,
- 0, 0, 127, 0, 0, 128, 255, 255, 128, 227, 7, 248, 231, 15, 0, 0,
- 0, 60, 0, 0, 0, 240, 0, 0, 112, 7, 0, 0,
-};
-
-/* Diacritic: 1300 bytes. */
-
-RE_UINT32 re_get_diacritic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_diacritic_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_diacritic_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_diacritic_stage_3[pos + f] << 5;
- pos += code;
- value = (re_diacritic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Extender. */
-
-static RE_UINT8 re_extender_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 3, 0, 127, 255, 255, 249, 219, 7, 0, 0, 128, 0, 0, 0,
+ 255, 3, 255, 255
};
-static RE_UINT8 re_extender_stage_2[] = {
- 0, 1, 2, 3, 2, 2, 2, 4, 2, 2, 2, 2, 5, 6, 7, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 9, 2, 2, 10, 11, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 15, 2, 2, 16, 2, 2,
- 2, 2, 2, 2, 2, 17, 2, 18, 2, 2, 2, 2, 2, 2, 2, 2,
- 19, 2, 2, 2, 20, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-};
+RE_UINT32 re_get_other_alphabetic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_extender_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4,
- 0, 5, 0, 5, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0,
- 11, 0, 12, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
- 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_extender_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 32, 0, 0, 0, 0, 0, 62, 0,
- 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 128, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 32, 0, 0, 24, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 48, 112, 0, 0, 0, 0, 0, 0, 0,
-};
+ v = re_other_alphabetic_table_1[field_2];
+ v = re_other_alphabetic_table_2[(v << 5) | field_1];
+ v = re_other_alphabetic_table_3[(v << 2) | field_0];
-/* Extender: 640 bytes. */
-
-RE_UINT32 re_get_extender(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_extender_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_extender_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_extender_stage_3[pos + f] << 6;
- pos += code;
- value = (re_extender_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Other_Lowercase. */
-
-static RE_UINT8 re_other_lowercase_stage_1[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Other_Default_Ignorable_Code_Point. */
+static RE_UINT8 re_other_default_ignorable_code_point_table_1[] = {
+ 0, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 5, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_other_lowercase_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 4, 2, 5, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 7, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_other_lowercase_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
- 0, 8, 9, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 15,
- 0, 0, 0, 0, 0, 16, 0, 0,
-};
-
-static RE_UINT8 re_other_lowercase_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4,
- 0, 0, 0, 0, 0, 0, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 240, 255, 255,
- 255, 255, 255, 255, 255, 7, 0, 1, 0, 0, 0, 248, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 2, 128, 0, 0, 255, 31, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 240, 0, 0, 0, 0,
-};
-
-/* Other_Lowercase: 372 bytes. */
-
-RE_UINT32 re_get_other_lowercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_lowercase_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_other_lowercase_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_lowercase_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_lowercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Uppercase. */
-
-static RE_UINT8 re_other_uppercase_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_other_uppercase_stage_2[] = {
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
-};
-
-static RE_UINT8 re_other_uppercase_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 7, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_other_uppercase_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0,
- 0, 0, 0, 0, 0, 0, 192, 255, 255, 255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 255, 255, 255, 3, 255, 255, 255, 3, 255, 255,
- 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_other_default_ignorable_code_point_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 7,
+ 8, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-/* Other_Uppercase: 210 bytes. */
-
-RE_UINT32 re_get_other_uppercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_other_uppercase_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_other_uppercase_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_other_uppercase_stage_3[pos + f] << 7;
- pos += code;
- value = (re_other_uppercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Noncharacter_Code_Point. */
-
-static RE_UINT8 re_noncharacter_code_point_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1,
+static RE_UINT8 re_other_default_ignorable_code_point_table_3[] = {
+ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 128, 1, 0, 0, 0,
+ 0, 0, 48, 0, 32, 0, 0, 0, 16, 0, 0, 0, 0, 0, 255, 1,
+ 253, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255
};
-static RE_UINT8 re_noncharacter_code_point_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
-};
+RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_noncharacter_code_point_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_noncharacter_code_point_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,
-};
+ v = re_other_default_ignorable_code_point_table_1[field_2];
+ v = re_other_default_ignorable_code_point_table_2[(v << 5) | field_1];
+ v = re_other_default_ignorable_code_point_table_3[(v << 2) | field_0];
-/* Noncharacter_Code_Point: 177 bytes. */
-
-RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 16;
- code = ch ^ (f << 16);
- pos = (RE_UINT32)re_noncharacter_code_point_stage_1[f] << 5;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_noncharacter_code_point_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_noncharacter_code_point_stage_3[pos + f] << 7;
- pos += code;
- value = (re_noncharacter_code_point_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
/* Other_Grapheme_Extend. */
-
-static RE_UINT8 re_other_grapheme_extend_stage_1[] = {
- 0, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_other_grapheme_extend_stage_2[] = {
+static RE_UINT8 re_other_grapheme_extend_table_1[] = {
0, 0, 1, 2, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_grapheme_extend_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,
- 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
- 11, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_other_grapheme_extend_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 2, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_grapheme_extend_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 96, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 192, 7, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+static RE_UINT8 re_other_grapheme_extend_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 128, 0, 4, 0, 96, 0,
+ 0, 128, 0, 128, 0, 0, 32, 0, 0, 16, 0, 0, 0, 192, 0, 0,
+ 0, 0, 0, 192, 0, 0, 1, 32, 0, 128, 0, 0, 0, 0, 1, 0,
+ 32, 192, 7, 0, 255, 255, 255, 255
};
-/* Other_Grapheme_Extend: 444 bytes. */
-
-RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_grapheme_extend_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_grapheme_extend_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_other_grapheme_extend_stage_3[pos + f] << 7;
- pos += code;
- value = (re_other_grapheme_extend_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_other_grapheme_extend_table_1[field_2];
+ v = re_other_grapheme_extend_table_2[(v << 5) | field_1];
+ v = re_other_grapheme_extend_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* IDS_Binary_Operator. */
+/* Other_ID_Continue. */
+RE_UINT32 re_get_other_id_continue(RE_UINT32 codepoint) {
+ if (codepoint == 0xB7)
+ return 1;
+ if (codepoint == 0x0387)
+ return 1;
+ if (0x1369 <= codepoint && codepoint <= 0x1371)
+ return 1;
+ if (codepoint == 0x19DA)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_ids_binary_operator_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Other_ID_Start. */
+RE_UINT32 re_get_other_id_start(RE_UINT32 codepoint) {
+ if (0x1885 <= codepoint && codepoint <= 0x1886)
+ return 1;
+ if (codepoint == 0x2118)
+ return 1;
+ if (codepoint == 0x212E)
+ return 1;
+ if (0x309B <= codepoint && codepoint <= 0x309C)
+ return 1;
+
+ return 0;
+}
+
+/* Other_Lowercase. */
+static RE_UINT8 re_other_lowercase_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_ids_binary_operator_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_other_lowercase_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 5, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_ids_binary_operator_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+static RE_UINT8 re_other_lowercase_table_3[] = {
+ 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 255, 1, 3, 0, 0, 0,
+ 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 4, 0, 240, 255, 255,
+ 255, 255, 255, 255, 255, 7, 0, 1, 0, 0, 0, 248, 0, 0, 2, 128,
+ 0, 0, 255, 31, 0, 0, 255, 255, 255, 3, 0, 0, 0, 0, 0, 48,
+ 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 240
};
-static RE_UINT8 re_ids_binary_operator_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 15,
-};
+RE_UINT32 re_get_other_lowercase(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* IDS_Binary_Operator: 130 bytes. */
-
-RE_UINT32 re_get_ids_binary_operator(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_ids_binary_operator_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_ids_binary_operator_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_ids_binary_operator_stage_3[pos + f] << 7;
- pos += code;
- value = (re_ids_binary_operator_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* IDS_Trinary_Operator. */
+ v = re_other_lowercase_table_1[field_2];
+ v = re_other_lowercase_table_2[(v << 5) | field_1];
+ v = re_other_lowercase_table_3[(v << 2) | field_0];
-static RE_UINT8 re_ids_trinary_operator_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ return (v >> offset) & 0x1;
+}
+
+/* Other_Math. */
+static RE_UINT8 re_other_math_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_ids_trinary_operator_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_ids_trinary_operator_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_ids_trinary_operator_stage_4[] = {
+static RE_UINT8 re_other_math_table_2[] = {
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
-};
-
-/* IDS_Trinary_Operator: 130 bytes. */
-
-RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_ids_trinary_operator_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_ids_trinary_operator_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_ids_trinary_operator_stage_3[pos + f] << 7;
- pos += code;
- value = (re_ids_trinary_operator_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Radical. */
-
-static RE_UINT8 re_radical_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 6, 7, 8, 0, 9, 10, 11, 12, 13, 0, 14, 15, 16, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 20, 21,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 24,
+ 25, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 31,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 34, 34, 35, 34, 36, 37, 38, 34, 39, 40, 41, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 42, 43, 44, 35, 35, 45, 45, 46, 46, 47, 34,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 48, 49, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_other_math_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 39, 0, 0, 0, 51, 0,
+ 0, 0, 64, 0, 0, 0, 28, 0, 1, 0, 0, 0, 30, 0, 0, 96,
+ 0, 96, 0, 0, 0, 0, 255, 31, 98, 248, 0, 0, 132, 252, 47, 62,
+ 16, 179, 251, 241, 224, 3, 0, 0, 0, 0, 224, 243, 182, 62, 195, 240,
+ 255, 63, 235, 47, 48, 0, 0, 0, 0, 15, 0, 0, 0, 0, 176, 0,
+ 0, 0, 1, 0, 4, 0, 0, 0, 3, 192, 127, 240, 193, 140, 15, 0,
+ 148, 31, 0, 0, 96, 0, 0, 0, 5, 0, 0, 0, 15, 96, 0, 0,
+ 192, 255, 0, 0, 248, 255, 255, 1, 0, 0, 0, 15, 0, 0, 0, 48,
+ 10, 1, 0, 0, 0, 0, 0, 80, 255, 255, 255, 255, 255, 255, 223, 255,
+ 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
+ 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
+ 255, 255, 255, 247, 255, 127, 255, 255, 255, 253, 255, 255, 247, 207, 255, 255,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15
};
-static RE_UINT8 re_radical_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_other_math(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_radical_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_radical_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 0, 0,
-};
+ v = re_other_math_table_1[field_2];
+ v = re_other_math_table_2[(v << 5) | field_1];
+ v = re_other_math_table_3[(v << 2) | field_0];
-/* Radical: 162 bytes. */
-
-RE_UINT32 re_get_radical(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_radical_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_radical_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_radical_stage_3[pos + f] << 7;
- pos += code;
- value = (re_radical_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Unified_Ideograph. */
-
-static RE_UINT8 re_unified_ideograph_stage_1[] = {
- 0, 1, 2, 2, 3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2,
-};
+/* Other_Uppercase. */
+RE_UINT32 re_get_other_uppercase(RE_UINT32 codepoint) {
+ if (0x2160 <= codepoint && codepoint <= 0x216F)
+ return 1;
+ if (0x24B6 <= codepoint && codepoint <= 0x24CF)
+ return 1;
+ if (0x01F130 <= codepoint && codepoint <= 0x01F149)
+ return 1;
+ if (0x01F150 <= codepoint && codepoint <= 0x01F169)
+ return 1;
+ if (0x01F170 <= codepoint && codepoint <= 0x01F189)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_unified_ideograph_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* Pattern_Syntax. */
+static RE_UINT8 re_pattern_syntax_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 6, 7, 1,
- 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_unified_ideograph_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1,
- 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9,
-};
-
-static RE_UINT8 re_unified_ideograph_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 63, 0, 255, 255, 255, 255, 255, 255, 0, 0,
- 0, 192, 26, 128, 154, 3, 0, 0, 255, 255, 127, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 31, 0, 255, 255, 255, 63, 255, 255, 255, 255,
- 255, 255, 255, 255, 3, 0, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0,
-};
-
-/* Unified_Ideograph: 434 bytes. */
-
-RE_UINT32 re_get_unified_ideograph(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_unified_ideograph_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_unified_ideograph_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_unified_ideograph_stage_3[pos + f] << 6;
- pos += code;
- value = (re_unified_ideograph_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Default_Ignorable_Code_Point. */
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_2[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 7, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 7, 8, 0, 9, 9, 0, 0, 0, 10,
- 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
- 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1,
- 253, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 255, 255,
-};
-
-/* Other_Default_Ignorable_Code_Point: 356 bytes. */
-
-RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_default_ignorable_code_point_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_other_default_ignorable_code_point_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_default_ignorable_code_point_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_default_ignorable_code_point_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Deprecated. */
-
-static RE_UINT8 re_deprecated_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_deprecated_stage_2[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1,
- 5, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_deprecated_stage_3[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_deprecated_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 128, 2,
- 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Deprecated: 292 bytes. */
-
-RE_UINT32 re_get_deprecated(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_deprecated_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_deprecated_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_deprecated_stage_3[pos + f] << 6;
- pos += code;
- value = (re_deprecated_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Soft_Dotted. */
-
-static RE_UINT8 re_soft_dotted_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_soft_dotted_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5,
- 6, 3, 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 9, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_soft_dotted_stage_3[] = {
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_pattern_syntax_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 0,
- 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 18, 0, 19, 20, 0, 21, 0, 22, 23, 0, 24, 0, 17, 18,
- 0, 19, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_soft_dotted_stage_4[] = {
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 128, 0, 0, 0, 2, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 32, 0, 0, 4, 0, 0, 0, 8, 0,
- 0, 0, 64, 1, 4, 0, 0, 0, 0, 0, 64, 0, 16, 1, 0, 0,
- 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0,
- 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, 192, 0, 0, 12, 0, 0,
- 0, 0, 0, 192, 0, 0, 12, 0, 192, 0, 0, 0, 0, 0, 0, 12,
- 0, 192, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Soft_Dotted: 424 bytes. */
-
-RE_UINT32 re_get_soft_dotted(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_soft_dotted_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_soft_dotted_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_soft_dotted_stage_3[pos + f] << 5;
- pos += code;
- value = (re_soft_dotted_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Logical_Order_Exception. */
-
-static RE_UINT8 re_logical_order_exception_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1,
+static RE_UINT8 re_pattern_syntax_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 120, 254, 90, 67, 136,
+ 0, 0, 128, 0, 0, 0, 255, 255, 255, 0, 255, 127, 254, 255, 239, 127,
+ 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 240, 255, 14, 255, 255, 255,
+ 1, 0, 1, 0, 0, 0, 0, 192, 96, 0, 0, 0
};
-static RE_UINT8 re_logical_order_exception_stage_2[] = {
- 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_pattern_syntax(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_logical_order_exception_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_logical_order_exception_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 224, 4, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 26, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ v = re_pattern_syntax_table_1[field_2];
+ v = re_pattern_syntax_table_2[(v << 5) | field_1];
+ v = re_pattern_syntax_table_3[(v << 2) | field_0];
-/* Logical_Order_Exception: 209 bytes. */
-
-RE_UINT32 re_get_logical_order_exception(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 16;
- code = ch ^ (f << 16);
- pos = (RE_UINT32)re_logical_order_exception_stage_1[f] << 5;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_logical_order_exception_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_logical_order_exception_stage_3[pos + f] << 7;
- pos += code;
- value = (re_logical_order_exception_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Other_ID_Start. */
-
-static RE_UINT8 re_other_id_start_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_other_id_start_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_other_id_start_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+/* Pattern_White_Space. */
+RE_UINT32 re_get_pattern_white_space(RE_UINT32 codepoint) {
+ if (0x09 <= codepoint && codepoint <= 0x0D)
+ return 1;
+ if (codepoint == 0x20)
+ return 1;
+ if (codepoint == 0x85)
+ return 1;
+ if (0x200E <= codepoint && codepoint <= 0x200F)
+ return 1;
+ if (0x2028 <= codepoint && codepoint <= 0x2029)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_other_id_start_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 64, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+/* Posix_AlNum. */
+static RE_UINT8 re_posix_alnum_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 10, 39, 10, 10, 40, 10, 41, 42, 43, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 44, 13, 13, 13, 45, 46, 13,
+ 13, 13, 13, 47, 13, 13, 13, 13, 13, 13, 48, 10, 10, 10, 49, 10,
+ 13, 13, 13, 13, 50, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-/* Other_ID_Start: 194 bytes. */
-
-RE_UINT32 re_get_other_id_start(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_other_id_start_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_id_start_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_id_start_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_id_start_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_ID_Continue. */
-
-static RE_UINT8 re_other_id_continue_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
+static RE_UINT8 re_posix_alnum_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12,
+ 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 5, 16, 17, 18, 19,
+ 20, 5, 21, 22, 5, 5, 23, 24, 25, 5, 26, 5, 5, 27, 28, 29,
+ 30, 31, 32, 33, 0, 34, 35, 36, 5, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 49, 53, 54, 55, 56, 57, 0,
+ 58, 59, 60, 61, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 0, 76, 77, 78, 0, 79, 0, 80, 81, 82, 83, 0, 0,
+ 5, 84, 25, 5, 85, 5, 86, 87, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 88, 5, 89, 90, 91, 5, 92, 5, 74, 0, 93, 5, 5, 94,
+ 73, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 95, 2, 5, 5, 96, 97, 98, 98, 99, 5, 100, 101, 0,
+ 0, 5, 5, 32, 5, 102, 5, 103, 104, 105, 25, 106, 5, 107, 108, 0,
+ 109, 5, 104, 110, 0, 111, 79, 0, 5, 112, 113, 0, 5, 114, 5, 115,
+ 5, 116, 117, 118, 119, 66, 0, 120, 5, 5, 5, 5, 5, 5, 0, 121,
+ 5, 5, 5, 5, 5, 5, 5, 5, 94, 5, 122, 118, 5, 123, 124, 125,
+ 0, 0, 0, 126, 127, 0, 0, 0, 128, 129, 130, 5, 16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 131, 5, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 132, 104, 5, 5, 5, 5, 133, 5, 86, 5, 134, 116, 135, 135, 5,
+ 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 138, 73, 5, 139, 73, 5, 87, 140, 14, 5, 5, 141, 5, 0, 25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 83,
+ 5, 5, 5, 5, 31, 0, 25, 118, 5, 5, 5, 5, 5, 5, 5, 5,
+ 142, 143, 5, 144, 5, 5, 5, 93, 145, 146, 5, 5, 147, 5, 148, 149,
+ 150, 151, 5, 98, 5, 5, 152, 153, 28, 102, 154, 83, 5, 155, 136, 156,
+ 5, 116, 157, 158, 5, 104, 159, 160, 161, 162, 87, 163, 5, 5, 5, 33,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 164, 165, 109,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 166, 5, 5, 167, 0, 168, 169, 170, 5, 5, 27, 171, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 118, 25, 5, 172, 5, 151, 173,
+ 0, 0, 0, 174, 5, 5, 5, 83, 0, 2, 2, 175, 5, 104, 176, 0,
+ 177, 178, 179, 0, 5, 5, 5, 74, 0, 0, 5, 180, 0, 0, 0, 0,
+ 0, 0, 0, 0, 83, 5, 181, 0, 5, 26, 102, 74, 118, 5, 182, 0,
+ 5, 5, 5, 5, 118, 25, 183, 109, 5, 184, 5, 61, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 116, 103, 151, 0, 0, 0, 0,
+ 185, 186, 103, 116, 104, 0, 0, 187, 103, 167, 0, 0, 5, 188, 0, 0,
+ 189, 103, 0, 83, 83, 0, 80, 190, 5, 103, 103, 154, 27, 0, 0, 0,
+ 5, 5, 16, 0, 5, 154, 5, 154, 5, 151, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 191, 0, 0, 83, 192, 193, 0, 0, 25, 190, 116,
+ 5, 5, 193, 0, 146, 32, 25, 16, 5, 154, 194, 195, 5, 5, 196, 0,
+ 197, 198, 0, 0, 199, 119, 5, 16, 40, 49, 200, 61, 0, 0, 0, 0,
+ 5, 5, 201, 202, 5, 5, 203, 0, 0, 0, 0, 0, 5, 204, 205, 0,
+ 5, 104, 206, 0, 5, 207, 0, 0, 66, 33, 0, 0, 0, 0, 0, 0,
+ 5, 32, 0, 0, 0, 5, 5, 208, 209, 210, 211, 0, 0, 212, 30, 213,
+ 5, 214, 25, 5, 215, 0, 5, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 216, 217, 79, 218, 172, 219, 0, 0, 220, 221, 222, 223, 224, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 225, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 167, 0, 0, 0,
+ 5, 5, 5, 141, 5, 5, 5, 5, 5, 5, 61, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 32, 104, 0, 0, 0, 25, 157, 5, 93, 61, 227, 93, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 228, 5, 229, 0, 0, 230,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 231,
+ 5, 5, 5, 5, 5, 5, 103, 0, 16, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 104, 0, 232, 194, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 34, 5, 235, 236, 237, 5, 238, 239, 240, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 241, 242, 87, 34, 34, 132, 132, 216, 216, 243, 0,
+ 244, 245, 0, 0, 0, 0, 0, 0, 5, 246, 247, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 248, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 190, 0, 5, 5, 249, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 237, 250, 251, 252, 253, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 163, 163, 108, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 118, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 180, 5, 5, 5, 5, 5, 5,
+ 118, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 255, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 79,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 33, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_posix_alnum_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4,
+ 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0,
+ 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31,
+ 254, 225, 0, 156, 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0,
+ 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0,
+ 255, 255, 255, 1, 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 240, 255,
+ 248, 3, 255, 255, 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255,
+ 239, 159, 249, 255, 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16,
+ 238, 135, 249, 255, 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0,
+ 238, 191, 251, 255, 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30,
+ 238, 159, 249, 255, 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214,
+ 24, 199, 255, 195, 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227,
+ 223, 29, 96, 7, 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64,
+ 15, 0, 6, 0, 255, 223, 253, 255, 255, 255, 255, 231, 223, 93, 240, 128,
+ 15, 0, 0, 252, 238, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255,
+ 0, 0, 12, 0, 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 0, 0,
+ 214, 247, 255, 255, 175, 255, 255, 59, 95, 32, 0, 240, 1, 0, 0, 0,
+ 255, 254, 255, 255, 255, 31, 254, 255, 3, 255, 255, 254, 255, 255, 255, 31,
+ 255, 255, 127, 249, 255, 255, 0, 60, 191, 32, 255, 255, 255, 255, 255, 247,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255,
+ 255, 199, 255, 1, 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0,
+ 255, 255, 207, 255, 255, 1, 128, 16, 255, 7, 255, 255, 255, 255, 63, 0,
+ 255, 255, 255, 127, 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255,
+ 255, 3, 0, 0, 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 128,
+ 255, 255, 239, 255, 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0,
+ 255, 255, 127, 0, 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255,
+ 0, 222, 111, 4, 128, 255, 31, 0, 63, 63, 255, 170, 255, 255, 223, 95,
+ 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31,
+ 132, 252, 47, 62, 80, 189, 255, 243, 224, 67, 0, 0, 0, 0, 192, 255,
+ 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127,
+ 0, 128, 0, 0, 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224,
+ 224, 255, 255, 255, 255, 127, 0, 0, 255, 31, 255, 255, 0, 12, 0, 0,
+ 255, 127, 240, 143, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 191, 255, 255, 255, 255, 0, 0, 0,
+ 47, 0, 0, 0, 0, 0, 252, 232, 255, 255, 7, 0, 255, 255, 247, 255,
+ 255, 255, 0, 124, 255, 63, 0, 0, 255, 255, 127, 252, 5, 0, 0, 56,
+ 255, 255, 60, 0, 126, 126, 126, 0, 127, 127, 255, 255, 255, 3, 255, 255,
+ 15, 0, 255, 255, 127, 248, 255, 255, 255, 63, 255, 255, 255, 255, 255, 3,
+ 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255,
+ 255, 255, 252, 255, 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255,
+ 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63,
+ 255, 255, 31, 0, 255, 255, 1, 0, 15, 255, 62, 0, 255, 255, 15, 255,
+ 255, 0, 255, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
+ 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0, 255, 27, 3, 0,
+ 128, 0, 255, 255, 63, 0, 0, 0, 240, 0, 255, 255, 255, 255, 71, 0,
+ 30, 192, 0, 20, 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191,
+ 159, 25, 129, 224, 187, 7, 0, 128, 3, 0, 0, 0, 179, 0, 0, 0,
+ 255, 255, 63, 127, 0, 0, 0, 63, 17, 0, 0, 0, 255, 255, 63, 1,
+ 0, 0, 0, 128, 127, 242, 111, 255, 255, 255, 191, 153, 7, 0, 0, 0,
+ 255, 252, 255, 255, 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32,
+ 255, 253, 255, 255, 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255,
+ 255, 127, 123, 1, 0, 0, 1, 0, 127, 0, 0, 0, 248, 255, 255, 224,
+ 255, 135, 255, 255, 255, 128, 255, 255, 11, 0, 3, 0, 255, 255, 255, 0,
+ 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 255, 223,
+ 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
+ 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 247, 15, 0, 0,
+ 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63, 0, 64, 0, 0,
+ 255, 15, 0, 0, 143, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-static RE_UINT8 re_other_id_continue_stage_2[] = {
- 0, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_posix_alnum(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_other_id_continue_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_other_id_continue_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0,
- 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 3, 0,
- 0, 0, 0, 4, 0, 0, 0, 0,
-};
+ v = re_posix_alnum_table_1[field_2];
+ v = re_posix_alnum_table_2[(v << 5) | field_1];
+ v = re_posix_alnum_table_3[(v << 2) | field_0];
-/* Other_ID_Continue: 202 bytes. */
-
-RE_UINT32 re_get_other_id_continue(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_other_id_continue_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_id_continue_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_id_continue_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_id_continue_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Sentence_Terminal. */
+/* Posix_Digit. */
+RE_UINT32 re_get_posix_digit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
-static RE_UINT8 re_sentence_terminal_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 7, 8, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ return 0;
+}
-static RE_UINT8 re_sentence_terminal_stage_2[] = {
- 0, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 1,
- 7, 1, 1, 8, 1, 1, 9, 10, 11, 12, 13, 14, 15, 1, 1, 1,
- 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 1,
- 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 19, 1, 20, 1, 21, 22, 23, 24, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 28,
- 29, 30, 31, 1, 32, 33, 34, 35, 1, 1, 36, 1, 34, 1, 37, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 39, 1, 1, 40, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1,
+/* Posix_Punct. */
+static RE_UINT8 re_posix_punct_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 13, 27, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 28, 29, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 30,
+ 13, 13, 13, 13, 31, 32, 33, 13, 34, 13, 35, 36, 37, 38, 39, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13
};
-static RE_UINT8 re_sentence_terminal_stage_3[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0,
- 5, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
- 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 3, 0, 0, 0, 0,
- 0, 17, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
- 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 22, 0,
- 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 28,
- 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0,
- 1, 0, 0, 31, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 3, 34, 0,
- 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 2, 0, 0,
- 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
- 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
- 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,
- 0, 0, 0, 22, 0, 0, 0, 44, 0, 43, 45, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0,
- 0, 0, 0, 0, 47, 0, 0, 0,
-};
+static RE_UINT8 re_posix_punct_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 8, 9, 0, 0, 10,
+ 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 13, 14, 15, 16,
+ 17, 0, 0, 18, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 22,
+ 0, 23, 14, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25,
+ 0, 0, 0, 10, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28,
+ 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 31, 32, 0, 0, 0, 33,
+ 0, 34, 35, 0, 0, 0, 0, 0, 36, 37, 0, 0, 38, 39, 40, 0,
+ 0, 0, 41, 0, 39, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 0, 0, 0,
+ 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 46, 47, 0, 0, 48, 0, 49, 0, 0, 0, 0, 50, 0,
+ 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 39, 53,
+ 39, 0, 0, 0, 0, 54, 0, 0, 0, 0, 12, 55, 0, 0, 0, 56,
+ 0, 57, 0, 39, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61,
+ 62, 63, 64, 65, 66, 53, 0, 0, 67, 68, 69, 0, 70, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 71, 51, 0, 56, 72, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 72, 73, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 74, 75, 53, 53, 53,
+ 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 27, 0, 0, 0, 0,
+ 53, 77, 78, 0, 79, 53, 53, 80, 53, 53, 53, 53, 53, 53, 72, 81,
+ 82, 83, 0, 0, 47, 45, 0, 42, 0, 0, 0, 0, 84, 0, 53, 85,
+ 64, 86, 87, 53, 86, 88, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 53, 71, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 89, 0, 0, 90, 0, 0, 0, 91, 92, 93, 0, 0, 94, 0, 0, 0,
+ 0, 95, 0, 96, 0, 0, 97, 98, 0, 97, 34, 0, 0, 0, 99, 0,
+ 0, 0, 56, 100, 0, 0, 39, 26, 0, 0, 42, 101, 0, 0, 0, 102,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 104, 93, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 105,
+ 44, 62, 106, 107, 0, 0, 0, 0, 1, 2, 2, 108, 0, 0, 0, 109,
+ 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 0, 112, 113, 45, 62, 114,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 27, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 115, 0, 0, 0, 0, 34, 34, 0, 0, 0, 0, 0, 0,
+ 0, 0, 116, 34, 0, 0, 117, 118, 0, 112, 0, 0, 119, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0,
+ 0, 0, 122, 0, 0, 123, 93, 0, 0, 0, 85, 124, 0, 0, 125, 0,
+ 0, 126, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0,
+ 0, 0, 130, 131, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0,
+ 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 11,
+ 0, 34, 71, 0, 133, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 134, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 135, 136,
+ 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 97, 0, 0, 0, 138, 0, 111, 139, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 72, 53, 142, 53, 143, 144, 145, 53, 43,
+ 53, 53, 146, 0, 0, 0, 0, 0, 53, 53, 92, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 147, 42, 138, 138, 31, 31, 103, 103, 148, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 0, 140, 0, 149, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 153, 53, 53, 80, 154, 155, 72, 156, 157, 41, 41, 86, 21, 0, 158,
+ 159, 160, 161, 108, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 162, 163, 53, 53, 53, 80, 53, 53, 164, 165,
+ 153, 53, 166, 53, 63, 167, 0, 0, 53, 53, 53, 168, 53, 53, 169, 53,
+ 53, 53, 80, 170, 171, 172, 173, 0, 53, 53, 53, 53, 106, 53, 51, 0
+};
+
+static RE_UINT8 re_posix_punct_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 248, 1, 0, 0, 120,
+ 254, 219, 211, 137, 0, 0, 128, 0, 60, 0, 252, 255, 224, 175, 255, 255,
+ 0, 0, 32, 64, 176, 0, 0, 0, 0, 0, 64, 0, 4, 0, 0, 0,
+ 0, 0, 0, 252, 0, 230, 0, 0, 0, 0, 0, 64, 73, 0, 0, 0,
+ 0, 0, 24, 0, 192, 255, 0, 200, 0, 60, 0, 0, 0, 0, 16, 64,
+ 0, 2, 0, 96, 255, 63, 0, 0, 0, 0, 192, 195, 0, 0, 255, 127,
+ 48, 0, 1, 0, 0, 0, 12, 44, 0, 0, 3, 0, 0, 0, 1, 0,
+ 0, 0, 248, 7, 0, 0, 128, 128, 16, 0, 0, 0, 0, 128, 0, 0,
+ 0, 0, 0, 2, 0, 0, 16, 0, 0, 0, 0, 128, 0, 128, 0, 12,
+ 254, 255, 255, 252, 0, 0, 80, 61, 32, 0, 0, 0, 0, 0, 0, 192,
+ 191, 223, 255, 7, 0, 252, 0, 0, 0, 0, 0, 8, 255, 1, 0, 0,
+ 0, 0, 255, 3, 1, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 24,
+ 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 15, 255, 7, 0, 0,
+ 49, 0, 0, 0, 255, 255, 255, 255, 127, 63, 0, 0, 255, 7, 240, 31,
+ 0, 0, 0, 240, 0, 0, 0, 248, 255, 0, 8, 0, 0, 0, 0, 160,
+ 3, 224, 0, 224, 0, 224, 0, 96, 0, 0, 255, 255, 255, 0, 255, 255,
+ 255, 255, 255, 127, 0, 0, 0, 124, 0, 124, 0, 0, 123, 3, 208, 193,
+ 175, 66, 0, 12, 31, 188, 0, 0, 0, 12, 255, 255, 127, 0, 0, 0,
+ 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 207, 255, 255, 255, 191, 255,
+ 224, 7, 0, 222, 255, 127, 255, 255, 255, 255, 7, 0, 255, 255, 255, 251,
+ 255, 255, 15, 0, 0, 0, 255, 15, 30, 255, 255, 255, 1, 0, 193, 224,
+ 0, 0, 195, 255, 15, 0, 0, 0, 0, 252, 255, 255, 255, 0, 1, 0,
+ 255, 255, 1, 0, 0, 224, 0, 0, 0, 0, 8, 64, 0, 0, 252, 0,
+ 255, 255, 127, 0, 3, 0, 0, 0, 0, 6, 0, 0, 0, 15, 192, 3,
+ 0, 0, 240, 0, 0, 192, 0, 0, 0, 0, 0, 23, 254, 63, 0, 192,
+ 0, 0, 128, 3, 0, 12, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0,
+ 0, 0, 252, 255, 0, 0, 0, 48, 255, 255, 247, 255, 127, 15, 0, 0,
+ 63, 0, 0, 0, 127, 127, 0, 48, 7, 0, 0, 0, 0, 0, 128, 255,
+ 0, 0, 0, 254, 255, 115, 255, 31, 255, 255, 255, 31, 0, 0, 128, 1,
+ 0, 0, 255, 1, 0, 1, 0, 0, 0, 0, 127, 0, 0, 0, 0, 30,
+ 0, 32, 0, 0, 0, 0, 224, 3, 128, 63, 0, 0, 0, 0, 0, 216,
+ 0, 0, 48, 0, 224, 33, 0, 232, 0, 0, 0, 63, 0, 248, 0, 44,
+ 64, 0, 0, 0, 254, 255, 255, 0, 14, 0, 0, 0, 255, 31, 0, 0,
+ 112, 0, 0, 0, 0, 0, 0, 220, 62, 0, 0, 0, 0, 0, 224, 255,
+ 255, 255, 3, 128, 0, 0, 31, 0, 0, 0, 32, 0, 48, 0, 0, 0,
+ 0, 0, 128, 7, 0, 0, 0, 144, 127, 254, 255, 255, 31, 28, 0, 0,
+ 24, 240, 255, 255, 255, 195, 255, 255, 35, 0, 0, 0, 2, 0, 0, 8,
+ 8, 0, 0, 0, 0, 224, 223, 255, 239, 15, 0, 0, 0, 16, 1, 0,
+ 0, 64, 0, 0, 255, 15, 255, 255, 255, 127, 254, 255, 254, 255, 254, 255,
+ 0, 224, 255, 255, 255, 255, 0, 0, 192, 255, 255, 255, 7, 0, 255, 255,
+ 255, 255, 255, 15, 255, 1, 3, 0, 255, 255, 255, 0, 255, 31, 255, 31,
+ 255, 255, 255, 1, 255, 15, 0, 0, 255, 0, 255, 3, 255, 63, 3, 0,
+ 255, 255, 255, 253, 255, 239, 255, 255, 255, 63, 31, 7, 127, 0, 255, 255,
+ 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_posix_punct(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_posix_punct_table_1[field_2];
+ v = re_posix_punct_table_2[(v << 5) | field_1];
+ v = re_posix_punct_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_sentence_terminal_stage_4[] = {
- 0, 0, 0, 0, 2, 64, 0, 128, 0, 2, 0, 0, 0, 0, 0, 192,
- 0, 0, 16, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 128, 98,
- 48, 0, 0, 0, 0, 12, 0, 0, 132, 1, 0, 0, 0, 64, 0, 0,
- 0, 0, 96, 0, 8, 2, 0, 0, 0, 15, 0, 0, 0, 0, 0, 204,
- 0, 0, 0, 24, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
- 4, 0, 0, 0, 0, 0, 0, 128, 0, 192, 0, 0, 0, 0, 136, 0,
- 0, 0, 192, 0, 0, 128, 0, 0, 0, 3, 0, 0, 0, 0, 0, 224,
- 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 196, 0, 2, 0, 0, 0,
- 0, 0, 224, 3, 128, 1, 0, 0, 3, 0, 0, 0, 14, 0, 0, 0,
- 96, 32, 0, 192, 0, 0, 0, 27, 0, 24, 0, 0, 12, 254, 255, 0,
- 6, 0, 0, 0, 0, 0, 0, 112, 12, 0, 0, 0, 0, 0, 128, 1,
- 0, 0, 32, 0, 16, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
-};
+/* Posix_XDigit. */
+RE_UINT32 re_get_posix_xdigit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
+ if (0x41 <= codepoint && codepoint <= 0x46)
+ return 1;
+ if (0x61 <= codepoint && codepoint <= 0x66)
+ return 1;
+
+ return 0;
+}
-/* Sentence_Terminal: 960 bytes. */
-
-RE_UINT32 re_get_sentence_terminal(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_sentence_terminal_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_sentence_terminal_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_sentence_terminal_stage_3[pos + f] << 5;
- pos += code;
- value = (re_sentence_terminal_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+/* Prepended_Concatenation_Mark. */
+RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 codepoint) {
+ if (0x0600 <= codepoint && codepoint <= 0x0605)
+ return 1;
+ if (codepoint == 0x06DD)
+ return 1;
+ if (codepoint == 0x070F)
+ return 1;
+ if (codepoint == 0x08E2)
+ return 1;
+ if (codepoint == 0x0110BD)
+ return 1;
+ if (codepoint == 0x0110CD)
+ return 1;
+
+ return 0;
}
-/* Variation_Selector. */
+/* Print. */
+static RE_UINT8 re_print_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 17, 18, 18, 13, 13, 13, 13, 13, 13, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 18, 18, 13, 31, 18, 18,
+ 18, 32, 18, 18, 18, 18, 18, 18, 18, 18, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 18, 38,
+ 18, 18, 18, 18, 39, 40, 41, 18, 42, 18, 43, 44, 45, 46, 47, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 48, 13, 13, 13, 49, 50, 13,
+ 13, 13, 13, 51, 13, 13, 13, 13, 13, 13, 52, 18, 18, 18, 53, 18,
+ 13, 13, 13, 13, 54, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 55, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56
+};
-static RE_UINT8 re_variation_selector_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+static RE_UINT16 re_print_table_2[] = {
+ 0, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 1, 8, 1, 9, 10,
+ 11, 1, 1, 1, 1, 1, 1, 1, 12, 1, 13, 1, 1, 14, 1, 15,
+ 1, 16, 17, 18, 0, 19, 20, 1, 1, 1, 1, 1, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 30, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 40, 44, 45, 46, 40, 1, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 0, 56, 57, 58, 0, 1, 1, 59, 60, 61, 11, 62, 0,
+ 1, 1, 1, 1, 1, 1, 63, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 64, 1, 65, 66, 67, 1, 68, 1, 15, 69, 70, 1, 1, 71,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 69, 1, 1, 72, 73, 74, 75, 76, 1, 1, 77, 78,
+ 79, 1, 1, 72, 1, 80, 1, 81, 2, 82, 83, 84, 1, 85, 86, 1,
+ 87, 1, 2, 88, 78, 89, 90, 0, 1, 1, 85, 69, 1, 1, 1, 91,
+ 1, 92, 93, 1, 94, 15, 9, 95, 1, 1, 1, 1, 1, 1, 1, 96,
+ 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 97, 77, 1, 19, 98, 99,
+ 1, 100, 1, 101, 102, 1, 103, 104, 1, 1, 1, 1, 85, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 105, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 107, 1, 1, 1,
+ 1, 108, 2, 1, 1, 1, 1, 109, 1, 63, 1, 110, 74, 111, 111, 1,
+ 1, 1, 112, 0, 96, 1, 1, 75, 1, 1, 1, 1, 1, 1, 81, 113,
+ 1, 1, 53, 1, 7, 1, 1, 1, 114, 6, 1, 1, 108, 1, 1, 115,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69,
+ 1, 1, 1, 1, 116, 1, 117, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 118, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 120, 121,
+ 1, 122, 1, 119, 1, 1, 123, 1, 1, 1, 124, 69, 1, 1, 125, 2,
+ 1, 74, 126, 1, 1, 1, 127, 74, 128, 129, 1, 85, 1, 1, 1, 130,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 115, 131, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 89, 1, 1, 70, 0, 132, 133, 134, 1, 1, 1, 135, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103, 1, 136, 1, 137, 138,
+ 70, 1, 139, 140, 1, 1, 1, 88, 53, 1, 1, 1, 1, 2, 141, 142,
+ 143, 144, 145, 0, 1, 1, 1, 95, 146, 147, 1, 1, 102, 90, 103, 77,
+ 0, 0, 0, 0, 69, 1, 104, 55, 1, 148, 80, 95, 149, 1, 150, 0,
+ 1, 1, 1, 1, 77, 151, 152, 55, 1, 9, 1, 153, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 81, 137, 0, 0, 0, 0,
+ 154, 155, 107, 1, 2, 156, 0, 157, 158, 159, 0, 0, 1, 160, 136, 1,
+ 161, 162, 163, 1, 1, 0, 1, 164, 1, 165, 166, 167, 168, 169, 0, 0,
+ 1, 1, 170, 0, 1, 112, 1, 171, 1, 172, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 1, 173, 0, 0, 1, 9, 70, 0, 0, 103, 118, 74,
+ 1, 1, 174, 175, 1, 1, 176, 177, 1, 19, 9, 74, 1, 1, 1, 178,
+ 179, 2, 0, 0, 180, 151, 1, 181, 21, 182, 183, 184, 0, 0, 0, 0,
+ 1, 1, 185, 186, 1, 1, 172, 0, 0, 0, 0, 0, 1, 166, 77, 0,
+ 1, 1, 187, 188, 1, 72, 189, 0, 15, 85, 0, 0, 0, 0, 0, 0,
+ 1, 55, 0, 0, 0, 1, 1, 190, 191, 192, 193, 0, 0, 100, 3, 194,
+ 1, 1, 9, 1, 1, 195, 1, 72, 0, 0, 0, 0, 0, 0, 0, 0,
+ 196, 197, 198, 116, 136, 199, 0, 0, 200, 201, 172, 202, 203, 189, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 204, 1, 205,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 0, 0, 0,
+ 1, 1, 1, 206, 1, 1, 1, 1, 1, 1, 207, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 72, 2, 209, 0, 0, 103, 210, 1, 1, 211, 212, 213, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 95, 0, 0, 0, 1, 1, 214, 1, 215, 0, 0, 216,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 119,
+ 1, 1, 1, 1, 1, 1, 81, 0, 170, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 217, 218, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 219, 220, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 81, 1, 221, 1, 1, 1, 1, 1, 170,
+ 1, 1, 222, 0, 0, 0, 0, 75, 1, 1, 74, 72, 0, 0, 0, 0,
+ 1, 1, 19, 1, 11, 223, 224, 1, 225, 226, 227, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 228, 1, 1, 1, 1, 1, 1, 1, 1, 229, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 232, 233, 0, 0, 0, 0, 0, 0, 1, 234, 209, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 159, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 235, 0, 1, 1, 236, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 237, 1, 238, 0, 0, 53, 77, 0, 0, 0, 0, 0, 0,
+ 224, 239, 240, 241, 242, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 85, 1, 1, 75, 245, 246, 81, 1, 1, 1, 1, 1, 247, 0, 248,
+ 249, 55, 250, 222, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 119, 251, 1, 1, 1, 75, 1, 1, 72, 118,
+ 85, 1, 172, 1, 9, 252, 0, 0, 1, 1, 1, 253, 1, 1, 143, 1,
+ 1, 1, 75, 254, 117, 255, 256, 0, 1, 1, 1, 1, 139, 1, 18, 257,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 77, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 238, 1, 1, 1, 1, 1, 1,
+ 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 258, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 90,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 0, 0, 0, 0, 0,
+ 259, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 213,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77
};
-static RE_UINT8 re_variation_selector_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_print_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 252,
+ 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 254, 255, 255, 255, 127, 254,
+ 255, 231, 254, 255, 255, 0, 255, 255, 255, 135, 31, 0, 255, 255, 255, 223,
+ 255, 191, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 255, 231,
+ 255, 63, 255, 127, 255, 255, 255, 79, 255, 7, 0, 0, 255, 255, 223, 255,
+ 255, 0, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243, 159, 121, 128, 176,
+ 207, 255, 255, 127, 238, 135, 249, 255, 255, 253, 109, 211, 135, 57, 2, 94,
+ 192, 255, 127, 0, 238, 191, 251, 255, 255, 253, 237, 243, 191, 59, 1, 0,
+ 207, 255, 3, 254, 238, 159, 249, 255, 159, 57, 224, 176, 207, 255, 255, 0,
+ 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 192, 255, 255, 7,
+ 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7, 207, 255, 128, 255,
+ 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0, 223, 253, 240, 255,
+ 207, 255, 255, 255, 238, 255, 127, 252, 255, 255, 251, 47, 127, 132, 95, 255,
+ 192, 255, 28, 0, 254, 255, 255, 255, 255, 255, 255, 135, 255, 255, 255, 15,
+ 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243, 255, 254, 255, 255,
+ 255, 31, 254, 255, 255, 255, 255, 254, 255, 223, 255, 7, 191, 32, 255, 255,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 31, 255, 255, 255, 3, 255, 255, 63, 63,
+ 255, 255, 255, 1, 255, 223, 31, 0, 255, 255, 127, 0, 255, 255, 15, 0,
+ 255, 223, 13, 0, 255, 255, 255, 63, 255, 3, 255, 3, 255, 127, 255, 3,
+ 255, 7, 255, 255, 255, 255, 63, 0, 255, 15, 255, 15, 241, 255, 255, 255,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199, 255, 255, 255, 207,
+ 255, 255, 255, 159, 255, 63, 255, 255, 1, 0, 0, 0, 255, 255, 15, 240,
+ 255, 255, 255, 248, 255, 227, 255, 255, 255, 1, 255, 255, 255, 255, 255, 7,
+ 255, 255, 255, 251, 63, 63, 255, 170, 223, 255, 207, 239, 255, 255, 220, 127,
+ 255, 252, 255, 255, 223, 255, 243, 255, 255, 127, 255, 31, 0, 0, 255, 255,
+ 255, 255, 1, 0, 127, 0, 0, 0, 255, 255, 207, 255, 255, 255, 191, 255,
+ 255, 127, 255, 255, 255, 255, 15, 254, 255, 128, 1, 128, 127, 127, 127, 127,
+ 255, 255, 7, 0, 0, 0, 255, 15, 224, 255, 255, 255, 15, 0, 255, 255,
+ 255, 31, 255, 255, 127, 0, 255, 255, 255, 15, 0, 0, 255, 255, 255, 0,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 31, 255, 3, 63, 192, 255, 3,
+ 255, 255, 15, 128, 255, 191, 255, 195, 255, 63, 255, 243, 7, 0, 0, 248,
+ 126, 126, 126, 0, 127, 127, 255, 255, 255, 63, 255, 3, 127, 248, 255, 255,
+ 127, 0, 248, 224, 255, 255, 127, 95, 219, 255, 255, 255, 3, 0, 248, 255,
+ 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 63, 255, 255, 247, 255,
+ 127, 15, 223, 255, 252, 252, 252, 28, 127, 127, 0, 62, 255, 239, 255, 255,
+ 127, 255, 255, 183, 255, 63, 255, 63, 135, 255, 255, 255, 255, 255, 143, 255,
+ 15, 224, 255, 255, 255, 255, 255, 191, 15, 255, 63, 0, 255, 3, 255, 255,
+ 255, 255, 15, 255, 15, 128, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145,
+ 128, 255, 0, 0, 255, 255, 55, 248, 255, 255, 255, 143, 255, 255, 255, 131,
+ 255, 255, 255, 240, 111, 240, 239, 254, 255, 255, 63, 135, 255, 1, 255, 1,
+ 127, 248, 127, 0, 255, 255, 63, 254, 255, 255, 63, 255, 255, 255, 7, 255,
+ 255, 255, 3, 30, 0, 254, 0, 0, 255, 1, 0, 0, 255, 255, 7, 252,
+ 255, 0, 255, 3, 255, 59, 3, 0, 255, 63, 252, 255, 255, 255, 0, 128,
+ 3, 32, 255, 255, 255, 1, 255, 3, 254, 255, 31, 0, 255, 255, 251, 255,
+ 127, 189, 255, 191, 255, 7, 255, 3, 255, 253, 237, 251, 159, 57, 129, 224,
+ 207, 31, 31, 0, 255, 255, 255, 239, 3, 0, 0, 0, 31, 0, 255, 3,
+ 255, 31, 0, 0, 255, 3, 0, 0, 255, 255, 7, 128, 127, 242, 111, 255,
+ 255, 255, 191, 249, 127, 0, 255, 3, 31, 0, 0, 0, 7, 0, 0, 0,
+ 255, 253, 255, 255, 255, 255, 127, 255, 63, 0, 255, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1,
+ 0, 0, 1, 0, 255, 255, 3, 128, 255, 127, 31, 0, 15, 0, 0, 0,
+ 255, 127, 255, 1, 255, 195, 0, 0, 255, 63, 63, 0, 63, 0, 255, 251,
+ 251, 255, 255, 224, 255, 255, 0, 0, 255, 135, 255, 255, 255, 128, 255, 255,
+ 31, 0, 3, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 243, 127, 254, 255, 255, 63, 0, 0, 0, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 255, 207, 255, 255, 255, 15, 0, 248, 254, 255, 0, 0,
+ 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63, 159, 255, 127, 0,
+ 255, 15, 255, 195, 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10,
+ 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
+ 0, 0, 3, 0, 255, 127, 254, 255, 254, 255, 254, 255, 255, 63, 0, 0,
+ 192, 255, 255, 255, 7, 0, 255, 255, 255, 1, 3, 0, 255, 31, 255, 31,
+ 255, 63, 3, 0, 255, 255, 255, 253, 255, 63, 31, 7, 255, 1, 127, 0,
+ 7, 0, 127, 0, 0, 0, 255, 3, 3, 0, 255, 255, 2, 0, 0, 0
};
-static RE_UINT8 re_variation_selector_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_print(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_variation_selector_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0,
- 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Variation_Selector: 236 bytes. */
-
-RE_UINT32 re_get_variation_selector(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_variation_selector_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_variation_selector_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_variation_selector_stage_3[pos + f] << 6;
- pos += code;
- value = (re_variation_selector_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ v = re_print_table_1[field_2];
+ v = re_print_table_2[(v << 5) | field_1];
+ v = re_print_table_3[(v << 2) | field_0];
-/* Pattern_White_Space. */
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_pattern_white_space_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Quotation_Mark. */
+static RE_UINT8 re_quotation_mark_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_pattern_white_space_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_pattern_white_space_stage_3[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_pattern_white_space_stage_4[] = {
- 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 3, 0, 0,
-};
-
-/* Pattern_White_Space: 178 bytes. */
-
-RE_UINT32 re_get_pattern_white_space(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_pattern_white_space_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_pattern_white_space_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_pattern_white_space_stage_3[pos + f] << 6;
- pos += code;
- value = (re_pattern_white_space_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Pattern_Syntax. */
-
-static RE_UINT8 re_pattern_syntax_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_pattern_syntax_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 3, 4, 5, 3, 3, 1, 6, 7, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 9,
-};
-
-static RE_UINT8 re_pattern_syntax_stage_3[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 6, 4, 4, 4, 4, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 9, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 11, 8,
- 8, 8, 4, 4, 4, 4, 4, 4, 12, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 13, 4, 4, 4, 4, 14, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_pattern_syntax_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 120, 1, 0, 0, 120,
- 0, 0, 0, 0, 254, 90, 67, 136, 0, 0, 128, 0, 0, 0, 128, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 127,
- 254, 255, 239, 127, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 255, 255,
- 14, 255, 255, 255, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 192,
- 96, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Pattern_Syntax: 364 bytes. */
-
-RE_UINT32 re_get_pattern_syntax(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_pattern_syntax_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_pattern_syntax_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_pattern_syntax_stage_3[pos + f] << 6;
- pos += code;
- value = (re_pattern_syntax_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Prepended_Concatenation_Mark. */
-
-static RE_UINT8 re_prepended_concatenation_mark_stage_1[] = {
- 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_prepended_concatenation_mark_stage_2[] = {
- 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_quotation_mark_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_prepended_concatenation_mark_stage_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 3, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_prepended_concatenation_mark_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
- 0, 32, 0, 0, 0, 0, 0, 0,
-};
-
-/* Prepended_Concatenation_Mark: 236 bytes. */
-
-RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_prepended_concatenation_mark_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_prepended_concatenation_mark_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_prepended_concatenation_mark_stage_3[pos + f] << 6;
- pos += code;
- value = (re_prepended_concatenation_mark_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Regional_Indicator. */
-
-static RE_UINT8 re_regional_indicator_stage_1[] = {
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,
-};
-
-static RE_UINT8 re_regional_indicator_stage_2[] = {
+ 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
-};
-
-static RE_UINT8 re_regional_indicator_stage_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0
};
-static RE_UINT8 re_regional_indicator_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255,
+static RE_UINT8 re_quotation_mark_table_3[] = {
+ 0, 0, 0, 0, 132, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 255,
+ 0, 0, 0, 6, 4, 0, 0, 0, 0, 240, 0, 224, 30, 0, 0, 0,
+ 12, 0, 0, 0
};
-/* Regional_Indicator: 130 bytes. */
-
-RE_UINT32 re_get_regional_indicator(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_regional_indicator_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_regional_indicator_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_regional_indicator_stage_3[pos + f] << 7;
- pos += code;
- value = (re_regional_indicator_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Hangul_Syllable_Type. */
-
-static RE_UINT8 re_hangul_syllable_type_stage_1[] = {
- 0, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_quotation_mark(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_hangul_syllable_type_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 4, 5, 6,
- 7, 8, 9, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8,
- 9, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8, 9, 3,
- 4, 5, 6, 7, 8, 9, 3, 10, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_hangul_syllable_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7,
- 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9,
- 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10,
- 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6,
- 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8,
- 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8,
- 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8,
- 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 11, 2, 12, 4, 4, 13,
-};
+ v = re_quotation_mark_table_1[field_2];
+ v = re_quotation_mark_table_2[(v << 5) | field_1];
+ v = re_quotation_mark_table_3[(v << 2) | field_0];
-static RE_UINT8 re_hangul_syllable_type_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
-};
+ return (v >> offset) & 0x1;
+}
-/* Hangul_Syllable_Type: 664 bytes. */
-
-RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_hangul_syllable_type_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_hangul_syllable_type_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_hangul_syllable_type_stage_3[pos + f] << 4;
- value = re_hangul_syllable_type_stage_4[pos + code];
-
- return value;
+/* Radical. */
+RE_UINT32 re_get_radical(RE_UINT32 codepoint) {
+ if (0x2E80 <= codepoint && codepoint <= 0x2E99)
+ return 1;
+ if (0x2E9B <= codepoint && codepoint <= 0x2EF3)
+ return 1;
+ if (0x2F00 <= codepoint && codepoint <= 0x2FD5)
+ return 1;
+
+ return 0;
}
-/* Bidi_Class. */
+/* Regional_Indicator. */
+RE_UINT32 re_get_regional_indicator(RE_UINT32 codepoint) {
+ if (0x01F1E6 <= codepoint && codepoint <= 0x01F1FF)
+ return 1;
-static RE_UINT8 re_bidi_class_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 7,
- 8, 9, 5, 5, 5, 5, 10, 5, 5, 5, 5, 11, 5, 12, 13, 14,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
-};
+ return 0;
+}
-static RE_UINT8 re_bidi_class_stage_2[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10,
- 4, 4, 11, 4, 4, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 30, 32, 33, 34, 35, 36,
- 37, 38, 28, 39, 40, 41, 4, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, 55, 4,
- 56, 4, 4, 4, 4, 4, 4, 4, 4, 4, 57, 4, 58, 59, 60, 61,
- 62, 4, 63, 4, 64, 65, 4, 66, 67, 68, 69, 4, 70, 71, 72, 73,
- 74, 4, 4, 75, 4, 4, 4, 76, 4, 4, 4, 4, 4, 4, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 86, 86, 86, 88, 89, 90, 86,
- 91, 92, 93, 94, 86, 86, 86, 86, 86, 86, 95, 86, 86, 86, 86, 86,
- 4, 4, 4, 4, 86, 86, 86, 86, 86, 86, 86, 86, 86, 96, 97, 86,
- 4, 4, 4, 98, 4, 99, 4, 100, 86, 101, 102, 103, 86, 86, 86, 104,
- 105, 4, 106, 107, 4, 4, 4, 108, 109, 110, 111, 112, 4, 113, 4, 114,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 86, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 115, 116, 4, 4, 4, 4, 117, 118, 119, 120, 121, 4, 122, 4,
- 123, 124, 4, 125, 126, 127, 128, 129, 130, 131, 132, 133, 4, 4, 4, 134,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 135, 136, 16, 16,
- 16, 16, 16, 16, 137, 16, 16, 138, 139, 140, 16, 141, 142, 143, 4, 144,
- 4, 4, 4, 4, 145, 86, 146, 147, 4, 4, 4, 148, 4, 149, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 150, 150, 150, 150, 151, 150, 150, 150, 152, 150, 150, 153, 154, 150, 150, 150,
- 150, 150, 150, 150, 155, 150, 150, 150, 150, 156, 150, 150, 157, 158, 150, 150,
- 159, 160, 161, 4, 162, 163, 164, 165, 166, 4, 4, 167, 40, 168, 4, 4,
- 169, 170, 171, 172, 4, 4, 173, 174, 175, 176, 177, 4, 178, 4, 4, 4,
- 179, 4, 4, 4, 4, 4, 4, 180, 181, 182, 183, 4, 4, 4, 4, 4,
- 184, 4, 185, 4, 186, 187, 188, 4, 4, 4, 4, 189, 4, 4, 4, 190,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 191, 192, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 193, 194, 195,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 196, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 197, 198, 4, 86, 199, 4, 4, 86, 200, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 201, 202, 203, 204, 205,
- 4, 4, 4, 4, 4, 4, 4, 4, 206, 207, 208, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 209, 4, 4, 4, 192, 4, 4, 4, 4, 4, 4, 210, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 150, 150, 150, 211, 150, 212, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
- 150, 157, 16, 150, 16, 213, 150, 150, 16, 16, 16, 214, 150, 150, 150, 150,
- 215, 86, 216, 217, 218, 219, 4, 4, 4, 220, 4, 4, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 221, 86, 103, 86, 222,
- 223, 224, 225, 4, 226, 227, 228, 229, 86, 230, 231, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 232,
+/* Script. */
+static RE_UINT8 re_script_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 21, 21, 34, 35, 21, 21,
+ 21, 36, 21, 21, 21, 21, 21, 21, 21, 21, 37, 38, 39, 39, 39, 39,
+ 39, 40, 41, 42, 21, 21, 21, 21, 21, 21, 21, 21, 43, 21, 21, 44,
+ 21, 21, 21, 21, 45, 46, 47, 21, 48, 21, 49, 50, 51, 52, 53, 21,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 54, 13, 13, 13, 55, 56, 13,
+ 13, 13, 13, 57, 13, 13, 13, 13, 13, 13, 58, 21, 21, 21, 59, 21,
+ 13, 13, 13, 13, 60, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 61, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21
+};
+
+static RE_UINT16 re_script_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 5, 0, 6, 7, 7, 7, 8, 9, 10, 11, 12,
+ 13, 13, 13, 13, 14, 13, 13, 13, 13, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 23, 23, 26, 23, 27, 28, 29, 23, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 38, 84, 85, 86, 38, 87, 87, 88, 89, 90, 91, 92, 38,
+ 93, 93, 93, 93, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 99, 98, 100, 101, 102, 98, 103, 98, 104, 105, 106, 107, 107, 108,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 110, 111, 111, 112, 113, 114, 115, 116, 117, 117, 118, 119,
+ 120, 121, 121, 122, 121, 123, 109, 124, 125, 126, 127, 128, 129, 130, 131, 117,
+ 132, 133, 134, 135, 136, 137, 138, 38, 139, 139, 140, 141, 142, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 4, 153, 154, 155, 4, 156, 7, 157,
+ 4, 4, 4, 4, 4, 4, 4, 4, 158, 11, 159, 160, 11, 161, 162, 163,
+ 164, 0, 0, 165, 166, 0, 167, 168, 0, 169, 170, 4, 171, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 172, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 174, 174, 174, 174, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0,
+ 177, 178, 179, 4, 180, 180, 180, 181, 94, 182, 183, 184, 185, 186, 186, 13,
+ 0, 0, 187, 38, 188, 189, 189, 190, 189, 189, 189, 189, 189, 189, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 97, 97, 203, 204, 0, 205,
+ 206, 0, 0, 207, 0, 0, 208, 209, 199, 199, 210, 0, 0, 0, 0, 0,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 0, 0,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 211,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 213, 212, 214, 215, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 217, 13, 13, 13, 218, 218, 219, 0, 220, 4, 4, 221, 4, 222, 223,
+ 224, 225, 226, 227, 228, 228, 229, 42, 230, 231, 232, 233, 234, 234, 235, 236,
+ 237, 238, 239, 93, 240, 240, 241, 242, 243, 244, 245, 246, 107, 107, 247, 248,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 249, 250, 251,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 252, 189, 189, 253, 38, 254, 255, 256, 23, 23, 23, 257, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 258, 259, 23, 260, 23, 261, 262,
+ 263, 264, 265, 266, 23, 23, 23, 267, 268, 1, 1, 269, 270, 206, 271, 272,
+ 273, 274, 275, 38, 276, 276, 276, 277, 278, 279, 11, 11, 280, 281, 282, 283,
+ 38, 38, 38, 38, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 38,
+ 295, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 38, 38, 38, 38,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 307, 308, 309, 38, 38, 38, 38,
+ 310, 311, 312, 313, 314, 315, 38, 316, 317, 318, 38, 38, 319, 320, 321, 322,
+ 323, 324, 325, 326, 327, 38, 328, 329, 330, 331, 332, 333, 334, 335, 38, 38,
+ 336, 336, 337, 38, 338, 339, 338, 340, 341, 342, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 343, 344, 345, 38, 38, 346, 347, 348, 38, 38, 349, 350, 351,
+ 352, 352, 353, 354, 355, 355, 356, 357, 358, 359, 360, 361, 362, 362, 362, 363,
+ 364, 365, 38, 38, 366, 367, 368, 369, 370, 371, 372, 373, 38, 38, 38, 38,
+ 374, 374, 375, 376, 377, 377, 378, 38, 38, 38, 38, 38, 379, 380, 381, 38,
+ 382, 382, 383, 384, 385, 386, 387, 38, 388, 389, 38, 38, 38, 38, 38, 38,
+ 390, 391, 38, 38, 38, 392, 392, 393, 394, 395, 396, 38, 38, 397, 398, 399,
+ 400, 400, 401, 402, 402, 403, 404, 405, 38, 38, 38, 38, 38, 38, 38, 38,
+ 406, 407, 408, 409, 410, 411, 38, 38, 412, 413, 414, 415, 416, 417, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 418, 38, 38, 38, 38, 38, 419, 420, 421,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 423, 38, 38, 38,
+ 422, 422, 422, 424, 422, 422, 422, 422, 422, 422, 425, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 427, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 429, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 218, 430, 431, 432, 38, 38, 433, 434, 435, 435, 436, 437, 438, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 439, 439, 440, 38, 38, 38, 441, 441, 442, 441, 443, 38, 38, 444,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 446,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 447, 447, 447, 447, 447, 447, 447, 447,
+ 447, 447, 447, 447, 447, 447, 448, 38, 449, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 450, 196, 196, 196, 196, 196, 196, 196, 451, 38, 452, 453, 454, 454, 454, 454,
+ 454, 454, 454, 454, 454, 454, 454, 455, 38, 38, 38, 38, 38, 38, 38, 38,
+ 456, 456, 456, 457, 458, 459, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 462, 463, 464, 0, 465,
+ 11, 11, 466, 38, 38, 38, 38, 467, 0, 0, 468, 469, 38, 38, 38, 38,
+ 0, 0, 470, 0, 471, 472, 473, 0, 474, 475, 476, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0,
+ 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479,
+ 479, 479, 479, 479, 480, 481, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 482, 483, 38, 38, 38, 38, 38, 38, 484, 485, 486, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 487, 488, 38, 38, 38, 38, 38, 38, 38, 38,
+ 489, 489, 489, 489, 489, 489, 490, 38, 491, 491, 492, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 493, 0, 494, 38, 38, 268, 495, 38, 38, 38, 38, 38, 38,
+ 496, 497, 498, 499, 500, 501, 38, 502, 38, 38, 38, 38, 38, 38, 38, 38,
+ 0, 503, 0, 0, 467, 504, 505, 460, 0, 0, 0, 0, 0, 506, 38, 507,
+ 508, 509, 510, 511, 38, 38, 38, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, 467, 0, 0, 469, 514,
+ 503, 0, 515, 0, 516, 517, 38, 38, 0, 0, 0, 518, 0, 0, 519, 0,
+ 0, 0, 467, 520, 521, 522, 523, 38, 0, 0, 0, 0, 265, 0, 173, 524,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 525, 38, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 526, 189, 189, 189, 189, 189, 189,
+ 525, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 527, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 528,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 525, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 529, 38, 38, 38, 38, 38,
+ 530, 0, 0, 0, 38, 38, 38, 38, 7, 7, 7, 7, 7, 7, 7, 531,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38
+};
+
+static RE_UINT8 re_script_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 232,
- 233, 233, 233, 233, 7, 7, 7, 234, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
-};
-
-static RE_UINT8 re_bidi_class_stage_3[] = {
- 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 8, 9, 7, 8, 8, 10,
- 11, 0, 0, 0, 12, 13, 14, 15, 8, 8, 16, 8, 8, 8, 16, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 17,
- 18, 19, 18, 19, 20, 21, 19, 19, 22, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 23, 24, 25, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 24, 8, 26, 27, 8, 8, 8, 8, 8, 8,
- 8, 28, 29, 22, 22, 22, 22, 30, 31, 32, 32, 32, 32, 32, 32, 32,
- 33, 34, 22, 35, 36, 36, 36, 36, 36, 37, 22, 22, 38, 39, 40, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 42, 43, 44, 5, 45,
- 36, 36, 46, 36, 36, 36, 22, 22, 22, 35, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 41, 22, 40, 36, 32, 32, 32, 32, 32, 47, 48, 49,
- 32, 32, 50, 51, 52, 53, 32, 32, 32, 32, 32, 54, 36, 36, 32, 32,
- 32, 32, 32, 32, 36, 36, 36, 36, 36, 36, 37, 22, 55, 22, 22, 22,
- 56, 8, 8, 8, 8, 8, 8, 57, 58, 59, 58, 8, 60, 8, 8, 8,
- 61, 8, 8, 8, 8, 8, 8, 62, 63, 64, 8, 8, 60, 8, 65, 66,
- 67, 8, 8, 8, 8, 8, 8, 62, 68, 69, 61, 8, 8, 8, 70, 8,
- 71, 59, 8, 8, 60, 8, 72, 73, 61, 8, 8, 8, 8, 8, 8, 74,
- 63, 64, 75, 8, 60, 8, 8, 8, 76, 8, 8, 8, 8, 8, 8, 8,
- 77, 64, 8, 8, 8, 8, 9, 78, 79, 8, 8, 8, 8, 8, 8, 80,
- 81, 82, 83, 8, 60, 8, 8, 84, 8, 85, 8, 8, 60, 8, 8, 8,
- 27, 8, 8, 8, 8, 8, 8, 86, 63, 64, 8, 8, 60, 8, 8, 8,
- 8, 76, 87, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 88, 89,
- 90, 91, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 88, 92,
- 8, 93, 8, 8, 8, 8, 8, 8, 8, 8, 8, 27, 8, 8, 94, 95,
- 8, 8, 8, 8, 8, 8, 58, 91, 96, 97, 22, 58, 22, 22, 22, 92,
- 75, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 97, 98, 99,
- 8, 8, 8, 100, 77, 8, 63, 8, 101, 64, 8, 64, 8, 8, 8, 8,
- 8, 8, 8, 97, 8, 8, 8, 8, 8, 8, 19, 102, 8, 8, 8, 8,
- 7, 8, 8, 8, 8, 8, 8, 8, 103, 8, 8, 104, 8, 8, 8, 8,
- 8, 8, 105, 8, 8, 8, 105, 8, 8, 8, 60, 8, 8, 8, 60, 8,
- 8, 8, 8, 8, 8, 8, 106, 93, 75, 58, 107, 108, 8, 8, 19, 102,
- 19, 109, 8, 8, 8, 8, 8, 8, 83, 8, 8, 8, 8, 61, 8, 8,
- 8, 8, 8, 8, 110, 77, 76, 111, 112, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 113, 19, 19, 19, 19, 8, 8, 90, 114, 8, 8, 8, 8,
- 8, 8, 75, 91, 115, 92, 26, 116, 8, 8, 8, 8, 8, 8, 22, 91,
- 107, 8, 8, 8, 8, 8, 117, 118, 76, 8, 8, 8, 8, 26, 107, 8,
- 27, 8, 8, 8, 119, 120, 8, 8, 8, 8, 8, 8, 75, 121, 27, 8,
- 8, 8, 8, 8, 8, 122, 123, 8, 8, 8, 124, 22, 98, 59, 62, 27,
- 22, 22, 22, 22, 22, 22, 22, 125, 8, 8, 8, 8, 8, 8, 8, 126,
- 102, 20, 8, 20, 8, 20, 8, 127, 128, 129, 19, 19, 19, 130, 131, 19,
- 132, 19, 19, 133, 134, 135, 136, 137, 5, 137, 8, 8, 138, 138, 138, 138,
- 138, 138, 22, 22, 22, 22, 77, 8, 139, 102, 140, 141, 142, 143, 8, 144,
- 145, 146, 19, 19, 8, 8, 8, 8, 8, 147, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 148, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 149, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 19, 19, 150, 19, 19, 19, 19, 19, 19, 19, 19, 19, 84, 8, 8, 8,
- 19, 151, 8, 8, 19, 19, 19, 19, 19, 5, 5, 152, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 18, 19, 19, 19, 19, 19, 19, 19, 153, 19, 19,
- 19, 19, 19, 19, 19, 19, 154, 19, 19, 19, 149, 19, 19, 19, 19, 19,
- 8, 8, 8, 8, 20, 155, 27, 156, 8, 8, 8, 8, 8, 8, 8, 90,
- 8, 8, 8, 8, 22, 22, 22, 22, 19, 19, 8, 8, 8, 8, 8, 8,
- 19, 19, 19, 157, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 158, 8,
- 19, 19, 149, 8, 8, 8, 19, 158, 159, 19, 19, 19, 7, 119, 141, 20,
- 8, 8, 8, 160, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 161,
- 19, 19, 19, 19, 158, 8, 8, 8, 8, 8, 8, 127, 8, 8, 8, 8,
- 8, 8, 19, 19, 8, 8, 8, 162, 8, 8, 8, 8, 8, 8, 156, 19,
- 8, 163, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 151,
- 8, 8, 8, 113, 8, 8, 8, 16, 8, 8, 19, 19, 19, 19, 19, 19,
- 84, 8, 8, 8, 8, 8, 8, 8, 8, 20, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 90, 164, 165, 8, 8, 8, 80, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 27, 8, 19, 19, 19, 19, 102, 8, 8, 8,
- 8, 7, 8, 8, 8, 8, 8, 8, 166, 167, 8, 8, 83, 158, 8, 168,
- 8, 8, 8, 8, 8, 8, 163, 8, 85, 8, 8, 8, 22, 22, 27, 90,
- 8, 8, 8, 8, 80, 93, 8, 8, 90, 22, 27, 8, 8, 8, 8, 8,
- 56, 8, 8, 8, 8, 8, 169, 170, 8, 8, 8, 8, 64, 8, 8, 8,
- 8, 8, 8, 8, 8, 171, 99, 8, 167, 62, 8, 8, 8, 8, 8, 62,
- 8, 8, 8, 8, 8, 8, 172, 81, 61, 8, 8, 8, 8, 85, 75, 8,
- 8, 8, 8, 8, 64, 59, 8, 8, 8, 8, 8, 173, 32, 174, 32, 32,
- 32, 32, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 175,
- 36, 36, 0, 0, 0, 0, 36, 176, 22, 22, 19, 102, 22, 22, 19, 19,
- 19, 19, 177, 178, 179, 180, 36, 36, 36, 36, 36, 36, 36, 36, 36, 181,
- 182, 4, 5, 6, 7, 8, 8, 9, 7, 8, 8, 9, 149, 8, 8, 8,
- 8, 8, 8, 8, 183, 84, 0, 184, 185, 8, 8, 8, 8, 8, 8, 8,
- 19, 145, 19, 158, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 64,
- 8, 8, 8, 8, 186, 5, 5, 152, 8, 8, 8, 8, 8, 8, 80, 56,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 187, 32, 32, 32, 32,
- 188, 189, 32, 32, 32, 32, 32, 190, 32, 32, 32, 32, 191, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 192, 36, 36, 36, 36, 193, 36, 38, 194,
- 32, 32, 32, 32, 38, 38, 38, 195, 32, 32, 32, 32, 32, 32, 36, 36,
- 41, 22, 40, 36, 36, 36, 32, 32, 61, 8, 8, 8, 8, 8, 8, 22,
- 91, 8, 18, 19, 149, 8, 8, 90, 27, 8, 8, 8, 8, 8, 196, 67,
- 56, 8, 8, 8, 90, 197, 92, 8, 8, 8, 8, 8, 8, 8, 167, 8,
- 27, 8, 8, 8, 8, 8, 80, 91, 8, 63, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 90, 198, 75, 8, 8, 8, 90, 26, 56, 8, 8,
- 77, 8, 8, 8, 80, 92, 92, 8, 8, 8, 8, 8, 8, 8, 8, 22,
- 87, 8, 8, 75, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 26, 199,
- 200, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 119, 106,
- 77, 8, 8, 85, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 26, 201,
- 77, 8, 8, 8, 19, 145, 8, 8, 8, 8, 8, 8, 8, 202, 203, 8,
- 8, 8, 8, 97, 204, 107, 8, 8, 8, 8, 8, 8, 8, 90, 22, 67,
- 8, 8, 122, 60, 77, 8, 8, 8, 171, 67, 8, 8, 8, 8, 26, 205,
- 90, 8, 171, 111, 8, 8, 8, 8, 8, 73, 91, 27, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 91, 93, 8, 8, 73, 22, 22, 73, 206, 8,
- 8, 8, 8, 8, 8, 8, 171, 207, 203, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 121, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 86, 8,
- 8, 8, 20, 208, 209, 19, 102, 8, 8, 8, 8, 8, 8, 8, 92, 8,
- 8, 8, 8, 8, 8, 8, 91, 8, 8, 90, 8, 8, 8, 8, 8, 8,
- 8, 90, 56, 8, 8, 8, 8, 8, 8, 8, 8, 8, 210, 8, 8, 8,
- 8, 8, 8, 83, 211, 8, 8, 8, 8, 8, 8, 8, 90, 27, 212, 213,
- 214, 107, 8, 8, 8, 119, 8, 8, 215, 8, 8, 8, 8, 8, 8, 8,
- 19, 19, 84, 8, 8, 8, 8, 8, 8, 8, 8, 161, 8, 8, 8, 8,
- 8, 8, 216, 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8,
- 8, 185, 8, 8, 8, 8, 8, 8, 161, 217, 5, 5, 5, 5, 5, 5,
- 22, 22, 22, 22, 22, 22, 91, 26, 22, 22, 22, 22, 22, 92, 64, 8,
- 62, 8, 8, 26, 58, 22, 8, 8, 91, 22, 22, 218, 219, 56, 8, 8,
- 8, 8, 8, 8, 8, 122, 8, 220, 32, 32, 221, 32, 32, 32, 32, 32,
- 189, 222, 32, 32, 32, 32, 32, 32, 36, 36, 32, 32, 32, 32, 32, 32,
- 36, 36, 36, 36, 36, 36, 223, 36, 19, 19, 19, 19, 19, 158, 19, 19,
- 19, 19, 158, 8, 19, 84, 156, 19, 156, 19, 156, 19, 19, 19, 149, 8,
- 5, 224, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 225, 8, 8,
- 8, 8, 8, 8, 149, 8, 8, 8, 19, 19, 149, 8, 19, 145, 19, 151,
- 19, 19, 19, 7, 19, 158, 8, 8, 19, 158, 19, 19, 19, 19, 19, 19,
- 19, 8, 19, 102, 19, 19, 19, 19, 19, 8, 19, 19, 19, 149, 8, 8,
- 19, 153, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 139, 18,
- 19, 19, 19, 19, 226, 227, 19, 19, 19, 226, 19, 19, 19, 19, 19, 19,
- 19, 19, 158, 8, 19, 149, 158, 151, 151, 8, 149, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 228, 0, 0, 0, 0, 0, 0, 0, 0,
- 22, 22, 22, 22, 22, 22, 0, 0,
-};
-
-static RE_UINT8 re_bidi_class_stage_4[] = {
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 8, 7, 8, 9, 7, 11, 11,
- 11, 11, 11, 11, 7, 7, 7, 8, 9, 10, 10, 4, 4, 4, 10, 10,
- 10, 10, 10, 3, 6, 3, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 6, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
- 0, 0, 0, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 7, 11, 11,
- 6, 10, 4, 4, 4, 4, 10, 10, 10, 10, 0, 10, 10, 11, 10, 10,
- 4, 4, 2, 2, 10, 0, 10, 10, 10, 2, 0, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 0, 0, 0, 0, 0,
- 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10,
- 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 10, 10, 0, 10,
- 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 10, 0, 0, 10, 10, 4, 1, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 1, 12, 1, 12, 12, 1, 12, 12, 1, 12,
- 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 10, 10,
- 13, 4, 4, 13, 6, 13, 10, 10, 12, 12, 12, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 13, 13, 13,
- 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12,
- 12, 12, 12, 12, 12, 5, 10, 12, 12, 12, 12, 12, 12, 13, 13, 12,
- 12, 10, 12, 12, 12, 12, 13, 13, 2, 2, 13, 13, 13, 13, 13, 13,
- 13, 12, 13, 13, 13, 13, 13, 13, 1, 1, 1, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 1, 1, 10, 10, 10, 10, 1, 1, 1, 12, 1, 1,
- 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 1, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 1, 12, 12, 12, 1, 12, 12, 12, 12, 12, 1, 1,
- 1, 12, 12, 12, 1, 1, 1, 1, 12, 12, 5, 12, 12, 12, 12, 12,
- 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0,
- 0, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 12, 0, 0,
- 0, 0, 12, 12, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 12, 12, 12, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 12, 0, 0, 12, 12, 0, 0, 0, 0, 0,
- 0, 12, 12, 0, 0, 0, 0, 12, 12, 0, 0, 12, 12, 12, 0, 0,
- 12, 12, 0, 0, 0, 12, 0, 0, 0, 12, 12, 12, 12, 12, 0, 12,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12,
- 0, 0, 0, 0, 12, 0, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 10, 4, 10, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0, 0, 12, 12,
- 12, 0, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0,
- 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 12, 12, 0, 0,
- 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12, 0, 12, 0,
- 0, 12, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 0,
- 12, 12, 12, 12, 12, 0, 0, 0, 12, 12, 12, 12, 12, 12, 0, 0,
- 0, 0, 0, 0, 0, 12, 0, 12, 0, 12, 10, 10, 10, 10, 0, 0,
- 12, 12, 12, 12, 12, 0, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12,
- 12, 0, 12, 12, 12, 12, 12, 12, 0, 12, 12, 0, 0, 12, 12, 0,
- 12, 12, 0, 0, 0, 0, 12, 12, 0, 0, 12, 0, 0, 12, 12, 0,
- 10, 10, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0,
- 0, 0, 0, 0, 12, 12, 0, 12, 12, 12, 12, 12, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 12, 0, 0, 10, 10, 10, 12, 12, 12, 11, 0,
- 12, 12, 12, 0, 0, 0, 0, 12, 0, 12, 12, 12, 0, 0, 0, 0,
- 10, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10,
- 12, 0, 0, 12, 0, 0, 0, 0, 12, 0, 12, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 0, 0, 12, 0, 0, 0, 0, 12, 0, 12, 12,
- 12, 12, 12, 0, 12, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, 0,
- 12, 12, 0, 12, 12, 12, 0, 0, 12, 12, 0, 0, 0, 12, 0, 12,
- 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 12, 12,
- 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12,
- 0, 0, 0, 0, 0, 10, 0, 10, 0, 0, 0, 0, 0, 10, 10, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 0, 1,
- 9, 7, 16, 17, 18, 14, 15, 6, 4, 4, 4, 4, 4, 10, 10, 10,
- 10, 10, 10, 10, 6, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
- 11, 11, 11, 11, 11, 11, 19, 20, 21, 22, 11, 11, 11, 11, 11, 11,
- 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 10, 10, 10, 0,
- 4, 4, 4, 4, 4, 4, 4, 4, 10, 10, 0, 10, 10, 10, 10, 0,
- 0, 0, 0, 0, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10,
- 10, 10, 10, 10, 0, 10, 0, 10, 0, 10, 0, 0, 0, 0, 4, 0,
- 0, 0, 10, 10, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0,
- 0, 0, 10, 10, 10, 10, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0,
- 10, 10, 3, 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
- 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 0, 0, 0, 0, 10, 10, 10, 10, 0, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 12,
- 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 0, 0, 9, 10, 10, 10, 10, 0, 0, 0,
- 0, 12, 12, 10, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 10,
- 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 10, 10,
- 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 0, 12, 0, 0, 0, 0,
- 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 12,
- 12, 12, 0, 0, 12, 12, 0, 0, 0, 12, 12, 12, 12, 12, 12, 0,
- 12, 0, 12, 12, 12, 0, 0, 12, 0, 0, 0, 0, 0, 1, 12, 1,
- 1, 3, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 10, 10,
- 13, 13, 13, 13, 13, 10, 13, 13, 6, 10, 6, 0, 10, 6, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 4, 10, 10, 3, 3, 10, 10, 10, 0,
- 10, 4, 4, 10, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 11,
- 0, 10, 10, 4, 4, 4, 10, 10, 4, 4, 10, 10, 10, 4, 4, 0,
- 11, 10, 10, 10, 10, 10, 11, 11, 0, 10, 0, 0, 0, 0, 0, 0,
- 12, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 10,
- 1, 12, 12, 12, 1, 12, 12, 1, 1, 1, 1, 1, 12, 12, 12, 12,
- 12, 12, 12, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 12, 12, 1,
- 1, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 12, 12, 12, 12,
- 5, 5, 13, 13, 13, 13, 13, 13, 5, 5, 5, 5, 5, 5, 5, 1,
- 0, 0, 0, 12, 12, 12, 12, 0, 12, 12, 12, 12, 0, 12, 12, 12,
- 12, 12, 0, 0, 12, 0, 12, 12, 12, 0, 12, 0, 0, 0, 0, 12,
- 12, 0, 12, 12, 0, 0, 0, 0, 12, 12, 12, 0, 0, 12, 0, 12,
- 0, 0, 0, 12, 0, 12, 0, 0, 12, 12, 12, 12, 12, 12, 0, 12,
- 0, 0, 12, 12, 12, 12, 0, 12, 12, 0, 0, 12, 12, 12, 12, 0,
- 12, 0, 12, 12, 0, 12, 12, 0, 0, 0, 12, 0, 12, 12, 0, 12,
- 10, 10, 10, 10, 10, 4, 4, 4, 4, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 10, 0, 0, 0, 0, 0, 11, 11, 11, 11, 0, 0, 0, 0,
- 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
- 12, 12, 12, 0, 0, 12, 12, 12, 10, 10, 12, 12, 12, 10, 0, 0,
- 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 12, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 0, 12, 12,
- 0, 0, 0, 0, 0, 0, 0, 4, 12, 12, 12, 12, 12, 12, 12, 1,
- 12, 12, 12, 1, 1, 1, 1, 1, 10, 10, 13, 13, 13, 13, 13, 13,
- 2, 2, 2, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0,
- 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 10, 10,
- 0, 0, 0, 0, 0, 0, 11, 11,
-};
-
-/* Bidi_Class: 5072 bytes. */
-
-RE_UINT32 re_get_bidi_class(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_bidi_class_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_bidi_class_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_bidi_class_stage_3[pos + f] << 3;
- value = re_bidi_class_stage_4[pos + code];
-
- return value;
-}
-
-/* Canonical_Combining_Class. */
-
-static RE_UINT8 re_canonical_combining_class_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 6,
- 7, 8, 4, 4, 4, 4, 9, 4, 4, 4, 4, 10, 4, 11, 12, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_canonical_combining_class_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
- 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, 9, 10, 0, 11,
- 12, 13, 0, 14, 15, 16, 15, 17, 15, 18, 15, 18, 15, 18, 0, 18,
- 0, 19, 15, 18, 20, 18, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34,
- 0, 0, 35, 0, 36, 0, 0, 0, 37, 38, 39, 0, 40, 41, 42, 43,
- 44, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 1, 5, 5, 5, 0, 0, 5, 5, 5, 5, 1, 5,
+ 0, 0, 0, 0, 5, 1, 5, 1, 5, 5, 5, 0, 5, 0, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 10, 0, 10, 1,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17,
+ 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17,
+ 17, 0, 17, 0, 0, 0, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 0, 17,
+ 17, 17, 17, 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18,
+ 18, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
+ 18, 0, 18, 18, 0, 18, 18, 0, 18, 18, 0, 0, 18, 0, 18, 18,
+ 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0,
+ 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19,
+ 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19,
+ 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19,
+ 0, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 20,
+ 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20,
+ 20, 0, 20, 20, 0, 20, 20, 20, 20, 20, 0, 0, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 0, 0, 20, 20, 0, 0, 20, 20, 20, 0, 0,
+ 0, 0, 0, 0, 0, 20, 20, 20, 0, 0, 0, 0, 20, 20, 0, 20,
+ 20, 20, 20, 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 21, 21, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 0, 21, 21, 21, 21, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
+ 0, 0, 0, 21, 21, 0, 0, 0, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 21, 21,
+ 21, 21, 21, 0, 0, 0, 21, 21, 21, 0, 21, 21, 21, 21, 0, 0,
+ 21, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22,
+ 22, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22,
+ 22, 22, 22, 22, 22, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 0, 22, 22, 22, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23,
+ 23, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 0, 0, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 0, 23, 23, 23, 0, 23, 23, 23, 23, 0, 0,
+ 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 23, 0,
+ 23, 23, 23, 23, 0, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 24, 24,
+ 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 0, 24, 24, 24, 0, 24, 24, 24, 24, 24, 24,
+ 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 0, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 0, 0, 0, 0, 25,
+ 25, 25, 25, 25, 25, 0, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 1,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+ 0, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 0,
+ 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 1, 1, 1, 1, 28, 28, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 1, 30, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 0, 0, 33, 33, 33, 33, 33, 33, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 1, 1, 1, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 37, 37,
+ 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40,
+ 40, 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 42, 42, 1, 1, 42, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0,
+ 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 45, 45,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 30, 30, 30,
+ 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 4, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 4, 4, 1, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
+ 5, 5, 2, 2, 2, 2, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55,
+ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 56, 1, 56, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 4, 4, 4, 4, 31, 31,
+ 1, 1, 1, 1, 1, 1, 1, 1, 56, 56, 56, 56, 1, 1, 1, 1,
+ 0, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 0, 0, 4, 4, 1, 1, 57, 57, 57,
+ 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 58, 58, 58,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 1, 1, 1, 1, 1, 1,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 66,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 1,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 0, 68, 68,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 0,
+ 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 55, 0, 0, 0, 0,
- 56, 0, 0, 57, 58, 59, 60, 61, 0, 0, 62, 63, 0, 0, 0, 64,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 31, 31, 31,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 0, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 0, 0, 0,
- 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0,
- 0, 74, 75, 0, 76, 60, 0, 77, 78, 0, 0, 79, 80, 81, 0, 0,
- 0, 82, 0, 83, 0, 0, 49, 84, 49, 0, 85, 0, 86, 0, 0, 0,
- 75, 0, 0, 0, 0, 0, 0, 87, 88, 89, 90, 0, 0, 0, 0, 0,
- 49, 0, 0, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 0, 0,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 0, 78,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 87, 87, 0, 0, 87, 0, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 0, 87, 87, 0, 0, 0, 87, 0, 0, 87,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 0, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 0, 91, 91, 0, 0, 0, 0, 0, 91, 91, 91, 91, 91,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, 93,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 96, 96, 96, 96, 0, 96, 96, 0, 0, 0, 0, 0, 96, 96, 96, 96,
+ 96, 96, 96, 96, 0, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 0, 0, 96, 96, 96, 0, 0, 0, 0, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100, 100, 100, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, 101, 101,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 103, 103, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 0, 0,
+ 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0, 0,
+ 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0,
+ 119, 119, 119, 119, 119, 119, 119, 0, 119, 0, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0, 0,
+ 121, 121, 121, 121, 0, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 121,
+ 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 121, 121, 121, 121, 121, 121,
+ 121, 0, 121, 121, 0, 121, 121, 121, 121, 121, 0, 4, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 0, 0, 121, 121, 0, 0, 121, 121, 121, 0, 0,
+ 121, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 121, 121, 121,
+ 121, 121, 121, 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0,
+ 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122,
+ 122, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 0, 0, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 130, 0, 0, 130, 130, 130, 130,
+ 130, 130, 130, 130, 0, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 130, 130, 0, 0, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 0, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 0, 137, 137, 0, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 137, 0, 137, 137, 0, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 0, 138, 138, 0, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0,
+ 138, 138, 0, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0,
+ 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 0,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 143, 143,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0,
+ 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 145, 145, 145, 145, 145,
+ 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 148, 149, 1, 1, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 94, 0, 0, 0,
+ 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 58, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 151, 151, 151, 151,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152,
+ 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54,
+ 54, 54, 0, 54, 54, 0, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0, 0, 153, 153,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 154,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 0, 0, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0, 156, 156,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0, 10, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 10, 0, 10, 0, 10, 0, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 96, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 57, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_canonical_combining_class_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 1, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 21, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 25, 0,
- 0, 0, 26, 27, 28, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 32,
- 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 35, 36,
- 0, 0, 26, 37, 38, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0,
- 0, 0, 41, 1, 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 46,
- 0, 47, 48, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 49,
- 0, 47, 0, 0, 0, 0, 0, 0, 0, 47, 50, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 57, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 60, 61,
- 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 65, 0, 36, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0,
- 0, 0, 52, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 72, 0, 0, 0, 0,
- 0, 0, 0, 0, 73, 0, 66, 74, 0, 0, 0, 0, 0, 0, 75, 76,
- 0, 0, 0, 0, 0, 0, 46, 0, 67, 0, 0, 0, 0, 77, 78, 0,
- 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 80, 0, 79, 0,
- 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 1, 1, 1, 90, 91, 0, 0, 92, 93, 94, 95, 96, 0,
- 0, 0, 0, 0, 0, 71, 86, 0, 0, 0, 0, 0, 0, 0, 0, 97,
- 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 98, 0, 0,
- 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 100, 101,
- 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
- 102, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 1, 1, 86, 0,
- 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 105, 0, 73, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 106, 107, 108, 0, 0, 0, 0, 0, 102, 0,
- 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0,
- 0, 0, 0, 0, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,
- 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 112,
- 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0,
- 0, 0, 0, 0, 100, 0, 0, 0, 116, 117, 72, 0, 0, 0, 0, 0,
- 102, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 118,
- 112, 0, 0, 0, 0, 0, 51, 0, 73, 119, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 121, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 122, 0, 47, 0, 0, 26, 123, 123, 0,
- 124, 0, 0, 49, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0,
- 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0,
- 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 67, 0, 97, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0,
- 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0,
- 0, 0, 0, 0, 133, 134, 135, 136, 137, 138, 0, 0, 0, 139, 0, 0,
- 140, 0, 0, 0, 0, 0, 0, 0, 131, 1, 1, 141, 142, 112, 0, 0,
- 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0,
- 100, 144, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_canonical_combining_class_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 51, 45, 45, 45, 45, 51, 43, 45, 45, 45, 45,
- 45, 41, 41, 45, 45, 45, 45, 41, 41, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 1, 1, 1, 1, 1, 45, 45, 45, 45, 50, 50, 50,
- 50, 50, 50, 50, 50, 54, 50, 45, 45, 45, 50, 50, 50, 45, 45, 0,
- 50, 50, 50, 45, 45, 45, 45, 50, 51, 45, 45, 50, 52, 53, 53, 52,
- 53, 53, 52, 50, 50, 50, 50, 50, 0, 0, 0, 50, 50, 50, 50, 50,
- 0, 45, 50, 50, 50, 50, 45, 50, 50, 50, 46, 45, 50, 50, 50, 50,
- 50, 50, 45, 45, 45, 45, 45, 45, 50, 50, 45, 50, 50, 46, 49, 50,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15, 16, 17, 0, 18,
- 0, 19, 20, 0, 50, 45, 0, 13, 25, 26, 27, 0, 0, 0, 0, 0,
- 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, 50, 50, 45, 45, 50,
- 50, 50, 50, 50, 45, 50, 50, 45, 30, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 0, 50,
- 50, 50, 50, 45, 50, 0, 0, 50, 50, 0, 45, 50, 50, 45, 0, 0,
- 0, 31, 0, 0, 0, 0, 0, 0, 50, 45, 50, 50, 45, 50, 50, 45,
- 45, 45, 50, 45, 45, 50, 45, 50, 50, 50, 45, 50, 45, 50, 45, 50,
- 45, 50, 50, 0, 0, 0, 0, 0, 50, 50, 45, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 45, 0, 0, 50, 50, 0, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 0, 50, 50, 50, 0, 50, 50, 50, 50, 50, 0, 0,
- 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 45, 50, 50, 50, 50,
- 50, 50, 0, 45, 50, 50, 45, 50, 50, 45, 50, 50, 50, 45, 45, 45,
- 22, 23, 24, 50, 50, 50, 45, 50, 50, 45, 45, 50, 50, 50, 50, 50,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 50, 45, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 4, 4, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 34, 34, 4, 0, 0, 0, 0, 0,
- 35, 35, 35, 35, 0, 0, 0, 0, 36, 36, 4, 0, 0, 0, 0, 0,
- 37, 37, 37, 37, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 45, 0, 45, 0, 43, 0, 0, 0, 0, 0, 0,
- 0, 38, 39, 0, 40, 0, 0, 0, 0, 0, 39, 39, 39, 39, 0, 0,
- 39, 0, 50, 50, 4, 0, 50, 50, 0, 0, 0, 0, 0, 0, 45, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 50, 50, 0, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 46, 50, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
- 45, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 50, 50, 50, 50, 50, 0, 0, 45, 50, 50, 50, 50, 50, 45, 45, 45,
- 45, 45, 45, 50, 50, 45, 0, 0, 0, 0, 0, 50, 45, 50, 50, 50,
- 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 50, 50, 50, 0, 1, 45, 45, 45,
- 45, 45, 50, 50, 45, 45, 45, 45, 50, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
- 50, 50, 0, 0, 0, 0, 0, 0, 50, 50, 45, 50, 50, 50, 50, 50,
- 50, 50, 45, 50, 50, 53, 42, 45, 41, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 51, 49, 49, 45, 0, 50, 52, 45, 50, 45,
- 50, 50, 1, 1, 50, 50, 50, 50, 1, 1, 1, 50, 50, 0, 0, 0,
- 0, 50, 0, 0, 0, 1, 1, 50, 45, 50, 1, 1, 45, 45, 45, 45,
- 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 44, 49, 51, 46, 47, 47, 0, 3, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 45, 45, 45, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 50, 0, 50, 50, 45, 0, 0, 50, 50, 0, 0, 0, 0, 0, 50, 50,
- 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0,
- 50, 50, 50, 50, 50, 50, 50, 45, 45, 45, 45, 45, 45, 45, 50, 50,
- 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 50,
- 50, 1, 45, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 50, 45, 0,
- 0, 0, 0, 0, 0, 0, 45, 45, 50, 50, 50, 45, 50, 45, 45, 45,
- 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 2, 0, 0, 2, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 2, 0, 0, 0, 50, 50, 50, 50, 50, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 4, 2, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 43, 43, 1,
- 1, 1, 0, 0, 0, 48, 43, 43, 43, 43, 43, 0, 0, 0, 0, 0,
- 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 50, 50, 50,
- 50, 50, 45, 45, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0,
- 0, 0, 50, 50, 50, 0, 0, 0, 50, 0, 0, 50, 50, 50, 50, 50,
- 50, 50, 0, 50, 50, 0, 50, 50, 45, 45, 45, 45, 45, 45, 45, 0,
- 50, 50, 2, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_script(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-/* Canonical_Combining_Class: 3088 bytes. */
-
-RE_UINT32 re_get_canonical_combining_class(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_canonical_combining_class_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_canonical_combining_class_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_canonical_combining_class_stage_3[pos + f] << 3;
- value = re_canonical_combining_class_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-/* Decomposition_Type. */
+ v = re_script_table_1[field_2];
+ v = re_script_table_2[(v << 5) | field_1];
+ v = re_script_table_3[(v << 5) | field_0];
-static RE_UINT8 re_decomposition_type_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 8, 9, 10, 10, 10, 10, 11, 7, 7, 7, 7, 12,
- 7, 7, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 7, 7, 15, 16, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 17,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
+ return v;
+}
-static RE_UINT8 re_decomposition_type_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
- 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
- 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0,
- 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0,
- 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 42, 0,
- 0, 43, 0, 0, 0, 43, 44, 0, 45, 0, 46, 47, 48, 49, 0, 0,
- 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* Script_Extensions. */
+static RE_UINT8 script_extensions_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 21, 21, 34, 35, 21, 21,
+ 21, 36, 21, 21, 21, 21, 21, 21, 21, 21, 37, 38, 39, 39, 39, 39,
+ 39, 40, 41, 42, 21, 21, 21, 21, 21, 21, 21, 21, 43, 21, 21, 44,
+ 21, 21, 21, 21, 45, 46, 47, 21, 48, 21, 49, 50, 51, 52, 53, 21,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 54, 13, 13, 13, 55, 56, 13,
+ 13, 13, 13, 57, 13, 13, 13, 13, 13, 13, 58, 21, 21, 21, 59, 21,
+ 13, 13, 13, 13, 60, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 61, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21
+};
+static RE_UINT16 script_extensions_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 5, 0, 6, 7, 7, 8, 9, 10, 11, 12, 13,
+ 14, 14, 14, 14, 15, 14, 14, 14, 14, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 24, 24, 27, 24, 28, 29, 30, 24, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 39, 85, 86, 87, 39, 88, 88, 89, 90, 91, 92, 93, 39,
+ 94, 94, 95, 94, 94, 96, 97, 98, 99, 99, 99, 99, 99, 99, 99, 99,
+ 100, 100, 101, 100, 102, 103, 104, 100, 105, 100, 106, 107, 108, 109, 109, 110,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 112, 113, 113, 114, 115, 116, 117, 118, 119, 119, 120, 121,
+ 122, 123, 123, 124, 123, 125, 111, 126, 127, 128, 129, 130, 131, 132, 133, 119,
+ 134, 135, 136, 137, 138, 139, 140, 39, 141, 141, 142, 143, 144, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 4, 155, 156, 157, 4, 158, 159, 160,
+ 4, 4, 4, 4, 4, 4, 4, 4, 161, 12, 162, 163, 12, 164, 165, 166,
+ 167, 168, 0, 169, 170, 0, 171, 172, 0, 173, 174, 4, 175, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 176, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 178, 178, 178, 178, 178, 178, 178, 178, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 180, 0, 0, 0,
+ 181, 182, 183, 4, 184, 184, 184, 185, 96, 186, 187, 188, 189, 190, 190, 14,
+ 0, 0, 191, 39, 192, 193, 193, 194, 193, 193, 193, 193, 193, 193, 195, 196,
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 99, 99, 207, 208, 209, 210,
+ 211, 209, 212, 213, 209, 214, 215, 216, 203, 203, 217, 218, 0, 0, 0, 219,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 0, 0,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 220,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 222, 221, 223, 224, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 226, 14, 227, 14, 228, 228, 229, 230, 231, 4, 4, 232, 4, 233, 234,
+ 235, 236, 237, 238, 239, 239, 240, 241, 242, 243, 244, 245, 246, 246, 247, 248,
+ 249, 250, 251, 94, 252, 252, 253, 254, 255, 256, 257, 258, 109, 109, 259, 260,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 261, 262, 263,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 264, 193, 193, 265, 39, 266, 267, 268, 24, 24, 24, 269, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 270, 271, 24, 272, 24, 273, 274,
+ 275, 276, 277, 278, 24, 24, 24, 279, 280, 1, 1, 281, 282, 211, 283, 284,
+ 285, 286, 287, 39, 288, 288, 288, 289, 290, 291, 12, 12, 292, 293, 294, 295,
+ 39, 39, 39, 39, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 39,
+ 307, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 39, 39, 39, 39,
+ 318, 318, 318, 318, 318, 318, 318, 318, 318, 319, 320, 321, 39, 39, 39, 39,
+ 322, 323, 324, 325, 326, 327, 39, 328, 329, 330, 39, 39, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 39, 340, 341, 342, 343, 344, 345, 346, 347, 39, 39,
+ 348, 348, 349, 39, 350, 351, 350, 352, 353, 354, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 355, 356, 357, 39, 39, 358, 359, 360, 39, 39, 361, 362, 363,
+ 364, 364, 365, 366, 367, 367, 368, 369, 370, 371, 372, 373, 374, 374, 374, 375,
+ 376, 377, 39, 39, 378, 379, 380, 381, 382, 383, 384, 385, 39, 39, 39, 39,
+ 386, 386, 387, 388, 389, 389, 390, 39, 39, 39, 39, 39, 391, 392, 393, 39,
+ 394, 394, 395, 396, 397, 398, 399, 39, 400, 401, 39, 39, 39, 39, 39, 39,
+ 402, 403, 39, 39, 39, 404, 404, 405, 406, 407, 408, 39, 39, 409, 410, 411,
+ 412, 412, 413, 414, 414, 415, 416, 417, 39, 39, 39, 39, 39, 39, 39, 39,
+ 418, 419, 420, 421, 422, 423, 39, 39, 424, 425, 426, 427, 428, 429, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 430, 39, 39, 39, 39, 39, 431, 432, 433,
+ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 435, 39, 39, 39,
+ 434, 434, 434, 436, 434, 434, 434, 434, 434, 434, 437, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 439, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440,
+ 440, 440, 441, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 442, 443, 444, 39, 39, 445, 446, 447, 447, 448, 449, 450, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 451, 451, 452, 39, 39, 39, 453, 453, 454, 453, 455, 39, 39, 456,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 458,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 459, 459, 459, 459, 459, 459, 459, 459,
+ 459, 459, 459, 459, 459, 459, 460, 39, 461, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 462, 200, 200, 200, 200, 200, 200, 200, 463, 39, 464, 465, 466, 466, 466, 466,
+ 466, 466, 466, 466, 466, 466, 466, 467, 39, 39, 39, 39, 39, 39, 39, 39,
+ 468, 468, 468, 469, 470, 471, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 474, 475, 476, 0, 477,
+ 12, 12, 478, 39, 39, 39, 39, 479, 0, 0, 480, 481, 39, 39, 39, 39,
+ 0, 0, 482, 0, 483, 484, 485, 0, 486, 487, 488, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0,
+ 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+ 491, 491, 491, 491, 492, 493, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 494, 495, 39, 39, 39, 39, 39, 39, 496, 497, 498, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 499, 500, 39, 39, 39, 39, 39, 39, 39, 39,
+ 501, 501, 501, 501, 501, 501, 502, 39, 503, 503, 504, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 505, 0, 506, 39, 39, 280, 507, 39, 39, 39, 39, 39, 39,
+ 508, 509, 510, 511, 512, 513, 39, 514, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 515, 0, 0, 479, 516, 517, 472, 0, 0, 0, 0, 0, 518, 39, 519,
+ 520, 521, 522, 523, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 524, 525, 0, 0, 0, 479, 0, 0, 526, 527,
+ 515, 0, 528, 0, 529, 530, 39, 39, 0, 0, 0, 531, 0, 0, 532, 0,
+ 0, 0, 479, 533, 534, 535, 536, 39, 0, 0, 0, 0, 537, 0, 177, 538,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 539, 39, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 540, 193, 193, 193, 193, 193, 193,
+ 539, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 541, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 542,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 539, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 543, 39, 39, 39, 39, 39,
+ 544, 0, 0, 0, 39, 39, 39, 39, 7, 7, 7, 7, 7, 7, 7, 545,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39
+};
+static RE_UINT8 script_extensions_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 158, 4, 4, 158, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 5, 5, 5, 5, 1, 5, 5, 5, 0, 0, 5, 5, 5, 5, 1, 5,
+ 0, 0, 0, 0, 5, 1, 5, 1, 5, 5, 5, 0, 5, 0, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 160, 161, 162, 162, 161, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 1, 10, 10, 10, 10, 10, 10, 163, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 163, 164, 0, 10, 163,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 165, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 10, 10, 10, 10, 10, 10,
+ 166, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 168, 10, 10, 10, 10, 10, 10, 10, 10, 1, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 169, 170, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 171, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17,
+ 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17,
+ 17, 0, 17, 0, 0, 0, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 0, 17,
+ 17, 17, 17, 17, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18,
+ 18, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
+ 18, 0, 18, 18, 0, 18, 18, 0, 18, 18, 0, 0, 18, 0, 18, 18,
+ 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0,
+ 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19,
+ 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19,
+ 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 19, 19, 19, 0, 0, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19,
+ 0, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 20,
+ 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20,
+ 20, 0, 20, 20, 0, 20, 20, 20, 20, 20, 0, 0, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 0, 0, 20, 20, 0, 0, 20, 20, 20, 0, 0,
+ 0, 0, 0, 0, 0, 20, 20, 20, 0, 0, 0, 0, 20, 20, 0, 20,
+ 20, 20, 20, 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 21, 21, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 0, 21, 21, 21, 21, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
+ 0, 0, 0, 21, 21, 0, 0, 0, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 21, 21,
+ 21, 21, 21, 0, 0, 0, 21, 21, 21, 0, 21, 21, 21, 21, 0, 0,
+ 21, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22,
+ 22, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22,
+ 22, 22, 22, 22, 22, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 0, 22, 22, 22, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23,
+ 23, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 0, 0, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 0, 23, 23, 23, 0, 23, 23, 23, 23, 0, 0,
+ 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 23, 0,
+ 23, 23, 23, 23, 0, 0, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 24, 24,
+ 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 0, 24, 24, 24, 0, 24, 24, 24, 24, 24, 24,
+ 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 0, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 0, 0, 0, 0, 25,
+ 25, 25, 25, 25, 25, 0, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 1,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+ 0, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 0,
+ 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 1, 1, 1, 1, 28, 28, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 180, 30, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 0, 0, 33, 33, 33, 33, 33, 33, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 1, 1, 1, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 37, 37,
+ 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 181, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40,
+ 40, 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 42, 42, 182, 182, 42, 182, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0,
+ 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 45, 45,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 30, 30, 30,
+ 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 183, 184, 183, 185, 184, 186, 186, 187, 186, 187, 188, 184, 187, 187, 184, 184,
+ 187, 186, 184, 184, 184, 184, 184, 184, 184, 189, 186, 184, 184, 186, 184, 184,
+ 184, 184, 190, 185, 191, 186, 186, 192, 185, 185, 193, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
+ 5, 5, 2, 2, 2, 2, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
+ 158, 158, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 194, 4, 0, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 195,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
- 60, 60, 60, 60, 61, 60, 60, 62, 63, 60, 64, 65, 60, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 0, 0, 75, 76, 77, 78, 79, 80, 81, 0,
- 82, 83, 84, 85, 86, 87, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 78, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55,
+ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 1, 1, 1, 161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 197, 197, 198, 1, 56, 199, 56, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 1, 198, 197, 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198,
+ 1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 200, 200, 200, 200, 31, 31,
+ 198, 201, 201, 201, 201, 201, 1, 198, 56, 56, 56, 56, 202, 202, 199, 199,
+ 0, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 0, 0, 201, 201, 201, 201, 57, 57, 57,
+ 201, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 197, 201, 58, 58, 58,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 199, 199, 199, 199, 199, 199, 199, 199, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 1,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 1, 1, 1,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 199,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 94, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 0, 0, 43, 78, 78, 78, 78, 78, 78, 100, 0,
- 101, 102, 103, 104, 105, 103, 104, 106, 0, 107, 78, 78, 108, 0, 0, 0,
- 109, 78, 110, 111, 92, 92, 112, 113, 114, 114, 115, 116, 114, 114, 114, 117,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 161,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 203, 203, 203, 203, 203, 203, 203, 203, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0,
+ 204, 204, 204, 205, 205, 205, 206, 206, 206, 206, 0, 0, 0, 0, 0, 0,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 186, 16, 207, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 208, 66,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 209,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 0, 68, 68,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 0,
+ 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 210, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 210, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 198, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 197, 197, 197, 197, 197, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 201, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 201, 201,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 31, 31, 31,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 0, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0, 0, 0, 0,
+ 211, 211, 211, 0, 0, 0, 0, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 0, 0, 0, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 0, 0,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 0, 0, 0, 0,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 0, 78,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 87, 87, 0, 0, 87, 0, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 0, 87, 87, 0, 0, 0, 87, 0, 0, 87,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 0, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 0, 91, 91, 0, 0, 0, 0, 0, 91, 91, 91, 91, 91,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, 93,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 96, 96, 96, 96, 0, 96, 96, 0, 0, 0, 0, 0, 96, 96, 96, 96,
+ 96, 96, 96, 96, 0, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 0, 0, 96, 96, 96, 0, 0, 0, 0, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100, 100, 100, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, 101, 101,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 103, 103, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 0, 0,
+ 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0, 0,
+ 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0,
+ 119, 119, 119, 119, 119, 119, 119, 0, 119, 0, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0, 0,
+ 121, 177, 121, 177, 0, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 121,
+ 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 121, 121, 121, 121, 121, 121,
+ 121, 0, 121, 121, 0, 121, 121, 121, 121, 121, 0, 177, 177, 121, 121, 121,
+ 121, 121, 121, 121, 121, 0, 0, 121, 121, 0, 0, 121, 121, 121, 0, 0,
+ 121, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 121, 121, 121,
+ 121, 121, 121, 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0,
+ 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122,
+ 122, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 0, 0, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 130, 0, 0, 130, 130, 130, 130,
+ 130, 130, 130, 130, 0, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 130, 130, 0, 0, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 0, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 0, 137, 137, 0, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 137, 0, 137, 137, 0, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 0, 138, 138, 0, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0,
+ 138, 138, 0, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 177, 177, 21, 177, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0,
+ 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 0,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 143, 143,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0,
+ 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 145, 145, 145, 145, 145,
+ 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 148, 149, 1, 1, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120,
+ 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 58, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 151, 151, 151, 151,
+ 214, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 122, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, 60,
- 123, 124, 60, 125, 60, 60, 62, 0, 126, 127, 128, 129, 130, 131, 132, 133,
- 134, 134, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
- 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 157, 158, 159, 160, 161, 162,
- 0, 0, 0, 0, 163, 164, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 170, 0, 171, 172, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 173, 173, 174, 173, 175, 176, 177, 173, 178, 179, 180, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 181, 173, 173, 173, 173, 173, 173, 173, 173, 182, 173,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152,
+ 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54,
+ 54, 54, 0, 54, 54, 0, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0, 0, 153, 153,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 154,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 0, 0, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0, 156, 156,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0, 10, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 10, 0, 10, 0, 10, 0, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 57, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 199, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 177, 183, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, 191, 192, 0, 0, 0,
- 193, 194, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+static RE_UINT16 script_extensions_table_4[] = {
+ 0, 2, 4, 7, 10, 13, 19, 23, 32, 35, 39, 42, 56, 69, 90, 112,
+ 117, 121, 124, 127, 130, 133, 137, 140, 145, 148, 153, 155, 158, 161, 164, 171,
+ 174, 183, 187, 189, 191, 194, 197, 201, 208, 214, 216, 219, 222, 226, 229, 244,
+ 258, 270, 273, 277, 280, 283, 286, 290, 293
+};
+static RE_UINT8 script_extensions_table_5[] = {
+ 5, 0, 2, 0, 7, 77, 0, 7, 54, 0, 7, 2, 0, 10, 106, 11,
+ 12, 107, 0, 10, 11, 12, 0, 156, 10, 15, 99, 103, 106, 109, 11, 0,
+ 10, 11, 0, 10, 12, 107, 0, 10, 106, 0, 17, 16, 121, 19, 18, 23,
+ 2, 24, 20, 117, 21, 22, 123, 0, 17, 16, 121, 19, 18, 23, 2, 24,
+ 20, 21, 22, 123, 0, 17, 16, 128, 138, 137, 121, 19, 18, 23, 116, 24,
+ 131, 20, 120, 25, 63, 126, 21, 22, 123, 0, 17, 16, 128, 138, 137, 121,
+ 19, 18, 23, 43, 116, 24, 131, 20, 120, 25, 63, 126, 21, 22, 123, 0,
+ 16, 128, 113, 116, 0, 17, 115, 63, 0, 18, 119, 0, 19, 118, 0, 121,
+ 21, 0, 23, 131, 0, 115, 29, 44, 0, 30, 2, 0, 39, 38, 40, 37,
+ 0, 42, 64, 0, 17, 16, 121, 23, 0, 16, 0, 16, 121, 0, 17, 16,
+ 0, 16, 117, 0, 16, 23, 24, 20, 21, 22, 0, 16, 131, 0, 17, 16,
+ 121, 23, 131, 20, 22, 123, 0, 16, 121, 23, 0, 17, 0, 131, 0, 7,
+ 11, 0, 2, 42, 0, 16, 121, 2, 0, 3, 31, 56, 57, 58, 59, 0,
+ 3, 31, 56, 57, 58, 0, 56, 0, 3, 56, 0, 57, 58, 0, 56, 57,
+ 58, 0, 56, 2, 0, 16, 128, 19, 18, 118, 23, 113, 116, 24, 125, 131,
+ 120, 126, 123, 0, 16, 128, 19, 18, 118, 23, 113, 116, 125, 131, 120, 126,
+ 123, 0, 16, 128, 19, 18, 118, 113, 116, 125, 120, 126, 123, 0, 16, 21,
+ 0, 66, 2, 29, 0, 46, 68, 0, 10, 12, 0, 87, 72, 0, 87, 86,
+ 72, 0, 10, 6, 0, 151, 0
+};
+
+int re_get_script_extensions(RE_UINT32 codepoint, RE_UINT8* scripts) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+ int offset;
+ int count;
-static RE_UINT8 re_decomposition_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7,
- 8, 9, 8, 8, 10, 11, 10, 12, 8, 9, 8, 8, 10, 11, 10, 9,
- 8, 8, 8, 8, 13, 8, 8, 8, 8, 12, 8, 8, 14, 8, 10, 15,
- 16, 8, 17, 8, 12, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 15,
- 12, 0, 0, 18, 19, 0, 0, 0, 0, 20, 20, 21, 8, 8, 8, 22,
- 8, 13, 8, 8, 23, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13,
- 0, 13, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 24, 24, 25, 0,
- 0, 0, 0, 0, 0, 0, 20, 5, 24, 25, 0, 0, 0, 0, 0, 0,
- 9, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 26, 27,
- 0, 21, 11, 22, 19, 0, 0, 0, 0, 0, 13, 8, 19, 0, 0, 0,
- 0, 0, 13, 11, 28, 29, 0, 0, 0, 0, 0, 0, 30, 5, 31, 0,
- 9, 18, 0, 11, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 9, 18, 0, 11, 0, 0, 0, 0, 0, 13, 0, 0,
- 33, 0, 0, 0, 8, 13, 13, 8, 13, 8, 13, 8, 8, 12, 12, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 13, 11, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 34, 35, 0, 36, 0, 0, 0, 18, 0, 0, 0,
- 0, 0, 32, 0, 32, 19, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
- 0, 0, 18, 19, 0, 0, 0, 9, 0, 0, 0, 0, 18, 27, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 27, 0, 0, 37, 19, 0, 0, 0, 12,
- 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 13, 19, 0, 0, 0, 0,
- 0, 0, 19, 0, 0, 0, 0, 0, 19, 18, 22, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 27, 11, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0,
- 18, 0, 0, 32, 27, 18, 0, 19, 0, 0, 32, 0, 18, 38, 17, 0,
- 32, 0, 0, 0, 18, 0, 0, 32, 27, 18, 0, 19, 0, 0, 32, 0,
- 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
- 0, 27, 36, 36, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 32,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 24, 24, 39, 24,
- 24, 24, 24, 40, 24, 24, 24, 24, 41, 42, 43, 0, 0, 0, 25, 0,
- 0, 0, 0, 0, 0, 0, 44, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 45, 0,
- 8, 8, 8, 8, 8, 8, 12, 0, 8, 8, 8, 8, 8, 12, 8, 12,
- 8, 12, 8, 12, 8, 8, 46, 46, 8, 8, 8, 8, 8, 8, 8, 12,
- 8, 8, 8, 8, 8, 22, 8, 47, 21, 22, 8, 8, 8, 13, 8, 10,
- 8, 8, 8, 8, 13, 22, 8, 48, 49, 50, 30, 0, 51, 3, 0, 0,
- 0, 30, 0, 52, 3, 53, 0, 54, 0, 3, 5, 0, 0, 3, 0, 3,
- 0, 0, 0, 0, 55, 24, 24, 24, 42, 42, 42, 43, 42, 42, 42, 56,
- 0, 0, 35, 0, 0, 0, 0, 0, 57, 34, 58, 59, 59, 60, 61, 62,
- 63, 64, 65, 66, 66, 67, 68, 59, 69, 61, 62, 0, 70, 70, 70, 70,
- 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 71, 0, 0, 0, 13, 0,
- 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
- 0, 19, 32, 19, 0, 0, 0, 0, 0, 36, 0, 72, 35, 0, 0, 0,
- 32, 37, 32, 0, 0, 0, 0, 0, 36, 0, 0, 10, 12, 12, 12, 0,
- 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
- 8, 0, 13, 12, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
- 73, 73, 73, 73, 73, 20, 20, 20, 20, 20, 20, 20, 20, 74, 73, 73,
- 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 75, 0, 0, 0, 0, 0,
- 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 76,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 20, 20, 20, 20, 20, 5, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 26, 30, 0, 0, 0, 0, 36, 36, 36, 36, 36,
- 36, 46, 32, 0, 9, 22, 33, 12, 0, 0, 0, 0, 0, 19, 3, 78,
- 0, 0, 0, 0, 0, 37, 11, 79, 0, 0, 0, 0, 34, 20, 20, 20,
- 20, 20, 20, 30, 4, 24, 24, 24, 20, 20, 20, 20, 20, 20, 20, 30,
- 20, 73, 0, 0, 80, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 75,
- 20, 20, 20, 81, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 82,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 20, 20,
- 20, 20, 20, 20, 83, 81, 81, 81, 20, 20, 20, 20, 20, 20, 20, 84,
- 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 24,
- 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, 36, 10, 8, 11,
- 36, 33, 13, 8, 8, 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8,
- 20, 30, 0, 0, 3, 20, 0, 46, 59, 59, 85, 8, 8, 11, 8, 36,
- 9, 22, 8, 15, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 86, 86, 86, 87, 87, 87, 87, 88, 86, 87, 87, 89, 0, 0, 0,
- 0, 0, 0, 0, 90, 91, 92, 93, 86, 88, 87, 86, 86, 86, 94, 88,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 99, 100, 100, 100, 100, 100, 101, 95, 95,
- 95, 95, 95, 95, 102, 96, 96, 96, 96, 96, 96, 103, 98, 100, 100, 104,
- 0, 0, 0, 0, 105, 98, 106, 107, 108, 106, 109, 106, 105, 97, 96, 106,
- 97, 110, 111, 98, 112, 107, 113, 106, 96, 96, 96, 96, 96, 107, 114, 96,
- 97, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, 95, 115,
- 0, 0, 0, 0, 116, 116, 117, 0, 0, 0, 0, 0, 116, 116, 116, 116,
- 116, 118, 119, 20, 120, 121, 121, 121, 121, 120, 121, 0, 122, 123, 124, 124,
- 125, 92, 126, 127, 91, 126, 128, 128, 128, 128, 127, 92, 126, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 126, 127, 92, 129,
- 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
- 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 134, 135, 133, 135, 133, 135, 133, 135, 136,
- 131, 137, 133, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 19,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
- 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 36,
- 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 13,
- 8, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 8,
- 19, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 138, 59, 59, 59, 59, 59, 59, 59, 59, 59, 138,
- 139, 140, 61, 138, 59, 59, 66, 61, 59, 61, 59, 59, 59, 59, 59, 59,
- 59, 66, 141, 61, 59, 138, 59, 138, 59, 59, 59, 59, 59, 59, 66, 141,
- 59, 142, 143, 59, 138, 59, 59, 59, 59, 62, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 143, 59, 59, 59, 59, 140, 144, 61, 59, 141, 59, 145, 0,
- 139, 146, 145, 61, 140, 144, 145, 145, 140, 144, 141, 59, 141, 59, 61, 142,
- 59, 59, 66, 59, 59, 59, 59, 0, 61, 61, 66, 59, 59, 59, 59, 0,
- 20, 20, 30, 0, 20, 20, 20, 20, 20, 20, 147, 75, 81, 81, 81, 81,
- 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 4, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 0, 20, 20, 35, 0, 150, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_decomposition_type_stage_4[] = {
- 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 10, 0, 0, 0, 0, 2,
- 0, 0, 10, 10, 2, 2, 0, 0, 2, 10, 10, 0, 17, 17, 17, 0,
- 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 1, 1, 1, 2,
- 2, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2,
- 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0,
- 2, 2, 2, 1, 1, 2, 2, 0, 2, 2, 2, 0, 0, 2, 0, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 2, 10, 10, 10, 0,
- 10, 10, 0, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
- 0, 0, 0, 10, 1, 1, 2, 1, 0, 1, 0, 1, 1, 2, 1, 2,
- 1, 1, 2, 0, 1, 1, 2, 2, 2, 2, 2, 4, 0, 4, 0, 0,
- 0, 0, 0, 4, 2, 0, 2, 2, 2, 0, 2, 0, 10, 10, 0, 0,
- 11, 0, 0, 0, 2, 2, 3, 2, 0, 2, 3, 3, 3, 3, 3, 3,
- 0, 3, 2, 0, 0, 3, 3, 3, 3, 3, 0, 0, 10, 2, 10, 0,
- 3, 0, 1, 0, 3, 0, 1, 1, 3, 3, 0, 3, 3, 2, 2, 2,
- 2, 3, 0, 2, 3, 0, 0, 0, 17, 17, 17, 17, 0, 17, 0, 0,
- 2, 2, 0, 2, 9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 0,
- 11, 10, 0, 0, 13, 0, 0, 0, 2, 0, 1, 12, 0, 0, 1, 12,
- 16, 9, 9, 9, 16, 16, 16, 16, 9, 9, 9, 16, 2, 16, 16, 16,
- 2, 2, 2, 16, 3, 3, 1, 1, 8, 7, 8, 7, 5, 6, 8, 7,
- 8, 7, 5, 6, 8, 7, 0, 0, 0, 0, 0, 8, 7, 5, 6, 8,
- 7, 8, 7, 8, 7, 8, 8, 7, 5, 8, 7, 5, 8, 8, 8, 8,
- 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6,
- 6, 6, 6, 6, 6, 8, 8, 8, 8, 7, 7, 7, 7, 5, 5, 5,
- 7, 8, 0, 0, 5, 7, 5, 5, 7, 5, 7, 7, 5, 5, 7, 7,
- 5, 5, 7, 5, 5, 7, 7, 5, 7, 7, 5, 7, 5, 5, 5, 7,
- 0, 0, 5, 5, 5, 7, 7, 7, 5, 7, 5, 7, 8, 0, 0, 0,
- 12, 12, 12, 12, 12, 12, 0, 0, 12, 0, 0, 12, 12, 2, 2, 2,
- 15, 15, 15, 0, 15, 15, 15, 15, 8, 6, 8, 0, 8, 0, 8, 6,
- 8, 6, 8, 6, 8, 8, 7, 8, 7, 8, 7, 5, 6, 8, 7, 8,
- 6, 8, 7, 5, 7, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13,
- 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14,
- 14, 0, 0, 0, 13, 13, 13, 0, 3, 0, 3, 3, 0, 0, 3, 0,
- 0, 3, 3, 0, 3, 3, 3, 0, 3, 0, 3, 0, 0, 0, 3, 3,
- 3, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 2, 2, 2, 9,
- 16, 0, 0, 0, 16, 16, 16, 0, 9, 9, 0, 0,
-};
+ v = script_extensions_table_1[field_2];
+ v = script_extensions_table_2[(v << 5) | field_1];
+ v = script_extensions_table_3[(v << 5) | field_0];
+
+ if (v < 158) {
+ scripts[0] = v;
-/* Decomposition_Type: 3868 bytes. */
-
-RE_UINT32 re_get_decomposition_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_decomposition_type_stage_1[f] << 6;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_decomposition_type_stage_2[pos + f] << 3;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_decomposition_type_stage_3[pos + f] << 2;
- value = re_decomposition_type_stage_4[pos + code];
-
- return value;
+ return 1;
+ }
+
+ offset = script_extensions_table_4[v - 158];
+ count = 0;
+
+ do {
+ scripts[count] = script_extensions_table_5[offset + count];
+ ++count;
+ } while (script_extensions_table_5[offset + count] != 0);
+
+ return count;
}
-/* East_Asian_Width. */
+/* Sentence_Break. */
+static RE_UINT8 re_sentence_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 19, 19, 13, 32, 19, 19,
+ 19, 33, 19, 19, 19, 19, 19, 19, 19, 19, 34, 35, 13, 13, 13, 13,
+ 13, 36, 13, 37, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 19, 39,
+ 19, 19, 19, 19, 40, 41, 42, 19, 43, 19, 44, 45, 46, 47, 48, 19,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 49, 13, 13, 13, 50, 51, 13,
+ 13, 13, 13, 52, 13, 13, 13, 13, 13, 13, 53, 19, 19, 19, 54, 19,
+ 13, 13, 13, 13, 55, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 56, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19
+};
-static RE_UINT8 re_east_asian_width_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 7, 8, 9,
- 10, 10, 10, 10, 10, 10, 11, 5, 12, 10, 10, 13, 10, 10, 10, 14,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
+static RE_UINT16 re_sentence_break_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 8, 16, 17, 18, 19, 20, 21, 22, 23, 23, 23, 24, 25, 26, 27, 28,
+ 29, 30, 18, 8, 31, 8, 32, 8, 8, 33, 34, 18, 35, 36, 37, 38,
+ 39, 40, 41, 42, 40, 40, 43, 44, 45, 46, 47, 40, 40, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 72, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 55, 101, 102, 103, 55, 104, 105, 106, 107, 108, 109, 110, 55,
+ 40, 111, 112, 113, 114, 29, 115, 116, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 117, 40, 118, 119, 120, 40, 121, 40, 122, 123, 124, 29, 29, 125,
+ 98, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 126, 127, 40, 40, 128, 129, 130, 131, 132, 40, 133, 134, 135,
+ 136, 40, 40, 137, 138, 139, 40, 140, 141, 142, 143, 144, 40, 145, 146, 55,
+ 147, 40, 148, 149, 150, 151, 152, 55, 153, 133, 154, 155, 156, 157, 40, 158,
+ 40, 159, 160, 161, 162, 163, 164, 165, 18, 18, 18, 18, 18, 18, 23, 166,
+ 8, 8, 8, 8, 167, 8, 8, 8, 168, 169, 170, 171, 169, 172, 173, 174,
+ 175, 176, 177, 178, 179, 55, 180, 181, 182, 183, 184, 30, 185, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 186, 187, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 188, 30, 189, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 190, 191, 55, 55, 192, 193,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 194, 55, 195, 196,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 29, 197, 198, 199, 8, 8, 8, 200, 18, 201, 40, 202, 203, 204, 204, 23,
+ 205, 206, 207, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 208, 209, 98, 40, 210, 98, 40, 116, 211, 212, 40, 40, 213, 40, 55, 214,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 215,
+ 40, 40, 40, 40, 216, 55, 214, 217, 40, 40, 40, 40, 40, 40, 40, 40,
+ 218, 219, 8, 220, 221, 40, 40, 222, 223, 224, 8, 225, 226, 227, 228, 229,
+ 230, 231, 40, 232, 233, 133, 234, 235, 49, 236, 237, 215, 59, 238, 239, 240,
+ 40, 241, 242, 243, 40, 244, 245, 246, 247, 248, 249, 250, 18, 18, 40, 251,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 252, 253, 254,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 255, 40, 40, 256, 55, 257, 258, 259, 40, 40, 260, 261, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 262, 214, 40, 263, 40, 264, 265,
+ 266, 267, 268, 269, 40, 40, 40, 270, 271, 2, 272, 273, 274, 141, 275, 276,
+ 277, 278, 279, 55, 40, 40, 40, 280, 55, 55, 40, 281, 55, 55, 55, 282,
+ 55, 55, 55, 55, 215, 40, 283, 152, 40, 284, 285, 286, 287, 40, 288, 55,
+ 29, 289, 290, 40, 287, 291, 292, 293, 40, 294, 40, 295, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 203, 140, 264, 55, 55, 55, 55,
+ 296, 297, 140, 203, 141, 55, 55, 298, 140, 256, 55, 55, 40, 299, 55, 55,
+ 300, 301, 302, 215, 215, 55, 106, 303, 40, 140, 140, 304, 260, 55, 55, 55,
+ 40, 40, 305, 55, 29, 306, 18, 307, 40, 308, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 40, 309, 55, 55, 215, 310, 311, 55, 55, 214, 312, 203,
+ 156, 313, 314, 315, 156, 316, 317, 318, 156, 319, 320, 321, 156, 238, 322, 55,
+ 323, 324, 55, 55, 325, 326, 327, 328, 329, 330, 331, 332, 55, 55, 55, 55,
+ 40, 333, 334, 335, 40, 46, 336, 55, 55, 55, 55, 55, 40, 337, 338, 55,
+ 40, 46, 339, 55, 40, 340, 135, 55, 122, 341, 55, 55, 55, 55, 55, 55,
+ 40, 342, 55, 55, 55, 29, 18, 343, 344, 345, 346, 55, 55, 347, 348, 349,
+ 350, 351, 352, 40, 353, 55, 40, 137, 55, 55, 55, 55, 55, 55, 55, 55,
+ 354, 355, 356, 357, 358, 359, 55, 55, 360, 361, 362, 363, 364, 135, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 365, 55, 55, 55, 55, 55, 366, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 256, 55, 55, 55,
+ 40, 40, 40, 213, 40, 40, 40, 40, 40, 40, 295, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 367, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 368, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 137, 141, 369, 55, 55, 214, 370, 40, 371, 372, 373, 124, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 29, 18, 374, 55, 55, 55, 40, 40, 375, 23, 376, 55, 55, 377,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 378,
+ 40, 40, 40, 40, 40, 40, 140, 55, 305, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 141, 55, 379, 380, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 254, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 381, 382, 383, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 384, 385, 386, 55, 55,
+ 55, 55, 387, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 388, 389, 401,
+ 391, 402, 403, 404, 395, 405, 406, 407, 408, 409, 410, 197, 411, 412, 413, 414,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 23, 415, 23, 416, 417, 418, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 419, 420, 55, 55, 55, 55, 55, 55, 40, 421, 422, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 40, 423, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 424, 55, 29, 425, 426, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 427, 428, 429, 430, 431, 432, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 433, 434, 434, 435, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 436, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 437,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 287, 55, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 281, 40, 40, 40, 40, 40, 40,
+ 287, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 438, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 439,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 287, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 54, 55, 55, 55, 55, 55,
+ 440, 23, 23, 23, 55, 55, 55, 55, 23, 23, 23, 23, 23, 23, 23, 441,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55
+};
+
+static RE_UINT8 re_sentence_break_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 4, 5, 0, 0, 0, 0, 5, 5, 5, 0, 0, 6, 6, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 0, 0, 0, 0, 4,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 0, 5, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5, 0, 12, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 10, 9, 10, 9, 10, 9, 10, 9,
+ 10, 9, 10, 9, 10, 9, 10, 9, 10, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 9, 10, 9, 10, 9, 10, 10,
+ 10, 9, 9, 10, 9, 10, 9, 9, 10, 9, 9, 9, 10, 10, 9, 9,
+ 9, 9, 10, 9, 9, 10, 9, 9, 9, 10, 10, 10, 9, 9, 10, 9,
+ 9, 10, 9, 10, 9, 10, 9, 9, 10, 9, 10, 10, 9, 10, 9, 9,
+ 10, 9, 9, 9, 10, 9, 10, 9, 9, 10, 10, 13, 9, 10, 10, 10,
+ 13, 13, 13, 13, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 10, 9,
+ 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 9, 9, 10, 9, 10, 9, 9, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 9, 9, 10, 9, 9, 10,
+ 10, 9, 10, 9, 9, 9, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 9, 10, 9, 10, 13, 0, 9, 10, 0, 0, 10, 10, 10, 10, 0, 9,
+ 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 0, 9, 0, 9, 9,
+ 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
+ 10, 10, 9, 9, 9, 10, 10, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 10, 10, 9, 10, 0, 9, 10, 9, 9, 10, 10, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 10, 0, 14, 14, 14, 14, 14, 14, 14, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 13, 0, 0, 0, 6, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 0, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14,
+ 0, 14, 14, 0, 14, 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 13,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 12, 0, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 0, 13, 13,
+ 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 4, 13, 14, 14, 14, 14, 14, 14, 14, 12, 0, 14,
+ 14, 14, 14, 14, 14, 13, 13, 14, 14, 0, 14, 14, 14, 14, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 0, 0, 13,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+ 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 13, 13, 0, 0, 6, 4, 13, 0, 0, 14, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 13, 14, 14, 14, 13, 14, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 13, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 0, 0, 0, 13, 13, 13, 13, 0, 0, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 13, 13, 0, 13,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 0, 13, 13, 0, 13, 13, 0, 0, 14, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 14, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 0, 13, 0,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 14, 14, 13, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13,
+ 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 13, 13, 0, 13,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 13, 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 0, 0, 0, 13, 13, 0, 13, 0, 13, 13,
+ 0, 0, 0, 13, 13, 0, 0, 0, 13, 13, 13, 0, 0, 0, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 13, 0,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 13, 0,
+ 0, 0, 0, 0, 13, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 13,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 14, 0, 0, 0, 0, 14,
+ 14, 14, 14, 14, 14, 0, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 13, 13, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 0, 13, 0, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 0, 0,
+ 13, 13, 13, 13, 13, 0, 13, 0, 14, 14, 14, 14, 14, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 13, 13, 13, 13,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 14, 0, 14, 5, 5, 5, 5, 14, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 13, 13, 13, 13, 13, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 13, 13, 13, 13, 14, 14,
+ 14, 13, 14, 14, 14, 13, 13, 14, 14, 14, 14, 14, 14, 14, 13, 13,
+ 13, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 14, 14, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 0,
+ 13, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 14, 14, 14,
+ 0, 0, 4, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 4, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 5, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 13, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 13, 0, 0, 0, 0, 13, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 4, 0, 0, 0, 0, 6, 4, 0, 14, 14, 14, 12, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 4, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0, 0, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 4, 4, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 4,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 14, 13, 13,
+ 13, 13, 13, 13, 14, 13, 13, 14, 14, 14, 13, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 9, 0, 9, 0, 9, 0, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 0, 10, 10, 9, 9, 9, 9, 9, 0, 10, 0,
+ 0, 0, 10, 10, 10, 0, 10, 10, 9, 9, 9, 9, 9, 0, 0, 0,
+ 10, 10, 10, 10, 0, 0, 10, 10, 9, 9, 9, 9, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 10, 10, 9, 9, 9, 9, 9, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 14, 14, 12, 12,
+ 0, 0, 0, 6, 6, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 7, 0, 0, 0, 11, 11, 12, 12, 12, 12, 12, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 5, 5, 4, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 10, 9, 9, 9, 10, 10,
+ 9, 9, 9, 10, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 9, 0, 10,
+ 9, 9, 9, 9, 10, 13, 13, 13, 13, 10, 0, 0, 10, 10, 9, 9,
+ 0, 0, 0, 0, 0, 9, 10, 10, 10, 10, 0, 0, 0, 0, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 9, 10, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 9, 10, 9, 9, 9, 10, 10, 9, 10, 9, 10, 9, 10, 9, 9, 9,
+ 9, 10, 9, 10, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9,
+ 9, 10, 9, 10, 10, 0, 0, 0, 0, 0, 0, 9, 10, 9, 10, 14,
+ 14, 14, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 4, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 6, 4, 0, 0, 13, 13, 13, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
+ 0, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 14, 14, 0, 0, 13, 13, 13,
+ 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 13, 14,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 13,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 10, 10, 14, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 9, 10, 9, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 13, 0, 0, 9, 10, 9, 10, 13,
+ 9, 10, 9, 10, 10, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 9, 9, 9, 9, 10,
+ 9, 9, 9, 9, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 0, 0, 9, 10, 9, 9, 9, 9, 10, 9, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 10, 13, 10, 10, 10, 13, 13, 13, 13, 13,
+ 13, 13, 14, 13, 13, 13, 14, 13, 13, 13, 13, 14, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 0, 13, 13, 14,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 0, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 4, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 14, 14, 14, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 13, 14, 14, 14, 13, 13, 14, 14, 13, 13, 13, 13, 13, 14, 14,
+ 13, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 4, 4, 13, 13, 13, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 0,
+ 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 0, 0, 0, 0, 0, 0,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 4, 14, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 13, 14, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 0, 13, 0,
+ 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 5,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 6, 6, 0, 6, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 6, 6, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 7, 0, 0, 6, 4, 4, 6, 5, 5, 5, 5, 5, 5, 0,
+ 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 12,
+ 0, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 6, 6, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 0, 0, 0, 0, 4,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 0, 5, 0, 5,
+ 5, 4, 5, 5, 6, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
+ 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13,
+ 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 0, 0, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 0, 0, 13, 0, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 13, 13,
+ 13, 14, 14, 14, 0, 14, 14, 0, 0, 0, 0, 0, 14, 14, 14, 14,
+ 13, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 0, 0, 14, 14, 14, 0, 0, 0, 0, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 14, 14, 0, 0, 0,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 12, 4, 4,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 4, 4, 4, 13, 14, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 13, 13, 13, 13, 4, 4, 0, 0, 14, 14, 14, 14, 4, 14, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 0, 13, 0, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 4, 4, 0, 4, 4, 0, 14, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 14, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 13, 13, 13,
+ 13, 13, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 4, 4, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 14, 13,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 13, 13, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 13, 13, 13, 13, 14, 14, 0, 0,
+ 14, 4, 4, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 13, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 4, 4, 4, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 0, 0, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 0, 14, 14, 14, 14, 13,
+ 14, 13, 14, 14, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14,
+ 14, 13, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 13, 14, 14, 14, 14, 0,
+ 0, 0, 4, 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 4, 4, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 13, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 0, 14, 14, 0, 14,
+ 14, 14, 14, 14, 14, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0,
+ 14, 14, 0, 14, 14, 14, 14, 14, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 14, 14, 14, 14, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 14,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 14,
+ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 14, 14, 4,
+ 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14,
+ 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 0, 9, 9,
+ 0, 0, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 0, 10, 0, 10, 10, 10,
+ 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 9, 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 16, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 17,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 17,
-};
-
-static RE_UINT8 re_east_asian_width_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 0, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 9, 9, 9, 27, 9, 9, 28, 9, 9, 9, 9, 9, 9, 29, 30, 31,
- 32, 33, 34, 35, 36, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 37, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 9, 9, 9, 9, 9, 9,
- 9, 9, 39, 9, 9, 9, 9, 9, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 40,
+ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 30, 30, 30, 30, 9, 9, 9, 9, 9, 9, 42, 9, 43, 44,
+ 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 45,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 46,
- 30, 30, 30, 30, 30, 47, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 30, 30, 48, 30, 30, 49, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 9, 10, 0, 0, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 14, 14, 14, 14, 14, 14, 14, 13, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 13, 13, 0, 13, 0, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 0, 13, 0, 0, 0, 0,
+ 0, 0, 13, 0, 0, 0, 0, 13, 0, 13, 0, 13, 0, 13, 13, 13,
+ 0, 13, 13, 0, 13, 0, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13,
+ 0, 13, 13, 0, 13, 0, 0, 13, 13, 13, 13, 0, 13, 13, 13, 13,
+ 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 50, 51, 52, 53, 54, 9, 55, 56, 57, 58, 59, 60, 61, 62, 9, 63,
- 9, 9, 64, 65, 66, 67, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 68,
- 9, 9, 41, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 69,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_sentence_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_sentence_break_table_1[field_2];
+ v = re_sentence_break_table_2[(v << 5) | field_1];
+ v = re_sentence_break_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Sentence_Terminal. */
+static RE_UINT8 re_sentence_terminal_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 3, 3, 9, 10, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 11, 12, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13,
+ 3, 3, 14, 15, 16, 17, 18, 19, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 20, 21, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 22,
+ 3, 3, 3, 3, 3, 3, 23, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
};
-static RE_UINT8 re_east_asian_width_stage_3[] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 0, 0, 0, 0, 3, 4, 5, 6, 7, 0, 8, 9, 10, 11, 12, 13,
- 14, 0, 15, 16, 17, 16, 18, 8, 19, 20, 21, 0, 17, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 22, 23, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 14, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 0, 0, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0,
- 0, 0, 29, 28, 30, 31, 29, 28, 30, 31, 0, 0, 0, 0, 0, 0,
- 14, 0, 28, 28, 28, 28, 28, 28, 28, 28, 14, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0,
- 0, 0, 33, 34, 6, 0, 35, 36, 0, 0, 0, 0, 0, 0, 37, 38,
- 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41, 14, 36, 0, 42, 16, 0, 0, 0, 0, 43, 44, 28, 45, 28, 31,
- 0, 14, 28, 31, 0, 0, 0, 31, 0, 0, 46, 0, 38, 0, 0, 0,
- 12, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 0, 56, 57, 0, 0,
- 57, 0, 58, 14, 58, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 55, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 62, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 45, 28, 28, 28, 28, 45, 0,
- 28, 28, 63, 0, 30, 31, 57, 53, 64, 65, 31, 0, 63, 38, 0, 66,
- 67, 68, 69, 70, 0, 0, 0, 0, 71, 32, 72, 0, 73, 74, 0, 75,
- 0, 0, 76, 17, 77, 59, 0, 78, 79, 80, 81, 28, 82, 83, 84, 85,
- 86, 59, 0, 0, 0, 87, 0, 58, 0, 88, 89, 0, 0, 0, 17, 28,
- 0, 0, 90, 0, 0, 0, 87, 75, 0, 0, 0, 0, 91, 92, 0, 0,
- 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 31, 0, 0, 0, 0,
- 32, 32, 32, 96, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 0, 0, 0, 32, 72,
- 98, 32, 32, 32, 32, 32, 32, 99, 100, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 99, 100, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 90, 32, 32, 32, 32, 32, 100, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 99, 32, 32, 32, 32, 32, 101, 32, 32, 32, 32, 72, 0, 32, 32,
- 32, 32, 32, 99, 32, 32, 32, 32, 32, 28, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 102, 32, 32, 32, 32, 32, 32, 99, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 102,
- 32, 32, 32, 32, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 32, 103, 0, 0, 32, 32, 32, 32, 104, 32, 99, 72, 0, 0,
- 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 108, 108, 108,
- 108, 108, 108, 108, 108, 108, 108, 109, 110, 110, 110, 111, 112, 109, 0, 58,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 0,
- 32, 32, 32, 99, 0, 0, 0, 0, 0, 0, 101, 0, 113, 0, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72,
- 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0,
- 28, 115, 28, 28, 28, 116, 28, 28, 28, 28, 28, 28, 28, 31, 28, 28,
- 28, 80, 117, 118, 28, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 101, 0, 32, 32, 32, 32, 32, 72, 32, 87, 103, 0, 97, 0, 0, 0,
- 32, 32, 32, 32, 87, 90, 120, 32, 32, 32, 32, 32, 32, 32, 32, 121,
- 32, 32, 72, 0, 32, 32, 32, 32, 32, 122, 72, 0, 32, 32, 123, 32,
- 32, 32, 32, 32, 32, 32, 32, 99, 124, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125,
- 32, 32, 32, 32, 32, 32, 32, 97, 0, 126, 32, 32, 32, 0, 0, 127,
- 0, 0, 66, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 97, 114, 129, 0, 0, 94, 113, 101,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 72, 0, 0,
- 0, 90, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 130, 131,
- 32, 32, 32, 32, 132, 133, 32, 32, 32, 132, 32, 32, 32, 32, 32, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 101,
- 101, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 116,
+static RE_UINT8 re_sentence_terminal_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 6,
+ 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
+ 0, 16, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 22, 0, 0, 25, 0, 0, 0, 0, 26, 0,
+ 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 30, 0, 0, 0, 0, 0, 1, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
+ 0, 0, 33, 0, 0, 3, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0,
+ 0, 37, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
+ 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0,
+ 0, 0, 43, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 0, 0, 0, 45, 0, 44, 46, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_east_asian_width_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 0, 1, 5, 5, 1, 5, 5, 1,
- 1, 0, 1, 0, 5, 1, 1, 5, 1, 1, 1, 1, 1, 0, 1, 1,
- 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
- 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1,
- 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
- 0, 3, 3, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0,
- 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 3, 3, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1,
- 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 3, 1, 0, 0, 0, 0, 3, 3, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1,
- 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 3, 1, 1, 1, 1, 1,
- 1, 1, 3, 3, 1, 3, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1,
- 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 3, 3, 0, 3,
- 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 5, 5,
- 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
- 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 3, 1, 1,
- 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
- 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 3, 3, 3, 3, 0, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 3, 3, 3, 3,
- 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3,
- 3, 3, 3, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0,
- 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3,
- 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0,
- 3, 3, 0, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3,
+static RE_UINT8 re_sentence_terminal_table_3[] = {
+ 0, 0, 0, 0, 2, 64, 0, 128, 0, 2, 0, 0, 0, 0, 0, 192,
+ 0, 0, 16, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 128, 98,
+ 48, 0, 0, 0, 0, 12, 0, 0, 132, 1, 0, 0, 0, 64, 0, 0,
+ 0, 0, 96, 0, 8, 2, 0, 0, 0, 15, 0, 0, 0, 0, 0, 204,
+ 0, 0, 0, 24, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
+ 4, 0, 0, 0, 0, 0, 0, 128, 0, 192, 0, 0, 0, 0, 136, 0,
+ 0, 0, 192, 0, 0, 128, 0, 0, 0, 3, 0, 0, 0, 0, 0, 224,
+ 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 196, 0, 2, 0, 0, 0,
+ 0, 0, 224, 3, 128, 1, 0, 0, 3, 0, 0, 0, 14, 0, 0, 0,
+ 96, 32, 0, 192, 0, 0, 0, 27, 0, 24, 0, 0, 12, 254, 255, 0,
+ 6, 0, 0, 0, 0, 0, 0, 112, 80, 0, 0, 0, 12, 0, 0, 0,
+ 0, 0, 128, 1, 0, 0, 32, 0, 16, 0, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 0
};
-/* East_Asian_Width: 3040 bytes. */
-
-RE_UINT32 re_get_east_asian_width(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_east_asian_width_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_east_asian_width_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_east_asian_width_stage_3[pos + f] << 3;
- value = re_east_asian_width_stage_4[pos + code];
-
- return value;
-}
+RE_UINT32 re_get_sentence_terminal(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Joining_Group. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_joining_group_stage_1[] = {
- 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
+ v = re_sentence_terminal_table_1[field_2];
+ v = re_sentence_terminal_table_2[(v << 5) | field_1];
+ v = re_sentence_terminal_table_3[(v << 2) | field_0];
-static RE_UINT8 re_joining_group_stage_2[] = {
- 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ return (v >> offset) & 0x1;
+}
+
+/* Soft_Dotted. */
+static RE_UINT8 re_soft_dotted_table_1[] = {
+ 0, 1, 2, 2, 2, 2, 2, 3, 4, 2, 2, 5, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_joining_group_stage_3[] = {
+static RE_UINT8 re_soft_dotted_table_2[] = {
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 0, 14, 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 22, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 0,
+ 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_joining_group_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 45, 0, 3, 3, 43, 3, 45, 3, 4, 41, 4, 4, 13, 13, 13, 6,
- 6, 31, 31, 35, 35, 33, 33, 39, 39, 1, 1, 11, 11, 55, 55, 55,
- 0, 9, 29, 19, 22, 24, 26, 16, 43, 45, 45, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 29,
- 0, 3, 3, 3, 0, 3, 43, 43, 45, 4, 4, 4, 4, 4, 4, 4,
- 4, 13, 13, 13, 13, 13, 13, 13, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 35, 35, 33, 33, 39,
- 1, 9, 9, 9, 9, 9, 9, 29, 29, 11, 38, 11, 19, 19, 19, 11,
- 11, 11, 11, 11, 11, 22, 22, 22, 22, 26, 26, 26, 26, 56, 21, 13,
- 41, 17, 17, 14, 43, 43, 43, 43, 43, 43, 43, 43, 55, 47, 55, 43,
- 45, 45, 46, 46, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 31,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 1, 0, 0, 21,
- 2, 0, 5, 12, 12, 7, 7, 15, 44, 50, 18, 42, 42, 48, 49, 20,
- 23, 25, 27, 36, 10, 8, 28, 32, 34, 30, 7, 37, 40, 5, 12, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 53,
- 4, 4, 4, 4, 4, 4, 4, 13, 13, 6, 6, 31, 35, 1, 1, 1,
- 9, 9, 11, 11, 11, 24, 24, 26, 26, 26, 22, 31, 31, 35, 13, 13,
- 35, 31, 13, 3, 3, 55, 55, 45, 43, 43, 54, 54, 13, 35, 35, 19,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 0, 0, 0, 0,
- 4, 4, 13, 39, 9, 29, 22, 24, 45, 45, 31, 43, 57, 0, 6, 33,
- 11, 58, 31, 1, 19, 0, 4, 4, 4, 31, 45, 86, 87, 88, 0, 0,
- 59, 61, 61, 65, 65, 62, 0, 83, 0, 85, 85, 0, 0, 66, 80, 84,
- 68, 68, 68, 69, 63, 81, 70, 71, 77, 60, 60, 73, 73, 76, 74, 74,
- 74, 75, 0, 0, 78, 0, 0, 0, 0, 0, 0, 72, 64, 79, 82, 67,
- 0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 100, 0, 101, 0,
- 101, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 18, 0, 19, 20, 0, 21, 0, 22, 23, 0, 24, 0, 17, 18,
+ 0, 19, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Joining_Group: 788 bytes. */
-
-RE_UINT32 re_get_joining_group(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_joining_group_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_joining_group_stage_2[pos + f] << 5;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_joining_group_stage_3[pos + f] << 4;
- value = re_joining_group_stage_4[pos + code];
-
- return value;
-}
-
-/* Joining_Type. */
-
-static RE_UINT8 re_joining_type_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 6,
- 7, 8, 4, 9, 4, 4, 10, 4, 4, 4, 4, 11, 4, 12, 13, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+static RE_UINT8 re_soft_dotted_table_3[] = {
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 128, 0, 0, 0, 2, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 32, 0, 0, 4, 0, 0, 0, 8, 0,
+ 0, 0, 64, 1, 4, 0, 0, 0, 0, 0, 64, 0, 16, 1, 0, 0,
+ 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0,
+ 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, 192, 0, 0, 12, 0, 0,
+ 0, 0, 0, 192, 0, 0, 12, 0, 192, 0, 0, 0, 0, 0, 0, 12,
+ 0, 192, 0, 0
};
-static RE_UINT8 re_joining_type_stage_2[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0,
- 0, 0, 4, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 23, 25, 26, 27, 28, 29,
- 30, 31, 26, 32, 33, 34, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 50, 51,
- 52, 53, 54, 0, 55, 0, 0, 0, 56, 57, 58, 0, 59, 60, 61, 62,
- 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 76, 0, 0, 0, 0,
- 77, 78, 0, 79, 80, 81, 82, 83, 84, 85, 86, 87, 0, 0, 0, 88,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 70, 0, 0, 0, 91,
- 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 97, 0,
- 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, 100, 0, 0,
- 101, 102, 103, 0, 104, 105, 106, 107, 108, 0, 0, 109, 33, 110, 0, 0,
- 111, 112, 113, 114, 0, 0, 115, 116, 117, 118, 119, 0, 120, 0, 0, 0,
- 121, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 0, 0, 0, 0, 0,
- 126, 0, 127, 0, 128, 129, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 134, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 136, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 138, 139, 0, 0, 140, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 141, 142, 143, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 144, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 146, 147, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 149, 2, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_soft_dotted(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_joining_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
- 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 6,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 9, 10, 11, 12,
- 13, 14, 2, 2, 0, 15, 16, 12, 12, 17, 17, 18, 12, 12, 12, 12,
- 19, 20, 21, 22, 22, 23, 0, 24, 0, 25, 26, 27, 12, 28, 2, 2,
- 2, 29, 12, 30, 12, 31, 32, 18, 0, 0, 0, 0, 33, 2, 34, 0,
- 0, 35, 12, 12, 12, 36, 37, 38, 0, 0, 33, 39, 40, 41, 0, 0,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 12, 48, 49, 50,
- 0, 0, 3, 2, 39, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 52,
- 5, 53, 5, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 56,
- 57, 1, 0, 0, 54, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 56,
- 60, 61, 55, 0, 0, 0, 62, 0, 63, 53, 0, 0, 54, 0, 0, 64,
- 55, 0, 0, 0, 0, 0, 0, 65, 57, 1, 58, 0, 54, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0,
- 67, 0, 0, 0, 0, 0, 0, 33, 68, 69, 70, 0, 54, 0, 0, 0,
- 58, 71, 0, 0, 54, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 72,
- 57, 1, 0, 0, 54, 0, 0, 0, 0, 66, 73, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 74, 51, 25, 75, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 74, 76, 0, 77, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 78, 55, 0, 0, 0, 0, 0, 0, 5, 75,
- 79, 80, 2, 5, 2, 2, 2, 76, 58, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 80, 81, 82, 0, 0, 0, 83, 34, 0, 57, 0,
- 84, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 54, 0, 0, 0, 54, 0,
- 0, 0, 0, 0, 0, 0, 86, 77, 58, 5, 37, 1, 0, 0, 0, 0,
- 87, 88, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 89,
- 90, 12, 12, 12, 12, 91, 0, 0, 0, 0, 0, 0, 92, 34, 66, 45,
- 0, 0, 25, 93, 0, 0, 0, 0, 0, 0, 58, 75, 94, 76, 3, 22,
- 0, 0, 0, 0, 0, 0, 2, 75, 37, 0, 0, 0, 0, 0, 95, 8,
- 66, 0, 0, 0, 0, 3, 37, 0, 4, 0, 0, 0, 96, 97, 0, 0,
- 0, 0, 0, 0, 58, 98, 4, 0, 0, 0, 0, 0, 0, 99, 100, 0,
- 0, 0, 101, 2, 81, 53, 56, 4, 2, 2, 2, 2, 2, 2, 2, 39,
- 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 76, 64, 0, 0,
- 0, 0, 2, 2, 2, 2, 34, 0, 0, 0, 0, 0, 0, 25, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 101, 77, 0, 0, 0, 33, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 104, 105, 0, 0, 70, 0, 0, 0,
- 12, 12, 12, 12, 12, 12, 106, 0, 71, 0, 0, 0, 2, 2, 4, 25,
- 0, 0, 0, 0, 33, 77, 0, 0, 25, 2, 4, 0, 0, 0, 0, 0,
- 51, 0, 0, 0, 0, 0, 107, 108, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 109, 82, 0, 105, 56, 0, 0, 0, 0, 0, 56,
- 0, 0, 0, 0, 0, 0, 110, 68, 55, 0, 0, 0, 0, 71, 58, 0,
- 0, 0, 0, 0, 1, 53, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0,
- 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 33, 51, 111, 99, 0, 0, 0, 0, 0, 92,
- 112, 113, 114, 115, 116, 117, 0, 0, 118, 119, 120, 0, 0, 121, 0, 0,
- 122, 12, 12, 12, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 12,
- 125, 2, 126, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 2,
- 75, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, 0, 0, 0, 127, 59,
- 51, 0, 0, 0, 25, 40, 76, 0, 0, 0, 0, 0, 0, 0, 105, 0,
- 4, 0, 0, 0, 0, 0, 33, 75, 0, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 128, 58, 0, 0, 0, 25, 3, 51, 0, 0,
- 34, 0, 0, 0, 33, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 73, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 129,
- 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 86,
- 34, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 131,
- 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 6, 0,
- 0, 0, 0, 80, 133, 37, 0, 0, 0, 0, 0, 0, 0, 25, 2, 59,
- 0, 0, 99, 54, 34, 0, 0, 0, 5, 51, 0, 0, 0, 0, 3, 134,
- 25, 0, 109, 45, 0, 0, 0, 0, 0, 64, 75, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 75, 6, 0, 0, 64, 2, 2, 64, 135, 0,
- 0, 0, 0, 0, 0, 0, 109, 136, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0,
- 0, 0, 0, 0, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 76, 0,
- 0, 0, 0, 0, 0, 0, 75, 0, 0, 25, 0, 0, 0, 0, 0, 0,
- 0, 25, 51, 0, 0, 0, 0, 0, 0, 0, 0, 70, 37, 0, 0, 0,
- 0, 0, 0, 0, 25, 4, 3, 2, 137, 37, 0, 0, 0, 96, 0, 0,
- 85, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 75, 3,
- 2, 2, 2, 2, 2, 76, 1, 0, 56, 0, 0, 3, 5, 2, 0, 0,
- 75, 2, 2, 138, 139, 51, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0,
- 0, 0, 75, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12,
- 140, 37, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 2, 2, 2, 2,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_joining_type_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
- 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5,
- 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 0, 5, 5, 0, 5,
- 5, 5, 5, 0, 5, 0, 0, 0, 2, 0, 3, 3, 3, 3, 2, 3,
- 2, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2,
- 3, 2, 2, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 2, 2,
- 5, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 2, 3, 2, 3, 2, 2, 3, 3, 0, 3, 5, 5,
- 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 3, 3,
- 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5,
- 3, 5, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 2,
- 3, 2, 3, 2, 3, 2, 2, 3, 5, 5, 5, 0, 0, 3, 2, 2,
- 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
- 2, 3, 2, 3, 3, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0,
- 3, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 3, 2, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0,
- 2, 0, 2, 2, 2, 2, 0, 3, 2, 3, 3, 0, 0, 0, 0, 0,
- 2, 2, 3, 3, 3, 0, 3, 2, 2, 3, 3, 2, 2, 0, 2, 2,
- 2, 3, 2, 2, 2, 2, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0,
- 0, 0, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0,
- 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0,
- 0, 5, 5, 0, 0, 0, 0, 5, 5, 0, 0, 5, 5, 5, 0, 0,
- 5, 5, 0, 0, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 0, 5,
- 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 0, 0, 5,
- 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 5, 0, 0,
- 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 0, 5, 0,
- 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
- 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5,
- 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
- 0, 5, 5, 0, 0, 5, 5, 0, 5, 5, 0, 0, 0, 0, 5, 5,
- 0, 0, 5, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0,
- 0, 0, 0, 0, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 1, 5, 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 5, 2, 2, 5, 2, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0,
- 5, 0, 5, 0, 0, 5, 5, 5, 0, 0, 0, 0, 5, 0, 5, 5,
- 0, 0, 5, 5, 5, 5, 0, 0, 5, 5, 0, 5, 5, 5, 0, 0,
- 5, 5, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5,
- 0, 0, 0, 5, 0, 1, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0,
- 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0,
- 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5,
- 5, 5, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0,
- 5, 0, 5, 5, 5, 0, 0, 5, 0, 5, 5, 5, 0, 5, 5, 0,
- 2, 2, 2, 2, 2, 3, 0, 3, 0, 3, 3, 0, 0, 4, 3, 3,
- 3, 3, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 3, 2, 2,
- 2, 3, 0, 0, 3, 5, 5, 0, 0, 0, 0, 2, 2, 2, 2, 3,
- 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 2, 3, 3,
- 2, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 2, 2, 0,
- 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 5, 5, 5, 5,
- 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, 5,
- 5, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0,
- 5, 5, 0, 0, 5, 0, 5, 5, 5, 0, 5, 0, 0, 0, 0, 5,
- 5, 0, 5, 5, 0, 0, 0, 0, 5, 5, 5, 0, 0, 5, 0, 5,
- 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5,
- 5, 0, 0, 5, 5, 5, 5, 0, 5, 0, 5, 5, 0, 5, 5, 0,
- 0, 0, 5, 0, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5,
- 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5, 5,
- 2, 2, 2, 2, 5, 5, 5, 5,
-};
+ v = re_soft_dotted_table_1[field_2];
+ v = re_soft_dotted_table_2[(v << 5) | field_1];
+ v = re_soft_dotted_table_3[(v << 2) | field_0];
-/* Joining_Type: 3560 bytes. */
-
-RE_UINT32 re_get_joining_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_joining_type_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_joining_type_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_joining_type_stage_3[pos + f] << 3;
- value = re_joining_type_stage_4[pos + code];
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Line_Break. */
-
-static RE_UINT8 re_line_break_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 10, 17, 5, 18, 10, 10, 19, 10, 20, 21, 22,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 23,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 23,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 24, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-};
-
-static RE_UINT8 re_line_break_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 2, 2, 2, 2, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 2, 51, 2, 2, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 2, 2, 2, 70, 2, 2, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 86, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 87, 79, 79, 79, 79, 79, 79, 79, 79, 88, 2, 2, 89, 90, 2, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 100,
- 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102,
- 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104,
- 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106,
- 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101,
- 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 107,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 79, 79, 79, 79, 110, 111, 2, 2, 112, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, 109, 122, 123, 124, 2, 125, 126, 109, 2, 2, 127, 109,
- 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 109, 139, 109, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 109, 149, 150, 109, 151, 152, 153, 154, 109,
- 155, 156, 109, 157, 158, 159, 109, 109, 160, 161, 162, 163, 109, 164, 109, 165,
- 2, 2, 2, 2, 2, 2, 2, 166, 167, 2, 168, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 2, 2, 2, 2, 169, 170, 171, 2, 172, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 2, 2, 2, 173, 174, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 2, 2, 2, 2, 175, 176, 177, 178, 109, 109, 109, 109, 179, 180, 181, 182,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 183,
- 79, 79, 79, 79, 79, 184, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 79, 79, 185, 79, 79, 186, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 187, 188, 109, 109, 109, 109, 109, 109,
- 2, 189, 190, 191, 192, 193, 194, 109, 195, 196, 197, 2, 2, 198, 2, 199,
- 2, 2, 2, 2, 200, 201, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 202, 109, 203, 109, 109, 204, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 2, 205, 206, 109, 109, 109, 109, 109, 207, 208, 209, 109, 210, 211, 109, 109,
- 79, 79, 212, 213, 79, 79, 79, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 228,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 228,
- 229, 109, 230, 231, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
-};
-
-static RE_UINT16 re_line_break_stage_3[] = {
- 0, 1, 0, 0, 2, 3, 4, 5, 6, 6, 6, 7, 6, 6, 6, 8,
- 9, 0, 0, 0, 10, 11, 12, 13, 6, 6, 14, 6, 6, 6, 14, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 14, 15, 16, 17, 6, 6, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 20, 0, 6, 21,
- 22, 23, 6, 6, 24, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 25, 26, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 27, 6, 6, 6, 28, 27, 6, 6, 6, 6,
- 6, 29, 30, 0, 0, 0, 0, 31, 32, 33, 34, 34, 34, 35, 36, 33,
- 6, 37, 0, 38, 6, 6, 6, 6, 6, 25, 0, 0, 4, 39, 40, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 41, 42, 42, 43, 4, 44,
- 6, 45, 46, 6, 6, 6, 0, 0, 0, 47, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 48, 0, 49, 33, 4, 44, 6, 6, 6, 25, 50, 51,
- 6, 6, 48, 52, 53, 54, 6, 28, 6, 6, 6, 55, 6, 56, 33, 33,
- 33, 33, 33, 33, 6, 6, 57, 58, 33, 33, 59, 0, 52, 0, 0, 0,
- 50, 6, 6, 6, 6, 6, 6, 60, 0, 0, 61, 6, 62, 4, 6, 6,
- 63, 64, 65, 6, 6, 66, 67, 68, 69, 70, 71, 72, 73, 4, 74, 75,
- 76, 77, 65, 6, 6, 66, 78, 79, 80, 81, 82, 83, 84, 4, 85, 33,
- 76, 45, 24, 6, 6, 66, 86, 68, 87, 88, 89, 33, 73, 4, 90, 91,
- 76, 64, 65, 6, 6, 66, 86, 68, 69, 81, 92, 72, 73, 4, 6, 33,
- 93, 94, 95, 96, 97, 94, 6, 98, 99, 100, 101, 33, 84, 4, 6, 102,
- 103, 57, 66, 6, 6, 66, 6, 104, 105, 100, 106, 56, 73, 4, 107, 6,
- 108, 57, 66, 6, 6, 66, 109, 68, 105, 100, 106, 110, 73, 4, 111, 33,
- 112, 57, 66, 6, 6, 6, 6, 113, 105, 114, 115, 6, 73, 4, 6, 116,
- 117, 6, 28, 118, 6, 6, 24, 119, 28, 120, 121, 0, 84, 4, 122, 33,
- 123, 124, 124, 124, 124, 124, 124, 125, 124, 126, 4, 127, 33, 33, 33, 33,
- 128, 129, 124, 124, 130, 124, 124, 131, 132, 131, 4, 133, 33, 33, 33, 33,
- 134, 135, 136, 26, 4, 44, 137, 138, 6, 27, 6, 6, 6, 139, 30, 140,
- 141, 142, 0, 30, 0, 0, 0, 143, 144, 57, 145, 146, 33, 33, 33, 33,
- 124, 124, 124, 124, 124, 124, 124, 124, 4, 147, 124, 124, 124, 124, 124, 124,
- 124, 124, 4, 148, 6, 6, 6, 6, 45, 149, 6, 6, 6, 6, 6, 6,
- 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 95, 28, 95, 6, 6, 6, 6,
- 6, 95, 6, 6, 6, 6, 95, 28, 95, 6, 28, 6, 6, 6, 6, 6,
- 6, 6, 95, 6, 6, 6, 6, 6, 6, 6, 6, 153, 154, 6, 6, 139,
- 6, 6, 6, 155, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 58, 58,
- 156, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 156, 6, 6, 157, 6, 6, 6, 6, 6, 6, 6, 6, 6, 158, 6, 89,
- 6, 57, 159, 33, 6, 6, 160, 33, 6, 6, 161, 33, 6, 57, 162, 33,
- 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 163, 164, 4, 165, 6, 155,
- 166, 167, 4, 165, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 89,
- 168, 6, 6, 6, 6, 169, 6, 6, 6, 6, 6, 6, 6, 6, 58, 33,
- 6, 6, 6, 28, 0, 170, 0, 170, 171, 4, 124, 124, 124, 131, 172, 33,
- 124, 124, 124, 124, 124, 173, 124, 124, 124, 174, 4, 175, 6, 6, 6, 6,
- 6, 6, 176, 177, 124, 124, 124, 124, 124, 124, 124, 178, 124, 124, 124, 179,
- 4, 165, 4, 165, 124, 131, 0, 180, 33, 33, 33, 33, 33, 33, 33, 33,
- 103, 6, 6, 6, 6, 6, 181, 0, 103, 182, 4, 183, 156, 25, 50, 139,
- 184, 6, 6, 6, 61, 185, 4, 44, 6, 6, 6, 6, 48, 0, 170, 22,
- 6, 6, 6, 6, 181, 0, 0, 186, 4, 187, 4, 44, 6, 6, 6, 188,
- 6, 89, 6, 6, 6, 6, 6, 189, 6, 33, 190, 0, 0, 191, 192, 193,
- 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 194,
- 6, 6, 58, 58, 6, 6, 6, 6, 58, 58, 6, 195, 6, 6, 6, 58,
- 6, 6, 6, 6, 6, 6, 57, 6, 57, 6, 196, 109, 6, 6, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 212, 213,
- 214, 215, 6, 139, 216, 217, 218, 219, 217, 217, 0, 0, 0, 0, 220, 33,
- 221, 116, 222, 6, 223, 224, 6, 6, 6, 6, 225, 226, 227, 228, 227, 229,
- 6, 230, 227, 229, 6, 6, 6, 6, 6, 6, 231, 6, 6, 6, 6, 6,
- 232, 233, 234, 235, 236, 237, 238, 225, 6, 239, 240, 6, 241, 242, 6, 6,
- 242, 6, 243, 244, 243, 6, 6, 14, 6, 6, 6, 6, 6, 245, 6, 6,
- 6, 246, 240, 247, 6, 248, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 249, 6,
- 6, 6, 6, 6, 28, 33, 33, 33, 6, 56, 33, 33, 227, 227, 227, 227,
- 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 250,
- 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, 227, 227, 227, 227, 251, 6,
- 227, 227, 252, 6, 253, 229, 242, 225, 254, 255, 229, 6, 252, 14, 6, 6,
- 256, 257, 258, 259, 6, 6, 6, 260, 261, 6, 6, 6, 262, 263, 6, 264,
- 6, 6, 6, 265, 6, 6, 6, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 6, 6, 6, 6, 6, 6, 6, 6, 14, 277, 278, 279, 280, 227,
- 227, 227, 228, 6, 6, 6, 6, 6, 281, 6, 6, 6, 282, 279, 6, 6,
- 283, 284, 284, 285, 6, 6, 6, 6, 6, 6, 6, 246, 6, 6, 6, 286,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 287, 229, 6, 6, 196, 6,
- 6, 6, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 28, 6, 6, 6, 6, 6, 28, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 176, 288, 289,
- 6, 6, 6, 6, 45, 149, 6, 6, 6, 6, 6, 6, 6, 290, 291, 71,
- 6, 6, 28, 33, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 0, 0,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 33, 33, 33, 33, 33, 33,
- 267, 267, 267, 302, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 303, 33,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 304, 33, 33, 33, 267, 303,
- 305, 279, 306, 307, 267, 308, 309, 310, 311, 312, 267, 267, 313, 267, 267, 267,
- 314, 315, 316, 317, 318, 312, 267, 267, 313, 267, 267, 267, 314, 315, 319, 320,
- 321, 267, 267, 267, 267, 267, 322, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 323, 267, 267, 267, 267, 267, 324, 267, 267, 267, 267, 303, 33, 325, 325,
- 267, 267, 267, 323, 267, 267, 267, 267, 267, 227, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 6, 6, 6, 6, 6, 6, 6, 6,
- 267, 267, 326, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 327, 267, 267, 267, 267, 267, 267, 323, 33, 6, 6, 6, 6, 6, 188,
- 6, 328, 6, 6, 4, 329, 33, 33, 6, 6, 6, 6, 6, 176, 190, 185,
- 6, 6, 6, 48, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 330, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 331, 33, 33, 33, 33, 33, 290, 6,
- 332, 333, 6, 6, 25, 182, 6, 334, 6, 6, 6, 6, 6, 6, 335, 33,
- 26, 6, 6, 6, 6, 6, 181, 0, 336, 337, 4, 165, 0, 0, 26, 338,
- 4, 44, 6, 6, 48, 339, 6, 6, 176, 0, 170, 290, 150, 150, 150, 340,
- 50, 6, 6, 6, 6, 6, 25, 0, 341, 342, 4, 343, 124, 124, 4, 344,
- 6, 6, 6, 6, 6, 61, 180, 33, 333, 345, 4, 346, 124, 124, 124, 124,
- 124, 124, 124, 124, 124, 124, 124, 124, 347, 33, 33, 348, 6, 25, 349, 33,
- 350, 350, 350, 33, 28, 28, 6, 6, 6, 6, 6, 6, 6, 33, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 351, 4, 165,
- 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353,
- 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354,
- 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353,
- 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352,
- 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353,
- 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353,
- 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353,
- 353, 352, 353, 353, 355, 33, 151, 151, 356, 357, 152, 152, 152, 152, 152, 358,
- 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 28, 33, 360, 361, 34, 362, 363, 364, 365, 34, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 155, 33, 360, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 366, 33, 33, 6, 6, 6, 6, 6, 6,
- 6, 6, 118, 6, 6, 6, 6, 6, 6, 33, 33, 33, 33, 33, 6, 367,
- 0, 0, 368, 369, 0, 0, 370, 284, 371, 372, 373, 374, 323, 375, 57, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 376,
- 377, 378, 267, 379, 267, 267, 267, 380, 267, 267, 267, 381, 382, 325, 383, 267,
- 267, 267, 267, 384, 267, 267, 267, 323, 385, 385, 385, 386, 387, 28, 33, 388,
- 6, 109, 6, 6, 28, 6, 6, 389, 6, 58, 6, 58, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 56,
- 390, 6, 6, 6, 6, 6, 391, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 28, 6, 182, 89, 33, 33, 33, 33, 33, 6, 6, 6, 6, 6, 392,
- 6, 6, 6, 139, 6, 6, 6, 6, 6, 6, 89, 33, 40, 6, 6, 182,
- 6, 6, 6, 6, 182, 393, 6, 6, 6, 56, 6, 6, 6, 6, 48, 394,
- 6, 6, 6, 395, 6, 6, 6, 6, 182, 6, 396, 33, 33, 33, 33, 33,
- 6, 6, 6, 58, 4, 165, 6, 6, 6, 6, 182, 6, 6, 6, 6, 182,
- 6, 6, 6, 6, 6, 33, 6, 6, 6, 6, 6, 6, 182, 290, 33, 33,
- 6, 6, 6, 6, 6, 6, 28, 33, 6, 6, 58, 33, 6, 33, 33, 33,
- 58, 66, 6, 6, 6, 6, 45, 397, 6, 6, 395, 6, 6, 6, 6, 6,
- 6, 6, 6, 28, 290, 6, 33, 33, 33, 33, 33, 33, 6, 6, 398, 360,
- 6, 6, 6, 399, 6, 6, 6, 400, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 22, 6, 6, 118, 6, 6, 6, 6, 6,
- 401, 402, 109, 27, 6, 6, 58, 80, 6, 89, 403, 89, 6, 6, 6, 6,
- 6, 6, 6, 6, 33, 33, 33, 33, 6, 6, 6, 6, 404, 360, 405, 33,
- 6, 6, 6, 6, 6, 6, 58, 406, 6, 6, 58, 6, 6, 6, 56, 6,
- 6, 6, 155, 407, 33, 27, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 89, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 56, 33, 6, 6, 6, 6, 6, 6, 56, 118,
- 6, 6, 6, 6, 181, 33, 4, 165, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 28,
- 6, 6, 6, 6, 6, 33, 6, 6, 48, 0, 40, 155, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 28, 33,
- 184, 6, 6, 6, 6, 6, 6, 0, 140, 396, 118, 6, 408, 4, 33, 71,
- 184, 6, 6, 6, 6, 6, 0, 409, 410, 149, 6, 6, 6, 89, 4, 165,
- 184, 6, 6, 6, 176, 0, 411, 4, 412, 33, 6, 6, 6, 6, 413, 33,
- 184, 6, 6, 6, 6, 6, 25, 0, 414, 415, 4, 416, 27, 6, 139, 33,
- 6, 6, 24, 6, 6, 181, 0, 417, 33, 33, 33, 33, 33, 33, 33, 33,
- 28, 418, 6, 45, 6, 419, 6, 6, 6, 6, 6, 176, 0, 394, 4, 165,
- 112, 64, 65, 6, 6, 66, 86, 420, 69, 81, 101, 393, 421, 422, 422, 33,
- 6, 6, 6, 6, 6, 6, 142, 0, 423, 424, 4, 425, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 0, 0, 50, 33, 4, 165, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 176, 336, 0, 426, 427, 403, 345, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 0, 0, 428, 33, 4, 165, 429, 430, 33, 33,
- 6, 6, 6, 6, 6, 25, 0, 89, 4, 165, 33, 33, 33, 33, 33, 33,
- 124, 124, 124, 431, 124, 173, 4, 432, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 181, 0, 433, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 6, 6, 6, 6, 6, 6, 6, 6, 4, 44, 56, 290,
- 33, 33, 33, 33, 6, 118, 6, 6, 6, 6, 61, 434, 435, 33, 33, 33,
- 61, 184, 6, 6, 6, 6, 25, 436, 437, 33, 61, 50, 6, 6, 6, 6,
- 6, 438, 0, 439, 440, 33, 33, 33, 6, 6, 6, 6, 6, 6, 6, 89,
- 6, 66, 6, 6, 6, 176, 180, 0, 441, 33, 4, 44, 6, 139, 442, 6,
- 6, 6, 434, 0, 0, 30, 180, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 28, 24, 6, 6, 6, 6, 443, 444, 445, 33, 4, 165, 45, 66, 6, 6,
- 6, 446, 194, 89, 4, 165, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 447, 89,
- 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 448, 449, 6, 155, 450,
- 6, 6, 6, 155, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 451, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 182, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 452, 6, 6, 6, 6,
- 453, 454, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 455,
- 6, 6, 6, 6, 6, 28, 456, 457, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 282, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 28, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 89, 6, 6, 6, 28, 4, 458, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 58, 459, 33,
- 6, 6, 6, 6, 6, 6, 140, 460, 461, 33, 4, 462, 24, 6, 6, 393,
- 6, 6, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 463, 464, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 465, 61, 0, 0, 0, 0, 0,
- 0, 71, 184, 6, 33, 33, 33, 33, 33, 33, 33, 33, 466, 33, 33, 33,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 33,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 324, 33,
- 267, 267, 267, 323, 33, 33, 33, 33, 33, 33, 467, 33, 468, 33, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 303,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 56, 6, 139,
- 6, 89, 6, 469, 170, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 58, 33,
- 6, 6, 6, 6, 28, 27, 6, 6, 6, 6, 6, 6, 142, 470, 0, 0,
- 471, 50, 6, 6, 6, 472, 6, 6, 6, 6, 6, 6, 6, 89, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 473, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 182, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 33, 6, 6, 6, 89,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 57, 6, 6, 6, 6, 6,
- 6, 6, 6, 57, 474, 475, 6, 476, 109, 6, 6, 6, 6, 6, 6, 6,
- 45, 189, 57, 57, 6, 6, 6, 477, 478, 118, 66, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 479, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 423, 25, 0, 0, 0, 0, 0, 103, 480, 6,
- 481, 482, 33, 59, 30, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 180, 0, 0, 483, 484, 394, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 139, 423, 58, 4, 343, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 6, 6, 181, 4, 485,
- 6, 6, 6, 6, 6, 6, 6, 6, 64, 6, 180, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 181, 433, 4, 486, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 27, 6,
- 6, 6, 6, 6, 6, 487, 488, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 27, 6, 6, 6, 6, 6, 6, 58, 33, 33, 33, 33, 33, 33, 33, 33,
- 109, 6, 6, 6, 489, 27, 490, 491, 492, 493, 489, 195, 489, 490, 490, 83,
- 6, 24, 6, 182, 494, 24, 6, 182, 33, 33, 33, 33, 33, 33, 155, 33,
- 227, 495, 227, 227, 227, 496, 227, 227, 227, 227, 227, 227, 227, 497, 227, 227,
- 227, 227, 227, 227, 227, 495, 267, 267, 267, 267, 267, 267, 498, 499, 499, 499,
- 500, 267, 267, 501, 267, 267, 502, 503, 504, 505, 267, 267, 267, 267, 267, 506,
- 267, 267, 267, 267, 267, 267, 267, 267, 507, 508, 509, 267, 510, 508, 508, 511,
- 512, 513, 514, 267, 515, 516, 517, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 264, 267, 518, 6, 266, 267, 519, 6, 6, 520, 267, 267, 267, 267, 521, 522,
- 267, 267, 523, 267, 267, 267, 267, 267, 267, 267, 249, 524, 267, 267, 249, 520,
- 267, 267, 267, 267, 267, 267, 267, 267, 525, 526, 6, 6, 6, 6, 527, 528,
- 267, 267, 267, 267, 529, 267, 530, 267, 509, 531, 267, 267, 267, 267, 267, 267,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 524, 267,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 266, 267, 267, 267, 267, 267,
- 6, 524, 6, 6, 6, 6, 6, 6, 6, 267, 6, 520, 6, 6, 6, 6,
- 6, 267, 6, 6, 6, 532, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 6, 533, 267, 508, 534, 267, 508, 535, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 536, 537, 267, 525, 538, 539, 267, 267, 267, 267,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 524, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 304,
- 82, 33, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33,
+/* Terminal_Punctuation. */
+static RE_UINT8 re_terminal_punctuation_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14,
+ 15, 9, 16, 17, 18, 19, 20, 21, 9, 22, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25,
+ 9, 9, 9, 9, 9, 9, 26, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_line_break_stage_4[] = {
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 22, 20, 20, 21, 16, 16,
- 19, 6, 3, 12, 9, 10, 12, 3, 1, 36, 12, 9, 8, 15, 8, 7,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 12, 12, 12, 6,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 9, 36, 12, 12,
- 12, 12, 12, 1, 18, 2, 12, 16, 16, 16, 16, 16, 16, 29, 16, 16,
- 4, 1, 10, 9, 9, 9, 12, 25, 25, 12, 25, 3, 12, 18, 12, 12,
- 10, 9, 25, 25, 17, 12, 25, 25, 25, 25, 25, 3, 25, 25, 25, 1,
- 12, 12, 12, 12, 12, 12, 12, 25, 17, 25, 25, 25, 17, 25, 12, 12,
- 25, 12, 12, 12, 12, 12, 12, 12, 25, 25, 25, 25, 12, 25, 12, 17,
- 16, 16, 16, 16, 16, 16, 16, 4, 16, 16, 16, 16, 4, 4, 4, 4,
- 4, 4, 4, 16, 16, 16, 16, 16, 0, 0, 12, 12, 12, 12, 8, 12,
- 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 0, 12, 12,
- 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16,
- 16, 16, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 0, 12, 8, 18, 0, 0, 12, 12, 9,
- 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 16,
- 12, 16, 16, 12, 16, 16, 6, 16, 0, 0, 0, 0, 0, 0, 0, 0,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, 0, 37,
- 37, 37, 37, 12, 12, 0, 0, 0, 12, 10, 10, 10, 8, 8, 12, 12,
- 16, 16, 16, 6, 16, 0, 6, 6, 11, 11, 10, 11, 11, 12, 12, 12,
- 16, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 12, 16, 16,
- 16, 16, 16, 16, 16, 12, 12, 16, 16, 12, 16, 16, 16, 16, 12, 12,
- 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 12,
- 12, 16, 12, 12, 12, 12, 12, 12, 16, 16, 16, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 16, 16, 16, 12, 0, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 12, 12, 12, 12, 8, 6, 12, 0, 0, 16, 9, 9,
- 16, 16, 12, 16, 16, 16, 16, 16, 16, 16, 16, 16, 12, 16, 16, 16,
- 12, 16, 16, 16, 16, 16, 0, 0, 12, 16, 16, 16, 0, 0, 12, 0,
- 12, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 0, 12, 12,
- 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16,
- 12, 12, 16, 16, 16, 12, 16, 16, 12, 16, 16, 16, 16, 16, 16, 16,
- 12, 12, 16, 16, 18, 18, 11, 11, 12, 16, 16, 16, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 0, 0, 12, 12, 0, 0, 12, 12, 12, 12, 12,
- 12, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 0, 0, 0, 12, 12,
- 12, 12, 0, 0, 16, 12, 16, 16, 16, 16, 16, 16, 16, 0, 0, 16,
- 16, 0, 0, 16, 16, 16, 12, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 0, 0, 12, 12, 0, 12, 12, 12, 16, 16, 0, 0, 11, 11,
- 12, 12, 10, 10, 12, 12, 12, 12, 12, 10, 12, 9, 12, 12, 16, 0,
- 0, 16, 16, 16, 0, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 12,
- 12, 0, 12, 12, 0, 12, 12, 0, 12, 12, 0, 0, 16, 0, 16, 16,
- 16, 16, 16, 0, 0, 0, 0, 16, 16, 0, 0, 16, 16, 16, 0, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 11, 11, 16, 16, 12, 12, 12, 16, 12, 0,
- 12, 0, 12, 12, 0, 12, 12, 12, 16, 16, 16, 16, 16, 16, 0, 16,
- 16, 16, 0, 16, 16, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 12, 9, 0, 0, 0, 0, 0, 0, 0, 12, 16, 16, 16, 16, 16, 16,
- 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 16, 12, 0, 12, 12, 12,
- 12, 12, 12, 0, 0, 0, 12, 12, 12, 0, 12, 12, 12, 12, 0, 0,
- 0, 12, 12, 0, 12, 0, 12, 12, 0, 0, 0, 12, 12, 0, 0, 0,
- 12, 12, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16,
- 16, 0, 16, 16, 16, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 16,
- 12, 9, 12, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 12, 12, 12,
- 12, 12, 0, 0, 0, 12, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16,
- 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17,
- 12, 16, 16, 16, 17, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12,
- 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 12, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 0, 12, 12, 12, 12, 12, 12, 16, 16, 12, 16, 16,
- 16, 0, 16, 16, 16, 16, 12, 12, 0, 0, 0, 0, 12, 12, 12, 16,
- 12, 10, 12, 12, 12, 12, 12, 12, 0, 0, 16, 16, 0, 12, 12, 12,
- 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 12, 0, 0,
- 0, 0, 16, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 0, 16, 0,
- 0, 0, 16, 16, 12, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 9,
- 24, 24, 24, 24, 24, 24, 24, 12, 11, 11, 18, 18, 0, 0, 0, 0,
- 0, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24,
- 24, 24, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 24, 24, 0, 0,
- 24, 24, 24, 24, 24, 0, 24, 0, 11, 11, 0, 0, 24, 24, 24, 24,
- 12, 17, 17, 17, 17, 12, 17, 17, 4, 17, 17, 18, 4, 6, 6, 6,
- 6, 6, 4, 12, 6, 12, 12, 12, 12, 12, 12, 12, 18, 16, 12, 16,
- 12, 16, 1, 2, 1, 2, 16, 16, 12, 12, 12, 12, 12, 0, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 16, 18, 16, 16,
- 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 16, 16, 0, 18, 18,
- 12, 12, 12, 12, 12, 12, 16, 12, 17, 17, 18, 17, 12, 12, 12, 12,
- 12, 4, 4, 0, 0, 0, 0, 0, 11, 11, 18, 18, 12, 12, 12, 12,
- 11, 11, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 12, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32,
- 33, 33, 33, 33, 33, 33, 33, 33, 12, 12, 12, 0, 0, 16, 16, 16,
- 12, 18, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0,
- 18, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 0, 0, 0,
- 12, 12, 12, 18, 18, 18, 12, 12, 12, 12, 16, 16, 16, 0, 0, 0,
- 12, 12, 16, 16, 16, 18, 18, 0, 12, 12, 16, 16, 0, 0, 0, 0,
- 12, 0, 16, 16, 0, 0, 0, 0, 24, 24, 24, 24, 18, 18, 5, 24,
- 18, 12, 18, 9, 24, 24, 0, 0, 11, 11, 0, 0, 0, 0, 0, 0,
- 12, 12, 6, 6, 18, 18, 17, 12, 6, 6, 12, 16, 16, 16, 4, 0,
- 12, 12, 12, 12, 12, 16, 16, 12, 12, 16, 12, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 0, 0, 0, 0, 12, 0, 0, 0, 6, 6, 11, 11,
- 24, 24, 24, 24, 24, 0, 0, 0, 24, 24, 24, 24, 0, 0, 0, 0,
- 24, 24, 0, 0, 0, 0, 0, 0, 11, 11, 24, 0, 0, 0, 24, 24,
- 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 0, 0, 12, 12,
- 24, 24, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24, 24, 0, 0, 16,
- 16, 16, 16, 16, 16, 16, 16, 0, 12, 12, 12, 12, 16, 16, 16, 16,
- 12, 12, 12, 12, 0, 0, 0, 0, 11, 11, 18, 18, 12, 18, 18, 18,
- 16, 16, 16, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 12, 12,
- 0, 0, 0, 18, 18, 18, 18, 18, 11, 11, 0, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 18, 18, 12, 12, 12, 0, 0, 12, 12, 12,
- 16, 16, 16, 12, 16, 16, 16, 16, 16, 12, 12, 12, 12, 16, 12, 12,
- 12, 12, 12, 12, 16, 12, 12, 16, 16, 16, 12, 0, 0, 0, 0, 0,
- 16, 16, 0, 16, 16, 16, 16, 16, 0, 12, 0, 12, 0, 12, 0, 12,
- 12, 12, 12, 12, 0, 0, 12, 12, 0, 0, 12, 12, 12, 0, 12, 12,
- 12, 12, 12, 12, 12, 17, 12, 0, 18, 18, 18, 18, 18, 18, 18, 4,
- 18, 18, 18, 28, 16, 42, 16, 16, 18, 4, 18, 18, 26, 25, 25, 12,
- 3, 3, 1, 3, 3, 3, 1, 3, 25, 25, 12, 12, 14, 14, 14, 18,
- 20, 20, 16, 16, 16, 16, 16, 4, 10, 10, 10, 10, 10, 10, 10, 10,
- 12, 3, 3, 25, 5, 5, 12, 12, 12, 12, 12, 12, 8, 1, 2, 5,
- 5, 5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 12,
- 18, 18, 18, 18, 12, 18, 18, 18, 30, 12, 12, 12, 12, 0, 16, 16,
- 12, 12, 0, 0, 25, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 25,
- 12, 25, 25, 25, 25, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 10, 9, 9, 10, 9,
- 16, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 10, 12, 25, 12, 12,
- 12, 12, 12, 25, 12, 12, 9, 12, 12, 25, 25, 12, 12, 12, 12, 12,
- 12, 12, 12, 25, 12, 12, 12, 12, 12, 12, 12, 12, 25, 25, 12, 12,
- 12, 12, 12, 25, 12, 12, 25, 12, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 12, 12, 12, 12, 25, 25, 12, 12, 12, 12, 12, 12,
- 12, 25, 12, 12, 0, 0, 0, 0, 12, 12, 25, 12, 25, 12, 12, 12,
- 25, 12, 25, 25, 12, 12, 12, 25, 25, 12, 12, 25, 12, 12, 12, 25,
- 12, 25, 9, 9, 12, 25, 12, 12, 12, 12, 25, 12, 12, 25, 25, 25,
- 25, 12, 12, 25, 12, 25, 12, 25, 25, 25, 25, 25, 25, 12, 25, 12,
- 12, 12, 12, 12, 25, 25, 25, 25, 25, 12, 12, 12, 25, 12, 12, 12,
- 12, 12, 25, 12, 12, 12, 12, 12, 25, 25, 12, 12, 25, 25, 25, 25,
- 12, 12, 25, 25, 12, 12, 25, 25, 12, 12, 12, 12, 12, 25, 12, 12,
- 12, 25, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14,
- 1, 2, 1, 2, 12, 12, 12, 12, 12, 12, 13, 13, 12, 12, 12, 12,
- 12, 1, 2, 12, 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12,
- 25, 25, 25, 25, 25, 25, 25, 12, 25, 25, 25, 25, 25, 12, 12, 12,
- 12, 12, 25, 25, 25, 25, 12, 12, 25, 25, 12, 25, 25, 25, 25, 25,
- 25, 25, 12, 12, 12, 12, 25, 25, 25, 12, 12, 25, 12, 12, 25, 25,
- 13, 13, 13, 13, 12, 25, 25, 12, 12, 25, 12, 12, 12, 12, 25, 25,
- 12, 12, 12, 12, 13, 13, 25, 25, 13, 12, 13, 13, 13, 40, 13, 13,
- 12, 13, 13, 13, 12, 12, 12, 12, 25, 12, 25, 12, 12, 12, 12, 12,
- 25, 25, 12, 25, 25, 25, 12, 25, 13, 25, 25, 12, 25, 25, 12, 25,
- 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 25, 25,
- 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 25, 25, 25, 25, 13, 12, 13, 13, 13, 25, 13, 13, 25, 25, 25,
- 13, 13, 25, 25, 13, 25, 25, 13, 13, 13, 12, 25, 12, 12, 12, 12,
- 25, 25, 13, 25, 25, 25, 25, 25, 25, 13, 13, 13, 13, 13, 25, 13,
- 13, 40, 13, 25, 25, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12,
- 13, 13, 40, 40, 40, 40, 12, 12, 12, 12, 12, 3, 3, 3, 3, 3,
- 3, 12, 6, 6, 13, 12, 12, 12, 1, 2, 1, 2, 1, 2, 1, 2,
- 1, 2, 1, 2, 1, 2, 25, 25, 12, 12, 12, 12, 12, 1, 2, 12,
- 12, 12, 12, 12, 12, 12, 1, 2, 12, 12, 12, 1, 2, 1, 2, 1,
- 2, 1, 2, 1, 2, 1, 2, 1, 2, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 1, 2, 12, 12, 12, 12, 12, 12, 12, 25, 25, 25,
- 16, 16, 12, 12, 0, 0, 0, 0, 0, 6, 18, 18, 18, 12, 6, 18,
- 0, 0, 0, 0, 0, 0, 0, 12, 18, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 18, 18,
- 18, 18, 18, 18, 18, 18, 12, 18, 1, 18, 12, 12, 3, 3, 12, 12,
- 3, 3, 1, 2, 1, 2, 1, 2, 1, 2, 18, 18, 18, 18, 6, 12,
- 18, 18, 12, 18, 18, 12, 12, 12, 12, 12, 26, 26, 18, 18, 18, 12,
- 18, 18, 1, 18, 18, 18, 18, 18, 18, 18, 18, 12, 18, 12, 18, 18,
- 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 13, 0, 0, 18, 2, 2, 13, 13, 5, 13, 13,
- 1, 2, 13, 13, 1, 2, 1, 2, 1, 2, 1, 2, 5, 1, 2, 2,
- 13, 13, 16, 16, 16, 16, 16, 16, 13, 13, 13, 13, 13, 16, 13, 13,
- 13, 13, 13, 5, 5, 13, 13, 13, 0, 38, 13, 38, 13, 38, 13, 38,
- 13, 38, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38, 13, 13, 13, 13,
- 13, 13, 13, 38, 13, 38, 13, 38, 13, 13, 13, 13, 13, 13, 38, 13,
- 13, 13, 13, 13, 13, 38, 38, 0, 0, 16, 16, 5, 5, 5, 5, 13,
- 5, 38, 13, 38, 13, 38, 13, 38, 13, 13, 13, 13, 13, 38, 38, 13,
- 13, 13, 13, 5, 38, 5, 5, 13, 0, 0, 0, 0, 0, 13, 13, 13,
- 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
- 13, 13, 13, 0, 0, 0, 0, 0, 38, 38, 38, 38, 38, 38, 38, 38,
- 13, 13, 13, 13, 13, 5, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
- 12, 12, 12, 12, 12, 18, 6, 18, 11, 11, 12, 12, 0, 0, 0, 0,
- 16, 16, 12, 18, 18, 18, 18, 18, 0, 0, 12, 12, 12, 12, 12, 0,
- 12, 12, 16, 12, 12, 12, 16, 12, 12, 12, 12, 16, 12, 12, 12, 12,
- 10, 12, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 17, 17, 6, 6,
- 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18,
- 12, 12, 12, 12, 17, 12, 12, 16, 16, 16, 16, 16, 16, 16, 18, 18,
- 31, 31, 31, 31, 31, 0, 0, 0, 16, 12, 12, 12, 12, 12, 12, 18,
- 18, 18, 12, 12, 12, 12, 0, 12, 11, 11, 0, 0, 0, 0, 12, 12,
- 11, 11, 24, 24, 24, 24, 24, 0, 12, 12, 12, 12, 16, 16, 0, 0,
- 11, 11, 0, 0, 12, 18, 18, 18, 24, 24, 24, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 24, 24, 24, 24, 18, 18, 12, 12, 12, 16, 16, 0,
- 0, 12, 12, 12, 12, 12, 12, 0, 16, 16, 16, 18, 16, 16, 0, 0,
- 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 34, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27,
- 0, 0, 0, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 37, 16, 37,
- 37, 12, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0,
- 37, 37, 37, 37, 37, 0, 37, 0, 37, 37, 0, 37, 37, 0, 37, 37,
- 12, 12, 12, 12, 12, 12, 2, 1, 12, 12, 12, 12, 10, 12, 0, 0,
- 8, 2, 2, 8, 8, 6, 6, 1, 2, 14, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 1, 2, 1, 2, 1, 2, 1, 2, 13, 13, 1,
- 2, 13, 13, 13, 13, 13, 13, 13, 2, 13, 2, 0, 5, 5, 6, 6,
- 13, 1, 2, 1, 2, 1, 2, 13, 13, 9, 10, 13, 0, 0, 0, 0,
- 12, 12, 12, 12, 12, 0, 0, 30, 0, 6, 13, 13, 9, 10, 13, 13,
- 1, 2, 13, 13, 2, 13, 2, 13, 13, 13, 5, 5, 13, 13, 13, 6,
- 13, 13, 13, 1, 13, 2, 13, 13, 13, 13, 13, 1, 13, 2, 13, 1,
- 2, 2, 1, 2, 2, 5, 13, 38, 38, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 5, 5, 0, 0, 13, 13, 13, 13, 13, 13,
- 0, 0, 13, 13, 13, 0, 0, 0, 10, 9, 13, 13, 13, 9, 9, 0,
- 0, 16, 16, 16, 23, 25, 0, 0, 12, 12, 12, 0, 12, 12, 0, 12,
- 18, 18, 18, 0, 0, 0, 0, 12, 12, 12, 12, 12, 0, 0, 0, 12,
- 12, 12, 12, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12,
- 16, 16, 16, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 0, 18,
- 18, 12, 12, 12, 12, 12, 0, 0, 12, 0, 0, 0, 12, 0, 0, 12,
- 12, 12, 12, 0, 12, 12, 0, 0, 12, 12, 12, 12, 0, 0, 0, 18,
- 12, 12, 0, 0, 0, 0, 0, 12, 12, 16, 16, 16, 0, 16, 16, 0,
- 0, 0, 0, 0, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18,
- 12, 12, 12, 12, 12, 16, 16, 0, 18, 18, 18, 18, 18, 18, 14, 0,
- 0, 18, 18, 18, 18, 18, 18, 18, 0, 12, 12, 12, 12, 0, 0, 0,
- 12, 12, 12, 12, 12, 12, 11, 11, 16, 16, 16, 12, 12, 12, 18, 18,
- 18, 18, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 11, 11,
- 18, 18, 18, 18, 12, 16, 16, 0, 12, 12, 12, 16, 12, 17, 12, 0,
- 16, 12, 12, 12, 12, 18, 18, 12, 18, 16, 16, 16, 16, 12, 0, 0,
- 11, 11, 12, 17, 12, 18, 18, 18, 18, 18, 12, 18, 18, 12, 16, 0,
- 12, 0, 12, 12, 12, 12, 0, 12, 12, 18, 0, 0, 0, 0, 0, 0,
- 12, 12, 0, 16, 16, 12, 16, 16, 12, 12, 16, 16, 0, 0, 16, 16,
- 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 12,
- 12, 12, 12, 18, 18, 18, 18, 12, 11, 11, 0, 18, 0, 12, 16, 12,
- 16, 17, 18, 18, 6, 6, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18,
- 16, 18, 18, 12, 12, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 0, 0, 0, 24, 24, 24, 0, 0, 24, 24, 24,
- 11, 11, 24, 24, 18, 18, 18, 24, 16, 16, 16, 12, 0, 0, 0, 0,
- 0, 0, 16, 16, 16, 16, 16, 16, 16, 12, 17, 12, 16, 0, 0, 0,
- 16, 16, 12, 16, 16, 16, 16, 17, 12, 18, 18, 18, 18, 17, 12, 16,
- 12, 12, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 12, 17, 17,
- 17, 18, 18, 0, 0, 0, 0, 0, 12, 18, 18, 18, 18, 18, 0, 0,
- 17, 6, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 0,
- 0, 0, 16, 0, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 12, 16,
- 12, 12, 16, 16, 16, 16, 16, 0, 12, 12, 12, 16, 16, 16, 16, 12,
- 12, 12, 12, 12, 12, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12,
- 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0,
- 1, 1, 1, 2, 2, 2, 12, 12, 12, 12, 2, 12, 12, 12, 1, 2,
- 1, 2, 12, 12, 12, 12, 12, 12, 12, 1, 2, 2, 12, 12, 12, 12,
- 4, 4, 4, 4, 4, 4, 4, 1, 2, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 0, 0, 0, 0, 18, 18, 16, 16, 16, 16, 16, 18, 0, 0,
- 18, 18, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 12, 0, 0,
- 11, 11, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18,
- 18, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0, 16,
- 5, 5, 5, 5, 0, 0, 0, 0, 38, 38, 38, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 38, 38, 38, 38, 12, 12, 0, 0, 12, 16, 16, 18,
- 16, 16, 12, 12, 12, 16, 16, 16, 16, 16, 16, 12, 12, 16, 16, 16,
- 12, 12, 16, 16, 16, 16, 12, 12, 12, 12, 16, 16, 16, 12, 0, 0,
- 0, 0, 12, 0, 0, 12, 12, 0, 0, 12, 12, 12, 12, 0, 12, 12,
- 12, 12, 0, 12, 0, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 0,
- 12, 12, 12, 12, 12, 0, 12, 0, 12, 12, 12, 12, 0, 0, 11, 11,
- 12, 12, 12, 12, 12, 16, 12, 12, 12, 12, 12, 12, 16, 12, 12, 18,
- 18, 18, 18, 12, 0, 0, 0, 0, 16, 0, 0, 16, 16, 16, 16, 16,
- 16, 16, 0, 16, 16, 0, 16, 16, 11, 11, 0, 0, 0, 0, 0, 9,
- 11, 11, 0, 0, 0, 0, 1, 1, 12, 12, 12, 12, 10, 12, 12, 12,
- 10, 12, 12, 12, 12, 0, 0, 0, 0, 12, 12, 0, 12, 0, 0, 12,
- 12, 12, 12, 0, 12, 12, 12, 12, 0, 12, 0, 12, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 12, 12,
- 0, 12, 12, 12, 0, 12, 12, 12, 25, 25, 25, 25, 25, 13, 13, 13,
- 25, 25, 25, 25, 25, 25, 12, 12, 25, 25, 12, 12, 12, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
- 13, 13, 13, 13, 13, 40, 13, 13, 13, 13, 13, 13, 12, 12, 13, 13,
- 13, 13, 13, 13, 13, 12, 12, 13, 13, 13, 13, 13, 12, 13, 13, 13,
- 13, 13, 40, 40, 40, 13, 13, 40, 13, 13, 40, 40, 40, 13, 13, 13,
- 13, 13, 13, 41, 41, 41, 41, 41, 13, 13, 40, 40, 13, 13, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 40, 40, 40, 13, 13, 13, 40, 13, 13, 13,
- 13, 40, 40, 40, 13, 40, 40, 40, 13, 13, 13, 13, 13, 13, 13, 40,
- 13, 40, 13, 13, 13, 13, 13, 13, 12, 13, 12, 13, 12, 13, 13, 13,
- 13, 13, 40, 13, 13, 13, 13, 12, 13, 12, 12, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 12, 13, 13, 12, 12, 12, 12, 12, 12,
- 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 40, 40, 13, 13,
- 13, 13, 40, 13, 13, 13, 13, 13, 40, 13, 13, 13, 13, 40, 40, 13,
- 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 40, 40, 40,
- 13, 13, 13, 40, 40, 40, 40, 40, 12, 12, 12, 12, 12, 12, 3, 3,
- 3, 5, 5, 5, 12, 12, 12, 12, 13, 13, 13, 40, 13, 13, 13, 13,
- 13, 13, 13, 13, 40, 40, 40, 13, 13, 13, 13, 13, 40, 13, 13, 13,
- 12, 12, 12, 12, 12, 12, 13, 13, 12, 12, 12, 12, 13, 13, 13, 40,
- 13, 13, 13, 13, 13, 13, 40, 13, 40, 40, 13, 13, 40, 40, 40, 13,
- 13, 13, 13, 13, 13, 40, 40, 13, 40, 40, 13, 40, 13, 13, 13, 13,
- 13, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 13, 13,
+static RE_UINT8 re_terminal_punctuation_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0,
+ 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 9,
+ 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 19, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
+ 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 26, 0,
+ 0, 0, 35, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 0, 0, 0, 0, 0, 1, 0, 0, 40, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 41, 0,
+ 0, 0, 42, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32, 0, 0, 0, 0, 43, 0, 44, 0, 0, 45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0,
+ 0, 0, 47, 0, 0, 24, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0,
+ 0, 51, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
+ 0, 0, 29, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0,
+ 0, 0, 56, 0, 57, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 49, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 0, 0, 0, 61, 0, 62, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Line_Break: 12816 bytes. */
-
-RE_UINT32 re_get_line_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_line_break_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_line_break_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_line_break_stage_3[pos + f] << 3;
- value = re_line_break_stage_4[pos + code];
-
- return value;
-}
-
-/* Numeric_Type. */
-
-static RE_UINT8 re_numeric_type_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 8,
- 15, 16, 17, 8, 18, 19, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20,
- 21, 22, 23, 24, 25, 8, 8, 8, 8, 8, 8, 8, 8, 26, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 27, 8, 28, 29, 30, 8,
- 31, 32, 8, 8, 33, 34, 8, 35, 8, 8, 8, 8, 36, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 37,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+static RE_UINT8 re_terminal_punctuation_table_3[] = {
+ 0, 0, 0, 0, 2, 80, 0, 140, 0, 0, 0, 64, 128, 0, 0, 0,
+ 0, 2, 0, 0, 8, 0, 0, 0, 0, 16, 0, 200, 0, 0, 16, 0,
+ 255, 23, 0, 0, 0, 0, 0, 3, 0, 0, 255, 127, 48, 0, 0, 0,
+ 0, 0, 0, 12, 0, 225, 7, 0, 0, 12, 0, 0, 254, 1, 0, 0,
+ 0, 64, 0, 0, 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 4,
+ 60, 3, 0, 0, 0, 15, 0, 0, 0, 0, 0, 236, 0, 0, 0, 248,
+ 0, 0, 0, 192, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
+ 2, 208, 0, 0, 6, 0, 0, 0, 0, 224, 0, 0, 0, 0, 248, 0,
+ 0, 0, 192, 0, 0, 192, 0, 0, 0, 128, 0, 0, 0, 0, 0, 224,
+ 0, 0, 0, 128, 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 247, 0,
+ 18, 0, 0, 0, 0, 0, 1, 0, 0, 0, 128, 0, 0, 0, 63, 0,
+ 0, 0, 0, 252, 0, 0, 0, 30, 0, 0, 224, 3, 128, 63, 0, 0,
+ 3, 0, 0, 0, 14, 0, 0, 0, 96, 32, 0, 192, 0, 0, 0, 31,
+ 0, 56, 0, 12, 60, 254, 255, 0, 0, 0, 0, 112, 80, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 24, 0, 0, 2, 0, 0, 0, 128, 1,
+ 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 128, 3, 16, 0, 0, 0,
+ 128, 7, 0, 0
};
-static RE_UINT8 re_numeric_type_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 5, 1, 6, 1, 5, 1, 5, 1, 7, 1, 8,
- 1, 9, 1, 5, 1, 10, 1, 5, 1, 11, 1, 11, 12, 1, 1, 1,
- 1, 4, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 15,
- 11, 1, 1, 1, 1, 16, 1, 17, 1, 1, 18, 1, 1, 11, 0, 1,
- 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 19, 20, 1, 1, 21, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 23, 24, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 27, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 29, 1, 1, 1, 1, 1, 30, 1, 31, 32, 33, 1, 1, 1, 1, 1,
- 34, 1, 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 38, 39, 40, 41, 37, 42, 1, 1,
- 1, 1, 1, 1, 43, 44, 1, 1, 1, 1, 1, 1, 1, 45, 1, 46,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1, 1,
- 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 50, 51, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 53, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 55, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 1, 1, 1, 1, 1,
- 1, 1, 55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 58, 1, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 59, 60, 1, 61, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 62, 1, 1, 1, 1,
- 63, 1, 1, 11, 4, 1, 1, 64, 1, 11, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 65, 66, 67, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1,
- 1, 1, 1, 1, 68, 69, 70, 1, 1, 1, 1, 71, 72, 73, 1, 74,
- 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 75, 76, 77, 78, 1, 79, 80, 1, 81, 82, 83, 1, 84, 85, 1,
- 1, 1, 1, 86, 0, 1, 1, 1, 1, 87, 1, 1, 88, 89, 1, 1,
- 1, 90, 1, 0, 91, 1, 1, 92, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 11, 1, 11, 1, 1, 1, 1, 1, 11, 1, 4, 93, 1, 1, 1,
- 1, 1, 1, 94, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 95, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 96,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 97, 98, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 99, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 100, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 101, 1, 102, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103,
- 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 104, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 105, 106, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 109, 110, 1, 111, 59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 36, 1, 112, 1, 1, 1, 1, 113, 114, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 115, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 116, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 117, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 115, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_terminal_punctuation(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_numeric_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 1, 2, 0, 0,
- 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 0, 0,
- 0, 0, 0, 0, 5, 1, 6, 7, 0, 0, 0, 0, 5, 1, 8, 0,
- 0, 0, 0, 0, 5, 1, 9, 0, 0, 0, 0, 0, 5, 1, 0, 10,
- 0, 0, 0, 10, 5, 1, 11, 12, 0, 0, 1, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 13, 14, 0, 0, 0, 0, 0, 0, 15, 16, 17,
- 0, 0, 0, 0, 0, 18, 12, 0, 0, 0, 0, 0, 1, 2, 11, 7,
- 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 0, 0, 0, 0,
- 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21,
- 22, 21, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11,
- 23, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 24, 25, 26,
- 11, 22, 24, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29,
- 0, 0, 0, 0, 0, 0, 30, 31, 22, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, 0, 36, 7, 0, 9,
- 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 0, 0,
- 0, 11, 36, 11, 0, 0, 0, 0, 11, 7, 0, 0, 0, 0, 36, 11,
- 34, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,
- 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0,
- 0, 42, 43, 0, 0, 0, 0, 35, 12, 0, 0, 35, 0, 12, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 0, 42, 0, 0, 0, 0, 0, 0, 0,
- 44, 0, 0, 0, 0, 45, 0, 0, 46, 42, 0, 0, 0, 0, 0, 0,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 41, 41, 0, 0, 0, 0, 0, 0, 0, 39,
- 0, 0, 0, 0, 0, 0, 0, 18, 0, 48, 12, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 44, 0, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0,
- 0, 0, 0, 0, 0, 44, 38, 0, 0, 0, 0, 0, 41, 0, 0, 0,
- 44, 42, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 44, 0,
- 0, 0, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 0, 0, 0, 38, 38, 12,
- 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 50, 0, 0, 0, 0, 34,
- 35, 11, 11, 11, 11, 11, 14, 0, 11, 11, 11, 11, 11, 11, 11, 12,
- 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 11, 11, 14,
- 0, 0, 0, 0, 14, 0, 0, 0, 41, 39, 0, 0, 0, 0, 0, 0,
- 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 36,
- 0, 0, 0, 0, 35, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
- 0, 0, 18, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 11, 11, 8, 11, 11, 11, 11, 11, 55, 12, 0, 0, 0, 0, 0, 56,
- 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0,
- 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 0, 0, 36, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 22, 24, 11, 10,
- 0, 0, 0, 57, 10, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 0, 0, 58, 59, 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1,
- 0, 0, 1, 2, 36, 11, 17, 0, 0, 0, 0, 0, 0, 0, 1, 61,
- 0, 0, 0, 0, 1, 13, 9, 0, 0, 0, 1, 13, 11, 17, 0, 0,
- 11, 11, 17, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 10, 0, 0, 0, 0, 1, 62, 7, 0, 0, 0,
- 11, 11, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 14, 0,
- 0, 0, 0, 0, 11, 11, 11, 12, 0, 5, 1, 1, 1, 1, 1, 1,
- 35, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 11,
- 11, 11, 11, 11, 11, 63, 47, 0, 36, 11, 11, 11, 11, 64, 11, 49,
- 22, 65, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
- 38, 42, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 34,
- 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0,
- 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_numeric_type_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0,
- 0, 2, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3,
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 2, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 1, 1, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
- 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0,
- 3, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 1, 1, 0, 0, 0,
-};
+ v = re_terminal_punctuation_table_1[field_2];
+ v = re_terminal_punctuation_table_2[(v << 5) | field_1];
+ v = re_terminal_punctuation_table_3[(v << 2) | field_0];
-/* Numeric_Type: 3232 bytes. */
-
-RE_UINT32 re_get_numeric_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_numeric_type_stage_1[f] << 5;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_numeric_type_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_numeric_type_stage_3[pos + f] << 3;
- value = re_numeric_type_stage_4[pos + code];
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Numeric_Value. */
-
-static RE_UINT8 re_numeric_value_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 8,
- 15, 16, 17, 8, 18, 19, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20,
- 21, 22, 23, 24, 25, 8, 8, 8, 8, 8, 8, 8, 8, 26, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 27, 8, 28, 29, 30, 8,
- 31, 32, 8, 8, 33, 34, 8, 35, 8, 8, 8, 8, 36, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 37,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+/* Unified_Ideograph. */
+static RE_UINT8 re_unified_ideograph_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 6, 7, 1,
+ 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_numeric_value_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 5, 1, 6, 1, 5, 1, 5, 1, 7, 1, 8,
- 1, 9, 1, 5, 1, 10, 1, 5, 1, 11, 1, 11, 12, 1, 1, 1,
- 1, 4, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 15,
- 11, 1, 1, 1, 1, 16, 1, 17, 1, 1, 18, 1, 1, 11, 0, 1,
- 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 19, 4, 1, 1, 20, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 22, 23, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 28, 1, 1, 1, 1, 1, 29, 1, 30, 31, 32, 1, 1, 1, 1, 1,
- 33, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 37, 38, 39, 40, 41, 42, 1, 1,
- 1, 1, 1, 1, 43, 44, 1, 1, 1, 1, 1, 1, 1, 45, 1, 46,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1, 1,
- 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 50, 51, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 53, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 55, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1, 1,
- 1, 1, 58, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 60, 1, 61, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 62, 63, 1, 64, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 65, 1, 1, 1, 1,
- 66, 1, 1, 11, 4, 1, 1, 67, 1, 11, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 68, 69, 70, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1,
- 1, 1, 1, 1, 71, 72, 73, 1, 1, 1, 1, 74, 75, 76, 1, 77,
- 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 78, 79, 80, 81, 1, 82, 83, 1, 84, 85, 86, 1, 87, 88, 1,
- 1, 1, 1, 89, 0, 1, 1, 1, 1, 90, 1, 1, 91, 92, 1, 1,
- 1, 93, 1, 0, 94, 1, 1, 95, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 11, 1, 11, 1, 1, 1, 1, 1, 11, 1, 4, 96, 1, 1, 1,
- 1, 1, 1, 97, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 98, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 99,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 100, 101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 102, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 104, 1, 105, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106,
- 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 107, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 108, 109, 1, 110, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 111, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 112, 113, 1, 114, 115, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 116, 1, 117, 1, 1, 1, 1, 118, 119, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 120, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 122, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 124, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_unified_ideograph_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 5, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1,
+ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_numeric_value_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 1, 2, 0, 0,
- 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0,
- 0, 0, 0, 0, 5, 6, 7, 8, 0, 0, 0, 0, 5, 6, 9, 0,
- 0, 0, 0, 0, 5, 6, 10, 0, 0, 0, 0, 0, 5, 6, 0, 11,
- 0, 0, 0, 12, 5, 6, 13, 14, 0, 0, 1, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 15, 16, 0, 0, 0, 0, 0, 0, 17, 18, 19,
- 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 1, 2, 1, 2,
- 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 22, 0, 0, 0, 0,
- 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2,
- 0, 0, 24, 25, 26, 27, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 30, 31, 32, 33, 26, 30, 34, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 0, 0, 0, 38, 39,
- 26, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,
- 43, 0, 0, 0, 17, 2, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 46, 0, 0, 0, 47, 48, 49, 0, 0, 0, 0,
- 26, 46, 0, 0, 0, 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0,
- 0, 55, 0, 0, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 60, 0, 0, 0, 0, 61,
- 62, 0, 0, 63, 0, 64, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0,
- 67, 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0,
- 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 73, 73, 0, 0, 0, 0, 0, 0, 0, 74,
- 0, 0, 0, 0, 0, 0, 0, 75, 0, 76, 77, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0,
- 0, 0, 0, 0, 0, 86, 53, 0, 0, 0, 0, 0, 0, 0, 77, 0,
- 0, 0, 0, 0, 87, 0, 0, 0, 88, 89, 0, 0, 0, 0, 0, 90,
- 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 38, 92, 0, 0,
- 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 1, 2, 0, 0, 1, 2,
- 0, 0, 0, 0, 0, 94, 95, 77, 0, 0, 0, 0, 0, 0, 96, 0,
- 0, 0, 97, 0, 0, 0, 0, 98, 99, 6, 47, 100, 101, 102, 103, 0,
- 104, 105, 106, 107, 108, 109, 110, 111, 0, 112, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 18, 113, 114, 0, 0, 0, 0, 115, 0, 0, 0,
- 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0,
- 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 99, 121, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 124, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 125, 26, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 133, 0, 0, 0, 133,
- 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138,
- 0, 0, 0, 0, 26, 126, 139, 140, 0, 0, 0, 141, 142, 0, 0, 0,
- 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 145, 146, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 1, 2, 17, 18, 147, 0,
- 0, 0, 0, 0, 0, 0, 1, 148, 0, 0, 0, 0, 1, 18, 149, 0,
- 0, 0, 1, 150, 145, 151, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0,
- 6, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 0, 0,
- 0, 0, 1, 168, 169, 0, 0, 0, 1, 170, 171, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 170, 172, 0, 0, 0, 0, 0, 26, 126, 173, 174,
- 0, 5, 6, 1, 175, 176, 177, 6, 99, 6, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 18, 113, 178, 179, 180, 181, 182, 183, 0,
- 17, 18, 113, 178, 179, 184, 39, 185, 186, 187, 0, 0, 0, 0, 0, 0,
- 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0,
- 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0,
- 0, 0, 0, 0, 0, 74, 0, 0, 192, 70, 0, 70, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 0, 57, 0, 0, 0, 0,
- 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0,
- 0, 0, 196, 0, 0, 0, 0, 0,
+static RE_UINT8 re_unified_ideograph_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 31, 0, 192, 26, 128,
+ 154, 3, 0, 0, 255, 255, 255, 63, 255, 255, 31, 0, 3, 0, 255, 255,
+ 1, 0, 0, 0, 255, 7, 0, 0
};
-static RE_UINT8 re_numeric_value_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 37, 39, 41, 43, 45, 47, 49,
- 51, 53, 0, 0, 0, 0, 0, 0, 0, 0, 39, 41, 0, 0, 0, 0,
- 0, 37, 0, 0, 22, 27, 32, 0, 0, 0, 0, 0, 0, 0, 2, 37,
- 39, 41, 43, 45, 47, 49, 51, 53, 0, 0, 0, 0, 12, 16, 20, 22,
- 32, 60, 0, 0, 0, 0, 0, 0, 0, 0, 22, 27, 32, 12, 16, 20,
- 54, 99, 108, 0, 0, 0, 0, 0, 2, 37, 39, 41, 37, 39, 41, 0,
- 4, 7, 9, 11, 14, 18, 21, 0, 54, 99, 108, 22, 27, 32, 12, 16,
- 20, 0, 0, 0, 0, 0, 0, 0, 51, 53, 27, 38, 40, 42, 44, 46,
- 48, 50, 52, 1, 0, 0, 0, 0, 0, 37, 39, 41, 43, 45, 47, 49,
- 51, 53, 54, 64, 74, 84, 94, 95, 96, 97, 98, 99, 117, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0,
- 51, 53, 37, 0, 0, 0, 0, 0, 2, 0, 0, 0, 43, 45, 47, 49,
- 17, 15, 14, 23, 31, 21, 25, 29, 33, 19, 34, 16, 24, 30, 35, 37,
- 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 55, 56, 94, 99, 103, 108,
- 108, 112, 117, 0, 0, 47, 94, 121, 126, 2, 0, 0, 0, 0, 0, 0,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 37, 39, 41, 43,
- 45, 47, 49, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 2, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 2,
- 0, 0, 0, 0, 0, 0, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54,
- 53, 54, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 54, 64, 74, 0, 0, 0, 0, 0, 0, 0, 37, 39, 41, 43, 0, 0,
- 53, 54, 0, 0, 0, 0, 0, 0, 54, 64, 74, 84, 94, 95, 96, 97,
- 0, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 0, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0,
- 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0,
- 37, 0, 0, 49, 0, 0, 0, 117, 0, 41, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
- 0, 0, 0, 0, 45, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 140,
- 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
- 41, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
- 0, 39, 0, 51, 0, 47, 0, 0, 0, 54, 0, 108, 64, 74, 0, 0,
- 0, 0, 0, 0, 84, 0, 0, 0, 0, 41, 41, 41, 41, 0, 0, 0,
- 0, 0, 0, 43, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0,
- 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 64,
- 0, 0, 0, 0, 37, 39, 41, 0, 39, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 51, 0, 0, 0,
- 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 99, 0,
- 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 117, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 39, 0, 0, 108, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 99, 0, 0, 0,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 41, 43, 45, 47, 49, 51, 53, 2, 22, 27, 32, 12, 16, 20, 0, 0,
- 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 47, 0, 47, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
- 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0,
- 22, 27, 37, 45, 94, 103, 112, 121, 45, 54, 94, 99, 103, 108, 112, 45,
- 54, 94, 99, 103, 108, 117, 121, 54, 37, 37, 37, 39, 39, 39, 39, 45,
- 54, 54, 54, 54, 54, 74, 94, 94, 94, 94, 99, 101, 103, 103, 103, 103,
- 103, 108, 112, 45, 94, 27, 27, 31, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 22, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 0, 0, 0, 0, 37, 45, 54, 94, 0, 0, 0, 0,
- 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0,
- 0, 37, 39, 54, 64, 99, 0, 0, 37, 39, 41, 54, 64, 99, 108, 117,
- 0, 37, 39, 41, 43, 45, 54, 64, 39, 41, 43, 43, 45, 54, 64, 99,
- 0, 0, 0, 37, 45, 54, 64, 99, 0, 0, 0, 0, 0, 0, 37, 54,
- 64, 99, 39, 41, 0, 0, 0, 0, 0, 0, 0, 0, 36, 27, 0, 0,
- 53, 54, 64, 74, 84, 94, 95, 96, 0, 0, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 133, 134, 135, 136, 13, 19,
- 22, 23, 26, 27, 28, 31, 32, 34, 37, 39, 41, 43, 54, 64, 99, 108,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 94, 0,
- 0, 0, 0, 0, 0, 37, 54, 64, 0, 37, 39, 41, 43, 54, 64, 99,
- 0, 0, 37, 45, 54, 94, 99, 108, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 27, 22, 23, 31, 0, 0, 0, 0, 0, 0, 37, 39, 41,
- 43, 45, 54, 64, 74, 99, 27, 0, 0, 37, 54, 64, 99, 0, 0, 0,
- 0, 0, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 64, 74, 84, 94,
- 95, 96, 97, 98, 99, 108, 2, 37, 96, 97, 98, 99, 108, 0, 0, 0,
- 51, 53, 54, 64, 0, 0, 0, 0, 96, 97, 98, 0, 0, 0, 0, 0,
- 51, 53, 37, 39, 41, 43, 45, 47, 95, 96, 97, 98, 99, 0, 0, 0,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 14, 16, 18, 20, 21,
- 22, 27, 27, 32, 3, 0, 0, 0, 41, 43, 45, 47, 49, 51, 53, 43,
- 45, 47, 49, 51, 53, 37, 39, 41, 43, 45, 47, 49, 51, 53, 37, 39,
- 41, 43, 45, 39, 41, 41, 43, 45, 47, 49, 51, 53, 37, 39, 41, 41,
- 43, 45, 128, 131, 37, 39, 41, 41, 43, 45, 41, 41, 43, 43, 43, 43,
- 47, 49, 49, 49, 51, 51, 53, 53, 53, 53, 39, 41, 43, 45, 47, 37,
- 39, 41, 43, 43, 45, 45, 39, 41, 37, 39, 23, 31, 34, 23, 31, 16,
- 22, 19, 22, 22, 27, 23, 31, 84, 94, 43, 45, 47, 49, 51, 53, 0,
- 51, 53, 0, 54, 99, 117, 137, 140, 141, 142, 0, 0, 0, 0, 0, 0,
- 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 37, 39, 41, 0,
- 60, 61, 62, 63, 0, 0, 0, 0, 97, 98, 37, 39, 41, 43, 45, 37,
- 45, 0, 0, 0, 0, 0, 0, 0, 51, 53, 2, 37, 39, 41, 43, 45,
- 47, 49, 51, 53, 2, 37, 39, 41, 43, 45, 47, 49, 51, 53, 2, 37,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 126, 138, 139, 37, 39, 41, 43, 45,
- 47, 49, 51, 53, 0, 22, 27, 32, 0, 37, 39, 117, 126, 0, 0, 0,
- 120, 121, 122, 123, 124, 125, 0, 39, 102, 104, 109, 117, 27, 19, 0, 0,
- 2, 2, 37, 39, 41, 43, 45, 47, 49, 51, 53, 2, 2, 0, 0, 0,
- 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
- 0, 0, 43, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 0,
+RE_UINT32 re_get_unified_ideograph(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_unified_ideograph_table_1[field_2];
+ v = re_unified_ideograph_table_2[(v << 5) | field_1];
+ v = re_unified_ideograph_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Uppercase. */
+static RE_UINT8 re_uppercase_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
+ 2, 10, 2, 11, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 15, 2, 16, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_uppercase_table_2[] = {
+ 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
+ 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
+ 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
+ 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 0, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 19, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 40, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 41, 0, 42, 3, 3, 3, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 44, 45, 0, 0, 0, 0, 46, 3, 47, 48, 49, 50, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 18, 52, 0, 0, 0, 26, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 55, 56, 57, 58, 59, 60, 26, 61, 62, 63, 64, 65, 66, 55, 56, 57,
+ 58, 67, 25, 26, 61, 58, 68, 69, 70, 71, 40, 41, 26, 72, 73, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 75, 75, 61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Numeric_Value: 4336 bytes. */
-
-RE_UINT32 re_get_numeric_value(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_numeric_value_stage_1[f] << 5;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_numeric_value_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_numeric_value_stage_3[pos + f] << 3;
- value = re_numeric_value_stage_4[pos + code];
-
- return value;
+static RE_UINT8 re_uppercase_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
+ 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
+ 213, 210, 174, 17, 144, 164, 170, 74, 85, 85, 210, 85, 85, 85, 5, 108,
+ 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
+ 0, 128, 28, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
+ 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
+ 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
+ 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
+ 0, 255, 0, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 31, 0, 15,
+ 132, 56, 39, 62, 80, 61, 15, 192, 32, 0, 0, 0, 8, 0, 0, 0,
+ 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192, 5, 40, 4, 0,
+ 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85, 85, 85, 0, 106,
+ 85, 40, 69, 85, 85, 125, 95, 85, 244, 2, 0, 0, 0, 0, 32, 0,
+ 255, 0, 0, 0, 255, 255, 15, 0, 255, 255, 7, 0, 255, 255, 255, 3,
+ 0, 0, 240, 255, 255, 63, 0, 0, 0, 255, 255, 255, 3, 0, 0, 208,
+ 100, 222, 63, 0, 255, 3, 0, 0, 176, 231, 223, 31, 0, 0, 0, 123,
+ 95, 252, 1, 0, 0, 240, 255, 255, 63, 0, 0, 0, 3, 0, 0, 240,
+ 1, 0, 0, 0, 252, 255, 255, 7, 0, 0, 0, 240, 255, 255, 31, 0,
+ 255, 1, 0, 0, 0, 4, 0, 0, 3, 0, 0, 0, 255, 3, 255, 255
+};
+
+RE_UINT32 re_get_uppercase(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_uppercase_table_1[field_2];
+ v = re_uppercase_table_2[(v << 5) | field_1];
+ v = re_uppercase_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Bidi_Mirrored. */
+/* Variation_Selector. */
+RE_UINT32 re_get_variation_selector(RE_UINT32 codepoint) {
+ if (0x180B <= codepoint && codepoint <= 0x180D)
+ return 1;
+ if (0xFE00 <= codepoint && codepoint <= 0xFE0F)
+ return 1;
+ if (0x0E0100 <= codepoint && codepoint <= 0x0E01EF)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_bidi_mirrored_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+/* White_Space. */
+static RE_UINT8 re_white_space_table_1[] = {
+ 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_bidi_mirrored_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1,
- 4, 5, 1, 6, 7, 8, 1, 9, 10, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_white_space_table_2[] = {
+ 0, 1, 2, 2, 3, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4, 5, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_bidi_mirrored_stage_3[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3,
- 6, 7, 8, 3, 3, 9, 3, 3, 10, 11, 12, 13, 14, 3, 3, 3,
- 3, 3, 3, 3, 3, 15, 3, 16, 3, 3, 3, 3, 3, 3, 17, 18,
- 19, 20, 21, 22, 3, 3, 3, 23, 24, 3, 3, 3, 3, 3, 3, 3,
- 25, 3, 3, 3, 3, 3, 3, 3, 3, 26, 3, 3, 27, 28, 3, 3,
- 3, 3, 3, 29, 30, 31, 32, 33,
+static RE_UINT8 re_white_space_table_3[] = {
+ 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 255, 7, 0, 0, 0, 131, 0, 0, 0, 0, 0, 128
};
-static RE_UINT8 re_bidi_mirrored_stage_4[] = {
- 0, 0, 0, 0, 0, 3, 0, 80, 0, 0, 0, 40, 0, 0, 0, 40,
- 0, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 24, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 6, 96, 0, 0, 0, 0, 0, 0, 96,
- 0, 96, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 30, 63, 98, 188, 87, 248, 15, 250, 255, 31, 60, 128, 245, 207, 255, 255,
- 255, 159, 7, 1, 204, 255, 255, 193, 0, 62, 195, 255, 255, 63, 255, 255,
- 0, 15, 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 0, 255, 63, 0,
- 121, 59, 120, 112, 252, 255, 0, 0, 248, 255, 255, 249, 253, 255, 0, 1,
- 63, 194, 55, 31, 58, 3, 240, 51, 0, 252, 255, 223, 83, 122, 48, 112,
- 0, 0, 128, 1, 48, 188, 25, 254, 255, 255, 255, 255, 207, 191, 255, 255,
- 255, 255, 127, 80, 124, 112, 136, 47, 0, 0, 0, 0, 0, 0, 0, 64,
- 60, 54, 0, 48, 255, 3, 0, 0, 0, 255, 243, 15, 0, 0, 0, 0,
- 0, 0, 0, 126, 48, 0, 0, 0, 0, 3, 0, 80, 0, 0, 0, 40,
- 0, 0, 0, 168, 13, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_white_space(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Bidi_Mirrored: 572 bytes. */
-
-RE_UINT32 re_get_bidi_mirrored(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_bidi_mirrored_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_bidi_mirrored_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_bidi_mirrored_stage_3[pos + f] << 6;
- pos += code;
- value = (re_bidi_mirrored_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Indic_Positional_Category. */
+ v = re_white_space_table_1[field_2];
+ v = re_white_space_table_2[(v << 5) | field_1];
+ v = re_white_space_table_3[(v << 2) | field_0];
-static RE_UINT8 re_indic_positional_category_stage_1[] = {
- 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ return (v >> offset) & 0x1;
+}
+
+/* Word. */
+static RE_UINT8 re_word_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 39, 40, 41, 10, 42, 10, 43, 44, 45, 10, 46, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 47, 13, 13, 13, 48, 49, 13,
+ 13, 13, 13, 50, 13, 13, 13, 13, 13, 13, 51, 10, 10, 10, 52, 10,
+ 13, 13, 13, 13, 53, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 54, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT8 re_indic_positional_category_stage_2[] = {
+static RE_UINT16 re_word_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 7, 8, 6, 6, 6, 9, 10, 11, 6, 12,
+ 6, 6, 6, 6, 11, 6, 6, 6, 6, 13, 14, 6, 15, 16, 17, 18,
+ 19, 6, 6, 20, 6, 6, 21, 22, 23, 6, 24, 6, 6, 25, 6, 26,
+ 6, 27, 28, 29, 0, 30, 31, 11, 6, 6, 6, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 42, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 52, 6, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 0, 69, 70, 71, 0, 72, 73, 74, 75, 76, 77, 78, 0,
+ 6, 6, 79, 6, 80, 6, 81, 82, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 83, 6, 84, 85, 86, 6, 87, 6, 88, 0, 89, 6, 6, 90,
+ 66, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 91, 3, 6, 6, 92, 93, 94, 95, 96, 6, 6, 97, 98,
+ 99, 6, 6, 100, 6, 101, 6, 102, 103, 104, 105, 106, 6, 107, 108, 0,
+ 28, 6, 103, 109, 108, 110, 111, 0, 6, 6, 112, 113, 6, 6, 6, 95,
+ 6, 114, 115, 80, 116, 88, 117, 67, 6, 6, 6, 6, 6, 6, 6, 118,
+ 6, 6, 6, 6, 6, 6, 6, 6, 90, 6, 119, 80, 6, 120, 121, 122,
+ 123, 124, 125, 126, 127, 0, 23, 128, 129, 130, 131, 6, 132, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 133, 6, 98, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 6, 10, 11, 9, 6, 12, 13, 5, 14, 15, 4, 16, 17, 18, 0,
- 19, 20, 21, 4, 5, 14, 22, 4, 23, 24, 25, 4, 26, 0, 27, 28,
- 0, 29, 30, 0, 0, 31, 32, 0, 33, 34, 0, 35, 36, 37, 38, 0,
- 0, 39, 40, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 44, 44, 0, 45, 46, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 49, 0,
- 50, 0, 51, 52, 0, 0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59,
- 0, 60, 0, 0, 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 134, 103, 6, 6, 6, 6, 135, 6, 81, 6, 136, 137, 138, 138, 6,
+ 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 141, 66, 6, 142, 66, 6, 82, 143, 13, 6, 6, 144, 6, 0, 23,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 77,
+ 6, 6, 6, 6, 145, 0, 23, 80, 6, 6, 6, 6, 6, 6, 6, 6,
+ 146, 147, 6, 148, 6, 6, 6, 25, 149, 150, 6, 6, 151, 6, 152, 153,
+ 6, 154, 6, 95, 6, 6, 155, 156, 6, 157, 95, 77, 6, 6, 158, 103,
+ 6, 137, 159, 160, 6, 6, 161, 162, 163, 164, 82, 79, 6, 6, 6, 165,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 166, 167, 28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 157, 6, 6, 168, 0, 169, 170, 171, 6, 6, 25, 172, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 80, 23, 6, 173, 6, 174, 175,
+ 89, 176, 177, 178, 6, 6, 6, 77, 1, 2, 3, 105, 6, 103, 179, 0,
+ 180, 181, 182, 0, 6, 6, 6, 67, 0, 0, 6, 94, 0, 0, 0, 183,
+ 0, 0, 0, 0, 77, 6, 128, 111, 6, 184, 101, 67, 80, 6, 185, 0,
+ 6, 6, 6, 6, 80, 79, 186, 28, 6, 187, 6, 188, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 137, 102, 174, 0, 0, 0, 0,
+ 189, 190, 102, 137, 103, 0, 0, 191, 102, 168, 0, 0, 6, 192, 0, 0,
+ 193, 194, 0, 77, 77, 0, 74, 195, 6, 102, 102, 196, 25, 0, 0, 0,
+ 6, 6, 132, 0, 6, 196, 6, 196, 6, 197, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 198, 0, 0, 77, 110, 128, 0, 0, 23, 199, 137,
+ 6, 6, 195, 200, 6, 67, 23, 201, 6, 30, 202, 203, 6, 6, 204, 0,
+ 205, 206, 0, 0, 207, 116, 6, 208, 33, 209, 210, 211, 0, 0, 0, 0,
+ 6, 6, 212, 213, 6, 6, 214, 0, 0, 0, 0, 0, 6, 215, 216, 0,
+ 6, 6, 217, 0, 6, 100, 98, 0, 88, 112, 0, 0, 0, 0, 0, 0,
+ 6, 67, 0, 0, 0, 6, 6, 218, 219, 220, 221, 0, 0, 222, 223, 224,
+ 6, 103, 110, 6, 225, 0, 6, 100, 0, 0, 0, 0, 0, 0, 0, 0,
+ 226, 5, 227, 228, 173, 229, 0, 0, 230, 231, 197, 232, 233, 98, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 234, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 168, 0, 0, 0,
+ 6, 6, 6, 144, 6, 6, 6, 6, 6, 6, 188, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 65, 66, 0, 0, 67, 68, 69, 70, 0, 71, 72, 0, 1, 73, 74, 75,
- 0, 76, 77, 78, 0, 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, 82,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 100, 103, 98, 0, 0, 23, 106, 6, 137, 221, 235, 89, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 236, 6, 237, 0, 0, 238,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 114,
+ 6, 6, 6, 6, 6, 6, 102, 0, 132, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 103, 0, 239, 202, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 28, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 243, 244, 0, 0,
+ 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 30, 6, 246, 247, 248, 6, 249, 250, 251, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 252, 253, 82, 30, 30, 134, 134, 226, 226, 254, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 255, 6, 256, 257, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 259, 260, 0, 0, 0, 0, 0, 0, 6, 261, 262, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 263, 0, 6, 6, 112, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 86, 87, 0, 57, 88, 0, 0, 89, 90, 91, 92, 57, 93, 94, 0,
- 0, 95, 0, 0, 0, 0, 96, 97, 23, 98, 99, 100, 0, 0, 0, 0,
- 0, 101, 102, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 105, 106, 0,
- 0, 107, 108, 0, 0, 109, 0, 0, 110, 111, 0, 0, 0, 0, 0, 0,
- 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114,
- 115, 116, 117, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 119, 0, 0, 120, 121, 0, 0, 0, 122, 123, 0, 124, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_indic_positional_category_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 13, 14, 0, 15, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, 0,
- 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 23, 22, 0, 0,
- 4, 24, 25, 26, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 27, 28,
- 0, 0, 0, 0, 0, 0, 0, 29, 4, 12, 30, 31, 0, 32, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,
- 34, 35, 36, 37, 0, 15, 0, 0, 6, 38, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 27, 6, 39, 40, 23, 0, 41, 0, 0,
- 42, 43, 44, 23, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 19, 47, 48, 49, 36, 37, 0, 15, 0, 0,
- 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 50, 51, 52, 53,
- 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 54, 28, 55, 0,
- 56, 57, 28, 58, 0, 0, 0, 0, 0, 0, 0, 0, 54, 28, 59, 60,
- 56, 61, 28, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0,
- 0, 0, 0, 0, 0, 63, 64, 65, 0, 0, 0, 0, 66, 67, 68, 1,
- 69, 70, 0, 71, 72, 72, 71, 72, 72, 72, 72, 72, 72, 72, 72, 60,
- 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 15, 74, 75, 76, 77, 78,
- 0, 0, 0, 0, 0, 33, 62, 10, 79, 80, 81, 82, 83, 38, 0, 0,
- 84, 85, 81, 86, 0, 0, 33, 87, 0, 0, 0, 0, 88, 60, 0, 0,
- 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 89, 76, 90,
- 91, 92, 93, 28, 94, 0, 0, 64, 95, 96, 6, 0, 97, 81, 98, 0,
- 0, 0, 0, 0, 81, 99, 100, 81, 101, 0, 82, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 19, 102, 0, 0, 0, 0, 0, 0, 103, 76, 55,
- 104, 93, 105, 106, 107, 28, 28, 108, 28, 101, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 109, 110, 111, 112, 101, 0, 0, 0, 0, 0, 0,
- 0, 0, 19, 5, 28, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0,
- 114, 115, 113, 62, 0, 0, 0, 0, 0, 2, 46, 116, 46, 0, 0, 0,
- 0, 117, 118, 5, 28, 119, 0, 0, 0, 0, 0, 0, 58, 120, 121, 72,
- 122, 123, 124, 22, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0,
- 0, 0, 0, 0, 38, 0, 0, 0, 16, 16, 19, 0, 0, 0, 0, 0,
- 15, 126, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 81, 81, 81, 81, 127, 0, 0, 0, 0, 0, 0,
- 28, 28, 28, 28, 23, 0, 0, 19, 0, 0, 128, 62, 0, 0, 0, 0,
- 0, 128, 129, 59, 46, 0, 0, 0, 0, 0, 0, 0, 19, 50, 130, 131,
- 132, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 83, 133, 134, 135, 0, 0, 19, 0, 0, 136, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 136, 0, 0, 0, 0, 109, 137, 138, 139,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 141, 0, 142, 0, 0,
- 15, 54, 143, 26, 0, 0, 0, 0, 144, 145, 0, 59, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 28, 72, 121, 58, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 148, 149, 18, 0, 58, 0, 0, 0, 0, 0, 0, 0,
- 0, 19, 9, 150, 146, 38, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 15, 151, 72, 152,
- 101, 0, 153, 60, 0, 0, 0, 0, 0, 0, 0, 48, 154, 109, 0, 16,
- 0, 0, 0, 0, 0, 0, 0, 19, 148, 5, 146, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 128, 79, 6, 155, 13, 156, 0, 15, 0, 0,
- 33, 27, 28, 38, 28, 38, 0, 0, 0, 0, 0, 0, 0, 157, 72, 121,
- 158, 159, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 148, 72, 160, 161,
- 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 62, 163, 164,
- 60, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 48, 72, 149, 165,
- 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 166, 121, 164, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 167, 50, 168, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 148, 59, 28, 18, 0, 0, 0, 0, 0, 157, 72, 27, 81,
- 60, 169, 0, 0, 0, 0, 0, 0, 170, 28, 171, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 5, 172, 55, 0, 0, 0, 0, 170, 1, 4, 0,
- 0, 0, 10, 72, 72, 173, 38, 0, 0, 0, 0, 15, 9, 55, 28, 164,
- 0, 0, 0, 0, 10, 72, 72, 72, 72, 72, 114, 72, 174, 175, 0, 0,
- 0, 0, 0, 0, 83, 171, 16, 94, 176, 177, 0, 0, 0, 0, 0, 0,
- 0, 0, 33, 178, 179, 147, 0, 0, 0, 0, 0, 0, 19, 180, 0, 0,
-};
-
-static RE_UINT8 re_indic_positional_category_stage_4[] = {
- 0, 0, 0, 0, 5, 5, 5, 1, 0, 0, 5, 1, 6, 0, 1, 2,
- 1, 6, 6, 6, 6, 5, 5, 5, 5, 1, 1, 1, 1, 6, 2, 1,
- 0, 5, 6, 5, 5, 5, 6, 6, 0, 0, 6, 6, 0, 5, 1, 1,
- 6, 0, 0, 2, 2, 0, 0, 4, 4, 6, 0, 0, 0, 0, 0, 1,
- 0, 0, 5, 0, 0, 5, 5, 1, 1, 6, 6, 0, 0, 0, 0, 5,
- 5, 0, 0, 5, 5, 6, 0, 0, 0, 6, 0, 0, 5, 5, 0, 0,
- 6, 5, 0, 5, 5, 8, 0, 1, 1, 6, 0, 0, 0, 0, 5, 5,
- 5, 5, 5, 5, 6, 0, 1, 5, 9, 0, 0, 4, 10, 6, 0, 0,
- 0, 0, 5, 8, 0, 0, 1, 1, 5, 1, 1, 0, 0, 0, 2, 2,
- 2, 0, 4, 4, 4, 5, 0, 0, 5, 0, 0, 0, 1, 0, 5, 5,
- 7, 0, 5, 5, 0, 5, 6, 0, 8, 1, 1, 1, 1, 0, 5, 8,
- 8, 0, 8, 8, 0, 1, 1, 0, 5, 5, 1, 1, 5, 0, 1, 1,
- 1, 1, 1, 6, 6, 0, 2, 2, 1, 1, 5, 5, 6, 0, 6, 0,
- 1, 2, 9, 2, 4, 10, 4, 1, 1, 5, 1, 1, 6, 6, 6, 0,
- 3, 3, 3, 3, 3, 1, 0, 5, 5, 5, 5, 0, 6, 6, 6, 5,
- 6, 0, 0, 0, 3, 0, 0, 0, 6, 6, 0, 0, 0, 6, 0, 6,
- 0, 5, 0, 0, 0, 0, 1, 2, 0, 6, 5, 7, 6, 6, 7, 7,
- 7, 7, 5, 5, 5, 7, 5, 5, 6, 0, 5, 5, 0, 6, 6, 6,
- 6, 6, 6, 6, 0, 0, 6, 0, 1, 5, 5, 6, 6, 2, 5, 5,
- 5, 5, 5, 6, 1, 0, 5, 1, 0, 6, 6, 0, 6, 0, 1, 1,
- 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 5, 5, 5,
- 0, 0, 6, 1, 2, 5, 5, 1, 1, 6, 0, 1, 1, 5, 0, 0,
- 0, 0, 5, 6, 0, 0, 1, 5, 6, 6, 9, 10, 4, 2, 2, 2,
- 4, 4, 5, 1, 1, 5, 5, 5, 5, 5, 0, 5, 5, 5, 6, 1,
- 1, 8, 8, 5, 1, 1, 6, 1, 1, 6, 5, 6, 1, 3, 3, 3,
- 1, 1, 3, 1, 1, 0, 0, 0, 6, 2, 1, 5, 0, 2, 6, 1,
- 0, 1, 5, 1, 5, 6, 6, 5, 6, 1, 2, 2, 2, 2, 2, 5,
- 5, 0, 0, 6, 5, 1, 5, 5, 6, 6, 6, 11, 7, 13, 2, 2,
- 4, 4, 5, 8, 5, 5, 1, 0, 0, 1, 6, 6, 5, 6, 2, 1,
- 1, 5, 1, 5, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 5, 6,
- 14, 6, 6, 6, 6, 6, 5, 5, 5, 1, 14, 14, 14, 14, 14, 14,
- 14, 0, 0, 0, 5, 0, 0, 1, 1, 6, 5, 1, 6, 5, 0, 0,
- 0, 0, 0, 6, 6, 6, 5, 6, 6, 6, 2, 2, 5, 6, 1, 12,
- 11, 0, 0, 0, 5, 6, 5, 2, 2, 5, 6, 1, 2, 6, 6, 0,
- 5, 1, 0, 0, 6, 3, 3, 5, 5, 3, 1, 3, 3, 1, 5, 5,
- 0, 0, 0, 2, 6, 5, 2, 1, 0, 1, 0, 0, 6, 1, 1, 0,
- 0, 14, 6, 6, 0, 5, 14, 0, 5, 6, 6, 0, 1, 5, 1, 0,
- 1, 2, 1, 6, 6, 5, 5, 1, 2, 5, 7, 7, 2, 1, 6, 6,
- 5, 5, 5, 8, 0, 6, 6, 5, 5, 5, 8, 8, 1, 0, 0, 2,
- 4, 1, 0, 0, 0, 1, 2, 1, 1, 1, 6, 5, 5, 1, 6, 0,
- 6, 2, 5, 9, 4, 1, 4, 5, 5, 1, 6, 6, 2, 9, 4, 10,
- 5, 5, 1, 6, 1, 5, 1, 6, 1, 5, 2, 1, 0, 6, 0, 5,
- 6, 6, 2, 5, 2, 0, 0, 0, 0, 5, 6, 6, 5, 5, 6, 0,
- 5, 1, 0, 6, 6, 6, 5, 1, 6, 2, 6, 5, 1, 5, 5, 0,
- 5, 5, 6, 5, 6, 0, 0, 6, 1, 1, 1, 0, 5, 5, 0, 1,
- 6, 2, 1, 0,
-};
-
-/* Indic_Positional_Category: 2852 bytes. */
-
-RE_UINT32 re_get_indic_positional_category(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_indic_positional_category_stage_1[f] << 6;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_indic_positional_category_stage_2[pos + f] << 3;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_indic_positional_category_stage_3[pos + f] << 2;
- value = re_indic_positional_category_stage_4[pos + code];
-
- return value;
-}
-
-/* Indic_Syllabic_Category. */
-
-static RE_UINT8 re_indic_syllabic_category_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_indic_syllabic_category_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 20,
- 2, 2, 21, 22, 23, 24, 25, 26, 27, 28, 2, 29, 2, 2, 2, 2,
- 30, 31, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 33, 34, 35, 36, 37, 38, 2, 39, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 40, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 41, 42, 43, 44, 45, 46, 47, 2, 48, 49, 2, 50, 51, 52, 53, 2,
- 54, 2, 2, 55, 56, 57, 2, 2, 58, 59, 60, 61, 2, 62, 2, 2,
-};
-
-static RE_UINT8 re_indic_syllabic_category_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 248, 264, 265, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 79, 79, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12,
- 13, 13, 13, 14, 15, 16, 10, 10, 17, 18, 2, 2, 19, 8, 10, 10,
- 20, 21, 8, 22, 22, 9, 10, 10, 10, 10, 23, 10, 24, 25, 26, 12,
- 13, 27, 27, 28, 0, 29, 0, 30, 17, 18, 2, 2, 26, 0, 0, 31,
- 32, 21, 33, 34, 22, 9, 10, 10, 10, 10, 23, 10, 23, 35, 26, 36,
- 37, 29, 27, 38, 39, 0, 40, 24, 0, 18, 2, 2, 41, 42, 0, 0,
- 32, 21, 8, 43, 43, 9, 10, 10, 10, 10, 23, 10, 23, 40, 26, 12,
- 13, 44, 44, 38, 0, 0, 0, 0, 17, 18, 2, 2, 0, 0, 45, 46,
- 32, 21, 8, 22, 22, 9, 10, 10, 10, 10, 23, 10, 23, 40, 26, 12,
- 13, 27, 27, 38, 0, 47, 0, 30, 17, 18, 2, 2, 48, 0, 0, 0,
- 49, 21, 33, 19, 50, 51, 35, 23, 52, 53, 54, 25, 10, 10, 26, 47,
- 37, 47, 55, 38, 0, 29, 0, 0, 0, 18, 2, 2, 0, 0, 0, 0,
- 7, 56, 8, 50, 50, 9, 10, 10, 10, 10, 23, 10, 10, 10, 26, 57,
- 13, 55, 55, 38, 0, 58, 54, 0, 17, 18, 2, 2, 0, 0, 0, 0,
- 7, 21, 8, 50, 50, 9, 10, 10, 10, 10, 23, 10, 10, 40, 26, 12,
- 13, 55, 55, 38, 0, 58, 0, 59, 17, 18, 2, 2, 60, 0, 0, 0,
- 7, 21, 8, 50, 50, 9, 10, 10, 10, 10, 10, 10, 10, 10, 61, 62,
- 13, 55, 55, 63, 0, 64, 0, 34, 17, 18, 2, 2, 0, 0, 65, 66,
- 67, 21, 8, 8, 8, 33, 25, 10, 10, 10, 10, 10, 30, 10, 10, 48,
- 10, 54, 68, 29, 13, 69, 13, 13, 0, 18, 2, 2, 47, 0, 0, 0,
- 40, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 54, 13, 13, 70, 0,
- 13, 44, 71, 72, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 23, 54, 10, 10, 10, 10, 10, 10, 73, 10, 54, 13, 13, 74, 75,
- 13, 76, 71, 77, 2, 2, 3, 10, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 78, 79, 0,
- 10, 10, 40, 10, 10, 10, 10, 10, 10, 10, 10, 53, 16, 13, 13, 80,
- 81, 82, 83, 84, 85, 85, 86, 85, 85, 85, 85, 85, 85, 85, 85, 87,
- 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 89, 8, 90, 13, 13, 91, 92, 93,
- 2, 2, 94, 95, 96, 17, 97, 98, 99, 100, 101, 102, 103, 104, 10, 10,
- 105, 106, 71, 107, 2, 2, 108, 109, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 110, 10, 10, 23, 11, 111, 0, 0, 110, 10, 10, 10, 11, 111, 0, 0,
- 110, 10, 10, 10, 11, 0, 0, 0, 110, 10, 10, 23, 112, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 113, 8, 8, 8, 8, 47, 13, 13,
- 13, 80, 114, 115, 116, 0, 0, 117, 2, 2, 3, 0, 0, 0, 0, 0,
- 118, 10, 10, 10, 10, 10, 10, 54, 13, 13, 119, 0, 120, 121, 122, 0,
- 0, 18, 2, 2, 10, 10, 10, 10, 123, 124, 124, 125, 126, 127, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 13, 13, 13, 13,
- 128, 121, 129, 0, 2, 2, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 131, 13, 0, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 89, 110, 132, 133, 134, 135, 13, 13, 13, 13, 136, 137, 138,
- 2, 2, 3, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 139, 140, 8, 8, 110, 10, 10, 10, 10, 10, 10, 10, 10, 141, 13, 13,
- 13, 142, 10, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 143, 8, 144, 10, 10, 10, 10, 10, 145, 13, 146, 147, 2, 2, 148, 149,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 150, 13, 13, 151, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 152, 13, 128, 121, 153, 0, 0,
- 2, 2, 3, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 154, 155, 155, 155, 156, 0, 0, 0, 65, 157, 158, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0,
- 0, 0, 0, 160, 161, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0,
- 5, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 164, 165, 166, 10, 10, 10, 10, 10, 131, 13, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 167, 168, 169, 170, 10, 171, 0, 0, 0,
- 172, 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 173, 13, 13,
- 13, 174, 0, 0, 2, 2, 3, 0, 155, 155, 155, 155, 175, 0, 0, 176,
- 2, 2, 177, 10, 10, 10, 10, 10, 167, 124, 178, 129, 10, 10, 10, 10,
- 10, 131, 13, 179, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 181, 8, 9, 110, 10, 10, 10, 10, 10, 10, 10, 10, 182, 13, 13, 183,
- 184, 0, 0, 0, 2, 2, 3, 0, 10, 185, 10, 10, 2, 2, 177, 54,
- 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 103, 13, 186, 187, 0, 0,
- 121, 121, 121, 188, 2, 2, 3, 0, 10, 10, 10, 10, 40, 189, 190, 102,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 106,
- 191, 0, 0, 0, 0, 0, 0, 0, 144, 10, 131, 13, 0, 192, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 96, 193, 10, 194, 121, 195, 13, 37, 196, 2, 2, 3, 0,
- 103, 58, 0, 80, 10, 40, 40, 10, 10, 10, 10, 10, 10, 26, 197, 198,
- 2, 2, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 200, 201, 8, 8, 110, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13,
- 13, 202, 0, 0, 203, 204, 204, 204, 204, 205, 2, 2, 0, 0, 0, 206,
- 207, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 208, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 207, 110, 10, 10, 10, 10, 10, 10, 10, 131, 13, 13, 209, 210, 2, 2,
- 0, 211, 0, 0, 124, 212, 10, 10, 10, 10, 10, 10, 182, 0, 0, 0,
- 207, 8, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 131, 13, 13, 13,
- 213, 0, 214, 76, 2, 2, 3, 0, 215, 2, 2, 2, 2, 199, 0, 0,
- 8, 8, 10, 10, 30, 10, 10, 10, 10, 10, 10, 13, 13, 216, 0, 217,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 54, 23, 30, 10, 10, 10, 30, 10, 10, 53, 0, 8, 8, 144, 10,
- 10, 10, 10, 10, 10, 10, 10, 166, 13, 13, 218, 0, 2, 2, 3, 0,
- 7, 21, 8, 22, 22, 9, 10, 10, 10, 10, 23, 10, 23, 40, 219, 12,
- 13, 27, 27, 38, 0, 29, 0, 220, 17, 221, 155, 163, 155, 163, 0, 0,
- 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 10, 103, 13, 13,
- 222, 223, 0, 0, 2, 2, 3, 224, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 8, 8, 110, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 225,
- 226, 227, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 131, 13, 109, 13, 228,
- 229, 0, 0, 0, 0, 0, 8, 109, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 230,
- 76, 0, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 166, 231, 13, 232, 53, 0,
- 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 54, 233, 13, 13, 234, 0, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 225, 235, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 19, 144, 10, 10, 10, 10,
- 10, 10, 10, 10, 103, 13, 47, 80, 236, 76, 0, 0, 0, 0, 0, 0,
- 237, 13, 238, 10, 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, 241, 242,
- 0, 243, 0, 0, 237, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 244, 245, 121, 121, 246, 247, 248, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 50, 144, 10, 10, 10, 10, 10, 10, 10, 131, 13, 37, 13, 228,
- 227, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 199, 25, 10, 10, 10,
- 10, 10, 10, 10, 249, 85, 85, 85, 85, 85, 86, 85, 13, 250, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 33, 43, 10, 10, 10, 10, 10, 10, 10, 10, 10, 103, 37, 251, 44,
- 252, 253, 0, 0, 2, 2, 3, 0, 8, 43, 50, 10, 10, 10, 10, 10,
- 10, 10, 11, 37, 44, 254, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 255, 37, 0, 0,
-};
-
-static RE_UINT8 re_indic_syllabic_category_stage_4[] = {
- 0, 0, 0, 0, 0, 11, 0, 0, 34, 34, 34, 34, 34, 34, 0, 0,
- 11, 0, 0, 0, 0, 0, 29, 29, 0, 0, 0, 11, 1, 1, 1, 2,
- 8, 8, 8, 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9,
- 4, 3, 9, 9, 9, 9, 9, 9, 9, 5, 9, 9, 0, 27, 27, 0,
- 0, 9, 9, 9, 8, 8, 9, 9, 0, 0, 34, 34, 0, 0, 8, 8,
- 11, 1, 1, 2, 0, 8, 8, 8, 8, 0, 0, 8, 12, 0, 12, 12,
- 12, 0, 12, 0, 0, 0, 12, 12, 12, 12, 0, 0, 9, 0, 0, 9,
- 9, 5, 13, 0, 0, 0, 0, 9, 12, 12, 0, 12, 1, 0, 29, 0,
- 0, 1, 1, 2, 8, 8, 8, 0, 0, 0, 0, 8, 0, 12, 12, 0,
- 4, 0, 9, 9, 9, 9, 9, 0, 9, 5, 0, 0, 0, 27, 0, 0,
- 0, 12, 12, 12, 1, 26, 11, 11, 0, 20, 0, 0, 8, 8, 0, 8,
- 9, 9, 0, 9, 0, 12, 27, 27, 27, 4, 4, 4, 0, 0, 9, 9,
- 0, 12, 0, 0, 0, 0, 1, 23, 8, 0, 8, 8, 8, 12, 0, 0,
- 0, 0, 0, 12, 12, 0, 0, 0, 12, 12, 12, 0, 9, 0, 9, 9,
- 1, 8, 8, 8, 0, 3, 9, 9, 0, 9, 9, 0, 0, 0, 12, 0,
- 0, 14, 14, 0, 12, 12, 12, 6, 6, 3, 9, 9, 9, 5, 16, 0,
- 13, 13, 13, 9, 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 1, 2,
- 0, 0, 5, 0, 9, 0, 9, 0, 9, 9, 6, 0, 25, 25, 25, 25,
- 30, 1, 6, 0, 0, 12, 0, 12, 9, 9, 6, 9, 20, 20, 0, 0,
- 9, 0, 0, 0, 0, 1, 0, 0, 0, 29, 0, 29, 0, 4, 0, 0,
- 9, 9, 1, 2, 9, 9, 1, 1, 6, 3, 0, 0, 22, 22, 22, 22,
- 22, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 0, 0, 0,
- 0, 0, 29, 0, 12, 8, 8, 8, 8, 8, 8, 9, 9, 9, 1, 25,
- 2, 7, 6, 20, 20, 20, 20, 12, 34, 34, 0, 11, 0, 0, 11, 0,
- 12, 12, 8, 8, 9, 9, 12, 12, 12, 12, 20, 20, 20, 12, 9, 25,
- 25, 12, 12, 9, 9, 25, 25, 25, 25, 25, 12, 12, 12, 9, 9, 9,
- 9, 12, 12, 12, 12, 12, 20, 9, 9, 9, 9, 25, 25, 25, 12, 25,
- 34, 34, 25, 25, 9, 9, 0, 0, 8, 8, 8, 12, 6, 0, 0, 0,
- 12, 0, 9, 9, 12, 12, 12, 8, 9, 28, 28, 29, 18, 30, 29, 29,
- 29, 6, 7, 29, 3, 29, 0, 0, 11, 12, 12, 12, 9, 19, 19, 19,
- 21, 21, 1, 21, 21, 21, 21, 21, 21, 21, 9, 29, 12, 12, 12, 10,
- 10, 10, 10, 10, 10, 10, 0, 0, 24, 24, 24, 24, 24, 0, 0, 0,
- 9, 21, 21, 21, 25, 25, 0, 0, 34, 34, 34, 0, 12, 12, 12, 9,
- 12, 20, 20, 19, 21, 21, 17, 19, 19, 19, 19, 0, 7, 9, 9, 9,
- 1, 25, 25, 25, 25, 25, 6, 29, 29, 0, 0, 29, 1, 1, 1, 18,
- 2, 8, 8, 8, 4, 9, 9, 9, 5, 12, 12, 12, 1, 18, 2, 8,
- 8, 8, 12, 12, 12, 19, 19, 19, 9, 9, 6, 7, 19, 19, 12, 12,
- 34, 34, 3, 12, 12, 12, 21, 21, 8, 8, 4, 9, 21, 21, 6, 6,
- 19, 19, 9, 9, 1, 1, 29, 4, 27, 27, 27, 0, 27, 27, 27, 27,
- 27, 27, 0, 0, 27, 14, 14, 27, 27, 27, 11, 0, 0, 0, 0, 29,
- 31, 32, 0, 0, 11, 11, 11, 11, 29, 0, 0, 0, 27, 0, 0, 0,
- 8, 8, 9, 8, 8, 8, 5, 12, 12, 12, 12, 1, 12, 12, 10, 10,
- 10, 10, 12, 12, 12, 12, 10, 19, 19, 12, 12, 12, 12, 19, 12, 1,
- 1, 2, 8, 8, 20, 9, 9, 9, 5, 1, 0, 0, 27, 27, 1, 1,
- 0, 0, 8, 9, 34, 34, 12, 12, 10, 10, 10, 25, 9, 9, 9, 21,
- 21, 21, 21, 6, 1, 1, 18, 2, 12, 12, 12, 4, 9, 20, 20, 20,
- 5, 0, 0, 0, 12, 9, 0, 12, 9, 9, 9, 20, 20, 20, 20, 0,
- 21, 21, 0, 0, 11, 11, 11, 0, 0, 0, 12, 25, 24, 25, 24, 0,
- 0, 2, 7, 0, 12, 8, 12, 12, 12, 12, 12, 21, 21, 21, 21, 9,
- 25, 6, 0, 0, 4, 4, 4, 0, 0, 0, 0, 7, 34, 0, 0, 0,
- 1, 1, 2, 14, 14, 8, 8, 8, 9, 9, 5, 0, 0, 0, 35, 35,
- 35, 35, 35, 35, 35, 35, 34, 34, 0, 0, 0, 33, 1, 1, 2, 8,
- 9, 5, 4, 0, 9, 9, 9, 7, 6, 0, 34, 34, 12, 9, 9, 0,
- 10, 12, 12, 12, 5, 3, 15, 15, 0, 29, 4, 9, 0, 34, 34, 34,
- 1, 5, 4, 26, 0, 0, 27, 0, 9, 4, 6, 0, 12, 12, 0, 4,
- 0, 0, 1, 1, 0, 0, 27, 27, 9, 9, 5, 1, 1, 2, 4, 3,
- 0, 0, 29, 1, 9, 9, 9, 1, 1, 2, 5, 4, 3, 0, 0, 0,
- 1, 1, 2, 5, 4, 0, 0, 0, 9, 1, 2, 5, 2, 9, 9, 9,
- 9, 9, 5, 4, 0, 20, 20, 20, 9, 9, 9, 6, 2, 5, 4, 0,
- 5, 3, 0, 0, 8, 9, 9, 9, 9, 9, 9, 12, 12, 12, 12, 29,
- 6, 1, 1, 1, 1, 2, 15, 20, 20, 20, 20, 11, 0, 11, 0, 7,
- 15, 15, 15, 15, 15, 15, 21, 21, 21, 21, 1, 2, 26, 7, 0, 0,
- 0, 3, 0, 0, 0, 0, 19, 19, 9, 1, 1, 0, 0, 0, 9, 0,
- 1, 2, 4, 9, 6, 7, 16, 20, 9, 1, 2, 7, 12, 12, 11, 9,
-};
-
-/* Indic_Syllabic_Category: 3496 bytes. */
-
-RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_indic_syllabic_category_stage_1[f] << 6;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_indic_syllabic_category_stage_2[pos + f] << 5;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_indic_syllabic_category_stage_3[pos + f] << 2;
- value = re_indic_syllabic_category_stage_4[pos + code];
-
- return value;
-}
-
-/* Emoji. */
-
-static RE_UINT8 re_emoji_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 1,
-};
-
-static RE_UINT8 re_emoji_stage_3[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 4, 1, 1, 5, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 8,
- 1, 1, 1, 9, 1, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1,
- 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 1, 20, 21, 1, 1,
- 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 1, 1, 1, 1, 1,
- 24, 1, 1, 25, 1, 26, 27, 28, 29, 30, 1, 1, 31, 32, 33, 34,
- 32, 32, 32, 35, 36, 37, 38, 39, 32, 40, 32, 41, 1, 1, 1, 42,
- 1, 1, 1, 1, 43, 44, 45, 46, 1, 47, 48, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_stage_4[] = {
- 0, 0, 0, 0, 8, 4, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2,
- 0, 0, 240, 3, 0, 6, 0, 0, 0, 0, 0, 12, 0, 1, 0, 0,
- 0, 128, 0, 0, 0, 254, 15, 7, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120,
- 31, 64, 50, 33, 77, 196, 0, 7, 5, 255, 15, 128, 105, 1, 0, 200,
- 0, 0, 252, 26, 3, 12, 3, 96, 48, 193, 26, 0, 0, 6, 191, 39,
- 36, 191, 84, 32, 2, 1, 24, 0, 144, 80, 184, 0, 24, 0, 0, 0,
- 0, 0, 224, 0, 2, 0, 1, 128, 0, 0, 0, 0, 0, 0, 48, 0,
- 224, 0, 0, 24, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 128, 2, 0, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 192, 0, 64, 254, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 192, 255, 255, 255, 6, 0, 0, 4, 0, 128, 252, 7,
- 0, 0, 3, 0, 0, 0, 0, 0, 255, 255, 255, 255, 243, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 206, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 255, 191,
- 255, 255, 255, 255, 255, 255, 255, 63, 0, 126, 255, 255, 255, 128, 249, 7,
- 128, 60, 97, 0, 48, 1, 6, 16, 28, 0, 14, 112, 10, 129, 8, 252,
- 255, 255, 0, 0, 0, 0, 0, 0, 63, 248, 39, 0, 63, 26, 249, 7,
- 0, 0, 0, 0, 255, 15, 0, 0, 0, 224, 255, 255, 255, 255, 255, 247,
- 191, 255, 255, 255, 255, 255, 123, 252, 255, 255, 255, 255, 231, 199, 255, 255,
- 255, 231, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 15, 7,
- 7, 0, 63, 0, 0, 0, 0, 0,
-};
-
-/* Emoji: 652 bytes. */
-
-RE_UINT32 re_get_emoji(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_emoji_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_emoji_stage_3[pos + f] << 6;
- pos += code;
- value = (re_emoji_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 80, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 94, 6, 6, 6, 6, 6, 6,
+ 80, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 269, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 111,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 29, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 89,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_word_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7,
+ 0, 4, 32, 4, 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0,
+ 31, 80, 0, 0, 255, 255, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 254, 255,
+ 255, 255, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0, 0, 0, 255, 7,
+ 255, 195, 255, 255, 255, 255, 239, 159, 255, 253, 255, 159, 0, 0, 255, 255,
+ 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 63, 36, 255, 63, 0, 0,
+ 255, 255, 255, 15, 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 248, 255,
+ 207, 255, 254, 255, 239, 159, 249, 255, 255, 253, 197, 243, 159, 121, 128, 176,
+ 207, 255, 3, 80, 238, 135, 249, 255, 255, 253, 109, 211, 135, 57, 2, 94,
+ 192, 255, 63, 0, 238, 191, 251, 255, 255, 253, 237, 243, 191, 59, 1, 0,
+ 207, 255, 0, 254, 238, 159, 249, 255, 159, 57, 224, 176, 207, 255, 2, 0,
+ 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 192, 255, 0, 0,
+ 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7, 207, 255, 0, 0,
+ 239, 223, 253, 255, 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0,
+ 223, 125, 240, 128, 207, 255, 0, 252, 238, 255, 127, 252, 255, 255, 251, 47,
+ 127, 132, 95, 255, 192, 255, 12, 0, 254, 255, 255, 255, 255, 255, 255, 7,
+ 255, 127, 255, 3, 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243,
+ 1, 0, 0, 3, 255, 3, 160, 194, 255, 254, 255, 255, 255, 31, 254, 255,
+ 223, 255, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 255, 3, 255, 255,
+ 255, 255, 255, 63, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 255, 231, 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255,
+ 255, 199, 255, 1, 255, 223, 31, 0, 255, 255, 31, 0, 255, 255, 15, 0,
+ 255, 223, 13, 0, 255, 255, 143, 48, 255, 3, 0, 0, 0, 56, 255, 3,
+ 255, 255, 255, 1, 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 15, 255, 15, 192, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255,
+ 255, 3, 255, 3, 255, 255, 255, 159, 128, 0, 255, 255, 1, 0, 0, 0,
+ 255, 15, 255, 3, 0, 248, 15, 0, 255, 255, 255, 0, 255, 227, 255, 255,
+ 255, 1, 255, 255, 0, 0, 247, 255, 255, 255, 255, 251, 63, 63, 255, 170,
+ 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31, 0, 48, 0, 0,
+ 0, 0, 0, 128, 1, 0, 16, 0, 0, 0, 2, 128, 0, 0, 255, 31,
+ 255, 255, 1, 0, 132, 252, 47, 62, 80, 189, 255, 243, 224, 67, 0, 0,
+ 255, 1, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255, 31, 248, 15, 0,
+ 255, 128, 0, 128, 255, 255, 127, 0, 127, 127, 127, 127, 0, 128, 0, 0,
+ 224, 0, 0, 0, 254, 255, 62, 31, 255, 255, 127, 230, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 0, 0, 255, 31, 255, 255, 255, 15, 0, 0,
+ 255, 255, 247, 191, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 16, 0, 0, 63, 0, 255, 3,
+ 255, 255, 255, 232, 255, 63, 255, 255, 1, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 7, 0, 0, 56, 255, 255, 124, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 55, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
+ 0, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 15,
+ 255, 255, 24, 0, 0, 224, 0, 0, 0, 0, 223, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 32,
+ 0, 224, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 15, 0, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
+ 255, 255, 255, 192, 111, 240, 239, 254, 255, 255, 63, 135, 127, 0, 0, 0,
+ 255, 255, 7, 0, 255, 0, 255, 3, 255, 27, 3, 0, 31, 0, 0, 0,
+ 192, 255, 0, 128, 255, 1, 255, 3, 240, 0, 255, 255, 255, 255, 79, 0,
+ 31, 222, 255, 23, 255, 255, 251, 255, 255, 255, 255, 64, 127, 189, 255, 191,
+ 255, 7, 255, 3, 255, 253, 237, 251, 159, 57, 129, 224, 207, 31, 31, 0,
+ 255, 7, 255, 195, 3, 0, 0, 0, 191, 0, 255, 3, 255, 255, 63, 255,
+ 1, 0, 0, 63, 17, 0, 255, 3, 255, 3, 0, 128, 127, 242, 111, 255,
+ 255, 255, 191, 249, 15, 0, 255, 3, 255, 252, 255, 255, 255, 255, 255, 252,
+ 27, 0, 0, 0, 255, 255, 255, 35, 255, 253, 255, 255, 1, 0, 255, 3,
+ 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255, 255, 255, 127, 180,
+ 191, 253, 255, 255, 255, 127, 251, 1, 0, 0, 1, 0, 248, 255, 255, 224,
+ 255, 135, 255, 255, 255, 128, 255, 255, 27, 0, 3, 0, 0, 0, 7, 0,
+ 255, 7, 255, 31, 255, 1, 255, 99, 224, 227, 7, 248, 231, 15, 0, 0,
+ 0, 60, 0, 0, 28, 0, 0, 0, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 253, 255, 255, 247, 247, 207, 255, 255, 255, 255, 127, 248,
+ 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0, 127, 255, 255, 249,
+ 219, 7, 0, 0, 255, 31, 255, 63, 255, 67, 0, 0, 31, 0, 127, 0,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15, 3, 0, 255, 255
+};
+
+RE_UINT32 re_get_word(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_word_table_1[field_2];
+ v = re_word_table_2[(v << 5) | field_1];
+ v = re_word_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Emoji_Presentation. */
-
-static RE_UINT8 re_emoji_presentation_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+/* Word_Break. */
+static RE_UINT8 re_word_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 13, 14, 15, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 16, 10, 10, 10, 10, 10, 10, 10, 10, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 10, 10, 13, 29, 10, 10,
+ 10, 30, 10, 10, 10, 10, 10, 10, 10, 10, 31, 32, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 33, 10, 10, 34,
+ 10, 10, 10, 10, 35, 36, 37, 10, 38, 10, 39, 40, 41, 10, 42, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 43, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
+};
+
+static RE_UINT16 re_word_break_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 8, 7, 9, 9, 9, 10, 11, 12, 7, 13,
+ 7, 7, 7, 7, 14, 7, 7, 7, 7, 15, 16, 7, 17, 18, 19, 20,
+ 21, 7, 22, 23, 7, 7, 24, 25, 26, 27, 28, 7, 7, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 53, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 36, 79, 80, 36, 36, 81, 82, 36, 83, 84, 85, 86, 87, 88, 89, 36,
+ 36, 90, 91, 92, 93, 7, 94, 95, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 96, 7, 97, 98, 99, 7, 100, 7, 101, 36, 102, 7, 7, 103,
+ 104, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 105, 106, 7, 7, 107, 108, 109, 110, 111, 36, 112, 113, 114,
+ 115, 7, 7, 116, 117, 118, 7, 119, 120, 121, 62, 36, 36, 36, 122, 36,
+ 123, 36, 124, 125, 126, 127, 128, 36, 129, 130, 131, 132, 133, 134, 7, 135,
+ 7, 136, 137, 138, 139, 140, 141, 142, 7, 7, 7, 7, 7, 7, 9, 143,
+ 7, 7, 7, 7, 7, 7, 7, 7, 103, 7, 144, 138, 7, 145, 146, 147,
+ 148, 149, 150, 151, 152, 36, 127, 153, 154, 155, 156, 7, 157, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 158, 7, 159, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 160, 120, 7, 7, 7, 7, 161, 7, 94, 7, 162, 163, 164, 164, 9,
+ 36, 165, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 166, 167, 36, 36, 168, 169, 169, 170, 171, 15, 7, 7, 172, 7, 36, 173,
+ 36, 36, 36, 36, 36, 36, 173, 174, 169, 169, 175, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 176, 36, 177, 138, 7, 7, 7, 7, 7, 7, 7, 7,
+ 178, 179, 7, 180, 181, 7, 7, 182, 183, 7, 7, 7, 7, 7, 184, 185,
+ 186, 187, 7, 188, 189, 130, 190, 191, 30, 192, 193, 194, 40, 195, 196, 197,
+ 7, 198, 199, 200, 36, 201, 202, 203, 204, 205, 7, 206, 7, 7, 7, 207,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 208, 209, 210,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 211, 212, 213, 7, 7, 214, 215, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 138, 177, 7, 216, 7, 217, 218,
+ 219, 220, 221, 222, 7, 7, 7, 223, 224, 2, 3, 225, 226, 120, 227, 228,
+ 229, 230, 231, 36, 7, 7, 7, 232, 36, 36, 7, 233, 36, 36, 36, 234,
+ 36, 36, 36, 36, 194, 7, 235, 128, 7, 236, 237, 238, 138, 7, 239, 36,
+ 7, 7, 7, 7, 138, 240, 241, 210, 7, 242, 7, 243, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 163, 119, 217, 36, 36, 36, 36,
+ 244, 245, 119, 163, 120, 36, 36, 246, 119, 247, 36, 36, 7, 8, 36, 36,
+ 248, 249, 36, 194, 194, 36, 85, 250, 7, 119, 119, 251, 214, 36, 36, 36,
+ 7, 7, 157, 36, 7, 251, 7, 251, 7, 252, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 7, 253, 36, 36, 194, 254, 255, 36, 36, 177, 256, 163,
+ 133, 257, 258, 259, 133, 260, 261, 262, 133, 263, 264, 265, 133, 195, 266, 36,
+ 267, 268, 36, 36, 269, 139, 270, 271, 272, 273, 274, 275, 36, 36, 36, 36,
+ 7, 276, 277, 278, 7, 27, 279, 36, 36, 36, 36, 36, 7, 280, 281, 36,
+ 7, 27, 282, 36, 7, 283, 114, 36, 284, 285, 36, 36, 36, 36, 36, 36,
+ 7, 286, 36, 36, 36, 7, 7, 287, 288, 289, 290, 36, 36, 291, 292, 293,
+ 294, 295, 296, 7, 297, 36, 7, 116, 36, 36, 36, 36, 36, 36, 36, 36,
+ 298, 299, 300, 301, 302, 303, 36, 36, 304, 305, 306, 307, 308, 114, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 309, 36, 36, 36, 36, 36, 310, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 247, 36, 36, 36,
+ 7, 7, 7, 172, 7, 7, 7, 7, 7, 7, 243, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 311, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 312, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 116, 120, 114, 36, 36, 177, 313, 7, 314, 315, 316, 102, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 7, 7, 36, 36, 36, 36, 7, 7, 317, 9, 318, 36, 36, 319,
+ 320, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 321, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 322, 323, 324, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 325, 326, 327, 36, 36,
+ 36, 36, 328, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 37, 7, 329, 330, 331, 7, 332, 333, 334, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 335, 336, 95, 37, 37, 160, 160, 298, 298, 337, 338,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 9, 339, 9, 340, 341, 342, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 343, 344, 36, 36, 36, 36, 36, 36, 7, 345, 346, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 7, 347, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 348, 36, 7, 7, 349, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 331, 350, 351, 352, 353, 354, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 177, 206, 206, 159, 36, 36, 355,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 356,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 122,
+ 357, 9, 9, 9, 36, 36, 36, 36, 9, 9, 9, 9, 9, 9, 9, 358,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36
};
-static RE_UINT8 re_emoji_presentation_stage_2[] = {
+static RE_UINT8 re_word_break_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 8, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 7, 0, 0, 0, 0,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 12,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 11, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 11, 11, 11, 11, 11, 0, 11, 11, 0, 0, 11, 11, 11, 11, 7, 11,
+ 0, 0, 0, 0, 0, 0, 11, 10, 11, 11, 11, 0, 11, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 0, 11, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 7, 11, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14,
+ 0, 14, 14, 0, 14, 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15,
+ 15, 15, 15, 11, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 13, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 7, 0, 11, 11,
+ 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 14, 14, 14, 14, 14, 14, 14, 13, 0, 14,
+ 14, 14, 14, 14, 14, 11, 11, 14, 14, 0, 14, 14, 14, 14, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
+ 11, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 11, 11, 0, 0, 7, 0, 11, 0, 0, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 11, 14, 14, 14, 11, 14, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 11, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 0, 0, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 11, 11, 0, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 0,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 0, 11, 11, 0, 11, 11, 0, 0, 14, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 14, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 0, 11, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 14, 11, 11, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 11, 11, 0, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 11, 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 0, 0, 0, 11, 11, 0, 11, 0, 11, 11,
+ 0, 0, 0, 11, 11, 0, 0, 0, 11, 11, 11, 0, 0, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 11, 0,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 11, 0,
+ 0, 0, 0, 0, 11, 11, 11, 14, 0, 0, 0, 0, 0, 0, 0, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 14, 0, 0, 0, 0, 14,
+ 14, 14, 14, 14, 14, 0, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 14, 0, 14, 0, 0, 0, 0, 14, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 11, 11, 11, 11, 11, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14,
+ 14, 0, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 14, 14, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 0, 11, 0, 0, 0, 0, 0, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 14, 14, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0, 0,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 11, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 13, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 11, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 14, 11, 11,
+ 11, 11, 11, 11, 14, 11, 11, 14, 14, 14, 11, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 0, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0,
+ 0, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 0, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 0, 14, 16, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8, 0, 0, 10, 2, 2, 13, 13, 13, 13, 13, 12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+ 12, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 11, 0, 0, 0, 0, 11, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 11, 0, 0,
+ 0, 0, 0, 0, 11, 0, 11, 0, 11, 0, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 14,
+ 14, 14, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14,
+ 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 11, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 17, 17, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 11, 11, 11, 14, 11, 11, 11, 11, 14, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 0, 11, 11, 14,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 14, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 0, 14, 14, 14, 0, 0, 14, 14, 0, 0, 0, 0, 0, 14, 14,
+ 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 0, 0, 11, 11, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0,
+ 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 15, 14, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 0,
+ 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12,
+ 7, 0, 8, 0, 7, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 13,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 0, 8, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14,
+ 0, 0, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11,
+ 0, 0, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 0, 0, 11, 0, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 0, 14, 14, 0, 0, 0, 0, 0, 14, 14, 14, 14,
+ 11, 11, 11, 11, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 14, 14, 14, 0, 0, 0, 0, 14,
+ 11, 11, 11, 11, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 14, 14, 0, 0, 0,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 11, 14, 14, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 11, 11, 11, 11, 0, 0, 0, 0, 14, 14, 14, 14, 0, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 0, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 14, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 14, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 11, 11, 11,
+ 11, 11, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 14, 11,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 0, 0,
-};
-
-static RE_UINT8 re_emoji_presentation_stage_3[] = {
+ 14, 14, 14, 14, 11, 11, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 14, 14, 0, 0,
+ 14, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 14, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 21,
- 22, 23, 24, 0, 0, 0, 0, 0, 25, 26, 25, 27, 28, 25, 29, 30,
- 25, 31, 32, 25, 25, 25, 25, 33, 25, 34, 35, 36, 37, 18, 0, 38,
- 25, 25, 39, 0, 25, 25, 40, 41, 0, 0, 0, 0, 0, 0, 0, 42,
- 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 46, 25, 47, 48, 25,
- 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_emoji_presentation_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 12, 0, 30, 9, 0, 0, 0, 0, 96,
- 0, 0, 48, 0, 0, 255, 15, 0, 0, 0, 0, 128, 0, 0, 8, 0,
- 2, 12, 0, 96, 48, 64, 16, 0, 0, 4, 44, 36, 32, 12, 0, 0,
- 0, 1, 0, 0, 0, 80, 184, 0, 0, 0, 224, 0, 0, 0, 1, 128,
- 0, 0, 0, 24, 0, 0, 33, 0, 16, 0, 0, 0, 0, 128, 0, 0,
- 0, 64, 254, 7, 192, 255, 255, 255, 2, 0, 0, 4, 0, 128, 124, 7,
- 0, 0, 3, 0, 255, 255, 255, 255, 1, 224, 191, 255, 255, 255, 255, 223,
- 255, 255, 15, 0, 255, 135, 15, 0, 255, 255, 17, 255, 255, 255, 255, 127,
- 253, 255, 255, 255, 255, 255, 255, 159, 255, 255, 255, 63, 0, 120, 255, 255,
- 255, 0, 0, 4, 0, 0, 96, 0, 0, 0, 0, 248, 255, 255, 0, 0,
- 63, 16, 39, 0, 0, 24, 240, 7, 255, 15, 0, 0, 0, 224, 255, 255,
- 255, 255, 255, 247, 191, 255, 255, 255, 255, 255, 123, 252, 231, 199, 255, 255,
- 255, 231, 255, 255, 0, 0, 15, 7, 7, 0, 63, 0,
-};
-
-/* Emoji_Presentation: 544 bytes. */
-
-RE_UINT32 re_get_emoji_presentation(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_presentation_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_emoji_presentation_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_emoji_presentation_stage_3[pos + f] << 5;
- pos += code;
- value = (re_emoji_presentation_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Emoji_Modifier. */
-
-static RE_UINT8 re_emoji_modifier_stage_1[] = {
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
-};
-
-/* Emoji_Modifier: 130 bytes. */
-
-RE_UINT32 re_get_emoji_modifier(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_emoji_modifier_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_emoji_modifier_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_emoji_modifier_stage_3[pos + f] << 7;
- pos += code;
- value = (re_emoji_modifier_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Emoji_Modifier_Base. */
-
-static RE_UINT8 re_emoji_modifier_base_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_modifier_base_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_base_stage_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 0, 0, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 0, 14, 14, 14, 14, 11,
+ 14, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14,
+ 14, 11, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,
- 0, 6, 7, 0, 0, 8, 9, 0, 0, 10, 11, 12, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_base_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 156, 28, 0, 0, 0, 0, 0, 0,
- 204, 255, 1, 0, 192, 255, 255, 17, 238, 128, 2, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 48, 4, 0, 0, 97, 0, 0, 0, 0, 0,
- 224, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 112, 0,
- 1, 16, 0, 0, 0, 0, 0, 0, 0, 128, 0, 255, 64, 0, 255, 115,
- 0, 0, 0, 0, 0, 0, 96, 11, 0, 224, 254, 63, 0, 0, 0, 0,
-};
-
-/* Emoji_Modifier_Base: 324 bytes. */
-
-RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_modifier_base_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_emoji_modifier_base_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_emoji_modifier_base_stage_3[pos + f] << 6;
- pos += code;
- value = (re_emoji_modifier_base_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Emoji_Component. */
-
-static RE_UINT8 re_emoji_component_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_component_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1,
- 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_component_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 6,
- 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 8, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_component_stage_4[] = {
- 0, 0, 0, 0, 8, 4, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
- 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-};
-
-/* Emoji_Component: 340 bytes. */
-
-RE_UINT32 re_get_emoji_component(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_component_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_emoji_component_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_emoji_component_stage_3[pos + f] << 6;
- pos += code;
- value = (re_emoji_component_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Extended_Pictographic. */
-
-static RE_UINT8 re_extended_pictographic_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_extended_pictographic_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 9,
-};
-
-static RE_UINT8 re_extended_pictographic_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 11, 14, 14, 14, 14, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 7, 8,
- 0, 0, 0, 9, 0, 0, 10, 11, 12, 13, 14, 13, 15, 16, 17, 0,
- 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0,
- 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 23, 24, 25, 26, 27, 28, 13, 13, 13, 13, 13, 29,
- 13, 13, 13, 13, 30, 31, 13, 13, 13, 32, 13, 13, 0, 33, 0, 34,
- 35, 36, 37, 13, 38, 39, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 30,
-};
-
-static RE_UINT8 re_extended_pictographic_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 2, 0, 0, 240, 3, 0, 6, 0, 0,
- 0, 0, 0, 12, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 128, 0, 0, 0, 254, 15, 7, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120,
- 191, 255, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 63, 0, 255, 255, 255, 255, 255, 255, 63, 255, 87, 32, 2, 1, 24, 0,
- 144, 80, 184, 0, 248, 0, 0, 0, 0, 0, 224, 0, 2, 0, 1, 128,
- 0, 0, 0, 0, 0, 0, 48, 0, 224, 0, 0, 24, 0, 0, 0, 0,
- 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32,
- 0, 0, 128, 2, 0, 0, 0, 0, 0, 224, 0, 0, 0, 128, 0, 0,
- 0, 0, 0, 0, 0, 240, 3, 192, 0, 64, 254, 7, 0, 224, 255, 255,
- 255, 255, 255, 255, 63, 0, 0, 0, 254, 255, 0, 4, 0, 128, 252, 247,
- 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7,
- 255, 255, 255, 255, 255, 255, 255, 63, 192, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255,
- 0, 0, 224, 255, 255, 255, 255, 255, 0, 240, 0, 0, 0, 0, 0, 0,
- 0, 255, 0, 252, 0, 0, 0, 0, 0, 255, 0, 0, 0, 192, 255, 255,
- 0, 240, 255, 255, 255, 255, 255, 247, 191, 255, 255, 255, 255, 255, 255, 255,
-};
-
-/* Extended_Pictographic: 596 bytes. */
-
-RE_UINT32 re_get_extended_pictographic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_extended_pictographic_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_extended_pictographic_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_extended_pictographic_stage_3[pos + f] << 6;
- pos += code;
- value = (re_extended_pictographic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* NFD_Quick_Check. */
-
-static RE_UINT8 re_nfd_quick_check_stage_1[] = {
- 0, 1, 2, 3, 4, 1, 1, 5, 1, 1, 1, 6, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_nfd_quick_check_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 5, 10, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5,
- 5, 5, 5, 5, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5,
-};
-
-static RE_UINT8 re_nfd_quick_check_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 7, 8, 9,
- 10, 11, 0, 12, 0, 0, 0, 0, 13, 0, 0, 14, 0, 0, 0, 0,
- 0, 0, 0, 0, 15, 16, 0, 17, 18, 19, 0, 0, 0, 20, 21, 22,
- 0, 23, 0, 24, 0, 22, 0, 25, 0, 0, 0, 0, 0, 26, 27, 0,
- 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 32, 33, 34, 35, 36, 37,
- 38, 0, 0, 0, 39, 0, 40, 41, 42, 43, 44, 45, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0,
- 0, 48, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 51, 0,
- 0, 0, 0, 0, 31, 31, 31, 31, 52, 53, 31, 54, 55, 56, 0, 0,
- 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0,
- 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 65, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_nfd_quick_check_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 191, 255, 126, 62, 191, 255, 126, 190,
- 255, 255, 252, 255, 63, 255, 241, 126, 248, 241, 243, 255, 63, 255, 255, 127,
- 0, 0, 0, 0, 3, 128, 1, 0, 0, 224, 255, 223, 207, 255, 49, 255,
- 255, 255, 255, 207, 192, 255, 15, 0, 27, 0, 0, 0, 0, 0, 16, 64,
- 224, 215, 1, 0, 0, 252, 1, 0, 0, 124, 24, 0, 0, 0, 0, 0,
- 139, 112, 0, 2, 0, 0, 0, 2, 0, 0, 139, 112, 0, 0, 192, 0,
- 6, 0, 207, 252, 252, 252, 63, 3, 0, 0, 0, 0, 124, 0, 0, 0,
- 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 0,
- 0, 0, 0, 255, 0, 0, 0, 0, 0, 24, 0, 176, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 78, 0, 0, 0, 0,
- 0, 25, 0, 48, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 28, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 129, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
- 8, 32, 132, 16, 0, 2, 104, 1, 2, 0, 8, 32, 132, 16, 0, 2,
- 0, 0, 0, 0, 64, 0, 0, 0, 64, 85, 4, 0, 0, 0, 0, 40,
- 11, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 11, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3,
- 255, 255, 63, 63, 255, 255, 255, 255, 63, 63, 255, 170, 255, 255, 255, 63,
- 255, 255, 255, 255, 255, 255, 223, 95, 222, 255, 207, 239, 255, 255, 220, 63,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 12, 0, 0,
- 0, 0, 0, 12, 0, 64, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0,
- 16, 18, 0, 0, 80, 0, 0, 0, 146, 2, 0, 0, 5, 224, 51, 3,
- 51, 3, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 15, 60, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 80, 85, 85, 165, 2, 219, 54, 0, 0, 16, 64, 0, 80, 85, 85,
- 165, 2, 219, 54, 0, 0, 144, 71, 255, 255, 255, 255, 15, 0, 0, 0,
- 255, 63, 229, 127, 101, 252, 255, 255, 255, 255, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 3, 0, 0, 0, 0, 0, 0, 0, 160, 0, 252, 127, 95,
- 219, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 8, 0, 0,
- 0, 0, 0, 0, 0, 192, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 12,
- 0, 0, 0, 192, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
- 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 63, 0, 0, 0, 0,
-};
-
-/* NFD_Quick_Check: 996 bytes. */
-
-RE_UINT32 re_get_nfd_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_nfd_quick_check_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_nfd_quick_check_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_nfd_quick_check_stage_3[pos + f] << 6;
- pos += code;
- value = (re_nfd_quick_check_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* NFC_Quick_Check. */
-
-static RE_UINT8 re_nfc_quick_check_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
- 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_nfc_quick_check_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 4, 5, 6, 0, 7, 8, 9, 10, 8, 11, 0, 0, 12, 13,
- 14, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 19,
- 20, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 0, 14, 14, 0, 14,
+ 14, 14, 14, 14, 14, 14, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 0,
+ 14, 14, 0, 14, 14, 14, 14, 14, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 14,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 14,
+ 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 25, 25, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 29, 30, 0, 0, 0, 8, 0, 0, 31, 0, 32, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 14, 14, 0,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14,
+ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 25, 25, 25, 25, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_nfc_quick_check_stage_3[] = {
+ 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 11,
- 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 18, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 22, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 10, 0, 29, 30, 31,
- 29, 0, 26, 27, 28, 10, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 34, 0,
- 0, 0, 0, 0, 0, 33, 33, 33, 35, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38,
- 0, 0, 0, 0, 0, 0, 0, 19, 0, 39, 26, 26, 26, 40, 0, 38,
- 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 45, 46, 47, 48, 49, 15, 15, 15, 15, 15, 15, 15, 45, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 41, 0, 0, 0, 0,
- 0, 0, 0, 50, 0, 49, 47, 51, 52, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 53, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 56, 31, 0, 0, 0, 0, 0, 0, 0,
- 15, 15, 15, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_nfc_quick_check_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 2, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- 2, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
-};
-
-/* NFC_Quick_Check: 1592 bytes. */
-
-RE_UINT32 re_get_nfc_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_nfc_quick_check_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_nfc_quick_check_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_nfc_quick_check_stage_3[pos + f] << 3;
- value = re_nfc_quick_check_stage_4[pos + code];
-
- return value;
-}
-
-/* NFKD_Quick_Check. */
-
-static RE_UINT8 re_nfkd_quick_check_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 0, 0, 11, 0, 0, 11, 11, 0, 0, 11, 11, 11, 11, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 11, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 11, 11, 0, 11, 0, 0, 11, 0, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 11, 11, 0, 11, 0, 11, 0, 0, 0, 0,
+ 0, 0, 11, 0, 0, 0, 0, 11, 0, 11, 0, 11, 0, 11, 11, 11,
+ 0, 11, 11, 0, 11, 0, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11,
+ 0, 11, 11, 0, 11, 0, 0, 11, 11, 11, 11, 0, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_nfkd_quick_check_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 17, 18, 19,
- 20, 21, 22, 23, 24, 7, 7, 7, 7, 7, 25, 7, 26, 27, 28, 29,
- 30, 31, 32, 33, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 34, 35, 7, 7, 7, 36, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 37, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 33, 38, 39, 33, 40, 41, 42,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 43, 44, 7, 45, 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 48, 7, 7, 49, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 53, 7,
- 7, 54, 55, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 33, 33, 56, 7, 7, 7, 7, 7,
-};
+RE_UINT32 re_get_word_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_nfkd_quick_check_stage_3[] = {
- 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
- 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
- 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 33, 0, 0, 0, 34, 0, 0, 35, 36, 0, 0, 0, 0, 0,
- 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0,
- 0, 0, 39, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 43, 44, 0,
- 45, 0, 46, 47, 48, 49, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51,
- 52, 53, 54, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
- 59, 59, 59, 59, 60, 59, 59, 61, 62, 59, 63, 64, 59, 65, 66, 67,
- 68, 69, 70, 71, 72, 40, 0, 0, 73, 74, 75, 59, 76, 77, 78, 0,
- 79, 80, 81, 82, 83, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 59, 59, 59, 59, 87, 45, 0, 0, 88, 0, 0, 51, 0,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 0, 0, 43, 59, 59, 59, 59, 59, 59, 91, 0,
- 92, 93, 94, 95, 96, 94, 95, 97, 0, 98, 59, 59, 99, 0, 0, 0,
- 100, 59, 101, 100, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103,
- 0, 0, 104, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 105, 0, 0,
- 106, 107, 59, 108, 59, 59, 61, 0, 109, 110, 111, 59, 59, 112, 113, 59,
- 59, 64, 114, 59, 4, 59, 115, 116, 117, 114, 118, 119, 59, 59, 59, 120,
- 121, 59, 59, 59, 59, 100, 122, 123, 0, 0, 0, 0, 124, 125, 0, 0,
- 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0,
- 0, 0, 130, 15, 0, 58, 92, 0, 59, 59, 65, 59, 131, 132, 133, 59,
- 134, 135, 136, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 7, 59, 59,
- 59, 59, 59, 59, 59, 59, 137, 59, 133, 138, 139, 140, 141, 142, 0, 0,
- 143, 144, 145, 39, 102, 0, 0, 0, 146, 60, 147, 0, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_nfkd_quick_check_stage_4[] = {
- 0, 0, 0, 0, 1, 133, 60, 119, 191, 255, 126, 62, 191, 255, 126, 190,
- 255, 255, 252, 255, 63, 255, 253, 254, 249, 243, 243, 255, 63, 255, 255, 255,
- 3, 128, 1, 0, 240, 255, 255, 223, 207, 255, 63, 255, 255, 255, 255, 207,
- 192, 255, 15, 0, 0, 0, 255, 1, 0, 0, 0, 63, 31, 0, 0, 0,
- 27, 0, 0, 0, 0, 0, 16, 68, 240, 215, 1, 0, 0, 252, 1, 0,
- 0, 124, 127, 0, 0, 0, 55, 2, 139, 112, 0, 2, 0, 0, 0, 2,
- 0, 0, 139, 112, 0, 0, 192, 0, 6, 0, 207, 252, 252, 252, 63, 3,
- 128, 0, 0, 0, 124, 0, 0, 0, 0, 0, 224, 1, 5, 0, 8, 0,
- 0, 2, 18, 0, 0, 0, 0, 255, 0, 24, 0, 176, 0, 0, 72, 0,
- 0, 0, 0, 78, 0, 25, 0, 48, 0, 0, 16, 0, 0, 28, 0, 0,
- 0, 1, 0, 0, 129, 13, 0, 0, 0, 0, 0, 116, 0, 0, 8, 0,
- 0, 0, 0, 48, 0, 16, 0, 0, 8, 32, 132, 16, 0, 2, 232, 3,
- 2, 0, 8, 32, 132, 16, 0, 2, 64, 0, 0, 0, 0, 0, 0, 16,
- 64, 85, 4, 0, 0, 0, 0, 40, 11, 0, 0, 0, 0, 112, 255, 247,
- 255, 191, 255, 255, 255, 7, 0, 1, 0, 0, 0, 248, 255, 255, 255, 255,
- 255, 255, 255, 15, 255, 255, 255, 3, 255, 255, 63, 63, 63, 63, 255, 170,
- 255, 255, 255, 63, 255, 255, 223, 255, 223, 255, 207, 239, 255, 255, 220, 127,
- 255, 7, 130, 0, 112, 128, 216, 80, 128, 3, 128, 128, 0, 0, 243, 255,
- 255, 127, 255, 31, 239, 254, 111, 62, 87, 189, 251, 251, 225, 3, 255, 255,
- 0, 2, 0, 12, 0, 64, 0, 0, 0, 224, 0, 0, 16, 18, 0, 0,
- 80, 176, 1, 0, 146, 2, 0, 0, 5, 224, 51, 3, 51, 3, 0, 0,
- 0, 240, 0, 0, 15, 60, 0, 0, 0, 6, 0, 0, 255, 7, 0, 0,
- 0, 0, 112, 0, 0, 128, 0, 0, 0, 0, 0, 128, 255, 255, 63, 0,
- 1, 0, 0, 0, 0, 0, 64, 7, 0, 80, 85, 85, 165, 2, 219, 54,
- 0, 0, 16, 216, 0, 0, 144, 199, 0, 0, 254, 255, 255, 127, 252, 255,
- 255, 255, 255, 127, 255, 0, 255, 255, 0, 0, 1, 0, 0, 0, 0, 3,
- 0, 0, 0, 240, 15, 0, 0, 0, 255, 63, 229, 127, 101, 252, 255, 255,
- 255, 63, 255, 255, 127, 0, 248, 160, 255, 255, 127, 95, 219, 255, 255, 255,
- 255, 255, 3, 0, 0, 0, 248, 255, 0, 0, 255, 255, 255, 0, 0, 0,
- 0, 0, 255, 31, 0, 0, 255, 3, 159, 255, 247, 255, 127, 15, 215, 255,
- 255, 255, 255, 31, 254, 255, 255, 255, 252, 252, 252, 28, 127, 127, 0, 0,
- 0, 0, 0, 20, 0, 8, 0, 0, 0, 192, 0, 0, 0, 24, 0, 0,
- 0, 0, 0, 88, 0, 0, 0, 12, 0, 0, 0, 192, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 255, 207, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 255, 7, 255, 255,
- 255, 127, 255, 255, 255, 255, 0, 0, 7, 0, 255, 255, 255, 1, 3, 0,
-};
+ v = re_word_break_table_1[field_2];
+ v = re_word_break_table_2[(v << 5) | field_1];
+ v = re_word_break_table_3[(v << 5) | field_0];
-/* NFKD_Quick_Check: 1504 bytes. */
-
-RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_nfkd_quick_check_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_nfkd_quick_check_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_nfkd_quick_check_stage_3[pos + f] << 5;
- pos += code;
- value = (re_nfkd_quick_check_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* NFKC_Quick_Check. */
-
-static RE_UINT8 re_nfkc_quick_check_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 6,
- 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 10,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 11,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+/* XDigit. */
+static RE_UINT8 re_xdigit_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11,
+ 8, 12, 8, 13, 14, 15, 16, 17, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 19, 8, 8, 20, 8, 21, 8, 8, 8, 22, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
};
-static RE_UINT8 re_nfkc_quick_check_stage_2[] = {
- 0, 0, 1, 0, 2, 3, 0, 4, 0, 0, 5, 6, 7, 8, 9, 10,
- 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16, 17, 18, 0, 0, 15, 19, 15, 20,
- 0, 21, 0, 22, 15, 20, 0, 23, 24, 0, 24, 25, 26, 27, 28, 0,
- 29, 0, 0, 30, 0, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0,
- 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 38, 0, 0, 39, 40, 41,
- 42, 43, 44, 0, 45, 46, 47, 0, 48, 0, 0, 0, 49, 0, 0, 0,
- 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 53, 0, 54, 0, 0, 0, 0,
- 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 57, 24, 51, 51, 51, 58,
- 59, 0, 60, 61, 62, 51, 63, 0, 64, 65, 51, 51, 51, 51, 51, 51,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 66, 0, 67,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 51, 51, 51, 51, 69, 70, 51, 71, 72, 73, 74, 75,
- 51, 51, 51, 51, 76, 77, 78, 79, 80, 81, 51, 82, 83, 51, 84, 85,
- 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 15, 20, 0, 0,
- 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 90, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 93, 94, 95, 96, 97, 51, 51, 51, 51, 98, 51, 51, 51, 51, 99,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 100, 101, 102, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 103, 104, 105, 0, 106, 107, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 51, 51, 51, 51, 51, 51, 51, 108, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_xdigit_table_2[] = {
+ 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
};
-static RE_UINT8 re_nfkc_quick_check_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
- 0, 0, 0, 0, 0, 0, 5, 6, 1, 7, 0, 0, 0, 0, 0, 6,
- 8, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 1,
- 0, 0, 0, 12, 9, 0, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 25, 0, 0, 0, 26, 7, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 27, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 29,
- 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
- 0, 0, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, 0, 0,
- 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0,
- 36, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 31, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 35, 0, 0, 0, 0,
- 0, 22, 0, 0, 0, 0, 0, 0, 39, 40, 41, 22, 0, 7, 42, 43,
- 7, 0, 39, 40, 41, 22, 0, 7, 0, 0, 0, 0, 0, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 44, 45, 46, 0,
- 0, 0, 0, 0, 0, 45, 45, 45, 47, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 11, 50,
- 11, 51, 11, 11, 11, 52, 0, 1, 0, 0, 0, 53, 11, 11, 11, 11,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55,
- 0, 0, 0, 0, 0, 0, 0, 42, 43, 56, 39, 42, 39, 42, 0, 57,
- 11, 52, 58, 0, 49, 6, 59, 60, 6, 43, 6, 6, 0, 0, 61, 11,
- 11, 25, 11, 9, 0, 1, 0, 0, 62, 63, 64, 65, 66, 67, 68, 68,
- 69, 43, 11, 11, 11, 11, 11, 11, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 70, 0, 0,
- 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 52, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 11, 11, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 71, 52,
- 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 0, 63, 11, 11, 25, 73, 11, 0, 0, 0, 0,
- 11, 11, 11, 25, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 25,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 43,
- 0, 0, 0, 8, 0, 0, 0, 0, 11, 12, 74, 25, 75, 73, 11, 11,
- 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 43, 0, 0, 0, 0,
- 25, 0, 53, 76, 11, 11, 25, 77, 78, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 43, 0, 0, 0, 53, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 12, 0, 0, 11, 11, 11, 11, 11, 11,
- 11, 11, 73, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 11, 9,
- 0, 0, 11, 43, 0, 0, 11, 11, 79, 11, 50, 11, 25, 80, 81, 11,
- 11, 11, 11, 11, 11, 11, 11, 9, 63, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 25, 73, 73, 73, 82, 25, 25, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 31, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 20, 83, 0, 0, 0, 0, 0, 31, 0, 0,
- 0, 0, 0, 84, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
- 1, 0, 0, 0, 0, 0, 0, 0, 11, 11, 85, 11, 11, 11, 11, 11,
- 11, 11, 11, 85, 86, 87, 11, 88, 62, 11, 11, 11, 11, 11, 11, 11,
- 51, 89, 85, 85, 11, 11, 11, 90, 77, 73, 91, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 12, 11, 11, 11, 11, 92, 11, 11, 11, 11, 11, 11,
- 62, 11, 11, 11, 93, 63, 50, 94, 41, 56, 93, 54, 93, 50, 50, 95,
- 11, 68, 11, 80, 96, 68, 11, 80, 11, 52, 11, 11, 11, 25, 11, 11,
- 11, 11, 0, 0, 0, 82, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 52, 0, 11, 11, 11, 11, 11, 80, 11, 1, 43, 0, 0, 0, 0, 0,
- 11, 11, 11, 12, 0, 0, 0, 0,
+static RE_UINT8 re_xdigit_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 255, 3, 0, 0,
+ 192, 255, 0, 0, 255, 3, 255, 3, 0, 0, 192, 255, 0, 192, 255, 255,
+ 255, 255, 255, 255
};
-static RE_UINT8 re_nfkc_quick_check_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 2, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- 2, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0,
- 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1,
- 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
- 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 2, 2, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1,
- 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
- 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
- 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
- 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 1, 1, 1,
-};
+RE_UINT32 re_get_xdigit(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* NFKC_Quick_Check: 2688 bytes. */
-
-RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_nfkc_quick_check_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_nfkc_quick_check_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_nfkc_quick_check_stage_3[pos + f] << 3;
- value = re_nfkc_quick_check_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Alphanumeric. */
+ v = re_xdigit_table_1[field_2];
+ v = re_xdigit_table_2[(v << 5) | field_1];
+ v = re_xdigit_table_3[(v << 2) | field_0];
-static RE_UINT8 re_alphanumeric_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
+ return (v >> offset) & 0x1;
+}
+
+/* XID_Continue. */
+static RE_UINT8 re_xid_continue_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 38, 39, 40, 9, 41, 9, 42, 43, 9, 9, 44, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 45, 12, 12, 12, 46, 47, 12,
+ 12, 12, 12, 48, 12, 12, 12, 12, 12, 12, 49, 9, 9, 9, 50, 9,
+ 12, 12, 12, 12, 51, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -16224,715 +25950,263 @@ static RE_UINT8 re_alphanumeric_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 52, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_alphanumeric_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 31, 31, 31, 95, 96, 97, 98, 31, 31, 31, 31, 31, 31, 31, 31,
- 99, 100, 101, 31, 31, 31, 31, 31, 102, 103, 31, 31, 31, 31, 104, 31,
- 31, 105, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_alphanumeric_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 3, 0, 0, 4, 5, 6, 7, 6, 7,
+static RE_UINT16 re_xid_continue_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 7, 8, 6, 6, 6, 9, 10, 11, 6, 12,
+ 6, 6, 6, 6, 13, 6, 6, 6, 6, 14, 15, 6, 16, 17, 18, 19,
+ 20, 6, 6, 21, 6, 6, 22, 23, 24, 6, 25, 6, 6, 26, 6, 27,
+ 6, 28, 29, 30, 0, 31, 32, 11, 6, 6, 6, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 43, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 53, 6, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 0, 70, 71, 72, 0, 73, 74, 75, 76, 77, 78, 79, 0,
+ 6, 6, 80, 6, 81, 6, 82, 83, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 84, 6, 85, 86, 87, 6, 88, 6, 89, 90, 91, 6, 6, 92,
+ 67, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 93, 3, 6, 6, 94, 95, 96, 97, 98, 6, 6, 99, 100,
+ 101, 6, 6, 102, 6, 103, 6, 104, 105, 106, 107, 108, 6, 109, 110, 0,
+ 29, 6, 105, 111, 112, 113, 114, 0, 6, 6, 115, 116, 6, 6, 6, 97,
+ 6, 117, 118, 81, 119, 89, 120, 68, 6, 6, 6, 6, 6, 6, 6, 121,
+ 6, 6, 6, 6, 6, 6, 6, 6, 92, 6, 122, 81, 6, 123, 124, 125,
+ 0, 126, 127, 128, 129, 0, 129, 130, 131, 132, 133, 6, 134, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 135, 105, 6, 6, 6, 6, 136, 6, 82, 6, 137, 138, 139, 139, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 141, 67, 6, 142, 67, 6, 83, 143, 14, 6, 6, 144, 6, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 9, 10, 0,
- 0, 0, 0, 0, 11, 0, 0, 12, 13, 6, 14, 6, 6, 6, 6, 15,
- 6, 6, 6, 6, 6, 6, 6, 6, 16, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 2, 6, 17, 6, 6, 18, 0, 0, 19, 20, 6, 21, 22,
- 0, 3, 6, 6, 6, 23, 24, 6, 6, 6, 6, 6, 6, 25, 26, 27,
- 0, 6, 6, 6, 28, 6, 6, 6, 6, 6, 6, 9, 6, 6, 3, 29,
- 6, 30, 31, 0, 6, 18, 3, 0, 0, 0, 6, 32, 0, 33, 34, 6,
- 6, 6, 6, 35, 36, 37, 38, 2, 39, 40, 41, 42, 43, 44, 38, 45,
- 46, 40, 41, 47, 48, 49, 50, 51, 52, 14, 41, 53, 54, 55, 38, 56,
- 57, 40, 41, 53, 58, 59, 38, 60, 61, 62, 63, 24, 64, 65, 50, 0,
- 66, 67, 41, 68, 69, 70, 38, 0, 66, 67, 41, 71, 69, 72, 38, 73,
- 66, 67, 6, 74, 75, 76, 38, 77, 78, 79, 6, 80, 81, 82, 50, 83,
- 2, 6, 6, 3, 84, 1, 0, 0, 85, 6, 86, 87, 88, 89, 0, 0,
- 55, 0, 1, 0, 23, 6, 31, 2, 90, 23, 6, 31, 0, 0, 0, 0,
- 6, 6, 6, 91, 1, 6, 6, 6, 6, 92, 6, 6, 93, 6, 6, 94,
- 6, 6, 6, 6, 95, 96, 6, 6, 95, 6, 6, 97, 98, 7, 6, 6,
- 6, 98, 6, 6, 6, 3, 0, 0, 6, 0, 6, 6, 6, 6, 6, 99,
- 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 27, 6, 2, 3, 6, 6, 6, 6, 100, 18,
- 36, 101, 6, 101, 6, 101, 36, 102, 6, 6, 6, 38, 18, 103, 1, 0,
- 0, 1, 6, 6, 6, 6, 6, 18, 6, 6, 3, 6, 6, 6, 6, 51,
- 6, 104, 105, 18, 50, 6, 92, 106, 6, 6, 105, 6, 1, 1, 0, 0,
- 6, 105, 6, 6, 6, 104, 2, 106, 1, 1, 107, 0, 0, 0, 0, 0,
- 6, 6, 6, 108, 109, 1, 0, 0, 6, 6, 89, 6, 6, 6, 15, 9,
- 6, 6, 6, 110, 68, 6, 6, 92, 18, 6, 6, 74, 0, 0, 111, 112,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 113, 106,
- 6, 99, 6, 6, 99, 114, 6, 92, 6, 6, 6, 115, 116, 117, 31, 116,
- 0, 0, 0, 0, 0, 0, 0, 118, 0, 31, 0, 0, 0, 0, 0, 0,
- 119, 120, 121, 89, 122, 0, 6, 6, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 6, 6, 1, 0,
- 6, 6, 104, 6, 6, 104, 6, 6, 6, 6, 6, 6, 6, 6, 123, 83,
- 6, 6, 93, 6, 6, 6, 124, 0, 6, 110, 125, 125, 125, 125, 6, 6,
- 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 127, 0, 128, 129, 2, 6, 6, 6, 6, 130, 2, 6, 6, 6, 6, 94,
- 131, 6, 6, 2, 6, 6, 6, 6, 104, 0, 6, 3, 0, 0, 0, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 51, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 31, 0, 0, 0, 0, 6, 6, 92,
- 31, 6, 105, 0, 6, 6, 104, 132, 6, 6, 6, 6, 6, 6, 6, 0,
- 0, 113, 133, 6, 6, 6, 6, 6, 134, 6, 6, 6, 135, 0, 0, 113,
- 15, 6, 136, 0, 6, 6, 6, 101, 6, 6, 6, 6, 137, 1, 0, 138,
- 6, 6, 3, 6, 6, 22, 6, 31, 6, 6, 6, 139, 126, 1, 6, 104,
- 6, 6, 6, 110, 92, 1, 6, 79, 6, 6, 6, 104, 140, 141, 6, 142,
- 143, 144, 125, 6, 6, 94, 136, 6, 6, 6, 6, 6, 6, 6, 3, 1,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 101, 6, 145, 6, 6, 105,
- 6, 6, 6, 6, 6, 6, 92, 6, 6, 6, 6, 6, 6, 1, 0, 0,
- 110, 146, 41, 147, 148, 6, 6, 6, 6, 6, 6, 9, 0, 149, 6, 6,
- 6, 6, 6, 92, 0, 6, 6, 6, 6, 133, 6, 6, 136, 0, 0, 105,
- 0, 0, 0, 0, 0, 0, 0, 150, 6, 6, 6, 6, 6, 6, 6, 31,
- 0, 1, 2, 3, 2, 3, 50, 6, 6, 6, 6, 104, 151, 152, 0, 0,
- 35, 6, 7, 153, 92, 92, 0, 0, 6, 6, 6, 6, 6, 6, 6, 3,
- 0, 0, 0, 0, 6, 6, 6, 106, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 31, 6, 6, 6, 55, 0, 0,
- 6, 6, 28, 6, 3, 6, 6, 3, 6, 92, 6, 6, 154, 155, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 92, 1, 6, 6, 154, 6, 105,
- 6, 6, 136, 6, 6, 6, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 110, 6, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 156, 6, 6, 157, 6, 51, 6, 110, 6, 104, 0, 0, 0, 0, 6, 158,
- 6, 51, 6, 1, 0, 0, 0, 0, 6, 6, 6, 159, 0, 0, 0, 0,
- 160, 161, 6, 51, 0, 0, 6, 31, 6, 31, 0, 0, 23, 6, 106, 0,
- 6, 6, 6, 51, 6, 51, 6, 22, 6, 9, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 18, 0, 0, 0, 6, 6, 6, 22, 6, 6, 6, 22,
- 6, 6, 136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 31, 107, 6, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 110,
- 6, 6, 6, 6, 51, 0, 50, 0, 133, 6, 6, 18, 0, 6, 18, 1,
- 6, 6, 6, 162, 163, 6, 6, 164, 6, 6, 6, 6, 165, 166, 0, 0,
- 6, 14, 6, 167, 0, 0, 0, 0, 168, 19, 18, 6, 6, 6, 18, 1,
- 39, 40, 41, 53, 58, 169, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 170, 171, 0, 0, 6, 6, 6, 6, 172, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 173, 0, 174, 0, 0,
- 6, 6, 6, 104, 175, 1, 0, 0, 6, 6, 6, 176, 1, 0, 0, 0,
- 6, 74, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 18, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 1, 126,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 6, 6, 30, 177, 0,
- 6, 6, 6, 178, 0, 6, 6, 6, 6, 179, 0, 0, 6, 6, 6, 18,
- 41, 6, 6, 125, 55, 1, 0, 133, 6, 133, 23, 110, 0, 0, 0, 0,
- 180, 6, 6, 181, 182, 1, 183, 6, 104, 184, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 110,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 104, 0, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 18, 6, 104, 1, 0, 0, 0, 0, 0, 0, 6, 92, 0,
- 6, 6, 6, 0, 101, 1, 149, 185, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 21, 6, 6, 6, 124, 6, 0, 0, 0, 0, 186, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 136,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 22,
- 6, 104, 0, 0, 0, 22, 187, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 105,
- 6, 6, 6, 6, 6, 6, 3, 31, 18, 188, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 150, 6, 6, 6, 36, 189, 190, 108, 6, 6, 6,
- 191, 192, 6, 193, 194, 67, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 195, 6, 67, 94, 6, 94,
- 6, 150, 6, 150, 104, 6, 104, 6, 41, 6, 41, 6, 196, 6, 6, 6,
- 7, 134, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 31, 198, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 105, 1,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 106, 0, 0, 0,
- 6, 6, 6, 6, 199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 108, 6, 200, 201, 202, 203, 204, 205, 206, 105, 207, 105, 0, 0, 0, 0,
- 0, 0, 0, 6, 1, 6, 1, 6, 1, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 110, 0, 0,
- 6, 6, 6, 106, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 92, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 55, 0,
- 6, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_alphanumeric_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 195, 255, 3, 0, 31, 80, 32, 0, 223, 188, 64, 215, 251, 255, 191, 255,
- 3, 252, 127, 2, 255, 1, 255, 191, 182, 0, 255, 135, 7, 0, 255, 254,
- 255, 195, 239, 31, 254, 225, 255, 159, 0, 224, 48, 4, 255, 252, 255, 31,
- 223, 63, 240, 255, 248, 3, 255, 239, 255, 223, 225, 255, 207, 255, 239, 159,
- 249, 255, 255, 253, 197, 227, 159, 89, 128, 176, 3, 16, 238, 135, 109, 195,
- 135, 25, 2, 94, 192, 255, 63, 0, 238, 191, 237, 227, 191, 27, 1, 0,
- 0, 30, 238, 159, 159, 25, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199,
- 199, 29, 129, 0, 239, 223, 253, 255, 255, 227, 223, 29, 96, 7, 239, 227,
- 96, 64, 6, 0, 255, 231, 223, 93, 240, 128, 0, 252, 236, 255, 127, 252,
- 251, 47, 127, 128, 95, 255, 12, 0, 127, 32, 214, 247, 175, 255, 255, 59,
- 95, 32, 255, 243, 3, 255, 127, 249, 255, 63, 191, 32, 255, 247, 255, 61,
- 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 15, 0, 13, 0, 128, 16,
- 255, 127, 255, 15, 31, 0, 128, 0, 239, 255, 239, 15, 127, 0, 0, 222,
- 111, 4, 128, 255, 255, 170, 223, 95, 220, 31, 207, 15, 2, 128, 132, 252,
- 47, 62, 80, 189, 224, 67, 31, 120, 255, 128, 127, 127, 0, 128, 224, 0,
- 254, 3, 62, 31, 127, 224, 224, 255, 240, 143, 252, 255, 255, 249, 124, 0,
- 255, 0, 47, 0, 252, 232, 247, 255, 5, 0, 0, 56, 60, 0, 126, 126,
- 126, 0, 127, 248, 248, 224, 127, 95, 219, 255, 248, 255, 223, 255, 252, 252,
- 252, 28, 255, 183, 15, 255, 62, 0, 63, 253, 191, 145, 55, 0, 255, 192,
- 111, 240, 239, 254, 199, 255, 112, 0, 71, 0, 30, 0, 255, 23, 159, 64,
- 127, 189, 129, 224, 187, 7, 255, 131, 179, 0, 63, 127, 0, 63, 17, 0,
- 63, 1, 26, 0, 231, 127, 255, 32, 127, 251, 127, 180, 203, 0, 191, 253,
- 123, 1, 255, 224, 11, 0, 240, 0, 255, 67, 100, 222, 255, 235, 191, 231,
- 223, 223, 255, 123, 95, 252, 63, 255, 247, 207, 219, 7, 128, 63, 143, 8,
- 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 238, 251,
-};
-
-/* Alphanumeric: 2912 bytes. */
-
-RE_UINT32 re_get_alphanumeric(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_alphanumeric_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_alphanumeric_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_alphanumeric_stage_3[pos + f] << 4;
- pos += code;
- value = (re_alphanumeric_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Any. */
-
-RE_UINT32 re_get_any(RE_UINT32 ch) {
- return 1;
-}
-
-/* Blank. */
-
-static RE_UINT8 re_blank_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_blank_stage_2[] = {
- 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_blank_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 3, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_blank_stage_4[] = {
- 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 78,
+ 6, 6, 6, 6, 145, 0, 24, 81, 6, 6, 6, 6, 6, 6, 6, 6,
+ 146, 147, 6, 148, 6, 6, 6, 26, 149, 150, 6, 6, 151, 6, 152, 153,
+ 6, 154, 6, 97, 6, 6, 155, 156, 6, 157, 97, 78, 6, 6, 158, 105,
+ 6, 138, 159, 160, 6, 6, 161, 162, 163, 164, 83, 80, 6, 6, 6, 165,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 166, 167, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 157, 6, 6, 168, 0, 169, 170, 171, 6, 6, 26, 172, 6,
+ 6, 6, 81, 173, 6, 6, 6, 6, 6, 81, 24, 6, 174, 6, 175, 1,
+ 91, 176, 177, 178, 6, 6, 6, 78, 1, 2, 3, 107, 6, 105, 179, 0,
+ 180, 181, 182, 0, 6, 6, 6, 68, 0, 0, 6, 96, 0, 0, 0, 183,
+ 0, 0, 0, 0, 78, 6, 184, 114, 6, 185, 103, 68, 81, 6, 186, 0,
+ 6, 6, 6, 6, 81, 80, 187, 29, 6, 188, 6, 189, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 138, 104, 175, 0, 0, 0, 0,
+ 190, 191, 104, 138, 105, 0, 0, 192, 104, 168, 0, 0, 6, 193, 0, 0,
+ 194, 195, 0, 78, 78, 0, 75, 196, 6, 104, 104, 197, 26, 0, 0, 0,
+ 6, 6, 134, 0, 6, 197, 6, 197, 6, 198, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 199, 0, 0, 78, 200, 184, 0, 0, 24, 201, 138,
+ 6, 6, 196, 202, 6, 68, 24, 203, 6, 31, 204, 205, 6, 6, 206, 0,
+ 207, 208, 0, 0, 209, 119, 6, 210, 34, 211, 212, 213, 0, 0, 0, 0,
+ 6, 6, 214, 215, 6, 6, 216, 0, 0, 0, 0, 0, 6, 217, 218, 0,
+ 6, 6, 219, 0, 6, 102, 100, 0, 89, 115, 0, 0, 0, 0, 0, 0,
+ 6, 68, 0, 0, 0, 6, 6, 220, 221, 222, 223, 0, 0, 224, 225, 226,
+ 6, 105, 200, 6, 227, 0, 6, 102, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 5, 229, 230, 174, 231, 0, 0, 232, 233, 198, 234, 235, 100, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 236, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 168, 0, 0, 0,
+ 6, 6, 6, 144, 6, 6, 6, 6, 6, 6, 189, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 7, 0, 0, 0, 128, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
-};
-
-/* Blank: 218 bytes. */
-
-RE_UINT32 re_get_blank(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_blank_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_blank_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_blank_stage_3[pos + f] << 7;
- pos += code;
- value = (re_blank_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Graph. */
-
-static RE_UINT8 re_graph_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 7, 7, 7, 14,
- 15, 16, 17, 18, 19, 13, 20, 13, 21, 13, 13, 13, 13, 22, 7, 7,
- 23, 24, 13, 13, 13, 13, 25, 26, 13, 13, 27, 28, 29, 30, 31, 32,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 33, 7, 34, 35, 7, 36, 7, 7, 7, 37, 13, 38,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 39, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40,
-};
-
-static RE_UINT8 re_graph_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 3, 4, 2, 2, 5, 6, 7, 2, 8, 9,
- 10, 11, 2, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 2, 25, 2, 2, 26, 27, 28, 29, 2, 2, 2, 2, 2, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 2, 43, 2, 2, 44, 45,
- 46, 47, 2, 48, 2, 2, 2, 2, 49, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 50, 51, 52, 53, 54, 55, 56, 57, 2, 58,
- 59, 60, 61, 62, 63, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 64, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 65,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 66, 2, 2, 67, 68, 2, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 80, 81, 82, 83, 2, 2, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 79, 94, 95, 96, 2, 97, 98, 79, 2, 2, 99, 79,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 79, 111, 79, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 79, 121, 122, 79, 123, 124, 125, 126, 79,
- 127, 128, 79, 129, 130, 131, 79, 79, 132, 133, 134, 135, 79, 136, 79, 137,
- 2, 2, 2, 2, 2, 2, 2, 138, 139, 2, 140, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 2, 2, 2, 2, 141, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 2, 2, 2, 2, 142, 79, 79, 79,
- 2, 2, 2, 2, 143, 144, 145, 146, 79, 79, 79, 79, 147, 148, 149, 150,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 68,
- 2, 2, 2, 2, 2, 151, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 152, 2, 2, 153, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 154, 155, 79, 79, 79, 79, 79, 79,
- 2, 156, 157, 158, 159, 160, 161, 79, 162, 163, 164, 2, 2, 165, 2, 166,
- 2, 2, 2, 2, 2, 167, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 168, 79, 169, 79, 79, 170, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 171, 172, 79, 79, 79, 79, 79, 173, 174, 175, 79, 176, 177, 79, 79,
- 178, 179, 180, 181, 182, 79, 2, 2, 2, 2, 2, 2, 2, 183, 184, 185,
- 186, 187, 188, 189, 190, 191, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 192, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 193, 2,
- 194, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 195, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 196, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 197, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 198, 79, 2, 65, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199,
-};
-
-static RE_UINT8 re_graph_stage_3[] = {
- 0, 0, 1, 2, 2, 2, 2, 3, 0, 0, 1, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
- 5, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 7, 2, 2,
- 8, 1, 2, 2, 9, 2, 10, 11, 2, 12, 2, 2, 2, 2, 2, 2,
- 13, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 8,
- 2, 2, 15, 3, 2, 16, 17, 0, 0, 0, 2, 18, 0, 19, 2, 2,
- 20, 21, 22, 23, 24, 25, 26, 3, 27, 21, 22, 28, 29, 30, 31, 32,
- 33, 6, 22, 34, 35, 36, 26, 37, 38, 21, 22, 34, 39, 40, 26, 9,
- 41, 42, 43, 44, 45, 46, 31, 17, 12, 47, 22, 48, 49, 50, 26, 51,
- 12, 47, 22, 52, 49, 53, 26, 54, 55, 47, 2, 2, 56, 57, 26, 2,
- 58, 59, 2, 60, 61, 62, 31, 63, 1, 2, 2, 10, 2, 64, 0, 0,
- 65, 2, 66, 15, 67, 68, 0, 0, 2, 2, 2, 2, 69, 2, 70, 1,
- 2, 69, 2, 12, 12, 17, 0, 0, 2, 2, 2, 2, 71, 2, 2, 2,
- 2, 2, 2, 2, 72, 73, 2, 2, 72, 2, 2, 74, 75, 76, 2, 2,
- 2, 75, 2, 2, 2, 8, 2, 70, 2, 77, 2, 2, 2, 2, 2, 78,
- 1, 70, 2, 2, 2, 2, 2, 79, 12, 11, 2, 32, 2, 80, 12, 81,
- 2, 2, 2, 2, 2, 15, 77, 77, 3, 77, 2, 2, 2, 2, 2, 79,
- 2, 2, 17, 2, 2, 2, 2, 82, 2, 3, 64, 64, 83, 2, 15, 11,
- 2, 2, 64, 2, 77, 84, 2, 2, 2, 85, 2, 2, 2, 3, 2, 86,
- 77, 77, 15, 3, 0, 0, 0, 0, 2, 2, 2, 2, 64, 2, 2, 70,
- 2, 2, 2, 2, 2, 2, 2, 87, 2, 2, 2, 88, 48, 2, 2, 2,
- 79, 2, 2, 8, 9, 2, 2, 17, 2, 2, 2, 2, 2, 2, 2, 89,
- 2, 78, 2, 2, 78, 90, 2, 15, 2, 2, 2, 91, 91, 92, 2, 93,
- 94, 2, 95, 2, 2, 3, 91, 96, 3, 70, 2, 2, 0, 2, 2, 36,
- 64, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, 0, 17, 0, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 26, 2, 97, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 98,
- 2, 2, 71, 2, 2, 2, 99, 100, 2, 32, 101, 101, 101, 101, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 0, 2, 89, 2, 2, 2, 2, 2, 80,
- 2, 2, 2, 2, 2, 82, 0, 64, 1, 2, 2, 2, 1, 2, 2, 2,
- 2, 7, 2, 2, 2, 2, 2, 2, 102, 2, 2, 1, 2, 2, 2, 2,
- 3, 2, 2, 17, 2, 2, 80, 2, 2, 3, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 70, 2, 2, 2, 32, 2, 2, 2, 2, 2, 64, 0, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2, 103, 0, 0, 51,
- 2, 2, 64, 77, 2, 2, 2, 9, 2, 2, 2, 2, 104, 77, 2, 2,
- 2, 2, 2, 2, 2, 105, 2, 70, 2, 2, 2, 2, 13, 44, 2, 3,
- 2, 2, 2, 32, 15, 68, 2, 2, 2, 2, 2, 2, 106, 94, 2, 32,
- 107, 108, 101, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 15, 77,
- 2, 2, 80, 2, 109, 2, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2, 2, 77, 0, 0,
- 32, 110, 2, 111, 112, 2, 2, 2, 2, 2, 2, 2, 14, 19, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 113, 2, 2, 9, 0, 0, 15,
- 2, 77, 2, 2, 2, 114, 115, 91, 2, 2, 2, 2, 2, 2, 2, 86,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 116, 117, 101, 118,
- 119, 2, 76, 120, 15, 15, 0, 0, 2, 2, 2, 2, 2, 2, 2, 17,
- 121, 2, 2, 122, 2, 2, 2, 2, 3, 64, 36, 0, 0, 2, 2, 15,
- 2, 70, 2, 2, 2, 36, 2, 64, 2, 2, 123, 2, 17, 2, 2, 17,
- 2, 13, 2, 2, 124, 82, 0, 0, 2, 15, 77, 2, 2, 124, 2, 64,
- 2, 2, 9, 2, 2, 2, 105, 0, 2, 2, 2, 32, 2, 82, 9, 0,
- 125, 2, 2, 126, 2, 127, 2, 2, 2, 3, 51, 0, 0, 0, 2, 128,
- 2, 129, 2, 130, 0, 0, 0, 0, 2, 2, 2, 131, 2, 113, 2, 2,
- 132, 133, 2, 134, 79, 79, 2, 2, 2, 2, 0, 0, 2, 2, 109, 32,
- 2, 2, 2, 135, 2, 97, 2, 136, 2, 137, 138, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 79, 0, 0, 0, 2, 2, 2, 106, 2, 2, 2, 139,
- 2, 2, 9, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,
- 2, 2, 9, 2, 2, 77, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32,
- 2, 2, 2, 2, 15, 113, 2, 140, 2, 2, 2, 2, 141, 2, 79, 77,
- 2, 2, 2, 91, 32, 2, 2, 32, 2, 2, 2, 2, 15, 2, 1, 11,
- 2, 6, 2, 3, 0, 0, 0, 0, 142, 13, 77, 2, 2, 2, 17, 77,
- 20, 21, 22, 143, 39, 144, 145, 11, 2, 2, 2, 2, 2, 146, 0, 0,
- 2, 2, 2, 2, 9, 77, 0, 0, 2, 2, 2, 97, 2, 15, 0, 0,
- 2, 2, 2, 2, 11, 77, 70, 0, 2, 2, 2, 79, 77, 0, 0, 0,
- 2, 8, 64, 2, 0, 0, 0, 0, 2, 2, 2, 64, 0, 0, 0, 0,
- 0, 0, 2, 2, 2, 2, 2, 147, 0, 0, 4, 2, 2, 4, 11, 0,
- 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 106, 0, 2, 2, 2, 79,
- 22, 2, 2, 76, 82, 2, 70, 2, 2, 113, 69, 32, 0, 0, 0, 0,
- 148, 2, 2, 149, 9, 77, 150, 2, 3, 151, 77, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 79, 0, 0, 0, 0, 2, 2, 2, 152,
- 2, 77, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 11,
- 2, 2, 2, 2, 80, 0, 0, 0, 2, 2, 3, 79, 0, 0, 0, 0,
- 2, 2, 2, 2, 32, 0, 0, 0, 2, 2, 2, 79, 2, 3, 44, 0,
- 0, 0, 0, 0, 0, 2, 15, 82, 2, 2, 2, 2, 82, 89, 6, 153,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
- 2, 17, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 10, 2, 2, 2,
- 99, 2, 0, 0, 0, 0, 80, 0, 2, 2, 2, 2, 2, 2, 2, 106,
- 2, 3, 0, 0, 0, 106, 154, 2, 2, 2, 2, 2, 2, 2, 2, 64,
- 2, 2, 2, 2, 2, 2, 17, 70, 79, 68, 80, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 7, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 79, 0, 2, 2, 2, 2, 82, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 80, 2, 2, 2, 2, 2, 32, 2, 79,
- 2, 2, 2, 2, 2, 91, 2, 2, 2, 12, 155, 146, 156, 2, 2, 2,
- 157, 158, 2, 159, 160, 47, 2, 2, 2, 2, 97, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 85, 2, 2, 2, 64, 94, 1, 0, 0, 0, 0, 0,
- 76, 161, 162, 0, 0, 0, 0, 0, 2, 2, 70, 15, 44, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 130, 2, 2, 2, 2, 163, 32, 0, 0,
- 2, 2, 2, 2, 64, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 2, 2, 2, 11, 0, 0, 0, 0, 1, 2, 2, 15, 0, 0, 0, 0,
- 156, 2, 164, 165, 166, 167, 168, 169, 89, 64, 170, 64, 0, 0, 0, 14,
- 2, 2, 64, 2, 2, 2, 2, 2, 2, 80, 3, 1, 1, 1, 2, 82,
- 70, 2, 2, 2, 2, 2, 70, 2, 2, 2, 70, 0, 0, 0, 31, 2,
- 106, 2, 2, 64, 79, 14, 82, 0, 2, 2, 2, 2, 2, 82, 70, 17,
- 2, 2, 2, 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 79, 64, 0,
- 64, 2, 2, 2, 9, 77, 2, 2, 9, 2, 15, 0, 0, 0, 0, 0,
- 119, 2, 2, 2, 2, 2, 2, 171, 2, 2, 172, 2, 8, 2, 2, 2,
- 2, 2, 2, 2, 2, 80, 15, 173, 106, 82, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 32, 0, 0, 2, 2, 2, 11, 2, 2, 2, 2,
- 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 36, 0, 2, 15, 0, 0, 0, 0, 0, 0,
- 174, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15,
-};
-
-static RE_UINT8 re_graph_stage_4[] = {
- 0, 0, 254, 255, 255, 255, 255, 127, 255, 252, 240, 215, 251, 255, 127, 254,
- 255, 231, 255, 0, 255, 135, 31, 0, 255, 223, 255, 191, 3, 0, 255, 63,
- 255, 79, 255, 7, 223, 63, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243,
- 159, 121, 128, 176, 207, 255, 238, 135, 109, 211, 135, 57, 2, 94, 192, 255,
- 127, 0, 238, 191, 237, 243, 191, 59, 1, 0, 3, 254, 238, 159, 159, 57,
- 192, 176, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 253, 255,
- 255, 227, 223, 61, 96, 7, 128, 255, 239, 243, 96, 64, 6, 0, 239, 223,
- 223, 253, 240, 255, 236, 255, 127, 252, 251, 47, 127, 132, 95, 255, 28, 0,
- 255, 15, 214, 247, 175, 255, 95, 63, 255, 243, 255, 254, 255, 31, 191, 32,
- 255, 61, 127, 61, 61, 127, 61, 255, 127, 255, 255, 3, 63, 63, 255, 1,
- 15, 0, 13, 0, 63, 0, 241, 255, 255, 199, 255, 207, 255, 159, 15, 240,
- 255, 248, 255, 251, 255, 170, 223, 255, 207, 239, 220, 127, 0, 248, 255, 124,
- 243, 255, 63, 255, 15, 254, 255, 128, 1, 128, 127, 127, 224, 255, 124, 0,
- 63, 192, 15, 128, 7, 0, 126, 126, 126, 0, 127, 248, 248, 224, 127, 95,
- 219, 255, 252, 255, 247, 255, 127, 15, 252, 252, 252, 28, 0, 62, 255, 239,
- 255, 183, 135, 255, 143, 255, 15, 224, 15, 255, 63, 253, 191, 145, 191, 255,
- 55, 248, 255, 143, 255, 131, 255, 240, 111, 240, 239, 254, 63, 135, 63, 254,
- 7, 255, 3, 30, 0, 254, 7, 252, 0, 128, 3, 32, 127, 189, 237, 251,
- 129, 224, 207, 31, 255, 235, 7, 128, 127, 251, 127, 180, 191, 253, 251, 1,
- 3, 128, 255, 224, 240, 0, 100, 222, 239, 255, 191, 231, 223, 223, 255, 123,
- 95, 252, 255, 249, 219, 7, 159, 255, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 238, 251, 123, 252, 231, 199, 15, 7, 2, 0,
-};
-
-/* Graph: 3150 bytes. */
-
-RE_UINT32 re_get_graph(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_graph_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_graph_stage_2[pos + f] << 3;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_graph_stage_3[pos + f] << 4;
- pos += code;
- value = (re_graph_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Print. */
-
-static RE_UINT8 re_print_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 5, 9,
- 10, 11, 12, 13, 14, 15, 16, 5, 17, 15, 15, 18, 15, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 27, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 28,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 28,
-};
-
-static RE_UINT8 re_print_stage_2[] = {
- 0, 1, 1, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 1, 15, 16, 1, 1, 17, 18, 19, 20, 21, 22, 23, 24, 1, 25,
- 26, 27, 1, 1, 28, 1, 1, 1, 1, 1, 1, 29, 30, 31, 32, 33,
- 34, 35, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38,
- 1, 1, 1, 1, 39, 1, 40, 41, 42, 43, 44, 45, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 46, 47, 47, 47, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 47, 79, 80, 81, 82,
- 1, 1, 1, 83, 84, 85, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 86, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 1, 1, 87, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 88, 89, 47, 47, 90, 91,
- 1, 1, 1, 1, 1, 1, 1, 92, 1, 1, 93, 47, 47, 47, 47, 47,
- 1, 94, 95, 47, 47, 47, 47, 47, 47, 47, 47, 47, 96, 47, 47, 47,
- 97, 98, 99, 100, 101, 102, 103, 104, 1, 1, 105, 47, 47, 47, 47, 47,
- 106, 107, 108, 47, 47, 47, 47, 47, 109, 110, 47, 47, 111, 112, 113, 47,
- 114, 115, 116, 1, 1, 1, 117, 118, 119, 120, 121, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 1, 1, 122, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 123, 124, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 125, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 126, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 127, 47, 47, 47, 47, 47,
- 128, 38, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 129,
-};
-
-static RE_UINT8 re_print_stage_3[] = {
- 0, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 3, 4, 5, 1, 1, 1, 6, 7, 1, 8, 1, 9, 10,
- 11, 1, 1, 1, 1, 1, 1, 1, 12, 1, 13, 1, 1, 14, 1, 15,
- 1, 16, 17, 18, 0, 19, 20, 1, 1, 1, 1, 1, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 30, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 40, 44, 45, 46, 47, 1, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 0, 57, 58, 59, 0, 1, 1, 60, 61, 62, 11, 63, 0,
- 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 65, 1, 66, 67, 68, 1,
- 69, 1, 15, 70, 71, 1, 1, 72, 1, 1, 1, 1, 70, 1, 1, 73,
- 74, 75, 76, 77, 1, 1, 78, 79, 80, 1, 1, 73, 1, 81, 1, 82,
- 2, 83, 84, 85, 1, 86, 87, 1, 88, 1, 2, 89, 79, 16, 0, 0,
- 1, 1, 86, 70, 1, 1, 1, 90, 1, 91, 92, 1, 93, 15, 9, 94,
- 1, 1, 1, 1, 1, 1, 1, 95, 72, 1, 96, 78, 1, 97, 98, 99,
- 1, 100, 1, 101, 102, 1, 103, 104, 1, 1, 1, 1, 86, 1, 1, 1,
- 1, 105, 18, 1, 1, 1, 1, 1, 1, 1, 1, 106, 107, 1, 1, 1,
- 1, 108, 2, 1, 1, 1, 1, 109, 1, 64, 1, 110, 75, 111, 111, 1,
- 1, 1, 112, 0, 95, 1, 1, 76, 1, 1, 1, 1, 1, 1, 82, 113,
- 1, 1, 54, 1, 7, 1, 1, 1, 114, 6, 1, 1, 108, 94, 1, 115,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 112, 1, 1, 1, 1, 116, 1, 117, 1,
- 1, 118, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 120, 121,
- 1, 122, 1, 119, 1, 1, 123, 1, 1, 1, 124, 70, 1, 1, 125, 2,
- 1, 75, 126, 1, 1, 1, 127, 75, 128, 129, 1, 9, 1, 1, 1, 130,
- 1, 1, 1, 1, 1, 115, 131, 56, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 132, 1, 1, 71, 0, 133, 134, 135, 1, 1, 1, 136, 1,
- 1, 1, 103, 1, 137, 1, 138, 139, 71, 1, 140, 141, 1, 1, 1, 89,
- 54, 1, 1, 1, 1, 2, 142, 143, 144, 145, 146, 0, 1, 1, 1, 94,
- 147, 148, 1, 1, 149, 150, 103, 78, 0, 0, 0, 0, 70, 1, 104, 56,
- 1, 151, 81, 94, 152, 1, 153, 0, 1, 1, 1, 1, 78, 154, 155, 56,
- 1, 9, 1, 156, 0, 0, 0, 0, 1, 75, 82, 138, 0, 0, 0, 0,
- 157, 158, 159, 1, 2, 160, 0, 161, 162, 163, 0, 0, 1, 164, 137, 1,
- 165, 166, 167, 1, 1, 0, 1, 168, 1, 169, 107, 170, 171, 172, 0, 0,
- 1, 1, 173, 0, 1, 174, 1, 175, 1, 176, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 1, 9, 71, 0, 0, 0, 0, 75,
- 1, 1, 177, 178, 1, 1, 179, 180, 1, 97, 117, 75, 1, 1, 132, 181,
- 182, 2, 0, 0, 183, 154, 1, 184, 21, 185, 186, 187, 0, 0, 0, 0,
- 1, 1, 188, 0, 1, 1, 176, 0, 0, 0, 0, 0, 1, 107, 78, 0,
- 1, 1, 189, 190, 1, 73, 191, 0, 15, 86, 0, 0, 0, 0, 0, 0,
- 1, 56, 0, 0, 0, 1, 1, 192, 0, 0, 0, 0, 0, 100, 3, 193,
- 1, 1, 9, 1, 1, 194, 1, 73, 195, 196, 197, 116, 137, 198, 0, 0,
- 199, 200, 176, 201, 202, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
- 0, 0, 0, 0, 0, 0, 1, 203, 1, 1, 1, 1, 71, 0, 0, 0,
- 1, 1, 1, 204, 1, 1, 1, 1, 1, 1, 205, 0, 0, 0, 0, 0,
- 1, 206, 0, 0, 0, 0, 0, 0, 1, 1, 105, 0, 0, 0, 0, 0,
- 1, 73, 2, 207, 0, 0, 103, 208, 1, 1, 209, 210, 112, 0, 0, 0,
- 0, 0, 1, 1, 94, 0, 0, 0, 1, 1, 211, 1, 212, 0, 0, 205,
- 1, 1, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 1, 174,
- 2, 0, 213, 214, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56,
- 1, 1, 1, 215, 216, 205, 0, 0, 1, 1, 1, 1, 1, 1, 1, 82,
- 1, 217, 1, 1, 1, 1, 1, 173, 1, 1, 218, 0, 0, 0, 0, 76,
- 1, 1, 75, 73, 0, 0, 0, 0, 1, 1, 97, 1, 11, 219, 220, 1,
- 221, 222, 223, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 1,
- 1, 1, 1, 1, 1, 1, 225, 1, 1, 1, 1, 1, 226, 227, 0, 0,
- 228, 229, 0, 0, 0, 0, 0, 0, 1, 230, 207, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 163, 1, 1, 1, 1, 1, 1, 231, 0,
- 1, 1, 232, 0, 0, 0, 0, 0, 0, 0, 0, 233, 1, 234, 0, 0,
- 54, 78, 0, 0, 0, 0, 0, 0, 220, 235, 236, 237, 238, 239, 0, 240,
- 1, 86, 1, 1, 76, 241, 242, 82, 116, 1, 1, 116, 1, 190, 0, 243,
- 244, 56, 245, 218, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 82, 246,
- 1, 1, 1, 76, 1, 1, 73, 118, 86, 1, 176, 1, 9, 247, 0, 0,
- 144, 1, 1, 248, 1, 249, 13, 1, 1, 1, 76, 250, 251, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 75, 0, 1, 234, 1, 1, 1, 1, 1, 1,
- 78, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 150, 78, 0, 0, 0, 0, 0, 0, 0,
- 253, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 78,
-};
-
-static RE_UINT8 re_print_stage_4[] = {
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 252,
- 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 254, 255, 255, 255, 127, 254,
- 255, 231, 254, 255, 255, 0, 255, 255, 255, 135, 31, 0, 255, 255, 255, 223,
- 255, 191, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 255, 231,
- 255, 63, 255, 127, 255, 255, 255, 79, 255, 7, 0, 0, 255, 255, 223, 63,
- 0, 0, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243, 159, 121, 128, 176,
- 207, 255, 255, 127, 238, 135, 249, 255, 255, 253, 109, 211, 135, 57, 2, 94,
- 192, 255, 127, 0, 238, 191, 251, 255, 255, 253, 237, 243, 191, 59, 1, 0,
- 207, 255, 3, 254, 238, 159, 249, 255, 159, 57, 192, 176, 207, 255, 255, 0,
- 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 192, 255, 255, 7,
- 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7, 207, 255, 128, 255,
- 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0, 239, 223, 253, 255,
- 223, 253, 240, 255, 207, 255, 255, 255, 236, 255, 127, 252, 255, 255, 251, 47,
- 127, 132, 95, 255, 192, 255, 28, 0, 254, 255, 255, 255, 255, 255, 255, 135,
- 255, 255, 255, 15, 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243,
- 255, 254, 255, 255, 255, 31, 254, 255, 255, 255, 255, 254, 255, 223, 255, 7,
- 191, 32, 255, 255, 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127,
- 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 31, 255, 255, 255, 3,
- 255, 255, 63, 63, 255, 255, 255, 1, 255, 223, 31, 0, 255, 255, 127, 0,
- 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 255, 63, 255, 3, 255, 3,
- 255, 127, 255, 3, 255, 7, 255, 255, 255, 255, 63, 0, 255, 15, 255, 15,
- 241, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199,
- 255, 255, 255, 207, 255, 255, 255, 159, 255, 255, 15, 240, 255, 255, 255, 248,
- 255, 227, 255, 255, 255, 1, 255, 255, 255, 255, 255, 7, 255, 255, 255, 251,
- 63, 63, 255, 170, 255, 255, 223, 255, 223, 255, 207, 239, 255, 255, 220, 127,
- 255, 252, 255, 255, 223, 255, 243, 255, 255, 127, 255, 31, 0, 0, 255, 255,
- 255, 255, 1, 0, 127, 0, 0, 0, 255, 255, 207, 255, 255, 255, 63, 255,
- 255, 127, 255, 255, 255, 255, 15, 254, 255, 128, 1, 128, 127, 127, 127, 127,
- 255, 255, 0, 0, 0, 0, 255, 15, 224, 255, 255, 255, 15, 0, 255, 255,
- 255, 31, 255, 255, 127, 0, 255, 255, 255, 15, 0, 0, 255, 255, 255, 0,
- 124, 0, 0, 0, 0, 0, 128, 255, 255, 15, 255, 3, 63, 192, 255, 3,
- 255, 255, 15, 128, 255, 191, 255, 195, 255, 63, 255, 243, 7, 0, 0, 248,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 63, 255, 3, 127, 248, 255, 255,
- 255, 63, 255, 255, 127, 0, 248, 224, 255, 255, 127, 95, 219, 255, 255, 255,
- 3, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 63,
- 255, 255, 247, 255, 127, 15, 223, 255, 252, 252, 252, 28, 127, 127, 0, 62,
- 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 135, 255, 255, 255,
- 255, 255, 143, 255, 255, 127, 255, 15, 1, 0, 0, 0, 15, 224, 255, 255,
- 255, 255, 255, 191, 15, 255, 63, 0, 255, 3, 255, 255, 255, 255, 15, 255,
- 15, 128, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 191, 255,
- 128, 255, 0, 0, 255, 255, 55, 248, 255, 255, 255, 143, 255, 255, 255, 131,
- 255, 255, 255, 240, 111, 240, 239, 254, 255, 255, 63, 135, 255, 1, 255, 1,
- 127, 248, 127, 0, 255, 255, 63, 254, 255, 255, 7, 255, 255, 255, 3, 30,
- 0, 254, 0, 0, 255, 1, 0, 0, 255, 255, 7, 0, 255, 255, 7, 252,
- 255, 0, 255, 3, 255, 63, 252, 255, 255, 255, 0, 128, 3, 32, 255, 255,
- 255, 1, 255, 3, 254, 255, 31, 0, 255, 255, 251, 255, 127, 189, 255, 191,
- 255, 7, 255, 3, 255, 253, 237, 251, 159, 57, 129, 224, 207, 31, 31, 0,
- 255, 255, 255, 235, 31, 0, 255, 3, 255, 31, 0, 0, 255, 3, 0, 0,
- 255, 255, 7, 128, 31, 0, 0, 0, 7, 0, 0, 0, 255, 253, 255, 255,
- 255, 255, 127, 255, 63, 0, 255, 255, 255, 254, 127, 0, 127, 251, 255, 255,
- 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1, 255, 255, 3, 128,
- 255, 127, 31, 0, 15, 0, 0, 0, 255, 127, 255, 1, 255, 195, 0, 0,
- 255, 63, 63, 0, 63, 0, 255, 251, 251, 255, 255, 224, 255, 135, 255, 255,
- 255, 128, 255, 255, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
- 255, 1, 255, 243, 127, 254, 255, 255, 63, 0, 0, 0, 100, 222, 255, 235,
- 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
- 63, 255, 255, 255, 255, 207, 255, 255, 255, 15, 0, 248, 254, 255, 0, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63, 159, 255, 127, 0,
- 255, 15, 255, 195, 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10,
- 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
- 0, 0, 3, 0, 255, 127, 254, 255, 254, 255, 254, 255, 192, 255, 255, 255,
- 7, 0, 255, 255, 255, 1, 3, 0, 255, 31, 255, 7, 255, 63, 0, 0,
- 255, 255, 123, 252, 231, 199, 255, 255, 255, 63, 15, 7, 7, 0, 63, 0,
- 3, 0, 255, 255, 2, 0, 0, 0,
+ 6, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 102, 105, 100, 0, 0, 24, 108, 6, 138, 223, 237, 91, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 238, 6, 239, 0, 0, 240,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 117,
+ 6, 6, 6, 6, 6, 6, 104, 0, 134, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 105, 0, 241, 204, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0,
+ 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 31, 6, 248, 249, 250, 6, 251, 252, 253, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 254, 255, 83, 31, 31, 135, 135, 228, 228, 256, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 257, 6, 258, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 261, 262, 0, 0, 0, 0, 0, 0, 6, 263, 264, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 265, 0, 6, 6, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 250, 266, 267, 268, 269, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 81, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 96, 6, 6, 6, 6, 6, 6,
+ 81, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 271, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 114,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 30, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_xid_continue_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7,
+ 0, 4, 160, 4, 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0,
+ 31, 80, 0, 0, 255, 255, 223, 184, 192, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 251, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 254, 255, 255, 255, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 195, 255, 255, 255, 255, 239, 159, 255, 253, 255, 159,
+ 0, 0, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 63, 36,
+ 255, 63, 0, 0, 255, 255, 255, 15, 255, 7, 0, 0, 255, 255, 223, 255,
+ 255, 0, 248, 255, 207, 255, 254, 255, 239, 159, 249, 255, 255, 253, 197, 243,
+ 159, 121, 128, 176, 207, 255, 3, 80, 238, 135, 249, 255, 255, 253, 109, 211,
+ 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 251, 255, 255, 253, 237, 243,
+ 191, 59, 1, 0, 207, 255, 0, 254, 238, 159, 249, 255, 159, 57, 224, 176,
+ 207, 255, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
+ 192, 255, 0, 0, 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7,
+ 207, 255, 0, 0, 239, 223, 253, 255, 255, 253, 239, 243, 223, 61, 96, 64,
+ 207, 255, 6, 0, 223, 125, 240, 128, 207, 255, 0, 252, 238, 255, 127, 252,
+ 255, 255, 251, 47, 127, 132, 95, 255, 192, 255, 12, 0, 254, 255, 255, 255,
+ 255, 255, 255, 7, 255, 127, 255, 3, 214, 247, 255, 255, 175, 255, 255, 63,
+ 95, 63, 255, 243, 1, 0, 0, 3, 255, 3, 160, 194, 255, 254, 255, 255,
+ 255, 31, 254, 255, 223, 255, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0,
+ 255, 3, 255, 255, 255, 255, 255, 63, 191, 32, 255, 255, 255, 255, 255, 247,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 231, 0, 254, 3, 0, 255, 255, 0, 0,
+ 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 31, 0,
+ 255, 255, 31, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 143, 48,
+ 255, 3, 0, 0, 0, 56, 255, 3, 255, 255, 255, 1, 255, 7, 255, 255,
+ 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 15, 192, 255, 255, 255,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 7, 255, 255, 255, 159,
+ 255, 3, 255, 3, 128, 0, 255, 191, 1, 0, 0, 0, 255, 15, 255, 3,
+ 0, 248, 15, 0, 255, 255, 255, 0, 255, 227, 255, 255, 255, 1, 255, 255,
+ 0, 0, 247, 255, 255, 255, 255, 251, 63, 63, 255, 170, 255, 255, 223, 95,
+ 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 0, 128, 1, 0, 16, 0,
+ 0, 0, 2, 128, 0, 0, 255, 31, 226, 255, 1, 0, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 1, 0, 0, 255, 127, 255, 255,
+ 31, 248, 15, 0, 255, 128, 0, 128, 255, 255, 127, 0, 127, 127, 127, 127,
+ 224, 0, 0, 0, 254, 255, 62, 31, 255, 255, 127, 230, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 0, 0, 255, 31, 255, 255, 255, 15, 0, 0,
+ 255, 255, 240, 191, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 16, 0, 0, 63, 0, 255, 3,
+ 255, 255, 255, 232, 255, 63, 255, 255, 1, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 7, 0, 0, 56, 255, 255, 124, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 55, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
+ 0, 0, 248, 255, 240, 255, 255, 255, 255, 255, 252, 255, 255, 0, 0, 0,
+ 255, 255, 24, 0, 0, 224, 0, 0, 0, 0, 138, 170, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 32,
+ 255, 255, 1, 0, 0, 224, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255,
+ 255, 0, 255, 255, 15, 0, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145,
+ 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254, 255, 255, 63, 135,
+ 127, 0, 0, 0, 255, 255, 7, 0, 255, 0, 255, 3, 255, 27, 3, 0,
+ 128, 0, 255, 255, 31, 0, 0, 0, 192, 255, 0, 128, 255, 1, 255, 3,
+ 240, 0, 255, 255, 255, 255, 79, 0, 31, 222, 255, 23, 255, 255, 251, 255,
+ 255, 255, 255, 64, 127, 189, 255, 191, 255, 7, 255, 3, 255, 253, 237, 251,
+ 159, 57, 129, 224, 207, 31, 31, 0, 255, 7, 255, 195, 3, 0, 0, 0,
+ 191, 0, 255, 3, 255, 255, 63, 255, 1, 0, 0, 63, 17, 0, 255, 3,
+ 255, 3, 0, 128, 127, 242, 111, 255, 255, 255, 191, 249, 15, 0, 255, 3,
+ 255, 252, 255, 255, 255, 255, 255, 252, 27, 0, 0, 0, 255, 255, 255, 35,
+ 255, 253, 255, 255, 1, 0, 255, 3, 0, 0, 252, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1,
+ 0, 0, 1, 0, 248, 255, 255, 224, 255, 135, 255, 255, 255, 128, 255, 255,
+ 27, 0, 3, 0, 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 99,
+ 224, 227, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
+ 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
+ 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
+ 247, 207, 255, 255, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
+ 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63,
+ 255, 67, 0, 0, 31, 0, 127, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-/* Print: 2792 bytes. */
-
-RE_UINT32 re_get_print(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_print_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_print_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_print_stage_3[pos + f] << 5;
- pos += code;
- value = (re_print_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+RE_UINT32 re_get_xid_continue(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Word. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_xid_continue_table_1[field_2];
+ v = re_xid_continue_table_2[(v << 5) | field_1];
+ v = re_xid_continue_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_word_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
+/* XID_Start. */
+static RE_UINT8 re_xid_start_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 9, 38, 9, 9, 39, 9, 40, 41, 9, 9, 9, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 42, 12, 12, 12, 43, 44, 12,
+ 12, 12, 12, 45, 12, 12, 12, 12, 12, 12, 46, 9, 9, 9, 47, 9,
+ 12, 12, 12, 12, 48, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -16944,339 +26218,8 @@ static RE_UINT8 re_word_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 27, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_word_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 95, 96, 31, 97, 98, 99, 100, 31, 31, 101, 31, 31, 31, 31, 31,
- 102, 103, 104, 31, 31, 31, 31, 31, 105, 106, 31, 31, 31, 31, 107, 31,
- 31, 108, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 109, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 110, 111, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 112, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 113, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 114, 31, 31, 31, 31, 31,
- 31, 39, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_word_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 4, 0, 0, 5, 6, 7, 8, 7, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 0,
- 7, 7, 7, 7, 7, 7, 7, 12, 13, 7, 14, 7, 7, 7, 7, 15,
- 7, 7, 7, 7, 7, 7, 7, 7, 14, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 2, 7, 16, 7, 7, 17, 2, 7, 18, 19, 7, 3, 20,
- 0, 4, 7, 7, 7, 7, 21, 7, 7, 7, 7, 7, 7, 22, 23, 24,
- 0, 7, 7, 7, 25, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 26,
- 7, 7, 27, 0, 7, 28, 4, 0, 0, 0, 7, 29, 0, 30, 14, 7,
- 7, 7, 7, 7, 7, 7, 31, 2, 22, 32, 23, 33, 34, 35, 31, 36,
- 37, 32, 23, 38, 39, 40, 41, 42, 43, 14, 23, 44, 45, 46, 31, 47,
- 48, 32, 23, 44, 49, 50, 31, 51, 52, 53, 54, 21, 55, 56, 41, 0,
- 57, 58, 23, 59, 60, 61, 31, 0, 62, 58, 23, 63, 60, 64, 31, 65,
- 62, 58, 7, 7, 66, 67, 31, 68, 69, 70, 7, 71, 72, 73, 41, 74,
- 2, 7, 7, 4, 75, 1, 0, 0, 76, 7, 77, 27, 78, 79, 0, 0,
- 46, 80, 1, 81, 82, 7, 83, 2, 84, 82, 7, 83, 85, 0, 0, 0,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 27, 7, 7, 86, 7, 7, 87,
- 7, 7, 7, 7, 88, 89, 7, 7, 88, 7, 7, 90, 91, 8, 7, 7,
- 7, 91, 7, 7, 7, 25, 0, 0, 7, 0, 7, 7, 7, 7, 7, 92,
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 24, 7, 2, 4, 7, 7, 7, 7, 93, 17,
- 57, 94, 7, 94, 7, 95, 57, 96, 7, 7, 7, 7, 7, 97, 1, 0,
- 98, 1, 7, 7, 7, 7, 7, 17, 7, 7, 4, 7, 7, 7, 7, 42,
- 7, 75, 28, 28, 41, 7, 27, 94, 7, 7, 28, 7, 1, 1, 0, 0,
- 7, 28, 7, 7, 7, 75, 7, 24, 1, 1, 99, 75, 0, 0, 0, 0,
- 7, 7, 7, 7, 28, 1, 100, 95, 7, 7, 7, 7, 7, 7, 7, 95,
- 7, 7, 7, 101, 59, 7, 7, 27, 17, 7, 7, 25, 0, 102, 7, 4,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 103,
- 7, 92, 7, 7, 92, 104, 7, 27, 7, 7, 7, 105, 106, 107, 83, 106,
- 108, 0, 0, 109, 46, 110, 0, 111, 0, 83, 0, 0, 0, 7, 7, 46,
- 112, 113, 114, 79, 115, 0, 7, 7, 17, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 1, 0,
- 7, 7, 75, 7, 7, 75, 7, 7, 7, 7, 7, 7, 7, 7, 116, 95,
- 7, 7, 86, 7, 7, 7, 117, 109, 7, 118, 119, 119, 119, 119, 7, 7,
- 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 120, 0, 2, 121, 2, 7, 7, 7, 7, 122, 2, 7, 7, 7, 7, 87,
- 123, 7, 7, 2, 7, 7, 7, 7, 75, 0, 7, 4, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 83, 0, 0, 0, 0, 7, 7, 27,
- 83, 7, 28, 0, 7, 7, 7, 124, 7, 7, 7, 7, 7, 7, 7, 10,
- 0, 125, 126, 7, 7, 7, 7, 7, 127, 7, 7, 7, 128, 0, 0, 125,
- 7, 7, 101, 0, 7, 7, 7, 95, 7, 7, 7, 7, 42, 1, 7, 129,
- 7, 7, 27, 7, 7, 95, 7, 83, 7, 7, 7, 7, 130, 1, 7, 75,
- 7, 7, 7, 118, 27, 1, 7, 70, 7, 7, 7, 7, 20, 98, 7, 128,
- 131, 132, 119, 7, 7, 87, 101, 7, 7, 7, 7, 7, 7, 7, 133, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95, 7, 134, 7, 7, 28,
- 7, 7, 7, 7, 7, 7, 27, 7, 7, 7, 7, 7, 7, 1, 0, 0,
- 118, 135, 23, 136, 137, 7, 7, 7, 7, 7, 7, 10, 0, 30, 7, 7,
- 7, 7, 7, 27, 0, 7, 7, 7, 7, 126, 7, 7, 101, 0, 0, 28,
- 7, 0, 7, 138, 139, 0, 0, 84, 7, 7, 7, 7, 7, 7, 7, 83,
- 0, 1, 2, 3, 2, 4, 41, 7, 7, 7, 7, 75, 140, 141, 0, 0,
- 142, 7, 8, 143, 27, 27, 0, 0, 7, 7, 7, 7, 7, 7, 7, 4,
- 0, 0, 0, 0, 7, 7, 7, 94, 0, 0, 0, 0, 0, 0, 0, 144,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 83, 7, 7, 7, 46, 46, 0,
- 7, 7, 139, 7, 4, 7, 7, 4, 7, 27, 7, 7, 145, 146, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 27, 1, 7, 7, 145, 7, 28,
- 7, 7, 101, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 118, 7, 42, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 147, 7, 7, 148, 7, 42, 7, 118, 7, 75, 0, 0, 0, 0, 7, 149,
- 7, 42, 7, 1, 0, 0, 0, 0, 7, 7, 7, 150, 0, 0, 0, 0,
- 151, 152, 7, 153, 0, 0, 7, 83, 7, 83, 0, 0, 82, 7, 118, 0,
- 7, 7, 7, 42, 7, 42, 7, 20, 7, 10, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 17, 0, 0, 0, 7, 7, 7, 20, 7, 7, 7, 20,
- 7, 7, 101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 83, 99, 7, 7, 46, 0, 0, 0, 0, 0, 0, 0, 0, 7, 118,
- 7, 7, 7, 7, 118, 0, 41, 109, 7, 7, 7, 4, 0, 7, 17, 1,
- 7, 7, 7, 84, 154, 7, 7, 155, 7, 7, 7, 7, 156, 157, 0, 0,
- 7, 14, 7, 158, 0, 0, 0, 0, 159, 18, 17, 7, 7, 7, 4, 1,
- 22, 32, 23, 160, 49, 161, 162, 94, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 4, 21, 0, 0, 7, 7, 7, 7, 163, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 164, 46, 165, 0, 0,
- 7, 7, 7, 7, 166, 1, 0, 0, 7, 7, 7, 17, 1, 0, 0, 0,
- 7, 25, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 1, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 7, 7, 167, 168, 0,
- 7, 7, 7, 75, 99, 7, 7, 7, 7, 169, 0, 0, 7, 7, 7, 17,
- 23, 7, 7, 8, 46, 1, 0, 126, 7, 126, 82, 118, 0, 0, 0, 0,
- 170, 7, 7, 171, 101, 1, 172, 7, 75, 173, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 118,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 75, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 17, 7, 75, 1, 0, 0, 0, 0, 0, 0, 7, 27, 94,
- 7, 7, 7, 118, 95, 1, 30, 174, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 3, 7, 7, 7, 117, 7, 0, 0, 0, 0, 175, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 101,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 20,
- 7, 75, 0, 0, 0, 20, 176, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 28,
- 7, 7, 7, 7, 7, 7, 4, 83, 17, 177, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 178, 179, 180, 0, 181, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 84, 7, 7, 7, 57, 183, 184, 185, 7, 7, 7,
- 186, 187, 7, 188, 189, 58, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 164, 7, 58, 87, 7, 87,
- 7, 84, 7, 84, 75, 7, 75, 7, 23, 7, 23, 7, 190, 7, 7, 7,
- 7, 7, 7, 134, 7, 7, 83, 191, 110, 100, 2, 0, 0, 0, 0, 0,
- 8, 127, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 83, 27, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 94, 118, 0, 0,
- 7, 7, 7, 7, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 185, 7, 194, 195, 196, 197, 198, 199, 103, 28, 200, 28, 0, 0, 0, 0,
- 0, 0, 0, 7, 1, 7, 1, 7, 1, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 118, 0, 0,
- 7, 7, 7, 94, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 46, 0,
- 7, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_word_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 135, 255, 7, 0, 4, 32, 4, 255, 255,
- 127, 255, 195, 255, 3, 0, 31, 80, 223, 188, 64, 215, 251, 255, 191, 255,
- 127, 2, 255, 1, 255, 191, 182, 0, 7, 0, 255, 195, 239, 159, 255, 253,
- 255, 159, 255, 231, 63, 36, 255, 63, 255, 15, 223, 63, 248, 255, 207, 255,
- 249, 255, 197, 243, 159, 121, 128, 176, 3, 80, 238, 135, 109, 211, 135, 57,
- 2, 94, 192, 255, 63, 0, 238, 191, 237, 243, 191, 59, 1, 0, 0, 254,
- 238, 159, 159, 57, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199, 199, 61,
- 129, 0, 255, 223, 253, 255, 255, 227, 223, 61, 96, 7, 239, 223, 239, 243,
- 96, 64, 6, 0, 223, 125, 240, 128, 0, 252, 236, 255, 127, 252, 251, 47,
- 127, 132, 95, 255, 12, 0, 255, 127, 214, 247, 175, 255, 95, 63, 255, 243,
- 0, 3, 160, 194, 255, 254, 255, 31, 223, 255, 64, 0, 191, 32, 255, 247,
- 255, 61, 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 31, 0, 15, 0,
- 13, 0, 143, 48, 0, 56, 128, 0, 0, 248, 255, 0, 247, 255, 255, 251,
- 255, 170, 223, 95, 220, 31, 207, 15, 0, 48, 0, 128, 16, 0, 2, 128,
- 132, 252, 47, 62, 80, 189, 224, 67, 31, 248, 255, 128, 127, 0, 127, 127,
- 224, 0, 62, 31, 127, 230, 224, 255, 247, 191, 128, 255, 252, 255, 255, 249,
- 124, 0, 255, 232, 1, 128, 126, 126, 126, 0, 255, 55, 127, 248, 248, 224,
- 127, 95, 219, 255, 24, 0, 0, 224, 252, 252, 252, 28, 255, 239, 255, 183,
- 0, 32, 15, 255, 62, 0, 63, 253, 191, 145, 55, 0, 255, 192, 111, 240,
- 239, 254, 63, 135, 112, 0, 79, 0, 31, 30, 255, 23, 255, 64, 127, 189,
- 237, 251, 129, 224, 207, 31, 191, 0, 63, 255, 0, 63, 17, 0, 255, 252,
- 27, 0, 255, 35, 127, 251, 127, 180, 191, 253, 251, 1, 255, 224, 11, 0,
- 240, 0, 255, 99, 224, 227, 7, 248, 231, 15, 0, 60, 28, 0, 100, 222,
- 255, 235, 239, 255, 191, 231, 223, 223, 255, 123, 95, 252, 247, 207, 32, 0,
- 219, 7, 255, 67, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
- 238, 251,
-};
-
-/* Word: 2962 bytes. */
-
-RE_UINT32 re_get_word(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_word_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_word_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_word_stage_3[pos + f] << 4;
- pos += code;
- value = (re_word_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* XDigit. */
-
-static RE_UINT8 re_xdigit_stage_1[] = {
- 0, 1, 1, 1, 1, 2, 1, 3, 4, 1, 1, 5, 1, 1, 6, 7,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_xdigit_stage_2[] = {
- 0, 1, 1, 2, 3, 4, 4, 5, 6, 1, 1, 7, 8, 9, 10, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 11, 12, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14,
- 1, 1, 15, 1, 1, 1, 16, 1, 17, 18, 19, 20, 21, 1, 22, 1,
- 1, 1, 1, 1, 1, 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 1, 1, 1, 1,
- 25, 18, 1, 1, 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_xdigit_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 3, 2, 0, 2, 2, 2, 4, 2, 2, 2, 2, 2, 5, 2, 5,
- 2, 5, 2, 5, 2, 5, 2, 5, 2, 6, 2, 6, 3, 2, 2, 2,
- 2, 4, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 6, 2, 2, 2, 2, 7, 2, 6, 2, 2, 8, 2, 2, 6, 0, 2,
- 2, 8, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 6, 4, 2, 2, 9, 2, 6, 2, 2, 2, 2, 2, 0,
- 2, 2, 2, 2, 10, 11, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 5, 2, 0, 12, 2, 2, 6,
- 2, 2, 2, 0, 2, 2, 2, 2, 2, 6, 2, 6, 2, 2, 2, 2,
- 2, 6, 2, 4, 0, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
- 2, 6, 2, 2, 2, 6, 3, 2, 2, 3, 2, 2, 2, 6, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 4, 2, 2,
- 2, 2, 2, 2, 2, 6, 2, 2,
-};
-
-static RE_UINT8 re_xdigit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0,
- 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 0, 0,
- 0, 0, 255, 3, 0, 0, 0, 0, 192, 255, 0, 0, 0, 0, 0, 0,
- 255, 3, 255, 3, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 255, 3,
- 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 192, 255, 0, 192, 255, 255, 255, 255, 255, 255,
-};
-
-/* XDigit: 592 bytes. */
-
-RE_UINT32 re_get_xdigit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_xdigit_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_xdigit_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_xdigit_stage_3[pos + f] << 6;
- pos += code;
- value = (re_xdigit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_Digit. */
-
-static RE_UINT8 re_posix_digit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_posix_digit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_digit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_digit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Posix_Digit: 130 bytes. */
-
-RE_UINT32 re_get_posix_digit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_posix_digit_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_posix_digit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_posix_digit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_posix_digit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_AlNum. */
-
-static RE_UINT8 re_posix_alnum_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -17291,1529 +26234,1580 @@ static RE_UINT8 re_posix_alnum_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_posix_alnum_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 31, 31, 31, 95, 96, 97, 98, 31, 31, 31, 31, 31, 31, 31, 31,
- 99, 100, 101, 31, 31, 31, 31, 31, 102, 103, 31, 31, 31, 31, 104, 31,
- 31, 105, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_posix_alnum_stage_3[] = {
- 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12,
- 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 5, 16, 17, 18, 19,
- 20, 5, 21, 22, 5, 5, 23, 24, 25, 5, 26, 5, 5, 27, 28, 29,
- 30, 31, 32, 33, 0, 34, 35, 36, 5, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 49, 53, 54, 55, 56, 57, 0,
- 58, 59, 60, 61, 58, 62, 63, 64, 58, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 0, 75, 76, 77, 0, 78, 0, 79, 80, 81, 82, 0, 0,
- 5, 83, 25, 5, 84, 5, 85, 86, 5, 5, 87, 5, 88, 89, 90, 5,
- 91, 5, 73, 0, 92, 5, 5, 93, 72, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 94, 2, 5, 5, 95, 96, 97, 97, 98, 5, 99, 100, 0,
- 0, 5, 5, 32, 5, 101, 5, 102, 103, 104, 25, 105, 5, 106, 107, 0,
- 108, 5, 103, 109, 0, 110, 0, 0, 5, 111, 112, 0, 5, 113, 5, 114,
- 5, 115, 116, 117, 118, 65, 0, 119, 5, 5, 5, 5, 5, 5, 0, 120,
- 93, 5, 121, 117, 5, 122, 123, 124, 0, 0, 0, 125, 126, 0, 0, 0,
- 127, 128, 129, 5, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 130, 5, 107, 5, 131, 103, 5, 5, 5, 5, 132,
- 5, 85, 5, 133, 115, 134, 134, 5, 0, 135, 0, 0, 0, 0, 0, 0,
- 136, 137, 72, 5, 138, 72, 5, 86, 139, 14, 5, 5, 140, 73, 0, 25,
- 5, 5, 5, 5, 5, 102, 0, 0, 5, 5, 5, 5, 5, 5, 5, 92,
- 5, 5, 5, 5, 31, 0, 25, 117, 141, 142, 5, 143, 5, 5, 5, 92,
- 144, 145, 5, 5, 146, 5, 147, 144, 148, 149, 5, 97, 5, 5, 150, 151,
- 28, 101, 152, 82, 5, 153, 135, 154, 5, 115, 155, 156, 5, 103, 157, 158,
- 159, 160, 86, 161, 5, 5, 5, 33, 5, 5, 5, 5, 5, 162, 163, 108,
- 5, 5, 5, 164, 5, 5, 165, 0, 166, 167, 168, 5, 5, 27, 169, 5,
- 5, 117, 25, 5, 170, 5, 149, 171, 0, 0, 0, 172, 5, 5, 5, 82,
- 0, 2, 2, 173, 5, 103, 174, 0, 175, 176, 177, 0, 5, 5, 5, 73,
- 0, 0, 5, 178, 0, 0, 0, 0, 0, 0, 0, 0, 82, 5, 179, 0,
- 5, 26, 101, 73, 117, 5, 180, 0, 5, 5, 5, 5, 117, 25, 181, 108,
- 5, 161, 5, 61, 0, 0, 0, 0, 5, 115, 102, 149, 0, 0, 0, 0,
- 182, 183, 102, 115, 103, 0, 0, 184, 102, 165, 0, 0, 5, 185, 0, 0,
- 186, 102, 0, 82, 82, 0, 79, 187, 5, 102, 102, 152, 27, 0, 0, 0,
- 5, 5, 16, 0, 5, 152, 5, 152, 5, 149, 0, 0, 0, 0, 0, 0,
- 82, 188, 189, 0, 0, 0, 0, 115, 5, 5, 189, 0, 145, 32, 25, 16,
- 5, 152, 190, 191, 5, 5, 192, 0, 193, 194, 0, 0, 195, 118, 5, 16,
- 40, 49, 196, 61, 0, 0, 0, 0, 5, 5, 197, 0, 5, 5, 198, 0,
- 0, 0, 0, 0, 5, 199, 200, 0, 5, 103, 201, 0, 5, 202, 0, 0,
- 65, 33, 0, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 5, 5, 203,
- 0, 0, 0, 0, 0, 204, 30, 205, 5, 206, 25, 5, 207, 0, 5, 32,
- 208, 209, 78, 210, 170, 211, 0, 0, 212, 213, 214, 215, 216, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 115, 5, 5, 5, 5, 165, 0, 0, 0,
- 5, 5, 5, 140, 5, 5, 5, 5, 5, 5, 61, 0, 0, 0, 0, 0,
- 5, 140, 0, 0, 0, 0, 0, 0, 5, 5, 217, 0, 0, 0, 0, 0,
- 5, 32, 103, 0, 0, 0, 25, 155, 5, 92, 61, 218, 92, 0, 0, 0,
- 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 219, 5, 220, 0, 0, 221,
- 5, 5, 5, 5, 5, 5, 5, 222, 5, 5, 5, 5, 5, 5, 5, 152,
- 103, 0, 223, 224, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 108,
- 5, 5, 5, 225, 226, 0, 0, 0, 5, 5, 227, 5, 228, 229, 230, 5,
- 231, 232, 233, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 234, 235, 86,
- 227, 227, 131, 131, 208, 208, 236, 0, 237, 238, 0, 0, 0, 0, 0, 0,
- 5, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 241,
- 5, 5, 5, 5, 5, 5, 187, 0, 5, 5, 242, 0, 0, 0, 0, 0,
- 230, 243, 244, 245, 246, 247, 0, 0, 0, 25, 248, 248, 107, 0, 0, 0,
- 5, 5, 5, 5, 5, 5, 115, 0, 5, 178, 5, 5, 5, 5, 5, 5,
- 117, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 249, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 78, 117, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_posix_alnum_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4,
- 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0,
- 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
- 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
- 255, 1, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
- 0, 0, 255, 7, 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31,
- 254, 225, 0, 156, 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0,
- 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0,
- 255, 255, 255, 1, 255, 7, 0, 0, 255, 255, 223, 63, 0, 0, 240, 255,
- 248, 3, 255, 255, 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255,
- 239, 159, 249, 255, 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16,
- 238, 135, 249, 255, 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0,
- 238, 191, 251, 255, 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30,
- 238, 159, 249, 255, 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214,
- 24, 199, 255, 195, 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227,
- 223, 29, 96, 7, 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64,
- 15, 0, 6, 0, 255, 255, 255, 231, 223, 93, 240, 128, 15, 0, 0, 252,
- 236, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0,
- 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 0, 0, 214, 247, 255, 255,
- 175, 255, 255, 59, 95, 32, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255,
- 255, 31, 254, 255, 3, 255, 255, 254, 255, 255, 255, 31, 255, 255, 127, 249,
- 255, 255, 0, 60, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
- 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
- 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
- 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255,
- 255, 1, 128, 16, 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
- 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0,
- 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 0, 255, 255, 239, 255,
- 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0, 255, 255, 127, 0,
- 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 0, 222, 111, 4,
- 128, 255, 31, 0, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
- 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
- 80, 189, 255, 243, 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255,
- 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0,
- 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255,
- 255, 127, 0, 0, 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143,
- 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0,
- 191, 255, 255, 255, 255, 0, 0, 0, 47, 0, 0, 0, 0, 0, 252, 232,
- 255, 255, 7, 0, 255, 255, 247, 255, 255, 255, 0, 124, 255, 63, 0, 0,
- 255, 255, 127, 252, 5, 0, 0, 56, 255, 255, 60, 0, 126, 126, 126, 0,
- 127, 127, 255, 255, 255, 0, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255,
- 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95,
- 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255, 0, 0, 255, 15,
- 0, 0, 223, 255, 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255,
- 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 31, 0, 255, 255, 1, 0,
- 15, 255, 62, 0, 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145,
- 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0,
- 128, 0, 255, 255, 63, 0, 0, 0, 112, 0, 255, 255, 255, 255, 71, 0,
- 30, 0, 0, 20, 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191,
- 159, 25, 129, 224, 187, 7, 0, 128, 179, 0, 0, 0, 255, 255, 63, 127,
- 0, 0, 0, 63, 17, 0, 0, 0, 255, 255, 63, 1, 0, 0, 0, 128,
- 255, 252, 255, 255, 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32,
- 255, 253, 255, 255, 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0,
- 127, 251, 255, 255, 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255,
- 255, 127, 123, 1, 127, 0, 0, 0, 248, 255, 255, 224, 255, 135, 255, 255,
- 255, 128, 255, 255, 11, 0, 0, 0, 255, 255, 255, 0, 0, 0, 7, 0,
- 240, 0, 255, 255, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 223, 255,
- 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
- 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
- 247, 15, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63,
- 0, 64, 0, 0, 255, 15, 0, 0, 143, 8, 0, 0, 150, 254, 247, 10,
- 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
- 255, 3, 255, 255, 3, 0, 255, 255,
-};
-
-/* Posix_AlNum: 2600 bytes. */
-
-RE_UINT32 re_get_posix_alnum(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_posix_alnum_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_posix_alnum_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_posix_alnum_stage_3[pos + f] << 5;
- pos += code;
- value = (re_posix_alnum_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_Punct. */
-
-static RE_UINT8 re_posix_punct_stage_1[] = {
- 0, 1, 2, 3, 3, 4, 3, 5, 6, 7, 3, 8, 3, 9, 10, 11,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_posix_punct_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 1, 17, 18, 1, 19, 20, 21, 22, 23, 24, 25, 1, 1, 26,
- 27, 28, 29, 29, 30, 29, 29, 31, 29, 29, 29, 32, 33, 34, 35, 36,
- 37, 38, 39, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 40, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 41, 1, 42, 43, 44, 45, 46, 47, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 49, 50, 51,
- 1, 52, 1, 53, 1, 54, 1, 1, 55, 56, 57, 58, 1, 1, 1, 59,
- 60, 61, 62, 1, 63, 64, 65, 66, 67, 68, 69, 1, 70, 1, 71, 72,
- 1, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 75, 1, 1, 76, 68,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 78, 79, 80, 81, 1, 1, 82, 83, 29, 29, 84, 1, 1, 1, 1, 1,
- 1, 85, 86, 1, 1, 1, 1, 1, 1, 87, 1, 1, 88, 89, 90, 1,
- 91, 92, 93, 29, 29, 29, 94, 95, 96, 97, 98, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_punct_stage_3[] = {
- 0, 1, 2, 3, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 8, 9, 0, 0, 10,
- 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 13, 14, 15, 16,
- 17, 0, 0, 18, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 22,
- 0, 23, 14, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25,
- 0, 0, 0, 10, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28,
- 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 31, 32, 0, 0, 0, 33,
- 0, 34, 35, 0, 0, 0, 0, 0, 36, 37, 0, 0, 38, 39, 40, 0,
- 0, 0, 41, 0, 39, 0, 0, 42, 0, 0, 0, 43, 44, 0, 0, 0,
- 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 48,
- 0, 49, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 52, 0, 0, 0, 39, 53, 39, 0, 0, 0, 0, 54, 0, 0,
- 0, 0, 12, 55, 0, 0, 0, 56, 0, 57, 0, 39, 0, 0, 58, 0,
- 0, 0, 0, 0, 0, 59, 60, 61, 62, 63, 64, 65, 66, 53, 0, 0,
- 67, 68, 69, 0, 70, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 71, 51, 0, 56, 72, 0, 0, 53, 53, 53, 72, 73, 53, 53, 53,
- 53, 53, 53, 74, 75, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 76,
- 0, 0, 0, 27, 0, 0, 0, 0, 53, 77, 78, 0, 79, 53, 53, 80,
- 53, 53, 53, 53, 53, 53, 72, 81, 82, 83, 0, 0, 47, 45, 0, 42,
- 0, 0, 0, 0, 84, 0, 53, 85, 64, 86, 87, 53, 86, 88, 53, 53,
- 0, 0, 0, 0, 0, 0, 53, 53, 0, 0, 0, 0, 62, 53, 71, 39,
- 89, 0, 0, 90, 0, 0, 0, 91, 92, 93, 0, 0, 94, 0, 0, 0,
- 0, 95, 0, 96, 0, 0, 97, 98, 0, 97, 34, 0, 0, 0, 99, 0,
- 0, 0, 56, 100, 0, 0, 39, 26, 0, 0, 42, 0, 0, 0, 0, 101,
- 0, 102, 0, 0, 0, 103, 93, 0, 0, 39, 0, 0, 0, 0, 0, 104,
- 44, 62, 105, 106, 0, 0, 0, 0, 1, 2, 2, 107, 0, 0, 0, 108,
- 109, 110, 0, 111, 112, 45, 62, 113, 0, 0, 0, 0, 34, 0, 27, 0,
- 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 5, 114, 0, 0, 0, 0,
- 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 115, 34, 0, 0, 116, 117,
- 0, 111, 0, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0,
- 0, 0, 120, 0, 0, 121, 93, 0, 0, 0, 85, 122, 0, 0, 123, 0,
- 0, 124, 0, 0, 0, 102, 0, 0, 0, 0, 125, 0, 0, 0, 126, 0,
- 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 128, 129, 0, 0, 0, 0,
- 0, 56, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 11, 0, 34, 71, 0, 130, 109, 0, 0,
- 0, 0, 131, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114,
- 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, 134, 0, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 0, 135, 0, 110, 136, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0,
- 53, 53, 53, 53, 53, 53, 53, 72, 53, 139, 53, 140, 141, 142, 53, 43,
- 53, 53, 143, 0, 0, 0, 0, 0, 53, 53, 92, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 144, 42, 135, 135, 31, 31, 102, 102, 145, 0,
- 0, 137, 0, 146, 147, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 26, 53, 150, 53, 53, 80, 151, 152, 72,
- 62, 78, 41, 153, 86, 129, 0, 154, 155, 156, 157, 107, 0, 0, 0, 0,
- 53, 53, 53, 53, 53, 53, 72, 158, 53, 53, 53, 80, 53, 53, 159, 160,
- 150, 53, 161, 53, 63, 21, 0, 0, 162, 53, 53, 163, 53, 164, 165, 53,
- 53, 53, 80, 166, 167, 0, 0, 0,
-};
-
-static RE_UINT8 re_posix_punct_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 248, 1, 0, 0, 120,
- 254, 219, 211, 137, 0, 0, 128, 0, 60, 0, 252, 255, 224, 175, 255, 255,
- 0, 0, 32, 64, 176, 0, 0, 0, 0, 0, 64, 0, 4, 0, 0, 0,
- 0, 0, 0, 252, 0, 230, 0, 0, 0, 0, 0, 64, 73, 0, 0, 0,
- 0, 0, 24, 0, 192, 255, 0, 200, 0, 60, 0, 0, 0, 0, 16, 64,
- 0, 2, 0, 96, 255, 63, 0, 0, 0, 0, 192, 195, 0, 0, 255, 127,
- 48, 0, 1, 0, 0, 0, 12, 44, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 248, 7, 0, 0, 128, 128, 16, 0, 0, 0, 0, 128, 0, 0,
- 0, 0, 0, 2, 0, 0, 16, 0, 0, 0, 0, 128, 0, 128, 0, 12,
- 254, 255, 255, 252, 0, 0, 80, 61, 32, 0, 0, 0, 0, 0, 0, 192,
- 191, 223, 255, 7, 0, 252, 0, 0, 0, 0, 0, 8, 255, 1, 0, 0,
- 0, 0, 255, 3, 1, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 24,
- 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 15, 255, 7, 0, 0,
- 49, 0, 0, 0, 255, 255, 255, 255, 127, 63, 0, 0, 255, 7, 240, 31,
- 0, 0, 0, 240, 0, 0, 0, 248, 255, 0, 8, 0, 0, 0, 0, 160,
- 3, 224, 0, 224, 0, 224, 0, 96, 0, 0, 255, 255, 255, 0, 255, 255,
- 255, 255, 255, 127, 0, 0, 0, 124, 0, 124, 0, 0, 123, 3, 208, 193,
- 175, 66, 0, 12, 31, 188, 0, 0, 0, 12, 255, 255, 127, 0, 0, 0,
- 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 207, 255, 255, 255, 63, 255,
- 224, 7, 0, 222, 255, 127, 255, 255, 255, 255, 0, 0, 255, 255, 255, 251,
- 255, 255, 15, 0, 0, 0, 255, 15, 30, 255, 255, 255, 1, 0, 193, 224,
- 0, 0, 195, 255, 15, 0, 0, 0, 0, 252, 255, 255, 255, 0, 1, 0,
- 255, 255, 1, 0, 0, 224, 0, 0, 0, 0, 8, 64, 0, 0, 252, 0,
- 255, 255, 127, 0, 3, 0, 0, 0, 0, 6, 0, 0, 0, 15, 192, 3,
- 0, 0, 240, 0, 0, 192, 0, 0, 0, 0, 0, 23, 254, 63, 0, 192,
- 0, 0, 128, 3, 0, 8, 0, 0, 0, 2, 0, 0, 0, 0, 252, 255,
- 0, 0, 0, 48, 255, 255, 247, 255, 127, 15, 0, 0, 63, 0, 0, 0,
- 127, 127, 0, 48, 7, 0, 0, 0, 0, 0, 128, 255, 0, 0, 0, 254,
- 255, 115, 255, 15, 255, 255, 255, 31, 0, 0, 128, 1, 0, 0, 255, 1,
- 0, 1, 0, 0, 0, 0, 127, 0, 0, 0, 0, 30, 0, 0, 224, 3,
- 128, 63, 0, 0, 0, 0, 0, 216, 0, 0, 48, 0, 224, 33, 0, 232,
- 0, 0, 0, 63, 0, 248, 0, 40, 64, 0, 0, 0, 254, 255, 255, 0,
- 14, 0, 0, 0, 255, 31, 0, 0, 0, 0, 0, 220, 62, 0, 0, 0,
- 0, 0, 224, 255, 255, 255, 3, 128, 0, 0, 31, 0, 0, 0, 32, 0,
- 48, 0, 0, 0, 0, 0, 128, 7, 0, 0, 0, 144, 127, 254, 255, 255,
- 31, 28, 0, 0, 24, 240, 255, 255, 255, 195, 255, 255, 35, 0, 0, 0,
- 2, 0, 0, 8, 8, 0, 0, 0, 0, 224, 223, 255, 239, 15, 0, 0,
- 0, 16, 1, 0, 0, 64, 0, 0, 255, 15, 255, 255, 255, 127, 254, 255,
- 254, 255, 254, 255, 0, 28, 0, 0, 192, 255, 255, 255, 7, 0, 255, 255,
- 255, 255, 255, 15, 255, 1, 3, 0, 255, 31, 255, 7, 255, 255, 255, 1,
- 255, 15, 0, 0, 255, 0, 255, 3, 255, 239, 255, 255, 255, 255, 123, 252,
- 231, 199, 255, 255, 255, 231, 255, 255, 255, 63, 15, 7, 7, 0, 63, 0,
-};
-
-/* Posix_Punct: 1984 bytes. */
-
-RE_UINT32 re_get_posix_punct(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_posix_punct_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_posix_punct_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_posix_punct_stage_3[pos + f] << 5;
- pos += code;
- value = (re_posix_punct_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_XDigit. */
-
-static RE_UINT8 re_posix_xdigit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_posix_xdigit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_xdigit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_xdigit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Posix_XDigit: 130 bytes. */
-
-RE_UINT32 re_get_posix_xdigit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_posix_xdigit_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_posix_xdigit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_posix_xdigit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_posix_xdigit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* All_Cases. */
-
-static RE_UINT8 re_all_cases_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_all_cases_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12,
- 6, 13, 6, 6, 14, 6, 6, 6, 6, 6, 6, 6, 15, 16, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 17, 18, 6, 6, 6, 19, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6, 21,
- 6, 6, 6, 6, 22, 6, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 26, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static RE_UINT8 re_all_cases_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 0, 0, 0, 0, 0, 0, 9, 0, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 18, 18, 18, 18, 18, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 21, 34, 18, 18, 35, 18,
- 18, 18, 18, 18, 36, 18, 37, 38, 39, 18, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 18, 18, 18, 64, 65,
- 66, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 18, 18, 18,
- 77, 78, 18, 18, 18, 18, 18, 18, 79, 80, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 81, 82, 82, 82, 83, 0, 84, 85, 85, 85,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_xid_start_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
+ 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
+ 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
+ 27, 28, 29, 17, 0, 30, 31, 0, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 45, 49, 50, 51, 52, 46, 0,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0,
+ 68, 69, 67, 0, 70, 71, 72, 0, 73, 0, 74, 75, 76, 0, 0, 0,
+ 4, 77, 78, 79, 80, 4, 81, 82, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 83, 4, 84, 85, 86, 4, 87, 4, 88, 0, 22, 4, 4, 89,
+ 68, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 90, 1, 4, 4, 91, 92, 93, 93, 94, 4, 95, 96, 0,
+ 0, 4, 4, 29, 4, 97, 4, 98, 99, 0, 15, 100, 4, 101, 102, 0,
+ 103, 4, 104, 0, 0, 105, 0, 0, 106, 95, 107, 0, 108, 109, 4, 110,
+ 4, 111, 112, 113, 114, 115, 0, 116, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 89, 4, 117, 113, 4, 118, 119, 120,
+ 0, 0, 0, 121, 122, 0, 0, 0, 123, 124, 125, 4, 14, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 87, 87, 87, 87, 88, 89, 90, 90, 90, 90, 90, 91,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 94,
+ 4, 126, 99, 4, 4, 4, 4, 127, 4, 81, 4, 128, 103, 129, 129, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 95, 96, 97, 97, 97, 97, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
- 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 101, 18, 18, 18,
- 18, 18, 102, 103, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 104, 105, 93, 94, 104, 105, 104, 105, 93, 94, 106, 107, 104, 105, 108, 109,
- 104, 105, 104, 105, 104, 105, 110, 111, 112, 113, 114, 115, 116, 117, 112, 118,
- 0, 0, 0, 0, 119, 120, 121, 0, 0, 122, 0, 0, 123, 123, 124, 124,
- 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 131, 68, 4, 132, 68, 4, 82, 106, 12, 4, 4, 133, 4, 0, 15,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 126, 127, 127, 127, 128, 128, 128, 129, 0, 0,
- 82, 82, 82, 82, 82, 83, 85, 85, 85, 85, 85, 86, 130, 131, 132, 133,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 37, 134, 135, 0,
- 136, 136, 136, 136, 137, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 134,
+ 4, 4, 4, 4, 75, 0, 15, 113, 4, 4, 4, 4, 4, 4, 4, 4,
+ 135, 136, 4, 137, 113, 4, 4, 22, 138, 139, 4, 4, 140, 4, 141, 142,
+ 143, 144, 4, 95, 139, 95, 0, 145, 25, 146, 67, 134, 32, 147, 148, 149,
+ 4, 14, 150, 151, 4, 152, 153, 154, 155, 156, 82, 157, 4, 4, 4, 144,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 158, 159, 160,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 161, 4, 4, 162, 0, 163, 164, 165, 4, 4, 93, 166, 4,
+ 4, 4, 113, 32, 4, 4, 4, 4, 4, 113, 15, 4, 167, 4, 31, 168,
+ 0, 0, 0, 169, 4, 4, 4, 134, 0, 1, 1, 170, 113, 99, 171, 0,
+ 172, 173, 174, 0, 4, 4, 4, 88, 0, 0, 4, 104, 0, 0, 0, 0,
+ 0, 0, 0, 0, 134, 4, 175, 0, 4, 23, 176, 98, 113, 4, 177, 0,
+ 4, 4, 4, 4, 113, 15, 178, 160, 4, 179, 4, 111, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 103, 98, 31, 0, 0, 0, 0,
+ 180, 181, 98, 103, 99, 0, 0, 182, 98, 162, 0, 0, 4, 183, 0, 0,
+ 184, 98, 0, 134, 134, 0, 74, 185, 4, 98, 98, 147, 93, 0, 0, 0,
+ 4, 4, 14, 0, 4, 147, 4, 147, 4, 111, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 186, 0, 0, 134, 187, 110, 0, 0, 15, 185, 103,
+ 108, 188, 0, 0, 108, 22, 15, 14, 108, 67, 189, 190, 108, 147, 191, 0,
+ 192, 193, 0, 0, 194, 114, 99, 0, 48, 45, 195, 56, 0, 0, 0, 0,
+ 4, 104, 196, 56, 4, 22, 197, 0, 0, 0, 0, 0, 4, 133, 198, 0,
+ 4, 22, 199, 0, 4, 200, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
+ 4, 193, 0, 0, 0, 4, 4, 201, 202, 203, 204, 0, 0, 205, 175, 206,
+ 207, 208, 209, 4, 210, 0, 4, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 211, 133, 73, 212, 22, 0, 0, 0, 213, 175, 214, 215, 216, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 46, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 162, 0, 0, 0,
+ 4, 4, 4, 133, 4, 4, 4, 4, 4, 4, 111, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 139, 18, 18, 18, 102, 0, 0,
- 18, 18, 18, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 78, 18, 78, 18, 18, 18, 18, 18, 18, 18, 0, 140,
- 18, 141, 142, 18, 18, 143, 144, 18, 145, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 147,
- 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0,
- 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 11, 11, 4, 5, 15, 15, 8, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 29, 99, 0, 0, 0, 15, 217, 4, 22, 111, 218, 22, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 151, 150, 150, 150, 150, 152,
+ 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 219, 0, 166, 0, 0, 220,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 188,
+ 4, 4, 4, 4, 4, 4, 98, 0, 14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 153, 153, 153, 153, 153, 153, 154, 0, 155, 155, 155, 155, 155, 155, 156, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 99, 0, 221, 222, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 11, 11, 11, 15, 15, 15, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 15, 15, 15, 15,
+ 4, 4, 30, 4, 225, 226, 227, 4, 228, 229, 230, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 231, 232, 82, 30, 30, 126, 126, 211, 211, 150, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 233, 234, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 193, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 185, 0, 4, 4, 235, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 157, 157, 157, 157, 158, 159, 159, 159, 160, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 227, 236, 237, 238, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 113, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 104, 4, 4, 4, 4, 4, 4,
+ 113, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 241, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 73,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 17, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_all_cases_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
- 5, 6, 5, 7, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5,
- 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
- 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 11,
- 5, 5, 5, 5, 5, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 13,
- 14, 15, 14, 15, 14, 15, 14, 15, 16, 17, 14, 15, 14, 15, 14, 15,
- 0, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14,
- 15, 0, 14, 15, 14, 15, 14, 15, 18, 14, 15, 14, 15, 14, 15, 19,
- 20, 21, 14, 15, 14, 15, 22, 14, 15, 23, 23, 14, 15, 0, 24, 25,
- 26, 14, 15, 23, 27, 28, 29, 30, 14, 15, 31, 0, 29, 32, 33, 34,
- 14, 15, 14, 15, 14, 15, 35, 14, 15, 35, 0, 0, 14, 15, 35, 14,
- 15, 36, 36, 14, 15, 14, 15, 37, 14, 15, 0, 0, 14, 15, 0, 38,
- 0, 0, 0, 0, 39, 40, 41, 39, 40, 41, 39, 40, 41, 14, 15, 14,
- 15, 14, 15, 14, 15, 42, 14, 15, 0, 39, 40, 41, 14, 15, 43, 44,
- 45, 0, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 0, 0, 0, 0,
- 0, 0, 46, 14, 15, 47, 48, 49, 49, 14, 15, 50, 51, 52, 14, 15,
- 53, 54, 55, 56, 57, 0, 58, 58, 0, 59, 0, 60, 61, 0, 0, 0,
- 58, 62, 0, 63, 0, 64, 65, 0, 66, 67, 65, 68, 69, 0, 0, 67,
- 0, 70, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0,
- 74, 0, 75, 74, 0, 0, 0, 76, 74, 77, 78, 78, 79, 0, 0, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 0,
- 0, 0, 0, 0, 0, 83, 0, 0, 14, 15, 14, 15, 0, 0, 14, 15,
- 0, 0, 0, 33, 33, 33, 0, 84, 0, 0, 0, 0, 0, 0, 85, 0,
- 86, 86, 86, 0, 87, 0, 88, 88, 89, 1, 90, 1, 1, 91, 1, 1,
- 92, 93, 94, 1, 95, 1, 1, 1, 96, 97, 0, 98, 1, 1, 99, 1,
- 1, 100, 1, 1, 101, 102, 102, 102, 103, 5, 104, 5, 5, 105, 5, 5,
- 106, 107, 108, 5, 109, 5, 5, 5, 110, 111, 112, 113, 5, 5, 114, 5,
- 5, 115, 5, 5, 116, 117, 117, 118, 119, 120, 0, 0, 0, 121, 122, 123,
- 124, 125, 126, 127, 128, 129, 0, 14, 15, 130, 14, 15, 0, 45, 45, 45,
- 131, 131, 131, 131, 131, 131, 131, 131, 1, 1, 132, 1, 133, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 134, 1, 1, 135, 136, 1, 1, 1, 1, 1,
- 1, 1, 137, 1, 1, 1, 1, 1, 5, 5, 138, 5, 139, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 140, 5, 5, 141, 142, 5, 5, 5, 5, 5,
- 5, 5, 143, 5, 5, 5, 5, 5, 144, 144, 144, 144, 144, 144, 144, 144,
- 14, 15, 145, 146, 14, 15, 14, 15, 14, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 15, 14, 15, 14, 15, 147, 14, 15, 14, 15, 14, 15, 14,
- 15, 14, 15, 14, 15, 14, 15, 148, 0, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0,
- 0, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 150, 150, 0, 151, 151, 151, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 151, 0, 151, 0, 0, 0, 0, 0, 151, 0, 0,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 152, 152, 152,
- 153, 153, 153, 153, 153, 153, 153, 153, 118, 118, 118, 118, 118, 118, 0, 0,
- 123, 123, 123, 123, 123, 123, 0, 0, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 163, 163, 163, 163, 163,
- 163, 163, 163, 0, 0, 163, 163, 163, 0, 164, 0, 0, 0, 165, 0, 0,
- 0, 0, 0, 0, 0, 0, 166, 0, 167, 168, 14, 15, 14, 15, 14, 15,
- 14, 15, 14, 15, 14, 15, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0,
- 118, 118, 118, 118, 118, 118, 118, 118, 123, 123, 123, 123, 123, 123, 123, 123,
- 0, 118, 0, 118, 0, 118, 0, 118, 0, 123, 0, 123, 0, 123, 0, 123,
- 171, 171, 172, 172, 172, 172, 173, 173, 174, 174, 175, 175, 176, 176, 0, 0,
- 118, 118, 0, 177, 0, 0, 0, 0, 123, 123, 178, 178, 179, 0, 180, 0,
- 0, 0, 0, 177, 0, 0, 0, 0, 181, 181, 181, 181, 179, 0, 0, 0,
- 118, 118, 0, 182, 0, 0, 0, 0, 123, 123, 183, 183, 0, 0, 0, 0,
- 118, 118, 0, 184, 0, 126, 0, 0, 123, 123, 185, 185, 130, 0, 0, 0,
- 186, 186, 187, 187, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0,
- 0, 0, 189, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 192, 0, 193, 193, 193, 193, 193, 193, 193, 193,
- 194, 194, 194, 194, 194, 194, 194, 194, 0, 0, 0, 14, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 0, 0, 0, 0, 0, 0,
- 14, 15, 197, 198, 199, 200, 201, 14, 15, 14, 15, 14, 15, 202, 203, 204,
- 205, 0, 14, 15, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 206, 206,
- 0, 0, 0, 14, 15, 14, 15, 0, 0, 0, 14, 15, 0, 0, 0, 0,
- 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 0, 207,
- 0, 0, 0, 0, 0, 207, 0, 0, 14, 15, 208, 209, 14, 15, 14, 15,
- 0, 14, 15, 14, 15, 210, 14, 15, 0, 0, 0, 14, 15, 211, 0, 0,
- 14, 15, 14, 15, 149, 0, 14, 15, 14, 15, 212, 213, 214, 215, 212, 0,
- 216, 217, 218, 219, 14, 15, 14, 15, 0, 0, 14, 15, 150, 220, 221, 0,
- 0, 0, 0, 222, 0, 0, 0, 0, 223, 223, 223, 223, 223, 223, 223, 223,
- 0, 0, 0, 0, 0, 14, 15, 0, 224, 224, 224, 224, 224, 224, 224, 224,
- 225, 225, 225, 225, 225, 225, 225, 225, 224, 224, 224, 224, 0, 0, 0, 0,
- 225, 225, 225, 225, 0, 0, 0, 0, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 0, 0, 0, 0, 0, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 0, 0, 0, 0, 0, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
- 227, 227, 227, 227, 0, 0, 0, 0,
-};
+static RE_UINT8 re_xid_start_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
+ 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 184,
+ 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
+ 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
+ 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
+ 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
+ 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 255, 255, 0, 0, 0,
+ 240, 255, 255, 255, 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255,
+ 225, 159, 249, 255, 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16,
+ 224, 135, 249, 255, 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0,
+ 224, 191, 251, 255, 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2,
+ 224, 159, 249, 255, 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214,
+ 24, 199, 255, 3, 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7,
+ 3, 0, 0, 0, 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64,
+ 3, 0, 6, 0, 240, 223, 253, 255, 255, 255, 255, 39, 0, 64, 112, 128,
+ 3, 0, 0, 252, 224, 255, 127, 252, 255, 255, 251, 47, 127, 0, 0, 0,
+ 254, 255, 255, 255, 255, 255, 5, 0, 214, 247, 255, 255, 175, 255, 5, 32,
+ 95, 0, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 0, 0,
+ 0, 31, 0, 0, 255, 7, 0, 128, 0, 0, 63, 60, 98, 192, 225, 255,
+ 3, 64, 0, 0, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 255, 7, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
+ 255, 223, 3, 0, 255, 255, 3, 0, 255, 223, 1, 0, 255, 255, 15, 0,
+ 0, 0, 128, 16, 255, 5, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0, 255, 255, 127, 0,
+ 255, 255, 31, 0, 128, 0, 0, 0, 224, 255, 255, 255, 224, 15, 0, 0,
+ 248, 255, 255, 255, 1, 192, 0, 252, 63, 0, 0, 0, 15, 0, 0, 0,
+ 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 255, 255, 255, 231,
+ 0, 222, 111, 4, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 127, 255, 255, 31, 120, 12, 0,
+ 255, 128, 0, 0, 127, 127, 127, 127, 224, 0, 0, 0, 254, 3, 62, 31,
+ 255, 255, 127, 224, 255, 127, 0, 0, 255, 255, 255, 31, 255, 31, 255, 255,
+ 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255, 252, 255, 255, 255,
+ 255, 249, 255, 255, 252, 7, 0, 0, 0, 0, 224, 255, 187, 247, 255, 255,
+ 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 7, 0,
+ 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0, 255, 255, 127, 196,
+ 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 3, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 160,
+ 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255,
+ 0, 0, 255, 3, 0, 0, 138, 170, 192, 255, 255, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 1, 0,
+ 255, 7, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192,
+ 1, 0, 239, 254, 31, 0, 0, 0, 255, 3, 3, 0, 128, 0, 255, 255,
+ 255, 255, 255, 0, 144, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
+ 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
+ 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
+ 255, 7, 0, 1, 0, 0, 0, 128, 127, 242, 111, 255, 255, 255, 0, 128,
+ 2, 0, 0, 0, 255, 252, 255, 255, 10, 0, 0, 0, 1, 248, 255, 255,
+ 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32, 255, 253, 255, 255,
+ 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0, 191, 253, 255, 255,
+ 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224, 255, 7, 1, 0,
+ 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 3, 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 253, 255, 255, 247, 255, 31, 128, 63, 0, 64, 0, 0, 15, 8, 0, 0,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15, 3, 0, 255, 255
+};
+
+RE_UINT32 re_get_xid_start(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_xid_start_table_1[field_2];
+ v = re_xid_start_table_2[(v << 5) | field_1];
+ v = re_xid_start_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
-/* All_Cases: 2544 bytes. */
-
-static RE_AllCases re_all_cases_table[] = {
- {{ 0, 0, 0}},
- {{ 32, 0, 0}},
- {{ 32, 232, 0}},
- {{ 32, 8415, 0}},
- {{ 32, 300, 0}},
- {{ -32, 0, 0}},
- {{ -32, 199, 0}},
- {{ -32, 8383, 0}},
- {{ -32, 268, 0}},
- {{ 743, 775, 0}},
- {{ 32, 8294, 0}},
- {{ 7615, 0, 0}},
- {{ -32, 8262, 0}},
- {{ 121, 0, 0}},
- {{ 1, 0, 0}},
- {{ -1, 0, 0}},
- {{ -199, 0, 0}},
- {{ -232, 0, 0}},
- {{ -121, 0, 0}},
- {{ -300, -268, 0}},
- {{ 195, 0, 0}},
- {{ 210, 0, 0}},
- {{ 206, 0, 0}},
- {{ 205, 0, 0}},
- {{ 79, 0, 0}},
- {{ 202, 0, 0}},
- {{ 203, 0, 0}},
- {{ 207, 0, 0}},
- {{ 97, 0, 0}},
- {{ 211, 0, 0}},
- {{ 209, 0, 0}},
- {{ 163, 0, 0}},
- {{ 213, 0, 0}},
- {{ 130, 0, 0}},
- {{ 214, 0, 0}},
- {{ 218, 0, 0}},
- {{ 217, 0, 0}},
- {{ 219, 0, 0}},
- {{ 56, 0, 0}},
- {{ 1, 2, 0}},
- {{ -1, 1, 0}},
- {{ -2, -1, 0}},
- {{ -79, 0, 0}},
- {{ -97, 0, 0}},
- {{ -56, 0, 0}},
- {{ -130, 0, 0}},
- {{ 10795, 0, 0}},
- {{ -163, 0, 0}},
- {{ 10792, 0, 0}},
- {{ 10815, 0, 0}},
- {{ -195, 0, 0}},
- {{ 69, 0, 0}},
- {{ 71, 0, 0}},
- {{ 10783, 0, 0}},
- {{ 10780, 0, 0}},
- {{ 10782, 0, 0}},
- {{ -210, 0, 0}},
- {{ -206, 0, 0}},
- {{ -205, 0, 0}},
- {{ -202, 0, 0}},
- {{ -203, 0, 0}},
- {{ 42319, 0, 0}},
- {{ 42315, 0, 0}},
- {{ -207, 0, 0}},
- {{ 42280, 0, 0}},
- {{ 42308, 0, 0}},
- {{ -209, 0, 0}},
- {{ -211, 0, 0}},
- {{ 10743, 0, 0}},
- {{ 42305, 0, 0}},
- {{ 10749, 0, 0}},
- {{ -213, 0, 0}},
- {{ -214, 0, 0}},
- {{ 10727, 0, 0}},
- {{ -218, 0, 0}},
- {{ 42307, 0, 0}},
- {{ 42282, 0, 0}},
- {{ -69, 0, 0}},
- {{ -217, 0, 0}},
- {{ -71, 0, 0}},
- {{ -219, 0, 0}},
- {{ 42261, 0, 0}},
- {{ 42258, 0, 0}},
- {{ 84, 116, 7289}},
- {{ 116, 0, 0}},
- {{ 38, 0, 0}},
- {{ 37, 0, 0}},
- {{ 64, 0, 0}},
- {{ 63, 0, 0}},
- {{ 7235, 0, 0}},
- {{ 32, 62, 0}},
- {{ 32, 96, 0}},
- {{ 32, 57, 92}},
- {{ -84, 32, 7205}},
- {{ 32, 86, 0}},
- {{ -743, 32, 0}},
- {{ 32, 54, 0}},
- {{ 32, 80, 0}},
- {{ 31, 32, 0}},
- {{ 32, 47, 0}},
- {{ 32, 7549, 0}},
- {{ -38, 0, 0}},
- {{ -37, 0, 0}},
- {{ 7219, 0, 0}},
- {{ -32, 30, 0}},
- {{ -32, 64, 0}},
- {{ -32, 25, 60}},
- {{ -116, -32, 7173}},
- {{ -32, 54, 0}},
- {{ -775, -32, 0}},
- {{ -32, 22, 0}},
- {{ -32, 48, 0}},
- {{ -31, 1, 0}},
- {{ -32, -1, 0}},
- {{ -32, 15, 0}},
- {{ -32, 7517, 0}},
- {{ -64, 0, 0}},
- {{ -63, 0, 0}},
- {{ 8, 0, 0}},
- {{ -62, -30, 0}},
- {{ -57, -25, 35}},
- {{ -47, -15, 0}},
- {{ -54, -22, 0}},
- {{ -8, 0, 0}},
- {{ -86, -54, 0}},
- {{ -80, -48, 0}},
- {{ 7, 0, 0}},
- {{ -116, 0, 0}},
- {{ -92, -60, -35}},
- {{ -96, -64, 0}},
- {{ -7, 0, 0}},
- {{ 80, 0, 0}},
- {{ 32, 6254, 0}},
- {{ 32, 6253, 0}},
- {{ 32, 6244, 0}},
- {{ 32, 6242, 0}},
- {{ 32, 6242, 6243}},
- {{ 32, 6236, 0}},
- {{ -32, 6222, 0}},
- {{ -32, 6221, 0}},
- {{ -32, 6212, 0}},
- {{ -32, 6210, 0}},
- {{ -32, 6210, 6211}},
- {{ -32, 6204, 0}},
- {{ -80, 0, 0}},
- {{ 1, 6181, 0}},
- {{ -1, 6180, 0}},
- {{ 15, 0, 0}},
- {{ -15, 0, 0}},
- {{ 48, 0, 0}},
- {{ -48, 0, 0}},
- {{ 7264, 0, 0}},
- {{ 3008, 0, 0}},
- {{ 38864, 0, 0}},
- {{ -6254, -6222, 0}},
- {{ -6253, -6221, 0}},
- {{ -6244, -6212, 0}},
- {{ -6242, -6210, 0}},
- {{ -6242, -6210, 1}},
- {{ -6243, -6211, -1}},
- {{ -6236, -6204, 0}},
- {{ -6181, -6180, 0}},
- {{ 35266, 35267, 0}},
- {{ -3008, 0, 0}},
- {{ 35332, 0, 0}},
- {{ 3814, 0, 0}},
- {{ 35384, 0, 0}},
- {{ 1, 59, 0}},
- {{ -1, 58, 0}},
- {{ -59, -58, 0}},
- {{ -7615, 0, 0}},
- {{ 74, 0, 0}},
- {{ 86, 0, 0}},
- {{ 100, 0, 0}},
- {{ 128, 0, 0}},
- {{ 112, 0, 0}},
- {{ 126, 0, 0}},
- {{ 9, 0, 0}},
- {{ -74, 0, 0}},
- {{ -9, 0, 0}},
- {{ -7289, -7205, -7173}},
- {{ -86, 0, 0}},
- {{ -7235, 0, 0}},
- {{ -100, 0, 0}},
- {{ -7219, 0, 0}},
- {{ -112, 0, 0}},
- {{ -128, 0, 0}},
- {{ -126, 0, 0}},
- {{ -7549, -7517, 0}},
- {{ -8415, -8383, 0}},
- {{ -8294, -8262, 0}},
- {{ 28, 0, 0}},
- {{ -28, 0, 0}},
- {{ 16, 0, 0}},
- {{ -16, 0, 0}},
- {{ 26, 0, 0}},
- {{ -26, 0, 0}},
- {{-10743, 0, 0}},
- {{ -3814, 0, 0}},
- {{-10727, 0, 0}},
- {{-10795, 0, 0}},
- {{-10792, 0, 0}},
- {{-10780, 0, 0}},
- {{-10749, 0, 0}},
- {{-10783, 0, 0}},
- {{-10782, 0, 0}},
- {{-10815, 0, 0}},
- {{ -7264, 0, 0}},
- {{-35266, 1, 0}},
- {{-35267, -1, 0}},
- {{-35332, 0, 0}},
- {{-42280, 0, 0}},
- {{-42308, 0, 0}},
- {{-42319, 0, 0}},
- {{-42315, 0, 0}},
- {{-42305, 0, 0}},
- {{-42258, 0, 0}},
- {{-42282, 0, 0}},
- {{-42261, 0, 0}},
- {{ 928, 0, 0}},
- {{-42307, 0, 0}},
- {{-35384, 0, 0}},
- {{ -928, 0, 0}},
- {{-38864, 0, 0}},
- {{ 40, 0, 0}},
- {{ -40, 0, 0}},
- {{ 34, 0, 0}},
- {{ -34, 0, 0}},
+/* All cases. */
+static RE_UINT8 re_all_cases_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10,
+ 2, 11, 2, 12, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-/* All_Cases: 2736 bytes. */
-
-int re_get_all_cases(RE_UINT32 ch, RE_UINT32* codepoints) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_AllCases* all_cases;
- int count;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_all_cases_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_all_cases_stage_2[pos + f] << 5;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_all_cases_stage_3[pos + f] << 3;
- value = re_all_cases_stage_4[pos + code];
-
- all_cases = &re_all_cases_table[value];
-
- codepoints[0] = ch;
- count = 1;
-
- while (count < RE_MAX_CASES && all_cases->diffs[count - 1] != 0) {
- codepoints[count] = (RE_UINT32)((RE_INT32)ch + all_cases->diffs[count -
- 1]);
- ++count;
- }
-
- return count;
+static RE_UINT8 re_all_cases_table_2[] = {
+ 0, 0, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 6, 14, 15, 16, 17, 0, 0, 0, 0, 0, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 6, 29, 6, 6, 30, 31, 32, 33, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39,
+ 0, 0, 0, 0, 40, 36, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0,
+ 6, 6, 6, 43, 44, 6, 6, 6, 45, 46, 47, 48, 46, 49, 50, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 55, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 59, 60, 61, 62, 6, 6, 6, 63, 34, 64, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 65, 66, 67, 0, 0, 0, 0, 68, 6, 69, 70, 71, 72, 73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 76, 77, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0,
+ 79, 80, 81, 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 85, 86, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_all_cases_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 134, 1, 3, 1, 1, 1, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 83,
+ 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 29,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 133, 15, 16, 16, 16, 16, 16, 16, 0, 23, 23, 25, 25, 23, 23, 27,
+ 27, 23, 23, 25, 25, 23, 23, 28, 28, 0, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 29, 23, 23, 25, 25, 23, 23, 136,
+ 53, 30, 16, 16, 16, 16, 30, 28, 28, 31, 32, 25, 25, 0, 33, 34,
+ 35, 23, 23, 36, 37, 47, 38, 38, 16, 16, 51, 0, 36, 39, 49, 40,
+ 16, 16, 16, 16, 16, 16, 41, 28, 28, 42, 0, 0, 16, 16, 41, 43,
+ 43, 44, 45, 25, 25, 23, 23, 46, 16, 16, 0, 0, 16, 16, 0, 48,
+ 0, 0, 0, 0, 155, 155, 24, 149, 149, 17, 156, 156, 26, 23, 23, 43,
+ 43, 23, 23, 25, 25, 23, 23, 28, 28, 23, 23, 25, 25, 33, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 150, 150, 18, 16, 16, 47, 48, 16, 16, 16, 16, 16, 16, 16, 16,
+ 49, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 50, 25, 25, 51, 52, 108,
+ 106, 23, 23, 53, 54, 55, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 106, 104, 107, 30, 30, 0, 31, 32, 0, 34, 0, 35, 112, 0, 0, 0,
+ 36, 113, 0, 37, 0, 110, 111, 0, 38, 38, 115, 101, 114, 0, 0, 36,
+ 0, 105, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0,
+ 41, 0, 120, 42, 0, 0, 0, 117, 41, 54, 44, 45, 55, 0, 0, 0,
+ 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 116, 0,
+ 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 0, 0, 16, 16, 0, 0, 0, 75, 76, 76, 0, 56,
+ 0, 0, 0, 0, 0, 0, 57, 0, 58, 59, 58, 0, 60, 0, 61, 62,
+ 0, 1, 6, 1, 1, 7, 1, 1, 8, 142, 10, 1, 145, 1, 1, 1,
+ 63, 64, 0, 151, 65, 65, 66, 65, 65, 67, 65, 65, 57, 58, 59, 58,
+ 0, 1, 6, 1, 1, 7, 1, 1, 8, 9, 10, 1, 11, 1, 1, 1,
+ 63, 64, 151, 19, 65, 65, 66, 65, 65, 67, 65, 65, 60, 61, 62, 71,
+ 138, 140, 0, 0, 0, 159, 157, 71, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 144, 158, 74, 56, 141, 139, 0, 28, 28, 74, 16, 16, 0, 75, 76, 76,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 1, 1, 12, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1,
+ 65, 68, 69, 65, 65, 65, 65, 65, 65, 65, 70, 65, 65, 65, 65, 65,
+ 1, 1, 12, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1,
+ 65, 68, 69, 65, 65, 65, 65, 65, 65, 65, 70, 65, 65, 65, 65, 65,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 16, 16, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 28, 23, 23, 25, 25, 23, 23, 28, 28, 23, 23, 25, 25, 23, 23, 28,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 78, 78, 78, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 78, 78, 78, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 80, 80, 80, 80, 80, 80, 0, 80, 0, 0, 0, 0, 0, 80, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 82, 82, 82,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 0, 0,
+ 146, 147, 148, 161, 162, 163, 164, 152, 154, 0, 0, 0, 0, 0, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 102, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 153, 0, 0, 83, 0,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 0, 0,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 0, 0,
+ 0, 81, 0, 81, 0, 81, 0, 81, 0, 81, 0, 81, 0, 81, 0, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 84, 84, 85, 85, 86, 86, 87, 87, 90, 90, 88, 88, 75, 75, 0, 0,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 0, 28, 0, 0, 0, 0, 81, 81, 84, 84, 28, 0, 143, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 85, 85, 86, 86, 28, 0, 0, 0,
+ 81, 81, 0, 0, 0, 0, 0, 0, 81, 81, 87, 87, 0, 0, 0, 0,
+ 81, 81, 0, 0, 0, 89, 0, 0, 81, 81, 88, 88, 89, 0, 0, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 90, 90, 75, 75, 28, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 135, 137, 0, 0, 0, 0,
+ 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 0, 0, 0, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 93, 93, 94, 94, 95, 95, 94, 94, 93, 93,
+ 96, 96, 97, 97, 96, 96, 98, 98, 57, 57, 99, 99, 57, 57, 98, 98,
+ 93, 93, 94, 94, 95, 95, 94, 94, 93, 93, 96, 96, 97, 97, 96, 96,
+ 98, 98, 57, 57, 99, 99, 57, 57, 98, 98, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0,
+ 16, 16, 101, 102, 103, 50, 52, 28, 28, 23, 23, 25, 25, 104, 105, 106,
+ 107, 0, 16, 16, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 108, 106,
+ 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 25, 25, 23, 23, 0,
+ 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 0, 80, 0, 0, 0, 0, 0, 80, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 154, 22, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0,
+ 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 25, 25, 109, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 25, 25, 110, 0, 0,
+ 16, 16, 16, 16, 77, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 111, 112, 113, 114, 115, 0,
+ 116, 117, 118, 119, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 0, 16, 16, 77, 120, 121, 28, 28, 23, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127,
+ 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128,
+ 129, 129, 129, 129, 129, 129, 129, 129, 126, 126, 126, 126, 126, 126, 126, 126,
+ 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126,
+ 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128,
+ 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127,
+ 126, 126, 126, 126, 0, 0, 0, 0, 129, 129, 129, 129, 129, 129, 129, 129,
+ 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126,
+ 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130, 131, 131,
+ 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130, 132, 132,
+ 72, 72, 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130,
+ 131, 131, 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130,
+ 132, 132, 72, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_AllCases re_all_cases_table_4[] = {
+ { 0, 0, 0},
+ { 32, 0, 0},
+ { 32, 304, 0},
+ { 32, 8490, 0},
+ { 32, 383, 0},
+ { 32, 8491, 0},
+ { 32, 976, 0},
+ { 32, 1013, 0},
+ { 32, 977, 1012},
+ { 252, 921, 8126},
+ { 32, 1008, 0},
+ { 777, 924, 0},
+ { 32, 7296, 0},
+ { 32, 7297, 0},
+ { 32, 7298, 0},
+ { 376, 0, 0},
+ { 1, 0, 0},
+ { 14, 456, 0},
+ { 2, 498, 0},
+ { 96, 962, 0},
+ { 1, 7303, 0},
+ { 1, 7835, 0},
+ {47811, 42570, 0},
+ { 3, 0, 0},
+ { 2, 453, 0},
+ { 7, 0, 0},
+ { 6, 459, 0},
+ { 127, 0, 0},
+ { 15, 0, 0},
+ { 391, 0, 0},
+ { 978, 0, 0},
+ { 991, 0, 0},
+ { 989, 0, 0},
+ { 83, 0, 0},
+ { 982, 0, 0},
+ { 971, 0, 0},
+ { 1011, 0, 0},
+ { 1015, 0, 0},
+ { 1023, 0, 0},
+ { 1007, 0, 0},
+ { 1002, 0, 0},
+ { 806, 0, 0},
+ { 810, 0, 0},
+ { 31, 0, 0},
+ { 827, 0, 0},
+ { 825, 0, 0},
+ { 805, 0, 0},
+ { 99, 0, 0},
+ { 72, 0, 0},
+ { 958, 0, 0},
+ {11871, 0, 0},
+ { 935, 0, 0},
+ {11864, 0, 0},
+ { 963, 0, 0},
+ { 205, 0, 0},
+ { 201, 0, 0},
+ { 140, 0, 0},
+ { 42, 0, 0},
+ { 37, 0, 0},
+ { 39, 0, 0},
+ { 64, 0, 0},
+ { 67, 0, 0},
+ { 65, 0, 0},
+ { 96, 982, 0},
+ { 96, 1009, 0},
+ { 96, 0, 0},
+ { 96, 981, 0},
+ { 96, 8486, 0},
+ { 96, 7299, 0},
+ { 96, 7300, 7301},
+ { 96, 7302, 0},
+ { 24, 0, 0},
+ { 98, 0, 0},
+ { 48, 0, 0},
+ { 11, 0, 0},
+ { 134, 0, 0},
+ { 130, 0, 0},
+ { 80, 0, 0},
+ { 208, 0, 0},
+ {15776, 0, 0},
+ {15840, 0, 0},
+ { 8, 0, 0},
+ { 3136, 0, 0},
+ { 7745, 0, 0},
+ { 202, 0, 0},
+ { 186, 0, 0},
+ { 190, 0, 0},
+ { 172, 0, 0},
+ { 144, 0, 0},
+ { 9, 0, 0},
+ { 128, 0, 0},
+ { 124, 0, 0},
+ { 16, 0, 0},
+ { 102, 0, 0},
+ { 106, 0, 0},
+ { 110, 0, 0},
+ { 26, 0, 0},
+ { 30, 0, 0},
+ { 38, 0, 0},
+ { 46, 0, 0},
+ { 112, 0, 0},
+ {11785, 0, 0},
+ {12574, 0, 0},
+ {11801, 0, 0},
+ {11836, 0, 0},
+ {11807, 0, 0},
+ {11839, 0, 0},
+ {11810, 0, 0},
+ {11841, 0, 0},
+ {47620, 0, 0},
+ {42472, 0, 0},
+ {42444, 0, 0},
+ {42487, 0, 0},
+ {42445, 0, 0},
+ {42433, 0, 0},
+ {42436, 0, 0},
+ {42286, 0, 0},
+ {42294, 0, 0},
+ {42287, 0, 0},
+ { 3296, 0, 0},
+ {42311, 0, 0},
+ {47688, 0, 0},
+ {47312, 0, 0},
+ {47152, 0, 0},
+ {47184, 0, 0},
+ {47216, 0, 0},
+ { 40, 0, 0},
+ { 56, 0, 0},
+ { 88, 0, 0},
+ { 104, 0, 0},
+ { 34, 0, 0},
+ { 62, 0, 0},
+ { 94, 0, 0},
+ { 345, 0, 0},
+ { 32, 305, 0},
+ { 8545, 107, 0},
+ { 300, 115, 0},
+ { 8686, 229, 0},
+ { 66, 946, 0},
+ { 96, 949, 0},
+ { 73, 952, 1012},
+ { 108, 952, 977},
+ { 220, 953, 8126},
+ { 7419, 921, 953},
+ { 106, 954, 0},
+ { 809, 956, 0},
+ { 6290, 1074, 0},
+ { 6293, 1076, 0},
+ { 6300, 1086, 0},
+ { 15, 457, 0},
+ { 3, 499, 0},
+ { 97, 963, 0},
+ { 6373, 1123, 0},
+ { 251, 7777, 0},
+ {47810, 42571, 0},
+ { 1, 454, 0},
+ { 1, 460, 0},
+ { 118, 960, 0},
+ { 80, 961, 0},
+ { 115, 966, 0},
+ { 8847, 969, 0},
+ { 6306, 1089, 0},
+ { 6310, 1090, 7301},
+ { 6311, 1090, 7300},
+ { 6316, 1098, 0}
+};
+
+int re_get_all_cases(RE_UINT32 codepoint, RE_UINT32* cases) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_all_cases_table_1[field_2];
+ v = re_all_cases_table_2[(v << 5) | field_1];
+ v = re_all_cases_table_3[(v << 5) | field_0];
+
+ cases[0] = codepoint;
+
+ if (re_all_cases_table_4[v].delta == 0)
+ return 1;
+
+ cases[1] = codepoint ^ re_all_cases_table_4[v].delta;
+
+ if (re_all_cases_table_4[v].others[0] == 0)
+ return 2;
+
+ cases[2] = re_all_cases_table_4[v].others[0];
+
+ if (re_all_cases_table_4[v].others[1] == 0)
+ return 3;
+
+ cases[3] = re_all_cases_table_4[v].others[1];
+
+ return 4;
}
-/* Simple_Case_Folding. */
+/* Simple case folding. */
+static RE_UINT8 re_simple_folding_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10,
+ 2, 11, 2, 12, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
-static RE_UINT8 re_simple_case_folding_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_simple_folding_table_2[] = {
+ 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
+ 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 33, 36, 37, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 41, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 45, 0, 46, 4, 4, 4, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 48, 49, 0, 0, 0, 0, 50, 4, 51, 52, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0,
+ 60, 61, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_simple_case_folding_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 10, 11,
- 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, 6, 17, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 18,
- 6, 6, 6, 6, 19, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 22, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+static RE_UINT8 re_simple_folding_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 66, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 65, 0, 1, 0, 1, 0, 1, 0, 0, 3, 0, 5, 0, 3, 0, 49,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 67, 3, 0, 5, 0, 3, 0, 64,
+ 0, 78, 1, 0, 1, 0, 78, 10, 0, 81, 80, 5, 0, 0, 36, 79,
+ 77, 3, 0, 84, 85, 0, 86, 86, 1, 0, 0, 0, 84, 83, 0, 82,
+ 1, 0, 1, 0, 1, 0, 70, 10, 0, 71, 0, 0, 1, 0, 70, 17,
+ 0, 73, 72, 5, 0, 3, 0, 69, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 3, 0, 9, 1, 0, 4, 5, 0, 3, 0, 17,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 2, 1, 0, 1, 0, 41, 32, 1, 0, 1, 0, 1, 0, 1, 0,
+ 75, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 110, 5, 0, 74, 109, 0,
+ 0, 3, 0, 76, 60, 58, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 53,
+ 0, 0, 0, 0, 0, 0, 24, 0, 20, 22, 20, 0, 29, 0, 31, 30,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 39, 39, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 40, 44, 0, 0, 0, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 33, 26, 0, 0, 34, 29, 0, 10, 0, 8, 1, 0, 0, 52, 51, 51,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 10, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 3, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 113, 113, 113, 113, 113, 113, 0, 113, 0, 0, 0, 0, 0, 113, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 89, 90, 91, 92, 93, 94, 95, 96, 130, 0, 0, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 0, 0, 87, 87, 87,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 62, 0, 0, 98, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 59, 59, 10, 0, 97, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 57, 57, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 55, 55, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 54, 54, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 52, 52, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 99, 100, 0, 0, 0, 0,
+ 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 42, 42, 45, 45, 46, 46, 45, 45, 42, 42,
+ 15, 15, 16, 16, 15, 15, 21, 21, 24, 24, 25, 25, 24, 24, 21, 21,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 102, 111, 103, 0, 0, 10, 0, 3, 0, 5, 0, 106, 104, 107,
+ 105, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 108, 107,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 5, 0, 128, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 5, 0, 122, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 120, 123, 121, 118, 119, 0,
+ 114, 116, 115, 88, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 35, 117, 129, 10, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 0, 0, 0, 0,
+ 23, 23, 23, 23, 23, 23, 23, 23, 27, 27, 27, 27, 27, 27, 27, 27,
+ 23, 23, 23, 23, 23, 23, 23, 23, 37, 37, 37, 37, 37, 37, 37, 37,
+ 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 37, 37, 37, 37, 37, 37, 37, 37,
+ 23, 23, 23, 23, 23, 23, 23, 23, 27, 27, 27, 27, 27, 27, 27, 27,
+ 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 19, 21, 21, 19, 19, 25, 25, 19, 19, 21, 21, 19, 19, 28, 28,
+ 19, 19, 21, 21, 19, 19, 25, 25, 19, 19, 21, 21, 19, 19, 38, 38,
+ 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT16 re_simple_folding_table_4[] = {
+ 0, 1, 2, 3, 6, 7, 8, 9,
+ 11, 14, 15, 16, 19, 22, 24, 26,
+ 30, 31, 32, 34, 37, 38, 39, 40,
+ 42, 46, 48, 56, 62, 64, 65, 67,
+ 72, 74, 76, 80, 83, 88, 94, 96,
+ 98, 99, 102, 104, 105, 106, 110, 112,
+ 124, 127, 128, 130, 134, 140, 144, 172,
+ 186, 190, 201, 202, 205, 208, 250, 252,
+ 268, 345, 376, 391, 777, 805, 806, 810,
+ 825, 827, 935, 958, 963, 971, 978, 982,
+ 989, 991, 1002, 1007, 1011, 1015, 1023, 3136,
+ 3296, 6322, 6325, 6332, 6338, 6342, 6343, 6348,
+ 6372, 7175, 7745, 8513, 8654, 8943, 11785, 11801,
+ 11807, 11810, 11836, 11839, 11841, 11864, 11871, 12574,
+ 15776, 15840, 42286, 42287, 42294, 42311, 42433, 42436,
+ 42444, 42445, 42472, 42487, 47152, 47184, 47216, 47312,
+ 47620, 47688, 47811
+};
+
+RE_UINT32 re_get_simple_case_folding(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_simple_folding_table_1[field_2];
+ v = re_simple_folding_table_2[(v << 5) | field_1];
+ v = re_simple_folding_table_3[(v << 5) | field_0];
+
+ return codepoint ^ re_simple_folding_table_4[v];
+}
+
+/* Full case folding. */
+static RE_UINT8 re_full_folding_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_simple_case_folding_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 2, 2, 5, 5, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 7, 8, 8, 7, 6, 6, 6, 6, 6, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 8, 20, 6, 6, 21, 6,
- 6, 6, 6, 6, 22, 6, 23, 24, 25, 6, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_full_folding_table_2[] = {
+ 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 26, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 27, 28,
- 29, 30, 1, 2, 31, 32, 0, 0, 33, 34, 35, 6, 6, 6, 36, 37,
- 38, 38, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6,
- 39, 7, 6, 6, 6, 6, 6, 6, 40, 41, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 42, 43, 43, 43, 44, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29,
+ 0, 0, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 32, 4, 4, 4, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 45, 45, 45, 45, 46, 47, 0, 0, 0, 0, 0, 0,
+ 46, 47, 0, 48, 4, 4, 4, 49, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 51, 51, 51, 51, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 53, 54, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 0, 55, 0, 48, 0, 55, 0, 55, 0, 48, 0, 56, 0, 55, 0, 0,
- 0, 55, 0, 55, 0, 55, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61,
- 0, 0, 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, 65, 65, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 50, 51, 0, 0, 0, 0, 52, 4, 53, 54, 55, 56, 57,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 67, 68, 68, 68, 0, 0, 0, 0, 0, 0,
- 43, 43, 43, 43, 43, 44, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 73, 33, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 53, 0, 0,
- 6, 6, 6, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 6, 7, 6, 6, 6, 6, 6, 6, 6, 0, 74,
- 6, 75, 27, 6, 6, 76, 77, 6, 78, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 81, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 82, 82, 82, 82, 82, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0,
+ 63, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 84, 84, 84, 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_simple_case_folding_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 0, 3, 0, 3, 0,
- 0, 3, 0, 3, 0, 3, 0, 3, 4, 3, 0, 3, 0, 3, 0, 5,
- 0, 6, 3, 0, 3, 0, 7, 3, 0, 8, 8, 3, 0, 0, 9, 10,
- 11, 3, 0, 8, 12, 0, 13, 14, 3, 0, 0, 0, 13, 15, 0, 16,
- 3, 0, 3, 0, 3, 0, 17, 3, 0, 17, 0, 0, 3, 0, 17, 3,
- 0, 18, 18, 3, 0, 3, 0, 19, 3, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 20, 3, 0, 20, 3, 0, 20, 3, 0, 3, 0, 3,
- 0, 3, 0, 3, 0, 0, 3, 0, 0, 20, 3, 0, 3, 0, 21, 22,
- 23, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 24, 3, 0, 25, 26, 0, 0, 3, 0, 27, 28, 29, 3, 0,
- 0, 0, 0, 0, 0, 30, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0,
- 32, 32, 32, 0, 33, 0, 34, 34, 1, 1, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 38, 39, 0,
- 40, 41, 0, 0, 42, 43, 0, 3, 0, 44, 3, 0, 0, 23, 23, 23,
- 45, 45, 45, 45, 45, 45, 45, 45, 3, 0, 0, 0, 0, 0, 0, 0,
- 46, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0,
- 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 0, 0, 48, 0, 0,
- 49, 49, 49, 49, 49, 49, 0, 0, 50, 51, 52, 53, 53, 54, 55, 56,
- 57, 0, 0, 0, 0, 0, 0, 0, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 0, 0, 58, 58, 58, 3, 0, 3, 0, 3, 0, 0, 0,
- 0, 0, 0, 59, 0, 0, 60, 0, 49, 49, 49, 49, 49, 49, 49, 49,
- 0, 49, 0, 49, 0, 49, 0, 49, 49, 49, 61, 61, 62, 0, 63, 0,
- 64, 64, 64, 64, 62, 0, 0, 0, 49, 49, 65, 65, 0, 0, 0, 0,
- 49, 49, 66, 66, 44, 0, 0, 0, 67, 67, 68, 68, 62, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 71, 0, 0, 0, 0,
- 0, 0, 72, 0, 0, 0, 0, 0, 73, 73, 73, 73, 73, 73, 73, 73,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 74,
- 74, 74, 74, 74, 74, 74, 74, 74, 3, 0, 75, 76, 77, 0, 0, 3,
- 0, 3, 0, 3, 0, 78, 79, 80, 81, 0, 3, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 82, 82, 0, 0, 0, 3, 0, 3, 0, 0,
- 0, 3, 0, 3, 0, 83, 3, 0, 0, 0, 0, 3, 0, 84, 0, 0,
- 3, 0, 85, 86, 87, 88, 85, 0, 89, 90, 91, 92, 3, 0, 3, 0,
- 0, 0, 3, 0, 41, 93, 94, 0, 95, 95, 95, 95, 95, 95, 95, 95,
- 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 0, 0, 0,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 0, 0, 0,
-};
-
-/* Simple_Case_Folding: 1848 bytes. */
-
-static RE_INT32 re_simple_case_folding_table[] = {
- 0,
- 32,
- 775,
- 1,
- -121,
- -268,
- 210,
- 206,
- 205,
- 79,
- 202,
- 203,
- 207,
- 211,
- 209,
- 213,
- 214,
- 218,
- 217,
- 219,
- 2,
- -97,
- -56,
- -130,
- 10795,
- -163,
- 10792,
- -195,
- 69,
- 71,
- 116,
- 38,
- 37,
- 64,
- 63,
- 8,
- -30,
- -25,
- -15,
- -22,
- -54,
- -48,
- -60,
- -64,
- -7,
- 80,
- 15,
- 48,
- 7264,
- -8,
- -6222,
- -6221,
- -6212,
- -6210,
- -6211,
- -6204,
- -6180,
- 35267,
- -3008,
- -58,
- -7615,
- -74,
- -9,
- -7173,
- -86,
- -100,
- -112,
- -128,
- -126,
- -7517,
- -8383,
- -8262,
- 28,
- 16,
- 26,
- -10743,
- -3814,
- -10727,
- -10780,
- -10749,
- -10783,
- -10782,
- -10815,
- -35332,
- -42280,
- -42308,
- -42319,
- -42315,
- -42305,
- -42258,
- -42282,
- -42261,
- 928,
- -42307,
- -35384,
- -38864,
- 40,
- 34,
-};
-
-/* Simple_Case_Folding: 392 bytes. */
-
-RE_UINT32 re_get_simple_case_folding(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_INT32 diff;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_simple_case_folding_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_simple_case_folding_stage_2[pos + f] << 5;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_simple_case_folding_stage_3[pos + f] << 3;
- value = re_simple_case_folding_stage_4[pos + code];
-
- diff = re_simple_case_folding_table[value];
-
- return (RE_UINT32)((RE_INT32)ch + diff);
-}
-
-/* Full_Case_Folding. */
-
-static RE_UINT8 re_full_case_folding_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_full_case_folding_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 10, 11,
- 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, 6, 17, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 18, 6, 6, 6, 19,
- 6, 6, 6, 6, 20, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 22, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static RE_UINT8 re_full_case_folding_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 2, 2, 5, 6, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 8, 9, 9, 10, 7, 7, 7, 7, 7, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 9, 22, 7, 7, 23, 7,
- 7, 7, 7, 7, 24, 7, 25, 26, 27, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 30,
- 31, 32, 33, 2, 34, 35, 36, 0, 37, 38, 39, 7, 7, 7, 40, 41,
- 42, 42, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7,
- 43, 44, 7, 7, 7, 7, 7, 7, 45, 46, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 47, 48, 48, 48, 49, 0, 0, 0, 0, 0,
- 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 51, 51, 51, 51, 52, 53, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 55, 56, 57, 57, 57, 57, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 59, 60, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 61, 0, 54, 0, 61, 0, 61, 0, 54, 62, 63, 0, 61, 0, 0,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 0, 0, 0, 0, 80, 81, 82, 0, 0, 0, 0, 0, 83, 83, 0, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 85, 86, 86, 86, 0, 0, 0, 0, 0, 0,
- 48, 48, 48, 48, 48, 49, 0, 0, 0, 0, 0, 0, 87, 88, 89, 90,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 25, 91, 37, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 92, 0, 0,
- 7, 7, 7, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 7, 44, 7, 7, 7, 7, 7, 7, 7, 0, 93,
- 7, 94, 29, 7, 7, 95, 96, 7, 97, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_full_folding_table_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 101, 101, 101, 101, 102, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 80, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 103, 103, 103, 103, 103, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 105, 105, 105, 105, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_full_case_folding_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 3, 4, 0, 4, 0, 4, 0, 4, 0,
- 5, 0, 4, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 4, 0, 4,
- 0, 6, 4, 0, 4, 0, 4, 0, 7, 4, 0, 4, 0, 4, 0, 8,
- 0, 9, 4, 0, 4, 0, 10, 4, 0, 11, 11, 4, 0, 0, 12, 13,
- 14, 4, 0, 11, 15, 0, 16, 17, 4, 0, 0, 0, 16, 18, 0, 19,
- 4, 0, 4, 0, 4, 0, 20, 4, 0, 20, 0, 0, 4, 0, 20, 4,
- 0, 21, 21, 4, 0, 4, 0, 22, 4, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 23, 4, 0, 23, 4, 0, 23, 4, 0, 4, 0, 4,
- 0, 4, 0, 4, 0, 0, 4, 0, 24, 23, 4, 0, 4, 0, 25, 26,
- 27, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 28, 4, 0, 29, 30, 0, 0, 4, 0, 31, 32, 33, 4, 0,
- 0, 0, 0, 0, 0, 34, 0, 0, 4, 0, 4, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0,
- 36, 36, 36, 0, 37, 0, 38, 38, 39, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 0, 0, 0, 44, 45, 0,
- 46, 47, 0, 0, 48, 49, 0, 4, 0, 50, 4, 0, 0, 27, 27, 27,
- 51, 51, 51, 51, 51, 51, 51, 51, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 4, 0, 4, 0, 52, 4, 0, 4, 0, 4, 0, 4,
- 0, 4, 0, 4, 0, 4, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 0,
- 0, 0, 0, 0, 0, 0, 0, 54, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, 0, 0, 0, 55, 0, 0,
- 56, 56, 56, 56, 56, 56, 0, 0, 57, 58, 59, 60, 60, 61, 62, 63,
- 64, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 0, 0, 65, 65, 65, 4, 0, 4, 0, 4, 0, 66, 67,
- 68, 69, 70, 71, 0, 0, 72, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 73, 0, 74, 0, 75, 0, 76, 0, 0, 56, 0, 56, 0, 56, 0, 56,
- 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78,
- 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80,
- 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82,
- 0, 0, 83, 84, 85, 0, 86, 87, 56, 56, 88, 88, 89, 0, 90, 0,
- 0, 0, 91, 92, 93, 0, 94, 95, 96, 96, 96, 96, 97, 0, 0, 0,
- 0, 0, 98, 99, 0, 0, 100, 101, 56, 56, 102, 102, 0, 0, 0, 0,
- 0, 0, 103, 104, 105, 0, 106, 107, 56, 56, 108, 108, 50, 0, 0, 0,
- 0, 0, 109, 110, 111, 0, 112, 113, 114, 114, 115, 115, 116, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 119, 0, 0, 0, 0,
- 0, 0, 120, 0, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 4, 0, 123, 124, 125, 0, 0, 4,
- 0, 4, 0, 4, 0, 126, 127, 128, 129, 0, 4, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 130, 130, 0, 0, 0, 4, 0, 4, 0, 0,
- 4, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 4, 0, 131, 4, 0,
- 0, 0, 0, 4, 0, 132, 0, 0, 4, 0, 133, 134, 135, 136, 133, 0,
- 137, 138, 139, 140, 4, 0, 4, 0, 0, 0, 4, 0, 47, 141, 142, 0,
- 143, 143, 143, 143, 143, 143, 143, 143, 144, 145, 146, 147, 148, 149, 150, 0,
- 0, 0, 0, 151, 152, 153, 154, 155, 156, 156, 156, 156, 156, 156, 156, 156,
- 156, 156, 156, 156, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 0, 0, 0, 0, 0, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 0, 0, 0, 0, 0, 0,
-};
-
-/* Full_Case_Folding: 2048 bytes. */
-
-static RE_FullCaseFolding re_full_case_folding_table[] = {
- { 0, { 0, 0}},
- { 32, { 0, 0}},
- { 775, { 0, 0}},
- { -108, { 115, 0}},
- { 1, { 0, 0}},
- { -199, { 775, 0}},
- { 371, { 110, 0}},
- { -121, { 0, 0}},
- { -268, { 0, 0}},
- { 210, { 0, 0}},
- { 206, { 0, 0}},
- { 205, { 0, 0}},
- { 79, { 0, 0}},
- { 202, { 0, 0}},
- { 203, { 0, 0}},
- { 207, { 0, 0}},
- { 211, { 0, 0}},
- { 209, { 0, 0}},
- { 213, { 0, 0}},
- { 214, { 0, 0}},
- { 218, { 0, 0}},
- { 217, { 0, 0}},
- { 219, { 0, 0}},
- { 2, { 0, 0}},
- { -390, { 780, 0}},
- { -97, { 0, 0}},
- { -56, { 0, 0}},
- { -130, { 0, 0}},
- { 10795, { 0, 0}},
- { -163, { 0, 0}},
- { 10792, { 0, 0}},
- { -195, { 0, 0}},
- { 69, { 0, 0}},
- { 71, { 0, 0}},
- { 116, { 0, 0}},
- { 38, { 0, 0}},
- { 37, { 0, 0}},
- { 64, { 0, 0}},
- { 63, { 0, 0}},
- { 41, { 776, 769}},
- { 21, { 776, 769}},
- { 8, { 0, 0}},
- { -30, { 0, 0}},
- { -25, { 0, 0}},
- { -15, { 0, 0}},
- { -22, { 0, 0}},
- { -54, { 0, 0}},
- { -48, { 0, 0}},
- { -60, { 0, 0}},
- { -64, { 0, 0}},
- { -7, { 0, 0}},
- { 80, { 0, 0}},
- { 15, { 0, 0}},
- { 48, { 0, 0}},
- { -34, {1410, 0}},
- { 7264, { 0, 0}},
- { -8, { 0, 0}},
- { -6222, { 0, 0}},
- { -6221, { 0, 0}},
- { -6212, { 0, 0}},
- { -6210, { 0, 0}},
- { -6211, { 0, 0}},
- { -6204, { 0, 0}},
- { -6180, { 0, 0}},
- { 35267, { 0, 0}},
- { -3008, { 0, 0}},
- { -7726, { 817, 0}},
- { -7715, { 776, 0}},
- { -7713, { 778, 0}},
- { -7712, { 778, 0}},
- { -7737, { 702, 0}},
- { -58, { 0, 0}},
- { -7723, { 115, 0}},
- { -7051, { 787, 0}},
- { -7053, { 787, 768}},
- { -7055, { 787, 769}},
- { -7057, { 787, 834}},
- { -128, { 953, 0}},
- { -136, { 953, 0}},
- { -112, { 953, 0}},
- { -120, { 953, 0}},
- { -64, { 953, 0}},
- { -72, { 953, 0}},
- { -66, { 953, 0}},
- { -7170, { 953, 0}},
- { -7176, { 953, 0}},
- { -7173, { 834, 0}},
- { -7174, { 834, 953}},
- { -74, { 0, 0}},
- { -7179, { 953, 0}},
- { -7173, { 0, 0}},
- { -78, { 953, 0}},
- { -7180, { 953, 0}},
- { -7190, { 953, 0}},
- { -7183, { 834, 0}},
- { -7184, { 834, 953}},
- { -86, { 0, 0}},
- { -7189, { 953, 0}},
- { -7193, { 776, 768}},
- { -7194, { 776, 769}},
- { -7197, { 834, 0}},
- { -7198, { 776, 834}},
- { -100, { 0, 0}},
- { -7197, { 776, 768}},
- { -7198, { 776, 769}},
- { -7203, { 787, 0}},
- { -7201, { 834, 0}},
- { -7202, { 776, 834}},
- { -112, { 0, 0}},
- { -118, { 953, 0}},
- { -7210, { 953, 0}},
- { -7206, { 953, 0}},
- { -7213, { 834, 0}},
- { -7214, { 834, 953}},
- { -128, { 0, 0}},
- { -126, { 0, 0}},
- { -7219, { 953, 0}},
- { -7517, { 0, 0}},
- { -8383, { 0, 0}},
- { -8262, { 0, 0}},
- { 28, { 0, 0}},
- { 16, { 0, 0}},
- { 26, { 0, 0}},
- {-10743, { 0, 0}},
- { -3814, { 0, 0}},
- {-10727, { 0, 0}},
- {-10780, { 0, 0}},
- {-10749, { 0, 0}},
- {-10783, { 0, 0}},
- {-10782, { 0, 0}},
- {-10815, { 0, 0}},
- {-35332, { 0, 0}},
- {-42280, { 0, 0}},
- {-42308, { 0, 0}},
- {-42319, { 0, 0}},
- {-42315, { 0, 0}},
- {-42305, { 0, 0}},
- {-42258, { 0, 0}},
- {-42282, { 0, 0}},
- {-42261, { 0, 0}},
- { 928, { 0, 0}},
- {-42307, { 0, 0}},
- {-35384, { 0, 0}},
- {-38864, { 0, 0}},
- {-64154, { 102, 0}},
- {-64155, { 105, 0}},
- {-64156, { 108, 0}},
- {-64157, { 102, 105}},
- {-64158, { 102, 108}},
- {-64146, { 116, 0}},
- {-64147, { 116, 0}},
- {-62879, {1398, 0}},
- {-62880, {1381, 0}},
- {-62881, {1387, 0}},
- {-62872, {1398, 0}},
- {-62883, {1389, 0}},
- { 40, { 0, 0}},
- { 34, { 0, 0}},
-};
-
-/* Full_Case_Folding: 1264 bytes. */
-
-int re_get_full_case_folding(RE_UINT32 ch, RE_UINT32* codepoints) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_FullCaseFolding* case_folding;
- int count;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_full_case_folding_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_full_case_folding_stage_2[pos + f] << 5;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_full_case_folding_stage_3[pos + f] << 3;
- value = re_full_case_folding_stage_4[pos + code];
-
- case_folding = &re_full_case_folding_table[value];
-
- codepoints[0] = (RE_UINT32)((RE_INT32)ch + case_folding->diff);
- count = 1;
-
- while (count < RE_MAX_FOLDED && case_folding->codepoints[count - 1] != 0) {
- codepoints[count] = case_folding->codepoints[count - 1];
- ++count;
- }
-
- return count;
+ 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 61,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 79, 0, 1, 0, 1, 0, 1, 0, 0, 3, 0, 5, 0, 3, 0, 51,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 100, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 81, 3, 0, 5, 0, 3, 0, 77,
+ 0, 93, 1, 0, 1, 0, 93, 10, 0, 96, 95, 5, 0, 0, 37, 94,
+ 92, 3, 0, 99, 101, 0, 102, 102, 1, 0, 0, 0, 99, 98, 0, 97,
+ 1, 0, 1, 0, 1, 0, 85, 10, 0, 86, 0, 0, 1, 0, 85, 17,
+ 0, 88, 87, 5, 0, 3, 0, 84, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 3, 0, 9, 1, 0, 4, 5, 0, 3, 0, 17,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 82, 2, 1, 0, 1, 0, 42, 33, 1, 0, 1, 0, 1, 0, 1, 0,
+ 90, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 158, 5, 0, 89, 157, 0,
+ 0, 3, 0, 91, 72, 70, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 25, 0, 20, 22, 20, 0, 30, 0, 32, 31,
+ 24, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 41, 45, 0, 0, 0, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 34, 27, 0, 0, 35, 30, 0, 10, 0, 8, 1, 0, 0, 55, 54, 54,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 10, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 3, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 73, 73, 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 161, 161, 161, 161, 161, 161, 0, 161, 0, 0, 0, 0, 0, 161, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 105, 106, 107, 108, 109, 110, 111, 112, 178, 0, 0, 0, 0, 0, 0, 0,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, 0, 103, 103, 103,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 146, 142, 144, 141, 145, 75, 0, 0, 143, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 139, 0, 140, 0, 137, 0, 138, 0, 0, 6, 0, 6, 0, 6, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 56, 56, 56, 56, 56, 56, 56, 56,
+ 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 64, 64, 64, 64, 64,
+ 67, 67, 67, 67, 67, 67, 67, 67, 69, 69, 69, 69, 69, 69, 69, 69,
+ 0, 0, 68, 113, 118, 0, 116, 114, 6, 6, 71, 71, 117, 0, 115, 0,
+ 0, 0, 63, 135, 129, 0, 134, 133, 65, 65, 66, 66, 136, 0, 0, 0,
+ 0, 0, 130, 128, 0, 0, 132, 131, 6, 6, 60, 60, 0, 0, 0, 0,
+ 0, 0, 123, 122, 121, 0, 120, 119, 6, 6, 59, 59, 7, 0, 0, 0,
+ 0, 0, 58, 125, 125, 0, 127, 126, 52, 52, 55, 55, 124, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 147, 148, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 43, 43, 46, 46, 47, 47, 46, 46, 43, 43,
+ 15, 15, 16, 16, 15, 15, 21, 21, 25, 25, 26, 26, 25, 25, 21, 21,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 150, 159, 151, 0, 0, 10, 0, 3, 0, 5, 0, 154, 152, 155,
+ 153, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 156, 155,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 5, 0, 176, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 5, 0, 170, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 168, 171, 169, 166, 167, 0,
+ 162, 164, 163, 104, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 36, 165, 177, 10, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 182, 183, 180, 181, 179, 185, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 189, 186, 187, 190, 188, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0,
+ 23, 23, 23, 23, 23, 23, 23, 23, 28, 28, 28, 28, 28, 28, 28, 28,
+ 23, 23, 23, 23, 23, 23, 23, 23, 38, 38, 38, 38, 38, 38, 38, 38,
+ 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 44, 44, 38, 38, 38, 38, 38, 38, 38, 38,
+ 23, 23, 23, 23, 23, 23, 23, 23, 28, 28, 28, 28, 28, 28, 28, 28,
+ 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 19, 21, 21, 19, 19, 26, 26, 19, 19, 21, 21, 19, 19, 29, 29,
+ 19, 19, 21, 21, 19, 19, 26, 26, 19, 19, 21, 21, 19, 19, 39, 39,
+ 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_FullCaseFolding re_full_folding_table_4[] = {
+ { 0, 0, 0},
+ { 1, 0, 0},
+ { 2, 0, 0},
+ { 3, 0, 0},
+ { 6, 0, 0},
+ { 7, 0, 0},
+ { 8, 0, 0},
+ { 9, 0, 0},
+ { 11, 0, 0},
+ { 14, 0, 0},
+ { 15, 0, 0},
+ { 16, 0, 0},
+ { 19, 0, 0},
+ { 22, 0, 0},
+ { 24, 0, 0},
+ { 26, 0, 0},
+ { 30, 0, 0},
+ { 31, 0, 0},
+ { 32, 0, 0},
+ { 34, 0, 0},
+ { 37, 0, 0},
+ { 38, 0, 0},
+ { 39, 0, 0},
+ { 40, 0, 0},
+ { 41, 776, 769},
+ { 42, 0, 0},
+ { 46, 0, 0},
+ { 48, 0, 0},
+ { 56, 0, 0},
+ { 62, 0, 0},
+ { 64, 0, 0},
+ { 65, 0, 0},
+ { 67, 0, 0},
+ { 72, 0, 0},
+ { 74, 0, 0},
+ { 76, 0, 0},
+ { 80, 0, 0},
+ { 83, 0, 0},
+ { 88, 0, 0},
+ { 94, 0, 0},
+ { 96, 0, 0},
+ { 98, 0, 0},
+ { 99, 0, 0},
+ { 102, 0, 0},
+ { 104, 0, 0},
+ { 105, 0, 0},
+ { 106, 0, 0},
+ { 110, 0, 0},
+ { 112, 0, 0},
+ { 117, 776, 769},
+ { 124, 0, 0},
+ { 127, 0, 0},
+ { 128, 0, 0},
+ { 128, 953, 0},
+ { 130, 0, 0},
+ { 134, 0, 0},
+ { 136, 953, 0},
+ { 140, 0, 0},
+ { 142, 953, 0},
+ { 144, 0, 0},
+ { 172, 0, 0},
+ { 172, 115, 0},
+ { 176, 953, 0},
+ { 182, 953, 0},
+ { 184, 953, 0},
+ { 186, 0, 0},
+ { 190, 0, 0},
+ { 192, 953, 0},
+ { 194, 953, 0},
+ { 200, 953, 0},
+ { 201, 0, 0},
+ { 202, 0, 0},
+ { 205, 0, 0},
+ { 208, 0, 0},
+ { 226, 1410, 0},
+ { 250, 0, 0},
+ { 252, 0, 0},
+ { 268, 0, 0},
+ { 345, 0, 0},
+ { 345, 775, 0},
+ { 376, 0, 0},
+ { 391, 0, 0},
+ { 410, 780, 0},
+ { 777, 0, 0},
+ { 805, 0, 0},
+ { 806, 0, 0},
+ { 810, 0, 0},
+ { 825, 0, 0},
+ { 827, 0, 0},
+ { 935, 0, 0},
+ { 958, 0, 0},
+ { 963, 0, 0},
+ { 971, 0, 0},
+ { 978, 0, 0},
+ { 982, 0, 0},
+ { 989, 0, 0},
+ { 991, 0, 0},
+ { 1002, 0, 0},
+ { 1007, 0, 0},
+ { 1011, 0, 0},
+ { 1013, 110, 0},
+ { 1015, 0, 0},
+ { 1023, 0, 0},
+ { 3136, 0, 0},
+ { 3296, 0, 0},
+ { 6322, 0, 0},
+ { 6325, 0, 0},
+ { 6332, 0, 0},
+ { 6338, 0, 0},
+ { 6342, 0, 0},
+ { 6343, 0, 0},
+ { 6348, 0, 0},
+ { 6372, 0, 0},
+ { 7170, 953, 0},
+ { 7174, 834, 953},
+ { 7175, 0, 0},
+ { 7175, 834, 0},
+ { 7181, 953, 0},
+ { 7192, 953, 0},
+ { 7202, 776, 834},
+ { 7203, 834, 0},
+ { 7205, 787, 0},
+ { 7206, 776, 769},
+ { 7207, 776, 768},
+ { 7221, 953, 0},
+ { 7226, 953, 0},
+ { 7230, 834, 953},
+ { 7231, 834, 0},
+ { 7274, 776, 769},
+ { 7274, 953, 0},
+ { 7275, 776, 768},
+ { 7278, 776, 834},
+ { 7279, 834, 0},
+ { 7280, 834, 953},
+ { 7281, 834, 0},
+ { 7284, 953, 0},
+ { 7291, 953, 0},
+ { 7313, 787, 769},
+ { 7315, 787, 834},
+ { 7317, 787, 0},
+ { 7319, 787, 768},
+ { 7904, 778, 0},
+ { 7907, 776, 0},
+ { 7917, 115, 0},
+ { 7919, 778, 0},
+ { 7931, 702, 0},
+ { 7934, 817, 0},
+ { 8513, 0, 0},
+ { 8654, 0, 0},
+ { 8943, 0, 0},
+ {11785, 0, 0},
+ {11801, 0, 0},
+ {11807, 0, 0},
+ {11810, 0, 0},
+ {11836, 0, 0},
+ {11839, 0, 0},
+ {11841, 0, 0},
+ {11864, 0, 0},
+ {11871, 0, 0},
+ {12574, 0, 0},
+ {15776, 0, 0},
+ {15840, 0, 0},
+ {42286, 0, 0},
+ {42287, 0, 0},
+ {42294, 0, 0},
+ {42311, 0, 0},
+ {42433, 0, 0},
+ {42436, 0, 0},
+ {42444, 0, 0},
+ {42445, 0, 0},
+ {42472, 0, 0},
+ {42487, 0, 0},
+ {47152, 0, 0},
+ {47184, 0, 0},
+ {47216, 0, 0},
+ {47312, 0, 0},
+ {47620, 0, 0},
+ {47688, 0, 0},
+ {47811, 0, 0},
+ {64354, 102, 108},
+ {64356, 108, 0},
+ {64357, 102, 105},
+ {64358, 102, 0},
+ {64359, 105, 0},
+ {64373, 116, 0},
+ {64374, 116, 0},
+ {65120, 1381, 0},
+ {65121, 1387, 0},
+ {65123, 1389, 0},
+ {65127, 1398, 0},
+ {65128, 1398, 0}
+};
+
+int re_get_full_case_folding(RE_UINT32 codepoint, RE_UINT32* folded) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+ RE_UINT16* data;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_full_folding_table_1[field_2];
+ v = re_full_folding_table_2[(v << 5) | field_1];
+ v = re_full_folding_table_3[(v << 5) | field_0];
+
+ data = re_full_folding_table_4[v].data;
+ folded[0] = codepoint ^ data[0];
+
+ if (data[1] == 0)
+ return 1;
+
+ folded[1] = data[1];
+
+ if (data[2] == 0)
+ return 2;
+
+ folded[2] = data[2];
+
+ return 3;
}
/* Property function table. */
-
RE_GetPropertyFunc re_get_property[] = {
- re_get_general_category,
- re_get_block,
- re_get_script,
- 0,
- re_get_word_break,
- re_get_grapheme_cluster_break,
- re_get_sentence_break,
- re_get_math,
re_get_alphabetic,
- re_get_lowercase,
- re_get_uppercase,
+ re_get_alphanumeric,
+ re_get_any,
+ re_get_ascii_hex_digit,
+ re_get_bidi_class,
+ re_get_bidi_control,
+ re_get_bidi_mirrored,
+ re_get_blank,
+ re_get_block,
+ re_get_canonical_combining_class,
re_get_cased,
re_get_case_ignorable,
- re_get_changes_when_lowercased,
- re_get_changes_when_uppercased,
- re_get_changes_when_titlecased,
re_get_changes_when_casefolded,
re_get_changes_when_casemapped,
- re_get_id_start,
- re_get_id_continue,
- re_get_xid_start,
- re_get_xid_continue,
+ re_get_changes_when_lowercased,
+ re_get_changes_when_titlecased,
+ re_get_changes_when_uppercased,
+ re_get_dash,
+ re_get_decomposition_type,
re_get_default_ignorable_code_point,
- re_get_grapheme_extend,
+ re_get_deprecated,
+ re_get_diacritic,
+ re_get_east_asian_width,
+ re_get_emoji,
+ re_get_emoji_component,
+ re_get_emoji_modifier,
+ re_get_emoji_modifier_base,
+ re_get_emoji_presentation,
+ re_get_extended_pictographic,
+ re_get_extender,
+ re_get_general_category,
+ re_get_graph,
re_get_grapheme_base,
+ re_get_grapheme_cluster_break,
+ re_get_grapheme_extend,
re_get_grapheme_link,
- re_get_white_space,
- re_get_bidi_control,
- re_get_join_control,
- re_get_dash,
- re_get_hyphen,
- re_get_quotation_mark,
- re_get_terminal_punctuation,
- re_get_other_math,
+ re_get_hangul_syllable_type,
re_get_hex_digit,
- re_get_ascii_hex_digit,
- re_get_other_alphabetic,
+ re_get_hyphen,
+ re_get_id_continue,
re_get_ideographic,
- re_get_diacritic,
- re_get_extender,
- re_get_other_lowercase,
- re_get_other_uppercase,
- re_get_noncharacter_code_point,
- re_get_other_grapheme_extend,
re_get_ids_binary_operator,
+ re_get_id_start,
re_get_ids_trinary_operator,
- re_get_radical,
- re_get_unified_ideograph,
- re_get_other_default_ignorable_code_point,
- re_get_deprecated,
- re_get_soft_dotted,
- re_get_logical_order_exception,
- re_get_other_id_start,
- re_get_other_id_continue,
- re_get_sentence_terminal,
- re_get_variation_selector,
- re_get_pattern_white_space,
- re_get_pattern_syntax,
- re_get_prepended_concatenation_mark,
- re_get_regional_indicator,
- re_get_hangul_syllable_type,
- re_get_bidi_class,
- re_get_canonical_combining_class,
- re_get_decomposition_type,
- re_get_east_asian_width,
+ re_get_indic_positional_category,
+ re_get_indic_syllabic_category,
+ re_get_join_control,
re_get_joining_group,
re_get_joining_type,
re_get_line_break,
- re_get_numeric_type,
- re_get_numeric_value,
- re_get_bidi_mirrored,
- re_get_indic_positional_category,
- re_get_indic_syllabic_category,
- re_get_emoji,
- re_get_emoji_presentation,
- re_get_emoji_modifier,
- re_get_emoji_modifier_base,
- re_get_emoji_component,
- re_get_extended_pictographic,
- re_get_nfd_quick_check,
+ re_get_logical_order_exception,
+ re_get_lowercase,
+ re_get_math,
re_get_nfc_quick_check,
- re_get_nfkd_quick_check,
+ re_get_nfd_quick_check,
re_get_nfkc_quick_check,
- re_get_alphanumeric,
- re_get_any,
- re_get_blank,
- re_get_graph,
- re_get_print,
- re_get_word,
- re_get_xdigit,
- re_get_posix_digit,
+ re_get_nfkd_quick_check,
+ re_get_noncharacter_code_point,
+ re_get_numeric_type,
+ re_get_numeric_value,
+ re_get_other_alphabetic,
+ re_get_other_default_ignorable_code_point,
+ re_get_other_grapheme_extend,
+ re_get_other_id_continue,
+ re_get_other_id_start,
+ re_get_other_lowercase,
+ re_get_other_math,
+ re_get_other_uppercase,
+ re_get_pattern_syntax,
+ re_get_pattern_white_space,
re_get_posix_alnum,
+ re_get_posix_digit,
re_get_posix_punct,
re_get_posix_xdigit,
+ re_get_prepended_concatenation_mark,
+ re_get_print,
+ re_get_quotation_mark,
+ re_get_radical,
+ re_get_regional_indicator,
+ re_get_script,
+ 0,
+ re_get_sentence_break,
+ re_get_sentence_terminal,
+ re_get_soft_dotted,
+ re_get_terminal_punctuation,
+ re_get_unified_ideograph,
+ re_get_uppercase,
+ re_get_variation_selector,
+ re_get_white_space,
+ re_get_word,
+ re_get_word_break,
+ re_get_xdigit,
+ re_get_xid_continue,
+ re_get_xid_start
};
diff --git a/regex_2/_regex_unicode.h b/regex_2/_regex_unicode.h
index 77e576400e1deb928a52c7a20d583ab88466aee7..ea8e48ccc049a96f4ca28609fc9ec386fcf22e9d 100644
--- a/regex_2/_regex_unicode.h
+++ b/regex_2/_regex_unicode.h
@@ -13,7 +13,6 @@ typedef unsigned char BOOL;
#define RE_ASCII_MAX 0x7F
#define RE_LOCALE_MAX 0xFF
-#define RE_UNICODE_MAX 0x10FFFF
#define RE_MAX_CASES 4
#define RE_MAX_FOLDED 3
@@ -31,13 +30,13 @@ typedef struct RE_PropertyValue {
RE_UINT16 id;
} RE_PropertyValue;
-typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch);
+typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 codepoint);
-#define RE_PROP_GC 0x0
-#define RE_PROP_CASED 0xB
-#define RE_PROP_UPPERCASE 0xA
-#define RE_PROP_LOWERCASE 0x9
-#define RE_PROP_SCX 0x3
+#define RE_PROP_GC 0x1E
+#define RE_PROP_CASED 0xA
+#define RE_PROP_UPPERCASE 0x56
+#define RE_PROP_LOWERCASE 0x33
+#define RE_PROP_SCX 0x50
#define RE_PROP_C 30
#define RE_PROP_L 31
@@ -46,254 +45,254 @@ typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch);
#define RE_PROP_P 34
#define RE_PROP_S 35
#define RE_PROP_Z 36
-#define RE_PROP_ASSIGNED 38
-#define RE_PROP_CASEDLETTER 37
+#define RE_PROP_ASSIGNED 37
+#define RE_PROP_CASEDLETTER 38
#define RE_PROP_CN 0
-#define RE_PROP_LU 1
-#define RE_PROP_LL 2
-#define RE_PROP_LT 3
-#define RE_PROP_LM 4
-#define RE_PROP_LO 5
-#define RE_PROP_MN 6
-#define RE_PROP_ME 7
-#define RE_PROP_MC 8
+#define RE_PROP_CC 1
+#define RE_PROP_ZS 2
+#define RE_PROP_PO 3
+#define RE_PROP_SC 4
+#define RE_PROP_PS 5
+#define RE_PROP_PE 6
+#define RE_PROP_SM 7
+#define RE_PROP_PD 8
#define RE_PROP_ND 9
-#define RE_PROP_NL 10
-#define RE_PROP_NO 11
-#define RE_PROP_ZS 12
-#define RE_PROP_ZL 13
-#define RE_PROP_ZP 14
-#define RE_PROP_CC 15
-#define RE_PROP_CF 16
-#define RE_PROP_CO 17
-#define RE_PROP_CS 18
-#define RE_PROP_PD 19
-#define RE_PROP_PS 20
-#define RE_PROP_PE 21
-#define RE_PROP_PC 22
-#define RE_PROP_PO 23
-#define RE_PROP_SM 24
-#define RE_PROP_SC 25
-#define RE_PROP_SK 26
-#define RE_PROP_SO 27
-#define RE_PROP_PI 28
-#define RE_PROP_PF 29
+#define RE_PROP_LU 10
+#define RE_PROP_SK 11
+#define RE_PROP_PC 12
+#define RE_PROP_LL 13
+#define RE_PROP_SO 14
+#define RE_PROP_LO 15
+#define RE_PROP_PI 16
+#define RE_PROP_CF 17
+#define RE_PROP_NO 18
+#define RE_PROP_PF 19
+#define RE_PROP_LT 20
+#define RE_PROP_LM 21
+#define RE_PROP_MN 22
+#define RE_PROP_ME 23
+#define RE_PROP_MC 24
+#define RE_PROP_NL 25
+#define RE_PROP_ZL 26
+#define RE_PROP_ZP 27
+#define RE_PROP_CS 28
+#define RE_PROP_CO 29
-#define RE_PROP_C_MASK 0x00078001
-#define RE_PROP_L_MASK 0x0000003E
-#define RE_PROP_M_MASK 0x000001C0
-#define RE_PROP_N_MASK 0x00000E00
-#define RE_PROP_P_MASK 0x30F80000
-#define RE_PROP_S_MASK 0x0F000000
-#define RE_PROP_Z_MASK 0x00007000
+#define RE_PROP_C_MASK 0x30020003
+#define RE_PROP_L_MASK 0x0030A400
+#define RE_PROP_M_MASK 0x01C00000
+#define RE_PROP_N_MASK 0x02040200
+#define RE_PROP_P_MASK 0x00091168
+#define RE_PROP_S_MASK 0x00004890
+#define RE_PROP_Z_MASK 0x0C000004
-#define RE_PROP_ALNUM 0x530001
-#define RE_PROP_ALPHA 0x080001
-#define RE_PROP_ANY 0x540001
-#define RE_PROP_ASCII 0x010001
-#define RE_PROP_BLANK 0x550001
-#define RE_PROP_CNTRL 0x00000F
-#define RE_PROP_DIGIT 0x000009
-#define RE_PROP_GRAPH 0x560001
-#define RE_PROP_LOWER 0x090001
-#define RE_PROP_PRINT 0x570001
-#define RE_PROP_SPACE 0x1A0001
-#define RE_PROP_UPPER 0x0A0001
-#define RE_PROP_WORD 0x580001
-#define RE_PROP_XDIGIT 0x590001
-#define RE_PROP_POSIX_ALNUM 0x5B0001
-#define RE_PROP_POSIX_DIGIT 0x5A0001
-#define RE_PROP_POSIX_PUNCT 0x5C0001
-#define RE_PROP_POSIX_XDIGIT 0x5D0001
+#define RE_PROP_ALNUM 0x010001
+#define RE_PROP_ALPHA 0x000001
+#define RE_PROP_ANY 0x020001
+#define RE_PROP_ASCII 0x080001
+#define RE_PROP_BLANK 0x070001
+#define RE_PROP_CNTRL 0x1E0001
+#define RE_PROP_DIGIT 0x1E0009
+#define RE_PROP_GRAPH 0x1F0001
+#define RE_PROP_LOWER 0x330001
+#define RE_PROP_PRINT 0x4B0001
+#define RE_PROP_SPACE 0x580001
+#define RE_PROP_UPPER 0x560001
+#define RE_PROP_WORD 0x590001
+#define RE_PROP_XDIGIT 0x5B0001
+#define RE_PROP_POSIX_ALNUM 0x460001
+#define RE_PROP_POSIX_DIGIT 0x470001
+#define RE_PROP_POSIX_PUNCT 0x480001
+#define RE_PROP_POSIX_XDIGIT 0x490001
#define RE_WBREAK_OTHER 0
-#define RE_WBREAK_DOUBLEQUOTE 1
-#define RE_WBREAK_SINGLEQUOTE 2
-#define RE_WBREAK_HEBREWLETTER 3
-#define RE_WBREAK_CR 4
-#define RE_WBREAK_LF 5
-#define RE_WBREAK_NEWLINE 6
-#define RE_WBREAK_EXTEND 7
-#define RE_WBREAK_REGIONALINDICATOR 8
-#define RE_WBREAK_FORMAT 9
-#define RE_WBREAK_KATAKANA 10
+#define RE_WBREAK_LF 1
+#define RE_WBREAK_NEWLINE 2
+#define RE_WBREAK_CR 3
+#define RE_WBREAK_WSEGSPACE 4
+#define RE_WBREAK_DOUBLEQUOTE 5
+#define RE_WBREAK_SINGLEQUOTE 6
+#define RE_WBREAK_MIDNUM 7
+#define RE_WBREAK_MIDNUMLET 8
+#define RE_WBREAK_NUMERIC 9
+#define RE_WBREAK_MIDLETTER 10
#define RE_WBREAK_ALETTER 11
-#define RE_WBREAK_MIDLETTER 12
-#define RE_WBREAK_MIDNUM 13
-#define RE_WBREAK_MIDNUMLET 14
-#define RE_WBREAK_NUMERIC 15
-#define RE_WBREAK_EXTENDNUMLET 16
-#define RE_WBREAK_ZWJ 17
-#define RE_WBREAK_WSEGSPACE 18
+#define RE_WBREAK_EXTENDNUMLET 12
+#define RE_WBREAK_FORMAT 13
+#define RE_WBREAK_EXTEND 14
+#define RE_WBREAK_HEBREWLETTER 15
+#define RE_WBREAK_ZWJ 16
+#define RE_WBREAK_KATAKANA 17
+#define RE_WBREAK_REGIONALINDICATOR 18
#define RE_WBREAK_EBASE 19
#define RE_WBREAK_EBASEGAZ 20
#define RE_WBREAK_EMODIFIER 21
#define RE_WBREAK_GLUEAFTERZWJ 22
#define RE_GBREAK_OTHER 0
-#define RE_GBREAK_PREPEND 1
-#define RE_GBREAK_CR 2
-#define RE_GBREAK_LF 3
-#define RE_GBREAK_CONTROL 4
-#define RE_GBREAK_EXTEND 5
-#define RE_GBREAK_REGIONALINDICATOR 6
-#define RE_GBREAK_SPACINGMARK 7
-#define RE_GBREAK_L 8
-#define RE_GBREAK_V 9
-#define RE_GBREAK_T 10
+#define RE_GBREAK_CONTROL 1
+#define RE_GBREAK_LF 2
+#define RE_GBREAK_CR 3
+#define RE_GBREAK_EXTEND 4
+#define RE_GBREAK_PREPEND 5
+#define RE_GBREAK_SPACINGMARK 6
+#define RE_GBREAK_L 7
+#define RE_GBREAK_V 8
+#define RE_GBREAK_T 9
+#define RE_GBREAK_ZWJ 10
#define RE_GBREAK_LV 11
#define RE_GBREAK_LVT 12
-#define RE_GBREAK_ZWJ 13
+#define RE_GBREAK_REGIONALINDICATOR 13
#define RE_GBREAK_EBASE 14
#define RE_GBREAK_EBASEGAZ 15
#define RE_GBREAK_EMODIFIER 16
#define RE_GBREAK_GLUEAFTERZWJ 17
#define RE_LBREAK_UNKNOWN 0
-#define RE_LBREAK_OPENPUNCTUATION 1
-#define RE_LBREAK_CLOSEPUNCTUATION 2
-#define RE_LBREAK_QUOTATION 3
-#define RE_LBREAK_GLUE 4
-#define RE_LBREAK_NONSTARTER 5
-#define RE_LBREAK_EXCLAMATION 6
-#define RE_LBREAK_BREAKSYMBOLS 7
-#define RE_LBREAK_INFIXNUMERIC 8
-#define RE_LBREAK_PREFIXNUMERIC 9
-#define RE_LBREAK_POSTFIXNUMERIC 10
-#define RE_LBREAK_NUMERIC 11
-#define RE_LBREAK_ALPHABETIC 12
-#define RE_LBREAK_IDEOGRAPHIC 13
-#define RE_LBREAK_INSEPARABLE 14
+#define RE_LBREAK_COMBININGMARK 1
+#define RE_LBREAK_BREAKAFTER 2
+#define RE_LBREAK_LINEFEED 3
+#define RE_LBREAK_MANDATORYBREAK 4
+#define RE_LBREAK_CARRIAGERETURN 5
+#define RE_LBREAK_SPACE 6
+#define RE_LBREAK_EXCLAMATION 7
+#define RE_LBREAK_QUOTATION 8
+#define RE_LBREAK_ALPHABETIC 9
+#define RE_LBREAK_PREFIXNUMERIC 10
+#define RE_LBREAK_POSTFIXNUMERIC 11
+#define RE_LBREAK_OPENPUNCTUATION 12
+#define RE_LBREAK_CLOSEPARENTHESIS 13
+#define RE_LBREAK_INFIXNUMERIC 14
#define RE_LBREAK_HYPHEN 15
-#define RE_LBREAK_COMBININGMARK 16
-#define RE_LBREAK_BREAKBEFORE 17
-#define RE_LBREAK_BREAKAFTER 18
-#define RE_LBREAK_SPACE 19
-#define RE_LBREAK_MANDATORYBREAK 20
-#define RE_LBREAK_CARRIAGERETURN 21
-#define RE_LBREAK_LINEFEED 22
-#define RE_LBREAK_CONTINGENTBREAK 23
+#define RE_LBREAK_BREAKSYMBOLS 16
+#define RE_LBREAK_NUMERIC 17
+#define RE_LBREAK_CLOSEPUNCTUATION 18
+#define RE_LBREAK_NEXTLINE 19
+#define RE_LBREAK_GLUE 20
+#define RE_LBREAK_AMBIGUOUS 21
+#define RE_LBREAK_BREAKBEFORE 22
+#define RE_LBREAK_HEBREWLETTER 23
#define RE_LBREAK_COMPLEXCONTEXT 24
-#define RE_LBREAK_AMBIGUOUS 25
-#define RE_LBREAK_BREAKBOTH 26
-#define RE_LBREAK_SURROGATE 27
-#define RE_LBREAK_ZWSPACE 28
-#define RE_LBREAK_NEXTLINE 29
-#define RE_LBREAK_WORDJOINER 30
-#define RE_LBREAK_JL 31
-#define RE_LBREAK_JV 32
-#define RE_LBREAK_JT 33
-#define RE_LBREAK_H2 34
-#define RE_LBREAK_H3 35
-#define RE_LBREAK_CLOSEPARENTHESIS 36
-#define RE_LBREAK_HEBREWLETTER 37
-#define RE_LBREAK_CONDITIONALJAPANESESTARTER 38
-#define RE_LBREAK_REGIONALINDICATOR 39
-#define RE_LBREAK_EBASE 40
-#define RE_LBREAK_EMODIFIER 41
-#define RE_LBREAK_ZWJ 42
+#define RE_LBREAK_JL 25
+#define RE_LBREAK_JV 26
+#define RE_LBREAK_JT 27
+#define RE_LBREAK_NONSTARTER 28
+#define RE_LBREAK_ZWSPACE 29
+#define RE_LBREAK_ZWJ 30
+#define RE_LBREAK_BREAKBOTH 31
+#define RE_LBREAK_INSEPARABLE 32
+#define RE_LBREAK_WORDJOINER 33
+#define RE_LBREAK_IDEOGRAPHIC 34
+#define RE_LBREAK_EBASE 35
+#define RE_LBREAK_CONDITIONALJAPANESESTARTER 36
+#define RE_LBREAK_H2 37
+#define RE_LBREAK_H3 38
+#define RE_LBREAK_SURROGATE 39
+#define RE_LBREAK_CONTINGENTBREAK 40
+#define RE_LBREAK_REGIONALINDICATOR 41
+#define RE_LBREAK_EMODIFIER 42
-extern char* re_strings[1425];
-extern RE_Property re_properties[168];
-extern RE_PropertyValue re_property_values[1568];
+extern char* re_strings[1447];
+extern RE_Property re_properties[173];
+extern RE_PropertyValue re_property_values[1589];
extern RE_UINT16 re_expand_on_folding[104];
extern RE_GetPropertyFunc re_get_property[94];
-RE_UINT32 re_get_general_category(RE_UINT32 ch);
-RE_UINT32 re_get_block(RE_UINT32 ch);
-RE_UINT32 re_get_script(RE_UINT32 ch);
-int re_get_script_extensions(RE_UINT32 ch, RE_UINT8* scripts);
-RE_UINT32 re_get_word_break(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 ch);
-RE_UINT32 re_get_sentence_break(RE_UINT32 ch);
-RE_UINT32 re_get_math(RE_UINT32 ch);
-RE_UINT32 re_get_alphabetic(RE_UINT32 ch);
-RE_UINT32 re_get_lowercase(RE_UINT32 ch);
-RE_UINT32 re_get_uppercase(RE_UINT32 ch);
-RE_UINT32 re_get_cased(RE_UINT32 ch);
-RE_UINT32 re_get_case_ignorable(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 ch);
-RE_UINT32 re_get_id_start(RE_UINT32 ch);
-RE_UINT32 re_get_id_continue(RE_UINT32 ch);
-RE_UINT32 re_get_xid_start(RE_UINT32 ch);
-RE_UINT32 re_get_xid_continue(RE_UINT32 ch);
-RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_extend(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_base(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_link(RE_UINT32 ch);
-RE_UINT32 re_get_white_space(RE_UINT32 ch);
-RE_UINT32 re_get_bidi_control(RE_UINT32 ch);
-RE_UINT32 re_get_join_control(RE_UINT32 ch);
-RE_UINT32 re_get_dash(RE_UINT32 ch);
-RE_UINT32 re_get_hyphen(RE_UINT32 ch);
-RE_UINT32 re_get_quotation_mark(RE_UINT32 ch);
-RE_UINT32 re_get_terminal_punctuation(RE_UINT32 ch);
-RE_UINT32 re_get_other_math(RE_UINT32 ch);
-RE_UINT32 re_get_hex_digit(RE_UINT32 ch);
-RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 ch);
-RE_UINT32 re_get_other_alphabetic(RE_UINT32 ch);
-RE_UINT32 re_get_ideographic(RE_UINT32 ch);
-RE_UINT32 re_get_diacritic(RE_UINT32 ch);
-RE_UINT32 re_get_extender(RE_UINT32 ch);
-RE_UINT32 re_get_other_lowercase(RE_UINT32 ch);
-RE_UINT32 re_get_other_uppercase(RE_UINT32 ch);
-RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 ch);
-RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 ch);
-RE_UINT32 re_get_ids_binary_operator(RE_UINT32 ch);
-RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 ch);
-RE_UINT32 re_get_radical(RE_UINT32 ch);
-RE_UINT32 re_get_unified_ideograph(RE_UINT32 ch);
-RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 ch);
-RE_UINT32 re_get_deprecated(RE_UINT32 ch);
-RE_UINT32 re_get_soft_dotted(RE_UINT32 ch);
-RE_UINT32 re_get_logical_order_exception(RE_UINT32 ch);
-RE_UINT32 re_get_other_id_start(RE_UINT32 ch);
-RE_UINT32 re_get_other_id_continue(RE_UINT32 ch);
-RE_UINT32 re_get_sentence_terminal(RE_UINT32 ch);
-RE_UINT32 re_get_variation_selector(RE_UINT32 ch);
-RE_UINT32 re_get_pattern_white_space(RE_UINT32 ch);
-RE_UINT32 re_get_pattern_syntax(RE_UINT32 ch);
-RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 ch);
-RE_UINT32 re_get_regional_indicator(RE_UINT32 ch);
-RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 ch);
-RE_UINT32 re_get_bidi_class(RE_UINT32 ch);
-RE_UINT32 re_get_canonical_combining_class(RE_UINT32 ch);
-RE_UINT32 re_get_decomposition_type(RE_UINT32 ch);
-RE_UINT32 re_get_east_asian_width(RE_UINT32 ch);
-RE_UINT32 re_get_joining_group(RE_UINT32 ch);
-RE_UINT32 re_get_joining_type(RE_UINT32 ch);
-RE_UINT32 re_get_line_break(RE_UINT32 ch);
-RE_UINT32 re_get_numeric_type(RE_UINT32 ch);
-RE_UINT32 re_get_numeric_value(RE_UINT32 ch);
-RE_UINT32 re_get_bidi_mirrored(RE_UINT32 ch);
-RE_UINT32 re_get_indic_positional_category(RE_UINT32 ch);
-RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 ch);
-RE_UINT32 re_get_emoji(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_presentation(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_modifier(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_component(RE_UINT32 ch);
-RE_UINT32 re_get_extended_pictographic(RE_UINT32 ch);
-RE_UINT32 re_get_nfd_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_nfc_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_alphanumeric(RE_UINT32 ch);
-RE_UINT32 re_get_any(RE_UINT32 ch);
-RE_UINT32 re_get_blank(RE_UINT32 ch);
-RE_UINT32 re_get_graph(RE_UINT32 ch);
-RE_UINT32 re_get_print(RE_UINT32 ch);
-RE_UINT32 re_get_word(RE_UINT32 ch);
-RE_UINT32 re_get_xdigit(RE_UINT32 ch);
-RE_UINT32 re_get_posix_digit(RE_UINT32 ch);
-RE_UINT32 re_get_posix_alnum(RE_UINT32 ch);
-RE_UINT32 re_get_posix_punct(RE_UINT32 ch);
-RE_UINT32 re_get_posix_xdigit(RE_UINT32 ch);
-int re_get_all_cases(RE_UINT32 ch, RE_UINT32* codepoints);
-RE_UINT32 re_get_simple_case_folding(RE_UINT32 ch);
-int re_get_full_case_folding(RE_UINT32 ch, RE_UINT32* codepoints);
+RE_UINT32 re_get_alphabetic(RE_UINT32 codepoint);
+RE_UINT32 re_get_alphanumeric(RE_UINT32 codepoint);
+RE_UINT32 re_get_any(RE_UINT32 codepoint);
+RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 codepoint);
+RE_UINT32 re_get_bidi_class(RE_UINT32 codepoint);
+RE_UINT32 re_get_bidi_control(RE_UINT32 codepoint);
+RE_UINT32 re_get_bidi_mirrored(RE_UINT32 codepoint);
+RE_UINT32 re_get_blank(RE_UINT32 codepoint);
+RE_UINT32 re_get_block(RE_UINT32 codepoint);
+RE_UINT32 re_get_canonical_combining_class(RE_UINT32 codepoint);
+RE_UINT32 re_get_cased(RE_UINT32 codepoint);
+RE_UINT32 re_get_case_ignorable(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 codepoint);
+RE_UINT32 re_get_dash(RE_UINT32 codepoint);
+RE_UINT32 re_get_decomposition_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 codepoint);
+RE_UINT32 re_get_deprecated(RE_UINT32 codepoint);
+RE_UINT32 re_get_diacritic(RE_UINT32 codepoint);
+RE_UINT32 re_get_east_asian_width(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_component(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_modifier(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_presentation(RE_UINT32 codepoint);
+RE_UINT32 re_get_extended_pictographic(RE_UINT32 codepoint);
+RE_UINT32 re_get_extender(RE_UINT32 codepoint);
+RE_UINT32 re_get_general_category(RE_UINT32 codepoint);
+RE_UINT32 re_get_graph(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_base(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_extend(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_link(RE_UINT32 codepoint);
+RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_hex_digit(RE_UINT32 codepoint);
+RE_UINT32 re_get_hyphen(RE_UINT32 codepoint);
+RE_UINT32 re_get_id_continue(RE_UINT32 codepoint);
+RE_UINT32 re_get_ideographic(RE_UINT32 codepoint);
+RE_UINT32 re_get_ids_binary_operator(RE_UINT32 codepoint);
+RE_UINT32 re_get_id_start(RE_UINT32 codepoint);
+RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 codepoint);
+RE_UINT32 re_get_indic_positional_category(RE_UINT32 codepoint);
+RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 codepoint);
+RE_UINT32 re_get_join_control(RE_UINT32 codepoint);
+RE_UINT32 re_get_joining_group(RE_UINT32 codepoint);
+RE_UINT32 re_get_joining_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_line_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_logical_order_exception(RE_UINT32 codepoint);
+RE_UINT32 re_get_lowercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_math(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfc_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfd_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 codepoint);
+RE_UINT32 re_get_numeric_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_numeric_value(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_alphabetic(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_id_continue(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_id_start(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_lowercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_math(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_uppercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_pattern_syntax(RE_UINT32 codepoint);
+RE_UINT32 re_get_pattern_white_space(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_alnum(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_digit(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_punct(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_xdigit(RE_UINT32 codepoint);
+RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 codepoint);
+RE_UINT32 re_get_print(RE_UINT32 codepoint);
+RE_UINT32 re_get_quotation_mark(RE_UINT32 codepoint);
+RE_UINT32 re_get_radical(RE_UINT32 codepoint);
+RE_UINT32 re_get_regional_indicator(RE_UINT32 codepoint);
+RE_UINT32 re_get_script(RE_UINT32 codepoint);
+int re_get_script_extensions(RE_UINT32 codepoint, RE_UINT8* scripts);
+RE_UINT32 re_get_sentence_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_sentence_terminal(RE_UINT32 codepoint);
+RE_UINT32 re_get_soft_dotted(RE_UINT32 codepoint);
+RE_UINT32 re_get_terminal_punctuation(RE_UINT32 codepoint);
+RE_UINT32 re_get_unified_ideograph(RE_UINT32 codepoint);
+RE_UINT32 re_get_uppercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_variation_selector(RE_UINT32 codepoint);
+RE_UINT32 re_get_white_space(RE_UINT32 codepoint);
+RE_UINT32 re_get_word(RE_UINT32 codepoint);
+RE_UINT32 re_get_word_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_xdigit(RE_UINT32 codepoint);
+RE_UINT32 re_get_xid_continue(RE_UINT32 codepoint);
+RE_UINT32 re_get_xid_start(RE_UINT32 codepoint);
+int re_get_all_cases(RE_UINT32 codepoint, RE_UINT32* cases);
+RE_UINT32 re_get_simple_case_folding(RE_UINT32 codepoint);
+int re_get_full_case_folding(RE_UINT32 codepoint, RE_UINT32* folded);
diff --git a/regex_2/regex/regex.py b/regex_2/regex.py
similarity index 92%
rename from regex_2/regex/regex.py
rename to regex_2/regex.py
index 67aa73abb7668eb557a0208f78fd4f7d56ddad92..81ef0acc96c4a555b170f10f30e616c464e0612d 100644
--- a/regex_2/regex/regex.py
+++ b/regex_2/regex.py
@@ -136,6 +136,7 @@ second character.
\g<name> Matches the text matched by the group named name.
\G Matches the empty string, but only at the position where
the search started.
+ \h Matches horizontal whitespace.
\K Keeps only what follows for the entire match.
\L<name> Named list. The list is provided as a keyword argument.
\m Matches the empty string, but only at the start of a word.
@@ -239,54 +240,54 @@ __all__ = ["compile", "DEFAULT_VERSION", "escape", "findall", "finditer",
"T", "TEMPLATE", "U", "UNICODE", "V0", "VERSION0", "V1", "VERSION1", "X",
"VERBOSE", "W", "WORD", "error", "Regex", "__version__", "__doc__"]
-__version__ = "2.5.64"
+__version__ = "2.5.83"
# --------------------------------------------------------------------
# Public interface.
def match(pattern, string, flags=0, pos=None, endpos=None, partial=False,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Try to apply the pattern at the start of the string, returning a match
object, or None if no match was found."""
- return _compile(pattern, flags, kwargs).match(string, pos, endpos,
- concurrent, partial)
+ return _compile(pattern, flags, ignore_unused, kwargs).match(string, pos,
+ endpos, concurrent, partial)
def fullmatch(pattern, string, flags=0, pos=None, endpos=None, partial=False,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Try to apply the pattern against all of the string, returning a match
object, or None if no match was found."""
- return _compile(pattern, flags, kwargs).fullmatch(string, pos, endpos,
- concurrent, partial)
+ return _compile(pattern, flags, ignore_unused, kwargs).fullmatch(string,
+ pos, endpos, concurrent, partial)
def search(pattern, string, flags=0, pos=None, endpos=None, partial=False,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Search through string looking for a match to the pattern, returning a
match object, or None if no match was found."""
- return _compile(pattern, flags, kwargs).search(string, pos, endpos,
- concurrent, partial)
+ return _compile(pattern, flags, ignore_unused, kwargs).search(string, pos,
+ endpos, concurrent, partial)
def sub(pattern, repl, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Return the string obtained by replacing the leftmost (or rightmost with a
reverse pattern) non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable; if a string,
backslash escapes in it are processed; if a callable, it's passed the match
object and must return a replacement string to be used."""
- return _compile(pattern, flags, kwargs).sub(repl, string, count, pos,
- endpos, concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).sub(repl, string,
+ count, pos, endpos, concurrent)
def subf(pattern, format, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Return the string obtained by replacing the leftmost (or rightmost with a
reverse pattern) non-overlapping occurrences of the pattern in string by the
replacement format. format can be either a string or a callable; if a string,
it's treated as a format string; if a callable, it's passed the match object
and must return a replacement string to be used."""
- return _compile(pattern, flags, kwargs).subf(format, string, count, pos,
- endpos, concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).subf(format, string,
+ count, pos, endpos, concurrent)
def subn(pattern, repl, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Return a 2-tuple containing (new_string, number). new_string is the string
obtained by replacing the leftmost (or rightmost with a reverse pattern)
non-overlapping occurrences of the pattern in the source string by the
@@ -294,11 +295,11 @@ def subn(pattern, repl, string, count=0, flags=0, pos=None, endpos=None,
can be either a string or a callable; if a string, backslash escapes in it
are processed; if a callable, it's passed the match object and must return a
replacement string to be used."""
- return _compile(pattern, flags, kwargs).subn(repl, string, count, pos,
- endpos, concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).subn(repl, string,
+ count, pos, endpos, concurrent)
def subfn(pattern, format, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Return a 2-tuple containing (new_string, number). new_string is the string
obtained by replacing the leftmost (or rightmost with a reverse pattern)
non-overlapping occurrences of the pattern in the source string by the
@@ -306,45 +307,46 @@ def subfn(pattern, format, string, count=0, flags=0, pos=None, endpos=None,
can be either a string or a callable; if a string, it's treated as a format
string; if a callable, it's passed the match object and must return a
replacement string to be used."""
- return _compile(pattern, flags, kwargs).subfn(format, string, count, pos,
- endpos, concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).subfn(format, string,
+ count, pos, endpos, concurrent)
def split(pattern, string, maxsplit=0, flags=0, concurrent=None,
- **kwargs):
+ ignore_unused=False, **kwargs):
"""Split the source string by the occurrences of the pattern, returning a
list containing the resulting substrings. If capturing parentheses are used
in pattern, then the text of all groups in the pattern are also returned as
part of the resulting list. If maxsplit is nonzero, at most maxsplit splits
occur, and the remainder of the string is returned as the final element of
the list."""
- return _compile(pattern, flags, kwargs).split(string, maxsplit, concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).split(string,
+ maxsplit, concurrent)
def splititer(pattern, string, maxsplit=0, flags=0, concurrent=None,
- **kwargs):
+ ignore_unused=False, **kwargs):
"Return an iterator yielding the parts of a split string."
- return _compile(pattern, flags, kwargs).splititer(string, maxsplit,
- concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).splititer(string,
+ maxsplit, concurrent)
def findall(pattern, string, flags=0, pos=None, endpos=None, overlapped=False,
- concurrent=None, **kwargs):
+ concurrent=None, ignore_unused=False, **kwargs):
"""Return a list of all matches in the string. The matches may be overlapped
if overlapped is True. If one or more groups are present in the pattern,
return a list of groups; this will be a list of tuples if the pattern has
more than one group. Empty matches are included in the result."""
- return _compile(pattern, flags, kwargs).findall(string, pos, endpos,
- overlapped, concurrent)
+ return _compile(pattern, flags, ignore_unused, kwargs).findall(string, pos,
+ endpos, overlapped, concurrent)
def finditer(pattern, string, flags=0, pos=None, endpos=None, overlapped=False,
- partial=False, concurrent=None, **kwargs):
+ partial=False, concurrent=None, ignore_unused=False, **kwargs):
"""Return an iterator over all matches in the string. The matches may be
overlapped if overlapped is True. For each match, the iterator returns a
match object. Empty matches are included in the result."""
- return _compile(pattern, flags, kwargs).finditer(string, pos, endpos,
- overlapped, concurrent, partial)
+ return _compile(pattern, flags, ignore_unused, kwargs).finditer(string, pos,
+ endpos, overlapped, concurrent, partial)
-def compile(pattern, flags=0, **kwargs):
+def compile(pattern, flags=0, ignore_unused=False, **kwargs):
"Compile a regular expression pattern, returning a pattern object."
- return _compile(pattern, flags, kwargs)
+ return _compile(pattern, flags, ignore_unused, kwargs)
def purge():
"Clear the regular expression cache"
@@ -353,7 +355,7 @@ def purge():
def template(pattern, flags=0):
"Compile a template pattern, returning a pattern object."
- return _compile(pattern, flags | TEMPLATE)
+ return _compile(pattern, flags | TEMPLATE, False, {})
def escape(pattern, special_only=True, literal_spaces=False):
"""Escape a string for use as a literal in a pattern. If special_only is
@@ -420,7 +422,7 @@ _locale_sensitive = {}
_MAXCACHE = 500
_MAXREPCACHE = 500
-def _compile(pattern, flags=0, kwargs={}):
+def _compile(pattern, flags, ignore_unused, kwargs):
"Compiles a regular expression to a PatternObject."
global DEFAULT_VERSION
@@ -563,6 +565,12 @@ def _compile(pattern, flags=0, kwargs={}):
named_list_indexes[index] = items
args_needed.add((name, values))
+ # Any unused keyword arguments, possibly resulting from a typo?
+ unused_kwargs = set(kwargs) - set(named_lists)
+ if unused_kwargs and not ignore_unused:
+ any_one = next(iter(unused_kwargs))
+ raise ValueError('unused keyword argument %r' % any_one)
+
# Check the features of the groups.
_check_group_features(info, parsed)
@@ -683,8 +691,8 @@ def _compile_replacement_helper(pattern, template):
return compiled
# We define Pattern here after all the support objects have been defined.
-Pattern = type(_compile('', 0, {}))
-Match = type(_compile('', 0).match(''))
+Pattern = type(_compile('', 0, False, {}))
+Match = type(_compile('', 0, False, {}).match(''))
# We'll define an alias for the 'compile' function so that the repr of a
# pattern object is eval-able.
diff --git a/regex_2/regex/test/__init__.py b/regex_2/regex/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/regex_2/regex/test/test_regex.py b/regex_2/test_regex.py
similarity index 97%
rename from regex_2/regex/test/test_regex.py
rename to regex_2/test_regex.py
index 8a4aed603b49220e32701e13926a941da8e19853..c918ba2b8a2c72c88ced1824f761bb211a949360 100644
--- a/regex_2/regex/test/test_regex.py
+++ b/regex_2/test_regex.py
@@ -1,12 +1,12 @@
from __future__ import with_statement
-import regex
-import string
+from test.test_support import run_unittest
from weakref import proxy
-import unittest
import copy
import pickle
-from test.test_support import run_unittest
import re
+import regex
+import string
+import unittest
# _AssertRaisesContext is defined here because the class doesn't exist before
# Python 2.7.
@@ -1773,8 +1773,8 @@ class RegexTests(unittest.TestCase):
repr('\a\b\f\n\r\t\v')),
(r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', '0',
repr('\a\b\f\n\r\t\v')),
- (r'\c\e\g\h\i\j\k\o\p\q\y\z', 'ceghijkopqyz', '0',
- repr('ceghijkopqyz')),
+ (r'\c\e\g\i\j\k\o\p\q\y\z', 'cegijkopqyz', '0',
+ repr('cegijkopqyz')),
(r'\xff', '\377', '0', repr(chr(255))),
# New \x semantics.
@@ -4018,103 +4018,142 @@ thing
[u'\U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466'])
# Hg issue 320: Abnormal performance
- self.assertEquals(bool(regex.search(r'(?=a)a', 'a')), True)
- self.assertEquals(bool(regex.search(r'(?!b)a', 'a')), True)
+ self.assertEqual(bool(regex.search(r'(?=a)a', 'a')), True)
+ self.assertEqual(bool(regex.search(r'(?!b)a', 'a')), True)
# Hg issue 327: .fullmatch() causes MemoryError
- self.assertEquals(regex.fullmatch(r'((\d)*?)*?', '123').span(), (0, 3))
+ self.assertEqual(regex.fullmatch(r'((\d)*?)*?', '123').span(), (0, 3))
# Hg issue 329: Wrong group matches when question mark quantifier is used within a look behind
- self.assertEquals(regex.search(r'''(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)''',
+ self.assertEqual(regex.search(r'''(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)''',
'x right').capturesdict(), {'mydef': ['right'], 'wrong': [], 'right':
['right']})
+ # Hg issue 353: fuzzy changes negative indexes
+ self.assertEqual(regex.search(r'(?be)(AGTGTTCCCCGCGCCAGCGGGGATAAACCG){s<=5,i<=5,d<=5,s+i+d<=10}',
+ 'TTCCCCGCGCCAGCGGGGATAAACCG').fuzzy_changes, ([], [], [0, 1, 3, 5]))
+
+ # Git issue 364: Contradictory values in fuzzy_counts and fuzzy_changes
+ self.assertEqual(regex.match(r'(?:bc){e}', 'c').fuzzy_counts, (1, 0,
+ 1))
+ self.assertEqual(regex.match(r'(?:bc){e}', 'c').fuzzy_changes, ([0],
+ [], [1]))
+ self.assertEqual(regex.match(r'(?e)(?:bc){e}', 'c').fuzzy_counts, (0,
+ 0, 1))
+ self.assertEqual(regex.match(r'(?e)(?:bc){e}', 'c').fuzzy_changes,
+ ([], [], [0]))
+ self.assertEqual(regex.match(r'(?b)(?:bc){e}', 'c').fuzzy_counts, (0,
+ 0, 1))
+ self.assertEqual(regex.match(r'(?b)(?:bc){e}', 'c').fuzzy_changes,
+ ([], [], [0]))
+
+ # Git issue 370: Confusions about Fuzzy matching behavior
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){e}',
+ '$ 10,112.111.12').fuzzy_counts, (6, 0, 5))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=1}',
+ '$ 10,112.111.12').fuzzy_counts, (1, 0, 0))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=1,i<=1,d<=1}',
+ '$ 10,112.111.12').fuzzy_counts, (1, 0, 0))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=3}',
+ '$ 10,1a2.111.12').fuzzy_counts, (2, 0, 0))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=2}',
+ '$ 10,1a2.111.12').fuzzy_counts, (2, 0, 0))
+
+ self.assertEqual(regex.fullmatch(r'(?e)(?:0?,0(?:,0)?){s<=1,d<=1}',
+ ',0;0').fuzzy_counts, (1, 0, 0))
+ self.assertEqual(regex.fullmatch(r'(?e)(?:0??,0(?:,0)?){s<=1,d<=1}',
+ ',0;0').fuzzy_counts, (1, 0, 0))
+
+ # Git issue 371: Specifying character set when fuzzy-matching allows characters not in the set
+ self.assertEqual(regex.search(r"\b(?e)(?:\d{6,20}){i<=5:[\-\\\/]}\b",
+ "cat dog starting at 00:01132.000. hello world"), None)
+
def test_fuzzy_ext(self):
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', 'e')),
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', 'e')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'e')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'e')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', '-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', '-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', '-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', '-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'ae')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'ae')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
'ae')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'a-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'a-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
'a-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'ae')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'ae')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
'ae')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'a-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'a-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
'a-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'ae')),
+ self.assertEqual(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'ae')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
'ea')), True)
- self.assertEquals(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'a-')),
+ self.assertEqual(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'a-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
'-a')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u'ts')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u'st')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u'st')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u'ts')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u'-s')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u's-')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u's-')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
u'-s')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
u'ssst')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
u'ssts')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
u'stss')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
u'tsss')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
u'ss-s')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
u'sss-')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
u'-s')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
u's-')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
u'\N{LATIN SMALL LETTER SHARP S}ts')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
u'\N{LATIN SMALL LETTER SHARP S}st')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(ss)',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(ss)',
u'st\N{LATIN SMALL LETTER SHARP S}')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(ss)',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)\1{e<=1:[a-z]}(ss)',
u'ts\N{LATIN SMALL LETTER SHARP S}')), True)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
u'\N{LATIN SMALL LETTER SHARP S}-s')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?fiu)(ss)\1{e<=1:[a-z]}',
u'\N{LATIN SMALL LETTER SHARP S}s-')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(ss)\1{e<=1:[a-z]}',
u's-\N{LATIN SMALL LETTER SHARP S}')), False)
- self.assertEquals(bool(regex.fullmatch(ur'(?firu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(ur'(?firu)(ss)\1{e<=1:[a-z]}',
u'-s\N{LATIN SMALL LETTER SHARP S}')), False)
def test_subscripted_captures(self):
diff --git a/regex_3/regex/__init__.py b/regex_3/__init__.py
similarity index 100%
rename from regex_3/regex/__init__.py
rename to regex_3/__init__.py
diff --git a/regex_3/_regex.c b/regex_3/_regex.c
index c7204240d19922995db903b3441b39d97f448913..58888da3eace1ef65203ff6ae3cec3f1bb4f6bb5 100644
--- a/regex_3/_regex.c
+++ b/regex_3/_regex.c
@@ -60,11 +60,6 @@
#endif
#endif
-#if PY_VERSION_HEX < 0x03030000
-typedef unsigned char Py_UCS1;
-typedef unsigned short Py_UCS2;
-
-#endif
typedef RE_UINT32 RE_CODE;
typedef unsigned char BYTE;
@@ -516,6 +511,7 @@ typedef struct RE_State {
Py_ssize_t timeout; /* The timeout in clock ticks. */
clock_t start_time; /* The clock time when matching started. */
int partial_side; /* The side that could truncate in a partial match. */
+ /* Various flags. */
RE_UINT16 iterations; /* The number of iterations the matching engine has performed since checking for KeyboardInterrupt. */
BOOL is_unicode; /* Whether the string to be matched is Unicode. */
BOOL should_release; /* Whether the buffer should be released. */
@@ -1502,11 +1498,7 @@ static BOOL unicode_at_word_end(RE_State* state, Py_ssize_t text_pos) {
* Only a limited number are treated as vowels.
*/
Py_LOCAL_INLINE(BOOL) is_unicode_vowel(Py_UCS4 ch) {
-#if PY_VERSION_HEX >= 0x03030000
switch (Py_UNICODE_TOLOWER(ch)) {
-#else
- switch (Py_UNICODE_TOLOWER((Py_UNICODE)ch)) {
-#endif
case 'a': case 0xE0: case 0xE1: case 0xE2:
case 'e': case 0xE8: case 0xE9: case 0xEA:
case 'i': case 0xEC: case 0xED: case 0xEE:
@@ -1854,7 +1846,7 @@ static BOOL unicode_at_grapheme_boundary(RE_State* state, Py_ssize_t text_pos)
return FALSE;
/* GB8 */
- if ((left_prop == RE_GBREAK_LVT || left_prop == RE_GBREAK_T) && left_prop
+ if ((left_prop == RE_GBREAK_LVT || left_prop == RE_GBREAK_T) && right_prop
== RE_GBREAK_T)
return FALSE;
@@ -1895,14 +1887,16 @@ static BOOL unicode_at_grapheme_boundary(RE_State* state, Py_ssize_t text_pos)
* number of RI characters before the break point.
*/
/* GB12 and GB13 */
- pos = left_pos;
+ if (right_prop == RE_GBREAK_REGIONALINDICATOR) {
+ pos = left_pos;
- while (pos >= 0 && re_get_grapheme_cluster_break(char_at(state->text, pos))
- == RE_WBREAK_REGIONALINDICATOR)
- --pos;
+ while (pos >= 0 && re_get_grapheme_cluster_break(char_at(state->text,
+ pos)) == RE_GBREAK_REGIONALINDICATOR)
+ --pos;
- if ((left_pos - pos) % 2 == 1)
- return FALSE;
+ if ((left_pos - pos) % 2 == 1)
+ return FALSE;
+ }
/* Otherwise, break everywhere. */
/* GB999 */
@@ -9373,7 +9367,8 @@ Py_LOCAL_INLINE(BOOL) is_repeat_guarded(RE_State* state, size_t index,
RE_GuardList* guard_list;
/* Is a guard active here? */
- if (!(state->pattern->repeat_info[index].status & guard_type))
+ if (!(state->pattern->repeat_info[index].status & guard_type) ||
+ state->is_fuzzy)
return FALSE;
/* Which guard list? */
@@ -9468,795 +9463,67 @@ Py_LOCAL_INLINE(PyObject*) build_unicode_value(void* buffer, Py_ssize_t start,
return result;
#else
-#if PY_VERSION_HEX >= 0x03030000
Py_ssize_t len;
int kind;
buffer = (void*)((RE_UINT8*)buffer + start * buffer_charsize);
len = end - start;
- switch (buffer_charsize) {
- case 1:
- kind = PyUnicode_1BYTE_KIND;
- break;
- case 2:
- kind = PyUnicode_2BYTE_KIND;
- break;
- case 4:
- kind = PyUnicode_4BYTE_KIND;
- break;
- default:
- kind = PyUnicode_1BYTE_KIND;
- break;
- }
-
- return PyUnicode_FromKindAndData(kind, buffer, len);
-#else
- Py_ssize_t len;
-
- buffer = (void*)((RE_UINT8*)buffer + start * buffer_charsize);
- len = end - start;
-
- return PyUnicode_FromUnicode(buffer, len);
-#endif
-#endif
-}
-
-/* Builds a bytestring. Returns NULL if any member is too wide. */
-Py_LOCAL_INLINE(PyObject*) build_bytes_value(void* buffer, Py_ssize_t start,
- Py_ssize_t end, Py_ssize_t buffer_charsize) {
- Py_ssize_t len;
- Py_UCS1* byte_buffer;
- Py_ssize_t i;
- PyObject* result;
-
- buffer = (void*)((RE_UINT8*)buffer + start * buffer_charsize);
- len = end - start;
-
- if (buffer_charsize == 1)
- return Py_BuildValue("y#", buffer, len);
-
- byte_buffer = re_alloc((size_t)len);
- if (!byte_buffer)
- return NULL;
-
- for (i = 0; i < len; i++) {
- Py_UCS2 c = ((Py_UCS2*)buffer)[i];
- if (c > 0xFF)
- goto too_wide;
-
- byte_buffer[i] = (Py_UCS1)c;
- }
-
- result = Py_BuildValue("y#", byte_buffer, len);
-
- re_dealloc(byte_buffer);
-
- return result;
-
-too_wide:
- re_dealloc(byte_buffer);
-
- return NULL;
-}
-
-/* Looks for a string in a string set. */
-Py_LOCAL_INLINE(int) string_set_contains(RE_State* state, PyObject* string_set,
- Py_ssize_t first, Py_ssize_t last) {
- PyObject* string;
- int status;
-
- if (state->is_unicode)
- string = build_unicode_value(state->text, first, last,
- state->charsize);
- else
- string = build_bytes_value(state->text, first, last, state->charsize);
- if (!string)
- return RE_ERROR_INTERNAL;
-
- status = PySet_Contains(string_set, string);
- Py_DECREF(string);
-
- return status;
-}
-
-/* Looks for a string in a string set, ignoring case. */
-Py_LOCAL_INLINE(int) string_set_contains_ign(RE_State* state, PyObject*
- string_set, void* buffer, Py_ssize_t first, Py_ssize_t last, Py_ssize_t
- index, Py_ssize_t buffer_charsize) {
- Py_UCS4 (*char_at)(void* text, Py_ssize_t pos);
- void (*set_char_at)(void* text, Py_ssize_t pos, Py_UCS4 ch);
- RE_EncodingTable* encoding;
- RE_LocaleInfo* locale_info;
- BOOL (*possible_turkic)(RE_LocaleInfo* locale_info, Py_UCS4 ch);
- Py_UCS4 codepoints[4];
-
- switch (buffer_charsize) {
- case 1:
- char_at = bytes1_char_at;
- set_char_at = bytes1_set_char_at;
- break;
- case 2:
- char_at = bytes2_char_at;
- set_char_at = bytes2_set_char_at;
- break;
- case 4:
- char_at = bytes4_char_at;
- set_char_at = bytes4_set_char_at;
- break;
- default:
- char_at = bytes1_char_at;
- set_char_at = bytes1_set_char_at;
- break;
- }
-
- encoding = state->encoding;
- locale_info = state->locale_info;
- possible_turkic = encoding->possible_turkic;
-
- /* Look for a possible Turkic 'I'. */
- while (index < last && !possible_turkic(locale_info, char_at(buffer,
- index)))
- ++index;
-
- if (index < last) {
- /* Possible Turkic 'I'. */
- int count;
- int i;
-
- /* Try all the alternatives to the 'I'. */
- count = encoding->all_turkic_i(locale_info, char_at(buffer, index),
- codepoints);
-
- for (i = 0; i < count; i++) {
- int status;
-
- set_char_at(buffer, index, codepoints[i]);
-
- /* Recurse for the remainder of the string. */
- status = string_set_contains_ign(state, string_set, buffer, first,
- last, index + 1, buffer_charsize);
- if (status != 0)
- return status;
- }
-
- return 0;
- } else {
- /* No Turkic 'I'. */
- PyObject* string;
- int status;
-
- if (state->is_unicode)
- string = build_unicode_value(buffer, first, last, buffer_charsize);
- else
- string = build_bytes_value(buffer, first, last, buffer_charsize);
- if (!string)
- return RE_ERROR_MEMORY;
-
- status = PySet_Contains(string_set, string);
- Py_DECREF(string);
-
- return status;
- }
-}
-
-/* Creates a partial string set for truncation at the left or right side. */
-Py_LOCAL_INLINE(int) make_partial_string_set(RE_State* state, RE_Node* node) {
- PatternObject* pattern;
- int partial_side;
- PyObject* string_set;
- PyObject* partial_set;
- PyObject* iter = NULL;
- PyObject* item = NULL;
- PyObject* slice = NULL;
-
- pattern = state->pattern;
- partial_side = state->partial_side;
- if (partial_side != RE_PARTIAL_LEFT && partial_side != RE_PARTIAL_RIGHT)
- return RE_ERROR_INTERNAL;
-
- /* Fetch the full string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(pattern->named_list_indexes, node->values[0]);
- if (!string_set)
- return RE_ERROR_INTERNAL;
-
- /* Gets the list of partial string sets. */
- if (!pattern->partial_named_lists[partial_side]) {
- size_t size;
-
- size = pattern->named_lists_count * sizeof(PyObject*);
- pattern->partial_named_lists[partial_side] = re_alloc(size);
- if (!pattern->partial_named_lists[partial_side])
- return RE_ERROR_INTERNAL;
-
- memset(pattern->partial_named_lists[partial_side], 0, size);
- }
-
- /* Get the partial string set. */
- partial_set = pattern->partial_named_lists[partial_side][node->values[0]];
- if (partial_set)
- return 1;
-
- /* Build the partial string set. */
- partial_set = PySet_New(NULL);
- if (!partial_set)
- return RE_ERROR_INTERNAL;
-
- iter = PyObject_GetIter(string_set);
- if (!iter)
- goto error;
-
- item = PyIter_Next(iter);
-
- while (item) {
- Py_ssize_t len;
- Py_ssize_t first;
- Py_ssize_t last;
-
- len = PySequence_Length(item);
- if (len == -1)
- goto error;
-
- first = 0;
- last = len;
-
- while (last - first > 1) {
- int status;
-
- /* Shorten the entry. */
- if (partial_side == RE_PARTIAL_LEFT)
- ++first;
- else
- --last;
-
- slice = PySequence_GetSlice(item, first, last);
- if (!slice)
- goto error;
-
- status = PySet_Add(partial_set, slice);
- Py_DECREF(slice);
- if (status < 0)
- goto error;
- }
-
- Py_DECREF(item);
- item = PyIter_Next(iter);
- }
-
- if (PyErr_Occurred())
- goto error;
-
- Py_DECREF(iter);
-
- pattern->partial_named_lists[partial_side][node->values[0]] = partial_set;
-
- return 1;
-
-error:
- Py_XDECREF(item);
- Py_XDECREF(iter);
- Py_DECREF(partial_set);
-
- return RE_ERROR_INTERNAL;
-}
-
-/* Tries to match a string at the current position with a member of a string
- * set, forwards or backwards.
- */
-Py_LOCAL_INLINE(int) string_set_match_fwdrev(RE_State* state, RE_Node* node,
- BOOL reverse) {
- Py_ssize_t min_len;
- Py_ssize_t max_len;
- Py_ssize_t text_available;
- Py_ssize_t slice_available;
- int partial_side;
- Py_ssize_t len;
- Py_ssize_t first;
- Py_ssize_t last;
- int status;
- PyObject* string_set;
-
- min_len = (Py_ssize_t)node->values[1];
- max_len = (Py_ssize_t)node->values[2];
-
- acquire_GIL(state);
-
- if (reverse) {
- text_available = state->text_pos;
- slice_available = state->text_pos - state->slice_start;
- partial_side = RE_PARTIAL_LEFT;
- } else {
- text_available = state->text_length - state->text_pos;
- slice_available = state->slice_end - state->text_pos;
- partial_side = RE_PARTIAL_RIGHT;
- }
-
- /* Get as many characters as we need for the longest possible match. */
- len = min_ssize_t(max_len, slice_available);
-
- if (reverse) {
- first = state->text_pos - len;
- last = state->text_pos;
- } else {
- first = state->text_pos;
- last = state->text_pos + len;
- }
-
- /* If we didn't get all of the characters we need, is a partial match
- * allowed?
- */
- if (len < max_len && len == text_available && state->partial_side ==
- partial_side) {
- if (len == 0) {
- /* An empty string is always a possible partial match. */
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
-
- /* Make a set of the possible partial matches. */
- status = make_partial_string_set(state, node);
- if (status < 0)
- goto finished;
-
- /* Fetch the partial string set. */
- string_set =
- state->pattern->partial_named_lists[partial_side][node->values[0]];
-
- /* Is the text we have a partial match? */
- status = string_set_contains(state, string_set, first, last);
- if (status < 0)
- goto finished;
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
- }
-
- /* Fetch the string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(state->pattern->named_list_indexes,
- node->values[0]);
- if (!string_set) {
- status = RE_ERROR_INTERNAL;
- goto finished;
- }
-
- /* We've already looked for a partial match (if allowed), but what about a
- * complete match?
- */
- while (len >= min_len) {
- status = string_set_contains(state, string_set, first, last);
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = 1;
- goto finished;
- }
-
- /* Look for a shorter match. */
- --len;
- if (reverse)
- ++first;
- else
- --last;
- }
-
- /* No match. */
- status = 0;
-
-finished:
- release_GIL(state);
-
- return status;
-}
-
-/* Tries to match a string at the current position with a member of a string
- * set, ignoring case, forwards or backwards.
- */
-Py_LOCAL_INLINE(int) string_set_match_fld_fwdrev(RE_State* state, RE_Node*
- node, BOOL reverse) {
- int (*full_case_fold)(RE_LocaleInfo* locale_info, Py_UCS4 ch, Py_UCS4*
- folded);
- Py_UCS4 (*char_at)(void* text, Py_ssize_t pos);
- Py_ssize_t folded_charsize;
- void (*set_char_at)(void* text, Py_ssize_t pos, Py_UCS4 ch);
- Py_ssize_t min_len;
- Py_ssize_t max_len;
- Py_ssize_t buf_len;
- void* folded;
- int status;
- BOOL* end_of_fold = NULL;
- Py_ssize_t text_available;
- Py_ssize_t slice_available;
- Py_ssize_t t_pos;
- Py_ssize_t f_pos;
- int step;
- int partial_side;
- Py_ssize_t len;
- Py_ssize_t consumed;
- Py_UCS4 codepoints[RE_MAX_FOLDED];
- Py_ssize_t first;
- Py_ssize_t last;
- PyObject* string_set;
-
- full_case_fold = state->encoding->full_case_fold;
- char_at = state->char_at;
-
-#if PY_VERSION_HEX >= 0x03030000
- /* The folded string needs to be at least 2 bytes per character. */
- folded_charsize = max_ssize_t(state->charsize, sizeof(Py_UCS2));
-#else
- /* The folded string will have the same width as the original string. */
- folded_charsize = state->charsize;
-#endif
-
- switch (folded_charsize) {
- case 1:
- set_char_at = bytes1_set_char_at;
- break;
- case 2:
- set_char_at = bytes2_set_char_at;
- break;
- case 4:
- set_char_at = bytes4_set_char_at;
- break;
- default:
- return RE_ERROR_INTERNAL;
- }
-
- min_len = (Py_ssize_t)node->values[1];
- max_len = (Py_ssize_t)node->values[2];
-
- acquire_GIL(state);
-
- /* Allocate a buffer for the folded string. */
- buf_len = max_len + RE_MAX_FOLDED;
- folded = re_alloc((size_t)(buf_len * folded_charsize));
- if (!folded) {
- status = RE_ERROR_MEMORY;
- goto finished;
- }
-
- end_of_fold = re_alloc((size_t)buf_len * sizeof(BOOL));
- if (!end_of_fold) {
- status = RE_ERROR_MEMORY;
- goto finished;
- }
-
- memset(end_of_fold, 0, (size_t)buf_len * sizeof(BOOL));
-
- if (reverse) {
- text_available = state->text_pos;
- slice_available = state->text_pos - state->slice_start;
- t_pos = state->text_pos - 1;
- f_pos = buf_len;
- step = -1;
- partial_side = RE_PARTIAL_LEFT;
- } else {
- text_available = state->text_length - state->text_pos;
- slice_available = state->slice_end - state->text_pos;
- t_pos = state->text_pos;
- f_pos = 0;
- step = 1;
- partial_side = RE_PARTIAL_RIGHT;
- }
-
- /* We can stop getting characters as soon as the case-folded string is long
- * enough (each codepoint from the text can expand to more than one folded
- * codepoint).
- */
- len = 0;
- end_of_fold[len] = TRUE;
-
- consumed = 0;
- while (len < max_len && consumed < slice_available) {
- int count;
- int j;
-
- count = full_case_fold(state->locale_info, char_at(state->text, t_pos),
- codepoints);
-
- if (reverse)
- f_pos -= count;
-
- for (j = 0; j < count; j++)
- set_char_at(folded, f_pos + j, codepoints[j]);
-
- if (!reverse)
- f_pos += count;
-
- len += count;
- end_of_fold[len] = TRUE;
- ++consumed;
- t_pos += step;
- }
-
- if (reverse) {
- first = f_pos;
- last = buf_len;
- } else {
- first = 0;
- last = f_pos;
- }
-
- /* If we didn't get all of the characters we need, is a partial match
- * allowed?
- */
- if (len < max_len && len == text_available && state->partial_side ==
- partial_side) {
- if (len == 0) {
- /* An empty string is always a possible partial match. */
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
-
- /* Make a set of the possible partial matches. */
- status = make_partial_string_set(state, node);
- if (status < 0)
- goto finished;
-
- /* Fetch the partial string set. */
- string_set =
- state->pattern->partial_named_lists[partial_side][node->values[0]];
-
- /* Is the text we have a partial match? */
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
- if (status < 0)
- goto finished;
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= consumed;
- else
- state->text_pos += consumed;
-
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
- }
-
- /* Fetch the string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(state->pattern->named_list_indexes,
- node->values[0]);
- if (!string_set) {
- status = RE_ERROR_INTERNAL;
- goto finished;
- }
-
- /* We've already looked for a partial match (if allowed), but what about a
- * complete match?
- */
- while (len >= min_len) {
- if (end_of_fold[len]) {
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= consumed;
- else
- state->text_pos += consumed;
-
- status = 1;
- goto finished;
- }
-
- --consumed;
- }
-
- /* Look for a shorter match. */
- --len;
- if (reverse)
- ++first;
- else
- --last;
- }
-
- /* No match. */
- status = 0;
-
-finished:
- re_dealloc(end_of_fold);
- re_dealloc(folded);
-
- release_GIL(state);
-
- return status;
-}
-
-/* Tries to match a string at the current position with a member of a string
- * set, ignoring case, forwards or backwards.
- */
-Py_LOCAL_INLINE(int) string_set_match_ign_fwdrev(RE_State* state, RE_Node*
- node, BOOL reverse) {
- Py_UCS4 (*simple_case_fold)(RE_LocaleInfo* locale_info, Py_UCS4 ch);
- Py_UCS4 (*char_at)(void* text, Py_ssize_t pos);
- Py_ssize_t folded_charsize;
- void (*set_char_at)(void* text, Py_ssize_t pos, Py_UCS4 ch);
- Py_ssize_t min_len;
- Py_ssize_t max_len;
- void* folded;
- int status;
- Py_ssize_t text_available;
- Py_ssize_t slice_available;
- Py_ssize_t t_pos;
- Py_ssize_t f_pos;
- int step;
- int partial_side;
- Py_ssize_t len;
- Py_ssize_t i;
- Py_ssize_t first;
- Py_ssize_t last;
- PyObject* string_set;
-
- simple_case_fold = state->encoding->simple_case_fold;
- char_at = state->char_at;
-
-#if PY_VERSION_HEX >= 0x03030000
- /* The folded string needs to be at least 2 bytes per character. */
- folded_charsize = max_ssize_t(state->charsize, sizeof(Py_UCS2));
-#else
- /* The folded string will have the same width as the original string. */
- folded_charsize = state->charsize;
-#endif
-
- switch (folded_charsize) {
+ switch (buffer_charsize) {
case 1:
- set_char_at = bytes1_set_char_at;
+ kind = PyUnicode_1BYTE_KIND;
break;
case 2:
- set_char_at = bytes2_set_char_at;
+ kind = PyUnicode_2BYTE_KIND;
break;
case 4:
- set_char_at = bytes4_set_char_at;
+ kind = PyUnicode_4BYTE_KIND;
break;
default:
- return RE_ERROR_INTERNAL;
- }
-
- min_len = (Py_ssize_t)node->values[1];
- max_len = (Py_ssize_t)node->values[2];
-
- acquire_GIL(state);
-
- /* Allocate a buffer for the folded string. */
- folded = re_alloc((size_t)(max_len * folded_charsize));
- if (!folded) {
- status = RE_ERROR_MEMORY;
- goto finished;
- }
-
- if (reverse) {
- text_available = state->text_pos;
- slice_available = state->text_pos - state->slice_start;
- t_pos = state->text_pos - 1;
- f_pos = max_len - 1;
- step = -1;
- partial_side = RE_PARTIAL_LEFT;
- } else {
- text_available = state->text_length - state->text_pos;
- slice_available = state->slice_end - state->text_pos;
- t_pos = state->text_pos;
- f_pos = 0;
- step = 1;
- partial_side = RE_PARTIAL_RIGHT;
- }
-
- /* Get as many characters as we need for the longest possible match. */
- len = min_ssize_t(max_len, slice_available);
-
- for (i = 0; i < len; i ++) {
- Py_UCS4 ch;
-
- ch = simple_case_fold(state->locale_info, char_at(state->text, t_pos));
- set_char_at(folded, f_pos, ch);
- t_pos += step;
- f_pos += step;
- }
-
- if (reverse) {
- first = f_pos + 1;
- last = max_len;
- } else {
- first = 0;
- last = f_pos;
+ kind = PyUnicode_1BYTE_KIND;
+ break;
}
- /* If we didn't get all of the characters we need, is a partial match
- * allowed?
- */
- if (len < max_len && len == text_available && state->partial_side ==
- partial_side) {
- if (len == 0) {
- /* An empty string is always a possible partial match. */
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
+ return PyUnicode_FromKindAndData(kind, buffer, len);
+#endif
+}
- /* Make a set of the possible partial matches. */
- status = make_partial_string_set(state, node);
- if (status < 0)
- goto finished;
+/* Builds a bytestring. Returns NULL if any member is too wide. */
+Py_LOCAL_INLINE(PyObject*) build_bytes_value(void* buffer, Py_ssize_t start,
+ Py_ssize_t end, Py_ssize_t buffer_charsize) {
+ Py_ssize_t len;
+ Py_UCS1* byte_buffer;
+ Py_ssize_t i;
+ PyObject* result;
- /* Fetch the partial string set. */
- string_set =
- state->pattern->partial_named_lists[partial_side][node->values[0]];
+ buffer = (void*)((RE_UINT8*)buffer + start * buffer_charsize);
+ len = end - start;
- /* Is the text we have a partial match? */
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
- if (status < 0)
- goto finished;
+ if (buffer_charsize == 1)
+ return Py_BuildValue("y#", buffer, len);
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
+ byte_buffer = re_alloc((size_t)len);
+ if (!byte_buffer)
+ return NULL;
- status = RE_ERROR_PARTIAL;
- goto finished;
- }
- }
+ for (i = 0; i < len; i++) {
+ Py_UCS2 c = ((Py_UCS2*)buffer)[i];
+ if (c > 0xFF)
+ goto too_wide;
- /* Fetch the string set. PyList_GET_ITEM borrows a reference. */
- string_set = PyList_GET_ITEM(state->pattern->named_list_indexes,
- node->values[0]);
- if (!string_set) {
- status = RE_ERROR_INTERNAL;
- goto finished;
+ byte_buffer[i] = (Py_UCS1)c;
}
- /* We've already looked for a partial match (if allowed), but what about a
- * complete match?
- */
- while (len >= min_len) {
- status = string_set_contains_ign(state, string_set, folded, first,
- last, first, folded_charsize);
-
- if (status == 1) {
- /* Advance past the match. */
- if (reverse)
- state->text_pos -= len;
- else
- state->text_pos += len;
-
- status = 1;
- goto finished;
- }
-
- /* Look for a shorter match. */
- --len;
- if (reverse)
- ++first;
- else
- --last;
- }
+ result = Py_BuildValue("y#", byte_buffer, len);
- /* No match. */
- status = 0;
+ re_dealloc(byte_buffer);
-finished:
- re_dealloc(folded);
+ return result;
- release_GIL(state);
+too_wide:
+ re_dealloc(byte_buffer);
- return status;
+ return NULL;
}
Py_LOCAL_INLINE(size_t) total_errors(size_t* fuzzy_counts) {
@@ -10420,16 +9687,25 @@ Py_LOCAL_INLINE(void) unrecord_fuzzy(RE_State* state) {
--state->fuzzy_changes.count;
}
-/* Makes a list of lists of fuzzy changes. */
-Py_LOCAL_INLINE(void) make_fuzzy_changes_list(RE_FuzzyChangesList*
+/* Initialises a list of fuzzy changes. */
+Py_LOCAL_INLINE(void) init_fuzzy_changes_list(RE_FuzzyChangesList*
changes_list) {
changes_list->capacity = 0;
changes_list->count = 0;
changes_list->items = NULL;
}
-/* Makes a list of lists of fuzzy changes. */
-Py_LOCAL_INLINE(void) make_best_changes_list(RE_BestChangesList*
+/* Finalises a list of fuzzy changes. */
+Py_LOCAL_INLINE(void) fini_fuzzy_changes_list(RE_State* state,
+ RE_FuzzyChangesList* changes_list) {
+ safe_dealloc(state, changes_list->items);
+ changes_list->capacity = 0;
+ changes_list->count = 0;
+ changes_list->items = NULL;
+}
+
+/* Initialises a list of lists of fuzzy changes. */
+Py_LOCAL_INLINE(void) init_best_changes_list(RE_BestChangesList*
best_changes_list) {
best_changes_list->capacity = 0;
best_changes_list->count = 0;
@@ -10454,11 +9730,14 @@ Py_LOCAL_INLINE(void) clear_best_fuzzy_changes(RE_State* state,
best_changes_list->count = 0;
}
-/* Destroys a list of lists of fuzzy changes. */
-Py_LOCAL_INLINE(void) destroy_best_changes_list(RE_State* state,
+/* Finalises a list of lists of fuzzy changes. */
+Py_LOCAL_INLINE(void) fini_best_changes_list(RE_State* state,
RE_BestChangesList* best_changes_list) {
clear_best_fuzzy_changes(state, best_changes_list);
safe_dealloc(state, best_changes_list->lists);
+ best_changes_list->capacity = 0;
+ best_changes_list->count = 0;
+ best_changes_list->lists = NULL;
}
/* Adds a list of fuzzy changes to a list of best fuzzy changes. */
@@ -10501,20 +9780,6 @@ Py_LOCAL_INLINE(BOOL) add_best_fuzzy_changes(RE_State* state,
return TRUE;
}
-/* Initialises a list of fuzzy changes. */
-Py_LOCAL_INLINE(void) make_changes_list(RE_State* state, RE_FuzzyChangesList*
- best_changes_list) {
- best_changes_list->capacity = 0;
- best_changes_list->count = 0;
- best_changes_list->items = NULL;
-}
-
-/* Finitialises a list of fuzzy changes. */
-Py_LOCAL_INLINE(void) destroy_changes_list(RE_State* state,
- RE_FuzzyChangesList* best_changes_list) {
- safe_dealloc(state, best_changes_list->items);
-}
-
/* Saves a list of fuzzy changes. */
Py_LOCAL_INLINE(BOOL) save_fuzzy_changes(RE_State* state, RE_FuzzyChangesList*
best_changes_list) {
@@ -10612,6 +9877,13 @@ Py_LOCAL_INLINE(BOOL) fuzzy_ext_match(RE_State* state, RE_Node* fuzzy_node,
return pos > state->slice_start && matches_RANGE(state->encoding,
state->locale_info, test_node, state->char_at(state->text, pos - 1))
== test_node->match;
+ case RE_OP_SET_DIFF:
+ case RE_OP_SET_INTER:
+ case RE_OP_SET_SYM_DIFF:
+ case RE_OP_SET_UNION:
+ return pos < state->slice_end && matches_SET(state->encoding,
+ state->locale_info, test_node, state->char_at(state->text, pos)) ==
+ test_node->match;
}
return TRUE;
@@ -10703,6 +9975,14 @@ Py_LOCAL_INLINE(BOOL) fuzzy_ext_match_group_fld(RE_State* state, RE_Node*
matches_RANGE(state->encoding, state->locale_info, test_node,
folded_char_at(state, state->text_pos - 1, folded_pos - 1)) ==
test_node->match;
+ case RE_OP_SET_DIFF:
+ case RE_OP_SET_INTER:
+ case RE_OP_SET_SYM_DIFF:
+ case RE_OP_SET_UNION:
+ return state->text_pos < state->slice_end &&
+ matches_SET(state->encoding, state->locale_info, test_node,
+ folded_char_at(state, state->text_pos, folded_pos)) ==
+ test_node->match;
}
return TRUE;
@@ -10713,58 +9993,60 @@ Py_LOCAL_INLINE(int) next_fuzzy_match_item(RE_State* state, RE_FuzzyData* data,
BOOL is_string, RE_INT8 step) {
Py_ssize_t new_pos;
- if (this_error_permitted(state, data->fuzzy_type)) {
- switch (data->fuzzy_type) {
- case RE_FUZZY_DEL:
- /* Could a character at text_pos have been deleted? */
- if (step == 0)
- return RE_ERROR_FAILURE;
+ if (!this_error_permitted(state, data->fuzzy_type))
+ return RE_ERROR_FAILURE;
- if (is_string)
- data->new_string_pos += step;
- else
- data->new_node = data->new_node->next_1.node;
- return RE_ERROR_SUCCESS;
- case RE_FUZZY_INS:
- /* Could the character at text_pos have been inserted? */
- if (!data->permit_insertion)
+ switch (data->fuzzy_type) {
+ case RE_FUZZY_DEL:
+ /* Could a character at text_pos have been deleted? */
+ if (step == 0)
+ return RE_ERROR_FAILURE;
+
+ if (is_string)
+ data->new_string_pos += step;
+ else
+ data->new_node = data->new_node->next_1.node;
+ return RE_ERROR_SUCCESS;
+ case RE_FUZZY_INS:
+ /* Could the character at text_pos have been inserted? */
+ if (!data->permit_insertion)
+ return RE_ERROR_FAILURE;
+
+ if (step == 0)
+ new_pos = data->new_text_pos + data->step;
+ else
+ new_pos = data->new_text_pos + step;
+
+ if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
+ if (!fuzzy_ext_match(state, state->fuzzy_node, data->new_text_pos))
return RE_ERROR_FAILURE;
- if (step == 0)
- new_pos = data->new_text_pos + data->step;
- else
- new_pos = data->new_text_pos + step;
- if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
- if (!fuzzy_ext_match(state, state->fuzzy_node,
- data->new_text_pos))
- return RE_ERROR_FAILURE;
+ data->new_text_pos = new_pos;
+ return RE_ERROR_SUCCESS;
+ }
- data->new_text_pos = new_pos;
- return RE_ERROR_SUCCESS;
- }
+ return check_fuzzy_partial(state, new_pos);
+ case RE_FUZZY_SUB:
+ /* Could the character at text_pos have been substituted? */
+ if (step == 0)
+ return RE_ERROR_FAILURE;
- return check_fuzzy_partial(state, new_pos);
- case RE_FUZZY_SUB:
- /* Could the character at text_pos have been substituted? */
- if (step == 0)
+ new_pos = data->new_text_pos + step;
+ if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
+ if (!fuzzy_ext_match(state, state->fuzzy_node, data->new_text_pos))
return RE_ERROR_FAILURE;
- new_pos = data->new_text_pos + step;
- if (state->slice_start <= new_pos && new_pos <= state->slice_end) {
- if (!fuzzy_ext_match(state, state->fuzzy_node,
- data->new_text_pos))
- return RE_ERROR_FAILURE;
+ data->new_text_pos = new_pos;
- data->new_text_pos = new_pos;
- if (is_string)
- data->new_string_pos += step;
- else
- data->new_node = data->new_node->next_1.node;
- return RE_ERROR_SUCCESS;
- }
+ if (is_string)
+ data->new_string_pos += step;
+ else
+ data->new_node = data->new_node->next_1.node;
- return check_fuzzy_partial(state, new_pos);
+ return RE_ERROR_SUCCESS;
}
+
+ return check_fuzzy_partial(state, new_pos);
}
return RE_ERROR_FAILURE;
@@ -10775,11 +10057,14 @@ Py_LOCAL_INLINE(int) fuzzy_match_item(RE_State* state, BOOL search, Py_ssize_t*
text_pos, RE_Node** node, RE_INT8 step) {
size_t* fuzzy_counts;
RE_FuzzyData data;
+ TRACE(("<<fuzzy_match_item>>\n"))
fuzzy_counts = state->fuzzy_counts;
- if (!any_error_permitted(state))
+ if (!any_error_permitted(state)) {
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
+ }
data.new_text_pos = *text_pos;
data.new_node = *node;
@@ -10813,6 +10098,7 @@ Py_LOCAL_INLINE(int) fuzzy_match_item(RE_State* state, BOOL search, Py_ssize_t*
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -10829,7 +10115,8 @@ found:
/* bstack: node step text_pos fuzzy_type op */
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -10838,6 +10125,9 @@ found:
*text_pos = data.new_text_pos;
*node = data.new_node;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -10849,6 +10139,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_item(RE_State* state, RE_UINT8 op, BOOL
RE_FuzzyData data;
RE_INT8 step;
RE_Node* curr_node;
+ TRACE(("<<retry_fuzzy_match_item>>\n"))
fuzzy_counts = state->fuzzy_counts;
@@ -10894,6 +10185,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_item(RE_State* state, RE_UINT8 op, BOOL
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -10910,7 +10202,8 @@ found:
/* bstack: node step text_pos fuzzy_type op */
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -10919,6 +10212,9 @@ found:
*text_pos = data.new_text_pos;
*node = data.new_node;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -11015,11 +10311,14 @@ Py_LOCAL_INLINE(int) fuzzy_match_string(RE_State* state, BOOL search,
Py_ssize_t* text_pos, RE_Node* node, Py_ssize_t* string_pos, RE_INT8 step) {
size_t* fuzzy_counts;
RE_FuzzyData data;
+ TRACE(("<<fuzzy_match_string>>\n"))
fuzzy_counts = state->fuzzy_counts;
- if (!any_error_permitted(state))
+ if (!any_error_permitted(state)) {
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
+ }
data.new_text_pos = *text_pos;
data.new_string_pos = *string_pos;
@@ -11043,6 +10342,7 @@ Py_LOCAL_INLINE(int) fuzzy_match_string(RE_State* state, BOOL search,
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -11061,7 +10361,8 @@ found:
/* bstack: node step string_pos text_pos fuzzy_type op */
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11070,6 +10371,9 @@ found:
*text_pos = data.new_text_pos;
*string_pos = data.new_string_pos;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -11081,6 +10385,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_string(RE_State* state, RE_UINT8 op,
Py_ssize_t curr_text_pos;
Py_ssize_t curr_string_pos;
RE_Node* new_node;
+ TRACE(("<<retry_fuzzy_match_string>>\n"))
fuzzy_counts = state->fuzzy_counts;
@@ -11122,6 +10427,7 @@ Py_LOCAL_INLINE(int) retry_fuzzy_match_string(RE_State* state, RE_UINT8 op,
goto found;
}
+ TRACE((" return RE_ERROR_FAILURE\n"))
return RE_ERROR_FAILURE;
found:
@@ -11138,7 +10444,8 @@ found:
if (!push_uint8(state, &state->bstack, op))
return RE_ERROR_MEMORY;
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
/* bstack: node step string_pos text_pos fuzzy_type op */
@@ -11150,6 +10457,9 @@ found:
*node = new_node;
*string_pos = data.new_string_pos;
+ TRACE((" fuzzy_counts is (%zd, %zd, %zd)\n", fuzzy_counts[0],
+ fuzzy_counts[1], fuzzy_counts[2]))
+ TRACE((" return RE_ERROR_SUCCESS\n"))
return RE_ERROR_SUCCESS;
}
@@ -11267,7 +10577,8 @@ found:
* op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11366,7 +10677,8 @@ found:
* op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11500,7 +10812,8 @@ found:
* folded_len text_pos fuzzy_type op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -11605,7 +10918,8 @@ found:
* folded_len text_pos fuzzy_type op
*/
- if (!record_fuzzy(state, data.fuzzy_type, data.new_text_pos - data.step))
+ if (!record_fuzzy(state, data.fuzzy_type, data.fuzzy_type == RE_FUZZY_DEL ?
+ data.new_text_pos : data.new_text_pos - data.step))
return RE_ERROR_MEMORY;
++fuzzy_counts[data.fuzzy_type];
@@ -13056,7 +12370,7 @@ advance:
/* The counts are of type size_t, so the format needs to specify
* that.
*/
- TRACE(("min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
+ TRACE((" min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
node->values[1], node->values[2], rp_data->count))
/* Could the body or tail match? */
@@ -13283,7 +12597,7 @@ advance:
/* The counts are of type size_t, so the format needs to specify
* that.
*/
- TRACE(("min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
+ TRACE((" min is %u, max is %u, count is %" PY_FORMAT_SIZE_T "u\n",
node->values[1], node->values[2], rp_data->count))
/* Could the body or tail match? */
@@ -13705,6 +13019,11 @@ advance:
rp_data->capture_change = state->capture_change;
/* Could the body or tail match? */
+#if defined(VERBOSE)
+ printf(" is_repeat_guarded(..., RE_STATUS_BODY) returns %d\n",
+ is_repeat_guarded(state, index, state->text_pos,
+ RE_STATUS_BODY));
+#endif
try_body = node->values[2] > 0 && !is_repeat_guarded(state, index,
state->text_pos, RE_STATUS_BODY);
if (try_body) {
@@ -15628,66 +14947,6 @@ advance:
node = node->next_1.node;
break;
}
- case RE_OP_STRING_SET: /* Member of a string set. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fwdrev(state, node, FALSE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_FLD: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fld_fwdrev(state, node, FALSE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_FLD_REV: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fld_fwdrev(state, node, TRUE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_IGN: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_ign_fwdrev(state, node, FALSE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_IGN_REV: /* Member of a string set, ignoring case. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_ign_fwdrev(state, node, TRUE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
- case RE_OP_STRING_SET_REV: /* Member of a string set. */
- TRACE(("%s\n", re_op_text[node->op]))
-
- status = string_set_match_fwdrev(state, node, TRUE);
- if (status < 0)
- return status;
- if (status == 0)
- goto backtrack;
- node = node->next_1.node;
- break;
case RE_OP_SUCCESS: /* Success. */
/* Must the match advance past its start? */
TRACE(("%s\n", re_op_text[node->op]))
@@ -18013,8 +17272,17 @@ Py_LOCAL_INLINE(void) restore_fuzzy_counts(RE_State* state, size_t*
Py_MEMCPY(state->fuzzy_counts, fuzzy_counts, sizeof(state->fuzzy_counts));
}
-/* Makes the list of best matches found so far. */
-Py_LOCAL_INLINE(void) make_best_list(RE_BestList* best_list) {
+/* Initialises the list of best matches found so far. */
+Py_LOCAL_INLINE(void) init_best_list(RE_BestList* best_list) {
+ best_list->capacity = 0;
+ best_list->count = 0;
+ best_list->entries = NULL;
+}
+
+/* Finalises the list of best matches found so far. */
+Py_LOCAL_INLINE(void) fini_best_list(RE_State* state, RE_BestList*
+ best_list) {
+ safe_dealloc(state, best_list->entries);
best_list->capacity = 0;
best_list->count = 0;
best_list->entries = NULL;
@@ -18055,13 +17323,6 @@ Py_LOCAL_INLINE(BOOL) add_to_best_list(RE_State* state, RE_BestList* best_list,
return TRUE;
}
-/* Destroy the list of best matches found so far. */
-Py_LOCAL_INLINE(void) destroy_best_list(RE_State* state, RE_BestList*
- best_list) {
- if (best_list->entries)
- safe_dealloc(state, best_list->entries);
-}
-
/* Performs a match or search from the current text position for a best fuzzy
* match.
*/
@@ -18095,8 +17356,8 @@ Py_LOCAL_INLINE(int) do_best_fuzzy_match(RE_State* state, BOOL search) {
must_advance = state->must_advance;
found_match = FALSE;
- make_best_list(&best_list);
- make_best_changes_list(&best_changes_list);
+ init_best_list(&best_list);
+ init_best_changes_list(&best_changes_list);
/* Search the text for the best match. */
start_pos = state->text_pos;
@@ -18189,7 +17450,7 @@ Py_LOCAL_INLINE(int) do_best_fuzzy_match(RE_State* state, BOOL search) {
error_limit = RE_MAX_ERRORS;
best_groups = NULL;
- make_fuzzy_changes_list(&best_fuzzy_changes);
+ init_fuzzy_changes_list(&best_fuzzy_changes);
/* Look again at the best of the matches that we've seen. */
for (i = 0; i < best_list.count; i++) {
@@ -18310,27 +17571,29 @@ Py_LOCAL_INLINE(int) do_best_fuzzy_match(RE_State* state, BOOL search) {
state->text_pos = entry->match_pos;
init_match(state);
status = basic_match(state, search);
+
+ list = &best_changes_list.lists[0];
+ state->fuzzy_changes.count = list->count;
+ Py_MEMCPY(state->fuzzy_changes.items, list->items,
+ (size_t)list->count * sizeof(RE_FuzzyChange));
}
+ fini_fuzzy_changes_list(state, &best_fuzzy_changes);
+
state->slice_start = slice_start;
state->slice_end = slice_end;
-
- list = &best_changes_list.lists[0];
- state->fuzzy_changes.count = list->count;
- Py_MEMCPY(state->fuzzy_changes.items, list->items,
- (size_t)list->count * sizeof(RE_FuzzyChange));
} else
state->fuzzy_changes.count = 0;
}
- destroy_best_list(state, &best_list);
- destroy_best_changes_list(state, &best_changes_list);
+ fini_best_list(state, &best_list);
+ fini_best_changes_list(state, &best_changes_list);
return status;
error:
- destroy_best_list(state, &best_list);
- destroy_best_changes_list(state, &best_changes_list);
+ fini_best_list(state, &best_list);
+ fini_best_changes_list(state, &best_changes_list);
return RE_ERROR_MEMORY;
}
@@ -18354,7 +17617,7 @@ Py_LOCAL_INLINE(int) do_enhanced_fuzzy_match(RE_State* state, BOOL search) {
pattern = state->pattern;
- make_changes_list(state, &best_fuzzy_changes);
+ init_fuzzy_changes_list(&best_fuzzy_changes);
if (state->reverse)
available = state->text_pos - state->slice_start;
@@ -18490,12 +17753,12 @@ Py_LOCAL_INLINE(int) do_enhanced_fuzzy_match(RE_State* state, BOOL search) {
restore_fuzzy_changes(state, &best_fuzzy_changes);
}
- destroy_changes_list(state, &best_fuzzy_changes);
+ fini_fuzzy_changes_list(state, &best_fuzzy_changes);
return status;
error:
- destroy_changes_list(state, &best_fuzzy_changes);
+ fini_fuzzy_changes_list(state, &best_fuzzy_changes);
return status;
}
@@ -18702,18 +17965,12 @@ Py_LOCAL_INLINE(BOOL) get_string(PyObject* string, RE_StringInfo* str_info) {
*/
if (PyUnicode_Check(string)) {
/* Unicode strings don't always support the buffer interface. */
-#if PY_VERSION_HEX >= 0x03030000
if (PyUnicode_READY(string) == -1)
return FALSE;
str_info->characters = (void*)PyUnicode_DATA(string);
str_info->length = PyUnicode_GET_LENGTH(string);
str_info->charsize = PyUnicode_KIND(string);
-#else
- str_info->characters = (void*)PyUnicode_AS_DATA(string);
- str_info->length = PyUnicode_GET_SIZE(string);
- str_info->charsize = sizeof(Py_UNICODE);
-#endif
str_info->is_unicode = TRUE;
str_info->should_release = FALSE;
return TRUE;
@@ -19196,7 +18453,7 @@ Py_LOCAL_INLINE(Py_ssize_t) as_string_index(PyObject* obj, Py_ssize_t def) {
return value;
set_error(RE_ERROR_INDEX, NULL);
- return 0;
+ return -1;
}
/* Deallocates a MatchObject. */
@@ -19253,21 +18510,12 @@ Py_LOCAL_INLINE(Py_ssize_t) limited_range(Py_ssize_t value, Py_ssize_t lower,
Py_LOCAL_INLINE(PyObject*) unicode_slice(PyObject* string, Py_ssize_t start,
Py_ssize_t end) {
Py_ssize_t length;
-#if PY_VERSION_HEX < 0x03030000
- Py_UNICODE* buffer;
-#endif
- length = PyUnicode_GET_SIZE(string);
+ length = PyUnicode_GET_LENGTH(string);
start = limited_range(start, 0, length);
end = limited_range(end, 0, length);
-#if PY_VERSION_HEX >= 0x03030000
return PyUnicode_Substring(string, start, end);
-#else
- buffer = PyUnicode_AsUnicode(string);
-
- return PyUnicode_FromUnicode(buffer + start, end - start);
-#endif
}
/* Gets a slice from a bytestring. */
@@ -20173,7 +19421,7 @@ Py_LOCAL_INLINE(PyObject*) join_list_info(RE_JoinInfo* join_info) {
if (join_info->is_unicode) {
/* Concatenate the Unicode strings. */
- joiner = PyUnicode_FromUnicode(NULL, 0);
+ joiner = PyUnicode_New(0, 0);
if (!joiner) {
clear_join_list(join_info);
return NULL;
@@ -20203,7 +19451,7 @@ Py_LOCAL_INLINE(PyObject*) join_list_info(RE_JoinInfo* join_info) {
/* There are no items, so return an empty string. */
if (join_info->is_unicode)
- return PyUnicode_FromUnicode(NULL, 0);
+ return PyUnicode_New(0, 0);
else
return PyBytes_FromString("");
}
@@ -20507,14 +19755,8 @@ Py_LOCAL_INLINE(PyObject*) match_get_group_slice(MatchObject* self, PyObject*
Py_ssize_t step;
Py_ssize_t slice_length;
-#if PY_VERSION_HEX >= 0x03020000
if (PySlice_GetIndicesEx(slice, (Py_ssize_t)self->group_count + 1, &start,
&end, &step, &slice_length) < 0)
-#else
- if (PySlice_GetIndicesEx((PySliceObject*)slice,
- (Py_ssize_t)self->group_count + 1, &start, &end, &step, &slice_length) <
- 0)
-#endif
return NULL;
if (slice_length <= 0)
@@ -20759,6 +20001,8 @@ static PyObject* match_lastgroup(PyObject* self_) {
PyObject* result;
index = Py_BuildValue("n", self->lastgroup);
+ if (!index)
+ return NULL;
/* PyDict_GetItem returns borrows a reference. */
result = PyDict_GetItem(self->pattern->indexgroup, index);
@@ -21718,19 +20962,11 @@ Py_LOCAL_INLINE(Py_ssize_t) index_to_integer(PyObject* item) {
/* Is the index a string representation of an integer? */
if (PyUnicode_Check(item)) {
PyObject* int_obj;
-#if PY_VERSION_HEX < 0x03030000
- Py_UNICODE* characters;
- Py_ssize_t length;
-#endif
#if defined(PYPY_VERSION) && PY_VERSION_HEX < 0x05090000
int_obj = integer_from_unicode(item);
-#elif PY_VERSION_HEX >= 0x03030000
- int_obj = PyLong_FromUnicodeObject(item, 0);
#else
- characters = (Py_UNICODE*)PyUnicode_AS_DATA(item);
- length = PyUnicode_GET_SIZE(item);
- int_obj = PyLong_FromUnicode(characters, length, 0);
+ int_obj = PyLong_FromUnicodeObject(item, 0);
#endif
if (!int_obj)
goto error;
@@ -25525,12 +24761,6 @@ Py_LOCAL_INLINE(BOOL) section_contains_repeat(RE_CODE** code, RE_CODE*
case RE_OP_RANGE_IGN:
case RE_OP_RANGE_IGN_REV:
case RE_OP_RANGE_REV:
- case RE_OP_STRING_SET:
- case RE_OP_STRING_SET_FLD:
- case RE_OP_STRING_SET_FLD_REV:
- case RE_OP_STRING_SET_IGN:
- case RE_OP_STRING_SET_IGN_REV:
- case RE_OP_STRING_SET_REV:
/* codes: opcode, value, value, value. */
*code += 4;
break;
@@ -25905,37 +25135,6 @@ Py_LOCAL_INLINE(int) build_SET(RE_CompileArgs* args) {
return RE_ERROR_SUCCESS;
}
-/* Builds a STRING_SET node. */
-Py_LOCAL_INLINE(int) build_STRING_SET(RE_CompileArgs* args) {
- RE_CODE index;
- RE_CODE min_len;
- RE_CODE max_len;
- RE_Node* node;
-
- /* codes: opcode, index, min_len, max_len. */
- if (args->code + 3 > args->end_code)
- return RE_ERROR_ILLEGAL;
-
- index = args->code[1];
- min_len = args->code[2];
- max_len = args->code[3];
- node = create_node(args->pattern, (RE_UINT8)args->code[0], 0, 0, 3);
- if (!node)
- return RE_ERROR_MEMORY;
-
- node->values[0] = index;
- node->values[1] = min_len;
- node->values[2] = max_len;
-
- args->code += 4;
-
- /* Append the reference. */
- add_node(args->end, node);
- args->end = node;
-
- return RE_ERROR_SUCCESS;
-}
-
/* Builds a SUCCESS node . */
Py_LOCAL_INLINE(int) build_SUCCESS(RE_CompileArgs* args) {
RE_Node* node;
@@ -26245,17 +25444,6 @@ Py_LOCAL_INLINE(int) build_sequence(RE_CompileArgs* args) {
if (!build_STRING(args, FALSE))
return FALSE;
break;
- case RE_OP_STRING_SET:
- case RE_OP_STRING_SET_FLD:
- case RE_OP_STRING_SET_FLD_REV:
- case RE_OP_STRING_SET_IGN:
- case RE_OP_STRING_SET_IGN_REV:
- case RE_OP_STRING_SET_REV:
- /* A reference to a list. */
- status = build_STRING_SET(args);
- if (status != RE_ERROR_SUCCESS)
- return status;
- break;
default:
/* We've found an opcode which we don't recognise. We'll leave it
* for the caller.
@@ -26757,7 +25945,6 @@ static PyObject* fold_case(PyObject* self_, PyObject* args) {
else
encoding = &unicode_encoding;
-#if PY_VERSION_HEX >= 0x03030000
/* Initially assume that the folded string will have the same width as the
* original string (usually true).
*/
@@ -26768,10 +25955,6 @@ static PyObject* fold_case(PyObject* self_, PyObject* args) {
*/
if (encoding == &unicode_encoding && str_info.charsize == 1)
folded_charsize = 2;
-#else
- /* The folded string will have the same width as the original string. */
- folded_charsize = str_info.charsize;
-#endif
/* Get the function for writing to the folded string. */
switch (folded_charsize) {
@@ -26875,11 +26058,7 @@ static PyObject* get_expand_on_folding(PyObject* self, PyObject* unused) {
return NULL;
for (i = 0; i < count; i++) {
-#if PY_VERSION_HEX >= 0x03030000
Py_UCS4 codepoint;
-#else
- Py_UNICODE codepoint;
-#endif
PyObject* item;
codepoint = re_expand_on_folding[i];
@@ -27201,5 +26380,3 @@ PyMODINIT_FUNC PyInit__regex(void) {
return m;
}
-
-/* vim:ts=4:sw=4:et */
diff --git a/regex_3/_regex.h b/regex_3/_regex.h
index f2b7d67ebb610d6ceebd69b687ef629e39b29a6d..4c7f5fbdaae9fd02c21150591ee3ef8cf84d7e1f 100644
--- a/regex_3/_regex.h
+++ b/regex_3/_regex.h
@@ -98,29 +98,23 @@
#define RE_OP_STRING_IGN 77
#define RE_OP_STRING_IGN_REV 78
#define RE_OP_STRING_REV 79
-#define RE_OP_STRING_SET 80
-#define RE_OP_STRING_SET_FLD 81
-#define RE_OP_STRING_SET_FLD_REV 82
-#define RE_OP_STRING_SET_IGN 83
-#define RE_OP_STRING_SET_IGN_REV 84
-#define RE_OP_STRING_SET_REV 85
-#define RE_OP_FUZZY_EXT 86
-#define RE_OP_BODY_END 87
-#define RE_OP_BODY_START 88
-#define RE_OP_END_ATOMIC 89
-#define RE_OP_END_CONDITIONAL 90
-#define RE_OP_END_FUZZY 91
-#define RE_OP_END_GREEDY_REPEAT 92
-#define RE_OP_END_GROUP 93
-#define RE_OP_END_LAZY_REPEAT 94
-#define RE_OP_END_LOOKAROUND 95
-#define RE_OP_FUZZY_INSERT 96
-#define RE_OP_GREEDY_REPEAT_ONE 97
-#define RE_OP_GROUP_RETURN 98
-#define RE_OP_LAZY_REPEAT_ONE 99
-#define RE_OP_MATCH_BODY 100
-#define RE_OP_MATCH_TAIL 101
-#define RE_OP_START_GROUP 102
+#define RE_OP_FUZZY_EXT 80
+#define RE_OP_BODY_END 81
+#define RE_OP_BODY_START 82
+#define RE_OP_END_ATOMIC 83
+#define RE_OP_END_CONDITIONAL 84
+#define RE_OP_END_FUZZY 85
+#define RE_OP_END_GREEDY_REPEAT 86
+#define RE_OP_END_GROUP 87
+#define RE_OP_END_LAZY_REPEAT 88
+#define RE_OP_END_LOOKAROUND 89
+#define RE_OP_FUZZY_INSERT 90
+#define RE_OP_GREEDY_REPEAT_ONE 91
+#define RE_OP_GROUP_RETURN 92
+#define RE_OP_LAZY_REPEAT_ONE 93
+#define RE_OP_MATCH_BODY 94
+#define RE_OP_MATCH_TAIL 95
+#define RE_OP_START_GROUP 96
char* re_op_text[] = {
"RE_OP_FAILURE",
@@ -203,12 +197,6 @@ char* re_op_text[] = {
"RE_OP_STRING_IGN",
"RE_OP_STRING_IGN_REV",
"RE_OP_STRING_REV",
- "RE_OP_STRING_SET",
- "RE_OP_STRING_SET_FLD",
- "RE_OP_STRING_SET_FLD_REV",
- "RE_OP_STRING_SET_IGN",
- "RE_OP_STRING_SET_IGN_REV",
- "RE_OP_STRING_SET_REV",
"RE_OP_FUZZY_EXT",
"RE_OP_BODY_END",
"RE_OP_BODY_START",
diff --git a/regex_3/regex/_regex_core.py b/regex_3/_regex_core.py
similarity index 98%
rename from regex_3/regex/_regex_core.py
rename to regex_3/_regex_core.py
index ab27a7f17ba97f79c2e13810decba47aa7e3d427..19d9d4af341dc999ce8695172b1b4557df279f9f 100644
--- a/regex_3/regex/_regex_core.py
+++ b/regex_3/_regex_core.py
@@ -220,12 +220,6 @@ STRING_FLD_REV
STRING_IGN
STRING_IGN_REV
STRING_REV
-STRING_SET
-STRING_SET_FLD
-STRING_SET_FLD_REV
-STRING_SET_IGN
-STRING_SET_IGN_REV
-STRING_SET_REV
FUZZY_EXT
"""
@@ -2015,6 +2009,9 @@ class Branch(RegexBase):
b.fix_groups(pattern, reverse, fuzzy)
def optimise(self, info, reverse):
+ if not self.branches:
+ return Sequence([])
+
# Flatten branches within branches.
branches = Branch._flatten_branches(info, reverse, self.branches)
@@ -2434,6 +2431,9 @@ class CallGroup(RegexBase):
def max_width(self):
return UNLIMITED
+ def __del__(self):
+ self.info = None
+
class CallRef(RegexBase):
def __init__(self, ref, parsed):
self.ref = ref
@@ -2603,6 +2603,9 @@ class Conditional(RegexBase):
def max_width(self):
return max(self.yes_item.max_width(), self.no_item.max_width())
+ def __del__(self):
+ self.info = None
+
class DefaultBoundary(ZeroWidthBase):
_opcode = OP.DEFAULT_BOUNDARY
_op_name = "DEFAULT_BOUNDARY"
@@ -2997,6 +3000,9 @@ class Group(RegexBase):
def get_required_string(self, reverse):
return self.subpattern.get_required_string(reverse)
+ def __del__(self):
+ self.info = None
+
class Keep(ZeroWidthBase):
_opcode = OP.KEEP
_op_name = "KEEP"
@@ -3346,6 +3352,9 @@ class RefGroup(RegexBase):
def max_width(self):
return UNLIMITED
+ def __del__(self):
+ self.info = None
+
class SearchAnchor(ZeroWidthBase):
_opcode = OP.SEARCH_ANCHOR
_op_name = "SEARCH_ANCHOR"
@@ -3665,6 +3674,9 @@ class SetBase(RegexBase):
return max(len(folded) for folded in seen)
+ def __del__(self):
+ self.info = None
+
class SetDiff(SetBase):
_opcode = {(NOCASE, False): OP.SET_DIFF, (IGNORECASE, False):
OP.SET_DIFF_IGN, (FULLCASE, False): OP.SET_DIFF, (FULLIGNORECASE, False):
@@ -3902,13 +3914,7 @@ class Literal(String):
print("{}LITERAL MATCH {}{}".format(INDENT * indent, display,
CASE_TEXT[self.case_flags]))
-class StringSet(RegexBase):
- _opcode = {(NOCASE, False): OP.STRING_SET, (IGNORECASE, False):
- OP.STRING_SET_IGN, (FULLCASE, False): OP.STRING_SET, (FULLIGNORECASE,
- False): OP.STRING_SET_FLD, (NOCASE, True): OP.STRING_SET_REV,
- (IGNORECASE, True): OP.STRING_SET_IGN_REV, (FULLCASE, True):
- OP.STRING_SET_REV, (FULLIGNORECASE, True): OP.STRING_SET_FLD_REV}
-
+class StringSet(Branch):
def __init__(self, info, name, case_flags=NOCASE):
self.info = info
self.name = name
@@ -3920,84 +3926,34 @@ class StringSet(RegexBase):
if self.set_key not in info.named_lists_used:
info.named_lists_used[self.set_key] = len(info.named_lists_used)
- def _compile(self, reverse, fuzzy):
index = self.info.named_lists_used[self.set_key]
items = self.info.kwargs[self.name]
case_flags = self.case_flags
- if not items:
- return []
-
encoding = self.info.flags & _ALL_ENCODINGS
fold_flags = encoding | case_flags
- if fuzzy:
- choices = [self._folded(fold_flags, i) for i in items]
+ choices = []
- # Sort from longest to shortest.
- choices.sort(key=lambda s: (-len(s), s))
+ for string in items:
+ if isinstance(string, str):
+ string = [ord(c) for c in string]
- branches = []
- for string in choices:
- branches.append(Sequence([Character(c, case_flags=case_flags)
- for c in string]))
+ choices.append([Character(c, case_flags=case_flags) for c in
+ string])
- if len(branches) > 1:
- branch = Branch(branches)
- else:
- branch = branches[0]
- branch = branch.optimise(self.info,
- reverse).pack_characters(self.info)
+ # Sort from longest to shortest.
+ choices.sort(key=len, reverse=True)
- return branch.compile(reverse, fuzzy)
- else:
- min_len = min(len(i) for i in items)
- max_len = max(len(self._folded(fold_flags, i)) for i in items)
- return [(self._opcode[case_flags, reverse], index, min_len,
- max_len)]
+ self.branches = [Sequence(choice) for choice in choices]
def dump(self, indent, reverse):
print("{}STRING_SET {}{}".format(INDENT * indent, self.name,
CASE_TEXT[self.case_flags]))
- def _folded(self, fold_flags, item):
- if isinstance(item, str):
- return [ord(c) for c in _regex.fold_case(fold_flags, item)]
- else:
- return list(item)
-
- def _flatten(self, s):
- # Flattens the branches.
- if isinstance(s, Branch):
- for b in s.branches:
- self._flatten(b)
- elif isinstance(s, Sequence) and s.items:
- seq = s.items
-
- while isinstance(seq[-1], Sequence):
- seq[-1 : ] = seq[-1].items
-
- n = 0
- while n < len(seq) and isinstance(seq[n], Character):
- n += 1
-
- if n > 1:
- seq[ : n] = [String([c.value for c in seq[ : n]],
- case_flags=self.case_flags)]
-
- self._flatten(seq[-1])
-
- def max_width(self):
- if not self.info.kwargs[self.name]:
- return 0
-
- if self.case_flags & IGNORECASE:
- fold_flags = (self.info.flags & _ALL_ENCODINGS) | self.case_flags
- return max(len(_regex.fold_case(fold_flags, i)) for i in
- self.info.kwargs[self.name])
- else:
- return max(len(i) for i in self.info.kwargs[self.name])
+ def __del__(self):
+ self.info = None
class Source:
"Scanner for the regular expression source string."
@@ -4471,6 +4427,7 @@ CHARACTER_ESCAPES = {
CHARSET_ESCAPES = {
"d": lookup_property(None, "Digit", True),
"D": lookup_property(None, "Digit", False),
+ "h": lookup_property(None, "Blank", True),
"s": lookup_property(None, "Space", True),
"S": lookup_property(None, "Space", False),
"w": lookup_property(None, "Word", True),
diff --git a/regex_3/_regex_unicode.c b/regex_3/_regex_unicode.c
index eff2643f902cfa0e3188055c851748e9cd94a008..aec7fe7ad661b8843753d6bd9e7d6b2242c319f7 100644
--- a/regex_3/_regex_unicode.c
+++ b/regex_3/_regex_unicode.c
@@ -1,4 +1,4 @@
-/* For Unicode version 12.1.0 */
+/* For Unicode version 13.0.0 */
#include "_regex_unicode.h"
@@ -6,21 +6,20 @@
#define RE_GRAPH_MASK ((1 << RE_PROP_CC) | (1 << RE_PROP_CS) | (1 << RE_PROP_CN))
#define RE_WORD_MASK (RE_PROP_M_MASK | (1 << RE_PROP_ND) | (1 << RE_PROP_PC))
-typedef struct RE_ScriptExt {
+typedef struct {
RE_UINT8 scripts[RE_MAX_SCX];
} RE_ScriptExt;
-typedef struct RE_AllCases {
- RE_INT32 diffs[RE_MAX_CASES - 1];
+typedef struct {
+ RE_UINT32 delta;
+ RE_UINT16 others[RE_MAX_CASES - 1];
} RE_AllCases;
-typedef struct RE_FullCaseFolding {
- RE_INT32 diff;
- RE_UINT16 codepoints[RE_MAX_FOLDED - 1];
+typedef struct {
+ RE_UINT16 data[RE_MAX_FOLDED];
} RE_FullCaseFolding;
-/* strings. */
-
+/* Strings. */
char* re_strings[] = {
"-1/2",
"0",
@@ -393,6 +392,8 @@ char* re_strings[] = {
"CHEROKEESUP",
"CHEROKEESUPPLEMENT",
"CHESSSYMBOLS",
+ "CHORASMIAN",
+ "CHRS",
"CI",
"CIRCLE",
"CJ",
@@ -411,6 +412,7 @@ char* re_strings[] = {
"CJKEXTD",
"CJKEXTE",
"CJKEXTF",
+ "CJKEXTG",
"CJKRADICALSSUP",
"CJKRADICALSSUPPLEMENT",
"CJKSTROKES",
@@ -423,6 +425,7 @@ char* re_strings[] = {
"CJKUNIFIEDIDEOGRAPHSEXTENSIOND",
"CJKUNIFIEDIDEOGRAPHSEXTENSIONE",
"CJKUNIFIEDIDEOGRAPHSEXTENSIONF",
+ "CJKUNIFIEDIDEOGRAPHSEXTENSIONG",
"CL",
"CLOSE",
"CLOSEPARENTHESIS",
@@ -521,8 +524,10 @@ char* re_strings[] = {
"DIACRITICALSEXT",
"DIACRITICALSFORSYMBOLS",
"DIACRITICALSSUP",
+ "DIAK",
"DIGIT",
"DINGBATS",
+ "DIVESAKURU",
"DOGR",
"DOGRA",
"DOMINO",
@@ -544,6 +549,7 @@ char* re_strings[] = {
"EBASE",
"EBASEGAZ",
"EBG",
+ "ECOMP",
"EGYP",
"EGYPTIANHIEROGLYPHFORMATCONTROLS",
"EGYPTIANHIEROGLYPHS",
@@ -552,6 +558,7 @@ char* re_strings[] = {
"ELYM",
"ELYMAIC",
"EM",
+ "EMOD",
"EMODIFIER",
"EMOJI",
"EMOJICOMPONENT",
@@ -570,6 +577,7 @@ char* re_strings[] = {
"ENCLOSEDIDEOGRAPHICSUP",
"ENCLOSEDIDEOGRAPHICSUPPLEMENT",
"ENCLOSINGMARK",
+ "EPRES",
"ES",
"ET",
"ETHI",
@@ -590,6 +598,7 @@ char* re_strings[] = {
"EXTENDEDPICTOGRAPHIC",
"EXTENDER",
"EXTENDNUMLET",
+ "EXTPICT",
"F",
"FALSE",
"FARSIYEH",
@@ -678,6 +687,8 @@ char* re_strings[] = {
"HANIFIROHINGYAKINNAYA",
"HANIFIROHINGYAPA",
"HANO",
+ "HANR",
+ "HANREADING",
"HANUNOO",
"HATR",
"HATRAN",
@@ -781,12 +792,14 @@ char* re_strings[] = {
"KHAPH",
"KHAR",
"KHAROSHTHI",
+ "KHITANSMALLSCRIPT",
"KHMER",
"KHMERSYMBOLS",
"KHMR",
"KHOJ",
"KHOJKI",
"KHUDAWADI",
+ "KITS",
"KNDA",
"KNOTTEDHEH",
"KTHI",
@@ -844,6 +857,8 @@ char* re_strings[] = {
"LINEFEED",
"LINESEPARATOR",
"LISU",
+ "LISUSUP",
+ "LISUSUPPLEMENT",
"LL",
"LM",
"LO",
@@ -1299,6 +1314,7 @@ char* re_strings[] = {
"SYMBOL",
"SYMBOLSANDPICTOGRAPHSEXTA",
"SYMBOLSANDPICTOGRAPHSEXTENDEDA",
+ "SYMBOLSFORLEGACYCOMPUTING",
"SYRC",
"SYRIAC",
"SYRIACSUP",
@@ -1326,6 +1342,8 @@ char* re_strings[] = {
"TANG",
"TANGUT",
"TANGUTCOMPONENTS",
+ "TANGUTSUP",
+ "TANGUTSUPPLEMENT",
"TAVT",
"TAW",
"TEHMARBUTA",
@@ -1350,6 +1368,7 @@ char* re_strings[] = {
"TONEMARK",
"TOP",
"TOPANDBOTTOM",
+ "TOPANDBOTTOMANDLEFT",
"TOPANDBOTTOMANDRIGHT",
"TOPANDLEFT",
"TOPANDLEFTANDRIGHT",
@@ -1424,6 +1443,8 @@ char* re_strings[] = {
"YEHBARREE",
"YEHWITHTAIL",
"YES",
+ "YEZI",
+ "YEZIDI",
"YI",
"YIII",
"YIJING",
@@ -1449,1760 +1470,1777 @@ char* re_strings[] = {
"ZZZZ",
};
-/* strings: 13687 bytes. */
-
-/* properties. */
-
+/* Properties. */
RE_Property re_properties[] = {
- { 591, 0, 0},
- { 588, 0, 0},
- { 271, 1, 1},
- { 270, 1, 1},
- {1185, 2, 2},
- {1183, 2, 2},
- {1186, 3, 2},
- {1187, 3, 2},
- {1384, 4, 3},
- {1378, 4, 3},
- { 617, 5, 4},
- { 589, 5, 4},
- {1193, 6, 5},
- {1182, 6, 5},
- { 900, 7, 6},
- { 189, 8, 6},
- { 188, 8, 6},
- { 828, 9, 6},
- { 827, 9, 6},
- {1350, 10, 6},
- {1349, 10, 6},
- { 314, 11, 6},
- { 316, 12, 6},
- { 371, 12, 6},
- { 363, 13, 6},
- { 457, 13, 6},
- { 365, 14, 6},
- { 459, 14, 6},
- { 364, 15, 6},
- { 458, 15, 6},
- { 361, 16, 6},
- { 455, 16, 6},
- { 362, 17, 6},
- { 456, 17, 6},
- { 694, 18, 6},
- { 690, 18, 6},
- { 684, 19, 6},
- { 683, 19, 6},
- {1393, 20, 6},
- {1392, 20, 6},
- {1391, 21, 6},
- {1390, 21, 6},
- { 484, 22, 6},
- { 492, 22, 6},
- { 618, 23, 6},
- { 626, 23, 6},
- { 616, 24, 6},
- { 620, 24, 6},
- { 619, 25, 6},
- { 627, 25, 6},
- {1380, 26, 6},
- {1388, 26, 6},
- {1231, 26, 6},
- { 263, 27, 6},
- { 261, 27, 6},
- { 730, 28, 6},
- { 728, 28, 6},
- { 477, 29, 6},
- { 681, 30, 6},
- {1147, 31, 6},
- {1144, 31, 6},
- {1311, 32, 6},
- {1310, 32, 6},
- {1071, 33, 6},
- {1050, 33, 6},
- { 667, 34, 6},
- { 666, 34, 6},
- { 221, 35, 6},
- { 177, 35, 6},
- {1064, 36, 6},
- {1030, 36, 6},
- { 686, 37, 6},
- { 685, 37, 6},
- { 494, 38, 6},
- { 493, 38, 6},
- { 566, 39, 6},
- { 563, 39, 6},
- {1070, 40, 6},
- {1049, 40, 6},
- {1076, 41, 6},
- {1078, 41, 6},
- {1003, 42, 6},
- { 980, 42, 6},
- {1066, 43, 6},
- {1035, 43, 6},
- { 692, 44, 6},
- { 691, 44, 6},
- { 695, 45, 6},
- { 693, 45, 6},
- {1149, 46, 6},
- {1346, 47, 6},
- {1342, 47, 6},
- {1065, 48, 6},
- {1032, 48, 6},
- { 486, 49, 6},
- { 485, 49, 6},
- {1222, 50, 6},
- {1188, 50, 6},
- { 826, 51, 6},
- { 825, 51, 6},
- {1068, 52, 6},
- {1037, 52, 6},
- {1067, 53, 6},
- {1036, 53, 6},
- {1194, 54, 6},
- {1240, 54, 6},
- {1355, 55, 6},
- {1371, 55, 6},
- {1090, 56, 6},
- {1091, 56, 6},
- {1089, 57, 6},
- {1088, 57, 6},
- {1129, 58, 6},
- {1095, 58, 6},
- {1150, 59, 6},
- {1155, 59, 6},
- { 650, 60, 7},
- { 678, 60, 7},
- { 262, 61, 8},
- { 251, 61, 8},
- { 308, 62, 9},
- { 320, 62, 9},
- { 483, 63, 10},
- { 510, 63, 10},
- { 517, 64, 11},
- { 515, 64, 11},
- { 732, 65, 12},
- { 726, 65, 12},
- { 733, 66, 13},
- { 734, 66, 13},
- { 818, 67, 14},
- { 793, 67, 14},
- {1023, 68, 15},
- {1016, 68, 15},
- {1024, 69, 16},
- {1027, 69, 16},
- { 265, 70, 6},
- { 264, 70, 6},
- { 699, 71, 17},
- { 707, 71, 17},
- { 701, 72, 18},
- { 708, 72, 18},
- { 531, 73, 19},
- { 535, 74, 19},
- { 533, 75, 19},
- { 534, 76, 19},
- { 532, 77, 19},
- { 565, 78, 19},
- { 990, 79, 20},
- { 989, 79, 20},
- { 988, 80, 21},
- { 987, 80, 21},
- { 994, 81, 20},
- { 993, 81, 20},
- { 992, 82, 21},
- { 991, 82, 21},
- { 192, 83, 6},
- { 187, 83, 6},
- { 200, 84, 6},
- { 269, 85, 6},
- { 615, 86, 6},
- {1130, 87, 6},
- {1383, 88, 6},
- {1389, 89, 6},
- {1121, 90, 6},
- {1120, 91, 6},
- {1122, 92, 6},
- {1123, 93, 6},
-};
-
-/* properties: 672 bytes. */
-
-/* property values. */
-
+ { 189, 0, 0}, /* ALPHABETIC */
+ { 188, 0, 0}, /* ALPHA */
+ { 192, 1, 0}, /* ALPHANUMERIC */
+ { 187, 1, 0}, /* ALNUM */
+ { 200, 2, 0}, /* ANY */
+ { 221, 3, 0}, /* ASCIIHEXDIGIT */
+ { 177, 3, 0}, /* AHEX */
+ { 262, 4, 1}, /* BIDICLASS */
+ { 251, 4, 1}, /* BC */
+ { 263, 5, 0}, /* BIDICONTROL */
+ { 261, 5, 0}, /* BIDIC */
+ { 265, 6, 0}, /* BIDIMIRRORED */
+ { 264, 6, 0}, /* BIDIM */
+ { 269, 7, 0}, /* BLANK */
+ { 271, 8, 2}, /* BLOCK */
+ { 270, 8, 2}, /* BLK */
+ { 308, 9, 3}, /* CANONICALCOMBININGCLASS */
+ { 320, 9, 3}, /* CCC */
+ { 314, 10, 0}, /* CASED */
+ { 316, 11, 0}, /* CASEIGNORABLE */
+ { 373, 11, 0}, /* CI */
+ { 361, 12, 0}, /* CHANGESWHENCASEFOLDED */
+ { 459, 12, 0}, /* CWCF */
+ { 362, 13, 0}, /* CHANGESWHENCASEMAPPED */
+ { 460, 13, 0}, /* CWCM */
+ { 363, 14, 0}, /* CHANGESWHENLOWERCASED */
+ { 461, 14, 0}, /* CWL */
+ { 364, 15, 0}, /* CHANGESWHENTITLECASED */
+ { 462, 15, 0}, /* CWT */
+ { 365, 16, 0}, /* CHANGESWHENUPPERCASED */
+ { 463, 16, 0}, /* CWU */
+ { 481, 17, 0}, /* DASH */
+ { 487, 18, 4}, /* DECOMPOSITIONTYPE */
+ { 516, 18, 4}, /* DT */
+ { 488, 19, 0}, /* DEFAULTIGNORABLECODEPOINT */
+ { 496, 19, 0}, /* DI */
+ { 490, 20, 0}, /* DEPRECATED */
+ { 489, 20, 0}, /* DEP */
+ { 498, 21, 0}, /* DIACRITIC */
+ { 497, 21, 0}, /* DIA */
+ { 523, 22, 5}, /* EASTASIANWIDTH */
+ { 521, 22, 5}, /* EA */
+ { 539, 23, 0}, /* EMOJI */
+ { 540, 24, 0}, /* EMOJICOMPONENT */
+ { 528, 24, 0}, /* ECOMP */
+ { 541, 25, 0}, /* EMOJIMODIFIER */
+ { 537, 25, 0}, /* EMOD */
+ { 542, 26, 0}, /* EMOJIMODIFIERBASE */
+ { 525, 26, 0}, /* EBASE */
+ { 543, 27, 0}, /* EMOJIPRESENTATION */
+ { 556, 27, 0}, /* EPRES */
+ { 574, 28, 0}, /* EXTENDEDPICTOGRAPHIC */
+ { 577, 28, 0}, /* EXTPICT */
+ { 575, 29, 0}, /* EXTENDER */
+ { 572, 29, 0}, /* EXT */
+ { 601, 30, 6}, /* GENERALCATEGORY */
+ { 598, 30, 6}, /* GC */
+ { 625, 31, 0}, /* GRAPH */
+ { 626, 32, 0}, /* GRAPHEMEBASE */
+ { 630, 32, 0}, /* GRBASE */
+ { 627, 33, 7}, /* GRAPHEMECLUSTERBREAK */
+ { 599, 33, 7}, /* GCB */
+ { 628, 34, 0}, /* GRAPHEMEEXTEND */
+ { 636, 34, 0}, /* GREXT */
+ { 629, 35, 0}, /* GRAPHEMELINK */
+ { 637, 35, 0}, /* GRLINK */
+ { 660, 36, 8}, /* HANGULSYLLABLETYPE */
+ { 690, 36, 8}, /* HST */
+ { 679, 37, 0}, /* HEXDIGIT */
+ { 678, 37, 0}, /* HEX */
+ { 693, 38, 0}, /* HYPHEN */
+ { 696, 39, 0}, /* IDCONTINUE */
+ { 695, 39, 0}, /* IDC */
+ { 698, 40, 0}, /* IDEOGRAPHIC */
+ { 697, 40, 0}, /* IDEO */
+ { 704, 41, 0}, /* IDSBINARYOPERATOR */
+ { 703, 41, 0}, /* IDSB */
+ { 706, 42, 0}, /* IDSTART */
+ { 702, 42, 0}, /* IDS */
+ { 707, 43, 0}, /* IDSTRINARYOPERATOR */
+ { 705, 43, 0}, /* IDST */
+ { 711, 44, 9}, /* INDICPOSITIONALCATEGORY */
+ { 719, 44, 9}, /* INPC */
+ { 713, 45, 10}, /* INDICSYLLABICCATEGORY */
+ { 720, 45, 10}, /* INSC */
+ { 742, 46, 0}, /* JOINCONTROL */
+ { 740, 46, 0}, /* JOINC */
+ { 744, 47, 11}, /* JOININGGROUP */
+ { 738, 47, 11}, /* JG */
+ { 745, 48, 12}, /* JOININGTYPE */
+ { 746, 48, 12}, /* JT */
+ { 832, 49, 13}, /* LINEBREAK */
+ { 807, 49, 13}, /* LB */
+ { 842, 50, 0}, /* LOGICALORDEREXCEPTION */
+ { 841, 50, 0}, /* LOE */
+ { 844, 51, 0}, /* LOWERCASE */
+ { 843, 51, 0}, /* LOWER */
+ { 916, 52, 0}, /* MATH */
+ {1004, 53, 14}, /* NFCQUICKCHECK */
+ {1003, 53, 14}, /* NFCQC */
+ {1006, 54, 15}, /* NFDQUICKCHECK */
+ {1005, 54, 15}, /* NFDQC */
+ {1008, 55, 14}, /* NFKCQUICKCHECK */
+ {1007, 55, 14}, /* NFKCQC */
+ {1010, 56, 15}, /* NFKDQUICKCHECK */
+ {1009, 56, 15}, /* NFKDQC */
+ {1019, 57, 0}, /* NONCHARACTERCODEPOINT */
+ { 996, 57, 0}, /* NCHAR */
+ {1039, 58, 16}, /* NUMERICTYPE */
+ {1032, 58, 16}, /* NT */
+ {1040, 59, 17}, /* NUMERICVALUE */
+ {1043, 59, 17}, /* NV */
+ {1080, 60, 0}, /* OTHERALPHABETIC */
+ {1046, 60, 0}, /* OALPHA */
+ {1081, 61, 0}, /* OTHERDEFAULTIGNORABLECODEPOINT */
+ {1048, 61, 0}, /* ODI */
+ {1082, 62, 0}, /* OTHERGRAPHEMEEXTEND */
+ {1051, 62, 0}, /* OGREXT */
+ {1083, 63, 0}, /* OTHERIDCONTINUE */
+ {1052, 63, 0}, /* OIDC */
+ {1084, 64, 0}, /* OTHERIDSTART */
+ {1053, 64, 0}, /* OIDS */
+ {1086, 65, 0}, /* OTHERLOWERCASE */
+ {1065, 65, 0}, /* OLOWER */
+ {1087, 66, 0}, /* OTHERMATH */
+ {1066, 66, 0}, /* OMATH */
+ {1092, 67, 0}, /* OTHERUPPERCASE */
+ {1094, 67, 0}, /* OUPPER */
+ {1105, 68, 0}, /* PATTERNSYNTAX */
+ {1104, 68, 0}, /* PATSYN */
+ {1106, 69, 0}, /* PATTERNWHITESPACE */
+ {1107, 69, 0}, /* PATWS */
+ {1136, 70, 0}, /* POSIXALNUM */
+ {1137, 71, 0}, /* POSIXDIGIT */
+ {1138, 72, 0}, /* POSIXPUNCT */
+ {1139, 73, 0}, /* POSIXXDIGIT */
+ {1145, 74, 0}, /* PREPENDEDCONCATENATIONMARK */
+ {1111, 74, 0}, /* PCM */
+ {1146, 75, 0}, /* PRINT */
+ {1163, 76, 0}, /* QUOTATIONMARK */
+ {1160, 76, 0}, /* QMARK */
+ {1165, 77, 0}, /* RADICAL */
+ {1166, 78, 0}, /* REGIONALINDICATOR */
+ {1171, 78, 0}, /* RI */
+ {1201, 79, 18}, /* SCRIPT */
+ {1199, 79, 18}, /* SC */
+ {1202, 80, 18}, /* SCRIPTEXTENSIONS */
+ {1203, 80, 18}, /* SCX */
+ {1209, 81, 19}, /* SENTENCEBREAK */
+ {1198, 81, 19}, /* SB */
+ {1210, 82, 0}, /* SENTENCETERMINAL */
+ {1256, 82, 0}, /* STERM */
+ {1238, 83, 0}, /* SOFTDOTTED */
+ {1204, 83, 0}, /* SD */
+ {1330, 84, 0}, /* TERMINALPUNCTUATION */
+ {1329, 84, 0}, /* TERM */
+ {1366, 85, 0}, /* UNIFIEDIDEOGRAPH */
+ {1362, 85, 0}, /* UIDEO */
+ {1370, 86, 0}, /* UPPERCASE */
+ {1369, 86, 0}, /* UPPER */
+ {1375, 87, 0}, /* VARIATIONSELECTOR */
+ {1391, 87, 0}, /* VS */
+ {1400, 88, 0}, /* WHITESPACE */
+ {1408, 88, 0}, /* WSPACE */
+ {1247, 88, 0}, /* SPACE */
+ {1403, 89, 0}, /* WORD */
+ {1404, 90, 20}, /* WORDBREAK */
+ {1398, 90, 20}, /* WB */
+ {1409, 91, 0}, /* XDIGIT */
+ {1411, 92, 0}, /* XIDCONTINUE */
+ {1410, 92, 0}, /* XIDC */
+ {1413, 93, 0}, /* XIDSTART */
+ {1412, 93, 0}, /* XIDS */
+};
+
+/* Property values. */
RE_PropertyValue re_property_values[] = {
- {1343, 0, 0},
- { 406, 0, 0},
- {1351, 0, 1},
- { 835, 0, 1},
- { 829, 0, 2},
- { 822, 0, 2},
- {1323, 0, 3},
- { 834, 0, 3},
- { 946, 0, 4},
- { 823, 0, 4},
- {1069, 0, 5},
- { 824, 0, 5},
- {1007, 0, 6},
- { 944, 0, 6},
- { 547, 0, 7},
- { 910, 0, 7},
- {1233, 0, 8},
- { 909, 0, 8},
- { 482, 0, 9},
- { 981, 0, 9},
- { 499, 0, 9},
- { 808, 0, 10},
- { 998, 0, 10},
- {1073, 0, 11},
- { 999, 0, 11},
- {1232, 0, 12},
- {1419, 0, 12},
- { 820, 0, 13},
- {1417, 0, 13},
- {1087, 0, 14},
- {1418, 0, 14},
- { 439, 0, 15},
- { 319, 0, 15},
- { 407, 0, 15},
- { 580, 0, 16},
- { 358, 0, 16},
- {1131, 0, 17},
- { 408, 0, 17},
- {1267, 0, 18},
- { 449, 0, 18},
- { 478, 0, 19},
- {1096, 0, 19},
- {1053, 0, 20},
- {1134, 0, 20},
- { 404, 0, 21},
- {1099, 0, 21},
- { 424, 0, 22},
- {1094, 0, 22},
- {1074, 0, 23},
- {1117, 0, 23},
- { 905, 0, 24},
- {1214, 0, 24},
- { 453, 0, 25},
- {1183, 0, 25},
- { 948, 0, 26},
- {1213, 0, 26},
- {1075, 0, 27},
- {1221, 0, 27},
- { 706, 0, 28},
- {1114, 0, 28},
- { 575, 0, 29},
- {1101, 0, 29},
- {1063, 0, 30},
- { 301, 0, 30},
- { 302, 0, 30},
- { 806, 0, 31},
- { 769, 0, 31},
- { 770, 0, 31},
- { 898, 0, 32},
- { 844, 0, 32},
- { 415, 0, 32},
- { 845, 0, 32},
- {1019, 0, 33},
- { 968, 0, 33},
- { 969, 0, 33},
- {1138, 0, 34},
- {1082, 0, 34},
- {1137, 0, 34},
- {1083, 0, 34},
- {1274, 0, 35},
- {1172, 0, 35},
- {1173, 0, 35},
- {1196, 0, 36},
- {1410, 0, 36},
- {1411, 0, 36},
- { 315, 0, 37},
- { 794, 0, 37},
- { 222, 0, 38},
- {1000, 1, 0},
- { 978, 1, 0},
- { 245, 1, 1},
- { 220, 1, 1},
- { 779, 1, 2},
- { 778, 1, 2},
- { 777, 1, 2},
- { 786, 1, 3},
- { 780, 1, 3},
- { 788, 1, 4},
- { 782, 1, 4},
- { 716, 1, 5},
- { 715, 1, 5},
- {1234, 1, 6},
- { 947, 1, 6},
- { 410, 1, 7},
- { 495, 1, 7},
- { 622, 1, 8},
- { 621, 1, 8},
- { 462, 1, 9},
- { 470, 1, 10},
- { 469, 1, 10},
- { 471, 1, 10},
- { 216, 1, 11},
- { 661, 1, 12},
- { 203, 1, 13},
- {1278, 1, 14},
- { 215, 1, 15},
- { 214, 1, 15},
- {1316, 1, 16},
- { 996, 1, 17},
- {1177, 1, 18},
- { 865, 1, 19},
- {1280, 1, 20},
- {1279, 1, 20},
- { 205, 1, 21},
- { 204, 1, 21},
- { 489, 1, 22},
- { 257, 1, 23},
- { 631, 1, 24},
- { 628, 1, 25},
- {1055, 1, 26},
- {1297, 1, 27},
- {1309, 1, 28},
- { 749, 1, 29},
- { 852, 1, 30},
- {1211, 1, 31},
- {1317, 1, 32},
- { 774, 1, 33},
- {1318, 1, 34},
- { 962, 1, 35},
- { 597, 1, 36},
- { 646, 1, 37},
- { 721, 1, 37},
- { 551, 1, 38},
- { 557, 1, 39},
- { 556, 1, 39},
- { 367, 1, 40},
- {1344, 1, 41},
- {1338, 1, 41},
- { 306, 1, 41},
- {1034, 1, 42},
- {1170, 1, 43},
- {1283, 1, 44},
- { 656, 1, 45},
- { 297, 1, 46},
- {1285, 1, 47},
- { 759, 1, 48},
- { 952, 1, 49},
- {1345, 1, 50},
- {1339, 1, 50},
- { 811, 1, 51},
- {1288, 1, 52},
- { 985, 1, 53},
- { 760, 1, 54},
- { 295, 1, 55},
- {1289, 1, 56},
- { 411, 1, 57},
- { 496, 1, 57},
- { 240, 1, 58},
- {1244, 1, 59},
- { 248, 1, 60},
- { 805, 1, 61},
- {1038, 1, 62},
- { 468, 1, 63},
- { 465, 1, 63},
- { 599, 1, 64},
- { 598, 1, 64},
- {1246, 1, 65},
- {1245, 1, 65},
- {1359, 1, 66},
- {1358, 1, 66},
- {1111, 1, 67},
- {1110, 1, 67},
- {1112, 1, 68},
- {1113, 1, 68},
- { 413, 1, 69},
- { 498, 1, 69},
- { 787, 1, 70},
- { 781, 1, 70},
- { 624, 1, 71},
- { 623, 1, 71},
- { 592, 1, 72},
- {1138, 1, 72},
- {1253, 1, 73},
- {1252, 1, 73},
- { 454, 1, 74},
- { 412, 1, 75},
- { 497, 1, 75},
- { 416, 1, 75},
- { 807, 1, 76},
- {1020, 1, 77},
- { 219, 1, 78},
- { 903, 1, 79},
- { 904, 1, 79},
- { 936, 1, 80},
- { 941, 1, 80},
- { 440, 1, 81},
- {1054, 1, 82},
- {1031, 1, 82},
- { 540, 1, 83},
- { 539, 1, 83},
- { 282, 1, 84},
- { 272, 1, 85},
- { 593, 1, 86},
- { 933, 1, 87},
- { 940, 1, 87},
- { 500, 1, 88},
- { 931, 1, 89},
- { 937, 1, 89},
- {1255, 1, 90},
- {1248, 1, 90},
- { 289, 1, 91},
- { 288, 1, 91},
- {1256, 1, 92},
- {1249, 1, 92},
- { 932, 1, 93},
- { 938, 1, 93},
- {1258, 1, 94},
- {1254, 1, 94},
- { 934, 1, 95},
- { 930, 1, 95},
- { 604, 1, 96},
- { 789, 1, 97},
- { 783, 1, 97},
- { 442, 1, 98},
- { 601, 1, 99},
- { 600, 1, 99},
- {1320, 1, 100},
- { 554, 1, 101},
- { 552, 1, 101},
- { 466, 1, 102},
- { 463, 1, 102},
- {1259, 1, 103},
- {1265, 1, 103},
- { 390, 1, 104},
- { 389, 1, 104},
- { 748, 1, 105},
- { 747, 1, 105},
- { 687, 1, 106},
- { 683, 1, 106},
- { 393, 1, 107},
- { 392, 1, 107},
- { 672, 1, 108},
- { 751, 1, 109},
- { 275, 1, 110},
- { 645, 1, 111},
- { 421, 1, 111},
- { 746, 1, 112},
- { 277, 1, 113},
- { 276, 1, 113},
- { 391, 1, 114},
- { 754, 1, 115},
- { 752, 1, 115},
- { 544, 1, 116},
- { 543, 1, 116},
- { 377, 1, 117},
- { 375, 1, 117},
- { 395, 1, 118},
- { 383, 1, 118},
- {1405, 1, 119},
- {1404, 1, 119},
- { 394, 1, 120},
- { 374, 1, 120},
- {1407, 1, 121},
- {1406, 1, 122},
- { 821, 1, 123},
- {1353, 1, 124},
- { 467, 1, 125},
- { 464, 1, 125},
- { 242, 1, 126},
- { 949, 1, 127},
- { 790, 1, 128},
- { 784, 1, 128},
- {1273, 1, 129},
- { 418, 1, 130},
- { 698, 1, 130},
- {1103, 1, 131},
- {1181, 1, 132},
- { 491, 1, 133},
- { 490, 1, 133},
- { 755, 1, 134},
- {1153, 1, 135},
- { 647, 1, 136},
- { 722, 1, 136},
- { 725, 1, 137},
- { 966, 1, 138},
- { 964, 1, 138},
- { 360, 1, 139},
- { 965, 1, 140},
- { 963, 1, 140},
- {1290, 1, 141},
- { 918, 1, 142},
- { 917, 1, 142},
- { 555, 1, 143},
- { 553, 1, 143},
- { 791, 1, 144},
- { 785, 1, 144},
- { 369, 1, 145},
- { 368, 1, 145},
- { 916, 1, 146},
- { 649, 1, 147},
- { 644, 1, 147},
- { 648, 1, 148},
- { 723, 1, 148},
- { 670, 1, 149},
- { 668, 1, 150},
- { 669, 1, 150},
- { 830, 1, 151},
- {1132, 1, 152},
- {1136, 1, 152},
- {1131, 1, 152},
- { 379, 1, 153},
- { 381, 1, 153},
- { 191, 1, 154},
- { 190, 1, 154},
- { 212, 1, 155},
- { 210, 1, 155},
- {1356, 1, 156},
- {1371, 1, 156},
- {1362, 1, 157},
- { 414, 1, 158},
- { 638, 1, 158},
- { 378, 1, 159},
- { 376, 1, 159},
- {1217, 1, 160},
- {1216, 1, 160},
- { 213, 1, 161},
- { 211, 1, 161},
- { 640, 1, 162},
- { 637, 1, 162},
- {1235, 1, 163},
- { 817, 1, 164},
- { 816, 1, 165},
- { 172, 1, 166},
- { 198, 1, 167},
- { 199, 1, 168},
- {1105, 1, 169},
- {1104, 1, 169},
- { 841, 1, 170},
- { 312, 1, 171},
- { 443, 1, 172},
- {1041, 1, 173},
- { 612, 1, 174},
- {1043, 1, 175},
- {1341, 1, 176},
- {1044, 1, 177},
- { 487, 1, 178},
- {1200, 1, 179},
- {1062, 1, 180},
- {1059, 1, 181},
- { 526, 1, 182},
- { 317, 1, 183},
- { 814, 1, 184},
- { 461, 1, 185},
- { 696, 1, 186},
- {1086, 1, 187},
- { 971, 1, 188},
- { 658, 1, 189},
- {1109, 1, 190},
- { 843, 1, 191},
- { 924, 1, 192},
- { 923, 1, 193},
- { 758, 1, 194},
- {1046, 1, 195},
- {1042, 1, 196},
- { 868, 1, 197},
- { 234, 1, 198},
- { 710, 1, 199},
- { 709, 1, 200},
- {1135, 1, 201},
- {1047, 1, 202},
- {1040, 1, 203},
- { 652, 1, 204},
- {1169, 1, 205},
- {1168, 1, 205},
- {1045, 1, 206},
- {1224, 1, 207},
- { 528, 1, 208},
- { 285, 1, 209},
- { 738, 1, 210},
- {1227, 1, 211},
- { 359, 1, 212},
- { 846, 1, 213},
- {1199, 1, 214},
- {1212, 1, 215},
- { 763, 1, 216},
- { 959, 1, 217},
- { 764, 1, 218},
- { 614, 1, 219},
- { 983, 1, 220},
- {1322, 1, 221},
- {1206, 1, 222},
- { 945, 1, 223},
- { 954, 1, 224},
- { 953, 1, 224},
- {1294, 1, 225},
- { 178, 1, 226},
- { 502, 1, 227},
- {1376, 1, 228},
- { 974, 1, 229},
- {1413, 1, 230},
- {1229, 1, 231},
- {1093, 1, 232},
- { 259, 1, 233},
- { 897, 1, 234},
- { 899, 1, 235},
- { 630, 1, 236},
- { 851, 1, 237},
- {1299, 1, 238},
- {1298, 1, 238},
- { 450, 1, 239},
- { 452, 1, 240},
- { 451, 1, 240},
- { 516, 1, 241},
- { 524, 1, 242},
- { 523, 1, 243},
- { 195, 1, 244},
- { 244, 1, 245},
- { 243, 1, 245},
- { 955, 1, 246},
- { 247, 1, 247},
- {1084, 1, 248},
- { 912, 1, 249},
- { 925, 1, 250},
- { 689, 1, 251},
- { 688, 1, 251},
- {1302, 1, 252},
- {1303, 1, 253},
- { 744, 1, 254},
- { 743, 1, 254},
- { 742, 1, 255},
- { 741, 1, 255},
- {1219, 1, 256},
- {1218, 1, 256},
- {1026, 1, 257},
- { 513, 1, 258},
- {1203, 1, 259},
- { 300, 1, 260},
- { 299, 1, 260},
- { 961, 1, 261},
- { 960, 1, 261},
- { 197, 1, 262},
- { 196, 1, 262},
- { 906, 1, 263},
- {1292, 1, 264},
- {1291, 1, 264},
- { 445, 1, 265},
- { 444, 1, 265},
- { 902, 1, 266},
- { 901, 1, 266},
- {1268, 1, 267},
- { 606, 1, 268},
- { 605, 1, 268},
- {1029, 1, 269},
- {1374, 1, 270},
- { 920, 1, 271},
- { 170, 1, 272},
- { 700, 1, 273},
- {1077, 1, 274},
- { 208, 1, 275},
- { 207, 1, 275},
- { 849, 1, 276},
- { 848, 1, 276},
- { 504, 1, 277},
- { 503, 1, 277},
- {1115, 1, 278},
- { 541, 1, 279},
- { 542, 1, 279},
- { 546, 1, 280},
- { 545, 1, 280},
- { 935, 1, 281},
- { 939, 1, 281},
- { 536, 1, 282},
- {1057, 1, 283},
- {1335, 1, 284},
- {1334, 1, 284},
- { 184, 1, 285},
- { 183, 1, 285},
- { 595, 1, 286},
- { 594, 1, 286},
- {1257, 1, 287},
- {1250, 1, 287},
- {1260, 1, 288},
- {1266, 1, 288},
- { 370, 1, 289},
- {1276, 1, 290},
- {1275, 1, 290},
- { 396, 1, 291},
- { 384, 1, 291},
- { 397, 1, 292},
- { 385, 1, 292},
- { 398, 1, 293},
- { 386, 1, 293},
- { 399, 1, 294},
- { 387, 1, 294},
- { 400, 1, 295},
- { 388, 1, 295},
- { 380, 1, 296},
- { 382, 1, 296},
- {1286, 1, 297},
- {1357, 1, 298},
- {1372, 1, 298},
- {1261, 1, 299},
- {1263, 1, 299},
- {1262, 1, 300},
- {1264, 1, 300},
- {1347, 2, 0},
- {1424, 2, 0},
- { 417, 2, 1},
- {1423, 2, 1},
- { 776, 2, 2},
- { 792, 2, 2},
- { 621, 2, 3},
- { 625, 2, 3},
- { 462, 2, 4},
- { 472, 2, 4},
- { 216, 2, 5},
- { 218, 2, 5},
- { 661, 2, 6},
- { 660, 2, 6},
- { 203, 2, 7},
- { 202, 2, 7},
- {1278, 2, 8},
- {1277, 2, 8},
- {1316, 2, 9},
- {1315, 2, 9},
- { 489, 2, 10},
- { 488, 2, 10},
- { 257, 2, 11},
- { 256, 2, 11},
- { 631, 2, 12},
- { 632, 2, 12},
- { 628, 2, 13},
- { 629, 2, 13},
- {1055, 2, 14},
- {1058, 2, 14},
- {1297, 2, 15},
- {1300, 2, 15},
- {1309, 2, 16},
- {1308, 2, 16},
- { 749, 2, 17},
- { 765, 2, 17},
- { 852, 2, 18},
- { 943, 2, 18},
- {1211, 2, 19},
- {1210, 2, 19},
- {1317, 2, 20},
- { 774, 2, 21},
- { 775, 2, 21},
- {1318, 2, 22},
- {1319, 2, 22},
- { 962, 2, 23},
- { 967, 2, 23},
- { 597, 2, 24},
- { 596, 2, 24},
- { 644, 2, 25},
- { 643, 2, 25},
- { 551, 2, 26},
- { 550, 2, 26},
- { 367, 2, 27},
- { 366, 2, 27},
- { 305, 2, 28},
- { 309, 2, 28},
- {1034, 2, 29},
- {1033, 2, 29},
- {1170, 2, 30},
- {1171, 2, 30},
- { 759, 2, 31},
- { 761, 2, 31},
- { 952, 2, 32},
- { 951, 2, 32},
- { 672, 2, 33},
- { 671, 2, 33},
- { 751, 2, 34},
- { 740, 2, 34},
- { 275, 2, 35},
- { 274, 2, 35},
- { 642, 2, 36},
- { 651, 2, 36},
- {1402, 2, 37},
- {1403, 2, 37},
- {1041, 2, 38},
- { 720, 2, 38},
- { 612, 2, 39},
- { 611, 2, 39},
- { 487, 2, 40},
- { 509, 2, 40},
- { 703, 2, 41},
- {1416, 2, 41},
- {1141, 2, 41},
- {1283, 2, 42},
- {1314, 2, 42},
- { 656, 2, 43},
- { 655, 2, 43},
- { 297, 2, 44},
- { 296, 2, 44},
- {1285, 2, 45},
- {1284, 2, 45},
- { 811, 2, 46},
- { 810, 2, 46},
- {1288, 2, 47},
- {1295, 2, 47},
- { 815, 2, 48},
- { 813, 2, 48},
- {1341, 2, 49},
- {1340, 2, 49},
- {1200, 2, 50},
- {1201, 2, 50},
- {1062, 2, 51},
- {1061, 2, 51},
- { 460, 2, 52},
- { 447, 2, 52},
- { 288, 2, 53},
- { 287, 2, 53},
- { 295, 2, 54},
- { 294, 2, 54},
- { 442, 2, 55},
- { 441, 2, 55},
- {1140, 2, 55},
- { 985, 2, 56},
- {1296, 2, 56},
- { 604, 2, 57},
- { 603, 2, 57},
- {1320, 2, 58},
- {1313, 2, 58},
- {1273, 2, 59},
- {1272, 2, 59},
- {1044, 2, 60},
- {1394, 2, 60},
- { 758, 2, 61},
- { 757, 2, 61},
- { 240, 2, 62},
- { 239, 2, 62},
- { 450, 2, 63},
- {1395, 2, 63},
- {1109, 2, 64},
- {1108, 2, 64},
- {1103, 2, 65},
- {1102, 2, 65},
- { 996, 2, 66},
- { 997, 2, 66},
- {1244, 2, 67},
- {1243, 2, 67},
- { 805, 2, 68},
- { 804, 2, 68},
- {1038, 2, 69},
- {1039, 2, 69},
- {1353, 2, 70},
- {1354, 2, 70},
- {1181, 2, 71},
- {1180, 2, 71},
- { 755, 2, 72},
- { 739, 2, 72},
- {1153, 2, 73},
- {1162, 2, 73},
- { 841, 2, 74},
- { 840, 2, 74},
- { 312, 2, 75},
- { 311, 2, 75},
- { 843, 2, 76},
- { 842, 2, 76},
- { 360, 2, 77},
- {1289, 2, 78},
- { 773, 2, 78},
- {1290, 2, 79},
- {1304, 2, 79},
- { 234, 2, 80},
- { 235, 2, 80},
- { 524, 2, 81},
- { 522, 2, 81},
- {1177, 2, 82},
- {1178, 2, 82},
- { 821, 2, 83},
- { 242, 2, 84},
- { 241, 2, 84},
- { 725, 2, 85},
- { 724, 2, 85},
- { 916, 2, 86},
- { 957, 2, 86},
- { 696, 2, 87},
- { 217, 2, 87},
- {1046, 2, 88},
- {1179, 2, 88},
- { 710, 2, 89},
- {1133, 2, 89},
- { 709, 2, 90},
- {1106, 2, 90},
- {1047, 2, 91},
- {1056, 2, 91},
- { 738, 2, 92},
- { 767, 2, 92},
- { 248, 2, 93},
- { 249, 2, 93},
- { 285, 2, 94},
- { 284, 2, 94},
- { 865, 2, 95},
- { 864, 2, 95},
- { 359, 2, 96},
- { 303, 2, 96},
- { 923, 2, 97},
- { 921, 2, 97},
- { 924, 2, 98},
- { 922, 2, 98},
- { 925, 2, 99},
- {1116, 2, 99},
- {1199, 2, 100},
- {1204, 2, 100},
- {1227, 2, 101},
- {1226, 2, 101},
- {1294, 2, 102},
- {1293, 2, 102},
- { 317, 2, 103},
- { 176, 2, 103},
- { 247, 2, 104},
- { 246, 2, 104},
- { 513, 2, 105},
- { 512, 2, 105},
- { 526, 2, 106},
- { 525, 2, 106},
- { 614, 2, 107},
- { 613, 2, 107},
- {1084, 2, 108},
- { 675, 2, 108},
- { 763, 2, 109},
- { 762, 2, 109},
- { 814, 2, 110},
- { 812, 2, 110},
- { 846, 2, 111},
- { 847, 2, 111},
- { 868, 2, 112},
- { 867, 2, 112},
- { 920, 2, 113},
- { 919, 2, 113},
- { 945, 2, 114},
- { 955, 2, 115},
- { 956, 2, 115},
- {1042, 2, 116},
- { 976, 2, 116},
- { 971, 2, 117},
- { 979, 2, 117},
- {1086, 2, 118},
- {1085, 2, 118},
- {1093, 2, 119},
- {1092, 2, 119},
- {1043, 2, 120},
- {1100, 2, 120},
- {1135, 2, 121},
- {1107, 2, 121},
- {1206, 2, 122},
- {1205, 2, 122},
- { 764, 2, 123},
- {1208, 2, 123},
- {1322, 2, 124},
- {1321, 2, 124},
- {1376, 2, 125},
- {1375, 2, 125},
- { 178, 2, 126},
- { 195, 2, 127},
- { 674, 2, 127},
- { 658, 2, 128},
- { 657, 2, 128},
- { 959, 2, 129},
- { 958, 2, 129},
- {1040, 2, 130},
- { 679, 2, 130},
- {1207, 2, 131},
- {1198, 2, 131},
- { 170, 2, 132},
- { 171, 2, 132},
- { 259, 2, 133},
- { 260, 2, 133},
- { 897, 2, 134},
- { 896, 2, 134},
- { 983, 2, 135},
- {1059, 2, 136},
- {1060, 2, 136},
- {1302, 2, 137},
- {1301, 2, 137},
- { 899, 2, 138},
- { 610, 2, 138},
- {1026, 2, 139},
- {1014, 2, 139},
- {1229, 2, 140},
- {1228, 2, 140},
- {1413, 2, 141},
- {1414, 2, 141},
- { 502, 2, 142},
- { 501, 2, 142},
- { 630, 2, 143},
- { 609, 2, 143},
- { 851, 2, 144},
- { 850, 2, 144},
- { 912, 2, 145},
- { 913, 2, 145},
- { 652, 2, 146},
- {1166, 2, 146},
- {1224, 2, 147},
- {1223, 2, 147},
- {1045, 2, 148},
- {1225, 2, 148},
- { 528, 2, 149},
- { 527, 2, 149},
- { 974, 2, 150},
- { 973, 2, 150},
- {1029, 2, 151},
- { 676, 2, 151},
- {1374, 2, 152},
- {1379, 2, 152},
- { 753, 2, 153},
- { 677, 2, 153},
- {1063, 3, 0},
- {1396, 3, 0},
- { 507, 3, 1},
- { 508, 3, 1},
- {1209, 3, 2},
- {1236, 3, 2},
- { 662, 3, 3},
- { 673, 3, 3},
- { 448, 3, 4},
- { 809, 3, 5},
- { 984, 3, 6},
- { 998, 3, 6},
- { 564, 3, 7},
- {1150, 3, 8},
- {1155, 3, 8},
- { 580, 3, 9},
- { 578, 3, 9},
- { 751, 3, 10},
- { 736, 3, 10},
- { 186, 3, 11},
- { 795, 3, 11},
- { 926, 3, 12},
- { 942, 3, 12},
- { 927, 3, 13},
- { 944, 3, 13},
- { 928, 3, 14},
- { 908, 3, 14},
- {1022, 3, 15},
- {1017, 3, 15},
- { 567, 3, 16},
- { 561, 3, 16},
- {1421, 3, 17},
- {1387, 3, 18},
- { 519, 3, 19},
- { 518, 3, 19},
- { 520, 3, 20},
- { 521, 3, 20},
- { 530, 3, 21},
- { 529, 3, 21},
- { 608, 3, 22},
- { 587, 3, 22},
- {1063, 4, 0},
- {1396, 4, 0},
- {1128, 4, 1},
- {1125, 4, 1},
- { 448, 4, 2},
- { 809, 4, 3},
- { 439, 4, 4},
- { 406, 4, 4},
- { 564, 4, 5},
- { 561, 4, 5},
- {1150, 4, 6},
- {1155, 4, 6},
- {1233, 4, 7},
- {1214, 4, 7},
- { 769, 4, 8},
- {1352, 4, 9},
- {1282, 4, 10},
- { 836, 4, 11},
- { 838, 4, 12},
- {1421, 4, 13},
- { 519, 4, 14},
- { 518, 4, 14},
- { 520, 4, 15},
- { 521, 4, 15},
- { 530, 4, 16},
- { 529, 4, 16},
- { 608, 4, 17},
- { 587, 4, 17},
- {1063, 5, 0},
- {1396, 5, 0},
- { 448, 5, 1},
- { 809, 5, 2},
- { 564, 5, 3},
- { 561, 5, 3},
- {1195, 5, 4},
- {1189, 5, 4},
- { 580, 5, 5},
- { 578, 5, 5},
- {1230, 5, 6},
- { 827, 5, 7},
- { 824, 5, 7},
- {1349, 5, 8},
- {1348, 5, 8},
- {1048, 5, 9},
- { 795, 5, 9},
- {1022, 5, 10},
- {1017, 5, 10},
- { 228, 5, 11},
- { 223, 5, 11},
- {1240, 5, 12},
- {1239, 5, 12},
- { 402, 5, 13},
- { 401, 5, 13},
- {1184, 5, 14},
- {1183, 5, 14},
- { 999, 6, 0},
- { 968, 6, 0},
- { 568, 6, 0},
- { 569, 6, 0},
- {1401, 6, 1},
- {1397, 6, 1},
- {1282, 6, 1},
- {1336, 6, 1},
- {1010, 7, 0},
- { 970, 7, 0},
- { 796, 7, 1},
- { 769, 7, 1},
- {1369, 7, 2},
- {1352, 7, 2},
- {1332, 7, 3},
- {1282, 7, 3},
- { 837, 7, 4},
- { 836, 7, 4},
- { 839, 7, 5},
- { 838, 7, 5},
- { 800, 8, 0},
- { 769, 8, 0},
- {1158, 8, 1},
- {1148, 8, 1},
- { 558, 8, 2},
- { 537, 8, 2},
- { 559, 8, 3},
- { 548, 8, 3},
- { 560, 8, 4},
- { 549, 8, 4},
- { 209, 8, 5},
- { 194, 8, 5},
- { 419, 8, 6},
- { 449, 8, 6},
- {1087, 8, 7},
- { 236, 8, 7},
- {1191, 8, 8},
- {1172, 8, 8},
- {1380, 8, 9},
- {1386, 8, 9},
- {1072, 8, 10},
- {1051, 8, 10},
- { 281, 8, 11},
- { 273, 8, 11},
- {1007, 8, 12},
- {1015, 8, 12},
- { 206, 8, 13},
- { 181, 8, 13},
- { 803, 8, 14},
- { 833, 8, 14},
- {1161, 8, 15},
- {1165, 8, 15},
- { 801, 8, 16},
- { 831, 8, 16},
- {1159, 8, 17},
- {1163, 8, 17},
- {1118, 8, 18},
- {1097, 8, 18},
- { 802, 8, 19},
- { 832, 8, 19},
- {1160, 8, 20},
- {1164, 8, 20},
- { 577, 8, 21},
- { 583, 8, 21},
- {1119, 8, 22},
- {1098, 8, 22},
- {1011, 9, 0},
- { 1, 9, 0},
- {1012, 9, 0},
- {1080, 9, 1},
- { 2, 9, 1},
- {1079, 9, 1},
- {1018, 9, 2},
- { 142, 9, 2},
- { 995, 9, 2},
- { 745, 9, 3},
- { 151, 9, 3},
- { 768, 9, 3},
- {1363, 9, 4},
- { 158, 9, 4},
- {1370, 9, 4},
- { 321, 9, 5},
- { 21, 9, 5},
- { 324, 9, 6},
- { 33, 9, 6},
- { 326, 9, 7},
- { 37, 9, 7},
- { 329, 9, 8},
- { 40, 9, 8},
- { 333, 9, 9},
- { 45, 9, 9},
- { 334, 9, 10},
- { 46, 9, 10},
- { 335, 9, 11},
- { 48, 9, 11},
- { 336, 9, 12},
- { 49, 9, 12},
- { 337, 9, 13},
- { 51, 9, 13},
- { 338, 9, 14},
- { 52, 9, 14},
- { 339, 9, 15},
- { 56, 9, 15},
- { 340, 9, 16},
- { 63, 9, 16},
- { 341, 9, 17},
- { 68, 9, 17},
- { 342, 9, 18},
- { 74, 9, 18},
- { 343, 9, 19},
- { 79, 9, 19},
- { 344, 9, 20},
- { 81, 9, 20},
- { 345, 9, 21},
- { 82, 9, 21},
- { 346, 9, 22},
- { 83, 9, 22},
- { 347, 9, 23},
- { 84, 9, 23},
- { 348, 9, 24},
- { 85, 9, 24},
- { 349, 9, 25},
- { 95, 9, 25},
- { 350, 9, 26},
- { 100, 9, 26},
- { 351, 9, 27},
- { 101, 9, 27},
- { 352, 9, 28},
- { 102, 9, 28},
- { 353, 9, 29},
- { 103, 9, 29},
- { 354, 9, 30},
- { 104, 9, 30},
- { 355, 9, 31},
- { 105, 9, 31},
- { 356, 9, 32},
- { 157, 9, 32},
- { 357, 9, 33},
- { 165, 9, 33},
- { 322, 9, 34},
- { 31, 9, 34},
- { 323, 9, 35},
- { 32, 9, 35},
- { 325, 9, 36},
- { 36, 9, 36},
- { 327, 9, 37},
- { 38, 9, 37},
- { 328, 9, 38},
- { 39, 9, 38},
- { 330, 9, 39},
- { 42, 9, 39},
- { 331, 9, 40},
- { 43, 9, 40},
- { 231, 9, 41},
- { 62, 9, 41},
- { 226, 9, 41},
- { 229, 9, 42},
- { 64, 9, 42},
- { 224, 9, 42},
- { 230, 9, 43},
- { 65, 9, 43},
- { 225, 9, 43},
- { 254, 9, 44},
- { 67, 9, 44},
- { 268, 9, 44},
- { 253, 9, 45},
- { 69, 9, 45},
- { 236, 9, 45},
- { 255, 9, 46},
- { 70, 9, 46},
- { 283, 9, 46},
- { 797, 9, 47},
- { 71, 9, 47},
- { 769, 9, 47},
- {1156, 9, 48},
- { 72, 9, 48},
- {1148, 9, 48},
- { 168, 9, 49},
- { 73, 9, 49},
- { 181, 9, 49},
- { 167, 9, 50},
- { 75, 9, 50},
- { 166, 9, 50},
- { 169, 9, 51},
- { 76, 9, 51},
- { 201, 9, 51},
- { 506, 9, 52},
- { 77, 9, 52},
- { 479, 9, 52},
- { 505, 9, 53},
- { 78, 9, 53},
- { 474, 9, 53},
- { 714, 9, 54},
- { 80, 9, 54},
- { 717, 9, 54},
- { 332, 9, 55},
- { 44, 9, 55},
- { 232, 9, 56},
- { 57, 9, 56},
- { 227, 9, 56},
- {1004, 10, 0},
- { 307, 10, 1},
- { 304, 10, 1},
- { 420, 10, 2},
- { 409, 10, 2},
- { 579, 10, 3},
- {1001, 10, 4},
- { 978, 10, 4},
- { 705, 10, 5},
- { 704, 10, 5},
- { 914, 10, 6},
- { 911, 10, 6},
- { 574, 10, 7},
- { 573, 10, 7},
- { 719, 10, 8},
- { 718, 10, 8},
- { 372, 10, 9},
- { 538, 10, 9},
- {1251, 10, 10},
- {1247, 10, 10},
- {1242, 10, 11},
- {1361, 10, 12},
- {1360, 10, 12},
- {1381, 10, 13},
- { 977, 10, 14},
- { 975, 10, 14},
- {1215, 10, 15},
- {1220, 10, 15},
- {1238, 10, 16},
- {1237, 10, 16},
- { 582, 10, 17},
- { 581, 10, 17},
- { 982, 11, 0},
- { 968, 11, 0},
- { 193, 11, 1},
- { 166, 11, 1},
- { 639, 11, 2},
- { 633, 11, 2},
- {1381, 11, 3},
- {1373, 11, 3},
- { 584, 11, 4},
- { 568, 11, 4},
- { 977, 11, 5},
- { 970, 11, 5},
- {1002, 12, 0},
- { 180, 12, 1},
- { 182, 12, 2},
- { 185, 12, 3},
- { 252, 12, 4},
- { 258, 12, 5},
- { 475, 12, 6},
- { 476, 12, 7},
- { 514, 12, 8},
- { 572, 12, 9},
- { 576, 12, 10},
- { 585, 12, 11},
- { 586, 12, 12},
- { 636, 12, 13},
- { 641, 12, 14},
- {1307, 12, 14},
- { 659, 12, 15},
- { 663, 12, 16},
- { 664, 12, 17},
- { 665, 12, 18},
- { 737, 12, 19},
- { 750, 12, 20},
- { 766, 12, 21},
- { 771, 12, 22},
- { 772, 12, 23},
- { 915, 12, 24},
- { 929, 12, 25},
- {1009, 12, 26},
- {1025, 12, 27},
- {1099, 12, 28},
- {1142, 12, 29},
- {1143, 12, 30},
- {1152, 12, 31},
- {1154, 12, 32},
- {1175, 12, 33},
- {1176, 12, 34},
- {1190, 12, 35},
- {1192, 12, 36},
- {1202, 12, 37},
- {1269, 12, 38},
- {1287, 12, 39},
- {1305, 12, 40},
- {1306, 12, 41},
- {1312, 12, 42},
- {1377, 12, 43},
- {1281, 12, 44},
- {1398, 12, 45},
- {1399, 12, 46},
- {1400, 12, 47},
- {1408, 12, 48},
- {1409, 12, 49},
- {1412, 12, 50},
- {1415, 12, 51},
- { 756, 12, 52},
- { 571, 12, 53},
- { 298, 12, 54},
- { 570, 12, 55},
- {1028, 12, 56},
- {1167, 12, 57},
- {1241, 12, 58},
- { 869, 12, 59},
- { 870, 12, 60},
- { 871, 12, 61},
- { 872, 12, 62},
- { 873, 12, 63},
- { 874, 12, 64},
- { 875, 12, 65},
- { 876, 12, 66},
- { 877, 12, 67},
- { 878, 12, 68},
- { 879, 12, 69},
- { 880, 12, 70},
- { 881, 12, 71},
- { 882, 12, 72},
- { 883, 12, 73},
- { 884, 12, 74},
- { 885, 12, 75},
- { 886, 12, 76},
- { 887, 12, 77},
- { 888, 12, 78},
- { 889, 12, 79},
- { 890, 12, 80},
- { 891, 12, 81},
- { 892, 12, 82},
- { 893, 12, 83},
- { 894, 12, 84},
- { 895, 12, 85},
- { 173, 12, 86},
- { 175, 12, 87},
- { 174, 12, 88},
- { 857, 12, 89},
- { 854, 12, 90},
- { 860, 12, 91},
- { 863, 12, 92},
- { 858, 12, 93},
- { 859, 12, 94},
- { 853, 12, 95},
- { 861, 12, 96},
- { 855, 12, 97},
- { 856, 12, 98},
- { 862, 12, 99},
- { 654, 12, 100},
- { 653, 12, 101},
- {1006, 13, 0},
- {1337, 13, 0},
- { 729, 13, 1},
- { 301, 13, 1},
- { 511, 13, 2},
- { 473, 13, 2},
- {1157, 13, 3},
- {1148, 13, 3},
- { 799, 13, 4},
- { 769, 13, 4},
- {1333, 13, 5},
- {1282, 13, 5},
- {1347, 14, 0},
- {1396, 14, 0},
- {1053, 14, 1},
- {1052, 14, 1},
- { 404, 14, 2},
- { 401, 14, 2},
- {1146, 14, 3},
- {1145, 14, 3},
- { 607, 14, 4},
- { 602, 14, 4},
- {1008, 14, 5},
- {1013, 14, 5},
- { 562, 14, 6},
- { 561, 14, 6},
- { 293, 14, 7},
- {1270, 14, 7},
- { 702, 14, 8},
- { 717, 14, 8},
- {1127, 14, 9},
- {1126, 14, 9},
- {1124, 14, 10},
- {1117, 14, 10},
- {1022, 14, 11},
- {1017, 14, 11},
- { 189, 14, 12},
- { 181, 14, 12},
- { 686, 14, 13},
- { 682, 14, 13},
- { 711, 14, 14},
- { 697, 14, 14},
- { 712, 14, 14},
- { 681, 14, 15},
- { 680, 14, 15},
- { 415, 14, 16},
- { 405, 14, 16},
- { 291, 14, 17},
- { 250, 14, 17},
- { 290, 14, 18},
- { 238, 14, 18},
- {1231, 14, 19},
- {1230, 14, 19},
- { 866, 14, 20},
- { 267, 14, 20},
- { 313, 14, 21},
- { 448, 14, 21},
- { 819, 14, 22},
- { 809, 14, 22},
- { 438, 14, 23},
- { 318, 14, 23},
- { 422, 14, 24},
- {1174, 14, 24},
- { 193, 14, 25},
- { 179, 14, 25},
- { 292, 14, 26},
- { 237, 14, 26},
- {1267, 14, 27},
- {1197, 14, 27},
- {1422, 14, 28},
- {1420, 14, 28},
- { 986, 14, 29},
- { 998, 14, 29},
- {1385, 14, 30},
- {1382, 14, 30},
- { 727, 14, 31},
- { 735, 14, 32},
- { 734, 14, 33},
- { 634, 14, 34},
- { 635, 14, 35},
- { 403, 14, 36},
- { 446, 14, 36},
- { 662, 14, 37},
- { 673, 14, 37},
- { 423, 14, 38},
- { 373, 14, 38},
- {1150, 14, 39},
- {1155, 14, 39},
- { 519, 14, 40},
- { 518, 14, 40},
- { 530, 14, 41},
- { 529, 14, 41},
- {1421, 14, 42},
- {1004, 15, 0},
- {1022, 15, 1},
- {1017, 15, 1},
- { 499, 15, 2},
- { 492, 15, 2},
- { 481, 15, 3},
- { 480, 15, 3},
- { 972, 16, 0},
- { 0, 16, 1},
- { 1, 16, 2},
- { 11, 16, 3},
- { 6, 16, 4},
- { 19, 16, 5},
- { 16, 16, 6},
- { 13, 16, 7},
- { 10, 16, 8},
- { 94, 16, 9},
- { 92, 16, 10},
- { 8, 16, 11},
- { 5, 16, 12},
- { 4, 16, 13},
- { 3, 16, 14},
- { 20, 16, 15},
- { 18, 16, 16},
- { 17, 16, 17},
- { 89, 16, 18},
- { 15, 16, 19},
- { 87, 16, 20},
- { 14, 16, 21},
- { 12, 16, 22},
- { 9, 16, 23},
- { 93, 16, 24},
- { 55, 16, 25},
- { 127, 16, 26},
- { 7, 16, 27},
- { 143, 16, 28},
- { 91, 16, 29},
- { 130, 16, 30},
- { 54, 16, 31},
- { 90, 16, 32},
- { 110, 16, 33},
- { 129, 16, 34},
- { 145, 16, 35},
- { 34, 16, 36},
- { 2, 16, 37},
- { 88, 16, 38},
- { 53, 16, 39},
- { 128, 16, 40},
- { 86, 16, 41},
- { 144, 16, 42},
- { 109, 16, 43},
- { 159, 16, 44},
- { 126, 16, 45},
- { 35, 16, 46},
- { 136, 16, 47},
- { 41, 16, 48},
- { 142, 16, 49},
- { 47, 16, 50},
- { 151, 16, 51},
- { 50, 16, 52},
- { 158, 16, 53},
- { 21, 16, 54},
- { 33, 16, 55},
- { 37, 16, 56},
- { 40, 16, 57},
- { 45, 16, 58},
- { 46, 16, 59},
- { 48, 16, 60},
- { 49, 16, 61},
- { 51, 16, 62},
- { 52, 16, 63},
- { 56, 16, 64},
- { 63, 16, 65},
- { 68, 16, 66},
- { 74, 16, 67},
- { 79, 16, 68},
- { 81, 16, 69},
- { 82, 16, 70},
- { 83, 16, 71},
- { 84, 16, 72},
- { 85, 16, 73},
- { 95, 16, 74},
- { 100, 16, 75},
- { 101, 16, 76},
- { 102, 16, 77},
- { 103, 16, 78},
- { 104, 16, 79},
- { 105, 16, 80},
- { 106, 16, 81},
- { 107, 16, 82},
- { 108, 16, 83},
- { 111, 16, 84},
- { 116, 16, 85},
- { 117, 16, 86},
- { 118, 16, 87},
- { 120, 16, 88},
- { 121, 16, 89},
- { 122, 16, 90},
- { 123, 16, 91},
- { 124, 16, 92},
- { 125, 16, 93},
- { 131, 16, 94},
- { 137, 16, 95},
- { 146, 16, 96},
- { 152, 16, 97},
- { 160, 16, 98},
- { 22, 16, 99},
- { 57, 16, 100},
- { 96, 16, 101},
- { 112, 16, 102},
- { 132, 16, 103},
- { 138, 16, 104},
- { 147, 16, 105},
- { 153, 16, 106},
- { 161, 16, 107},
- { 23, 16, 108},
- { 58, 16, 109},
- { 97, 16, 110},
- { 113, 16, 111},
- { 133, 16, 112},
- { 139, 16, 113},
- { 148, 16, 114},
- { 154, 16, 115},
- { 162, 16, 116},
- { 24, 16, 117},
- { 59, 16, 118},
- { 98, 16, 119},
- { 114, 16, 120},
- { 134, 16, 121},
- { 140, 16, 122},
- { 149, 16, 123},
- { 155, 16, 124},
- { 163, 16, 125},
- { 25, 16, 126},
- { 60, 16, 127},
- { 66, 16, 128},
- { 99, 16, 129},
- { 115, 16, 130},
- { 119, 16, 131},
- { 135, 16, 132},
- { 141, 16, 133},
- { 150, 16, 134},
- { 156, 16, 135},
- { 164, 16, 136},
- { 26, 16, 137},
- { 27, 16, 138},
- { 61, 16, 139},
- { 28, 16, 140},
- { 29, 16, 141},
- { 30, 16, 142},
- { 970, 17, 0},
- {1156, 17, 1},
- { 797, 17, 2},
- {1365, 17, 3},
- { 798, 17, 4},
- {1326, 17, 5},
- { 278, 17, 6},
- {1327, 17, 7},
- {1331, 17, 8},
- {1329, 17, 9},
- {1330, 17, 10},
- { 280, 17, 11},
- { 279, 17, 12},
- {1328, 17, 13},
- {1081, 17, 14},
- {1063, 18, 0},
- { 266, 18, 1},
- {1364, 18, 2},
- { 233, 18, 3},
- {1018, 18, 4},
- {1363, 18, 5},
- {1139, 18, 6},
- { 713, 18, 7},
- {1368, 18, 8},
- {1367, 18, 9},
- {1366, 18, 10},
- { 432, 18, 11},
- { 425, 18, 12},
- { 426, 18, 13},
- { 437, 18, 14},
- { 434, 18, 15},
- { 433, 18, 16},
- { 429, 18, 17},
- { 436, 18, 18},
- { 435, 18, 19},
- { 431, 18, 20},
- { 427, 18, 21},
- { 428, 18, 22},
- { 950, 18, 23},
- {1324, 18, 24},
- {1325, 18, 25},
- { 590, 18, 26},
- { 310, 18, 27},
- {1151, 18, 28},
- {1271, 18, 29},
- { 430, 18, 30},
- {1005, 18, 31},
- { 731, 18, 32},
- {1021, 18, 33},
- {1019, 18, 34},
- { 286, 18, 35},
- { 999, 19, 0},
- {1401, 19, 1},
- {1401, 20, 0},
- {1397, 20, 0},
- { 999, 20, 1},
- { 968, 20, 1},
- {1401, 21, 0},
- {1397, 21, 0},
- { 999, 21, 1},
- { 968, 21, 1},
- { 907, 21, 2},
- { 844, 21, 2},
+ {1015, 0, 0}, /* NO */
+ { 984, 0, 0}, /* N */
+ { 578, 0, 0}, /* F */
+ { 579, 0, 0}, /* FALSE */
+ {1421, 0, 1}, /* YES */
+ {1417, 0, 1}, /* Y */
+ {1299, 0, 1}, /* T */
+ {1356, 0, 1}, /* TRUE */
+ { 814, 1, 0}, /* LEFTTORIGHT */
+ { 783, 1, 0}, /* L */
+ { 281, 1, 1}, /* BOUNDARYNEUTRAL */
+ { 273, 1, 1}, /* BN */
+ {1207, 1, 2}, /* SEGMENTSEPARATOR */
+ {1188, 1, 2}, /* S */
+ {1103, 1, 3}, /* PARAGRAPHSEPARATOR */
+ { 236, 1, 3}, /* B */
+ {1400, 1, 4}, /* WHITESPACE */
+ {1406, 1, 4}, /* WS */
+ {1088, 1, 5}, /* OTHERNEUTRAL */
+ {1067, 1, 5}, /* ON */
+ { 569, 1, 6}, /* EUROPEANTERMINATOR */
+ { 558, 1, 6}, /* ET */
+ { 568, 1, 7}, /* EUROPEANSEPARATOR */
+ { 557, 1, 7}, /* ES */
+ { 423, 1, 8}, /* COMMONSEPARATOR */
+ { 453, 1, 8}, /* CS */
+ { 567, 1, 9}, /* EUROPEANNUMBER */
+ { 545, 1, 9}, /* EN */
+ {1023, 1, 10}, /* NONSPACINGMARK */
+ {1031, 1, 10}, /* NSM */
+ {1174, 1, 11}, /* RIGHTTOLEFT */
+ {1164, 1, 11}, /* R */
+ { 209, 1, 12}, /* ARABICNUMBER */
+ { 194, 1, 12}, /* AN */
+ { 206, 1, 13}, /* ARABICLETTER */
+ { 181, 1, 13}, /* AL */
+ { 815, 1, 14}, /* LEFTTORIGHTEMBEDDING */
+ { 847, 1, 14}, /* LRE */
+ {1175, 1, 15}, /* RIGHTTOLEFTEMBEDDING */
+ {1179, 1, 15}, /* RLE */
+ {1134, 1, 16}, /* POPDIRECTIONALFORMAT */
+ {1113, 1, 16}, /* PDF */
+ { 817, 1, 17}, /* LEFTTORIGHTOVERRIDE */
+ { 849, 1, 17}, /* LRO */
+ {1177, 1, 18}, /* RIGHTTOLEFTOVERRIDE */
+ {1181, 1, 18}, /* RLO */
+ { 816, 1, 19}, /* LEFTTORIGHTISOLATE */
+ { 848, 1, 19}, /* LRI */
+ {1176, 1, 20}, /* RIGHTTOLEFTISOLATE */
+ {1180, 1, 20}, /* RLI */
+ { 587, 1, 21}, /* FIRSTSTRONGISOLATE */
+ { 593, 1, 21}, /* FSI */
+ {1135, 1, 22}, /* POPDIRECTIONALISOLATE */
+ {1114, 1, 22}, /* PDI */
+ {1016, 2, 0}, /* NOBLOCK */
+ { 994, 2, 0}, /* NB */
+ { 245, 2, 1}, /* BASICLATIN */
+ { 220, 2, 1}, /* ASCII */
+ { 793, 2, 2}, /* LATIN1SUPPLEMENT */
+ { 792, 2, 2}, /* LATIN1SUP */
+ { 791, 2, 2}, /* LATIN1 */
+ { 800, 2, 3}, /* LATINEXTENDEDA */
+ { 794, 2, 3}, /* LATINEXTA */
+ { 802, 2, 4}, /* LATINEXTENDEDB */
+ { 796, 2, 4}, /* LATINEXTB */
+ { 728, 2, 5}, /* IPAEXTENSIONS */
+ { 727, 2, 5}, /* IPAEXT */
+ {1250, 2, 6}, /* SPACINGMODIFIERLETTERS */
+ { 963, 2, 6}, /* MODIFIERLETTERS */
+ { 414, 2, 7}, /* COMBININGDIACRITICALMARKS */
+ { 499, 2, 7}, /* DIACRITICALS */
+ { 632, 2, 8}, /* GREEKANDCOPTIC */
+ { 631, 2, 8}, /* GREEK */
+ { 466, 2, 9}, /* CYRILLIC */
+ { 474, 2, 10}, /* CYRILLICSUPPLEMENT */
+ { 473, 2, 10}, /* CYRILLICSUP */
+ { 475, 2, 10}, /* CYRILLICSUPPLEMENTARY */
+ { 216, 2, 11}, /* ARMENIAN */
+ { 673, 2, 12}, /* HEBREW */
+ { 203, 2, 13}, /* ARABIC */
+ {1295, 2, 14}, /* SYRIAC */
+ { 215, 2, 15}, /* ARABICSUPPLEMENT */
+ { 214, 2, 15}, /* ARABICSUP */
+ {1335, 2, 16}, /* THAANA */
+ {1012, 2, 17}, /* NKO */
+ {1193, 2, 18}, /* SAMARITAN */
+ { 881, 2, 19}, /* MANDAIC */
+ {1297, 2, 20}, /* SYRIACSUPPLEMENT */
+ {1296, 2, 20}, /* SYRIACSUP */
+ { 205, 2, 21}, /* ARABICEXTENDEDA */
+ { 204, 2, 21}, /* ARABICEXTA */
+ { 493, 2, 22}, /* DEVANAGARI */
+ { 257, 2, 23}, /* BENGALI */
+ { 641, 2, 24}, /* GURMUKHI */
+ { 638, 2, 25}, /* GUJARATI */
+ {1071, 2, 26}, /* ORIYA */
+ {1314, 2, 27}, /* TAMIL */
+ {1328, 2, 28}, /* TELUGU */
+ { 761, 2, 29}, /* KANNADA */
+ { 868, 2, 30}, /* MALAYALAM */
+ {1227, 2, 31}, /* SINHALA */
+ {1336, 2, 32}, /* THAI */
+ { 788, 2, 33}, /* LAO */
+ {1337, 2, 34}, /* TIBETAN */
+ { 978, 2, 35}, /* MYANMAR */
+ { 607, 2, 36}, /* GEORGIAN */
+ { 656, 2, 37}, /* HANGULJAMO */
+ { 733, 2, 37}, /* JAMO */
+ { 560, 2, 38}, /* ETHIOPIC */
+ { 566, 2, 39}, /* ETHIOPICSUPPLEMENT */
+ { 565, 2, 39}, /* ETHIOPICSUP */
+ { 367, 2, 40}, /* CHEROKEE */
+ {1364, 2, 41}, /* UNIFIEDCANADIANABORIGINALSYLLABICS */
+ {1358, 2, 41}, /* UCAS */
+ { 306, 2, 41}, /* CANADIANSYLLABICS */
+ {1050, 2, 42}, /* OGHAM */
+ {1186, 2, 43}, /* RUNIC */
+ {1300, 2, 44}, /* TAGALOG */
+ { 668, 2, 45}, /* HANUNOO */
+ { 297, 2, 46}, /* BUHID */
+ {1302, 2, 47}, /* TAGBANWA */
+ { 772, 2, 48}, /* KHMER */
+ { 968, 2, 49}, /* MONGOLIAN */
+ {1365, 2, 50}, /* UNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED */
+ {1359, 2, 50}, /* UCASEXT */
+ { 825, 2, 51}, /* LIMBU */
+ {1305, 2, 52}, /* TAILE */
+ {1001, 2, 53}, /* NEWTAILUE */
+ { 773, 2, 54}, /* KHMERSYMBOLS */
+ { 295, 2, 55}, /* BUGINESE */
+ {1306, 2, 56}, /* TAITHAM */
+ { 415, 2, 57}, /* COMBININGDIACRITICALMARKSEXTENDED */
+ { 500, 2, 57}, /* DIACRITICALSEXT */
+ { 240, 2, 58}, /* BALINESE */
+ {1260, 2, 59}, /* SUNDANESE */
+ { 248, 2, 60}, /* BATAK */
+ { 819, 2, 61}, /* LEPCHA */
+ {1054, 2, 62}, /* OLCHIKI */
+ { 472, 2, 63}, /* CYRILLICEXTENDEDC */
+ { 469, 2, 63}, /* CYRILLICEXTC */
+ { 609, 2, 64}, /* GEORGIANEXTENDED */
+ { 608, 2, 64}, /* GEORGIANEXT */
+ {1262, 2, 65}, /* SUNDANESESUPPLEMENT */
+ {1261, 2, 65}, /* SUNDANESESUP */
+ {1379, 2, 66}, /* VEDICEXTENSIONS */
+ {1378, 2, 66}, /* VEDICEXT */
+ {1127, 2, 67}, /* PHONETICEXTENSIONS */
+ {1126, 2, 67}, /* PHONETICEXT */
+ {1128, 2, 68}, /* PHONETICEXTENSIONSSUPPLEMENT */
+ {1129, 2, 68}, /* PHONETICEXTSUP */
+ { 417, 2, 69}, /* COMBININGDIACRITICALMARKSSUPPLEMENT */
+ { 502, 2, 69}, /* DIACRITICALSSUP */
+ { 801, 2, 70}, /* LATINEXTENDEDADDITIONAL */
+ { 795, 2, 70}, /* LATINEXTADDITIONAL */
+ { 634, 2, 71}, /* GREEKEXTENDED */
+ { 633, 2, 71}, /* GREEKEXT */
+ { 602, 2, 72}, /* GENERALPUNCTUATION */
+ {1154, 2, 72}, /* PUNCTUATION */
+ {1269, 2, 73}, /* SUPERSCRIPTSANDSUBSCRIPTS */
+ {1268, 2, 73}, /* SUPERANDSUB */
+ { 458, 2, 74}, /* CURRENCYSYMBOLS */
+ { 416, 2, 75}, /* COMBININGDIACRITICALMARKSFORSYMBOLS */
+ { 501, 2, 75}, /* DIACRITICALSFORSYMBOLS */
+ { 420, 2, 75}, /* COMBININGMARKSFORSYMBOLS */
+ { 821, 2, 76}, /* LETTERLIKESYMBOLS */
+ {1036, 2, 77}, /* NUMBERFORMS */
+ { 219, 2, 78}, /* ARROWS */
+ { 919, 2, 79}, /* MATHEMATICALOPERATORS */
+ { 920, 2, 79}, /* MATHOPERATORS */
+ { 952, 2, 80}, /* MISCELLANEOUSTECHNICAL */
+ { 957, 2, 80}, /* MISCTECHNICAL */
+ { 444, 2, 81}, /* CONTROLPICTURES */
+ {1070, 2, 82}, /* OPTICALCHARACTERRECOGNITION */
+ {1047, 2, 82}, /* OCR */
+ { 548, 2, 83}, /* ENCLOSEDALPHANUMERICS */
+ { 547, 2, 83}, /* ENCLOSEDALPHANUM */
+ { 282, 2, 84}, /* BOXDRAWING */
+ { 272, 2, 85}, /* BLOCKELEMENTS */
+ { 603, 2, 86}, /* GEOMETRICSHAPES */
+ { 949, 2, 87}, /* MISCELLANEOUSSYMBOLS */
+ { 956, 2, 87}, /* MISCSYMBOLS */
+ { 505, 2, 88}, /* DINGBATS */
+ { 947, 2, 89}, /* MISCELLANEOUSMATHEMATICALSYMBOLSA */
+ { 953, 2, 89}, /* MISCMATHSYMBOLSA */
+ {1271, 2, 90}, /* SUPPLEMENTALARROWSA */
+ {1264, 2, 90}, /* SUPARROWSA */
+ { 289, 2, 91}, /* BRAILLEPATTERNS */
+ { 288, 2, 91}, /* BRAILLE */
+ {1272, 2, 92}, /* SUPPLEMENTALARROWSB */
+ {1265, 2, 92}, /* SUPARROWSB */
+ { 948, 2, 93}, /* MISCELLANEOUSMATHEMATICALSYMBOLSB */
+ { 954, 2, 93}, /* MISCMATHSYMBOLSB */
+ {1274, 2, 94}, /* SUPPLEMENTALMATHEMATICALOPERATORS */
+ {1270, 2, 94}, /* SUPMATHOPERATORS */
+ { 950, 2, 95}, /* MISCELLANEOUSSYMBOLSANDARROWS */
+ { 946, 2, 95}, /* MISCARROWS */
+ { 614, 2, 96}, /* GLAGOLITIC */
+ { 803, 2, 97}, /* LATINEXTENDEDC */
+ { 797, 2, 97}, /* LATINEXTC */
+ { 446, 2, 98}, /* COPTIC */
+ { 611, 2, 99}, /* GEORGIANSUPPLEMENT */
+ { 610, 2, 99}, /* GEORGIANSUP */
+ {1339, 2, 100}, /* TIFINAGH */
+ { 563, 2, 101}, /* ETHIOPICEXTENDED */
+ { 561, 2, 101}, /* ETHIOPICEXT */
+ { 470, 2, 102}, /* CYRILLICEXTENDEDA */
+ { 467, 2, 102}, /* CYRILLICEXTA */
+ {1275, 2, 103}, /* SUPPLEMENTALPUNCTUATION */
+ {1281, 2, 103}, /* SUPPUNCTUATION */
+ { 393, 2, 104}, /* CJKRADICALSSUPPLEMENT */
+ { 392, 2, 104}, /* CJKRADICALSSUP */
+ { 760, 2, 105}, /* KANGXIRADICALS */
+ { 759, 2, 105}, /* KANGXI */
+ { 699, 2, 106}, /* IDEOGRAPHICDESCRIPTIONCHARACTERS */
+ { 695, 2, 106}, /* IDC */
+ { 396, 2, 107}, /* CJKSYMBOLSANDPUNCTUATION */
+ { 395, 2, 107}, /* CJKSYMBOLS */
+ { 684, 2, 108}, /* HIRAGANA */
+ { 763, 2, 109}, /* KATAKANA */
+ { 275, 2, 110}, /* BOPOMOFO */
+ { 655, 2, 111}, /* HANGULCOMPATIBILITYJAMO */
+ { 425, 2, 111}, /* COMPATJAMO */
+ { 758, 2, 112}, /* KANBUN */
+ { 277, 2, 113}, /* BOPOMOFOEXTENDED */
+ { 276, 2, 113}, /* BOPOMOFOEXT */
+ { 394, 2, 114}, /* CJKSTROKES */
+ { 766, 2, 115}, /* KATAKANAPHONETICEXTENSIONS */
+ { 764, 2, 115}, /* KATAKANAEXT */
+ { 552, 2, 116}, /* ENCLOSEDCJKLETTERSANDMONTHS */
+ { 551, 2, 116}, /* ENCLOSEDCJK */
+ { 379, 2, 117}, /* CJKCOMPATIBILITY */
+ { 377, 2, 117}, /* CJKCOMPAT */
+ { 398, 2, 118}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONA */
+ { 385, 2, 118}, /* CJKEXTA */
+ {1427, 2, 119}, /* YIJINGHEXAGRAMSYMBOLS */
+ {1426, 2, 119}, /* YIJING */
+ { 397, 2, 120}, /* CJKUNIFIEDIDEOGRAPHS */
+ { 376, 2, 120}, /* CJK */
+ {1429, 2, 121}, /* YISYLLABLES */
+ {1428, 2, 122}, /* YIRADICALS */
+ { 835, 2, 123}, /* LISU */
+ {1373, 2, 124}, /* VAI */
+ { 471, 2, 125}, /* CYRILLICEXTENDEDB */
+ { 468, 2, 125}, /* CYRILLICEXTB */
+ { 242, 2, 126}, /* BAMUM */
+ { 965, 2, 127}, /* MODIFIERTONELETTERS */
+ { 804, 2, 128}, /* LATINEXTENDEDD */
+ { 798, 2, 128}, /* LATINEXTD */
+ {1289, 2, 129}, /* SYLOTINAGRI */
+ { 422, 2, 130}, /* COMMONINDICNUMBERFORMS */
+ { 710, 2, 130}, /* INDICNUMBERFORMS */
+ {1119, 2, 131}, /* PHAGSPA */
+ {1197, 2, 132}, /* SAURASHTRA */
+ { 495, 2, 133}, /* DEVANAGARIEXTENDED */
+ { 494, 2, 133}, /* DEVANAGARIEXT */
+ { 767, 2, 134}, /* KAYAHLI */
+ {1169, 2, 135}, /* REJANG */
+ { 657, 2, 136}, /* HANGULJAMOEXTENDEDA */
+ { 734, 2, 136}, /* JAMOEXTA */
+ { 737, 2, 137}, /* JAVANESE */
+ { 982, 2, 138}, /* MYANMAREXTENDEDB */
+ { 980, 2, 138}, /* MYANMAREXTB */
+ { 360, 2, 139}, /* CHAM */
+ { 981, 2, 140}, /* MYANMAREXTENDEDA */
+ { 979, 2, 140}, /* MYANMAREXTA */
+ {1307, 2, 141}, /* TAIVIET */
+ { 934, 2, 142}, /* MEETEIMAYEKEXTENSIONS */
+ { 933, 2, 142}, /* MEETEIMAYEKEXT */
+ { 564, 2, 143}, /* ETHIOPICEXTENDEDA */
+ { 562, 2, 143}, /* ETHIOPICEXTA */
+ { 805, 2, 144}, /* LATINEXTENDEDE */
+ { 799, 2, 144}, /* LATINEXTE */
+ { 369, 2, 145}, /* CHEROKEESUPPLEMENT */
+ { 368, 2, 145}, /* CHEROKEESUP */
+ { 932, 2, 146}, /* MEETEIMAYEK */
+ { 659, 2, 147}, /* HANGULSYLLABLES */
+ { 654, 2, 147}, /* HANGUL */
+ { 658, 2, 148}, /* HANGULJAMOEXTENDEDB */
+ { 735, 2, 148}, /* JAMOEXTB */
+ { 682, 2, 149}, /* HIGHSURROGATES */
+ { 680, 2, 150}, /* HIGHPRIVATEUSESURROGATES */
+ { 681, 2, 150}, /* HIGHPUSURROGATES */
+ { 846, 2, 151}, /* LOWSURROGATES */
+ {1148, 2, 152}, /* PRIVATEUSEAREA */
+ {1152, 2, 152}, /* PUA */
+ {1147, 2, 152}, /* PRIVATEUSE */
+ { 381, 2, 153}, /* CJKCOMPATIBILITYIDEOGRAPHS */
+ { 383, 2, 153}, /* CJKCOMPATIDEOGRAPHS */
+ { 191, 2, 154}, /* ALPHABETICPRESENTATIONFORMS */
+ { 190, 2, 154}, /* ALPHABETICPF */
+ { 212, 2, 155}, /* ARABICPRESENTATIONFORMSA */
+ { 210, 2, 155}, /* ARABICPFA */
+ {1376, 2, 156}, /* VARIATIONSELECTORS */
+ {1391, 2, 156}, /* VS */
+ {1382, 2, 157}, /* VERTICALFORMS */
+ { 418, 2, 158}, /* COMBININGHALFMARKS */
+ { 648, 2, 158}, /* HALFMARKS */
+ { 380, 2, 159}, /* CJKCOMPATIBILITYFORMS */
+ { 378, 2, 159}, /* CJKCOMPATFORMS */
+ {1233, 2, 160}, /* SMALLFORMVARIANTS */
+ {1232, 2, 160}, /* SMALLFORMS */
+ { 213, 2, 161}, /* ARABICPRESENTATIONFORMSB */
+ { 211, 2, 161}, /* ARABICPFB */
+ { 650, 2, 162}, /* HALFWIDTHANDFULLWIDTHFORMS */
+ { 647, 2, 162}, /* HALFANDFULLFORMS */
+ {1251, 2, 163}, /* SPECIALS */
+ { 831, 2, 164}, /* LINEARBSYLLABARY */
+ { 830, 2, 165}, /* LINEARBIDEOGRAMS */
+ { 172, 2, 166}, /* AEGEANNUMBERS */
+ { 198, 2, 167}, /* ANCIENTGREEKNUMBERS */
+ { 199, 2, 168}, /* ANCIENTSYMBOLS */
+ {1121, 2, 169}, /* PHAISTOSDISC */
+ {1120, 2, 169}, /* PHAISTOS */
+ { 857, 2, 170}, /* LYCIAN */
+ { 312, 2, 171}, /* CARIAN */
+ { 447, 2, 172}, /* COPTICEPACTNUMBERS */
+ {1057, 2, 173}, /* OLDITALIC */
+ { 622, 2, 174}, /* GOTHIC */
+ {1059, 2, 175}, /* OLDPERMIC */
+ {1361, 2, 176}, /* UGARITIC */
+ {1060, 2, 177}, /* OLDPERSIAN */
+ { 491, 2, 178}, /* DESERET */
+ {1216, 2, 179}, /* SHAVIAN */
+ {1078, 2, 180}, /* OSMANYA */
+ {1075, 2, 181}, /* OSAGE */
+ { 533, 2, 182}, /* ELBASAN */
+ { 317, 2, 183}, /* CAUCASIANALBANIAN */
+ { 828, 2, 184}, /* LINEARA */
+ { 465, 2, 185}, /* CYPRIOTSYLLABARY */
+ { 708, 2, 186}, /* IMPERIALARAMAIC */
+ {1102, 2, 187}, /* PALMYRENE */
+ { 987, 2, 188}, /* NABATAEAN */
+ { 670, 2, 189}, /* HATRAN */
+ {1125, 2, 190}, /* PHOENICIAN */
+ { 859, 2, 191}, /* LYDIAN */
+ { 940, 2, 192}, /* MEROITICHIEROGLYPHS */
+ { 939, 2, 193}, /* MEROITICCURSIVE */
+ { 770, 2, 194}, /* KHAROSHTHI */
+ {1062, 2, 195}, /* OLDSOUTHARABIAN */
+ {1058, 2, 196}, /* OLDNORTHARABIAN */
+ { 884, 2, 197}, /* MANICHAEAN */
+ { 234, 2, 198}, /* AVESTAN */
+ { 722, 2, 199}, /* INSCRIPTIONALPARTHIAN */
+ { 721, 2, 200}, /* INSCRIPTIONALPAHLAVI */
+ {1151, 2, 201}, /* PSALTERPAHLAVI */
+ {1063, 2, 202}, /* OLDTURKIC */
+ {1056, 2, 203}, /* OLDHUNGARIAN */
+ { 662, 2, 204}, /* HANIFIROHINGYA */
+ {1185, 2, 205}, /* RUMINUMERALSYMBOLS */
+ {1184, 2, 205}, /* RUMI */
+ {1423, 2, 206}, /* YEZIDI */
+ {1061, 2, 207}, /* OLDSOGDIAN */
+ {1240, 2, 208}, /* SOGDIAN */
+ { 371, 2, 209}, /* CHORASMIAN */
+ { 535, 2, 210}, /* ELYMAIC */
+ { 285, 2, 211}, /* BRAHMI */
+ { 750, 2, 212}, /* KAITHI */
+ {1243, 2, 213}, /* SORASOMPENG */
+ { 359, 2, 214}, /* CHAKMA */
+ { 862, 2, 215}, /* MAHAJANI */
+ {1215, 2, 216}, /* SHARADA */
+ {1228, 2, 217}, /* SINHALAARCHAICNUMBERS */
+ { 776, 2, 218}, /* KHOJKI */
+ { 975, 2, 219}, /* MULTANI */
+ { 777, 2, 220}, /* KHUDAWADI */
+ { 624, 2, 221}, /* GRANTHA */
+ { 999, 2, 222}, /* NEWA */
+ {1341, 2, 223}, /* TIRHUTA */
+ {1222, 2, 224}, /* SIDDHAM */
+ { 961, 2, 225}, /* MODI */
+ { 970, 2, 226}, /* MONGOLIANSUPPLEMENT */
+ { 969, 2, 226}, /* MONGOLIANSUP */
+ {1311, 2, 227}, /* TAKRI */
+ { 178, 2, 228}, /* AHOM */
+ { 508, 2, 229}, /* DOGRA */
+ {1396, 2, 230}, /* WARANGCITI */
+ { 506, 2, 231}, /* DIVESAKURU */
+ { 990, 2, 232}, /* NANDINAGARI */
+ {1435, 2, 233}, /* ZANABAZARSQUARE */
+ {1245, 2, 234}, /* SOYOMBO */
+ {1109, 2, 235}, /* PAUCINHAU */
+ { 259, 2, 236}, /* BHAIKSUKI */
+ { 913, 2, 237}, /* MARCHEN */
+ { 915, 2, 238}, /* MASARAMGONDI */
+ { 640, 2, 239}, /* GUNJALAGONDI */
+ { 867, 2, 240}, /* MAKASAR */
+ { 837, 2, 241}, /* LISUSUPPLEMENT */
+ { 836, 2, 241}, /* LISUSUP */
+ {1316, 2, 242}, /* TAMILSUPPLEMENT */
+ {1315, 2, 242}, /* TAMILSUP */
+ { 454, 2, 243}, /* CUNEIFORM */
+ { 456, 2, 244}, /* CUNEIFORMNUMBERSANDPUNCTUATION */
+ { 455, 2, 244}, /* CUNEIFORMNUMBERS */
+ { 522, 2, 245}, /* EARLYDYNASTICCUNEIFORM */
+ { 531, 2, 246}, /* EGYPTIANHIEROGLYPHS */
+ { 530, 2, 247}, /* EGYPTIANHIEROGLYPHFORMATCONTROLS */
+ { 195, 2, 248}, /* ANATOLIANHIEROGLYPHS */
+ { 244, 2, 249}, /* BAMUMSUPPLEMENT */
+ { 243, 2, 249}, /* BAMUMSUP */
+ { 971, 2, 250}, /* MRO */
+ { 247, 2, 251}, /* BASSAVAH */
+ {1100, 2, 252}, /* PAHAWHHMONG */
+ { 928, 2, 253}, /* MEDEFAIDRIN */
+ { 941, 2, 254}, /* MIAO */
+ { 701, 2, 255}, /* IDEOGRAPHICSYMBOLSANDPUNCTUATION */
+ { 700, 2, 255}, /* IDEOGRAPHICSYMBOLS */
+ {1319, 2, 256}, /* TANGUT */
+ {1320, 2, 257}, /* TANGUTCOMPONENTS */
+ { 771, 2, 258}, /* KHITANSMALLSCRIPT */
+ {1322, 2, 259}, /* TANGUTSUPPLEMENT */
+ {1321, 2, 259}, /* TANGUTSUP */
+ { 756, 2, 260}, /* KANASUPPLEMENT */
+ { 755, 2, 260}, /* KANASUP */
+ { 754, 2, 261}, /* KANAEXTENDEDA */
+ { 753, 2, 261}, /* KANAEXTA */
+ {1235, 2, 262}, /* SMALLKANAEXTENSION */
+ {1234, 2, 262}, /* SMALLKANAEXT */
+ {1042, 2, 263}, /* NUSHU */
+ { 519, 2, 264}, /* DUPLOYAN */
+ {1219, 2, 265}, /* SHORTHANDFORMATCONTROLS */
+ { 300, 2, 266}, /* BYZANTINEMUSICALSYMBOLS */
+ { 299, 2, 266}, /* BYZANTINEMUSIC */
+ { 977, 2, 267}, /* MUSICALSYMBOLS */
+ { 976, 2, 267}, /* MUSIC */
+ { 197, 2, 268}, /* ANCIENTGREEKMUSICALNOTATION */
+ { 196, 2, 268}, /* ANCIENTGREEKMUSIC */
+ { 922, 2, 269}, /* MAYANNUMERALS */
+ {1309, 2, 270}, /* TAIXUANJINGSYMBOLS */
+ {1308, 2, 270}, /* TAIXUANJING */
+ { 449, 2, 271}, /* COUNTINGRODNUMERALS */
+ { 448, 2, 271}, /* COUNTINGROD */
+ { 918, 2, 272}, /* MATHEMATICALALPHANUMERICSYMBOLS */
+ { 917, 2, 272}, /* MATHALPHANUM */
+ {1284, 2, 273}, /* SUTTONSIGNWRITING */
+ { 616, 2, 274}, /* GLAGOLITICSUPPLEMENT */
+ { 615, 2, 274}, /* GLAGOLITICSUP */
+ {1045, 2, 275}, /* NYIAKENGPUACHUEHMONG */
+ {1394, 2, 276}, /* WANCHO */
+ { 936, 2, 277}, /* MENDEKIKAKUI */
+ { 170, 2, 278}, /* ADLAM */
+ { 712, 2, 279}, /* INDICSIYAQNUMBERS */
+ {1093, 2, 280}, /* OTTOMANSIYAQNUMBERS */
+ { 208, 2, 281}, /* ARABICMATHEMATICALALPHABETICSYMBOLS */
+ { 207, 2, 281}, /* ARABICMATH */
+ { 865, 2, 282}, /* MAHJONGTILES */
+ { 864, 2, 282}, /* MAHJONG */
+ { 510, 2, 283}, /* DOMINOTILES */
+ { 509, 2, 283}, /* DOMINO */
+ {1131, 2, 284}, /* PLAYINGCARDS */
+ { 549, 2, 285}, /* ENCLOSEDALPHANUMERICSUPPLEMENT */
+ { 550, 2, 285}, /* ENCLOSEDALPHANUMSUP */
+ { 554, 2, 286}, /* ENCLOSEDIDEOGRAPHICSUPPLEMENT */
+ { 553, 2, 286}, /* ENCLOSEDIDEOGRAPHICSUP */
+ { 951, 2, 287}, /* MISCELLANEOUSSYMBOLSANDPICTOGRAPHS */
+ { 955, 2, 287}, /* MISCPICTOGRAPHS */
+ { 544, 2, 288}, /* EMOTICONS */
+ {1073, 2, 289}, /* ORNAMENTALDINGBATS */
+ {1355, 2, 290}, /* TRANSPORTANDMAPSYMBOLS */
+ {1354, 2, 290}, /* TRANSPORTANDMAP */
+ { 184, 2, 291}, /* ALCHEMICALSYMBOLS */
+ { 183, 2, 291}, /* ALCHEMICAL */
+ { 605, 2, 292}, /* GEOMETRICSHAPESEXTENDED */
+ { 604, 2, 292}, /* GEOMETRICSHAPESEXT */
+ {1273, 2, 293}, /* SUPPLEMENTALARROWSC */
+ {1266, 2, 293}, /* SUPARROWSC */
+ {1276, 2, 294}, /* SUPPLEMENTALSYMBOLSANDPICTOGRAPHS */
+ {1282, 2, 294}, /* SUPSYMBOLSANDPICTOGRAPHS */
+ { 370, 2, 295}, /* CHESSSYMBOLS */
+ {1292, 2, 296}, /* SYMBOLSANDPICTOGRAPHSEXTENDEDA */
+ {1291, 2, 296}, /* SYMBOLSANDPICTOGRAPHSEXTA */
+ {1293, 2, 297}, /* SYMBOLSFORLEGACYCOMPUTING */
+ { 399, 2, 298}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONB */
+ { 386, 2, 298}, /* CJKEXTB */
+ { 400, 2, 299}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONC */
+ { 387, 2, 299}, /* CJKEXTC */
+ { 401, 2, 300}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIOND */
+ { 388, 2, 300}, /* CJKEXTD */
+ { 402, 2, 301}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONE */
+ { 389, 2, 301}, /* CJKEXTE */
+ { 403, 2, 302}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONF */
+ { 390, 2, 302}, /* CJKEXTF */
+ { 382, 2, 303}, /* CJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT */
+ { 384, 2, 303}, /* CJKCOMPATIDEOGRAPHSSUP */
+ { 404, 2, 304}, /* CJKUNIFIEDIDEOGRAPHSEXTENSIONG */
+ { 391, 2, 304}, /* CJKEXTG */
+ {1303, 2, 305}, /* TAGS */
+ {1377, 2, 306}, /* VARIATIONSELECTORSSUPPLEMENT */
+ {1392, 2, 306}, /* VSSUP */
+ {1277, 2, 307}, /* SUPPLEMENTARYPRIVATEUSEAREAA */
+ {1279, 2, 307}, /* SUPPUAA */
+ {1278, 2, 308}, /* SUPPLEMENTARYPRIVATEUSEAREAB */
+ {1280, 2, 308}, /* SUPPUAB */
+ {1027, 3, 0}, /* NOTREORDERED */
+ { 1, 3, 0}, /* 0 */
+ {1028, 3, 0}, /* NR */
+ { 167, 3, 1}, /* ABOVE */
+ { 75, 3, 1}, /* 230 */
+ { 166, 3, 1}, /* A */
+ { 169, 3, 2}, /* ABOVERIGHT */
+ { 76, 3, 2}, /* 232 */
+ { 201, 3, 2}, /* AR */
+ { 253, 3, 3}, /* BELOW */
+ { 69, 3, 3}, /* 220 */
+ { 236, 3, 3}, /* B */
+ { 230, 3, 4}, /* ATTACHEDABOVERIGHT */
+ { 65, 3, 4}, /* 216 */
+ { 225, 3, 4}, /* ATAR */
+ { 231, 3, 5}, /* ATTACHEDBELOW */
+ { 62, 3, 5}, /* 202 */
+ { 226, 3, 5}, /* ATB */
+ {1096, 3, 6}, /* OVERLAY */
+ { 2, 3, 6}, /* 1 */
+ {1095, 3, 6}, /* OV */
+ { 726, 3, 7}, /* IOTASUBSCRIPT */
+ { 80, 3, 7}, /* 240 */
+ { 729, 3, 7}, /* IS */
+ { 512, 3, 8}, /* DOUBLEBELOW */
+ { 77, 3, 8}, /* 233 */
+ { 483, 3, 8}, /* DB */
+ { 511, 3, 9}, /* DOUBLEABOVE */
+ { 78, 3, 9}, /* 234 */
+ { 478, 3, 9}, /* DA */
+ { 255, 3, 10}, /* BELOWRIGHT */
+ { 70, 3, 10}, /* 222 */
+ { 283, 3, 10}, /* BR */
+ { 168, 3, 11}, /* ABOVELEFT */
+ { 73, 3, 11}, /* 228 */
+ { 181, 3, 11}, /* AL */
+ { 321, 3, 12}, /* CCC10 */
+ { 21, 3, 12}, /* 10 */
+ { 324, 3, 13}, /* CCC11 */
+ { 33, 3, 13}, /* 11 */
+ { 326, 3, 14}, /* CCC12 */
+ { 37, 3, 14}, /* 12 */
+ { 329, 3, 15}, /* CCC13 */
+ { 40, 3, 15}, /* 13 */
+ { 333, 3, 16}, /* CCC14 */
+ { 45, 3, 16}, /* 14 */
+ { 334, 3, 17}, /* CCC15 */
+ { 46, 3, 17}, /* 15 */
+ { 335, 3, 18}, /* CCC16 */
+ { 48, 3, 18}, /* 16 */
+ { 336, 3, 19}, /* CCC17 */
+ { 49, 3, 19}, /* 17 */
+ { 337, 3, 20}, /* CCC18 */
+ { 51, 3, 20}, /* 18 */
+ { 338, 3, 21}, /* CCC19 */
+ { 52, 3, 21}, /* 19 */
+ { 339, 3, 22}, /* CCC20 */
+ { 56, 3, 22}, /* 20 */
+ { 340, 3, 23}, /* CCC21 */
+ { 63, 3, 23}, /* 21 */
+ { 341, 3, 24}, /* CCC22 */
+ { 68, 3, 24}, /* 22 */
+ { 342, 3, 25}, /* CCC23 */
+ { 74, 3, 25}, /* 23 */
+ { 343, 3, 26}, /* CCC24 */
+ { 79, 3, 26}, /* 24 */
+ { 344, 3, 27}, /* CCC25 */
+ { 81, 3, 27}, /* 25 */
+ { 349, 3, 28}, /* CCC30 */
+ { 95, 3, 28}, /* 30 */
+ { 350, 3, 29}, /* CCC31 */
+ { 100, 3, 29}, /* 31 */
+ { 351, 3, 30}, /* CCC32 */
+ { 101, 3, 30}, /* 32 */
+ { 346, 3, 31}, /* CCC27 */
+ { 83, 3, 31}, /* 27 */
+ { 347, 3, 32}, /* CCC28 */
+ { 84, 3, 32}, /* 28 */
+ { 348, 3, 33}, /* CCC29 */
+ { 85, 3, 33}, /* 29 */
+ { 352, 3, 34}, /* CCC33 */
+ { 102, 3, 34}, /* 33 */
+ { 353, 3, 35}, /* CCC34 */
+ { 103, 3, 35}, /* 34 */
+ { 354, 3, 36}, /* CCC35 */
+ { 104, 3, 36}, /* 35 */
+ { 355, 3, 37}, /* CCC36 */
+ { 105, 3, 37}, /* 36 */
+ {1034, 3, 38}, /* NUKTA */
+ { 142, 3, 38}, /* 7 */
+ {1011, 3, 38}, /* NK */
+ {1383, 3, 39}, /* VIRAMA */
+ { 158, 3, 39}, /* 9 */
+ {1390, 3, 39}, /* VR */
+ { 356, 3, 40}, /* CCC84 */
+ { 157, 3, 40}, /* 84 */
+ { 357, 3, 41}, /* CCC91 */
+ { 165, 3, 41}, /* 91 */
+ { 322, 3, 42}, /* CCC103 */
+ { 31, 3, 42}, /* 103 */
+ { 323, 3, 43}, /* CCC107 */
+ { 32, 3, 43}, /* 107 */
+ { 325, 3, 44}, /* CCC118 */
+ { 36, 3, 44}, /* 118 */
+ { 327, 3, 45}, /* CCC122 */
+ { 38, 3, 45}, /* 122 */
+ { 328, 3, 46}, /* CCC129 */
+ { 39, 3, 46}, /* 129 */
+ { 330, 3, 47}, /* CCC130 */
+ { 42, 3, 47}, /* 130 */
+ { 331, 3, 48}, /* CCC132 */
+ { 43, 3, 48}, /* 132 */
+ { 229, 3, 49}, /* ATTACHEDABOVE */
+ { 64, 3, 49}, /* 214 */
+ { 224, 3, 49}, /* ATA */
+ { 254, 3, 50}, /* BELOWLEFT */
+ { 67, 3, 50}, /* 218 */
+ { 268, 3, 50}, /* BL */
+ { 811, 3, 51}, /* LEFT */
+ { 71, 3, 51}, /* 224 */
+ { 783, 3, 51}, /* L */
+ { 757, 3, 52}, /* KANAVOICING */
+ { 151, 3, 52}, /* 8 */
+ { 782, 3, 52}, /* KV */
+ { 345, 3, 53}, /* CCC26 */
+ { 82, 3, 53}, /* 26 */
+ { 667, 3, 54}, /* HANREADING */
+ { 136, 3, 54}, /* 6 */
+ { 666, 3, 54}, /* HANR */
+ {1172, 3, 55}, /* RIGHT */
+ { 72, 3, 55}, /* 226 */
+ {1164, 3, 55}, /* R */
+ { 332, 3, 56}, /* CCC133 */
+ { 44, 3, 56}, /* 133 */
+ { 232, 3, 57}, /* ATTACHEDBELOWLEFT */
+ { 57, 3, 57}, /* 200 */
+ { 227, 3, 57}, /* ATBL */
+ {1020, 4, 0}, /* NONE */
+ {1017, 4, 1}, /* NOBREAK */
+ { 994, 4, 1}, /* NB */
+ { 424, 4, 2}, /* COMPAT */
+ { 413, 4, 2}, /* COM */
+ {1267, 4, 3}, /* SUPER */
+ {1263, 4, 3}, /* SUP */
+ { 592, 4, 4}, /* FRACTION */
+ { 591, 4, 4}, /* FRA */
+ { 307, 4, 5}, /* CANONICAL */
+ { 304, 4, 5}, /* CAN */
+ {1258, 4, 6}, /* SUB */
+ { 589, 4, 7}, /* FONT */
+ { 374, 4, 8}, /* CIRCLE */
+ { 546, 4, 8}, /* ENC */
+ {1401, 4, 9}, /* WIDE */
+ {1381, 4, 10}, /* VERTICAL */
+ {1380, 4, 10}, /* VERT */
+ {1254, 4, 11}, /* SQUARE */
+ {1253, 4, 11}, /* SQR */
+ { 731, 4, 12}, /* ISOLATED */
+ { 730, 4, 12}, /* ISO */
+ { 584, 4, 13}, /* FINAL */
+ { 583, 4, 13}, /* FIN */
+ { 717, 4, 14}, /* INITIAL */
+ { 716, 4, 14}, /* INIT */
+ { 930, 4, 15}, /* MEDIAL */
+ { 927, 4, 15}, /* MED */
+ {1231, 4, 16}, /* SMALL */
+ {1236, 4, 16}, /* SML */
+ { 993, 4, 17}, /* NARROW */
+ { 991, 4, 17}, /* NAR */
+ { 998, 5, 0}, /* NEUTRAL */
+ { 984, 5, 0}, /* N */
+ { 993, 5, 1}, /* NARROW */
+ { 986, 5, 1}, /* NA */
+ { 193, 5, 2}, /* AMBIGUOUS */
+ { 166, 5, 2}, /* A */
+ {1401, 5, 3}, /* WIDE */
+ {1393, 5, 3}, /* W */
+ { 649, 5, 4}, /* HALFWIDTH */
+ { 643, 5, 4}, /* H */
+ { 594, 5, 5}, /* FULLWIDTH */
+ { 578, 5, 5}, /* F */
+ {1363, 6, 0}, /* UNASSIGNED */
+ { 410, 6, 0}, /* CN */
+ { 443, 6, 1}, /* CONTROL */
+ { 319, 6, 1}, /* CC */
+ { 411, 6, 1}, /* CNTRL */
+ {1248, 6, 2}, /* SPACESEPARATOR */
+ {1441, 6, 2}, /* ZS */
+ {1090, 6, 3}, /* OTHERPUNCTUATION */
+ {1133, 6, 3}, /* PO */
+ { 457, 6, 4}, /* CURRENCYSYMBOL */
+ {1199, 6, 4}, /* SC */
+ {1069, 6, 5}, /* OPENPUNCTUATION */
+ {1150, 6, 5}, /* PS */
+ { 408, 6, 6}, /* CLOSEPUNCTUATION */
+ {1115, 6, 6}, /* PE */
+ { 921, 6, 7}, /* MATHSYMBOL */
+ {1230, 6, 7}, /* SM */
+ { 482, 6, 8}, /* DASHPUNCTUATION */
+ {1112, 6, 8}, /* PD */
+ { 486, 6, 9}, /* DECIMALNUMBER */
+ { 997, 6, 9}, /* ND */
+ { 504, 6, 9}, /* DIGIT */
+ {1371, 6, 10}, /* UPPERCASELETTER */
+ { 851, 6, 10}, /* LU */
+ { 964, 6, 11}, /* MODIFIERSYMBOL */
+ {1229, 6, 11}, /* SK */
+ { 428, 6, 12}, /* CONNECTORPUNCTUATION */
+ {1110, 6, 12}, /* PC */
+ { 845, 6, 13}, /* LOWERCASELETTER */
+ { 838, 6, 13}, /* LL */
+ {1091, 6, 14}, /* OTHERSYMBOL */
+ {1237, 6, 14}, /* SO */
+ {1085, 6, 15}, /* OTHERLETTER */
+ { 840, 6, 15}, /* LO */
+ { 718, 6, 16}, /* INITIALPUNCTUATION */
+ {1130, 6, 16}, /* PI */
+ { 590, 6, 17}, /* FORMAT */
+ { 358, 6, 17}, /* CF */
+ {1089, 6, 18}, /* OTHERNUMBER */
+ {1015, 6, 18}, /* NO */
+ { 585, 6, 19}, /* FINALPUNCTUATION */
+ {1117, 6, 19}, /* PF */
+ {1342, 6, 20}, /* TITLECASELETTER */
+ { 850, 6, 20}, /* LT */
+ { 962, 6, 21}, /* MODIFIERLETTER */
+ { 839, 6, 21}, /* LM */
+ {1023, 6, 22}, /* NONSPACINGMARK */
+ { 960, 6, 22}, /* MN */
+ { 555, 6, 23}, /* ENCLOSINGMARK */
+ { 926, 6, 23}, /* ME */
+ {1249, 6, 24}, /* SPACINGMARK */
+ { 925, 6, 24}, /* MC */
+ { 822, 6, 25}, /* LETTERNUMBER */
+ {1014, 6, 25}, /* NL */
+ { 834, 6, 26}, /* LINESEPARATOR */
+ {1439, 6, 26}, /* ZL */
+ {1103, 6, 27}, /* PARAGRAPHSEPARATOR */
+ {1440, 6, 27}, /* ZP */
+ {1283, 6, 28}, /* SURROGATE */
+ { 453, 6, 28}, /* CS */
+ {1147, 6, 29}, /* PRIVATEUSE */
+ { 412, 6, 29}, /* CO */
+ {1079, 6, 30}, /* OTHER */
+ { 301, 6, 30}, /* C */
+ { 302, 6, 30}, /* C& */
+ { 820, 6, 31}, /* LETTER */
+ { 783, 6, 31}, /* L */
+ { 784, 6, 31}, /* L& */
+ { 914, 6, 32}, /* MARK */
+ { 860, 6, 32}, /* M */
+ { 419, 6, 32}, /* COMBININGMARK */
+ { 861, 6, 32}, /* M& */
+ {1035, 6, 33}, /* NUMBER */
+ { 984, 6, 33}, /* N */
+ { 985, 6, 33}, /* N& */
+ {1154, 6, 34}, /* PUNCTUATION */
+ {1098, 6, 34}, /* P */
+ {1153, 6, 34}, /* PUNCT */
+ {1099, 6, 34}, /* P& */
+ {1290, 6, 35}, /* SYMBOL */
+ {1188, 6, 35}, /* S */
+ {1189, 6, 35}, /* S& */
+ {1212, 6, 36}, /* SEPARATOR */
+ {1432, 6, 36}, /* Z */
+ {1433, 6, 36}, /* Z& */
+ { 315, 6, 37}, /* CASEDLETTER */
+ { 808, 6, 37}, /* LC */
+ { 222, 6, 38}, /* ASSIGNED */
+ {1079, 7, 0}, /* OTHER */
+ {1416, 7, 0}, /* XX */
+ { 443, 7, 1}, /* CONTROL */
+ { 410, 7, 1}, /* CN */
+ { 823, 7, 2}, /* LF */
+ { 452, 7, 3}, /* CR */
+ { 573, 7, 4}, /* EXTEND */
+ { 570, 7, 4}, /* EX */
+ {1144, 7, 5}, /* PREPEND */
+ {1141, 7, 5}, /* PP */
+ {1249, 7, 6}, /* SPACINGMARK */
+ {1230, 7, 6}, /* SM */
+ { 783, 7, 7}, /* L */
+ {1372, 7, 8}, /* V */
+ {1299, 7, 9}, /* T */
+ {1443, 7, 10}, /* ZWJ */
+ { 852, 7, 11}, /* LV */
+ { 854, 7, 12}, /* LVT */
+ {1166, 7, 13}, /* REGIONALINDICATOR */
+ {1171, 7, 13}, /* RI */
+ { 525, 7, 14}, /* EBASE */
+ { 524, 7, 14}, /* EB */
+ { 526, 7, 15}, /* EBASEGAZ */
+ { 527, 7, 15}, /* EBG */
+ { 538, 7, 16}, /* EMODIFIER */
+ { 536, 7, 16}, /* EM */
+ { 618, 7, 17}, /* GLUEAFTERZWJ */
+ { 597, 7, 17}, /* GAZ */
+ {1026, 8, 0}, /* NOTAPPLICABLE */
+ { 986, 8, 0}, /* NA */
+ { 810, 8, 1}, /* LEADINGJAMO */
+ { 783, 8, 1}, /* L */
+ {1389, 8, 2}, /* VOWELJAMO */
+ {1372, 8, 2}, /* V */
+ {1352, 8, 3}, /* TRAILINGJAMO */
+ {1299, 8, 3}, /* T */
+ { 853, 8, 4}, /* LVSYLLABLE */
+ { 852, 8, 4}, /* LV */
+ { 855, 8, 5}, /* LVTSYLLABLE */
+ { 854, 8, 5}, /* LVT */
+ { 986, 9, 0}, /* NA */
+ {1345, 9, 1}, /* TOP */
+ {1172, 9, 2}, /* RIGHT */
+ { 278, 9, 3}, /* BOTTOM */
+ { 811, 9, 4}, /* LEFT */
+ { 812, 9, 5}, /* LEFTANDRIGHT */
+ {1351, 9, 6}, /* TOPANDRIGHT */
+ {1349, 9, 7}, /* TOPANDLEFT */
+ {1350, 9, 8}, /* TOPANDLEFTANDRIGHT */
+ {1346, 9, 9}, /* TOPANDBOTTOM */
+ {1385, 9, 10}, /* VISUALORDERLEFT */
+ {1347, 9, 11}, /* TOPANDBOTTOMANDLEFT */
+ { 280, 9, 12}, /* BOTTOMANDRIGHT */
+ {1348, 9, 13}, /* TOPANDBOTTOMANDRIGHT */
+ {1097, 9, 14}, /* OVERSTRUCK */
+ { 279, 9, 15}, /* BOTTOMANDLEFT */
+ {1079, 10, 0}, /* OTHER */
+ { 436, 10, 1}, /* CONSONANTPLACEHOLDER */
+ {1035, 10, 2}, /* NUMBER */
+ {1287, 10, 3}, /* SYLLABLEMODIFIER */
+ { 266, 10, 4}, /* BINDU */
+ {1384, 10, 5}, /* VISARGA */
+ {1388, 10, 6}, /* VOWELINDEPENDENT */
+ { 429, 10, 7}, /* CONSONANT */
+ {1387, 10, 8}, /* VOWELDEPENDENT */
+ {1034, 10, 9}, /* NUKTA */
+ { 233, 10, 10}, /* AVAGRAHA */
+ {1383, 10, 11}, /* VIRAMA */
+ { 310, 10, 12}, /* CANTILLATIONMARK */
+ { 430, 10, 13}, /* CONSONANTDEAD */
+ { 600, 10, 14}, /* GEMINATIONMARK */
+ { 435, 10, 15}, /* CONSONANTMEDIAL */
+ { 966, 10, 16}, /* MODIFYINGLETTER */
+ { 441, 10, 17}, /* CONSONANTWITHSTACKER */
+ {1155, 10, 18}, /* PUREKILLER */
+ { 437, 10, 19}, /* CONSONANTPRECEDINGREPHA */
+ {1344, 10, 20}, /* TONEMARK */
+ { 434, 10, 21}, /* CONSONANTKILLER */
+ { 432, 10, 22}, /* CONSONANTHEADLETTER */
+ { 439, 10, 23}, /* CONSONANTSUBJOINED */
+ { 725, 10, 24}, /* INVISIBLESTACKER */
+ {1167, 10, 25}, /* REGISTERSHIFTER */
+ { 440, 10, 26}, /* CONSONANTSUCCEEDINGREPHA */
+ { 431, 10, 27}, /* CONSONANTFINAL */
+ {1386, 10, 28}, /* VOWEL */
+ {1343, 10, 29}, /* TONELETTER */
+ { 433, 10, 30}, /* CONSONANTINITIALPOSTFIXED */
+ {1021, 10, 31}, /* NONJOINER */
+ { 743, 10, 32}, /* JOINER */
+ { 286, 10, 33}, /* BRAHMIJOININGNUMBER */
+ {1037, 10, 34}, /* NUMBERJOINER */
+ { 438, 10, 35}, /* CONSONANTPREFIXED */
+ {1018, 11, 0}, /* NOJOININGGROUP */
+ {1418, 11, 1}, /* YEH */
+ { 185, 11, 2}, /* ALEF */
+ {1397, 11, 3}, /* WAW */
+ { 252, 11, 4}, /* BEH */
+ {1325, 11, 5}, /* TEHMARBUTA */
+ { 646, 11, 6}, /* HAH */
+ { 479, 11, 7}, /* DAL */
+ {1168, 11, 8}, /* REH */
+ {1206, 11, 9}, /* SEEN */
+ {1191, 11, 10}, /* SAD */
+ {1304, 11, 11}, /* TAH */
+ { 180, 11, 12}, /* AIN */
+ { 595, 11, 13}, /* GAF */
+ { 580, 11, 14}, /* FARSIYEH */
+ { 582, 11, 15}, /* FEH */
+ {1158, 11, 16}, /* QAF */
+ { 749, 11, 17}, /* KAF */
+ { 785, 11, 18}, /* LAM */
+ { 931, 11, 19}, /* MEEM */
+ {1025, 11, 20}, /* NOON */
+ { 675, 11, 21}, /* HEH */
+ {1285, 11, 22}, /* SWASHKAF */
+ {1044, 11, 23}, /* NYA */
+ { 780, 11, 24}, /* KNOTTEDHEH */
+ { 676, 11, 25}, /* HEHGOAL */
+ { 651, 11, 26}, /* HAMZAONHEHGOAL */
+ {1326, 11, 26}, /* TEHMARBUTAGOAL */
+ {1420, 11, 27}, /* YEHWITHTAIL */
+ {1419, 11, 28}, /* YEHBARREE */
+ { 182, 11, 29}, /* ALAPH */
+ { 258, 11, 30}, /* BETH */
+ { 596, 11, 31}, /* GAMAL */
+ { 480, 11, 32}, /* DALATHRISH */
+ { 671, 11, 33}, /* HE */
+ {1298, 11, 34}, /* SYRIACWAW */
+ {1434, 11, 35}, /* ZAIN */
+ { 677, 11, 36}, /* HETH */
+ {1331, 11, 37}, /* TETH */
+ {1430, 11, 38}, /* YUDH */
+ {1431, 11, 39}, /* YUDHHE */
+ { 762, 11, 40}, /* KAPH */
+ { 786, 11, 41}, /* LAMADH */
+ { 945, 11, 42}, /* MIM */
+ {1041, 11, 43}, /* NUN */
+ {1208, 11, 44}, /* SEMKATH */
+ { 586, 11, 45}, /* FINALSEMKATH */
+ { 520, 11, 46}, /* E */
+ {1115, 11, 47}, /* PE */
+ {1170, 11, 48}, /* REVERSEDPE */
+ {1192, 11, 49}, /* SADHE */
+ {1159, 11, 50}, /* QAPH */
+ {1218, 11, 51}, /* SHIN */
+ {1324, 11, 52}, /* TAW */
+ {1437, 11, 53}, /* ZHAIN */
+ { 768, 11, 54}, /* KHAPH */
+ { 581, 11, 55}, /* FE */
+ { 298, 11, 56}, /* BURUSHASKIYEHBARREE */
+ { 873, 11, 57}, /* MALAYALAMNGA */
+ { 870, 11, 58}, /* MALAYALAMJA */
+ { 876, 11, 59}, /* MALAYALAMNYA */
+ { 879, 11, 60}, /* MALAYALAMTTA */
+ { 874, 11, 61}, /* MALAYALAMNNA */
+ { 875, 11, 62}, /* MALAYALAMNNNA */
+ { 869, 11, 63}, /* MALAYALAMBHA */
+ { 877, 11, 64}, /* MALAYALAMRA */
+ { 871, 11, 65}, /* MALAYALAMLLA */
+ { 872, 11, 66}, /* MALAYALAMLLLA */
+ { 878, 11, 67}, /* MALAYALAMSSA */
+ {1183, 11, 68}, /* ROHINGYAYEH */
+ {1257, 11, 69}, /* STRAIGHTWAW */
+ { 173, 11, 70}, /* AFRICANFEH */
+ { 175, 11, 71}, /* AFRICANQAF */
+ { 174, 11, 72}, /* AFRICANNOON */
+ { 885, 11, 73}, /* MANICHAEANALEPH */
+ { 887, 11, 74}, /* MANICHAEANBETH */
+ { 891, 11, 75}, /* MANICHAEANGIMEL */
+ { 888, 11, 76}, /* MANICHAEANDALETH */
+ { 909, 11, 77}, /* MANICHAEANWAW */
+ { 911, 11, 78}, /* MANICHAEANZAYIN */
+ { 892, 11, 79}, /* MANICHAEANHETH */
+ { 906, 11, 80}, /* MANICHAEANTETH */
+ { 910, 11, 81}, /* MANICHAEANYODH */
+ { 894, 11, 82}, /* MANICHAEANKAPH */
+ { 895, 11, 83}, /* MANICHAEANLAMEDH */
+ { 889, 11, 84}, /* MANICHAEANDHAMEDH */
+ { 907, 11, 85}, /* MANICHAEANTHAMEDH */
+ { 896, 11, 86}, /* MANICHAEANMEM */
+ { 897, 11, 87}, /* MANICHAEANNUN */
+ { 903, 11, 88}, /* MANICHAEANSAMEKH */
+ { 886, 11, 89}, /* MANICHAEANAYIN */
+ { 899, 11, 90}, /* MANICHAEANPE */
+ { 902, 11, 91}, /* MANICHAEANSADHE */
+ { 900, 11, 92}, /* MANICHAEANQOPH */
+ { 901, 11, 93}, /* MANICHAEANRESH */
+ { 904, 11, 94}, /* MANICHAEANTAW */
+ { 898, 11, 95}, /* MANICHAEANONE */
+ { 890, 11, 96}, /* MANICHAEANFIVE */
+ { 905, 11, 97}, /* MANICHAEANTEN */
+ { 908, 11, 98}, /* MANICHAEANTWENTY */
+ { 893, 11, 99}, /* MANICHAEANHUNDRED */
+ { 664, 11, 100}, /* HANIFIROHINGYAPA */
+ { 663, 11, 101}, /* HANIFIROHINGYAKINNAYA */
+ {1022, 12, 0}, /* NONJOINING */
+ {1357, 12, 0}, /* U */
+ {1353, 12, 1}, /* TRANSPARENT */
+ {1299, 12, 1}, /* T */
+ { 517, 12, 2}, /* DUALJOINING */
+ { 477, 12, 2}, /* D */
+ {1173, 12, 3}, /* RIGHTJOINING */
+ {1164, 12, 3}, /* R */
+ { 741, 12, 4}, /* JOINCAUSING */
+ { 301, 12, 4}, /* C */
+ { 813, 12, 5}, /* LEFTJOINING */
+ { 783, 12, 5}, /* L */
+ {1367, 13, 0}, /* UNKNOWN */
+ {1416, 13, 0}, /* XX */
+ { 419, 13, 1}, /* COMBININGMARK */
+ { 409, 13, 1}, /* CM */
+ { 290, 13, 2}, /* BREAKAFTER */
+ { 238, 13, 2}, /* BA */
+ { 833, 13, 3}, /* LINEFEED */
+ { 823, 13, 3}, /* LF */
+ { 882, 13, 4}, /* MANDATORYBREAK */
+ { 267, 13, 4}, /* BK */
+ { 313, 13, 5}, /* CARRIAGERETURN */
+ { 452, 13, 5}, /* CR */
+ {1247, 13, 6}, /* SPACE */
+ {1246, 13, 6}, /* SP */
+ { 571, 13, 7}, /* EXCLAMATION */
+ { 570, 13, 7}, /* EX */
+ {1162, 13, 8}, /* QUOTATION */
+ {1161, 13, 8}, /* QU */
+ { 189, 13, 9}, /* ALPHABETIC */
+ { 181, 13, 9}, /* AL */
+ {1143, 13, 10}, /* PREFIXNUMERIC */
+ {1142, 13, 10}, /* PR */
+ {1140, 13, 11}, /* POSTFIXNUMERIC */
+ {1133, 13, 11}, /* PO */
+ {1069, 13, 12}, /* OPENPUNCTUATION */
+ {1068, 13, 12}, /* OP */
+ { 407, 13, 13}, /* CLOSEPARENTHESIS */
+ { 450, 13, 13}, /* CP */
+ { 714, 13, 14}, /* INFIXNUMERIC */
+ { 729, 13, 14}, /* IS */
+ { 693, 13, 15}, /* HYPHEN */
+ { 692, 13, 15}, /* HY */
+ { 293, 13, 16}, /* BREAKSYMBOLS */
+ {1286, 13, 16}, /* SY */
+ {1038, 13, 17}, /* NUMERIC */
+ {1033, 13, 17}, /* NU */
+ { 408, 13, 18}, /* CLOSEPUNCTUATION */
+ { 405, 13, 18}, /* CL */
+ {1002, 13, 19}, /* NEXTLINE */
+ {1014, 13, 19}, /* NL */
+ { 617, 13, 20}, /* GLUE */
+ { 612, 13, 20}, /* GL */
+ { 193, 13, 21}, /* AMBIGUOUS */
+ { 179, 13, 21}, /* AI */
+ { 291, 13, 22}, /* BREAKBEFORE */
+ { 250, 13, 22}, /* BB */
+ { 674, 13, 23}, /* HEBREWLETTER */
+ { 685, 13, 23}, /* HL */
+ { 426, 13, 24}, /* COMPLEXCONTEXT */
+ {1190, 13, 24}, /* SA */
+ { 739, 13, 25}, /* JL */
+ { 747, 13, 26}, /* JV */
+ { 746, 13, 27}, /* JT */
+ {1024, 13, 28}, /* NONSTARTER */
+ {1029, 13, 28}, /* NS */
+ {1444, 13, 29}, /* ZWSPACE */
+ {1442, 13, 29}, /* ZW */
+ {1443, 13, 30}, /* ZWJ */
+ { 292, 13, 31}, /* BREAKBOTH */
+ { 237, 13, 31}, /* B2 */
+ { 723, 13, 32}, /* INSEPARABLE */
+ { 709, 13, 32}, /* IN */
+ { 724, 13, 32}, /* INSEPERABLE */
+ {1405, 13, 33}, /* WORDJOINER */
+ {1402, 13, 33}, /* WJ */
+ { 698, 13, 34}, /* IDEOGRAPHIC */
+ { 694, 13, 34}, /* ID */
+ { 525, 13, 35}, /* EBASE */
+ { 524, 13, 35}, /* EB */
+ { 427, 13, 36}, /* CONDITIONALJAPANESESTARTER */
+ { 375, 13, 36}, /* CJ */
+ { 644, 13, 37}, /* H2 */
+ { 645, 13, 38}, /* H3 */
+ {1283, 13, 39}, /* SURROGATE */
+ {1213, 13, 39}, /* SG */
+ { 442, 13, 40}, /* CONTINGENTBREAK */
+ { 318, 13, 40}, /* CB */
+ {1166, 13, 41}, /* REGIONALINDICATOR */
+ {1171, 13, 41}, /* RI */
+ { 538, 13, 42}, /* EMODIFIER */
+ { 536, 13, 42}, /* EM */
+ {1015, 14, 0}, /* NO */
+ { 984, 14, 0}, /* N */
+ {1421, 14, 1}, /* YES */
+ {1417, 14, 1}, /* Y */
+ { 923, 14, 2}, /* MAYBE */
+ { 860, 14, 2}, /* M */
+ {1015, 15, 0}, /* NO */
+ { 984, 15, 0}, /* N */
+ {1421, 15, 1}, /* YES */
+ {1417, 15, 1}, /* Y */
+ {1020, 16, 0}, /* NONE */
+ { 485, 16, 1}, /* DECIMAL */
+ { 484, 16, 1}, /* DE */
+ { 504, 16, 2}, /* DIGIT */
+ { 496, 16, 2}, /* DI */
+ {1038, 16, 3}, /* NUMERIC */
+ {1033, 16, 3}, /* NU */
+ { 988, 17, 0}, /* NAN */
+ { 1, 17, 1}, /* 0 */
+ { 2, 17, 2}, /* 1 */
+ { 53, 17, 3}, /* 2 */
+ { 86, 17, 4}, /* 3 */
+ { 109, 17, 5}, /* 4 */
+ { 126, 17, 6}, /* 5 */
+ { 136, 17, 7}, /* 6 */
+ { 142, 17, 8}, /* 7 */
+ { 151, 17, 9}, /* 8 */
+ { 158, 17, 10}, /* 9 */
+ { 12, 17, 11}, /* 1/4 */
+ { 7, 17, 12}, /* 1/2 */
+ { 90, 17, 13}, /* 3/4 */
+ { 5, 17, 14}, /* 1/16 */
+ { 18, 17, 15}, /* 1/8 */
+ { 87, 17, 16}, /* 3/16 */
+ { 48, 17, 17}, /* 16 */
+ { 21, 17, 18}, /* 10 */
+ { 22, 17, 19}, /* 100 */
+ { 23, 17, 20}, /* 1000 */
+ { 6, 17, 21}, /* 1/160 */
+ { 13, 17, 22}, /* 1/40 */
+ { 94, 17, 23}, /* 3/80 */
+ { 8, 17, 24}, /* 1/20 */
+ { 3, 17, 25}, /* 1/10 */
+ { 89, 17, 26}, /* 3/20 */
+ { 14, 17, 27}, /* 1/5 */
+ { 88, 17, 28}, /* 3/2 */
+ { 128, 17, 29}, /* 5/2 */
+ { 144, 17, 30}, /* 7/2 */
+ { 159, 17, 31}, /* 9/2 */
+ { 35, 17, 32}, /* 11/2 */
+ { 41, 17, 33}, /* 13/2 */
+ { 47, 17, 34}, /* 15/2 */
+ { 50, 17, 35}, /* 17/2 */
+ { 0, 17, 36}, /* -1/2 */
+ { 56, 17, 37}, /* 20 */
+ { 95, 17, 38}, /* 30 */
+ { 111, 17, 39}, /* 40 */
+ { 131, 17, 40}, /* 50 */
+ { 137, 17, 41}, /* 60 */
+ { 146, 17, 42}, /* 70 */
+ { 152, 17, 43}, /* 80 */
+ { 160, 17, 44}, /* 90 */
+ { 24, 17, 45}, /* 10000 */
+ { 49, 17, 46}, /* 17 */
+ { 51, 17, 47}, /* 18 */
+ { 52, 17, 48}, /* 19 */
+ { 17, 17, 49}, /* 1/7 */
+ { 20, 17, 50}, /* 1/9 */
+ { 9, 17, 51}, /* 1/3 */
+ { 54, 17, 52}, /* 2/3 */
+ { 55, 17, 53}, /* 2/5 */
+ { 91, 17, 54}, /* 3/5 */
+ { 110, 17, 55}, /* 4/5 */
+ { 15, 17, 56}, /* 1/6 */
+ { 129, 17, 57}, /* 5/6 */
+ { 93, 17, 58}, /* 3/8 */
+ { 130, 17, 59}, /* 5/8 */
+ { 145, 17, 60}, /* 7/8 */
+ { 33, 17, 61}, /* 11 */
+ { 37, 17, 62}, /* 12 */
+ { 132, 17, 63}, /* 500 */
+ { 133, 17, 64}, /* 5000 */
+ { 134, 17, 65}, /* 50000 */
+ { 25, 17, 66}, /* 100000 */
+ { 40, 17, 67}, /* 13 */
+ { 45, 17, 68}, /* 14 */
+ { 46, 17, 69}, /* 15 */
+ { 63, 17, 70}, /* 21 */
+ { 68, 17, 71}, /* 22 */
+ { 74, 17, 72}, /* 23 */
+ { 79, 17, 73}, /* 24 */
+ { 81, 17, 74}, /* 25 */
+ { 82, 17, 75}, /* 26 */
+ { 83, 17, 76}, /* 27 */
+ { 84, 17, 77}, /* 28 */
+ { 85, 17, 78}, /* 29 */
+ { 100, 17, 79}, /* 31 */
+ { 101, 17, 80}, /* 32 */
+ { 102, 17, 81}, /* 33 */
+ { 103, 17, 82}, /* 34 */
+ { 104, 17, 83}, /* 35 */
+ { 105, 17, 84}, /* 36 */
+ { 106, 17, 85}, /* 37 */
+ { 107, 17, 86}, /* 38 */
+ { 108, 17, 87}, /* 39 */
+ { 116, 17, 88}, /* 41 */
+ { 117, 17, 89}, /* 42 */
+ { 118, 17, 90}, /* 43 */
+ { 120, 17, 91}, /* 44 */
+ { 121, 17, 92}, /* 45 */
+ { 122, 17, 93}, /* 46 */
+ { 123, 17, 94}, /* 47 */
+ { 124, 17, 95}, /* 48 */
+ { 125, 17, 96}, /* 49 */
+ { 28, 17, 97}, /* 100000000 */
+ { 30, 17, 98}, /* 1000000000000 */
+ { 57, 17, 99}, /* 200 */
+ { 96, 17, 100}, /* 300 */
+ { 112, 17, 101}, /* 400 */
+ { 138, 17, 102}, /* 600 */
+ { 147, 17, 103}, /* 700 */
+ { 153, 17, 104}, /* 800 */
+ { 161, 17, 105}, /* 900 */
+ { 58, 17, 106}, /* 2000 */
+ { 97, 17, 107}, /* 3000 */
+ { 113, 17, 108}, /* 4000 */
+ { 139, 17, 109}, /* 6000 */
+ { 148, 17, 110}, /* 7000 */
+ { 154, 17, 111}, /* 8000 */
+ { 162, 17, 112}, /* 9000 */
+ { 59, 17, 113}, /* 20000 */
+ { 98, 17, 114}, /* 30000 */
+ { 114, 17, 115}, /* 40000 */
+ { 140, 17, 116}, /* 60000 */
+ { 149, 17, 117}, /* 70000 */
+ { 155, 17, 118}, /* 80000 */
+ { 163, 17, 119}, /* 90000 */
+ { 34, 17, 120}, /* 11/12 */
+ { 60, 17, 121}, /* 200000 */
+ { 99, 17, 122}, /* 300000 */
+ { 115, 17, 123}, /* 400000 */
+ { 135, 17, 124}, /* 500000 */
+ { 141, 17, 125}, /* 600000 */
+ { 150, 17, 126}, /* 700000 */
+ { 156, 17, 127}, /* 800000 */
+ { 164, 17, 128}, /* 900000 */
+ { 4, 17, 129}, /* 1/12 */
+ { 127, 17, 130}, /* 5/12 */
+ { 143, 17, 131}, /* 7/12 */
+ { 11, 17, 132}, /* 1/320 */
+ { 19, 17, 133}, /* 1/80 */
+ { 16, 17, 134}, /* 1/64 */
+ { 10, 17, 135}, /* 1/32 */
+ { 92, 17, 136}, /* 3/64 */
+ { 66, 17, 137}, /* 216000 */
+ { 119, 17, 138}, /* 432000 */
+ { 26, 17, 139}, /* 1000000 */
+ { 29, 17, 140}, /* 10000000000 */
+ { 27, 17, 141}, /* 10000000 */
+ { 61, 17, 142}, /* 20000000 */
+ {1367, 18, 0}, /* UNKNOWN */
+ {1446, 18, 0}, /* ZZZZ */
+ { 421, 18, 1}, /* COMMON */
+ {1445, 18, 1}, /* ZYYY */
+ { 790, 18, 2}, /* LATIN */
+ { 806, 18, 2}, /* LATN */
+ { 275, 18, 3}, /* BOPOMOFO */
+ { 274, 18, 3}, /* BOPO */
+ { 715, 18, 4}, /* INHERITED */
+ {1438, 18, 4}, /* ZINH */
+ {1157, 18, 4}, /* QAAI */
+ { 631, 18, 5}, /* GREEK */
+ { 635, 18, 5}, /* GREK */
+ { 446, 18, 6}, /* COPTIC */
+ { 445, 18, 6}, /* COPT */
+ {1156, 18, 6}, /* QAAC */
+ { 466, 18, 7}, /* CYRILLIC */
+ { 476, 18, 7}, /* CYRL */
+ { 216, 18, 8}, /* ARMENIAN */
+ { 218, 18, 8}, /* ARMN */
+ { 673, 18, 9}, /* HEBREW */
+ { 672, 18, 9}, /* HEBR */
+ { 203, 18, 10}, /* ARABIC */
+ { 202, 18, 10}, /* ARAB */
+ {1295, 18, 11}, /* SYRIAC */
+ {1294, 18, 11}, /* SYRC */
+ {1335, 18, 12}, /* THAANA */
+ {1334, 18, 12}, /* THAA */
+ {1012, 18, 13}, /* NKO */
+ {1013, 18, 13}, /* NKOO */
+ {1193, 18, 14}, /* SAMARITAN */
+ {1194, 18, 14}, /* SAMR */
+ { 881, 18, 15}, /* MANDAIC */
+ { 880, 18, 15}, /* MAND */
+ { 493, 18, 16}, /* DEVANAGARI */
+ { 492, 18, 16}, /* DEVA */
+ { 257, 18, 17}, /* BENGALI */
+ { 256, 18, 17}, /* BENG */
+ { 641, 18, 18}, /* GURMUKHI */
+ { 642, 18, 18}, /* GURU */
+ { 638, 18, 19}, /* GUJARATI */
+ { 639, 18, 19}, /* GUJR */
+ {1071, 18, 20}, /* ORIYA */
+ {1074, 18, 20}, /* ORYA */
+ {1314, 18, 21}, /* TAMIL */
+ {1317, 18, 21}, /* TAML */
+ {1328, 18, 22}, /* TELUGU */
+ {1327, 18, 22}, /* TELU */
+ { 761, 18, 23}, /* KANNADA */
+ { 779, 18, 23}, /* KNDA */
+ { 868, 18, 24}, /* MALAYALAM */
+ { 959, 18, 24}, /* MLYM */
+ {1227, 18, 25}, /* SINHALA */
+ {1226, 18, 25}, /* SINH */
+ {1336, 18, 26}, /* THAI */
+ { 788, 18, 27}, /* LAO */
+ { 789, 18, 27}, /* LAOO */
+ {1337, 18, 28}, /* TIBETAN */
+ {1338, 18, 28}, /* TIBT */
+ { 978, 18, 29}, /* MYANMAR */
+ { 983, 18, 29}, /* MYMR */
+ { 607, 18, 30}, /* GEORGIAN */
+ { 606, 18, 30}, /* GEOR */
+ { 654, 18, 31}, /* HANGUL */
+ { 653, 18, 31}, /* HANG */
+ { 560, 18, 32}, /* ETHIOPIC */
+ { 559, 18, 32}, /* ETHI */
+ { 367, 18, 33}, /* CHEROKEE */
+ { 366, 18, 33}, /* CHER */
+ { 305, 18, 34}, /* CANADIANABORIGINAL */
+ { 309, 18, 34}, /* CANS */
+ {1050, 18, 35}, /* OGHAM */
+ {1049, 18, 35}, /* OGAM */
+ {1186, 18, 36}, /* RUNIC */
+ {1187, 18, 36}, /* RUNR */
+ {1300, 18, 37}, /* TAGALOG */
+ {1333, 18, 37}, /* TGLG */
+ { 668, 18, 38}, /* HANUNOO */
+ { 665, 18, 38}, /* HANO */
+ { 297, 18, 39}, /* BUHID */
+ { 296, 18, 39}, /* BUHD */
+ {1302, 18, 40}, /* TAGBANWA */
+ {1301, 18, 40}, /* TAGB */
+ { 772, 18, 41}, /* KHMER */
+ { 774, 18, 41}, /* KHMR */
+ { 968, 18, 42}, /* MONGOLIAN */
+ { 967, 18, 42}, /* MONG */
+ { 825, 18, 43}, /* LIMBU */
+ { 824, 18, 43}, /* LIMB */
+ {1305, 18, 44}, /* TAILE */
+ {1312, 18, 44}, /* TALE */
+ {1001, 18, 45}, /* NEWTAILUE */
+ {1313, 18, 45}, /* TALU */
+ { 295, 18, 46}, /* BUGINESE */
+ { 294, 18, 46}, /* BUGI */
+ {1306, 18, 47}, /* TAITHAM */
+ { 787, 18, 47}, /* LANA */
+ { 240, 18, 48}, /* BALINESE */
+ { 239, 18, 48}, /* BALI */
+ {1260, 18, 49}, /* SUNDANESE */
+ {1259, 18, 49}, /* SUND */
+ { 248, 18, 50}, /* BATAK */
+ { 249, 18, 50}, /* BATK */
+ { 819, 18, 51}, /* LEPCHA */
+ { 818, 18, 51}, /* LEPC */
+ {1054, 18, 52}, /* OLCHIKI */
+ {1055, 18, 52}, /* OLCK */
+ { 288, 18, 53}, /* BRAILLE */
+ { 287, 18, 53}, /* BRAI */
+ { 614, 18, 54}, /* GLAGOLITIC */
+ { 613, 18, 54}, /* GLAG */
+ {1339, 18, 55}, /* TIFINAGH */
+ {1332, 18, 55}, /* TFNG */
+ { 652, 18, 56}, /* HAN */
+ { 661, 18, 56}, /* HANI */
+ { 684, 18, 57}, /* HIRAGANA */
+ { 683, 18, 57}, /* HIRA */
+ { 763, 18, 58}, /* KATAKANA */
+ { 752, 18, 58}, /* KANA */
+ {1424, 18, 59}, /* YI */
+ {1425, 18, 59}, /* YIII */
+ { 835, 18, 60}, /* LISU */
+ {1373, 18, 61}, /* VAI */
+ {1374, 18, 61}, /* VAII */
+ { 242, 18, 62}, /* BAMUM */
+ { 241, 18, 62}, /* BAMU */
+ {1289, 18, 63}, /* SYLOTINAGRI */
+ {1288, 18, 63}, /* SYLO */
+ {1119, 18, 64}, /* PHAGSPA */
+ {1118, 18, 64}, /* PHAG */
+ {1197, 18, 65}, /* SAURASHTRA */
+ {1196, 18, 65}, /* SAUR */
+ { 767, 18, 66}, /* KAYAHLI */
+ { 751, 18, 66}, /* KALI */
+ {1169, 18, 67}, /* REJANG */
+ {1178, 18, 67}, /* RJNG */
+ { 737, 18, 68}, /* JAVANESE */
+ { 736, 18, 68}, /* JAVA */
+ { 360, 18, 69}, /* CHAM */
+ {1307, 18, 70}, /* TAIVIET */
+ {1323, 18, 70}, /* TAVT */
+ { 932, 18, 71}, /* MEETEIMAYEK */
+ { 973, 18, 71}, /* MTEI */
+ { 829, 18, 72}, /* LINEARB */
+ { 827, 18, 72}, /* LINB */
+ { 857, 18, 73}, /* LYCIAN */
+ { 856, 18, 73}, /* LYCI */
+ { 312, 18, 74}, /* CARIAN */
+ { 311, 18, 74}, /* CARI */
+ {1057, 18, 75}, /* OLDITALIC */
+ { 732, 18, 75}, /* ITAL */
+ { 622, 18, 76}, /* GOTHIC */
+ { 621, 18, 76}, /* GOTH */
+ {1059, 18, 77}, /* OLDPERMIC */
+ {1116, 18, 77}, /* PERM */
+ {1361, 18, 78}, /* UGARITIC */
+ {1360, 18, 78}, /* UGAR */
+ {1060, 18, 79}, /* OLDPERSIAN */
+ {1414, 18, 79}, /* XPEO */
+ { 491, 18, 80}, /* DESERET */
+ { 515, 18, 80}, /* DSRT */
+ {1216, 18, 81}, /* SHAVIAN */
+ {1217, 18, 81}, /* SHAW */
+ {1078, 18, 82}, /* OSMANYA */
+ {1077, 18, 82}, /* OSMA */
+ {1075, 18, 83}, /* OSAGE */
+ {1076, 18, 83}, /* OSGE */
+ { 533, 18, 84}, /* ELBASAN */
+ { 532, 18, 84}, /* ELBA */
+ { 317, 18, 85}, /* CAUCASIANALBANIAN */
+ { 176, 18, 85}, /* AGHB */
+ { 828, 18, 86}, /* LINEARA */
+ { 826, 18, 86}, /* LINA */
+ { 464, 18, 87}, /* CYPRIOT */
+ { 451, 18, 87}, /* CPRT */
+ { 708, 18, 88}, /* IMPERIALARAMAIC */
+ { 217, 18, 88}, /* ARMI */
+ {1102, 18, 89}, /* PALMYRENE */
+ {1101, 18, 89}, /* PALM */
+ { 987, 18, 90}, /* NABATAEAN */
+ { 995, 18, 90}, /* NBAT */
+ { 670, 18, 91}, /* HATRAN */
+ { 669, 18, 91}, /* HATR */
+ {1125, 18, 92}, /* PHOENICIAN */
+ {1124, 18, 92}, /* PHNX */
+ { 859, 18, 93}, /* LYDIAN */
+ { 858, 18, 93}, /* LYDI */
+ { 940, 18, 94}, /* MEROITICHIEROGLYPHS */
+ { 938, 18, 94}, /* MERO */
+ { 939, 18, 95}, /* MEROITICCURSIVE */
+ { 937, 18, 95}, /* MERC */
+ { 770, 18, 96}, /* KHAROSHTHI */
+ { 769, 18, 96}, /* KHAR */
+ {1062, 18, 97}, /* OLDSOUTHARABIAN */
+ {1195, 18, 97}, /* SARB */
+ {1058, 18, 98}, /* OLDNORTHARABIAN */
+ { 992, 18, 98}, /* NARB */
+ { 884, 18, 99}, /* MANICHAEAN */
+ { 883, 18, 99}, /* MANI */
+ { 234, 18, 100}, /* AVESTAN */
+ { 235, 18, 100}, /* AVST */
+ { 722, 18, 101}, /* INSCRIPTIONALPARTHIAN */
+ {1149, 18, 101}, /* PRTI */
+ { 721, 18, 102}, /* INSCRIPTIONALPAHLAVI */
+ {1122, 18, 102}, /* PHLI */
+ {1151, 18, 103}, /* PSALTERPAHLAVI */
+ {1123, 18, 103}, /* PHLP */
+ {1063, 18, 104}, /* OLDTURKIC */
+ {1072, 18, 104}, /* ORKH */
+ {1056, 18, 105}, /* OLDHUNGARIAN */
+ { 691, 18, 105}, /* HUNG */
+ { 662, 18, 106}, /* HANIFIROHINGYA */
+ {1182, 18, 106}, /* ROHG */
+ {1423, 18, 107}, /* YEZIDI */
+ {1422, 18, 107}, /* YEZI */
+ {1061, 18, 108}, /* OLDSOGDIAN */
+ {1241, 18, 108}, /* SOGO */
+ {1240, 18, 109}, /* SOGDIAN */
+ {1239, 18, 109}, /* SOGD */
+ { 371, 18, 110}, /* CHORASMIAN */
+ { 372, 18, 110}, /* CHRS */
+ { 535, 18, 111}, /* ELYMAIC */
+ { 534, 18, 111}, /* ELYM */
+ { 285, 18, 112}, /* BRAHMI */
+ { 284, 18, 112}, /* BRAH */
+ { 750, 18, 113}, /* KAITHI */
+ { 781, 18, 113}, /* KTHI */
+ {1243, 18, 114}, /* SORASOMPENG */
+ {1242, 18, 114}, /* SORA */
+ { 359, 18, 115}, /* CHAKMA */
+ { 303, 18, 115}, /* CAKM */
+ { 862, 18, 116}, /* MAHAJANI */
+ { 863, 18, 116}, /* MAHJ */
+ {1215, 18, 117}, /* SHARADA */
+ {1220, 18, 117}, /* SHRD */
+ { 776, 18, 118}, /* KHOJKI */
+ { 775, 18, 118}, /* KHOJ */
+ { 975, 18, 119}, /* MULTANI */
+ { 974, 18, 119}, /* MULT */
+ { 777, 18, 120}, /* KHUDAWADI */
+ {1224, 18, 120}, /* SIND */
+ { 624, 18, 121}, /* GRANTHA */
+ { 623, 18, 121}, /* GRAN */
+ { 999, 18, 122}, /* NEWA */
+ {1341, 18, 123}, /* TIRHUTA */
+ {1340, 18, 123}, /* TIRH */
+ {1222, 18, 124}, /* SIDDHAM */
+ {1221, 18, 124}, /* SIDD */
+ { 961, 18, 125}, /* MODI */
+ {1311, 18, 126}, /* TAKRI */
+ {1310, 18, 126}, /* TAKR */
+ { 178, 18, 127}, /* AHOM */
+ { 508, 18, 128}, /* DOGRA */
+ { 507, 18, 128}, /* DOGR */
+ {1396, 18, 129}, /* WARANGCITI */
+ {1395, 18, 129}, /* WARA */
+ { 506, 18, 130}, /* DIVESAKURU */
+ { 503, 18, 130}, /* DIAK */
+ { 990, 18, 131}, /* NANDINAGARI */
+ { 989, 18, 131}, /* NAND */
+ {1435, 18, 132}, /* ZANABAZARSQUARE */
+ {1436, 18, 132}, /* ZANB */
+ {1245, 18, 133}, /* SOYOMBO */
+ {1244, 18, 133}, /* SOYO */
+ {1109, 18, 134}, /* PAUCINHAU */
+ {1108, 18, 134}, /* PAUC */
+ { 259, 18, 135}, /* BHAIKSUKI */
+ { 260, 18, 135}, /* BHKS */
+ { 913, 18, 136}, /* MARCHEN */
+ { 912, 18, 136}, /* MARC */
+ { 915, 18, 137}, /* MASARAMGONDI */
+ { 620, 18, 137}, /* GONM */
+ { 640, 18, 138}, /* GUNJALAGONDI */
+ { 619, 18, 138}, /* GONG */
+ { 867, 18, 139}, /* MAKASAR */
+ { 866, 18, 139}, /* MAKA */
+ { 454, 18, 140}, /* CUNEIFORM */
+ {1415, 18, 140}, /* XSUX */
+ { 531, 18, 141}, /* EGYPTIANHIEROGLYPHS */
+ { 529, 18, 141}, /* EGYP */
+ { 195, 18, 142}, /* ANATOLIANHIEROGLYPHS */
+ { 686, 18, 142}, /* HLUW */
+ { 971, 18, 143}, /* MRO */
+ { 972, 18, 143}, /* MROO */
+ { 247, 18, 144}, /* BASSAVAH */
+ { 246, 18, 144}, /* BASS */
+ {1100, 18, 145}, /* PAHAWHHMONG */
+ { 687, 18, 145}, /* HMNG */
+ { 928, 18, 146}, /* MEDEFAIDRIN */
+ { 929, 18, 146}, /* MEDF */
+ { 941, 18, 147}, /* MIAO */
+ {1132, 18, 147}, /* PLRD */
+ {1319, 18, 148}, /* TANGUT */
+ {1318, 18, 148}, /* TANG */
+ {1042, 18, 149}, /* NUSHU */
+ {1030, 18, 149}, /* NSHU */
+ { 771, 18, 150}, /* KHITANSMALLSCRIPT */
+ { 778, 18, 150}, /* KITS */
+ { 519, 18, 151}, /* DUPLOYAN */
+ { 518, 18, 151}, /* DUPL */
+ {1223, 18, 152}, /* SIGNWRITING */
+ {1214, 18, 152}, /* SGNW */
+ {1045, 18, 153}, /* NYIAKENGPUACHUEHMONG */
+ { 688, 18, 153}, /* HMNP */
+ {1394, 18, 154}, /* WANCHO */
+ {1399, 18, 154}, /* WCHO */
+ { 936, 18, 155}, /* MENDEKIKAKUI */
+ { 935, 18, 155}, /* MEND */
+ { 170, 18, 156}, /* ADLAM */
+ { 171, 18, 156}, /* ADLM */
+ { 765, 18, 157}, /* KATAKANAORHIRAGANA */
+ { 689, 18, 157}, /* HRKT */
+ {1079, 19, 0}, /* OTHER */
+ {1416, 19, 0}, /* XX */
+ {1246, 19, 1}, /* SP */
+ { 823, 19, 2}, /* LF */
+ { 452, 19, 3}, /* CR */
+ {1256, 19, 4}, /* STERM */
+ {1255, 19, 4}, /* ST */
+ { 406, 19, 5}, /* CLOSE */
+ { 405, 19, 5}, /* CL */
+ {1200, 19, 6}, /* SCONTINUE */
+ {1199, 19, 6}, /* SC */
+ { 228, 19, 7}, /* ATERM */
+ { 223, 19, 7}, /* AT */
+ {1038, 19, 8}, /* NUMERIC */
+ {1033, 19, 8}, /* NU */
+ {1369, 19, 9}, /* UPPER */
+ {1368, 19, 9}, /* UP */
+ { 843, 19, 10}, /* LOWER */
+ { 840, 19, 10}, /* LO */
+ {1211, 19, 11}, /* SEP */
+ {1205, 19, 11}, /* SE */
+ { 590, 19, 12}, /* FORMAT */
+ { 588, 19, 12}, /* FO */
+ {1064, 19, 13}, /* OLETTER */
+ { 809, 19, 13}, /* LE */
+ { 573, 19, 14}, /* EXTEND */
+ { 570, 19, 14}, /* EX */
+ {1079, 20, 0}, /* OTHER */
+ {1416, 20, 0}, /* XX */
+ { 823, 20, 1}, /* LF */
+ {1000, 20, 2}, /* NEWLINE */
+ {1014, 20, 2}, /* NL */
+ { 452, 20, 3}, /* CR */
+ {1407, 20, 4}, /* WSEGSPACE */
+ { 513, 20, 5}, /* DOUBLEQUOTE */
+ { 514, 20, 5}, /* DQ */
+ {1225, 20, 6}, /* SINGLEQUOTE */
+ {1252, 20, 6}, /* SQ */
+ { 943, 20, 7}, /* MIDNUM */
+ { 960, 20, 7}, /* MN */
+ { 944, 20, 8}, /* MIDNUMLET */
+ { 924, 20, 8}, /* MB */
+ {1038, 20, 9}, /* NUMERIC */
+ {1033, 20, 9}, /* NU */
+ { 942, 20, 10}, /* MIDLETTER */
+ { 958, 20, 10}, /* ML */
+ { 186, 20, 11}, /* ALETTER */
+ { 809, 20, 11}, /* LE */
+ { 576, 20, 12}, /* EXTENDNUMLET */
+ { 570, 20, 12}, /* EX */
+ { 590, 20, 13}, /* FORMAT */
+ { 588, 20, 13}, /* FO */
+ { 573, 20, 14}, /* EXTEND */
+ { 674, 20, 15}, /* HEBREWLETTER */
+ { 685, 20, 15}, /* HL */
+ {1443, 20, 16}, /* ZWJ */
+ { 763, 20, 17}, /* KATAKANA */
+ { 748, 20, 17}, /* KA */
+ {1166, 20, 18}, /* REGIONALINDICATOR */
+ {1171, 20, 18}, /* RI */
+ { 525, 20, 19}, /* EBASE */
+ { 524, 20, 19}, /* EB */
+ { 526, 20, 20}, /* EBASEGAZ */
+ { 527, 20, 20}, /* EBG */
+ { 538, 20, 21}, /* EMODIFIER */
+ { 536, 20, 21}, /* EM */
+ { 618, 20, 22}, /* GLUEAFTERZWJ */
+ { 597, 20, 22}, /* GAZ */
};
-/* property values: 6272 bytes. */
-
/* Codepoints which expand on full case-folding. */
-
RE_UINT16 re_expand_on_folding[] = {
223, 304, 329, 496, 912, 944, 1415, 7830,
7831, 7832, 7833, 7834, 7838, 8016, 8018, 8020,
@@ -3216,4231 +3254,9697 @@ RE_UINT16 re_expand_on_folding[] = {
8131, 8132, 8134, 8135, 8140, 8146, 8147, 8150,
8151, 8162, 8163, 8164, 8166, 8167, 8178, 8179,
8180, 8182, 8183, 8188, 64256, 64257, 64258, 64259,
- 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279,
+ 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279
};
-/* expand_on_folding: 208 bytes. */
-
-/* General_Category. */
-
-static RE_UINT8 re_general_category_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28,
- 29, 26, 30, 31, 32, 33, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 26, 57, 58, 59, 59, 59, 59, 59, 26, 26, 60, 59, 59, 59, 59, 59,
- 59, 59, 26, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 26, 62, 59, 63, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 64, 26, 65, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 66, 67, 59, 59, 59, 59, 68, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 69, 70, 71, 72, 73, 74, 59, 59,
- 75, 76, 59, 59, 77, 59, 78, 79, 80, 81, 73, 82, 83, 84, 59, 59,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 85, 26, 26, 26, 26, 26, 26, 26, 86, 87, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 88, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 89, 59, 59, 59, 59, 59, 59, 26, 90, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 91, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 92,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 92,
+/* Alphabetic. */
+static RE_UINT8 re_alphabetic_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 10, 39, 10, 10, 40, 10, 41, 42, 43, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 44, 13, 13, 13, 45, 46, 13,
+ 13, 13, 13, 47, 13, 13, 13, 13, 13, 13, 48, 10, 10, 10, 49, 10,
+ 13, 13, 13, 13, 50, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT16 re_general_category_stage_2[] = {
- 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12,
- 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23,
- 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31,
- 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39,
- 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13,
- 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50,
- 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58,
- 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66,
- 48, 67, 68, 69, 48, 70, 71, 72, 72, 72, 48, 73, 72, 74, 75, 32,
- 76, 48, 48, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 83, 84, 91, 92, 93, 94, 95, 96, 97, 84, 98, 99, 100, 88, 101,
- 102, 83, 84, 103, 104, 105, 88, 106, 107, 108, 109, 110, 111, 112, 94, 113,
- 114, 115, 84, 116, 117, 118, 88, 119, 120, 115, 84, 121, 122, 123, 88, 124,
- 125, 115, 48, 126, 127, 128, 88, 129, 130, 131, 48, 132, 133, 134, 94, 135,
- 136, 48, 48, 137, 138, 139, 72, 72, 140, 48, 141, 142, 143, 144, 72, 72,
- 145, 146, 147, 148, 149, 48, 150, 151, 152, 153, 32, 154, 155, 156, 72, 72,
- 48, 48, 157, 158, 159, 160, 161, 162, 163, 164, 9, 9, 165, 11, 11, 166,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 167, 168, 48, 48, 167, 48, 48, 169, 170, 171, 48, 48,
- 48, 170, 48, 48, 48, 172, 173, 174, 48, 175, 9, 9, 9, 9, 9, 176,
- 177, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 178, 48, 179, 180, 48, 48, 48, 48, 181, 182,
- 183, 184, 48, 185, 48, 186, 183, 187, 48, 48, 48, 188, 189, 190, 191, 192,
- 193, 191, 48, 48, 194, 48, 48, 195, 196, 48, 197, 48, 48, 48, 48, 198,
- 48, 199, 200, 201, 202, 48, 203, 204, 48, 48, 205, 48, 206, 207, 208, 208,
- 48, 209, 48, 48, 48, 210, 211, 212, 191, 191, 213, 214, 72, 72, 72, 72,
- 215, 48, 48, 216, 217, 159, 218, 219, 220, 48, 221, 64, 48, 48, 222, 223,
- 48, 48, 224, 225, 226, 64, 48, 227, 228, 9, 9, 229, 230, 231, 232, 233,
- 11, 11, 234, 27, 27, 27, 235, 236, 11, 237, 27, 27, 32, 32, 32, 238,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 239, 13, 13, 13, 13, 13, 13,
- 240, 241, 240, 240, 241, 242, 240, 243, 244, 244, 244, 245, 246, 247, 248, 249,
- 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 260, 72, 261, 262, 263,
- 264, 265, 266, 267, 268, 269, 270, 270, 271, 272, 273, 208, 274, 275, 208, 276,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 278, 208, 279, 208, 208, 208, 208, 280, 208, 281, 277, 282, 208, 283, 284, 208,
- 208, 208, 285, 72, 286, 72, 269, 269, 269, 287, 208, 208, 208, 208, 288, 269,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 289, 290, 208, 208, 291,
- 208, 208, 208, 208, 208, 208, 292, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 293, 294, 269, 295, 208, 208, 296, 277, 297, 277,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 277, 277, 277, 277, 277, 277, 277, 277, 298, 299, 277, 277, 277, 300, 277, 301,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 208, 208, 208, 277, 302, 208, 208, 303, 208, 304, 208, 208, 208, 208, 208, 208,
- 9, 9, 305, 11, 11, 306, 307, 308, 13, 13, 13, 13, 13, 13, 309, 310,
- 11, 11, 311, 48, 48, 48, 312, 313, 48, 314, 315, 315, 315, 315, 32, 32,
- 316, 317, 318, 319, 320, 72, 72, 72, 208, 321, 208, 208, 208, 208, 208, 322,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 323, 72, 324,
- 325, 326, 327, 328, 136, 48, 48, 48, 48, 329, 177, 48, 48, 48, 48, 330,
- 331, 48, 48, 136, 48, 48, 48, 48, 199, 332, 48, 71, 208, 208, 322, 48,
- 208, 333, 334, 208, 335, 336, 208, 208, 334, 208, 208, 336, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 198, 208, 208, 208, 208,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 72,
- 48, 337, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 150, 208, 208, 208, 285, 48, 48, 227,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 338, 48, 339, 72, 13, 13, 340, 341, 13, 342, 48, 48, 48, 48, 343, 344,
- 31, 345, 346, 347, 13, 13, 13, 348, 349, 350, 351, 352, 353, 72, 72, 354,
- 355, 48, 356, 357, 48, 48, 48, 358, 359, 48, 48, 360, 361, 191, 32, 362,
- 64, 48, 363, 48, 364, 365, 48, 150, 76, 48, 48, 366, 367, 368, 369, 370,
- 48, 48, 371, 372, 373, 374, 48, 375, 48, 48, 48, 376, 377, 378, 379, 380,
- 381, 382, 315, 11, 11, 383, 384, 11, 11, 11, 11, 11, 48, 48, 385, 191,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 386, 48, 387, 48, 48, 205,
- 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388,
- 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 203, 48, 48, 48, 48, 48, 48, 206, 72, 72,
- 390, 391, 392, 393, 394, 48, 48, 48, 48, 48, 48, 395, 396, 397, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 398, 72, 48, 48, 48, 48, 399, 48, 48, 400, 72, 72, 401,
- 32, 402, 32, 403, 404, 405, 406, 407, 48, 48, 48, 48, 48, 48, 48, 408,
- 409, 2, 3, 4, 5, 410, 411, 412, 48, 413, 48, 199, 414, 415, 416, 417,
- 418, 48, 171, 419, 203, 203, 72, 72, 48, 48, 48, 48, 48, 48, 48, 71,
- 420, 269, 269, 421, 270, 270, 270, 422, 423, 324, 424, 72, 72, 208, 208, 425,
- 72, 72, 72, 72, 72, 72, 72, 72, 48, 150, 48, 48, 48, 100, 426, 427,
- 48, 48, 428, 48, 429, 48, 48, 430, 48, 431, 48, 48, 432, 433, 72, 72,
- 9, 9, 434, 11, 11, 48, 48, 48, 48, 203, 191, 9, 9, 435, 11, 436,
- 48, 48, 400, 48, 48, 48, 437, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 314, 48, 198, 400, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 438, 48, 48, 439, 48, 440, 48, 441, 48, 199, 442, 72, 72, 72, 48, 443,
- 48, 444, 48, 445, 72, 72, 72, 72, 48, 48, 48, 446, 269, 447, 269, 269,
- 448, 449, 48, 450, 451, 452, 48, 453, 48, 454, 72, 72, 455, 48, 456, 457,
- 48, 48, 48, 458, 48, 459, 48, 460, 48, 461, 462, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 195, 72, 72, 72, 9, 9, 9, 463, 11, 11, 11, 464,
- 48, 48, 465, 191, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 269, 466, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 454, 467, 48, 62, 468, 72, 72, 72, 72, 72, 72, 72, 72, 48, 314,
- 469, 48, 48, 470, 471, 447, 472, 473, 220, 48, 48, 474, 475, 48, 195, 191,
- 476, 48, 477, 478, 479, 48, 48, 480, 220, 48, 48, 481, 482, 483, 484, 485,
- 48, 97, 486, 487, 72, 72, 72, 72, 488, 489, 490, 48, 48, 491, 492, 191,
- 493, 83, 84, 494, 495, 496, 497, 498, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 499, 500, 501, 72, 72, 48, 48, 48, 502, 503, 191, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 504, 505, 506, 507, 72, 72,
- 48, 48, 48, 508, 509, 191, 510, 72, 48, 48, 511, 512, 191, 72, 72, 72,
- 48, 172, 513, 514, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 486, 515, 72, 72, 72, 72, 72, 72, 9, 9, 11, 11, 147, 516,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 517, 48, 48, 518, 519, 72,
- 520, 48, 48, 521, 522, 523, 48, 48, 524, 525, 526, 72, 48, 48, 48, 195,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 84, 48, 504, 527, 528, 147, 174, 529, 48, 530, 531, 532, 72, 72, 72, 72,
- 533, 48, 48, 534, 535, 191, 536, 48, 537, 538, 191, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 539,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 269, 540, 541, 542,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 206, 72, 72, 72, 72, 72, 72,
- 270, 270, 270, 270, 270, 270, 543, 544, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 386, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 199, 545, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 314, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 195, 48, 199, 368, 72, 72, 72, 72, 72, 72, 48, 203, 546,
- 48, 48, 48, 547, 548, 549, 550, 551, 48, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 9, 9, 11, 11, 269, 552, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 553, 554, 555, 555, 556, 557, 72, 72, 72, 72, 558, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 400,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 559,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 199, 72, 72, 72, 559, 560, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 205,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 71, 150, 195, 561, 562, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 323,
- 208, 208, 563, 208, 208, 208, 564, 565, 566, 208, 567, 208, 208, 208, 568, 72,
- 208, 208, 208, 208, 569, 72, 72, 72, 72, 72, 72, 72, 72, 72, 269, 570,
- 208, 208, 208, 208, 208, 285, 269, 451, 72, 72, 72, 72, 72, 72, 72, 72,
- 9, 571, 11, 572, 573, 574, 240, 9, 575, 576, 577, 578, 579, 9, 571, 11,
- 580, 581, 11, 582, 583, 584, 585, 9, 586, 11, 9, 571, 11, 572, 573, 11,
- 240, 9, 575, 585, 9, 586, 11, 9, 571, 11, 587, 9, 588, 589, 590, 591,
- 11, 592, 9, 593, 594, 595, 596, 11, 597, 9, 598, 11, 599, 600, 600, 600,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 32, 32, 32, 601, 32, 32, 602, 603, 604, 605, 45, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 606, 607, 608, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 150, 609, 610, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 611, 612,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 613, 614, 72, 72,
- 9, 9, 575, 11, 615, 368, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 484, 269, 269, 616, 617, 72, 72, 72, 72,
- 484, 269, 618, 619, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 620, 48, 621, 622, 623, 624, 625, 626, 627, 205, 628, 205, 72, 72, 72, 629,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 208, 208, 324, 208, 208, 208, 208, 208, 208, 322, 333, 630, 630, 630, 208, 323,
- 174, 208, 208, 208, 208, 208, 631, 208, 208, 208, 631, 72, 72, 72, 632, 208,
- 633, 208, 208, 324, 568, 634, 323, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 635,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 323, 631, 286,
- 208, 208, 208, 208, 208, 208, 208, 322, 208, 208, 208, 208, 208, 568, 324, 72,
- 324, 208, 208, 208, 636, 175, 208, 208, 636, 208, 637, 72, 72, 72, 72, 72,
- 638, 208, 208, 208, 208, 208, 208, 639, 208, 208, 640, 208, 641, 208, 208, 208,
- 208, 208, 208, 208, 208, 322, 637, 642, 633, 323, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 203, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 643, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 100, 72,
- 48, 203, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 644, 72, 645, 645, 645, 645, 645, 645, 72, 72, 72, 72, 72, 72, 72, 72,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
- 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 646,
+static RE_UINT8 re_alphabetic_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 7, 8, 9, 10, 4, 11,
+ 4, 4, 4, 4, 12, 4, 4, 4, 4, 13, 14, 4, 15, 16, 17, 18,
+ 19, 4, 20, 21, 4, 4, 22, 23, 24, 4, 25, 4, 4, 26, 27, 28,
+ 29, 30, 31, 32, 0, 33, 34, 35, 4, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 0,
+ 57, 58, 59, 60, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 0, 75, 76, 77, 0, 78, 0, 79, 80, 81, 82, 0, 0,
+ 4, 83, 24, 4, 84, 4, 85, 86, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 87, 4, 88, 89, 90, 4, 91, 4, 73, 0, 92, 4, 4, 93,
+ 72, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 94, 1, 4, 4, 95, 96, 97, 97, 98, 4, 99, 100, 0,
+ 0, 4, 4, 31, 4, 101, 4, 102, 103, 104, 24, 105, 4, 106, 107, 0,
+ 108, 4, 103, 109, 0, 110, 78, 0, 4, 111, 112, 0, 4, 113, 4, 114,
+ 4, 115, 116, 117, 118, 65, 0, 119, 4, 4, 4, 4, 4, 4, 0, 120,
+ 4, 4, 4, 4, 4, 4, 4, 4, 93, 4, 121, 117, 4, 122, 123, 124,
+ 0, 0, 0, 125, 126, 0, 0, 0, 127, 128, 129, 4, 15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 130, 4, 107, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 131, 103, 4, 4, 4, 4, 132, 4, 85, 4, 133, 115, 134, 134, 4,
+ 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 136, 137, 72, 4, 138, 72, 4, 86, 139, 13, 4, 4, 140, 4, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 82,
+ 4, 4, 4, 4, 30, 0, 24, 117, 4, 4, 4, 4, 4, 4, 4, 4,
+ 141, 142, 4, 143, 4, 4, 4, 92, 144, 145, 4, 4, 146, 4, 147, 148,
+ 149, 150, 4, 97, 4, 4, 151, 152, 27, 101, 153, 82, 4, 154, 135, 155,
+ 4, 115, 156, 157, 4, 103, 158, 159, 160, 161, 86, 162, 4, 4, 4, 32,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 163, 164, 108,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 165, 4, 4, 166, 0, 167, 168, 169, 4, 4, 26, 170, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 117, 24, 4, 171, 4, 150, 172,
+ 0, 0, 0, 173, 4, 4, 4, 82, 0, 1, 1, 174, 4, 103, 175, 0,
+ 176, 177, 178, 0, 4, 4, 4, 73, 0, 0, 4, 179, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 4, 180, 0, 4, 25, 101, 73, 117, 4, 181, 0,
+ 4, 4, 4, 4, 117, 24, 182, 108, 4, 183, 4, 60, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 115, 102, 150, 0, 0, 0, 0,
+ 184, 185, 102, 115, 103, 0, 0, 186, 102, 166, 0, 0, 4, 187, 0, 0,
+ 188, 102, 0, 82, 82, 0, 79, 189, 4, 102, 102, 153, 26, 0, 0, 0,
+ 4, 4, 15, 0, 4, 153, 4, 153, 4, 150, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 190, 0, 0, 82, 191, 192, 0, 0, 24, 189, 115,
+ 4, 4, 192, 0, 145, 31, 24, 15, 4, 153, 193, 194, 4, 4, 195, 0,
+ 196, 197, 0, 0, 198, 118, 4, 15, 39, 48, 199, 60, 0, 0, 0, 0,
+ 4, 4, 200, 201, 4, 4, 202, 0, 0, 0, 0, 0, 4, 203, 204, 0,
+ 4, 103, 205, 0, 4, 206, 0, 0, 65, 32, 0, 0, 0, 0, 0, 0,
+ 4, 31, 0, 0, 0, 4, 4, 207, 208, 209, 210, 0, 0, 211, 29, 212,
+ 4, 213, 24, 4, 214, 0, 4, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 215, 216, 78, 217, 171, 218, 0, 0, 219, 220, 221, 222, 223, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 224, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 166, 0, 0, 0,
+ 4, 4, 4, 140, 4, 4, 4, 4, 4, 4, 60, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 31, 103, 0, 0, 0, 24, 156, 4, 92, 60, 226, 92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 227, 4, 228, 0, 0, 229,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 230,
+ 4, 4, 4, 4, 4, 4, 102, 0, 15, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 103, 0, 231, 193, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 33, 4, 234, 235, 236, 4, 237, 238, 239, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 240, 241, 86, 33, 33, 131, 131, 215, 215, 242, 0,
+ 243, 244, 0, 0, 0, 0, 0, 0, 4, 245, 246, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 247, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 189, 0, 4, 4, 248, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 236, 249, 250, 251, 252, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 162, 162, 107, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 117, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 179, 4, 4, 4, 4, 4, 4,
+ 117, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 254, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 78,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 32, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_general_category_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2,
- 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, 25,
- 26, 27, 15, 2, 28, 29, 27, 30, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 31, 11, 11, 11, 32, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 33, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 16, 32, 32, 32,
- 32, 32, 32, 32, 11, 34, 34, 16, 34, 32, 32, 11, 34, 11, 16, 11,
- 11, 34, 32, 11, 32, 16, 11, 34, 32, 32, 32, 11, 34, 16, 32, 11,
- 34, 11, 34, 34, 32, 35, 32, 16, 36, 36, 37, 34, 38, 37, 34, 34,
- 34, 34, 34, 34, 34, 34, 16, 32, 34, 38, 32, 11, 32, 32, 32, 32,
- 32, 32, 16, 16, 16, 11, 34, 32, 34, 34, 11, 32, 32, 32, 32, 32,
- 16, 16, 39, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 41, 41, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41,
- 40, 40, 42, 41, 41, 41, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41,
- 43, 43, 43, 43, 43, 43, 43, 43, 32, 32, 42, 32, 44, 45, 16, 10,
- 44, 44, 41, 46, 11, 47, 47, 11, 34, 11, 11, 11, 11, 11, 11, 11,
- 11, 48, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 34,
- 16, 11, 32, 16, 32, 32, 32, 32, 16, 16, 32, 49, 34, 32, 34, 11,
- 32, 50, 43, 43, 51, 32, 32, 32, 11, 34, 34, 34, 34, 34, 34, 16,
- 48, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 47, 52, 2, 2, 2,
- 16, 16, 16, 16, 53, 54, 55, 56, 57, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, 58, 59, 60, 43, 59, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 62,
- 36, 63, 64, 44, 44, 44, 44, 44, 65, 65, 65, 8, 9, 66, 2, 67,
- 43, 43, 43, 43, 43, 60, 68, 2, 69, 36, 36, 36, 36, 70, 43, 43,
- 7, 7, 7, 7, 7, 2, 2, 36, 71, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 72, 43, 43, 43, 73, 50, 43, 43, 74, 75, 76, 43, 43, 36,
- 7, 7, 7, 7, 7, 36, 77, 78, 2, 2, 2, 2, 2, 2, 2, 79,
- 70, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 80, 62, 36,
- 36, 36, 36, 43, 43, 43, 43, 43, 71, 44, 44, 44, 44, 44, 44, 44,
- 7, 7, 7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43,
- 43, 43, 40, 21, 2, 81, 57, 20, 36, 36, 36, 43, 43, 75, 43, 43,
- 43, 43, 75, 43, 75, 43, 43, 44, 2, 2, 2, 2, 2, 2, 2, 64,
- 36, 36, 36, 36, 70, 43, 44, 64, 36, 36, 36, 36, 36, 61, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 36, 36, 61, 36, 36, 36, 36, 44,
- 44, 57, 43, 43, 43, 43, 43, 43, 43, 82, 43, 43, 43, 43, 43, 43,
- 43, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 71, 84,
- 85, 43, 43, 43, 83, 84, 85, 84, 70, 43, 43, 43, 36, 36, 36, 36,
- 36, 43, 2, 7, 7, 7, 7, 7, 86, 36, 36, 36, 36, 36, 36, 36,
- 70, 84, 62, 36, 36, 36, 61, 62, 61, 62, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 61, 36, 36, 36, 61, 61, 44, 36, 36, 44, 71, 84,
- 85, 43, 80, 87, 88, 87, 85, 61, 44, 44, 44, 87, 44, 44, 36, 62,
- 36, 43, 44, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 56, 63, 80,
- 57, 83, 62, 36, 36, 61, 44, 62, 61, 36, 62, 61, 36, 44, 80, 84,
- 85, 80, 44, 57, 80, 57, 43, 44, 57, 44, 44, 44, 62, 36, 61, 61,
- 44, 44, 44, 7, 7, 7, 7, 7, 43, 36, 70, 64, 44, 44, 44, 44,
- 57, 83, 62, 36, 36, 36, 36, 62, 36, 62, 36, 36, 36, 36, 36, 36,
- 61, 36, 62, 36, 36, 44, 71, 84, 85, 43, 43, 57, 83, 87, 85, 44,
- 61, 44, 44, 44, 44, 44, 44, 44, 66, 44, 44, 44, 62, 43, 43, 43,
- 57, 84, 62, 36, 36, 36, 61, 62, 61, 36, 62, 36, 36, 44, 71, 85,
- 85, 43, 80, 87, 88, 87, 85, 44, 44, 44, 44, 83, 44, 44, 36, 62,
- 78, 27, 27, 27, 44, 44, 44, 44, 44, 71, 62, 36, 36, 61, 44, 36,
- 61, 36, 36, 44, 62, 61, 61, 36, 44, 62, 61, 44, 36, 61, 44, 36,
- 36, 36, 36, 36, 36, 44, 44, 84, 83, 88, 44, 84, 88, 84, 85, 44,
- 61, 44, 44, 87, 44, 44, 44, 44, 27, 89, 67, 67, 56, 90, 44, 44,
- 83, 84, 71, 36, 36, 36, 61, 36, 61, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 44, 62, 43, 83, 84, 88, 43, 80, 43, 43, 44,
- 44, 44, 57, 80, 36, 61, 44, 44, 44, 44, 44, 91, 27, 27, 27, 89,
- 70, 84, 72, 36, 36, 36, 61, 36, 36, 36, 62, 36, 36, 44, 71, 85,
- 84, 84, 88, 83, 88, 84, 43, 44, 44, 44, 87, 88, 44, 44, 44, 61,
- 62, 61, 44, 44, 44, 44, 44, 44, 43, 84, 62, 36, 36, 36, 61, 36,
- 36, 36, 36, 36, 36, 70, 71, 84, 85, 43, 80, 84, 88, 84, 85, 77,
- 44, 44, 36, 92, 27, 27, 27, 93, 27, 27, 27, 27, 89, 36, 36, 36,
- 44, 84, 62, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 36, 36, 36,
- 36, 62, 36, 36, 36, 36, 62, 44, 36, 36, 36, 61, 44, 80, 44, 87,
- 84, 43, 80, 80, 84, 84, 84, 84, 44, 84, 64, 44, 44, 44, 44, 44,
- 62, 36, 36, 36, 36, 36, 36, 36, 70, 36, 43, 43, 43, 80, 44, 94,
- 36, 36, 36, 75, 43, 43, 43, 60, 7, 7, 7, 7, 7, 2, 44, 44,
- 62, 61, 61, 36, 36, 61, 36, 36, 36, 36, 62, 62, 36, 36, 36, 36,
- 70, 36, 43, 43, 43, 43, 71, 44, 36, 36, 61, 81, 43, 43, 43, 44,
- 7, 7, 7, 7, 7, 44, 36, 36, 77, 67, 2, 2, 2, 2, 2, 2,
- 2, 95, 95, 67, 43, 67, 67, 67, 7, 7, 7, 7, 7, 27, 27, 27,
- 27, 27, 50, 50, 50, 4, 4, 84, 36, 36, 36, 36, 62, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 61, 44, 57, 43, 43, 43, 43, 43, 43, 83,
- 43, 43, 60, 43, 36, 36, 70, 43, 43, 43, 43, 43, 57, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 80, 67, 67, 67, 67, 76, 67, 67, 90, 67,
- 2, 2, 95, 67, 21, 64, 44, 44, 36, 36, 36, 36, 36, 92, 85, 43,
- 83, 43, 43, 43, 85, 83, 85, 71, 7, 7, 7, 7, 7, 2, 2, 2,
- 36, 36, 36, 84, 43, 36, 36, 43, 71, 84, 96, 92, 84, 84, 84, 36,
- 70, 43, 71, 36, 36, 36, 36, 36, 36, 83, 85, 83, 84, 84, 85, 92,
- 7, 7, 7, 7, 7, 84, 85, 67, 11, 11, 11, 48, 44, 44, 48, 44,
- 16, 16, 16, 16, 16, 53, 45, 16, 36, 36, 36, 36, 61, 36, 36, 44,
- 36, 36, 36, 61, 61, 36, 36, 44, 61, 36, 36, 44, 36, 36, 36, 61,
- 61, 36, 36, 44, 36, 36, 36, 36, 36, 36, 36, 61, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 61, 57, 43, 2, 2, 2, 2, 97, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 98, 44, 67, 67, 67, 67, 67, 44, 44, 44,
- 11, 11, 11, 44, 16, 16, 16, 44, 99, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 77, 72, 100, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 101, 102, 44, 36, 36, 36, 36, 36, 63, 2, 103,
- 104, 36, 36, 36, 61, 44, 44, 44, 36, 36, 36, 36, 36, 36, 61, 36,
- 36, 43, 80, 44, 44, 44, 44, 44, 36, 43, 60, 64, 44, 44, 44, 44,
- 36, 43, 44, 44, 44, 44, 44, 44, 61, 43, 44, 44, 44, 44, 44, 44,
- 36, 36, 43, 85, 43, 43, 43, 84, 84, 84, 84, 83, 85, 43, 43, 43,
- 43, 43, 2, 86, 2, 66, 70, 44, 7, 7, 7, 7, 7, 44, 44, 44,
- 27, 27, 27, 27, 27, 44, 44, 44, 2, 2, 2, 105, 2, 59, 43, 68,
- 36, 106, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 44, 44,
- 36, 36, 70, 71, 36, 36, 36, 36, 36, 36, 36, 36, 70, 61, 44, 44,
- 36, 36, 36, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 36, 61,
- 43, 83, 84, 85, 83, 84, 44, 44, 84, 83, 84, 84, 85, 43, 44, 44,
- 90, 44, 2, 7, 7, 7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 44,
- 36, 36, 61, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 44, 44,
- 36, 36, 36, 36, 36, 44, 44, 44, 7, 7, 7, 7, 7, 98, 44, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 36, 36, 36, 70, 83, 85, 44, 2,
- 36, 36, 92, 83, 43, 43, 43, 80, 83, 83, 85, 43, 43, 43, 83, 84,
- 84, 85, 43, 43, 43, 43, 80, 57, 2, 2, 2, 86, 2, 2, 2, 44,
- 43, 43, 43, 43, 43, 43, 43, 107, 43, 43, 96, 36, 36, 36, 36, 36,
- 36, 36, 83, 43, 43, 83, 83, 84, 84, 83, 96, 36, 36, 36, 44, 44,
- 95, 67, 67, 67, 67, 50, 43, 43, 43, 43, 67, 67, 67, 67, 90, 44,
- 43, 96, 36, 36, 36, 36, 36, 36, 92, 43, 43, 84, 43, 85, 43, 36,
- 36, 36, 36, 83, 43, 84, 85, 85, 43, 84, 44, 44, 44, 44, 2, 2,
- 36, 36, 84, 84, 84, 84, 43, 43, 43, 43, 84, 43, 44, 91, 2, 2,
- 7, 7, 7, 7, 7, 44, 62, 36, 36, 36, 36, 36, 40, 40, 40, 2,
- 16, 16, 16, 16, 108, 44, 44, 44, 11, 11, 11, 11, 11, 47, 48, 11,
- 2, 2, 2, 2, 44, 44, 44, 44, 43, 60, 43, 43, 43, 43, 43, 43,
- 83, 43, 43, 43, 71, 36, 70, 36, 36, 36, 71, 92, 43, 61, 44, 44,
- 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 45, 16, 16,
- 16, 16, 16, 16, 45, 16, 16, 16, 16, 16, 16, 16, 16, 109, 40, 40,
- 43, 43, 43, 43, 43, 57, 43, 43, 32, 32, 32, 16, 16, 16, 16, 32,
- 16, 16, 16, 16, 11, 11, 11, 11, 16, 16, 16, 44, 11, 11, 11, 44,
- 16, 16, 16, 16, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 44,
- 16, 16, 16, 16, 110, 110, 110, 110, 16, 16, 108, 16, 11, 11, 111, 112,
- 41, 16, 108, 16, 11, 11, 111, 41, 16, 16, 44, 16, 11, 11, 113, 41,
- 16, 16, 16, 16, 11, 11, 114, 41, 44, 16, 108, 16, 11, 11, 111, 115,
- 116, 116, 116, 116, 116, 117, 65, 65, 118, 118, 118, 2, 119, 120, 119, 120,
- 2, 2, 2, 2, 121, 65, 65, 122, 2, 2, 2, 2, 123, 124, 2, 125,
- 126, 2, 127, 128, 2, 2, 2, 2, 2, 9, 126, 2, 2, 2, 2, 129,
- 65, 65, 68, 65, 65, 65, 65, 65, 130, 44, 27, 27, 27, 8, 127, 131,
- 27, 27, 27, 27, 27, 8, 127, 102, 40, 40, 40, 40, 40, 40, 81, 44,
- 20, 20, 20, 20, 20, 20, 20, 20, 43, 43, 43, 43, 43, 43, 132, 51,
- 133, 51, 133, 43, 43, 43, 43, 43, 80, 44, 44, 44, 44, 44, 44, 44,
- 67, 134, 67, 135, 67, 34, 11, 16, 11, 32, 135, 67, 49, 11, 11, 67,
- 67, 67, 134, 134, 134, 11, 11, 136, 11, 11, 35, 36, 39, 67, 16, 11,
- 8, 8, 49, 16, 16, 26, 67, 137, 27, 27, 27, 27, 27, 27, 27, 27,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 138, 139, 103, 140, 67, 44, 44,
- 8, 8, 141, 67, 67, 8, 67, 67, 141, 26, 67, 141, 67, 67, 67, 141,
- 67, 67, 67, 67, 67, 67, 67, 8, 67, 141, 141, 67, 67, 67, 67, 67,
- 67, 67, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 67, 67, 67, 67, 4, 4, 67, 67, 8, 67, 67, 67, 142, 143, 67, 67,
- 67, 67, 67, 67, 67, 67, 141, 67, 67, 67, 67, 67, 67, 26, 8, 8,
- 8, 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8,
- 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90, 44, 44, 44, 44,
- 67, 67, 67, 67, 67, 90, 44, 44, 27, 27, 27, 27, 27, 27, 67, 67,
- 67, 67, 67, 67, 67, 27, 27, 27, 67, 67, 67, 26, 67, 67, 67, 67,
- 26, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8, 8, 8,
- 67, 67, 67, 67, 67, 67, 67, 26, 67, 67, 67, 67, 4, 4, 4, 4,
- 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67,
- 8, 8, 127, 144, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4,
- 8, 127, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 8, 8, 8,
- 8, 8, 8, 8, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8,
- 8, 8, 141, 26, 8, 8, 141, 67, 67, 67, 44, 67, 67, 67, 67, 67,
- 67, 67, 67, 44, 67, 67, 67, 67, 11, 11, 11, 11, 11, 11, 11, 47,
- 16, 16, 16, 16, 16, 16, 16, 108, 32, 11, 32, 34, 34, 34, 34, 11,
- 32, 32, 34, 16, 16, 16, 40, 11, 32, 32, 137, 67, 67, 135, 34, 146,
- 43, 32, 44, 44, 91, 2, 97, 2, 16, 16, 16, 147, 44, 44, 147, 44,
- 36, 36, 36, 36, 44, 44, 44, 52, 64, 44, 44, 44, 44, 44, 44, 57,
- 36, 36, 36, 61, 44, 44, 44, 44, 36, 36, 36, 61, 36, 36, 36, 61,
- 2, 119, 119, 2, 123, 124, 119, 2, 2, 2, 2, 6, 2, 105, 119, 2,
- 119, 4, 4, 4, 4, 2, 2, 86, 2, 2, 2, 2, 2, 118, 2, 2,
- 105, 148, 2, 2, 2, 2, 2, 2, 67, 67, 67, 67, 67, 55, 67, 67,
- 67, 67, 44, 44, 44, 44, 44, 44, 67, 67, 67, 44, 44, 44, 44, 44,
- 67, 67, 67, 67, 67, 67, 44, 44, 1, 2, 149, 150, 4, 4, 4, 4,
- 4, 67, 4, 4, 4, 4, 151, 152, 153, 103, 103, 103, 103, 43, 43, 84,
- 154, 40, 40, 67, 103, 155, 63, 67, 36, 36, 36, 61, 57, 156, 157, 69,
- 36, 36, 36, 36, 36, 63, 40, 69, 44, 44, 62, 36, 36, 36, 36, 36,
- 67, 27, 27, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90,
- 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27,
- 158, 27, 27, 27, 27, 27, 27, 27, 36, 36, 106, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 159, 2, 7, 7, 7, 7, 7, 36, 44, 44,
- 32, 32, 32, 32, 32, 32, 32, 70, 51, 160, 43, 43, 43, 43, 43, 86,
- 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36, 103, 103, 103, 103, 103,
- 43, 2, 2, 2, 44, 44, 44, 44, 41, 41, 41, 157, 40, 40, 40, 40,
- 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32,
- 45, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42, 161, 34, 35,
- 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32,
- 11, 11, 32, 32, 32, 32, 32, 32, 44, 32, 11, 47, 44, 44, 44, 44,
- 44, 44, 44, 62, 40, 35, 36, 36, 36, 71, 36, 71, 36, 70, 36, 36,
- 36, 92, 85, 83, 67, 67, 44, 44, 27, 27, 27, 67, 162, 44, 44, 44,
- 36, 36, 2, 2, 44, 44, 44, 44, 84, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 84, 84, 84, 84, 84, 84, 84, 84, 43, 44, 44, 44, 44, 2,
- 43, 36, 36, 36, 2, 72, 72, 70, 36, 36, 36, 43, 43, 43, 43, 2,
- 36, 36, 36, 70, 43, 43, 43, 43, 43, 84, 44, 44, 44, 44, 44, 91,
- 36, 70, 84, 43, 43, 84, 43, 84, 163, 2, 2, 2, 2, 2, 2, 52,
- 7, 7, 7, 7, 7, 44, 44, 2, 36, 36, 70, 69, 36, 36, 36, 36,
- 7, 7, 7, 7, 7, 36, 36, 61, 36, 36, 36, 36, 70, 43, 43, 83,
- 85, 83, 85, 80, 44, 44, 44, 44, 36, 70, 36, 36, 36, 36, 83, 44,
- 7, 7, 7, 7, 7, 44, 2, 2, 69, 36, 36, 77, 67, 92, 83, 36,
- 71, 43, 71, 70, 71, 36, 36, 43, 70, 61, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 62, 106, 2, 36, 36, 36, 36, 36, 92, 43, 84,
- 2, 106, 164, 80, 44, 44, 44, 44, 62, 36, 36, 61, 62, 36, 36, 61,
- 62, 36, 36, 61, 44, 44, 44, 44, 16, 16, 16, 16, 16, 112, 40, 40,
- 16, 16, 16, 16, 44, 44, 44, 44, 36, 92, 85, 84, 83, 163, 85, 44,
- 36, 36, 44, 44, 44, 44, 44, 44, 36, 36, 36, 61, 44, 62, 36, 36,
- 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166,
- 16, 16, 16, 108, 44, 44, 44, 44, 44, 147, 16, 16, 44, 44, 62, 71,
- 36, 36, 36, 36, 167, 36, 36, 36, 36, 36, 36, 61, 36, 36, 61, 61,
- 36, 62, 61, 36, 36, 36, 36, 36, 36, 41, 41, 41, 41, 41, 41, 41,
- 41, 44, 44, 44, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 145, 44, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 162, 44,
- 2, 2, 2, 168, 128, 44, 44, 44, 6, 169, 170, 145, 145, 145, 145, 145,
- 145, 145, 128, 168, 128, 2, 125, 171, 2, 64, 2, 2, 151, 145, 145, 128,
- 2, 172, 8, 173, 66, 2, 44, 44, 36, 36, 61, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 61, 79, 91, 2, 3, 2, 4, 5, 6, 2,
- 16, 16, 16, 16, 16, 17, 18, 127, 128, 4, 2, 36, 36, 36, 36, 36,
- 69, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 40,
- 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 61, 44,
- 20, 174, 56, 175, 26, 8, 141, 90, 44, 44, 44, 44, 79, 65, 67, 44,
- 36, 36, 36, 36, 36, 36, 62, 36, 36, 36, 36, 36, 36, 61, 36, 62,
- 2, 64, 44, 176, 27, 27, 27, 27, 27, 27, 44, 55, 67, 67, 67, 67,
- 103, 103, 140, 27, 89, 67, 67, 67, 67, 67, 67, 67, 67, 27, 67, 90,
- 90, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 50, 44,
- 177, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 44, 44,
- 27, 27, 44, 44, 44, 44, 62, 36, 150, 36, 36, 36, 36, 178, 44, 44,
- 36, 36, 36, 43, 43, 80, 44, 44, 36, 36, 36, 36, 36, 36, 36, 91,
- 36, 36, 44, 44, 36, 36, 36, 36, 179, 103, 103, 44, 44, 44, 44, 44,
- 11, 11, 11, 11, 16, 16, 16, 16, 11, 11, 44, 44, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 44, 44, 36, 36, 44, 44, 44, 44, 44, 91,
- 36, 36, 36, 44, 61, 36, 36, 36, 36, 36, 36, 62, 61, 44, 61, 62,
- 36, 36, 36, 91, 27, 27, 27, 27, 36, 36, 36, 77, 158, 27, 27, 27,
- 44, 44, 44, 176, 27, 27, 27, 27, 36, 61, 36, 44, 44, 176, 27, 27,
- 36, 36, 36, 27, 27, 27, 44, 91, 36, 36, 36, 36, 36, 44, 44, 91,
- 36, 36, 36, 36, 44, 44, 27, 36, 44, 27, 27, 27, 27, 27, 27, 27,
- 70, 43, 57, 80, 44, 44, 43, 43, 36, 36, 62, 36, 62, 36, 36, 36,
- 36, 36, 36, 44, 43, 80, 44, 57, 27, 27, 27, 27, 98, 44, 44, 44,
- 2, 2, 2, 2, 64, 44, 44, 44, 36, 36, 36, 36, 36, 36, 180, 30,
- 36, 36, 36, 36, 36, 36, 180, 27, 36, 36, 36, 36, 78, 36, 36, 36,
- 36, 36, 70, 80, 44, 176, 27, 27, 2, 2, 2, 64, 44, 44, 44, 44,
- 36, 36, 36, 44, 91, 2, 2, 2, 36, 36, 36, 44, 27, 27, 27, 27,
- 36, 61, 44, 44, 27, 27, 27, 27, 36, 44, 44, 44, 91, 2, 64, 44,
- 44, 44, 44, 44, 176, 27, 27, 27, 11, 47, 44, 44, 44, 44, 44, 44,
- 16, 108, 44, 44, 44, 27, 27, 27, 36, 36, 43, 43, 44, 44, 44, 44,
- 27, 27, 27, 27, 27, 27, 27, 98, 27, 27, 27, 93, 44, 44, 44, 44,
- 177, 27, 30, 2, 2, 44, 44, 44, 85, 96, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 43, 60, 2, 2, 2, 44,
- 27, 27, 27, 7, 7, 7, 7, 7, 44, 44, 44, 44, 44, 44, 44, 57,
- 84, 85, 43, 83, 85, 60, 181, 2, 2, 44, 44, 44, 44, 44, 79, 44,
- 43, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43, 85, 43,
- 43, 43, 80, 7, 7, 7, 7, 7, 2, 2, 92, 88, 44, 44, 44, 44,
- 36, 70, 2, 61, 44, 44, 44, 44, 36, 92, 84, 43, 43, 43, 43, 83,
- 96, 36, 63, 2, 59, 43, 60, 44, 7, 7, 7, 7, 7, 63, 63, 2,
- 176, 27, 27, 27, 27, 27, 27, 27, 27, 27, 98, 44, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 84, 85, 43, 84, 83, 43, 2, 2, 2, 80,
- 36, 36, 36, 61, 61, 36, 36, 62, 36, 36, 36, 36, 36, 36, 36, 62,
- 36, 36, 36, 36, 63, 44, 44, 44, 36, 36, 36, 36, 36, 36, 36, 70,
- 84, 85, 43, 43, 43, 80, 44, 44, 43, 84, 62, 36, 36, 36, 61, 62,
- 61, 36, 62, 36, 36, 57, 71, 84, 83, 84, 88, 87, 88, 87, 84, 44,
- 61, 44, 44, 87, 44, 44, 62, 36, 36, 84, 44, 43, 43, 43, 80, 44,
- 43, 43, 80, 44, 44, 44, 44, 44, 36, 36, 92, 84, 43, 43, 43, 43,
- 84, 43, 83, 71, 36, 63, 2, 2, 7, 7, 7, 7, 7, 91, 91, 71,
- 84, 85, 43, 43, 83, 83, 84, 85, 83, 43, 36, 72, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 92, 84, 43, 43, 44, 84, 84, 43, 85,
- 60, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 43, 44,
- 84, 85, 43, 43, 43, 83, 85, 85, 60, 2, 61, 44, 44, 44, 44, 44,
- 2, 2, 2, 2, 2, 2, 64, 44, 36, 36, 36, 36, 36, 70, 85, 84,
- 43, 43, 43, 85, 61, 44, 44, 44, 84, 43, 43, 85, 43, 43, 44, 44,
- 7, 7, 7, 7, 7, 27, 2, 95, 43, 43, 43, 43, 85, 60, 44, 44,
- 27, 98, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 44, 36, 36, 36,
- 92, 84, 43, 43, 44, 43, 84, 84, 71, 72, 88, 44, 44, 44, 44, 44,
- 70, 43, 43, 43, 43, 71, 36, 36, 36, 70, 43, 43, 83, 70, 43, 60,
- 2, 2, 2, 59, 44, 44, 44, 44, 70, 43, 43, 83, 85, 43, 36, 36,
- 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 83, 43, 2, 72, 2,
- 2, 64, 44, 44, 44, 44, 44, 44, 43, 43, 43, 80, 43, 43, 43, 85,
- 63, 2, 2, 44, 44, 44, 44, 44, 2, 36, 36, 36, 36, 36, 36, 36,
- 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 87, 43, 43, 43,
- 83, 43, 85, 80, 44, 44, 44, 44, 36, 36, 36, 61, 36, 62, 36, 36,
- 70, 43, 43, 80, 44, 80, 43, 57, 43, 43, 43, 70, 44, 44, 44, 44,
- 36, 36, 36, 62, 61, 36, 36, 36, 36, 36, 36, 36, 36, 84, 84, 88,
- 43, 87, 85, 85, 61, 44, 44, 44, 36, 70, 83, 163, 64, 44, 44, 44,
- 27, 27, 89, 67, 67, 67, 56, 20, 162, 67, 67, 67, 67, 67, 67, 67,
- 67, 44, 44, 44, 44, 44, 44, 91, 103, 103, 103, 103, 103, 103, 103, 178,
- 2, 2, 64, 44, 44, 44, 44, 44, 65, 65, 65, 65, 68, 44, 44, 44,
- 43, 43, 60, 44, 44, 44, 44, 44, 43, 43, 43, 60, 2, 2, 67, 67,
- 40, 40, 95, 44, 44, 44, 44, 44, 7, 7, 7, 7, 7, 176, 27, 27,
- 27, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 62, 36,
- 27, 27, 27, 30, 2, 64, 44, 44, 36, 36, 36, 36, 36, 61, 44, 57,
- 92, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 44, 44, 44, 57, 43, 74, 40, 40, 40, 40, 40, 40,
- 40, 86, 44, 44, 44, 44, 44, 44, 36, 61, 44, 44, 44, 44, 44, 44,
- 44, 44, 36, 36, 44, 44, 44, 44, 36, 36, 36, 36, 36, 44, 50, 60,
- 65, 65, 44, 44, 44, 44, 44, 44, 67, 67, 67, 90, 55, 67, 67, 67,
- 67, 67, 182, 85, 43, 67, 182, 84, 84, 183, 65, 65, 65, 82, 43, 43,
- 43, 76, 50, 43, 43, 43, 67, 67, 67, 67, 67, 67, 67, 43, 43, 67,
- 67, 67, 67, 67, 90, 44, 44, 44, 67, 43, 76, 44, 44, 44, 44, 44,
- 27, 27, 44, 44, 44, 44, 44, 44, 11, 11, 11, 11, 11, 16, 16, 16,
- 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16,
- 16, 16, 108, 16, 16, 16, 16, 16, 11, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 47, 11, 44, 47, 48, 47, 48, 11, 47, 11,
- 11, 11, 11, 16, 16, 147, 147, 16, 16, 16, 147, 16, 16, 16, 16, 16,
- 16, 16, 11, 48, 11, 47, 48, 11, 11, 11, 47, 11, 11, 11, 47, 16,
- 16, 16, 16, 16, 11, 48, 11, 47, 11, 11, 47, 47, 44, 11, 11, 11,
- 47, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 11,
- 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 44, 11, 11, 11, 11,
- 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, 16, 16,
- 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, 16, 16,
- 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16,
- 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 32, 44, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 43, 43, 43, 76, 67, 50, 43, 43,
- 43, 43, 43, 43, 43, 43, 76, 67, 67, 67, 50, 67, 67, 67, 67, 67,
- 67, 67, 76, 21, 2, 2, 44, 44, 44, 44, 44, 44, 44, 57, 43, 43,
- 43, 43, 43, 80, 43, 43, 43, 43, 43, 43, 43, 43, 80, 57, 43, 43,
- 43, 57, 80, 43, 43, 80, 44, 44, 43, 43, 43, 74, 40, 40, 40, 44,
- 7, 7, 7, 7, 7, 44, 44, 77, 36, 36, 36, 36, 36, 36, 43, 43,
- 7, 7, 7, 7, 7, 44, 44, 94, 36, 36, 61, 176, 27, 27, 27, 27,
- 43, 43, 43, 80, 44, 44, 44, 44, 16, 16, 43, 43, 43, 74, 44, 44,
- 27, 27, 27, 27, 27, 27, 158, 27, 184, 27, 98, 44, 44, 44, 44, 44,
- 27, 27, 27, 27, 27, 27, 27, 158, 27, 27, 27, 27, 27, 27, 27, 44,
- 36, 36, 62, 36, 36, 36, 36, 36, 62, 61, 61, 62, 62, 36, 36, 36,
- 36, 61, 36, 36, 62, 62, 44, 44, 44, 61, 44, 62, 62, 62, 62, 36,
- 62, 61, 61, 62, 62, 62, 62, 62, 62, 61, 61, 62, 36, 61, 36, 36,
- 36, 61, 36, 36, 62, 36, 61, 61, 36, 36, 36, 36, 36, 62, 36, 36,
- 62, 36, 62, 36, 36, 62, 36, 36, 8, 44, 44, 44, 44, 44, 44, 44,
- 55, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90, 44,
- 44, 44, 44, 67, 67, 67, 67, 67, 67, 90, 44, 44, 44, 44, 44, 44,
- 67, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 25, 41, 41,
- 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 67, 44,
- 67, 67, 67, 67, 67, 67, 55, 67, 67, 55, 67, 90, 44, 67, 67, 67,
- 67, 90, 55, 67, 67, 90, 44, 67, 67, 67, 67, 67, 67, 90, 55, 67,
- 67, 67, 44, 44, 67, 90, 44, 44, 36, 44, 44, 44, 44, 44, 44, 44,
- 79, 44, 44, 44, 44, 44, 44, 44, 65, 65, 65, 65, 65, 65, 65, 65,
- 166, 166, 166, 166, 166, 166, 166, 44,
+static RE_UINT8 re_alphabetic_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
+ 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 32, 0, 0, 0,
+ 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
+ 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0,
+ 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0, 0, 0, 255, 7,
+ 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31, 254, 225, 0, 156,
+ 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0, 0, 252, 255, 255,
+ 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0, 255, 255, 255, 1,
+ 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 240, 255, 248, 3, 255, 255,
+ 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255, 239, 159, 249, 255,
+ 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16, 238, 135, 249, 255,
+ 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0, 238, 191, 251, 255,
+ 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30, 238, 159, 249, 255,
+ 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195,
+ 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227, 223, 29, 96, 7,
+ 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64, 15, 0, 6, 0,
+ 255, 223, 253, 255, 255, 255, 255, 231, 223, 93, 240, 128, 15, 0, 0, 252,
+ 238, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0,
+ 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 0, 0, 214, 247, 255, 255,
+ 175, 255, 255, 59, 95, 32, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255,
+ 255, 31, 254, 255, 3, 255, 255, 254, 255, 255, 255, 31, 255, 255, 127, 249,
+ 255, 255, 0, 60, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
+ 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255,
+ 255, 1, 128, 16, 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0,
+ 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 128, 255, 255, 239, 255,
+ 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0, 255, 255, 127, 0,
+ 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 0, 222, 111, 4,
+ 128, 255, 31, 0, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
+ 80, 189, 255, 243, 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255,
+ 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0,
+ 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143,
+ 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255, 252, 7, 0, 0,
+ 0, 0, 224, 255, 191, 255, 255, 255, 255, 0, 0, 0, 47, 0, 0, 0,
+ 0, 0, 252, 232, 255, 255, 7, 0, 255, 255, 247, 255, 255, 255, 0, 124,
+ 255, 63, 0, 0, 255, 255, 127, 252, 5, 0, 0, 56, 255, 255, 60, 0,
+ 126, 126, 126, 0, 127, 127, 255, 255, 255, 3, 255, 255, 15, 0, 255, 255,
+ 127, 248, 255, 255, 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 224,
+ 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255,
+ 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 31, 0,
+ 255, 255, 1, 0, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192,
+ 111, 240, 239, 254, 31, 0, 0, 0, 255, 27, 3, 0, 128, 0, 255, 255,
+ 63, 0, 0, 0, 240, 0, 255, 255, 255, 255, 71, 0, 30, 192, 0, 20,
+ 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191, 159, 25, 129, 224,
+ 187, 7, 0, 128, 3, 0, 0, 0, 179, 0, 0, 0, 255, 255, 63, 127,
+ 0, 0, 0, 63, 17, 0, 0, 0, 255, 255, 63, 1, 0, 0, 0, 128,
+ 127, 242, 111, 255, 255, 255, 191, 153, 7, 0, 0, 0, 255, 252, 255, 255,
+ 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32, 255, 253, 255, 255,
+ 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255,
+ 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255, 255, 127, 123, 1,
+ 0, 0, 1, 0, 127, 0, 0, 0, 248, 255, 255, 224, 255, 135, 255, 255,
+ 255, 128, 255, 255, 11, 0, 3, 0, 255, 255, 255, 0, 0, 0, 7, 0,
+ 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 253, 255, 255, 247, 247, 15, 0, 0, 127, 255, 255, 249,
+ 219, 7, 0, 0, 255, 31, 128, 63, 0, 64, 0, 0, 255, 15, 0, 0,
+ 143, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
+ 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-static RE_UINT8 re_general_category_stage_4[] = {
- 15, 15, 12, 23, 23, 23, 25, 23, 20, 21, 23, 24, 23, 19, 9, 9,
- 24, 24, 24, 23, 23, 1, 1, 1, 1, 20, 23, 21, 26, 22, 26, 2,
- 2, 2, 2, 20, 24, 21, 24, 15, 25, 25, 27, 23, 26, 27, 5, 28,
- 24, 16, 27, 26, 27, 24, 11, 11, 26, 11, 5, 29, 11, 23, 1, 24,
- 1, 2, 2, 24, 2, 1, 2, 5, 5, 5, 1, 3, 3, 2, 5, 2,
- 4, 4, 26, 26, 4, 26, 6, 6, 0, 0, 4, 2, 1, 23, 1, 0,
- 0, 1, 24, 1, 27, 6, 7, 7, 0, 4, 2, 23, 19, 0, 0, 27,
- 27, 25, 0, 6, 19, 6, 23, 6, 6, 23, 5, 0, 0, 5, 5, 23,
- 23, 0, 16, 16, 23, 25, 27, 27, 16, 0, 4, 5, 5, 6, 6, 5,
- 23, 5, 6, 16, 6, 4, 4, 6, 6, 27, 5, 27, 27, 5, 0, 16,
- 6, 0, 4, 0, 16, 6, 6, 8, 8, 8, 8, 6, 23, 4, 0, 8,
- 8, 0, 11, 27, 27, 0, 0, 23, 5, 8, 11, 5, 0, 25, 23, 27,
- 8, 5, 23, 11, 11, 0, 19, 5, 12, 5, 5, 20, 21, 0, 10, 10,
- 10, 5, 19, 23, 5, 4, 7, 0, 2, 0, 2, 4, 3, 3, 3, 26,
- 2, 26, 0, 26, 1, 26, 26, 0, 12, 12, 12, 16, 19, 19, 28, 29,
- 20, 28, 13, 14, 16, 12, 23, 28, 29, 23, 23, 22, 22, 23, 24, 20,
- 21, 23, 23, 12, 11, 4, 21, 4, 6, 7, 7, 6, 1, 27, 27, 1,
- 27, 2, 2, 27, 10, 1, 2, 10, 10, 11, 24, 27, 27, 20, 21, 27,
- 21, 24, 21, 20, 2, 6, 0, 2, 20, 23, 27, 4, 5, 10, 19, 20,
- 21, 21, 27, 10, 19, 4, 10, 4, 6, 26, 26, 4, 27, 11, 4, 23,
- 7, 23, 26, 1, 25, 27, 8, 23, 4, 8, 18, 18, 17, 17, 5, 24,
- 23, 20, 19, 22, 22, 20, 22, 22, 24, 19, 24, 0, 24, 26, 25, 0,
- 0, 11, 6, 11, 10, 0, 23, 10, 5, 11, 23, 16, 27, 8, 8, 16,
- 25, 11,
-};
+RE_UINT32 re_get_alphabetic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* General_Category: 13674 bytes. */
-
-RE_UINT32 re_get_general_category(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 9;
- code = ch ^ (f << 9);
- pos = (RE_UINT32)re_general_category_stage_1[f] << 5;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_general_category_stage_2[pos + f] << 3;
- f = code >> 1;
- code ^= f << 1;
- pos = (RE_UINT32)re_general_category_stage_3[pos + f] << 1;
- value = re_general_category_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Block. */
+ v = re_alphabetic_table_1[field_2];
+ v = re_alphabetic_table_2[(v << 5) | field_1];
+ v = re_alphabetic_table_3[(v << 2) | field_0];
-static RE_UINT8 re_block_stage_1[] = {
+ return (v >> offset) & 0x1;
+}
+
+/* Alphanumeric. */
+static RE_UINT8 re_alphanumeric_table_1[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
- 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 16, 17, 18, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38, 36, 36,
- 36, 39, 36, 36, 36, 36, 36, 36, 36, 36, 40, 41, 42, 42, 42, 42,
- 42, 42, 43, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 36, 36, 45,
- 36, 36, 36, 36, 46, 47, 48, 36, 49, 36, 50, 51, 52, 53, 54, 36,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 57, 57, 57, 58, 59, 60,
- 60, 60, 60, 61, 62, 62, 62, 62, 62, 62, 63, 36, 36, 36, 64, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 65, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
-};
-
-static RE_UINT16 re_block_stage_2[] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10,
- 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 14, 15, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22,
- 23, 23, 24, 25, 26, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29,
- 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33,
- 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
- 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40,
- 41, 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 46, 46, 46,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 48, 49, 49, 49, 50, 51, 52, 53, 54, 54, 54, 54,
- 55, 55, 55, 55, 55, 56, 57, 57, 58, 58, 59, 60, 61, 61, 61, 62,
- 63, 64, 64, 64, 64, 65, 66, 66, 67, 67, 67, 67, 68, 68, 69, 69,
- 70, 70, 71, 72, 73, 74, 75, 76, 77, 77, 77, 77, 78, 78, 79, 79,
- 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81,
- 82, 82, 82, 83, 84, 85, 86, 87, 88, 88, 89, 90, 91, 92, 92, 92,
- 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94,
- 95, 95, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 100, 100,
- 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 104,
- 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 107,
- 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109,
- 110, 110, 110, 111, 112, 112, 112, 112, 113, 114, 115, 115, 116, 116, 116, 117,
- 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 121,
- 122, 122, 123, 123, 123, 124, 124, 124, 125, 126, 127, 127, 128, 129, 130, 131,
- 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133,
- 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
- 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
- 137, 137, 137, 137, 138, 139, 140, 141, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 143, 143, 143, 144, 144, 144, 145, 146, 146, 146, 146, 146, 146, 146,
- 147, 148, 149, 149, 150, 150, 150, 151, 152, 153, 154, 155, 156, 156, 156, 157,
- 158, 158, 158, 159, 160, 160, 160, 161, 162, 163, 164, 165, 166, 166, 167, 167,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 170, 170,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
- 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
- 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
- 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 177, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 179, 180, 181, 182, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 185,
- 186, 186, 186, 186, 187, 187, 187, 187, 188, 188, 189, 189, 190, 191, 192, 193,
- 26, 26, 26, 26, 194, 195, 195, 196, 197, 198, 199, 200, 201, 202, 202, 26,
- 203, 203, 204, 205, 206, 207, 208, 208, 209, 210, 211, 212, 26, 26, 26, 26,
- 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 26, 26, 26, 26,
- 214, 214, 215, 216, 217, 218, 26, 219, 220, 221, 26, 26, 222, 223, 223, 223,
- 224, 224, 224, 225, 226, 26, 227, 227, 228, 228, 229, 230, 231, 232, 26, 26,
- 233, 233, 234, 26, 235, 235, 235, 235, 236, 236, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 237, 26, 26, 26, 26, 238, 239, 240, 241, 26, 26, 26, 242,
- 243, 243, 243, 243, 244, 244, 245, 246, 247, 247, 248, 249, 250, 250, 250, 251,
- 252, 252, 253, 26, 254, 255, 256, 256, 257, 257, 257, 257, 26, 26, 26, 26,
- 258, 258, 258, 258, 259, 259, 259, 26, 26, 26, 26, 26, 260, 260, 260, 260,
- 261, 261, 261, 262, 263, 263, 264, 26, 265, 265, 26, 26, 26, 26, 26, 26,
- 266, 266, 267, 26, 26, 268, 268, 268, 26, 26, 26, 26, 26, 269, 269, 269,
- 270, 270, 271, 272, 272, 273, 274, 274, 26, 26, 26, 26, 26, 26, 26, 26,
- 275, 275, 275, 276, 277, 277, 26, 26, 278, 278, 278, 279, 279, 280, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 281, 26, 26, 26, 26, 26, 26, 282, 282,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 286, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 288, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
- 289, 289, 289, 289, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 291, 292, 26, 26, 293, 294, 295, 295, 295, 295, 296, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 297, 297, 297, 26, 26, 26, 298, 298, 298, 298, 298, 26, 26, 299,
- 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
- 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
- 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301, 26, 26, 26, 26, 26, 26, 26, 26,
- 302, 302, 302, 302, 302, 302, 302, 302, 303, 304, 305, 306, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 307, 307, 307, 26, 26, 26, 26, 26, 26, 26, 26,
- 308, 308, 308, 308, 308, 309, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, 311, 311, 311, 311, 311, 311,
- 312, 312, 313, 26, 26, 26, 26, 314, 315, 315, 315, 316, 26, 26, 26, 26,
- 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317,
- 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317,
- 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318,
- 318, 318, 318, 318, 318, 319, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 320, 321, 26, 26, 26, 26, 26, 26, 322, 322, 323, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 324, 324, 26, 26, 26, 26, 26, 26, 26, 26,
- 325, 325, 325, 325, 325, 325, 325, 26, 326, 326, 326, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 327, 328, 328, 26, 26, 329, 329, 330, 26, 26, 26, 26, 26,
- 331, 331, 331, 331, 331, 331, 331, 331, 26, 26, 26, 26, 26, 26, 26, 26,
- 332, 333, 334, 334, 334, 335, 335, 335, 336, 336, 336, 336, 336, 336, 336, 336,
- 337, 337, 337, 337, 337, 337, 337, 337, 338, 338, 338, 338, 338, 338, 338, 338,
- 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
- 339, 339, 340, 341, 342, 342, 342, 342, 343, 343, 343, 343, 344, 344, 344, 344,
- 345, 345, 345, 345, 345, 345, 345, 345, 346, 346, 346, 346, 346, 346, 346, 346,
- 347, 347, 347, 348, 349, 349, 349, 349, 26, 26, 26, 26, 26, 26, 26, 26,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 26, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 352, 352, 352, 352, 352, 352,
- 352, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 354, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 356,
- 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 358, 358, 358, 358, 26, 26, 26, 26, 359, 359, 359, 359, 359, 359, 359, 360,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
- 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
- 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
-};
-
-static RE_UINT16 re_block_stage_3[] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11,
- 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14,
- 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17,
- 18, 18, 18, 18, 19, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
- 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25,
- 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29,
- 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33,
- 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
- 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41,
- 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45,
- 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49,
- 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 52, 52,
- 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
- 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58,
- 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 62, 62,
- 62, 62, 62, 62, 63, 63, 64, 64, 64, 64, 64, 64, 65, 65, 66, 66,
- 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 69,
- 70, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 73, 73,
- 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75,
- 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78,
- 78, 78, 78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 81,
- 82, 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, 84, 85, 85, 85, 85,
- 86, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, 88, 89, 89, 89, 89,
- 89, 89, 90, 90, 91, 91, 91, 91, 92, 92, 92, 92, 93, 93, 93, 93,
- 94, 94, 94, 94, 95, 95, 95, 95, 96, 96, 96, 96, 97, 97, 97, 97,
- 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100,
- 101, 101, 101, 101, 102, 102, 102, 102, 103, 103, 103, 103, 104, 104, 104, 104,
- 105, 105, 105, 105, 20, 20, 106, 106, 107, 107, 107, 107, 108, 108, 108, 108,
- 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111,
- 111, 111, 112, 112, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115,
- 116, 116, 116, 116, 117, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 119,
- 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122,
- 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 125, 125, 125, 125,
- 126, 126, 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, 129, 129, 129, 129,
- 129, 129, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, 133, 133, 133, 133,
- 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136,
- 137, 137, 137, 137, 138, 138, 138, 138, 139, 139, 139, 139, 140, 140, 140, 140,
- 141, 141, 141, 141, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144,
- 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146,
- 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149,
- 150, 150, 150, 150, 151, 151, 151, 151, 152, 152, 152, 152, 153, 153, 153, 153,
- 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 157, 157,
- 158, 158, 159, 159, 159, 159, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161,
- 162, 162, 162, 162, 162, 162, 163, 163, 164, 164, 164, 164, 165, 165, 165, 165,
- 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168,
- 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 171, 171, 171, 171,
- 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 175, 175,
- 175, 175, 175, 175, 176, 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, 178,
- 178, 178, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 181, 181,
- 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183,
- 183, 183, 20, 20, 184, 184, 184, 184, 185, 185, 185, 185, 186, 186, 186, 186,
- 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 20, 20, 189, 189, 189, 189,
- 190, 190, 190, 190, 191, 191, 191, 191, 192, 192, 192, 192, 193, 193, 193, 193,
- 194, 194, 194, 194, 195, 195, 195, 195, 196, 196, 196, 196, 197, 197, 197, 197,
- 198, 198, 198, 198, 199, 199, 199, 199, 200, 200, 200, 200, 201, 201, 201, 201,
- 201, 201, 20, 20, 202, 202, 202, 202, 202, 202, 20, 20, 203, 203, 203, 203,
- 204, 204, 204, 204, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 207, 207,
- 207, 207, 207, 207, 207, 207, 20, 20, 208, 208, 208, 208, 209, 209, 209, 209,
- 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212,
- 212, 212, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 215, 215, 215, 215,
- 216, 216, 216, 216, 216, 216, 20, 20, 217, 217, 217, 217, 217, 217, 218, 218,
- 218, 218, 218, 218, 219, 219, 219, 219, 220, 220, 220, 220, 221, 221, 221, 221,
- 222, 222, 222, 222, 223, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 225,
- 225, 225, 20, 20, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 20, 20,
- 228, 228, 228, 228, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 231, 231,
- 231, 231, 231, 231, 231, 231, 20, 20, 232, 232, 232, 232, 233, 233, 233, 233,
- 233, 233, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 236, 236, 236, 236,
- 236, 236, 20, 20, 237, 237, 237, 237, 238, 238, 238, 238, 239, 239, 239, 239,
- 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 20, 20, 242, 242, 242, 242,
- 242, 242, 243, 243, 244, 244, 244, 244, 245, 245, 245, 245, 246, 246, 246, 246,
- 246, 246, 20, 20, 20, 20, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248,
- 248, 248, 20, 20, 249, 249, 249, 249, 250, 250, 250, 250, 251, 251, 251, 251,
- 252, 252, 252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 255, 255, 255, 255,
- 255, 255, 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, 257, 257, 257,
- 258, 258, 258, 258, 259, 259, 20, 20, 260, 260, 260, 260, 261, 261, 261, 261,
- 262, 262, 262, 262, 262, 262, 20, 20, 263, 263, 263, 263, 264, 264, 264, 264,
- 265, 265, 265, 265, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 20, 20,
- 268, 268, 268, 268, 268, 268, 20, 20, 269, 269, 269, 269, 269, 269, 20, 20,
- 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, 20, 20, 273, 273,
- 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 20, 20, 275, 275, 275, 275,
- 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278,
- 279, 279, 279, 279, 280, 280, 280, 280, 281, 281, 281, 281, 282, 282, 282, 282,
- 282, 282, 283, 283, 283, 283, 283, 283, 284, 284, 284, 284, 285, 285, 285, 285,
- 286, 286, 286, 286, 287, 287, 287, 287, 288, 288, 288, 288, 289, 289, 289, 289,
- 289, 289, 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, 292, 292, 292, 292,
- 293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295,
- 295, 295, 20, 20, 296, 296, 296, 296, 297, 297, 297, 297, 298, 298, 298, 298,
- 298, 298, 20, 20, 299, 299, 299, 299, 300, 300, 300, 300,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 10, 39, 10, 10, 40, 10, 41, 42, 43, 10, 44, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 45, 13, 13, 13, 46, 47, 13,
+ 13, 13, 13, 48, 13, 13, 13, 13, 13, 13, 49, 10, 10, 10, 50, 10,
+ 13, 13, 13, 13, 51, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT16 re_block_stage_4[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
- 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,
- 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
- 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18,
- 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20,
- 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
- 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
- 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
- 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31,
- 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
- 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35,
- 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37,
- 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
- 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41,
- 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43,
- 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45,
- 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47,
- 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49,
- 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51,
- 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53,
- 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55,
- 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57,
- 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59,
- 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61,
- 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63,
- 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65,
- 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67,
- 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
- 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71,
- 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73,
- 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75,
- 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77,
- 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79,
- 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81,
- 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83,
- 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85,
- 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87,
- 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89,
- 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91,
- 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93,
- 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95,
- 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97,
- 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99,
- 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
- 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103,
- 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105,
- 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107,
- 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109,
- 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111,
- 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113,
- 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117,
- 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119,
- 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121,
- 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123,
- 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
- 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127,
- 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129,
- 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131,
- 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133,
- 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135,
- 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137,
- 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139,
- 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141,
- 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143,
- 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145,
- 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147,
- 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149,
- 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151,
- 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153,
- 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155,
- 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157,
- 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159,
- 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161,
- 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163,
- 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165,
- 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167,
- 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169,
- 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171,
- 172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173,
- 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
- 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177,
- 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179,
- 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181,
- 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183,
- 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 185,
- 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187,
- 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 189, 189,
- 190, 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191,
- 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193,
- 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195,
- 196, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197,
- 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199,
- 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201,
- 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, 203,
- 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205,
- 206, 206, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 207, 207, 207,
- 208, 208, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, 209, 209,
- 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 211,
- 212, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213,
- 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 215,
- 216, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217,
- 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, 219,
- 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 221,
- 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, 223,
- 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 225,
- 226, 226, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227, 227,
- 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229,
- 230, 230, 230, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 231,
- 232, 232, 232, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233,
- 234, 234, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
- 236, 236, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 237, 237,
- 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 239, 239,
- 240, 240, 240, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 241, 241,
- 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 243, 243,
- 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245,
- 246, 246, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 247,
- 248, 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249,
- 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 251,
- 252, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 253,
- 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255,
- 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, 257, 257, 257, 257, 257,
- 258, 258, 258, 258, 258, 258, 258, 258, 259, 259, 259, 259, 259, 259, 259, 259,
- 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, 261,
- 262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, 263, 263, 263, 263, 263,
- 264, 264, 264, 264, 264, 264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265,
- 266, 266, 266, 266, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 267, 267,
- 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, 269, 269, 269, 269,
- 270, 270, 270, 270, 270, 270, 270, 270, 271, 271, 271, 271, 271, 271, 271, 271,
- 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273, 273,
- 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275,
- 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277,
- 278, 278, 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279,
- 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281,
- 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283, 283, 283, 283, 283, 283,
- 284, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285,
- 286, 286, 286, 286, 286, 286, 286, 286, 287, 287, 287, 287, 287, 287, 287, 287,
- 288, 288, 288, 288, 288, 288, 288, 288, 289, 289, 289, 289, 289, 289, 289, 289,
- 290, 290, 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, 291, 291, 291, 291,
- 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293,
- 294, 294, 294, 294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295, 295, 295,
- 296, 296, 296, 296, 296, 296, 296, 296, 297, 297, 297, 297, 297, 297, 297, 297,
- 298, 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, 299,
- 300, 300, 300, 300, 300, 300, 300, 300,
+static RE_UINT16 re_alphanumeric_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12,
+ 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 5, 16, 17, 18, 19,
+ 20, 5, 21, 22, 5, 5, 23, 24, 25, 5, 26, 5, 5, 27, 5, 28,
+ 29, 30, 31, 32, 0, 33, 34, 35, 5, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 0, 76, 77, 78, 0, 79, 80, 81, 82, 83, 84, 0, 0,
+ 5, 85, 86, 5, 87, 5, 88, 89, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 90, 5, 91, 92, 93, 5, 94, 5, 74, 0, 95, 5, 5, 96,
+ 73, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 97, 2, 5, 5, 98, 99, 100, 100, 101, 5, 102, 103, 80,
+ 1, 5, 5, 31, 5, 104, 5, 105, 106, 107, 108, 109, 5, 110, 111, 0,
+ 112, 5, 106, 113, 111, 114, 79, 0, 5, 115, 116, 0, 5, 117, 5, 118,
+ 5, 119, 120, 87, 121, 66, 0, 122, 5, 5, 5, 5, 5, 5, 0, 123,
+ 5, 5, 5, 5, 5, 5, 5, 5, 96, 5, 124, 87, 5, 125, 126, 127,
+ 0, 0, 0, 128, 129, 0, 0, 0, 130, 131, 132, 5, 16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 133, 5, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 134, 106, 5, 5, 5, 5, 135, 5, 88, 5, 136, 119, 137, 137, 5,
+ 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 140, 73, 5, 141, 73, 5, 89, 142, 14, 5, 5, 143, 5, 0, 25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 84,
+ 5, 5, 5, 5, 30, 0, 25, 87, 5, 5, 5, 5, 5, 5, 5, 5,
+ 144, 145, 5, 146, 5, 5, 5, 95, 147, 148, 5, 5, 149, 5, 150, 151,
+ 152, 153, 5, 100, 5, 5, 154, 155, 5, 104, 156, 84, 5, 157, 158, 106,
+ 5, 119, 159, 160, 5, 106, 161, 162, 163, 164, 89, 86, 5, 5, 5, 165,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 166, 167, 112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 168, 5, 5, 169, 0, 170, 171, 172, 5, 5, 27, 173, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 87, 25, 5, 174, 5, 153, 175,
+ 0, 0, 0, 176, 5, 5, 5, 84, 1, 2, 2, 108, 5, 106, 177, 0,
+ 178, 179, 180, 0, 5, 5, 5, 74, 0, 0, 5, 181, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 5, 182, 0, 5, 26, 104, 74, 87, 5, 183, 0,
+ 5, 5, 5, 5, 87, 86, 184, 112, 5, 185, 5, 186, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 119, 105, 153, 0, 0, 0, 0,
+ 187, 188, 105, 119, 106, 0, 0, 189, 105, 169, 0, 0, 5, 190, 0, 0,
+ 191, 105, 0, 84, 84, 0, 81, 192, 5, 105, 105, 156, 27, 0, 0, 0,
+ 5, 5, 16, 0, 5, 156, 5, 156, 5, 193, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 194, 0, 0, 84, 195, 196, 0, 0, 25, 192, 119,
+ 5, 5, 196, 57, 148, 31, 25, 197, 5, 198, 199, 200, 5, 5, 201, 0,
+ 202, 203, 0, 0, 204, 121, 5, 197, 39, 48, 205, 186, 0, 0, 0, 0,
+ 5, 5, 206, 207, 5, 5, 208, 0, 0, 0, 0, 0, 5, 209, 210, 0,
+ 5, 106, 211, 0, 5, 212, 80, 0, 66, 165, 0, 0, 0, 0, 0, 0,
+ 5, 31, 0, 0, 0, 5, 5, 213, 214, 215, 216, 0, 0, 217, 29, 218,
+ 5, 219, 25, 5, 220, 0, 5, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 221, 222, 223, 224, 174, 225, 0, 0, 226, 227, 228, 229, 230, 80, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 231, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 169, 0, 0, 0,
+ 5, 5, 5, 143, 5, 5, 5, 5, 5, 5, 186, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 31, 106, 80, 0, 0, 25, 233, 5, 95, 234, 235, 95, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 236, 5, 237, 0, 0, 238,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 239,
+ 5, 5, 5, 5, 5, 5, 105, 0, 16, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 106, 0, 240, 199, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 112, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 33, 5, 243, 244, 245, 5, 246, 247, 248, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 249, 250, 89, 33, 33, 134, 134, 221, 221, 251, 5,
+ 252, 253, 0, 0, 0, 0, 0, 0, 5, 254, 255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 256, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 192, 0, 5, 5, 257, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 245, 258, 259, 260, 261, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 86, 86, 80, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 87, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 181, 5, 5, 5, 5, 5, 5,
+ 87, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 263, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 79,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 32, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_alphanumeric_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4,
+ 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0,
+ 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 255, 255, 254, 255, 195, 255, 255, 255, 255, 239, 31,
+ 254, 225, 255, 159, 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0,
+ 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0, 255, 255, 255, 1,
+ 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 240, 255, 248, 3, 255, 255,
+ 255, 255, 255, 239, 255, 223, 225, 255, 207, 255, 254, 255, 239, 159, 249, 255,
+ 255, 253, 197, 227, 159, 89, 128, 176, 207, 255, 3, 16, 238, 135, 249, 255,
+ 255, 253, 109, 195, 135, 25, 2, 94, 192, 255, 63, 0, 238, 191, 251, 255,
+ 255, 253, 237, 227, 191, 27, 1, 0, 207, 255, 0, 30, 238, 159, 249, 255,
+ 159, 25, 192, 176, 207, 255, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195,
+ 199, 29, 129, 0, 192, 255, 0, 0, 239, 223, 253, 255, 255, 253, 255, 227,
+ 223, 29, 96, 7, 207, 255, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64,
+ 207, 255, 6, 0, 255, 223, 253, 255, 255, 255, 255, 231, 223, 93, 240, 128,
+ 207, 255, 0, 252, 238, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255,
+ 192, 255, 12, 0, 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 255, 3,
+ 214, 247, 255, 255, 175, 255, 255, 59, 95, 32, 255, 243, 1, 0, 0, 0,
+ 255, 3, 0, 0, 255, 254, 255, 255, 255, 31, 254, 255, 3, 255, 255, 254,
+ 255, 255, 255, 31, 255, 255, 127, 249, 255, 3, 255, 255, 255, 255, 255, 63,
+ 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255,
+ 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 0, 0,
+ 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 15, 0,
+ 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255, 255, 1, 128, 16,
+ 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 1,
+ 192, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 3,
+ 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 128, 255, 255, 239, 255,
+ 239, 15, 255, 3, 255, 243, 255, 255, 191, 255, 3, 0, 255, 255, 127, 0,
+ 255, 227, 255, 255, 255, 1, 255, 255, 0, 222, 111, 4, 128, 255, 31, 0,
+ 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
+ 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62, 80, 189, 255, 243,
+ 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255, 31, 120, 12, 0,
+ 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0, 224, 0, 0, 0,
+ 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255, 255, 127, 0, 0,
+ 255, 31, 255, 255, 255, 15, 0, 0, 255, 127, 240, 143, 0, 0, 128, 255,
+ 252, 255, 255, 255, 255, 249, 255, 255, 252, 7, 0, 0, 0, 0, 224, 255,
+ 191, 255, 255, 255, 255, 0, 0, 0, 47, 0, 255, 3, 0, 0, 252, 232,
+ 255, 255, 7, 0, 255, 255, 247, 255, 0, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 5, 0, 0, 56, 255, 255, 60, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 7, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95,
+ 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255, 0, 0, 255, 15,
+ 0, 0, 223, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
+ 255, 63, 255, 63, 255, 255, 31, 0, 255, 255, 1, 0, 15, 255, 62, 0,
+ 255, 255, 15, 255, 255, 0, 255, 255, 15, 0, 0, 0, 63, 253, 255, 255,
+ 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254,
+ 31, 0, 0, 0, 255, 0, 255, 3, 255, 27, 3, 0, 128, 0, 255, 255,
+ 63, 0, 0, 0, 255, 1, 255, 3, 255, 255, 199, 255, 240, 0, 255, 255,
+ 255, 255, 71, 0, 30, 192, 255, 23, 255, 255, 251, 255, 255, 255, 159, 64,
+ 127, 189, 255, 191, 159, 25, 129, 224, 187, 7, 255, 131, 3, 0, 0, 0,
+ 179, 0, 255, 3, 255, 255, 63, 127, 0, 0, 0, 63, 17, 0, 255, 3,
+ 255, 255, 63, 1, 255, 3, 0, 128, 127, 242, 111, 255, 255, 255, 191, 153,
+ 7, 0, 255, 3, 255, 252, 255, 255, 26, 0, 0, 0, 255, 255, 231, 127,
+ 255, 255, 255, 32, 255, 253, 255, 255, 255, 255, 127, 127, 1, 0, 255, 3,
+ 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255, 255, 255, 127, 180,
+ 203, 0, 255, 3, 191, 253, 255, 255, 255, 127, 123, 1, 0, 0, 1, 0,
+ 127, 0, 0, 0, 255, 63, 0, 0, 15, 0, 255, 3, 248, 255, 255, 224,
+ 255, 135, 255, 255, 255, 128, 255, 255, 11, 0, 3, 0, 255, 255, 255, 0,
+ 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 255, 223,
+ 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
+ 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 247, 207, 255, 255,
+ 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63, 255, 67, 0, 0,
+ 255, 15, 255, 3, 143, 8, 255, 3, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-/* Block: 13160 bytes. */
-
-RE_UINT32 re_get_block(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 10;
- code = ch ^ (f << 10);
- pos = (RE_UINT32)re_block_stage_1[f] << 5;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_block_stage_2[pos + f] << 2;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_block_stage_3[pos + f] << 3;
- value = re_block_stage_4[pos + code];
-
- return value;
-}
-
-/* Script. */
-
-static RE_UINT8 re_script_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 14, 15,
- 16, 17, 18, 19, 20, 14, 21, 14, 22, 14, 14, 14, 14, 23, 24, 24,
- 25, 26, 14, 14, 14, 14, 27, 28, 14, 14, 29, 30, 31, 32, 33, 34,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 14, 40,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 41, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-};
+RE_UINT32 re_get_alphanumeric(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_script_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54,
- 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59,
- 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 80,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 96,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 70, 70, 98, 99, 100, 101, 102, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 97, 113, 114, 115, 116, 117, 118, 97, 119, 119, 120, 97,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 97, 132, 97, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 97, 142, 143, 97, 144, 145, 146, 147, 97,
- 148, 149, 97, 150, 151, 152, 97, 97, 153, 154, 155, 156, 97, 157, 97, 158,
- 159, 159, 159, 159, 159, 159, 159, 160, 161, 159, 162, 97, 97, 97, 97, 97,
- 163, 163, 163, 163, 163, 163, 163, 163, 164, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 165, 165, 165, 165, 166, 97, 97, 97,
- 167, 167, 167, 167, 168, 169, 170, 171, 97, 97, 97, 97, 172, 173, 174, 175,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177,
- 176, 176, 176, 176, 176, 178, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 179, 180, 181, 182, 182, 183, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 184, 185, 97, 97, 97, 97, 97, 97,
- 59, 186, 187, 188, 189, 190, 191, 97, 192, 193, 194, 59, 59, 195, 59, 196,
- 197, 197, 197, 197, 197, 198, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 199, 97, 200, 97, 97, 201, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 202, 203, 204, 97, 97, 97, 97, 97, 205, 206, 207, 97, 208, 209, 97, 97,
- 210, 211, 212, 213, 214, 97, 59, 59, 59, 59, 59, 59, 59, 215, 216, 217,
- 218, 219, 220, 221, 222, 223, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 224, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 225, 70,
- 226, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 227, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 228, 97, 97, 97, 97, 97, 97, 97, 97,
- 70, 70, 70, 70, 229, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 230, 97, 231, 232, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT16 re_script_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3,
- 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11,
- 12, 13, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 14,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 20, 21, 21, 21, 22, 20, 21, 21, 21, 21,
- 21, 23, 24, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 27, 28, 26,
- 29, 30, 31, 32, 31, 31, 31, 31, 33, 34, 35, 31, 31, 31, 36, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 31, 31, 31, 31,
- 37, 38, 37, 37, 37, 37, 37, 37, 37, 39, 31, 31, 31, 31, 31, 31,
- 40, 40, 40, 40, 40, 40, 41, 26, 42, 42, 42, 42, 42, 42, 42, 43,
- 44, 44, 44, 44, 44, 45, 44, 46, 47, 47, 47, 48, 37, 49, 26, 26,
- 26, 26, 26, 26, 31, 31, 50, 51, 26, 26, 52, 31, 53, 31, 31, 31,
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 54, 56, 54, 54, 54,
- 57, 58, 59, 60, 60, 61, 62, 63, 58, 64, 65, 66, 67, 60, 60, 68,
- 69, 70, 71, 72, 72, 73, 74, 75, 70, 76, 77, 78, 79, 72, 80, 26,
- 81, 82, 83, 84, 84, 85, 86, 87, 82, 88, 89, 26, 90, 84, 91, 92,
- 93, 94, 95, 96, 96, 97, 98, 99, 94, 100, 101, 102, 103, 96, 96, 26,
- 104, 105, 106, 107, 108, 105, 109, 110, 105, 106, 111, 26, 112, 109, 109, 113,
- 114, 115, 116, 114, 114, 116, 114, 117, 115, 118, 119, 120, 121, 114, 122, 114,
- 123, 124, 125, 123, 123, 125, 126, 127, 124, 128, 129, 130, 131, 123, 132, 26,
- 133, 134, 135, 136, 136, 136, 136, 136, 134, 135, 137, 136, 138, 136, 136, 136,
- 139, 140, 141, 142, 140, 140, 143, 144, 141, 145, 146, 140, 147, 140, 148, 26,
- 149, 150, 150, 150, 150, 150, 150, 151, 150, 150, 150, 152, 26, 26, 26, 26,
- 153, 154, 155, 155, 156, 155, 155, 157, 158, 157, 155, 159, 26, 26, 26, 26,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 160, 160, 160, 162, 161, 160,
- 160, 160, 160, 161, 160, 160, 160, 163, 160, 163, 164, 165, 26, 26, 26, 26,
- 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
- 166, 166, 166, 166, 167, 167, 167, 167, 168, 169, 167, 167, 167, 167, 167, 170,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 174, 173, 172, 172, 172, 172,
- 172, 173, 172, 172, 172, 172, 173, 174, 173, 172, 174, 172, 172, 172, 172, 172,
- 172, 172, 173, 172, 172, 172, 172, 172, 172, 172, 172, 175, 172, 172, 172, 176,
- 172, 172, 172, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179,
- 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
- 181, 181, 181, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 183, 185,
- 186, 187, 188, 26, 189, 189, 190, 26, 191, 191, 192, 26, 193, 194, 195, 26,
- 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 196, 198, 196, 198,
- 199, 200, 201, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 203,
- 201, 201, 201, 201, 201, 204, 180, 180, 180, 180, 180, 180, 180, 180, 205, 26,
- 206, 206, 206, 207, 206, 208, 206, 208, 209, 206, 210, 210, 210, 211, 212, 26,
- 213, 213, 213, 213, 213, 214, 213, 213, 213, 215, 213, 216, 196, 196, 196, 196,
- 217, 217, 217, 218, 219, 219, 219, 219, 219, 219, 219, 220, 219, 219, 219, 221,
- 219, 222, 219, 222, 219, 223, 9, 224, 26, 26, 26, 26, 26, 26, 26, 26,
- 225, 225, 225, 225, 225, 225, 225, 225, 225, 226, 225, 225, 225, 225, 225, 227,
- 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 230, 231,
- 232, 232, 232, 232, 232, 232, 232, 233, 232, 234, 235, 235, 235, 235, 235, 235,
- 18, 236, 167, 167, 167, 167, 167, 237, 228, 26, 238, 9, 239, 240, 241, 242,
- 2, 2, 2, 2, 243, 244, 2, 2, 2, 2, 2, 245, 246, 247, 2, 248,
- 2, 2, 2, 2, 2, 2, 2, 249, 9, 9, 9, 9, 9, 9, 9, 250,
- 14, 14, 251, 251, 14, 14, 14, 14, 251, 251, 14, 252, 14, 14, 14, 251,
- 14, 14, 14, 14, 14, 14, 253, 14, 253, 14, 254, 255, 14, 14, 256, 257,
- 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 260, 261,
- 0, 262, 2, 263, 0, 0, 0, 0, 26, 26, 9, 9, 9, 9, 264, 26,
- 0, 0, 0, 0, 265, 266, 4, 0, 0, 267, 0, 0, 2, 2, 2, 2,
- 2, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 262, 26, 26, 26, 0, 269, 26, 26, 0, 0, 0, 0,
- 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0,
- 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 273, 273, 273, 273, 273, 274, 273, 273, 273, 273, 273, 274, 2, 2, 2, 2,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 275, 276,
- 167, 167, 167, 167, 168, 169, 277, 277, 277, 277, 277, 277, 277, 278, 279, 278,
- 172, 172, 174, 26, 174, 174, 174, 174, 174, 174, 174, 174, 18, 18, 18, 18,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26,
- 280, 280, 280, 281, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 282, 26,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 283, 26, 26, 26, 0, 284,
- 285, 0, 0, 0, 286, 287, 0, 288, 289, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 291, 292, 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 295,
- 296, 297, 297, 297, 297, 297, 298, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 299, 0, 0, 297, 297, 297, 300, 0, 0, 0, 0, 284, 26, 294, 294,
- 171, 171, 171, 299, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 301,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 294, 294, 294, 294, 302,
- 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 0, 0, 0, 0, 0,
- 280, 280, 280, 280, 280, 280, 283, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 26, 26,
- 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
- 303, 304, 303, 303, 303, 303, 303, 303, 305, 26, 306, 306, 306, 306, 306, 306,
- 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
- 307, 307, 307, 307, 307, 308, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 26,
- 0, 0, 0, 0, 310, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 311, 2, 2, 2, 2, 2, 2, 312, 26, 26, 26, 26, 26, 313, 2,
- 314, 314, 314, 314, 314, 315, 0, 316, 317, 317, 317, 317, 317, 317, 317, 26,
- 318, 318, 318, 318, 318, 318, 318, 318, 319, 320, 318, 321, 54, 54, 54, 54,
- 322, 322, 322, 322, 322, 323, 324, 324, 324, 324, 325, 326, 171, 171, 171, 327,
- 328, 328, 328, 328, 328, 328, 328, 328, 328, 329, 328, 330, 166, 166, 166, 331,
- 332, 332, 332, 332, 332, 332, 333, 26, 332, 334, 332, 335, 166, 166, 166, 166,
- 336, 336, 336, 336, 336, 336, 336, 336, 337, 26, 26, 338, 339, 339, 340, 26,
- 341, 341, 341, 26, 174, 174, 2, 2, 2, 2, 2, 342, 343, 26, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 339, 339, 339, 339, 339, 344, 339, 345,
- 171, 171, 171, 171, 346, 26, 171, 171, 299, 347, 171, 171, 171, 171, 171, 346,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 283, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 348, 26, 26, 26, 26,
- 349, 26, 350, 351, 25, 25, 352, 353, 354, 25, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 355, 26, 52, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 356, 26, 26, 31, 31, 31, 31, 31, 31,
- 31, 31, 357, 31, 31, 31, 31, 31, 31, 26, 26, 26, 26, 26, 31, 51,
- 9, 9, 0, 316, 9, 358, 0, 0, 0, 0, 359, 0, 262, 284, 50, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 360,
- 361, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 362, 294, 293, 294,
- 294, 294, 294, 363, 171, 171, 171, 299, 364, 364, 364, 365, 262, 262, 26, 366,
- 367, 368, 367, 367, 369, 367, 367, 370, 367, 371, 367, 371, 26, 26, 26, 26,
- 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 372,
- 373, 0, 0, 0, 0, 0, 374, 0, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 257, 0, 284, 375, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 376,
- 377, 377, 377, 378, 379, 379, 379, 379, 379, 379, 380, 26, 381, 0, 0, 284,
- 382, 382, 382, 382, 383, 384, 385, 385, 385, 386, 387, 387, 387, 387, 387, 388,
- 389, 389, 389, 390, 391, 391, 391, 391, 392, 391, 393, 26, 26, 26, 26, 26,
- 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 395, 395, 395, 395, 395, 395,
- 396, 396, 396, 397, 396, 398, 399, 399, 399, 399, 400, 399, 399, 399, 399, 400,
- 401, 401, 401, 401, 401, 26, 402, 402, 402, 402, 402, 402, 403, 404, 26, 26,
- 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405,
- 405, 405, 405, 405, 405, 405, 406, 26, 405, 405, 407, 26, 405, 26, 26, 26,
- 408, 409, 410, 410, 410, 410, 411, 412, 413, 413, 414, 413, 415, 415, 415, 415,
- 416, 416, 416, 417, 418, 416, 26, 26, 26, 26, 26, 26, 419, 419, 420, 421,
- 422, 422, 422, 423, 424, 424, 424, 425, 26, 26, 26, 26, 26, 26, 26, 26,
- 426, 426, 426, 426, 427, 427, 427, 428, 427, 427, 429, 427, 427, 427, 427, 427,
- 430, 431, 432, 433, 434, 434, 435, 436, 434, 437, 434, 437, 438, 438, 438, 438,
- 439, 439, 439, 439, 26, 26, 26, 26, 440, 440, 440, 440, 441, 442, 441, 26,
- 443, 443, 443, 443, 443, 443, 444, 445, 446, 446, 447, 446, 448, 448, 449, 448,
- 450, 450, 451, 452, 26, 453, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 454, 454, 454, 454, 454, 454, 454, 454, 454, 455, 26, 26, 26, 26, 26, 26,
- 456, 456, 456, 456, 456, 456, 457, 26, 456, 456, 456, 456, 456, 456, 457, 458,
- 459, 459, 459, 459, 459, 26, 459, 460, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 31, 31, 31, 461,
- 462, 462, 462, 462, 462, 26, 463, 463, 463, 463, 463, 464, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 465, 465, 466, 26,
- 467, 467, 467, 467, 467, 467, 467, 467, 467, 468, 469, 467, 467, 467, 26, 470,
- 471, 471, 471, 471, 471, 471, 471, 471, 472, 473, 474, 474, 474, 475, 474, 476,
- 477, 477, 477, 477, 477, 477, 478, 477, 479, 26, 480, 480, 480, 480, 481, 26,
- 482, 482, 482, 482, 482, 482, 482, 482, 482, 483, 482, 482, 484, 140, 485, 26,
- 486, 486, 487, 486, 486, 486, 486, 488, 26, 26, 26, 26, 26, 26, 26, 26,
- 489, 490, 491, 492, 491, 493, 494, 494, 494, 494, 494, 494, 494, 495, 494, 496,
- 497, 498, 499, 500, 500, 501, 502, 503, 498, 504, 505, 506, 507, 508, 508, 26,
- 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 510, 26, 26, 26, 26,
- 511, 511, 511, 511, 511, 511, 511, 511, 511, 26, 511, 512, 26, 26, 26, 26,
- 513, 513, 513, 513, 513, 513, 514, 513, 513, 513, 513, 514, 26, 26, 26, 26,
- 515, 515, 515, 515, 515, 515, 515, 515, 516, 26, 515, 517, 201, 518, 26, 26,
- 519, 519, 519, 519, 519, 519, 519, 520, 519, 521, 26, 26, 26, 26, 26, 26,
- 522, 522, 522, 523, 522, 524, 522, 522, 26, 26, 26, 26, 26, 26, 26, 26,
- 525, 525, 525, 525, 525, 525, 525, 526, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 528, 529,
- 26, 26, 26, 26, 530, 531, 530, 530, 530, 530, 530, 531, 532, 26, 26, 26,
- 533, 533, 533, 533, 533, 533, 533, 533, 533, 26, 534, 534, 534, 534, 534, 534,
- 534, 534, 534, 534, 535, 26, 26, 26, 536, 536, 536, 536, 536, 536, 536, 537,
- 538, 539, 538, 538, 538, 538, 540, 538, 541, 26, 538, 538, 538, 542, 543, 543,
- 543, 543, 544, 543, 543, 545, 546, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 547, 548, 549, 549, 549, 549, 547, 550, 549, 26, 549, 551, 552, 553, 554, 554,
- 554, 555, 556, 557, 554, 558, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 559, 559, 559, 560,
- 26, 26, 26, 26, 26, 26, 26, 26, 109, 109, 109, 109, 109, 109, 561, 562,
- 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563,
- 563, 563, 563, 564, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 565, 566, 26,
- 563, 563, 563, 563, 563, 563, 563, 563, 567, 26, 26, 26, 26, 26, 26, 26,
- 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
- 568, 568, 568, 568, 568, 569, 568, 570, 26, 26, 26, 26, 26, 26, 26, 26,
- 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571,
- 571, 571, 571, 571, 571, 571, 571, 571, 572, 26, 26, 26, 26, 26, 26, 26,
- 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
- 309, 309, 309, 309, 309, 309, 309, 573, 574, 574, 574, 575, 574, 576, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 577, 577, 577, 578, 578, 26,
- 579, 579, 579, 579, 579, 579, 579, 579, 580, 26, 579, 581, 581, 579, 579, 582,
- 579, 579, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 583, 583, 583, 583, 583, 583, 583, 583,
- 583, 583, 583, 584, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 585, 585, 585, 585, 585, 585, 585, 585, 585, 586, 585, 585, 585, 585, 585, 585,
- 585, 587, 585, 585, 26, 26, 26, 26, 26, 26, 26, 26, 588, 26, 26, 26,
- 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589,
- 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 26,
- 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 590, 26,
- 591, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 291, 26, 26, 26, 26, 26, 26, 592, 26, 593, 26, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 595,
- 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 597, 596, 598,
- 596, 599, 596, 600, 284, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 26,
- 0, 0, 0, 0, 262, 361, 0, 0, 0, 0, 0, 0, 601, 602, 0, 603,
- 604, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, 26, 26,
- 14, 14, 14, 14, 14, 14, 14, 14, 251, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 284, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 26, 0, 0, 0, 607,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0,
- 0, 0, 0, 259, 608, 609, 0, 610, 611, 0, 0, 0, 0, 0, 0, 0,
- 612, 613, 259, 259, 0, 0, 0, 614, 615, 616, 617, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0,
- 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618,
- 618, 619, 26, 620, 621, 618, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 274, 273, 273, 622, 623, 624, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 625, 625, 625, 625, 625, 626, 625, 627, 625, 628, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 629, 629, 629, 629, 629, 629, 629, 630,
- 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631, 632, 631, 633, 26, 26, 26, 26, 26,
- 634, 634, 634, 634, 634, 634, 634, 634, 634, 635, 634, 636, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 361, 0,
- 0, 0, 0, 0, 0, 0, 637, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 361, 0, 0, 0, 0, 0, 0, 272, 26, 26, 26, 26, 26, 26, 26, 26,
- 638, 31, 31, 31, 639, 640, 641, 642, 643, 644, 639, 645, 639, 641, 641, 646,
- 31, 647, 31, 648, 649, 647, 31, 648, 26, 26, 26, 26, 26, 26, 355, 26,
- 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 284, 26, 0, 262, 361, 0, 361, 0, 361, 0, 0, 0, 272, 26,
- 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0,
- 0, 0, 0, 0, 0, 637, 26, 26, 26, 26, 26, 26, 650, 0, 0, 0,
- 651, 26, 0, 0, 0, 0, 0, 284, 0, 607, 316, 26, 272, 26, 26, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 26, 0, 637, 0, 269,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 26,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 284, 26, 26,
- 0, 284, 0, 0, 0, 0, 0, 0, 0, 26, 0, 316, 0, 0, 0, 0,
- 0, 26, 0, 0, 0, 272, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 616,
- 0, 0, 0, 0, 613, 652, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 26, 0, 272, 284, 269,
- 269, 26, 272, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 653, 26, 26, 26, 26, 26,
- 280, 280, 280, 280, 280, 280, 654, 26, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 283, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 348, 26, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 655, 26, 26, 26,
- 280, 280, 280, 283, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 656, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 26, 26,
-};
+ v = re_alphanumeric_table_1[field_2];
+ v = re_alphanumeric_table_2[(v << 5) | field_1];
+ v = re_alphanumeric_table_3[(v << 2) | field_0];
-static RE_UINT8 re_script_stage_4[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1,
- 1, 1, 35, 35, 1, 1, 1, 1, 41, 41, 41, 41, 41, 41, 41, 41,
- 3, 3, 3, 3, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3, 1, 3,
- 0, 0, 0, 0, 3, 1, 3, 1, 3, 3, 3, 0, 3, 0, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
- 3, 3, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 41, 41, 4,
- 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 5, 1, 5, 0, 0, 5, 5, 5,
- 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 0, 0, 6,
- 6, 6, 6, 6, 6, 0, 0, 0, 7, 7, 7, 7, 7, 1, 7, 7,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 1, 7, 0, 7, 1, 1, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 7, 7,
- 41, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 8, 0, 0, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
- 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 0, 66, 66, 66,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0,
- 82, 82, 82, 82, 82, 82, 82, 0, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 0, 0, 95, 0, 8, 8, 8, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0,
- 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 41, 41, 41, 41, 10, 10, 10,
- 10, 10, 10, 10, 1, 1, 10, 10, 11, 11, 11, 11, 0, 11, 11, 11,
- 11, 11, 11, 11, 11, 0, 0, 11, 11, 0, 0, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
- 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11,
- 11, 0, 0, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11,
- 0, 0, 0, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 0, 0, 12, 12, 12, 0, 12, 12, 12,
- 12, 12, 12, 0, 0, 0, 0, 12, 12, 0, 0, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12,
- 12, 0, 12, 12, 0, 12, 12, 0, 12, 12, 0, 0, 12, 0, 12, 12,
- 12, 0, 0, 12, 12, 12, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 12, 12, 12, 12, 0, 12, 0, 0, 0, 0, 0, 0, 0, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 0, 0, 13, 13, 13, 0, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
- 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13,
- 13, 13, 0, 13, 13, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0,
- 0, 13, 13, 13, 13, 13, 13, 13, 0, 14, 14, 14, 0, 14, 14, 14,
- 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14,
- 14, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14,
- 14, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14,
- 0, 0, 0, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 14, 14,
- 0, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15,
- 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, 15, 0, 15, 15,
- 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 15,
- 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16,
- 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, 16,
- 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0,
- 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16,
- 0, 0, 0, 0, 0, 0, 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 0, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17,
- 17, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0,
- 0, 0, 0, 0, 0, 0, 17, 0, 17, 17, 17, 17, 0, 0, 17, 17,
- 0, 17, 17, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 18, 18,
- 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18, 18, 18, 18,
- 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 19, 19, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19,
- 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19,
- 0, 0, 19, 19, 19, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 1,
- 20, 20, 20, 20, 0, 0, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
- 21, 21, 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, 0, 0,
- 21, 21, 21, 21, 21, 0, 21, 0, 21, 21, 0, 0, 21, 21, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22, 22, 22, 0, 22, 22,
- 22, 22, 22, 22, 22, 1, 1, 1, 1, 22, 22, 0, 0, 0, 0, 0,
- 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 0, 24, 0, 0, 0, 0, 0, 24, 0, 0,
- 24, 24, 24, 1, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 0,
- 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 0, 0, 26, 26, 26,
- 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 0, 0, 0, 0, 0, 0,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 1, 1, 1, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 42, 42,
- 42, 42, 42, 42, 42, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 1, 1, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0,
- 31, 31, 0, 0, 0, 0, 0, 0, 32, 32, 1, 1, 32, 1, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 0, 0, 0, 0, 0, 28, 28, 28, 28, 28, 28, 0, 0,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0,
- 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, 46, 46, 46, 46,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
- 47, 47, 47, 47, 47, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 0, 0,
- 56, 56, 56, 0, 0, 0, 56, 56, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 0, 0, 54, 54, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 0, 78, 78, 78, 78, 78, 0, 0, 78,
- 78, 78, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 78, 78, 0, 0,
- 41, 41, 41, 41, 41, 41, 41, 0, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 0, 0, 0, 0, 62, 62, 62, 62, 62, 0, 0, 0,
- 67, 67, 67, 67, 67, 67, 67, 67, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93, 93,
- 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 68, 68, 68, 68, 68,
- 68, 68, 0, 0, 0, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
- 4, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 0, 0, 24, 24, 24,
- 41, 41, 41, 1, 41, 41, 41, 41, 41, 1, 41, 41, 41, 41, 41, 41,
- 41, 1, 1, 1, 1, 41, 1, 1, 1, 1, 1, 1, 41, 1, 1, 1,
- 41, 41, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
- 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 41, 41, 0, 41, 41, 41, 41, 41, 3, 3, 3, 3, 3, 3, 0, 0,
- 0, 3, 0, 3, 0, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3,
- 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
- 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 1, 1, 1, 1, 41, 41, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
- 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 2, 2, 2, 0, 0, 0,
- 41, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 3, 1,
- 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 2, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 53, 53, 53, 53, 53, 53, 53, 53, 1, 1, 1, 1, 0, 0, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 0, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 0, 55, 55, 55, 55, 0, 0, 0, 0,
- 0, 55, 55, 55, 55, 55, 55, 55, 58, 58, 58, 58, 58, 58, 58, 58,
- 0, 0, 0, 0, 0, 0, 0, 58, 58, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 36, 1, 36,
- 1, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 41, 41, 41, 25, 25,
- 36, 36, 36, 36, 1, 1, 1, 1, 0, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0,
- 0, 41, 41, 1, 1, 33, 33, 33, 1, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 34, 34, 34,
- 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
- 35, 35, 35, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 1,
- 34, 34, 34, 34, 34, 34, 34, 1, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 0,
- 83, 83, 83, 83, 83, 83, 83, 83, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 0, 0, 0, 0, 84, 84, 84, 84, 84, 84, 84, 84,
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2,
- 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
- 0, 0, 0, 0, 0, 0, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 1, 72,
- 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 73, 25, 25, 25, 25, 25, 0, 0, 0,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 1,
- 85, 85, 0, 0, 0, 0, 85, 85, 23, 23, 23, 23, 23, 23, 23, 0,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0,
- 77, 77, 77, 77, 77, 77, 0, 0, 77, 77, 0, 0, 77, 77, 77, 77,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0,
- 0, 0, 0, 79, 79, 79, 79, 79, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 0, 0, 26, 26, 26, 26, 26, 26, 0,
- 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
- 86, 86, 86, 86, 86, 86, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0,
- 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25,
- 36, 36, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 0,
- 6, 6, 0, 6, 6, 0, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 1, 1, 0, 0, 7, 7, 7, 7, 7, 7,
- 41, 41, 41, 41, 41, 41, 4, 4, 1, 1, 1, 0, 1, 1, 1, 1,
- 7, 7, 7, 7, 7, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1,
- 0, 0, 25, 25, 25, 25, 25, 25, 0, 0, 25, 25, 25, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
- 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0,
- 48, 48, 48, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
- 1, 1, 1, 1, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 41, 0, 0, 74, 74, 74, 74, 74, 74, 74, 74,
- 74, 74, 74, 74, 74, 0, 0, 0, 75, 75, 75, 75, 75, 75, 75, 75,
- 75, 0, 0, 0, 0, 0, 0, 0, 41, 1, 1, 1, 1, 1, 1, 1,
- 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 49, 49, 49, 0, 49, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 0, 0,
- 40, 40, 40, 40, 40, 40, 40, 40, 50, 50, 50, 50, 50, 50, 50, 50,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0,
- 51, 51, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 0, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 103, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 0, 110, 110, 110, 110, 110, 110, 0, 0,
- 52, 52, 52, 52, 52, 52, 0, 0, 52, 0, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 52,
- 52, 0, 0, 0, 52, 0, 0, 52, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 0, 87, 118, 118, 118, 118, 118, 118, 118, 118,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 0,
- 0, 0, 0, 0, 0, 0, 0, 117, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 64,
- 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0, 76,
- 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97,
- 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97,
- 61, 61, 61, 61, 0, 61, 61, 0, 0, 0, 0, 0, 61, 61, 61, 61,
- 61, 61, 61, 61, 0, 61, 61, 61, 0, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0,
- 61, 61, 61, 0, 0, 0, 0, 61, 61, 0, 0, 0, 0, 0, 0, 0,
- 88, 88, 88, 88, 88, 88, 88, 88, 116, 116, 116, 116, 116, 116, 116, 116,
- 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0,
- 0, 0, 0, 112, 112, 112, 112, 112, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0, 0, 0, 0, 0,
- 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0,
- 0, 121, 121, 121, 121, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121,
- 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 0, 0,
- 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 130, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 147, 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 0, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 0, 0, 0, 0, 94, 94, 94, 94, 94, 94,
- 0, 0, 0, 0, 0, 0, 0, 94, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0,
- 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0,
- 101, 101, 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0,
- 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0,
- 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 0, 129, 129, 129, 129, 129, 129, 129, 0,
- 129, 0, 129, 129, 129, 129, 0, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 129, 129, 129, 129, 0, 129, 129, 129, 0, 0, 0, 0, 0, 0,
- 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0,
- 123, 123, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 0, 107, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 107, 107, 0, 0, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107,
- 107, 0, 107, 107, 0, 107, 107, 107, 107, 107, 0, 41, 107, 107, 107, 107,
- 107, 0, 0, 107, 107, 107, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107,
- 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 0, 0, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 0, 135, 0, 135, 135, 135, 124, 124, 124, 124, 124, 124, 124, 124,
- 124, 124, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 0, 0, 0, 114, 114, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 0, 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, 0,
- 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 126, 126, 126,
- 126, 126, 126, 126, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 142, 142, 0, 0, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125,
- 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125,
- 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0,
- 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133, 0, 0,
- 133, 133, 133, 133, 133, 0, 0, 0, 134, 134, 134, 134, 134, 134, 134, 134,
- 0, 0, 134, 134, 134, 134, 134, 134, 0, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 0, 138, 138, 138, 138, 138, 138, 138, 0,
- 138, 138, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
- 0, 0, 138, 0, 138, 138, 0, 138, 138, 138, 0, 0, 0, 0, 0, 0,
- 143, 143, 143, 143, 143, 143, 0, 143, 143, 0, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
- 143, 143, 0, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 0, 0, 0,
- 143, 143, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 15, 63, 63, 63, 63, 63, 63, 63, 63,
- 63, 63, 0, 0, 0, 0, 0, 0, 63, 63, 63, 63, 63, 63, 63, 0,
- 63, 63, 63, 63, 63, 0, 0, 0, 63, 63, 63, 63, 0, 0, 0, 0,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 0,
- 81, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 0, 84, 0, 0, 0, 0, 0, 0, 0,
- 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0,
- 115, 115, 0, 0, 0, 0, 115, 115, 104, 104, 104, 104, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 104, 0, 0, 108, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 108, 0, 0, 108, 108, 0, 108, 108, 108, 108, 108,
- 0, 0, 0, 0, 0, 108, 108, 108, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 99,
- 137, 139, 1, 1, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137,
- 137, 137, 137, 0, 0, 0, 0, 0, 34, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0,
- 105, 105, 105, 105, 105, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
- 105, 105, 0, 0, 105, 105, 105, 105, 1, 1, 1, 1, 1, 1, 1, 41,
- 41, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 41, 41, 41, 41,
- 41, 41, 41, 1, 1, 41, 41, 41, 41, 41, 41, 41, 1, 1, 1, 1,
- 1, 1, 41, 41, 41, 41, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
- 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
- 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0,
- 0, 0, 0, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131,
- 57, 0, 0, 57, 57, 57, 57, 57, 57, 57, 0, 57, 57, 0, 57, 57,
- 57, 57, 57, 0, 0, 0, 0, 0, 151, 151, 151, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 0, 0, 0, 151, 151, 151, 151, 151, 151, 0, 0,
- 151, 151, 0, 0, 0, 0, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 152, 0, 0, 0, 0, 0, 152, 113, 113, 113, 113, 113, 113, 113, 113,
- 113, 113, 113, 113, 113, 0, 0, 113, 113, 113, 113, 113, 113, 113, 113, 0,
- 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0,
- 132, 132, 0, 0, 0, 0, 132, 132, 1, 1, 1, 1, 1, 0, 0, 0,
- 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 0, 7, 0, 0, 7,
- 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
- 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7,
- 0, 7, 0, 7, 0, 7, 7, 7, 0, 7, 0, 7, 0, 7, 0, 7,
- 0, 7, 7, 7, 7, 0, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 7, 7, 7,
- 0, 0, 0, 0, 0, 0, 1, 1, 33, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 36, 36, 36, 36, 36, 36, 36, 0,
- 36, 36, 36, 36, 36, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
-};
+ return (v >> offset) & 0x1;
+}
-/* Script: 13928 bytes. */
-
-RE_UINT32 re_get_script(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_script_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_script_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_script_stage_3[pos + f] << 3;
- value = re_script_stage_4[pos + code];
-
- return value;
+/* Any. */
+RE_UINT32 re_get_any(RE_UINT32 codepoint) {
+ return 1;
}
-/* Script_Extensions. */
+/* ASCII_Hex_Digit. */
+RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
+ if (0x41 <= codepoint && codepoint <= 0x46)
+ return 1;
+ if (0x61 <= codepoint && codepoint <= 0x66)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_script_extensions_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 14, 15,
- 16, 17, 18, 19, 20, 14, 21, 14, 22, 14, 14, 14, 14, 23, 24, 24,
- 25, 26, 14, 14, 14, 14, 27, 28, 14, 14, 29, 30, 31, 32, 33, 34,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 14, 40,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 41, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-};
-
-static RE_UINT8 re_script_extensions_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54,
- 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59,
- 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 80, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 81,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 84, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 70, 70, 99, 100, 101, 102, 103, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 98, 114, 115, 116, 117, 118, 119, 98, 120, 120, 121, 98,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 98, 133, 98, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 98, 143, 144, 98, 145, 146, 147, 148, 98,
- 149, 150, 98, 151, 152, 153, 98, 98, 154, 155, 156, 157, 98, 158, 98, 159,
- 160, 160, 160, 160, 160, 160, 160, 161, 162, 160, 163, 98, 98, 98, 98, 98,
- 164, 164, 164, 164, 164, 164, 164, 164, 165, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 166, 166, 166, 166, 167, 98, 98, 98,
- 168, 168, 168, 168, 169, 170, 171, 172, 98, 98, 98, 98, 173, 174, 175, 176,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
- 177, 177, 177, 177, 177, 179, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 180, 181, 182, 183, 183, 184, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 185, 186, 98, 98, 98, 98, 98, 98,
- 59, 187, 188, 189, 190, 191, 192, 98, 193, 194, 195, 59, 59, 196, 59, 197,
- 198, 198, 198, 198, 198, 199, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 200, 98, 201, 98, 98, 202, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 203, 204, 205, 98, 98, 98, 98, 98, 206, 207, 208, 98, 209, 210, 98, 98,
- 211, 212, 213, 214, 215, 98, 59, 59, 59, 59, 59, 59, 59, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 225, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 226, 70,
- 227, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 228, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 229, 98, 98, 98, 98, 98, 98, 98, 98,
- 70, 70, 70, 70, 230, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 231, 98, 232, 233, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
-};
-
-static RE_UINT16 re_script_extensions_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3,
- 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 11, 2, 12, 13,
- 14, 15, 16, 16, 17, 16, 16, 16, 16, 16, 16, 16, 18, 19, 16, 16,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 22, 23, 23, 23, 24, 22, 23, 23, 23, 23,
- 23, 25, 26, 27, 27, 27, 27, 27, 27, 28, 27, 27, 27, 29, 30, 28,
- 31, 32, 33, 34, 33, 33, 33, 33, 35, 36, 37, 33, 38, 39, 40, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 41, 31, 33, 33, 33, 33,
- 42, 43, 42, 42, 42, 42, 42, 42, 42, 44, 33, 33, 33, 33, 33, 33,
- 45, 45, 45, 45, 45, 45, 46, 28, 47, 47, 47, 47, 47, 47, 47, 48,
- 49, 49, 49, 49, 49, 50, 49, 51, 52, 52, 52, 53, 42, 54, 28, 28,
- 28, 28, 28, 28, 33, 33, 55, 56, 28, 28, 57, 33, 58, 33, 33, 33,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 59, 61, 62, 59, 59,
- 63, 64, 65, 66, 66, 67, 68, 69, 64, 70, 71, 72, 73, 74, 66, 75,
- 76, 77, 78, 79, 79, 80, 81, 82, 77, 83, 84, 85, 86, 87, 88, 28,
- 89, 90, 91, 92, 92, 93, 94, 95, 90, 96, 97, 28, 98, 99, 100, 101,
- 102, 103, 104, 105, 105, 106, 107, 108, 103, 109, 110, 111, 112, 105, 105, 28,
- 113, 114, 115, 116, 117, 114, 118, 119, 114, 115, 120, 28, 121, 122, 123, 124,
- 125, 126, 127, 125, 125, 127, 125, 128, 126, 129, 130, 131, 132, 125, 133, 125,
- 134, 135, 136, 134, 134, 136, 137, 138, 135, 139, 140, 141, 142, 143, 144, 28,
- 145, 146, 147, 148, 148, 148, 148, 148, 146, 147, 149, 148, 150, 148, 148, 148,
- 151, 152, 153, 154, 152, 152, 155, 156, 153, 157, 158, 152, 159, 152, 160, 28,
- 161, 162, 162, 162, 162, 162, 162, 163, 162, 162, 162, 164, 28, 28, 28, 28,
- 165, 166, 167, 167, 168, 167, 167, 169, 170, 169, 167, 171, 28, 28, 28, 28,
- 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 172, 172, 172, 174, 173, 172,
- 172, 172, 172, 173, 172, 172, 172, 175, 172, 175, 176, 177, 28, 28, 28, 28,
- 178, 178, 178, 178, 178, 178, 178, 178, 179, 180, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 181, 181, 181, 181, 182, 183, 181, 181, 181, 181, 181, 184,
- 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 188, 187, 186, 186, 186, 186,
- 186, 187, 186, 186, 186, 186, 187, 188, 187, 186, 188, 186, 186, 186, 186, 186,
- 186, 186, 187, 186, 186, 186, 186, 186, 186, 186, 186, 189, 186, 186, 186, 190,
- 186, 186, 186, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 193,
- 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 195, 195, 195, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198, 197, 199,
- 200, 201, 202, 28, 203, 203, 204, 28, 205, 205, 206, 28, 207, 208, 209, 28,
- 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 210, 212, 210, 212,
- 213, 214, 215, 216, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 217,
- 215, 215, 215, 215, 215, 218, 194, 194, 194, 194, 194, 194, 194, 194, 219, 28,
- 220, 220, 220, 221, 220, 222, 220, 222, 223, 220, 224, 224, 224, 225, 226, 28,
- 227, 227, 227, 227, 227, 228, 227, 227, 227, 229, 227, 230, 210, 210, 210, 210,
- 231, 231, 231, 232, 233, 233, 233, 233, 233, 233, 233, 234, 233, 233, 233, 235,
- 233, 236, 233, 236, 233, 237, 9, 238, 28, 28, 28, 28, 28, 28, 28, 28,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 240, 239, 239, 239, 239, 239, 241,
- 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 244, 245,
- 246, 246, 246, 246, 246, 246, 246, 247, 246, 248, 249, 249, 249, 249, 249, 249,
- 20, 250, 181, 181, 181, 181, 181, 251, 242, 28, 252, 253, 254, 255, 256, 257,
- 2, 2, 2, 2, 258, 259, 2, 2, 2, 2, 2, 260, 261, 262, 2, 263,
- 2, 2, 2, 2, 2, 2, 2, 264, 265, 9, 9, 9, 9, 9, 9, 266,
- 16, 16, 267, 267, 16, 16, 16, 16, 267, 267, 16, 268, 16, 16, 16, 267,
- 16, 16, 16, 16, 16, 16, 269, 16, 269, 16, 270, 271, 16, 16, 272, 273,
- 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 277, 278,
- 0, 279, 2, 280, 0, 0, 0, 0, 28, 28, 9, 9, 9, 9, 281, 28,
- 0, 0, 0, 0, 282, 283, 4, 0, 0, 284, 0, 0, 2, 2, 2, 2,
- 2, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 279, 28, 28, 28, 0, 286, 28, 28, 0, 0, 0, 0,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0,
- 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 290, 290, 290, 290, 290, 291, 290, 290, 290, 290, 290, 291, 2, 2, 2, 2,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 292, 293,
- 181, 181, 181, 181, 182, 183, 294, 294, 294, 294, 294, 294, 294, 295, 296, 295,
- 186, 186, 188, 28, 188, 188, 188, 188, 188, 188, 188, 188, 20, 20, 20, 20,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 28, 28, 28, 28, 28, 28,
- 298, 298, 298, 299, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 300, 28,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 301, 28, 28, 28, 0, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 313, 314, 315, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 317,
- 318, 319, 319, 319, 319, 319, 320, 185, 185, 185, 185, 185, 185, 185, 185, 185,
- 185, 321, 298, 298, 319, 319, 319, 322, 298, 298, 298, 298, 300, 28, 316, 316,
- 185, 185, 185, 321, 298, 298, 298, 298, 298, 0, 0, 0, 185, 185, 185, 323,
- 298, 298, 298, 298, 298, 298, 324, 0, 298, 325, 316, 316, 316, 316, 316, 326,
- 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 298, 298, 298, 324, 327,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 298, 298, 328,
- 298, 298, 298, 298, 298, 298, 301, 28, 0, 0, 0, 0, 0, 0, 0, 0,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 28, 28,
- 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- 329, 330, 329, 329, 329, 329, 329, 329, 331, 28, 332, 332, 332, 332, 332, 332,
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
- 333, 333, 333, 333, 333, 334, 28, 28, 20, 20, 20, 20, 20, 335, 20, 20,
- 20, 20, 20, 20, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 28,
- 0, 0, 0, 0, 337, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 338, 2, 2, 2, 2, 2, 2, 339, 28, 28, 28, 28, 28, 340, 2,
- 341, 341, 341, 341, 341, 342, 343, 344, 345, 345, 345, 345, 345, 345, 345, 28,
- 346, 346, 346, 346, 346, 346, 346, 346, 347, 348, 346, 349, 59, 59, 350, 59,
- 351, 351, 351, 351, 351, 352, 353, 353, 353, 353, 354, 355, 185, 185, 185, 356,
- 357, 357, 357, 357, 357, 357, 357, 357, 357, 358, 357, 359, 178, 178, 178, 360,
- 361, 361, 361, 361, 361, 361, 362, 28, 361, 363, 361, 364, 178, 178, 178, 178,
- 365, 365, 365, 365, 365, 365, 365, 365, 366, 28, 28, 367, 368, 368, 369, 28,
- 370, 370, 370, 28, 188, 188, 2, 2, 2, 2, 2, 371, 372, 28, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 368, 368, 368, 368, 368, 373, 368, 374,
- 185, 185, 185, 185, 375, 28, 185, 185, 321, 376, 185, 185, 185, 185, 185, 375,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 301, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 377, 28, 28, 28, 28,
- 378, 28, 379, 380, 27, 27, 381, 382, 383, 27, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 384, 28, 57, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 385, 28, 28, 33, 33, 33, 33, 33, 33,
- 33, 33, 386, 33, 33, 33, 33, 33, 33, 28, 28, 28, 28, 28, 387, 388,
- 9, 9, 0, 389, 9, 390, 0, 0, 391, 0, 392, 0, 279, 302, 55, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 393,
- 394, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 395, 316, 315, 316,
- 316, 316, 316, 396, 185, 185, 185, 321, 397, 397, 397, 398, 279, 279, 28, 399,
- 400, 401, 400, 400, 402, 400, 400, 403, 400, 404, 400, 404, 28, 28, 28, 28,
- 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 405,
- 406, 407, 407, 407, 407, 407, 408, 409, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 273, 0, 302, 410, 28, 28, 28, 28, 28, 0, 0, 0, 0, 0, 411,
- 412, 412, 412, 413, 414, 414, 414, 414, 414, 414, 415, 28, 416, 416, 416, 417,
- 418, 418, 418, 418, 419, 420, 421, 421, 421, 422, 423, 423, 423, 423, 423, 424,
- 425, 425, 425, 426, 427, 427, 427, 427, 428, 427, 429, 28, 28, 28, 28, 28,
- 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 431, 431, 431, 431, 431, 431,
- 432, 432, 432, 433, 432, 434, 435, 435, 435, 435, 436, 435, 435, 435, 435, 436,
- 437, 437, 437, 437, 437, 28, 438, 438, 438, 438, 438, 438, 439, 440, 28, 28,
- 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
- 441, 441, 441, 441, 441, 441, 442, 28, 441, 441, 443, 28, 441, 28, 28, 28,
- 444, 445, 446, 446, 446, 446, 447, 448, 449, 449, 450, 449, 451, 451, 451, 451,
- 452, 452, 452, 453, 454, 452, 28, 28, 28, 28, 28, 28, 455, 455, 456, 457,
- 458, 458, 458, 459, 460, 460, 460, 461, 28, 28, 28, 28, 28, 28, 28, 28,
- 462, 462, 462, 462, 463, 463, 463, 464, 463, 463, 465, 463, 463, 463, 463, 463,
- 466, 467, 468, 469, 470, 470, 471, 472, 470, 473, 470, 473, 474, 474, 474, 474,
- 475, 475, 475, 475, 28, 28, 28, 28, 476, 476, 476, 476, 477, 478, 477, 28,
- 479, 479, 479, 479, 479, 479, 480, 481, 482, 482, 483, 482, 484, 484, 485, 484,
- 486, 486, 487, 488, 28, 489, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 490, 490, 490, 490, 490, 490, 490, 490, 490, 491, 28, 28, 28, 28, 28, 28,
- 492, 492, 492, 492, 492, 492, 493, 28, 492, 492, 492, 492, 492, 492, 493, 494,
- 495, 495, 495, 495, 495, 28, 495, 496, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 33, 33, 33, 497,
- 498, 498, 498, 498, 498, 28, 499, 499, 499, 499, 499, 500, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 501, 501, 502, 28,
- 503, 503, 503, 503, 503, 503, 503, 503, 503, 504, 505, 503, 503, 503, 28, 506,
- 507, 507, 507, 507, 507, 507, 507, 507, 508, 509, 510, 510, 510, 511, 510, 512,
- 513, 513, 513, 513, 513, 513, 514, 513, 515, 28, 516, 516, 516, 516, 517, 28,
- 518, 518, 518, 518, 518, 518, 518, 518, 518, 519, 518, 518, 520, 152, 521, 28,
- 522, 522, 523, 522, 522, 522, 522, 524, 28, 28, 28, 28, 28, 28, 28, 28,
- 525, 526, 527, 528, 527, 529, 530, 530, 530, 530, 530, 530, 530, 531, 530, 532,
- 533, 534, 535, 536, 536, 537, 538, 539, 534, 540, 541, 542, 543, 544, 544, 28,
- 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 546, 28, 28, 28, 28,
- 547, 547, 547, 547, 547, 547, 547, 547, 547, 28, 547, 548, 28, 28, 28, 28,
- 549, 549, 549, 549, 549, 549, 550, 549, 549, 549, 549, 550, 28, 28, 28, 28,
- 551, 551, 551, 551, 551, 551, 551, 551, 552, 28, 551, 553, 215, 554, 28, 28,
- 555, 555, 555, 555, 555, 555, 555, 556, 555, 557, 28, 28, 28, 28, 28, 28,
- 558, 558, 558, 559, 558, 560, 558, 558, 28, 28, 28, 28, 28, 28, 28, 28,
- 561, 561, 561, 561, 561, 561, 561, 562, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 564, 565,
- 28, 28, 28, 28, 566, 567, 566, 566, 566, 566, 566, 567, 568, 28, 28, 28,
- 569, 569, 569, 569, 569, 569, 569, 569, 569, 28, 570, 570, 570, 570, 570, 570,
- 570, 570, 570, 570, 571, 28, 28, 28, 572, 572, 572, 572, 572, 572, 572, 573,
- 574, 575, 574, 574, 574, 574, 576, 574, 577, 28, 574, 574, 574, 578, 579, 579,
- 579, 579, 580, 579, 579, 581, 582, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 583, 584, 585, 585, 585, 585, 583, 586, 585, 28, 585, 587, 588, 589, 590, 590,
- 590, 591, 592, 593, 590, 594, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 595, 595, 595, 596,
- 28, 28, 28, 28, 28, 28, 28, 28, 118, 118, 597, 118, 118, 118, 598, 599,
- 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
- 600, 600, 600, 601, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 602, 603, 28,
- 600, 600, 600, 600, 600, 600, 600, 600, 604, 28, 28, 28, 28, 28, 28, 28,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 606, 605, 607, 28, 28, 28, 28, 28, 28, 28, 28,
- 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608,
- 608, 608, 608, 608, 608, 608, 608, 608, 609, 28, 28, 28, 28, 28, 28, 28,
- 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336,
- 336, 336, 336, 336, 336, 336, 336, 610, 611, 611, 611, 612, 611, 613, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 614, 614, 614, 615, 615, 28,
- 616, 616, 616, 616, 616, 616, 616, 616, 617, 28, 616, 618, 618, 616, 616, 619,
- 616, 616, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 620, 620, 620, 620, 620, 620, 620, 620,
- 620, 620, 620, 621, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 622, 622, 622, 622, 622, 622, 622, 622, 622, 623, 622, 622, 622, 622, 622, 622,
- 622, 624, 622, 622, 28, 28, 28, 28, 28, 28, 28, 28, 625, 28, 28, 28,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 28,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 627, 28,
- 628, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
- 312, 312, 312, 313, 28, 28, 28, 28, 28, 28, 629, 28, 630, 28, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 632,
- 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 634, 633, 635,
- 633, 636, 633, 637, 638, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 28,
- 0, 0, 0, 0, 279, 394, 0, 0, 0, 0, 0, 0, 639, 640, 0, 641,
- 642, 643, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 645, 28, 28,
- 16, 16, 16, 16, 16, 16, 16, 16, 267, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 302, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 28, 298, 298, 646, 645,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
- 0, 0, 0, 276, 647, 648, 0, 649, 650, 0, 0, 0, 0, 0, 0, 0,
- 651, 652, 276, 276, 0, 0, 0, 653, 654, 655, 656, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0,
- 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
- 657, 658, 28, 659, 660, 657, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 291, 290, 290, 661, 662, 663, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 664, 664, 664, 664, 664, 665, 664, 666, 664, 667, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 668, 668, 668, 668, 668, 668, 668, 669,
- 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670,
- 670, 670, 670, 670, 670, 670, 670, 670, 671, 670, 672, 28, 28, 28, 28, 28,
- 673, 673, 673, 673, 673, 673, 673, 673, 673, 674, 673, 675, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 394, 0,
- 0, 0, 0, 0, 0, 0, 676, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 394, 0, 0, 0, 0, 0, 0, 289, 28, 28, 28, 28, 28, 28, 28, 28,
- 677, 33, 33, 33, 678, 679, 680, 681, 682, 683, 678, 684, 678, 680, 680, 685,
- 33, 686, 33, 687, 688, 686, 33, 687, 28, 28, 28, 28, 28, 28, 384, 28,
- 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 302, 28, 0, 279, 394, 0, 394, 0, 394, 0, 0, 0, 289, 28,
- 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0,
- 0, 0, 0, 0, 0, 676, 28, 28, 28, 28, 28, 28, 689, 0, 0, 0,
- 690, 28, 0, 0, 0, 0, 0, 302, 0, 645, 377, 28, 289, 28, 28, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 28, 0, 676, 0, 286,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 302, 28, 28,
- 0, 302, 0, 0, 0, 0, 0, 0, 0, 28, 0, 389, 0, 0, 0, 0,
- 0, 28, 0, 0, 0, 289, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 655,
- 0, 0, 0, 0, 652, 691, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 28, 0, 289, 302, 286,
- 286, 28, 289, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 692, 28, 28, 28, 28, 28,
- 298, 298, 298, 298, 298, 298, 693, 28, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 301, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 377, 28, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 694, 28, 28, 28,
- 298, 298, 298, 301, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 695, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 28, 28,
-};
-
-static RE_UINT8 re_script_extensions_stage_4[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1,
- 1, 1, 35, 35, 1, 1, 1, 1, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 3, 41, 41, 3, 41, 41, 41, 41, 41, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3, 1, 3,
- 0, 0, 0, 0, 3, 1, 3, 1, 3, 3, 3, 0, 3, 0, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
- 3, 3, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 164, 162, 163, 163, 162,
- 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 5, 157, 5, 0, 0, 5, 5, 5,
- 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 0, 0, 0, 6,
- 6, 6, 6, 6, 6, 0, 0, 0, 7, 7, 7, 7, 7, 1, 7, 7,
- 7, 7, 7, 7, 185, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 185, 177, 0, 7, 185, 192, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 7, 7,
- 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 7, 7, 7, 7, 7, 7,
- 155, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 154, 7, 7, 7,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 8,
- 8, 8, 8, 0, 0, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 0, 0, 66, 66, 66, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 0, 0, 82, 82, 82, 82, 82, 82, 82, 0,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 95, 0,
- 8, 8, 8, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7,
- 7, 7, 1, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 196, 195, 41, 41, 10, 10, 10, 10, 10, 10, 10, 199, 200, 188, 188,
- 188, 188, 188, 188, 188, 188, 188, 188, 11, 11, 11, 11, 0, 11, 11, 11,
- 11, 11, 11, 11, 11, 0, 0, 11, 11, 0, 0, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
- 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11,
- 11, 0, 0, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11,
- 0, 0, 0, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 11, 11, 11, 11, 11, 11, 11, 0,
- 0, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 12,
- 12, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 0, 12, 12, 0,
- 12, 12, 0, 0, 12, 0, 12, 12, 12, 0, 0, 12, 12, 12, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
- 12, 12, 12, 12, 12, 12, 12, 0, 0, 13, 13, 13, 0, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
- 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13,
- 13, 13, 0, 13, 13, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 13, 13, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13,
- 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14,
- 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 0, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 14, 14, 14,
- 14, 14, 0, 0, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 0, 0,
- 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 14, 14, 0, 14,
- 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 15, 15, 0, 15, 15, 15,
- 15, 15, 15, 0, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0,
- 0, 15, 15, 0, 15, 0, 15, 15, 0, 0, 0, 15, 15, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15,
- 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 170, 170,
- 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 15, 15, 15, 15,
- 15, 15, 15, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16,
- 16, 16, 0, 0, 0, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0,
- 0, 0, 0, 0, 0, 16, 16, 0, 16, 16, 16, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 16,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17,
- 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17,
- 17, 17, 0, 0, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0,
- 17, 17, 17, 17, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
- 0, 17, 17, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 18, 18,
- 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18, 18, 18, 18,
- 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 19, 19, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19,
- 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19,
- 0, 0, 19, 19, 19, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 1,
- 20, 20, 20, 20, 0, 0, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
- 21, 21, 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, 0, 0,
- 21, 21, 21, 21, 21, 0, 21, 0, 21, 21, 0, 0, 21, 21, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22, 22, 22, 0, 22, 22,
- 22, 22, 22, 22, 22, 1, 1, 1, 1, 22, 22, 0, 0, 0, 0, 0,
- 23, 23, 23, 23, 23, 23, 23, 23, 179, 179, 179, 179, 179, 179, 179, 179,
- 179, 179, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 0, 24, 0, 0, 0, 0, 0, 24, 0, 0,
- 24, 24, 24, 169, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 0,
- 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 0, 0, 26, 26, 26,
- 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 0, 0, 0, 0, 0, 0,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 1, 1, 1, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 42, 42,
- 42, 42, 42, 42, 42, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 187, 187, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0,
- 31, 31, 0, 0, 0, 0, 0, 0, 32, 32, 176, 176, 32, 176, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 0, 0, 0, 0, 0, 28, 28, 28, 28, 28, 28, 0, 0,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0,
- 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, 46, 46, 46, 46,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
- 47, 47, 47, 47, 47, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 0, 0,
- 56, 56, 56, 0, 0, 0, 56, 56, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 0, 0, 54, 54, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 0, 78, 78, 78, 78, 78, 0, 0, 78,
- 78, 78, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 78, 78, 0, 0,
- 41, 41, 41, 41, 41, 41, 41, 0, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 0, 0, 0, 0, 62, 62, 62, 62, 62, 0, 0, 0,
- 67, 67, 67, 67, 67, 67, 67, 67, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93, 93,
- 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 68, 68, 68, 68, 68,
- 68, 68, 0, 0, 0, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
- 4, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 0, 0, 24, 24, 24,
- 186, 10, 186, 165, 10, 158, 158, 167, 158, 167, 191, 10, 167, 167, 10, 10,
- 167, 158, 10, 10, 10, 10, 10, 10, 10, 166, 158, 10, 10, 158, 10, 10,
- 10, 10, 193, 165, 181, 158, 158, 11, 165, 165, 150, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 41, 41, 41, 41, 41, 41,
- 41, 41, 0, 41, 41, 41, 41, 41, 3, 3, 3, 3, 3, 3, 0, 0,
- 0, 3, 0, 3, 0, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3,
- 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
- 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 1, 1, 1, 1, 41, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 175,
- 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0,
- 2, 2, 2, 2, 2, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
- 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
- 55, 55, 55, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55,
- 58, 58, 58, 58, 58, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 58,
- 58, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 162, 1, 1, 1, 1,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 190, 190, 189, 1, 36, 36, 36,
- 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 1, 189, 190, 190, 190, 190,
- 190, 190, 190, 190, 189, 189, 189, 189, 1, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 159, 159, 159, 159, 25, 25, 189, 173, 173, 173, 173, 173, 1, 189,
- 36, 36, 36, 36, 183, 183, 36, 36, 0, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0,
- 0, 173, 173, 173, 173, 33, 33, 33, 173, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 190, 173, 34, 34, 34,
- 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
- 35, 35, 35, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 1,
- 36, 1, 1, 1, 1, 1, 1, 1, 36, 36, 36, 36, 1, 1, 1, 1,
- 34, 34, 34, 34, 34, 34, 34, 36, 1, 1, 1, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 1, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 0,
- 83, 83, 83, 83, 83, 83, 83, 83, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 162,
- 84, 84, 84, 84, 84, 84, 84, 84, 1, 1, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 0, 0, 0, 0, 198, 198, 198, 197, 197, 197, 194, 194,
- 194, 194, 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
- 0, 0, 0, 0, 0, 0, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
- 10, 158, 10, 168, 10, 10, 10, 10, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 184, 72, 73, 73, 73, 73, 73, 73, 73, 73,
- 73, 73, 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
- 25, 25, 25, 25, 25, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 0, 160, 85, 85, 0, 0, 0, 0, 85, 85,
- 23, 23, 23, 23, 23, 23, 23, 0, 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 0, 77, 77, 77, 77, 77, 77, 0, 0,
- 77, 77, 0, 0, 77, 77, 77, 77, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 0,
- 0, 26, 26, 26, 26, 26, 26, 0, 2, 2, 2, 1, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 2, 86, 86, 86, 86, 86, 86, 0, 0,
- 86, 86, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 0, 0, 0, 0,
- 0, 0, 0, 25, 25, 25, 25, 25, 36, 36, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5,
- 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 6, 6, 6, 6, 6, 0, 6, 0, 6, 6, 0, 6, 6, 0, 6, 6,
- 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 1, 1,
- 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 156, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 156, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 41, 41, 41, 41, 41, 41, 4, 4, 1, 1, 1, 1, 1, 189, 189, 1,
- 1, 1, 1, 0, 1, 1, 1, 1, 7, 7, 7, 7, 7, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 190, 190, 190, 190, 190, 34, 34,
- 34, 34, 34, 34, 34, 34, 173, 173, 0, 0, 25, 25, 25, 25, 25, 25,
- 0, 0, 25, 25, 25, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 0, 48,
- 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 0, 0, 0, 0, 0,
- 161, 161, 161, 0, 0, 0, 0, 180, 180, 180, 180, 180, 180, 180, 180, 180,
- 180, 180, 180, 180, 0, 0, 0, 161, 161, 161, 161, 161, 161, 161, 161, 161,
- 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 41, 0, 0,
- 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 0, 0, 0,
- 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0,
- 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0, 0,
- 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 49, 49, 49, 0, 49, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 0, 0,
- 40, 40, 40, 40, 40, 40, 40, 40, 50, 50, 50, 50, 50, 50, 50, 50,
- 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0,
- 51, 51, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 0, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 103, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 0, 110, 110, 110, 110, 110, 110, 0, 0,
- 52, 52, 52, 52, 52, 52, 0, 0, 52, 0, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 52,
- 52, 0, 0, 0, 52, 0, 0, 52, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 0, 87, 118, 118, 118, 118, 118, 118, 118, 118,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 0,
- 0, 0, 0, 0, 0, 0, 0, 117, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 64,
- 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0, 76,
- 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97,
- 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97,
- 61, 61, 61, 61, 0, 61, 61, 0, 0, 0, 0, 0, 61, 61, 61, 61,
- 61, 61, 61, 61, 0, 61, 61, 61, 0, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0,
- 61, 61, 61, 0, 0, 0, 0, 61, 61, 0, 0, 0, 0, 0, 0, 0,
- 88, 88, 88, 88, 88, 88, 88, 88, 116, 116, 116, 116, 116, 116, 116, 116,
- 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0,
- 0, 0, 0, 112, 112, 112, 112, 112, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0, 0, 0, 0, 0,
- 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0,
- 0, 121, 121, 121, 121, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121,
- 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 0, 0,
- 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 130, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0,
- 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 147, 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 0, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 0, 0, 0, 0, 94, 94, 94, 94, 94, 94,
- 0, 0, 0, 0, 0, 0, 0, 94, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0,
- 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0,
- 101, 101, 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0,
- 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0,
- 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0,
- 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 0, 129, 129, 129, 129, 129, 129, 129, 0,
- 129, 0, 129, 129, 129, 129, 0, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 129, 129, 129, 129, 0, 129, 129, 129, 0, 0, 0, 0, 0, 0,
- 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0,
- 123, 123, 0, 0, 0, 0, 0, 0, 107, 170, 107, 170, 0, 107, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 107, 107, 0, 0, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107,
- 107, 0, 107, 107, 0, 107, 107, 107, 107, 107, 0, 170, 170, 107, 107, 107,
- 107, 0, 0, 107, 107, 107, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107,
- 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 0, 0, 107, 107,
- 107, 107, 107, 107, 107, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 0, 135, 0, 135, 135, 135, 124, 124, 124, 124, 124, 124, 124, 124,
- 124, 124, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 0, 0, 0, 114, 114, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 0, 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, 0,
- 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 126, 126, 126,
- 126, 126, 126, 126, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 142, 142, 0, 0, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125,
- 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125,
- 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0,
- 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 0, 133, 133, 133, 133, 133, 133, 0, 0,
- 133, 133, 133, 133, 133, 0, 0, 0, 134, 134, 134, 134, 134, 134, 134, 134,
- 0, 0, 134, 134, 134, 134, 134, 134, 0, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 0, 138, 138, 138, 138, 138, 138, 138, 0,
- 138, 138, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
- 0, 0, 138, 0, 138, 138, 0, 138, 138, 138, 0, 0, 0, 0, 0, 0,
- 143, 143, 143, 143, 143, 143, 0, 143, 143, 0, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
- 143, 143, 0, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 0, 0, 0,
- 143, 143, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 0, 0, 0, 0, 0, 0, 0, 170, 170, 15, 170, 15, 15, 15, 15,
- 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
- 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0, 0, 0, 0,
- 63, 63, 63, 63, 63, 63, 63, 0, 63, 63, 63, 63, 63, 0, 0, 0,
- 63, 63, 63, 63, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 0, 81, 0, 0, 0, 0, 0, 0, 0,
- 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 0, 115, 115, 0, 0, 0, 0, 115, 115,
- 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 0, 0,
- 108, 108, 0, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 108, 108, 108,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 99,
- 0, 0, 0, 0, 0, 0, 0, 99, 137, 139, 1, 1, 0, 0, 0, 0,
- 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0,
- 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 34, 34, 34, 34, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 0, 0, 0,
- 105, 0, 0, 0, 0, 0, 0, 0, 105, 105, 0, 0, 105, 105, 105, 105,
- 105, 105, 105, 105, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 41,
- 41, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 41, 41, 41, 41,
- 41, 41, 41, 1, 1, 41, 41, 41, 41, 41, 41, 41, 1, 1, 1, 1,
- 1, 1, 41, 41, 41, 41, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 1, 1, 1, 1, 1, 1, 131, 131, 131, 131, 131, 131, 131, 131,
- 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131,
- 0, 131, 131, 131, 131, 131, 131, 131, 57, 0, 0, 57, 57, 57, 57, 57,
- 57, 57, 0, 57, 57, 0, 57, 57, 57, 57, 57, 0, 0, 0, 0, 0,
- 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0,
- 151, 151, 151, 151, 151, 151, 0, 0, 151, 151, 0, 0, 0, 0, 151, 151,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 152,
- 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, 0, 113,
- 113, 113, 113, 113, 113, 113, 113, 0, 132, 132, 132, 132, 132, 132, 132, 132,
- 132, 132, 132, 132, 0, 0, 0, 0, 132, 132, 0, 0, 0, 0, 132, 132,
- 1, 1, 1, 1, 1, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7,
- 0, 7, 7, 0, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 0, 7, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 7, 7,
- 0, 7, 0, 7, 0, 7, 0, 7, 0, 7, 7, 7, 7, 0, 7, 0,
- 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
- 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 1, 1,
- 33, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1,
- 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36, 0, 0, 0,
- 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
-};
-
-/* Script_Extensions: 14272 bytes. */
-
-static RE_ScriptExt re_scripts_extensions_table[] = {
- {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 5, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 54, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 4, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 4, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 15, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 13, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 12, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 17, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 11, 59, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 23, 47, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 48, 52, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 17, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 10, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 33, 34, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 23, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 9, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 17, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 92, 111, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 25, 33, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 25, 33, 34, 35, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 7, 8, 95, 112, 121, 132, 146, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 14, 16, 17, 107, 124, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 12, 13, 92, 102, 109, 111, 114, 123, 124, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 10, 11, 12, 13, 14, 15, 16, 17, 18, 107, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 2, 10, 11, 12, 13, 14, 15, 16, 17, 18, 100, 107, 124, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 12, 13, 17, 92, 102, 109, 111, 114, 123, 124, 142, 150, 0, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 12, 13, 17, 18, 92, 102, 109, 111, 114, 123, 124, 142, 150, 0, 0, 0, 0, 0, 0, 0}},
- {{ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 59, 102, 107, 111, 123, 124, 138, 142, 143, 150, 0}},
- {{ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 46, 59, 102, 107, 111, 123, 124, 138, 142, 143, 150}}
-};
-
-int re_get_script_extensions(RE_UINT32 ch, RE_UINT8* scripts) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_UINT8* scr;
- int count;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_script_extensions_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_script_extensions_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_script_extensions_stage_3[pos + f] << 3;
- value = re_script_extensions_stage_4[pos + code];
-
- scr = re_scripts_extensions_table[value].scripts;
- scripts[0] = scr[0];
- count = 1;
-
- if (scr[0] != 0) {
- while (count < RE_MAX_SCX && scr[count] != 0) {
- scripts[count] = scr[count];
- ++count;
- }
- }
-
- return count;
-}
-
-/* Word_Break. */
-
-static RE_UINT8 re_word_break_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 6, 7, 4, 8,
- 9, 10, 11, 12, 13, 4, 14, 4, 4, 4, 4, 15, 4, 16, 17, 18,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 19, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_word_break_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 50, 2, 2, 51, 52,
- 53, 54, 55, 56, 57, 57, 57, 57, 57, 58, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 59, 60, 61, 62, 63, 57, 57, 57,
- 64, 65, 66, 67, 57, 68, 69, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 70, 2, 2, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 83,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 84, 85, 2, 2, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 57, 96, 97, 98, 2, 99, 100, 57, 2, 2, 101, 57,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 57, 57, 57, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 57, 122, 123, 57, 124, 125, 126, 127, 57,
- 128, 129, 57, 130, 131, 132, 57, 57, 133, 134, 135, 136, 57, 137, 57, 57,
- 2, 2, 2, 2, 2, 2, 2, 138, 139, 2, 140, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 2, 2, 2, 2, 2, 2, 2, 141, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 2, 2, 142, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 2, 2, 2, 143, 144, 145, 146, 57, 57, 57, 57, 147, 57, 148, 149,
- 150, 57, 151, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 152, 153, 57, 57, 57, 57, 57, 57,
- 57, 57, 154, 155, 156, 57, 57, 57, 157, 158, 159, 2, 2, 160, 161, 162,
- 57, 57, 57, 57, 163, 164, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 165, 57, 166, 57, 57, 167, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 2, 168, 169, 57, 57, 57, 57, 57, 57, 57, 57, 57, 170, 171, 57, 57,
- 57, 57, 172, 173, 57, 57, 57, 174, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 175, 57, 176, 177, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-};
-
-static RE_UINT8 re_word_break_stage_3[] = {
- 0, 0, 1, 2, 0, 0, 0, 0, 3, 4, 0, 5, 6, 6, 7, 0,
- 8, 9, 9, 9, 9, 9, 10, 11, 8, 9, 9, 9, 9, 9, 10, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 13, 0,
- 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 0, 16, 9, 17, 0, 9, 9, 9, 9, 9,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 19, 16, 20,
- 0, 21, 10, 19, 9, 9, 9, 9, 22, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9,
- 23, 18, 24, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,
- 9, 9, 9, 9, 9, 10, 25, 26, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 27, 0, 28, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 29,
- 30, 29, 0, 0, 31, 31, 31, 31, 31, 31, 32, 33, 34, 35, 0, 0,
- 36, 37, 0, 38, 18, 18, 39, 40, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 41, 18, 18, 18, 18, 18, 6, 6, 42, 43, 44, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 45, 18, 46, 18, 47, 48, 24, 6, 6, 49, 50,
- 0, 0, 0, 51, 52, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18,
- 18, 18, 39, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 18, 18, 54, 0, 0, 0,
- 6, 6, 49, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 55, 56, 57,
- 9, 9, 9, 9, 9, 53, 58, 18, 18, 59, 59, 60, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 59, 0, 9, 9, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 19, 9, 55,
- 0, 0, 0, 0, 61, 18, 18, 18, 62, 18, 18, 18, 18, 18, 18, 18,
- 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 63,
- 18, 18, 18, 18, 59, 18, 9, 9, 53, 64, 6, 6, 8, 9, 9, 9,
- 59, 8, 9, 50, 50, 9, 9, 9, 9, 9, 19, 9, 26, 16, 55, 63,
- 18, 65, 65, 66, 0, 61, 0, 22, 53, 64, 6, 6, 55, 0, 0, 67,
- 28, 8, 10, 68, 50, 9, 9, 9, 9, 9, 19, 9, 19, 69, 55, 48,
- 39, 61, 65, 60, 57, 0, 8, 26, 0, 64, 6, 6, 24, 70, 0, 0,
- 28, 8, 9, 22, 22, 9, 9, 9, 9, 9, 19, 9, 19, 8, 55, 63,
- 18, 29, 29, 60, 17, 0, 0, 0, 53, 64, 6, 6, 0, 0, 45, 18,
- 28, 8, 9, 50, 50, 9, 9, 9, 9, 9, 19, 9, 19, 8, 55, 63,
- 18, 65, 65, 60, 0, 71, 0, 22, 53, 64, 6, 6, 72, 0, 0, 0,
- 73, 8, 10, 16, 19, 55, 69, 19, 68, 17, 10, 16, 9, 9, 55, 71,
- 39, 71, 48, 60, 17, 61, 0, 0, 0, 64, 6, 6, 0, 0, 0, 0,
- 18, 44, 9, 19, 19, 9, 9, 9, 9, 9, 19, 9, 9, 9, 55, 45,
- 18, 48, 48, 60, 0, 30, 10, 0, 53, 64, 6, 6, 0, 0, 0, 0,
- 59, 8, 9, 19, 19, 9, 9, 9, 9, 9, 19, 9, 9, 8, 55, 63,
- 18, 48, 48, 60, 0, 30, 0, 13, 53, 64, 6, 6, 69, 0, 0, 0,
- 18, 8, 9, 19, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 63,
- 18, 48, 48, 66, 0, 41, 0, 68, 53, 64, 6, 6, 0, 0, 16, 9,
- 71, 8, 9, 9, 9, 10, 16, 9, 9, 9, 9, 9, 22, 9, 9, 72,
- 9, 10, 74, 61, 18, 75, 18, 18, 0, 64, 6, 6, 71, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 18, 39, 0,
- 0, 61, 18, 39, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 18, 18, 77,
- 0, 0, 18, 60, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 60, 0, 6, 6, 76, 0, 0, 78, 57, 71,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 17, 28, 18, 18, 18,
- 18, 48, 9, 59, 18, 18, 28, 18, 18, 18, 18, 18, 18, 18, 18, 77,
- 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 18, 18, 18, 18, 39,
- 6, 6, 76, 0, 0, 71, 60, 71, 48, 65, 18, 60, 28, 77, 0, 0,
- 71, 18, 18, 29, 6, 6, 79, 60, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 22, 0, 72, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 19, 55, 9, 10, 19, 55, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 19, 55, 9, 9, 9, 9, 9, 9, 9, 9, 19, 55, 9, 10,
- 19, 55, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 19, 55, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 10, 28, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 9, 55,
- 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 50, 9, 9, 9, 9,
- 80, 9, 9, 9, 9, 9, 10, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 16, 9, 9, 17, 0,
- 9, 9, 9, 19, 53, 77, 0, 0, 9, 9, 9, 9, 53, 77, 0, 0,
- 9, 9, 9, 9, 53, 0, 0, 0, 9, 9, 9, 19, 81, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18,
- 18, 18, 18, 18, 18, 0, 0, 57, 6, 6, 76, 0, 0, 0, 0, 0,
- 0, 0, 61, 82, 6, 6, 76, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0,
- 9, 83, 9, 9, 9, 9, 9, 9, 9, 9, 84, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 18, 18, 18, 0, 18, 18, 18, 0,
- 0, 64, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 41, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 28, 18, 39, 18, 18, 18, 18, 18, 18, 18, 65,
- 6, 6, 76, 0, 6, 6, 76, 0, 0, 0, 0, 0, 18, 18, 18, 39,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 44, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18,
- 18, 44, 9, 0, 6, 6, 76, 0, 0, 0, 61, 18, 18, 0, 0, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 59, 18, 18, 24, 6, 6, 49, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 18, 18, 18, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 0, 0,
- 6, 6, 76, 8, 6, 6, 49, 9, 9, 9, 9, 9, 9, 9, 9, 55,
- 9, 9, 17, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 8,
- 0, 0, 0, 0, 39, 18, 18, 18, 18, 18, 44, 52, 9, 47, 66, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 29, 18,
- 9, 9, 9, 9, 9, 55, 9, 55, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 55, 9, 55, 9, 9, 25, 25, 9, 9, 9, 9, 9, 9, 9, 55,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 9, 26,
- 16, 19, 9, 17, 9, 16, 9, 0, 9, 9, 9, 17, 16, 19, 9, 17,
- 86, 87, 87, 88, 0, 0, 89, 0, 0, 90, 91, 92, 0, 0, 0, 11,
- 93, 94, 0, 0, 0, 93, 0, 95, 36, 96, 36, 36, 72, 0, 0, 68,
- 0, 0, 0, 0, 9, 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 77, 0, 0, 0,
- 13, 68, 16, 9, 9, 72, 8, 55, 0, 26, 19, 22, 9, 9, 55, 9,
- 0, 8, 55, 13, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 68, 41, 24, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 0, 72, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 68, 0, 0, 0, 61,
- 9, 9, 9, 9, 9, 10, 0, 0, 9, 10, 9, 10, 9, 10, 9, 10,
- 9, 10, 9, 10, 9, 10, 9, 10, 18, 18, 18, 18, 18, 18, 18, 18,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 97, 72, 0, 0, 0, 0, 0, 0, 0, 0, 71, 18, 98, 99, 68, 17,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 100, 101, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 102,
- 0, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 10, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103,
- 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55,
- 9, 9, 9, 17, 9, 9, 9, 9, 6, 6, 49, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 39, 18, 18, 104,
- 9, 9, 9, 9, 9, 9, 9, 53, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 60, 0, 0, 0,
- 0, 0, 0, 0, 0, 68, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 16, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 9, 9,
- 105, 105, 41, 9, 9, 9, 9, 9, 41, 18, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
- 24, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18,
- 18, 60, 0, 0, 6, 6, 76, 0, 18, 18, 18, 18, 24, 9, 68, 106,
- 6, 6, 49, 9, 9, 9, 9, 9, 9, 53, 18, 60, 9, 9, 9, 9,
- 9, 41, 18, 18, 18, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 17,
- 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18,
- 77, 0, 0, 68, 6, 6, 76, 0, 0, 57, 0, 0, 6, 6, 76, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 18, 18, 39, 0, 0,
- 41, 9, 9, 60, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 61, 60,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 65, 77, 71,
- 57, 0, 0, 0, 0, 0, 0, 0, 9, 9, 41, 18, 16, 107, 0, 0,
- 8, 10, 8, 10, 8, 10, 0, 0, 9, 10, 9, 10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 39, 60, 6, 6, 76, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9,
- 9, 10, 68, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
- 9, 10, 0, 0, 68, 9, 0, 108, 31, 31, 109, 31, 31, 32, 31, 110,
- 111, 109, 31, 31, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0, 0,
- 0, 0, 0, 0, 68, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55,
- 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 16, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0,
- 18, 18, 18, 18, 112, 94, 0, 0, 18, 18, 18, 18, 11, 93, 0, 0,
- 0, 0, 0, 113, 5, 114, 0, 0, 0, 0, 0, 0, 9, 19, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 115,
- 0, 116, 0, 5, 6, 6, 7, 0, 8, 9, 9, 9, 9, 9, 10, 11,
- 8, 9, 9, 9, 9, 9, 10, 0, 0, 117, 102, 102, 102, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 102, 118, 9, 9, 9, 9, 9, 9, 9, 10,
- 16, 9, 16, 9, 16, 9, 16, 17, 0, 0, 0, 0, 0, 0, 119, 0,
- 9, 9, 9, 8, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 10, 22,
- 9, 9, 9, 55, 9, 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
- 9, 9, 9, 9, 9, 9, 9, 17, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 17, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 8, 9, 9, 9, 9,
- 9, 9, 10, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 39, 0,
- 9, 9, 9, 9, 9, 9, 9, 55, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 0, 9, 9, 8, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 55, 6, 6, 76, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0,
- 9, 55, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 17, 50,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 9, 9, 9, 10, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 10, 55, 0, 0,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 9, 9, 9, 9, 55, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 16,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 59, 30, 0, 18, 9, 8, 8, 9, 9, 9, 9, 9, 9, 55, 39, 61,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 17,
- 9, 9, 9, 9, 9, 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 107, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 0, 0,
- 9, 9, 9, 9, 9, 55, 0, 0, 9, 9, 9, 9, 10, 0, 0, 0,
- 9, 9, 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 6, 6, 76, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 17, 0, 68, 0, 0, 9, 9, 9, 9,
- 9, 53, 18, 18, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 10, 0, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18,
- 18, 39, 0, 0, 0, 0, 0, 0, 0, 64, 6, 6, 0, 0, 0, 61,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 39, 14,
- 0, 0, 0, 14, 9, 9, 9, 9, 9, 9, 17, 0, 6, 6, 76, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18, 120, 6, 6,
- 0, 107, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 41, 13, 0, 0,
- 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18,
- 44, 17, 28, 77, 6, 6, 121, 17, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 22, 9, 9, 9, 9, 9, 9, 18, 18, 18, 0, 74,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 10, 19, 22, 9, 9, 9, 22, 9, 9, 17, 0, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 39, 0, 6, 6, 76, 0,
- 18, 8, 9, 50, 50, 9, 9, 9, 9, 9, 19, 9, 19, 8, 23, 63,
- 18, 65, 65, 60, 17, 61, 0, 8, 53, 71, 18, 77, 18, 77, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 18, 18,
- 18, 85, 10, 0, 6, 6, 76, 73, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18,
- 18, 22, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 60, 18, 18,
- 77, 0, 0, 0, 0, 0, 9, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18,
- 77, 17, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 18, 18, 17, 0,
- 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 28, 18, 18, 18, 0, 6, 6, 76, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 39, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 76, 0, 0, 0, 0, 68,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 16, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 59, 18, 71, 18, 122, 77, 0, 0, 0, 0, 0, 0,
- 59, 18, 85, 9, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 58, 39,
- 0, 61, 0, 0, 59, 18, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 53, 18, 18, 18, 60, 72, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0,
- 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 9, 41, 18, 39, 18, 18,
- 17, 0, 0, 0, 6, 6, 76, 0, 0, 0, 0, 0, 16, 9, 9, 9,
- 9, 9, 9, 9, 71, 18, 18, 18, 18, 18, 28, 18, 18, 39, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 10, 22, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 39, 74, 29,
- 18, 58, 0, 0, 6, 6, 76, 0, 9, 22, 19, 9, 9, 9, 9, 9,
- 9, 9, 53, 39, 29, 18, 17, 0, 6, 6, 76, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 41, 39, 0, 0,
- 9, 9, 9, 9, 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 36, 36, 40, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 6, 6, 76, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 55, 18, 77, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 39, 0, 0,
- 9, 0, 0, 0, 6, 6, 76, 0, 68, 9, 9, 9, 9, 9, 0, 8,
- 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 10, 61, 59, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 0, 61, 85, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0,
- 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 0, 9, 9, 9, 17,
- 9, 9, 17, 0, 9, 9, 55, 30, 36, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 60, 28, 123, 36, 124, 18,
- 39, 28, 18, 0, 0, 0, 0, 0, 0, 0, 71, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 71, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 19, 13, 69, 8, 19, 9, 9, 22, 8,
- 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 22, 10, 8, 9, 19, 9, 19, 9, 9, 9, 9, 9, 9, 22, 10,
- 9, 26, 16, 9, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 55, 9, 9, 9, 9, 9, 9,
- 19, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9,
- 9, 9, 9, 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 19, 9, 9,
- 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9,
- 9, 9, 19, 9, 9, 9, 9, 9, 9, 9, 19, 9, 9, 9, 9, 9,
- 10, 9, 9, 64, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 39, 61, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 77, 0, 57, 0, 0,
- 0, 77, 0, 0, 0, 0, 61, 18, 28, 18, 18, 18, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 39, 18, 18, 18, 18, 65, 18, 29, 48, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 18, 85, 9, 55,
- 6, 6, 76, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 6, 6, 76, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 17, 0, 0, 18, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 18, 85, 0, 6, 6, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 8, 9, 9, 9, 9, 9, 9, 69, 50, 8, 9, 10, 9, 25, 0,
- 13, 68, 25, 8, 69, 50, 25, 25, 69, 50, 10, 9, 10, 9, 8, 26,
- 9, 9, 22, 9, 9, 9, 9, 0, 8, 8, 22, 9, 9, 9, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
- 9, 9, 55, 0, 9, 9, 9, 9, 9, 9, 55, 0, 9, 9, 9, 9,
- 9, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 126, 126, 126, 126, 126,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 18,
- 14, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_word_break_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 5, 6, 6, 4, 0, 0, 18, 0, 1, 0,
- 0, 0, 0, 2, 13, 0, 14, 0, 15, 15, 15, 15, 15, 15, 12, 13,
- 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 16,
- 0, 6, 0, 0, 0, 0, 11, 0, 0, 9, 0, 0, 0, 11, 0, 12,
- 0, 0, 11, 11, 11, 0, 0, 0, 7, 7, 7, 7, 11, 0, 11, 11,
- 11, 11, 13, 11, 0, 0, 11, 12, 11, 11, 0, 11, 11, 11, 0, 7,
- 7, 7, 11, 11, 0, 11, 0, 11, 11, 0, 11, 0, 11, 13, 0, 0,
- 0, 7, 7, 7, 7, 7, 0, 7, 0, 7, 7, 0, 3, 3, 3, 3,
- 3, 3, 3, 0, 0, 0, 0, 3, 3, 3, 3, 11, 12, 0, 0, 0,
- 9, 9, 9, 9, 9, 9, 0, 0, 13, 13, 0, 0, 7, 7, 7, 0,
- 9, 0, 0, 0, 11, 11, 11, 7, 15, 15, 0, 15, 13, 0, 11, 11,
- 7, 11, 11, 11, 0, 11, 7, 7, 7, 9, 0, 7, 7, 11, 11, 7,
- 7, 0, 7, 7, 15, 15, 11, 11, 11, 0, 0, 11, 0, 0, 0, 9,
- 11, 7, 11, 11, 11, 11, 7, 7, 7, 11, 0, 0, 11, 11, 0, 0,
- 13, 0, 11, 0, 0, 7, 0, 0, 7, 7, 11, 7, 11, 7, 7, 7,
- 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 9, 7, 7, 11, 7, 7,
- 0, 0, 15, 15, 7, 0, 0, 7, 7, 7, 11, 0, 11, 0, 7, 0,
- 0, 0, 0, 11, 0, 11, 11, 0, 11, 7, 0, 0, 0, 0, 7, 7,
- 0, 11, 0, 0, 0, 0, 7, 11, 0, 0, 7, 0, 7, 0, 7, 0,
- 15, 15, 0, 0, 7, 0, 0, 0, 0, 7, 0, 7, 15, 15, 7, 7,
- 18, 11, 11, 11, 11, 0, 7, 7, 7, 7, 9, 0, 11, 7, 7, 11,
- 11, 7, 11, 0, 7, 7, 7, 11, 18, 18, 18, 18, 18, 18, 18, 0,
- 7, 17, 9, 9, 14, 14, 0, 0, 14, 0, 0, 12, 6, 6, 9, 9,
- 9, 9, 9, 16, 16, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 18,
- 9, 0, 9, 9, 18, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0,
- 0, 7, 7, 10, 10, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0,
- 7, 7, 0, 11, 11, 11, 7, 11, 0, 11, 11, 7, 11, 7, 7, 0,
- 0, 3, 7, 3, 3, 0, 3, 3, 3, 0, 3, 0, 3, 3, 0, 3,
- 13, 0, 0, 12, 0, 16, 16, 16, 13, 12, 0, 0, 11, 0, 0, 9,
- 0, 0, 0, 14, 0, 0, 10, 10, 10, 10, 7, 7, 0, 9, 9, 9,
- 7, 0, 15, 15, 15, 15, 11, 0, 7, 11, 0, 11, 7, 7, 7, 9,
- 9, 9, 9, 7, 0, 0, 8, 8, 8, 8, 8, 8,
-};
-
-/* Word_Break: 7116 bytes. */
-
-RE_UINT32 re_get_word_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_word_break_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_word_break_stage_2[pos + f] << 5;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_word_break_stage_3[pos + f] << 2;
- value = re_word_break_stage_4[pos + code];
-
- return value;
-}
-
-/* Grapheme_Cluster_Break. */
-
-static RE_UINT8 re_grapheme_cluster_break_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 4, 9,
- 10, 11, 4, 12, 4, 4, 13, 4, 4, 4, 4, 14, 4, 15, 16, 17,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 18, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_grapheme_cluster_break_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 3, 3,
- 3, 3, 6, 3, 3, 3, 7, 8, 9, 10, 3, 11, 12, 13, 14, 15,
- 16, 17, 3, 18, 19, 20, 21, 22, 23, 24, 23, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 3, 49, 50, 51, 52, 3, 3, 3, 3, 3, 53, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 54, 55, 56, 57,
- 58, 3, 59, 3, 60, 3, 3, 3, 61, 62, 63, 3, 64, 65, 66, 67,
- 68, 3, 3, 69, 3, 3, 3, 70, 3, 3, 3, 3, 3, 3, 3, 3,
- 71, 72, 3, 73, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 74, 3, 75, 3, 76, 3, 3, 3, 3, 3, 3, 3, 3,
- 77, 3, 78, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 79, 80, 81, 3, 3, 3, 3,
- 82, 3, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 3, 3, 3, 93,
- 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95,
- 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97,
- 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99,
- 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94,
- 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96,
- 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98,
- 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100,
- 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95,
- 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97,
- 98, 99, 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99,
- 100, 94, 95, 96, 97, 98, 99, 100, 94, 95, 96, 97, 98, 99, 101, 102,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 103, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 104, 3, 3, 1, 3, 3, 80, 105,
- 3, 3, 3, 3, 3, 3, 3, 106, 3, 3, 3, 107, 3, 108, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 109, 3, 3, 110, 3, 3, 3, 3,
- 3, 3, 3, 3, 111, 3, 3, 3, 3, 3, 3, 3, 3, 112, 3, 3,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 3, 3, 122, 34, 123, 3, 3,
- 124, 125, 126, 127, 3, 3, 128, 129, 130, 131, 132, 3, 133, 3, 3, 3,
- 134, 3, 3, 3, 3, 3, 3, 135, 136, 137, 138, 3, 3, 3, 3, 3,
- 139, 3, 140, 3, 141, 142, 143, 3, 3, 3, 3, 144, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 145, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 146, 147, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 148, 149, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 150, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 151, 152, 3, 3, 153, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 154, 155, 156, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 157, 3, 3, 3, 147, 3, 3, 3, 3, 3, 3, 158, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 159, 3, 160, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 161, 3, 3, 3, 3, 3, 3, 3, 162,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 163, 4, 164, 164, 4, 4, 4, 165, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
-};
-
-static RE_UINT8 re_grapheme_cluster_break_stage_3[] = {
- 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 0, 0, 0, 0, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2,
- 6, 7, 2, 2, 2, 2, 2, 2, 2, 2, 8, 5, 5, 5, 5, 9,
- 10, 2, 2, 2, 2, 2, 2, 2, 11, 2, 5, 12, 2, 2, 2, 2,
- 2, 6, 5, 5, 2, 2, 13, 2, 2, 2, 14, 15, 16, 17, 2, 2,
- 2, 18, 19, 2, 2, 2, 5, 5, 5, 20, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 14, 5, 13, 2, 2, 2, 2, 2, 2, 6, 21, 22,
- 2, 2, 14, 23, 24, 25, 2, 2, 2, 2, 2, 26, 2, 2, 2, 2,
- 2, 2, 6, 5, 27, 5, 5, 5, 28, 2, 2, 2, 2, 2, 2, 29,
- 30, 31, 8, 2, 32, 2, 2, 2, 33, 2, 2, 2, 2, 2, 2, 34,
- 35, 36, 37, 2, 32, 2, 2, 38, 39, 2, 2, 2, 2, 2, 2, 40,
- 41, 42, 19, 2, 2, 2, 43, 2, 44, 45, 2, 2, 32, 2, 2, 46,
- 33, 2, 2, 2, 2, 2, 2, 47, 35, 36, 14, 2, 32, 2, 2, 2,
- 48, 2, 2, 2, 2, 2, 2, 49, 50, 51, 37, 2, 2, 2, 2, 2,
- 52, 2, 2, 2, 2, 2, 2, 14, 53, 17, 54, 2, 32, 2, 2, 2,
- 33, 2, 2, 2, 2, 2, 2, 55, 56, 57, 54, 2, 32, 2, 2, 2,
- 58, 2, 2, 2, 2, 2, 2, 59, 60, 61, 37, 2, 32, 2, 2, 2,
- 62, 2, 2, 2, 2, 2, 2, 2, 2, 63, 64, 65, 2, 2, 62, 2,
- 2, 2, 2, 2, 2, 2, 66, 20, 37, 67, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 66, 68, 2, 69, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 7, 2, 2, 70, 71, 2, 2, 2, 2, 2, 2, 8, 72,
- 73, 74, 5, 8, 5, 5, 5, 68, 38, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 74, 75, 76, 2, 2, 77, 78, 13, 2, 79, 2,
- 80, 22, 2, 22, 2, 2, 2, 2, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83,
- 83, 83, 83, 83, 83, 83, 83, 83, 2, 2, 2, 74, 2, 2, 2, 2,
- 2, 2, 84, 2, 2, 2, 84, 2, 2, 2, 32, 2, 2, 2, 32, 2,
- 2, 2, 2, 2, 2, 2, 85, 86, 87, 30, 21, 22, 2, 2, 2, 2,
- 2, 88, 2, 2, 2, 2, 2, 2, 54, 2, 2, 2, 2, 19, 2, 2,
- 2, 2, 2, 2, 89, 90, 91, 92, 2, 2, 37, 93, 2, 2, 2, 2,
- 2, 2, 94, 67, 95, 96, 97, 16, 2, 2, 2, 2, 2, 2, 5, 67,
- 98, 2, 2, 2, 2, 2, 99, 100, 101, 2, 2, 2, 2, 6, 21, 2,
- 102, 2, 2, 2, 103, 104, 2, 2, 2, 2, 2, 2, 49, 105, 58, 2,
- 2, 2, 2, 2, 106, 107, 108, 2, 2, 2, 109, 5, 75, 110, 111, 7,
- 5, 5, 5, 5, 5, 5, 5, 23, 2, 112, 2, 2, 2, 113, 2, 2,
- 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 5, 5, 5, 5, 13, 2,
- 2, 2, 2, 2, 2, 37, 7, 2, 2, 2, 2, 2, 2, 2, 2, 37,
- 2, 2, 2, 2, 5, 5, 5, 5, 2, 2, 2, 2, 2, 46, 2, 2,
- 2, 2, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 37, 109, 69,
- 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2,
- 115, 116, 2, 2, 117, 2, 2, 2, 118, 2, 2, 2, 2, 2, 106, 119,
- 120, 2, 2, 2, 5, 5, 7, 37, 2, 2, 2, 2, 14, 69, 2, 2,
- 37, 5, 58, 2, 81, 81, 81, 121, 28, 2, 2, 2, 2, 2, 122, 123,
- 124, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 2, 2, 125, 126, 2,
- 116, 127, 2, 2, 2, 2, 2, 128, 2, 2, 2, 2, 2, 2, 129, 130,
- 19, 2, 2, 2, 2, 131, 132, 2, 2, 2, 2, 2, 133, 134, 2, 2,
- 135, 136, 136, 137, 136, 136, 136, 135, 136, 136, 137, 136, 136, 136, 135, 136,
- 136, 137, 136, 136, 136, 135, 136, 136, 137, 136, 136, 136, 135, 136, 136, 137,
- 136, 136, 136, 135, 136, 136, 137, 136, 136, 136, 135, 136, 136, 137, 136, 136,
- 136, 135, 136, 136, 137, 136, 136, 136, 136, 135, 136, 136, 138, 2, 82, 82,
- 139, 140, 83, 83, 83, 83, 83, 141, 2, 2, 2, 38, 2, 2, 2, 2,
- 5, 5, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 142,
- 2, 2, 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 13, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 14, 20, 143, 99, 2, 2, 2, 2, 2, 144,
- 2, 2, 2, 2, 54, 2, 2, 2, 2, 2, 2, 2, 99, 2, 2, 2,
- 14, 5, 13, 2, 2, 2, 2, 2, 145, 2, 2, 2, 2, 2, 2, 5,
- 67, 2, 2, 2, 2, 2, 2, 37, 102, 2, 2, 2, 2, 2, 146, 147,
- 2, 148, 2, 2, 2, 2, 2, 2, 20, 2, 2, 2, 37, 149, 68, 2,
- 150, 2, 2, 2, 2, 2, 116, 2, 102, 2, 2, 2, 2, 2, 151, 72,
- 152, 79, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 153, 154, 38,
- 2, 2, 2, 37, 97, 20, 2, 2, 155, 156, 37, 2, 157, 68, 68, 2,
- 2, 2, 2, 2, 2, 2, 158, 5, 159, 2, 2, 38, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 160, 161, 162, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 37, 163, 164, 13, 2, 2, 165, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 97, 166, 13, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 167, 168, 2, 2, 2, 2, 74, 169, 21, 2, 2,
- 2, 2, 2, 2, 2, 153, 5, 170, 2, 2, 171, 172, 173, 2, 2, 2,
- 8, 20, 2, 2, 2, 2, 6, 174, 37, 2, 125, 92, 2, 2, 2, 2,
- 175, 176, 72, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 177, 67, 168,
- 2, 2, 46, 5, 5, 178, 179, 2, 2, 2, 2, 2, 2, 2, 180, 181,
- 182, 2, 2, 2, 2, 2, 2, 2, 2, 183, 184, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 185, 2, 2, 2, 2, 2, 2, 2, 0, 186,
- 2, 2, 2, 2, 2, 2, 68, 2, 2, 2, 2, 2, 2, 2, 67, 2,
- 2, 37, 187, 119, 119, 119, 119, 119, 119, 37, 20, 2, 2, 2, 2, 2,
- 2, 2, 2, 54, 142, 2, 2, 2, 2, 2, 2, 2, 188, 189, 190, 191,
- 192, 21, 2, 2, 2, 193, 2, 2, 84, 2, 2, 2, 2, 2, 2, 2,
- 5, 5, 5, 5, 5, 5, 67, 6, 5, 5, 5, 5, 5, 68, 22, 2,
- 128, 2, 2, 6, 8, 5, 2, 2, 67, 5, 5, 194, 195, 20, 2, 2,
- 2, 2, 2, 2, 2, 99, 2, 2, 2, 2, 67, 2, 2, 2, 2, 2,
- 99, 20, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 196, 197, 197, 197,
- 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 5, 5, 5, 5,
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_cluster_break_stage_4[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 2, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 4, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
- 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
- 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5,
- 0, 5, 5, 0, 5, 5, 0, 5, 1, 1, 1, 1, 1, 1, 0, 0,
- 5, 5, 5, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 1, 0, 5,
- 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0,
- 0, 5, 5, 5, 0, 0, 0, 0, 5, 5, 1, 5, 5, 5, 5, 5,
- 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 5, 7, 5, 0, 7, 7,
- 7, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 5, 7, 7,
- 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 5, 7, 7, 5, 5, 5, 5, 0, 0, 7,
- 7, 0, 0, 7, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 7, 7, 7, 5, 5, 0, 0, 0, 0, 5,
- 5, 0, 0, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 5, 0, 0,
- 7, 5, 5, 5, 5, 5, 0, 5, 5, 7, 0, 7, 7, 5, 0, 0,
- 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 0, 5, 5,
- 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7,
- 5, 7, 7, 0, 0, 0, 7, 7, 7, 0, 7, 7, 7, 5, 0, 0,
- 5, 7, 7, 7, 5, 0, 0, 0, 5, 7, 7, 7, 7, 0, 5, 5,
- 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 0, 7, 5,
- 7, 7, 5, 7, 7, 0, 5, 7, 7, 0, 7, 7, 5, 5, 0, 0,
- 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5, 7,
- 7, 5, 5, 5, 5, 0, 7, 7, 7, 0, 7, 7, 7, 5, 1, 0,
- 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5,
- 7, 7, 5, 5, 5, 0, 5, 0, 7, 7, 7, 7, 7, 7, 7, 5,
- 0, 5, 0, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
- 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 7, 7,
- 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 0, 5, 5,
- 0, 0, 0, 0, 0, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5,
- 0, 5, 5, 7, 7, 5, 5, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 5, 5, 0, 0, 0, 0, 5, 5, 0, 5, 5, 5, 5, 0, 0, 0,
- 0, 0, 5, 0, 7, 5, 5, 0, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 7, 5,
- 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 5, 7,
- 0, 0, 0, 5, 5, 5, 4, 0, 5, 5, 5, 7, 7, 7, 7, 5,
- 5, 7, 7, 7, 0, 0, 0, 0, 7, 7, 5, 7, 7, 7, 7, 7,
- 7, 5, 5, 5, 0, 0, 0, 0, 5, 7, 7, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 5, 7, 5, 0, 5, 0, 0, 5, 5, 5,
- 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 7, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
- 5, 5, 5, 7, 5, 7, 7, 7, 7, 7, 5, 7, 7, 0, 0, 0,
- 5, 5, 7, 0, 0, 0, 0, 0, 0, 7, 5, 5, 5, 5, 7, 7,
- 5, 5, 7, 5, 5, 5, 0, 0, 5, 5, 7, 7, 7, 5, 7, 5,
- 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5,
- 5, 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5,
- 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 7,
- 0, 0, 0, 4, 5, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
- 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 7, 5, 5, 7,
- 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 5, 5, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0,
- 0, 0, 0, 5, 7, 7, 5, 5, 5, 5, 7, 7, 5, 5, 7, 7,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 7,
- 7, 5, 5, 7, 7, 5, 5, 0, 0, 0, 0, 0, 5, 7, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 5, 5, 5, 0, 0, 5,
- 5, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 7, 5, 5, 7, 7,
- 0, 0, 0, 0, 0, 7, 5, 0, 0, 0, 0, 7, 7, 5, 7, 7,
- 5, 7, 7, 0, 7, 5, 0, 0, 11, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12,
- 12, 12, 12, 12, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0,
- 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
- 4, 4, 4, 4, 0, 0, 0, 0, 0, 5, 5, 5, 0, 5, 5, 0,
- 5, 5, 5, 0, 0, 0, 0, 5, 7, 5, 7, 0, 0, 0, 0, 0,
- 7, 7, 7, 5, 5, 5, 5, 7, 7, 5, 5, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 5, 5, 5, 5, 7, 5, 5, 5,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 7, 7, 7, 5, 5,
- 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 5,
- 5, 5, 7, 7, 5, 7, 5, 5, 5, 7, 7, 7, 7, 0, 0, 7,
- 7, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 5, 5,
- 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 5, 5, 5, 7, 5, 0,
- 5, 7, 7, 5, 5, 5, 5, 5, 5, 7, 5, 7, 7, 5, 7, 5,
- 5, 7, 5, 5, 0, 0, 0, 0, 7, 7, 5, 5, 5, 5, 0, 0,
- 7, 7, 7, 7, 5, 5, 7, 5, 0, 0, 0, 0, 5, 5, 0, 0,
- 5, 5, 5, 7, 7, 5, 7, 5, 0, 0, 0, 5, 7, 5, 7, 7,
- 5, 5, 5, 5, 5, 5, 7, 5, 7, 7, 5, 5, 5, 5, 7, 5,
- 7, 5, 5, 0, 0, 0, 0, 0, 0, 7, 7, 7, 5, 5, 5, 5,
- 0, 0, 5, 5, 7, 7, 7, 7, 5, 0, 0, 0, 7, 0, 0, 0,
- 5, 7, 1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 1, 1, 1, 1,
- 1, 1, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 7, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 7, 5, 5, 0,
- 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 0, 5, 5, 0, 5,
- 5, 5, 5, 5, 5, 5, 1, 5, 0, 0, 7, 7, 7, 7, 7, 0,
- 5, 5, 0, 7, 7, 5, 7, 5, 0, 0, 0, 5, 5, 7, 7, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7,
- 0, 0, 0, 0, 0, 5, 7, 5, 5, 5, 0, 0, 0, 7, 5, 5,
- 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
- 5, 5, 5, 0, 0, 5, 5, 5, 0, 0, 5, 5, 5, 5, 0, 0,
- 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5, 5,
- 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-/* Grapheme_Cluster_Break: 4400 bytes. */
-
-RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_grapheme_cluster_break_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_grapheme_cluster_break_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_grapheme_cluster_break_stage_3[pos + f] << 3;
- value = re_grapheme_cluster_break_stage_4[pos + code];
-
- return value;
-}
-
-/* Sentence_Break. */
-
-static RE_UINT8 re_sentence_break_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 13, 13, 13, 14,
- 15, 16, 17, 18, 19, 13, 20, 13, 21, 13, 13, 13, 13, 22, 7, 7,
- 23, 24, 13, 13, 13, 13, 25, 26, 13, 13, 27, 28, 29, 30, 31, 13,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 32, 7, 33, 34, 7, 35, 7, 7, 7, 36, 13, 37,
+/* Bidi_Class. */
+static RE_UINT8 re_bidi_class_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 17, 18,
+ 19, 13, 20, 21, 22, 23, 24, 25, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 26, 27, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 28,
+ 13, 13, 13, 13, 29, 30, 31, 13, 32, 13, 33, 34, 35, 36, 37, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 38, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-};
-
-static RE_UINT8 re_sentence_break_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 34, 35, 36, 37, 38, 39, 34, 34, 34, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 64, 65, 64, 64, 66, 64, 64, 64, 64, 67, 68,
- 64, 64, 64, 69, 64, 64, 64, 64, 70, 71, 72, 73, 74, 64, 64, 64,
- 75, 76, 77, 78, 64, 64, 64, 64, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 79, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 80,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 81, 34, 34, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 94,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 34, 34, 95, 96, 97, 98, 34, 34, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 64, 109, 110, 111, 112, 113, 114, 64, 34, 34, 115, 64,
- 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 64, 64, 64, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 64, 136, 137, 64, 138, 139, 140, 141, 64,
- 142, 143, 64, 144, 145, 146, 64, 64, 147, 148, 149, 150, 64, 151, 64, 64,
- 34, 34, 34, 34, 34, 34, 34, 152, 153, 34, 154, 64, 64, 64, 64, 64,
- 34, 34, 34, 34, 34, 34, 34, 34, 155, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 34, 34, 34, 34, 156, 64, 64, 64,
- 34, 34, 34, 34, 157, 158, 159, 160, 64, 64, 64, 64, 161, 162, 163, 164,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 165,
- 34, 34, 34, 34, 34, 166, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 34, 34, 167, 34, 34, 168, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 169, 170, 64, 64, 64, 64, 64, 64,
- 64, 64, 171, 172, 173, 64, 64, 64, 174, 175, 176, 177, 178, 179, 180, 181,
- 64, 64, 64, 64, 182, 183, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 184, 64, 185, 64, 64, 186, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 34, 187, 188, 64, 64, 64, 64, 64, 64, 64, 64, 64, 189, 190, 64, 64,
- 64, 64, 191, 192, 64, 64, 64, 64, 64, 64, 64, 64, 193, 64, 64, 64,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 194, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 195, 34,
- 196, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 197, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 198, 64, 64, 64, 64, 64, 64, 64, 64,
- 34, 34, 34, 34, 199, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 200, 64, 201, 202, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-};
-
-static RE_UINT8 re_sentence_break_stage_3[] = {
- 0, 0, 1, 2, 0, 0, 0, 0, 3, 4, 5, 6, 7, 7, 8, 9,
- 10, 11, 11, 11, 11, 11, 12, 13, 14, 15, 15, 15, 15, 15, 16, 13,
- 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 19, 20, 0, 21, 19, 0,
- 11, 11, 11, 11, 11, 22, 11, 23, 15, 15, 15, 15, 15, 24, 15, 15,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26,
- 26, 26, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 28, 29,
- 30, 31, 32, 33, 28, 31, 34, 28, 25, 31, 29, 31, 32, 26, 35, 34,
- 36, 28, 31, 26, 26, 26, 26, 27, 25, 25, 25, 25, 30, 31, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 15, 33, 30,
- 26, 23, 25, 25, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 37, 15, 15, 15, 15, 15, 15, 15, 15, 38, 36,
- 39, 40, 36, 36, 41, 0, 0, 0, 15, 42, 0, 43, 0, 0, 0, 0,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 25, 45, 46, 47,
- 0, 48, 22, 49, 32, 11, 11, 11, 50, 11, 11, 15, 15, 15, 15, 15,
- 15, 15, 15, 51, 33, 34, 25, 25, 25, 25, 25, 25, 15, 52, 30, 32,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 25, 25, 25, 25, 25, 25, 25, 25,
- 53, 44, 54, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 28, 26, 26, 29, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 10, 11, 11, 11,
- 11, 11, 11, 11, 11, 22, 55, 56, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 57, 0, 58, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 59,
- 60, 59, 0, 0, 36, 36, 36, 36, 36, 36, 61, 62, 36, 0, 0, 0,
- 63, 64, 0, 65, 44, 44, 66, 67, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 68, 44, 44, 44, 44, 44, 7, 7, 69, 70, 71, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 72, 44, 73, 44, 74, 75, 76, 7, 7, 77, 78,
- 79, 0, 0, 80, 81, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44,
- 44, 44, 66, 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 44, 44, 84, 0, 0, 0,
- 7, 7, 77, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 41, 85, 86,
- 36, 36, 36, 36, 36, 83, 87, 44, 44, 88, 88, 89, 0, 9, 90, 91,
- 36, 36, 36, 36, 36, 36, 88, 0, 36, 36, 61, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, 92, 36, 41,
- 0, 0, 0, 0, 93, 44, 44, 44, 94, 44, 44, 44, 44, 44, 44, 44,
- 44, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 95,
- 44, 44, 44, 44, 88, 44, 36, 36, 83, 96, 7, 7, 82, 36, 36, 36,
- 88, 82, 36, 78, 78, 36, 36, 36, 36, 36, 92, 36, 43, 40, 41, 95,
- 44, 97, 97, 98, 0, 93, 0, 99, 83, 100, 7, 7, 41, 0, 0, 101,
- 58, 82, 61, 62, 78, 36, 36, 36, 36, 36, 92, 36, 92, 102, 41, 75,
- 66, 93, 97, 89, 86, 0, 82, 43, 0, 100, 7, 7, 76, 103, 0, 0,
- 58, 82, 36, 99, 99, 36, 36, 36, 36, 36, 92, 36, 92, 82, 41, 95,
- 44, 59, 59, 89, 104, 0, 0, 0, 83, 100, 7, 7, 0, 0, 105, 44,
- 58, 82, 36, 78, 78, 36, 36, 36, 36, 36, 92, 36, 92, 82, 41, 95,
- 44, 97, 97, 89, 0, 106, 0, 99, 83, 100, 7, 7, 55, 0, 0, 0,
- 107, 82, 61, 40, 92, 41, 102, 92, 62, 104, 61, 40, 36, 36, 41, 106,
- 66, 106, 75, 89, 104, 93, 0, 0, 0, 100, 7, 7, 0, 0, 0, 0,
- 44, 71, 36, 92, 92, 36, 36, 36, 36, 36, 92, 36, 36, 36, 41, 105,
- 44, 75, 75, 89, 0, 60, 61, 0, 83, 100, 7, 7, 0, 0, 0, 0,
- 88, 82, 36, 92, 92, 36, 36, 36, 36, 36, 92, 36, 36, 82, 41, 95,
- 44, 75, 75, 89, 0, 60, 0, 108, 83, 100, 7, 7, 102, 0, 0, 0,
- 44, 82, 36, 92, 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 95,
- 44, 75, 75, 98, 0, 68, 0, 62, 83, 100, 7, 7, 0, 0, 40, 36,
- 106, 82, 36, 36, 36, 61, 40, 36, 36, 36, 36, 36, 99, 36, 36, 55,
- 36, 61, 109, 93, 44, 110, 44, 44, 0, 100, 7, 7, 106, 0, 0, 0,
- 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 81, 44, 66, 0,
- 36, 68, 44, 66, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 102, 92, 61, 36, 36, 36, 36, 36, 36, 112, 36, 36, 81, 44, 44, 84,
- 36, 43, 44, 89, 7, 7, 111, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 104, 0, 0, 0, 0, 0, 89, 0, 7, 7, 111, 0, 0, 113, 114, 115,
- 36, 36, 82, 36, 36, 36, 36, 36, 36, 36, 36, 104, 58, 44, 44, 44,
- 44, 75, 36, 88, 44, 44, 58, 44, 44, 44, 44, 44, 44, 44, 44, 116,
- 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44, 44, 117,
- 7, 7, 118, 0, 36, 83, 76, 83, 95, 74, 44, 76, 88, 71, 36, 36,
- 83, 44, 44, 87, 7, 7, 119, 89, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 50, 0, 120, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 92, 41, 36, 61, 92, 41, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 92, 41, 36, 36, 36, 36, 36, 36, 36, 36, 92, 41, 36, 61,
- 92, 41, 36, 36, 36, 61, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 92, 41, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 61, 58, 121, 9, 122, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 123, 15, 39,
- 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 124, 36, 36, 36, 36,
- 125, 36, 36, 36, 36, 36, 126, 127, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 40, 36, 36, 104, 0,
- 36, 36, 36, 92, 83, 116, 0, 0, 36, 36, 36, 36, 83, 128, 0, 0,
- 36, 36, 36, 36, 83, 0, 0, 0, 36, 36, 36, 92, 129, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44,
- 44, 44, 44, 44, 44, 62, 0, 103, 7, 7, 111, 0, 0, 0, 0, 0,
- 130, 0, 131, 132, 7, 7, 111, 0, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0,
- 36, 133, 36, 36, 36, 36, 36, 36, 36, 36, 134, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 44, 44, 44, 0, 44, 44, 44, 0,
- 0, 96, 7, 7, 36, 36, 36, 36, 36, 36, 36, 41, 36, 104, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36,
- 36, 36, 41, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 68, 44, 0, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 88, 44, 66, 44, 44, 44, 44, 44, 44, 44, 97,
- 7, 7, 111, 0, 7, 7, 111, 0, 0, 62, 135, 0, 44, 44, 44, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 44, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44,
- 44, 71, 36, 0, 7, 7, 118, 136, 0, 0, 93, 44, 44, 0, 0, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 88, 44, 44, 76, 7, 7, 77, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 44, 44, 44, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44, 44, 9, 122,
- 7, 7, 111, 82, 7, 7, 77, 36, 36, 36, 36, 36, 36, 36, 36, 137,
- 15, 15, 42, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 82,
- 0, 0, 0, 0, 66, 44, 44, 44, 44, 44, 71, 81, 36, 74, 98, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 59, 44,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 34, 15, 27, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 15, 15, 11, 11, 15, 39, 11, 123, 15, 15, 11, 11, 15, 15, 11, 11,
- 15, 39, 11, 123, 15, 15, 138, 138, 15, 15, 11, 11, 15, 15, 15, 39,
- 15, 15, 11, 11, 15, 15, 11, 11, 15, 15, 11, 11, 15, 139, 11, 140,
- 46, 139, 11, 141, 15, 46, 11, 0, 15, 15, 11, 141, 46, 139, 11, 141,
- 142, 142, 143, 144, 145, 146, 147, 147, 0, 148, 149, 150, 0, 0, 151, 152,
- 0, 153, 152, 0, 0, 0, 0, 154, 63, 155, 63, 63, 21, 0, 0, 156,
- 0, 0, 0, 151, 15, 15, 15, 42, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 116, 0, 0, 0,
- 48, 157, 158, 159, 23, 120, 10, 123, 0, 160, 49, 161, 11, 38, 162, 33,
- 0, 163, 39, 164, 0, 0, 0, 0, 11, 11, 11, 11, 15, 15, 15, 15,
- 165, 38, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 11, 11,
- 11, 11, 11, 11, 15, 15, 15, 15, 15, 15, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 147, 127, 0, 147, 147, 147, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 151, 0, 0, 0, 0, 0, 0, 0, 167, 147, 147, 0, 0, 0, 0,
- 4, 147, 147, 147, 147, 147, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 22, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 24, 31, 168, 26, 32, 25, 29, 15, 33,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 42, 157, 169, 54, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 170, 0, 21, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 62, 0, 0, 0, 93,
- 36, 36, 36, 36, 36, 61, 0, 0, 36, 61, 36, 61, 36, 61, 36, 61,
- 36, 61, 36, 61, 36, 61, 36, 61, 44, 44, 44, 44, 44, 44, 44, 44,
- 147, 147, 147, 5, 0, 0, 0, 5, 147, 147, 5, 171, 0, 0, 0, 122,
- 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 173, 82, 147, 147, 5, 147, 147, 174, 82, 36, 83, 44, 82, 41, 36, 104,
- 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 61, 60, 82, 82, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 36,
- 0, 82, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 82, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 61, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 61, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0,
- 36, 36, 36, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 175,
- 36, 36, 36, 176, 36, 36, 36, 36, 7, 7, 77, 0, 0, 0, 0, 0,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 177, 66, 44, 44, 178,
- 25, 25, 25, 25, 25, 25, 25, 179, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 180, 9, 0, 0,
- 0, 0, 0, 0, 0, 62, 36, 36, 181, 25, 25, 25, 27, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 15, 15, 26, 30,
- 25, 25, 182, 183, 25, 27, 25, 25, 25, 25, 31, 23, 11, 25, 25, 25,
- 181, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 184, 36,
- 185, 185, 68, 36, 36, 36, 36, 36, 68, 44, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 136, 0, 0,
- 76, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44,
- 44, 89, 0, 136, 7, 7, 111, 0, 44, 44, 44, 44, 76, 36, 62, 186,
- 7, 7, 77, 36, 36, 36, 36, 36, 36, 83, 44, 180, 36, 36, 36, 36,
- 36, 68, 44, 44, 44, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 104,
- 44, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44,
- 116, 0, 152, 62, 7, 7, 111, 0, 36, 81, 36, 36, 7, 7, 77, 61,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 88, 44, 44, 66, 0, 0,
- 68, 36, 36, 89, 7, 7, 111, 187, 36, 36, 36, 36, 36, 61, 188, 76,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 95, 74, 71, 83,
- 134, 0, 0, 0, 0, 0, 62, 41, 36, 36, 68, 44, 189, 190, 0, 0,
- 82, 61, 82, 61, 82, 61, 0, 0, 36, 61, 36, 61, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 24, 15, 15, 15, 0, 0, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 191, 89, 7, 7, 111, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 36, 36, 36, 36,
- 36, 61, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 24, 0, 0, 192, 15, 0, 193, 36, 36, 92, 36, 36, 61, 36, 43,
- 99, 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0, 0,
- 0, 0, 0, 0, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 194,
- 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 40, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0,
- 44, 44, 44, 44, 195, 4, 127, 0, 44, 44, 44, 44, 196, 174, 147, 147,
- 147, 197, 127, 0, 6, 198, 199, 200, 145, 0, 0, 0, 36, 92, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 201,
- 90, 0, 5, 6, 7, 7, 8, 9, 10, 11, 11, 11, 11, 11, 12, 13,
- 14, 15, 15, 15, 15, 15, 16, 202, 203, 204, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 83, 36, 36, 36, 36, 36, 36, 36, 61,
- 40, 36, 40, 36, 40, 36, 40, 104, 0, 0, 0, 0, 0, 0, 205, 0,
- 36, 36, 36, 82, 36, 36, 36, 36, 36, 61, 36, 36, 36, 36, 61, 99,
- 36, 36, 36, 41, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
- 36, 36, 36, 36, 36, 36, 36, 104, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 104, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 82, 36, 36, 36, 36,
- 36, 36, 61, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 83, 66, 0,
- 36, 36, 36, 36, 36, 36, 36, 41, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 0, 36, 36, 82, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 41, 7, 7, 111, 0, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 0,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 0, 0, 0, 0, 0, 0,
- 36, 41, 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 99, 104, 78,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 36, 36, 36, 61, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 61, 41, 0, 0,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 36, 36, 36, 36, 41, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 40,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 60, 0, 44, 36, 82, 82, 36, 36, 36, 36, 36, 36, 41, 66, 93,
- 0, 0, 0, 0, 0, 136, 0, 0, 36, 36, 36, 36, 36, 36, 36, 104,
- 36, 36, 36, 36, 36, 36, 36, 104, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 82, 36, 36, 36, 36, 36, 36, 190, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0,
- 36, 36, 36, 36, 36, 41, 0, 0, 36, 36, 36, 36, 61, 0, 0, 0,
- 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 22, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 0, 0, 7, 7, 111, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 104, 0, 62, 0, 0, 36, 36, 36, 36,
- 36, 83, 44, 44, 116, 187, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, 61, 0, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44,
- 44, 191, 122, 0, 0, 0, 0, 0, 0, 100, 7, 7, 0, 0, 0, 93,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 66, 206,
- 152, 0, 0, 20, 36, 36, 36, 36, 36, 36, 104, 0, 7, 7, 111, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44, 207, 7, 7,
- 187, 190, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, 68, 108, 0, 0,
- 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44,
- 71, 208, 58, 209, 7, 7, 210, 176, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 99, 36, 36, 36, 36, 36, 36, 44, 44, 44, 211, 212,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 61, 92, 99, 36, 36, 36, 99, 36, 36, 213, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 66, 0, 7, 7, 111, 0,
- 44, 82, 36, 78, 78, 36, 36, 36, 36, 36, 92, 36, 92, 82, 214, 95,
- 44, 97, 97, 89, 104, 93, 0, 82, 83, 106, 44, 116, 44, 116, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 88, 44, 44,
- 44, 117, 215, 122, 7, 7, 111, 107, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44,
- 44, 99, 0, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 89, 44, 44,
- 216, 0, 187, 135, 135, 135, 36, 89, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 44,
- 128, 104, 0, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 44, 44, 104, 0,
- 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 61, 58, 44, 44, 44, 0, 7, 7, 111, 79,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 44, 66, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
- 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 111, 0, 0, 0, 0, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 40, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 88, 44, 106, 44, 217, 116, 0, 0, 0, 0, 0, 0,
- 88, 44, 117, 36, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 87, 66,
- 136, 93, 0, 0, 88, 44, 44, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 83, 44, 44, 44, 180, 218, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0,
- 36, 36, 92, 36, 36, 36, 36, 36, 36, 36, 36, 68, 44, 66, 44, 44,
- 208, 0, 0, 0, 7, 7, 111, 0, 0, 0, 0, 0, 40, 36, 36, 36,
- 36, 36, 36, 36, 106, 44, 44, 44, 44, 44, 58, 44, 44, 66, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 61, 99, 36, 36, 36, 36, 36, 36, 36, 36, 36, 88, 66, 109, 59,
- 44, 87, 0, 0, 7, 7, 111, 0, 36, 99, 92, 36, 36, 36, 36, 36,
- 36, 36, 83, 66, 59, 44, 104, 0, 7, 7, 111, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 68, 191, 122, 0,
- 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 63, 63, 219, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 39, 40, 40, 40, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38
+};
+
+static RE_UINT16 re_bidi_class_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 8, 9, 10, 11, 11, 11, 12, 13, 7, 7, 14,
+ 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 7, 7, 16, 17, 18, 19,
+ 20, 21, 22, 23, 21, 21, 24, 25, 26, 27, 28, 21, 21, 29, 19, 30,
+ 31, 32, 33, 34, 19, 21, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 42, 46, 47, 45, 42, 48, 49, 41, 50, 51, 40, 52, 7, 53, 54,
+ 55, 56, 57, 58, 41, 42, 59, 40, 60, 61, 43, 40, 41, 7, 62, 7,
+ 7, 63, 64, 7, 7, 65, 66, 7, 67, 68, 7, 69, 70, 71, 72, 7,
+ 7, 73, 74, 75, 76, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 77, 7, 78, 7, 7, 7,
+ 79, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 80, 7, 7, 7, 81, 81, 82, 82, 7, 83, 84, 78,
+ 85, 7, 7, 7, 86, 87, 7, 7, 7, 88, 89, 7, 7, 7, 90, 91,
+ 92, 7, 93, 94, 7, 95, 96, 7, 97, 98, 52, 99, 60, 100, 7, 101,
+ 7, 102, 7, 7, 7, 7, 103, 104, 7, 7, 7, 7, 7, 7, 11, 105,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 106, 107, 108,
+ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 7, 120, 91, 91, 91,
+ 121, 91, 91, 91, 91, 91, 91, 91, 91, 122, 7, 123, 124, 91, 91, 91,
+ 91, 125, 126, 91, 127, 7, 7, 128, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 129, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 7, 7, 7, 7, 7, 7, 7, 7, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 130, 131, 91, 91, 91,
+ 7, 7, 7, 7, 7, 7, 7, 132, 7, 7, 7, 133, 7, 7, 7, 11,
+ 91, 91, 134, 7, 135, 91, 91, 136, 91, 91, 91, 91, 91, 91, 122, 137,
+ 138, 139, 7, 7, 140, 79, 7, 141, 7, 7, 7, 7, 7, 7, 91, 142,
+ 143, 7, 144, 145, 7, 146, 147, 7, 7, 7, 7, 148, 7, 7, 90, 149,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 91, 91,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 144, 91, 125, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 150, 7, 7, 151, 56, 7, 7, 152, 91, 153, 7, 7, 154, 7, 7, 7,
+ 155, 156, 7, 157, 7, 7, 158, 159, 7, 160, 161, 7, 37, 162, 7, 163,
+ 7, 164, 165, 42, 7, 166, 41, 167, 7, 7, 7, 168, 7, 7, 7, 169,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 170, 171, 172, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 173, 21, 21, 21, 21, 174, 175,
+ 176, 177, 178, 179, 21, 21, 21, 180, 181, 2, 2, 182, 7, 7, 7, 183,
+ 7, 7, 7, 7, 7, 7, 7, 7, 184, 7, 91, 91, 185, 79, 7, 186,
+ 7, 7, 7, 7, 7, 7, 7, 187, 7, 7, 7, 188, 7, 7, 7, 7,
+ 19, 19, 19, 19, 19, 19, 19, 19, 189, 19, 19, 19, 19, 19, 19, 19,
+ 190, 191, 19, 19, 19, 19, 19, 192, 19, 193, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 21, 194, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 195, 19, 196, 19, 19, 19, 172, 29, 34, 19, 19, 19, 19,
+ 41, 197, 198, 199, 60, 200, 7, 7, 37, 201, 7, 202, 60, 203, 204, 7,
+ 7, 205, 7, 7, 7, 7, 133, 206, 60, 61, 96, 207, 7, 7, 7, 7,
+ 7, 197, 208, 7, 7, 209, 210, 7, 7, 7, 7, 7, 7, 211, 212, 7,
+ 7, 213, 96, 214, 7, 215, 7, 7, 77, 216, 7, 7, 7, 7, 7, 7,
+ 7, 217, 7, 7, 7, 7, 7, 7, 7, 218, 219, 7, 7, 7, 220, 96,
+ 221, 222, 223, 7, 224, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 225, 7, 7, 226, 227, 7, 7, 7, 228, 229, 7, 230, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 231, 7, 7, 7, 7, 7, 7, 232, 233,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 234, 7, 235, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 236, 7, 237, 7, 7, 238,
+ 7, 7, 7, 7, 239, 240, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 241, 242, 243, 7, 7,
+ 91, 91, 244, 7, 7, 7, 7, 7, 91, 91, 245, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 141, 7, 246, 7, 247, 7, 248, 7, 249, 250,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 11, 251, 11, 252, 253, 254, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 255, 256, 7, 7, 7, 7, 7, 7, 7, 235, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 257, 7, 7, 7, 7, 7, 7, 7, 7,
+ 19, 19, 19, 19, 19, 19, 258, 19, 19, 19, 259, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 172, 21, 21, 19, 19, 21, 21, 34, 19, 19, 19, 19, 19,
+ 21, 21, 21, 21, 21, 21, 21, 260, 19, 19, 19, 19, 19, 19, 19, 19,
+ 91, 261, 91, 91, 136, 262, 263, 122, 264, 247, 7, 265, 7, 266, 7, 7,
+ 7, 7, 7, 182, 7, 7, 7, 7, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 267, 185, 91, 91, 91, 136, 91, 91, 268, 269,
+ 261, 91, 270, 91, 271, 272, 7, 7, 91, 91, 91, 273, 91, 91, 129, 91,
+ 91, 91, 136, 274, 275, 276, 277, 7, 91, 91, 91, 91, 278, 91, 126, 279,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 280,
+ 281, 281, 281, 281, 281, 281, 281, 281, 11, 11, 11, 11, 11, 11, 11, 282,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281
+};
+
+static RE_UINT8 re_bidi_class_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2,
+ 4, 5, 5, 6, 6, 6, 5, 5, 5, 5, 5, 7, 8, 7, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 1,
+ 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 8, 5, 6, 6, 6, 6, 5, 5, 5, 5, 0, 5, 5, 1, 5, 5,
+ 6, 6, 9, 9, 5, 0, 5, 5, 5, 9, 0, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 6,
+ 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 10,
+ 11, 10, 10, 11, 10, 10, 11, 10, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 12, 12, 12, 12, 12, 12, 5, 5, 13, 6, 6, 13, 8, 13, 5, 5,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 12, 12, 13, 13, 13,
+ 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 12, 5, 10,
+ 10, 10, 10, 10, 10, 13, 13, 10, 10, 5, 10, 10, 10, 10, 13, 13,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 11, 11, 5, 5, 5, 5, 11, 11, 11, 10, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 11, 10, 10, 10, 11, 10, 10, 10, 10, 10, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 12, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 0,
+ 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 0, 0, 0, 0, 10, 10, 0, 0, 10, 10, 10, 0, 0,
+ 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10,
+ 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 5, 5, 5, 5, 5, 6, 5, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10,
+ 10, 0, 0, 0, 0, 0, 10, 10, 10, 0, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 10, 0, 10, 5, 5, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10,
+ 10, 0, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 10, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 6, 0, 10, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0,
+ 5, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0,
+ 10, 0, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 0, 0, 0, 10, 0, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 0, 11,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 14, 15, 16, 17, 18, 8,
+ 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,
+ 1, 1, 1, 1, 1, 1, 19, 20, 21, 22, 1, 1, 1, 1, 1, 1,
+ 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 7, 7, 5, 5, 5, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 7, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 5, 5, 5, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5,
+ 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 7, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+ 4, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0,
+ 5, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 10, 5, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 10, 0, 5, 5, 5, 5, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 0,
+ 0, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 7, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 5,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 8, 5, 8, 0, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6,
+ 5, 5, 7, 7, 5, 5, 5, 0, 5, 6, 6, 5, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1,
+ 0, 5, 5, 6, 6, 6, 5, 5, 5, 5, 5, 7, 8, 7, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 5, 5, 5, 6, 6, 0, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 1, 1,
+ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5,
+ 11, 10, 10, 10, 11, 10, 10, 11, 11, 11, 11, 11, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 11, 11, 11, 11, 10,
+ 11, 11, 11, 11, 11, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 5, 5, 5, 5, 5,
+ 13, 13, 13, 13, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 0, 0, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 10, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 10,
+ 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 10, 10, 0, 10,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 0, 10,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 0, 0,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 10, 0,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10,
+ 10, 0, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 10, 0, 10, 10, 0, 10,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
+ 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 10, 10, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10,
+ 10, 10, 0, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 5, 5, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+RE_UINT32 re_get_bidi_class(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_bidi_class_table_1[field_2];
+ v = re_bidi_class_table_2[(v << 5) | field_1];
+ v = re_bidi_class_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Bidi_Control. */
+RE_UINT32 re_get_bidi_control(RE_UINT32 codepoint) {
+ if (codepoint == 0x061C)
+ return 1;
+ if (0x200E <= codepoint && codepoint <= 0x200F)
+ return 1;
+ if (0x202A <= codepoint && codepoint <= 0x202E)
+ return 1;
+ if (0x2066 <= codepoint && codepoint <= 0x2069)
+ return 1;
+
+ return 0;
+}
+
+/* Bidi_Mirrored. */
+static RE_UINT8 re_bidi_mirrored_table_1[] = {
+ 0, 1, 1, 2, 1, 3, 1, 1, 4, 5, 6, 7, 8, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_bidi_mirrored_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, 0, 36,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40, 41, 0, 0, 0, 0, 1, 2, 42, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0
+};
+
+static RE_UINT8 re_bidi_mirrored_table_3[] = {
+ 0, 0, 0, 0, 0, 3, 0, 80, 0, 0, 0, 40, 0, 8, 0, 8,
+ 0, 0, 0, 60, 0, 0, 0, 24, 0, 0, 0, 6, 96, 0, 0, 0,
+ 0, 0, 0, 96, 0, 96, 0, 0, 1, 0, 0, 0, 30, 63, 98, 188,
+ 87, 248, 15, 250, 255, 31, 60, 128, 245, 207, 255, 255, 255, 159, 7, 1,
+ 204, 255, 255, 193, 0, 62, 195, 255, 255, 63, 255, 255, 0, 15, 0, 0,
+ 3, 6, 0, 0, 0, 255, 63, 0, 121, 59, 120, 112, 252, 255, 0, 0,
+ 248, 255, 255, 249, 253, 255, 0, 1, 63, 194, 55, 31, 58, 3, 240, 51,
+ 0, 252, 255, 223, 83, 122, 48, 112, 0, 0, 128, 1, 48, 188, 25, 254,
+ 255, 255, 255, 255, 207, 191, 255, 255, 255, 255, 127, 80, 124, 112, 136, 47,
+ 0, 0, 0, 64, 60, 54, 0, 48, 255, 3, 0, 0, 0, 255, 243, 15,
+ 0, 0, 0, 126, 48, 0, 0, 0, 0, 0, 0, 168, 13, 0, 0, 0,
+ 0, 0, 0, 8, 0, 0, 32, 0, 0, 128, 0, 0, 0, 2, 0, 0,
+ 8, 0, 0, 0
+};
+
+RE_UINT32 re_get_bidi_mirrored(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_bidi_mirrored_table_1[field_2];
+ v = re_bidi_mirrored_table_2[(v << 5) | field_1];
+ v = re_bidi_mirrored_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Blank. */
+RE_UINT32 re_get_blank(RE_UINT32 codepoint) {
+ if (codepoint == 0x09)
+ return 1;
+ if (codepoint == 0x20)
+ return 1;
+ if (codepoint == 0xA0)
+ return 1;
+ if (codepoint == 0x1680)
+ return 1;
+ if (0x2000 <= codepoint && codepoint <= 0x200A)
+ return 1;
+ if (codepoint == 0x202F)
+ return 1;
+ if (codepoint == 0x205F)
+ return 1;
+ if (codepoint == 0x3000)
+ return 1;
+
+ return 0;
+}
+
+/* Block. */
+static RE_UINT8 re_block_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 16, 17, 18, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38, 36, 36,
+ 36, 39, 36, 36, 36, 36, 36, 36, 36, 36, 40, 41, 42, 42, 42, 42,
+ 42, 42, 43, 44, 36, 36, 36, 36, 36, 36, 36, 36, 45, 36, 36, 46,
+ 36, 36, 36, 36, 47, 48, 49, 36, 50, 36, 51, 52, 53, 54, 55, 36,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 58, 58, 58, 59, 60, 61,
+ 61, 61, 61, 62, 63, 63, 63, 63, 63, 63, 64, 36, 36, 36, 65, 36,
+ 66, 66, 66, 66, 67, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 68, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70
+};
+
+static RE_UINT16 re_block_table_2[] = {
+ 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
+ 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 14, 15, 16, 16, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22,
+ 23, 23, 24, 25, 26, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29,
+ 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33,
+ 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
+ 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40,
+ 41, 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 46, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 48, 49, 49, 49, 50, 51, 52, 53, 54, 54, 54, 54,
+ 55, 55, 55, 55, 55, 56, 57, 57, 58, 58, 59, 60, 61, 61, 61, 62,
+ 63, 64, 64, 64, 64, 65, 66, 66, 67, 67, 67, 67, 68, 68, 69, 69,
+ 70, 70, 71, 72, 73, 74, 75, 76, 77, 77, 77, 77, 78, 78, 79, 79,
+ 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 83, 84, 85, 86, 87, 88, 88, 89, 90, 91, 92, 92, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 99, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 104,
+ 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 107,
+ 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109,
+ 110, 110, 110, 111, 112, 112, 112, 112, 113, 114, 115, 115, 116, 116, 116, 117,
+ 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 121,
+ 122, 122, 123, 123, 123, 124, 124, 124, 125, 126, 127, 127, 128, 129, 130, 131,
+ 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 138, 139, 140, 141, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 143, 143, 143, 144, 144, 144, 145, 146, 146, 146, 146, 146, 146, 146,
+ 147, 148, 149, 149, 150, 150, 150, 151, 152, 153, 154, 155, 156, 156, 156, 157,
+ 158, 158, 158, 159, 160, 160, 160, 161, 162, 163, 164, 165, 166, 166, 167, 167,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 170, 170,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 177, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 179, 180, 181, 182, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 185,
+ 186, 186, 186, 186, 187, 187, 187, 187, 188, 188, 189, 189, 190, 191, 192, 193,
+ 26, 26, 26, 26, 194, 195, 195, 196, 197, 198, 199, 200, 201, 202, 202, 26,
+ 203, 203, 204, 205, 206, 207, 208, 208, 209, 210, 211, 212, 26, 26, 26, 26,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 26, 26, 26, 26,
+ 214, 214, 215, 216, 217, 218, 26, 219, 220, 221, 26, 26, 222, 223, 223, 223,
+ 224, 224, 224, 225, 226, 26, 227, 227, 228, 228, 229, 230, 231, 232, 26, 26,
+ 233, 233, 234, 26, 235, 235, 235, 235, 236, 236, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 237, 238, 238, 26, 26, 239, 240, 241, 242, 26, 243, 244, 245,
+ 246, 246, 246, 246, 247, 247, 248, 249, 250, 250, 251, 252, 253, 253, 253, 254,
+ 255, 255, 256, 26, 257, 258, 259, 259, 260, 260, 260, 260, 26, 26, 26, 26,
+ 261, 261, 261, 261, 262, 262, 262, 26, 26, 26, 26, 26, 263, 263, 263, 263,
+ 264, 264, 264, 265, 266, 266, 267, 26, 268, 268, 26, 26, 26, 26, 26, 26,
+ 269, 269, 270, 26, 26, 271, 271, 271, 272, 272, 272, 26, 26, 273, 273, 273,
+ 274, 274, 275, 276, 276, 277, 278, 278, 26, 26, 26, 26, 26, 26, 26, 26,
+ 279, 279, 279, 280, 281, 281, 26, 26, 282, 282, 282, 283, 283, 284, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 285, 26, 26, 26, 26, 26, 286, 287, 287,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 289, 289, 289, 289, 290, 290, 290, 290, 290, 290, 291, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 293, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
+ 294, 294, 294, 294, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 296, 297, 26, 26, 298, 299, 300, 300, 300, 300, 301, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 302, 302, 302, 26, 26, 26, 303, 303, 303, 303, 303, 26, 26, 304,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 306, 306, 306, 306, 306, 306, 306, 306, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 308, 308, 308, 308, 309, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 310, 310, 310, 310, 310, 310, 310, 310, 311, 312, 313, 314, 315, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315, 26, 26, 26, 26, 26, 26, 26, 26,
+ 316, 316, 316, 316, 316, 317, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 318, 318, 318, 318, 318, 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, 319,
+ 320, 320, 321, 26, 26, 26, 26, 322, 323, 323, 323, 324, 26, 26, 26, 26,
+ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ 326, 326, 326, 326, 326, 327, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 328, 329, 26, 26, 26, 26, 26, 26, 330, 330, 331, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 332, 332, 26, 26, 26, 26, 26, 26, 26, 26,
+ 333, 333, 333, 333, 333, 333, 333, 26, 334, 334, 334, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 335, 336, 336, 26, 26, 337, 337, 338, 26, 26, 26, 26, 26,
+ 339, 339, 339, 339, 339, 339, 339, 339, 26, 26, 26, 26, 26, 26, 26, 26,
+ 340, 341, 342, 342, 342, 343, 343, 343, 344, 344, 344, 344, 344, 344, 344, 344,
+ 345, 345, 345, 345, 345, 345, 345, 345, 346, 346, 346, 346, 346, 346, 346, 346,
+ 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346,
+ 347, 347, 348, 349, 350, 350, 350, 350, 351, 351, 351, 351, 352, 352, 352, 352,
+ 353, 353, 353, 353, 353, 353, 353, 353, 354, 354, 354, 354, 354, 354, 354, 354,
+ 355, 355, 355, 356, 357, 357, 357, 357, 358, 358, 358, 358, 358, 358, 358, 358,
+ 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 26, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, 361, 361,
+ 361, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 363, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 365,
+ 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
+ 366, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
+ 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 368, 26, 26, 26, 26, 26,
+ 369, 369, 369, 369, 26, 26, 26, 26, 370, 370, 370, 370, 370, 370, 370, 371,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
+ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
+ 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373,
+ 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373
+};
+
+static RE_UINT16 re_block_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 7, 7, 111, 136, 0, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+ 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+ 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
+ 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
+ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
+ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
+ 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
+ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
+ 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
+ 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
+ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
+ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
+ 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
+ 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
+ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
+ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
+ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
+ 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
+ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260,
+ 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
+ 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
+ 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
+ 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
+ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
+ 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285,
+ 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285,
+ 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
+ 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
+ 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
+ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293,
+ 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
+ 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
+ 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
+ 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
+ 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
+ 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307,
+ 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308,
+ 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308
+};
+
+RE_UINT32 re_get_block(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_block_table_1[field_2];
+ v = re_block_table_2[(v << 5) | field_1];
+ v = re_block_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Canonical_Combining_Class. */
+static RE_UINT8 re_canonical_combining_class_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15,
+ 16, 9, 17, 18, 19, 20, 21, 22, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25,
+ 9, 9, 9, 9, 26, 9, 9, 9, 27, 9, 28, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_canonical_combining_class_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0,
+ 9, 0, 10, 11, 0, 0, 12, 13, 14, 15, 16, 0, 0, 0, 0, 17,
+ 18, 19, 20, 0, 0, 0, 21, 22, 0, 23, 24, 0, 0, 23, 25, 26,
+ 0, 23, 25, 0, 0, 23, 25, 0, 0, 23, 25, 0, 0, 0, 25, 0,
+ 0, 0, 27, 0, 0, 23, 25, 0, 0, 28, 25, 0, 0, 0, 29, 0,
+ 0, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 36, 37, 0, 38, 0,
+ 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 0, 0, 0, 0, 43, 0,
+ 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
+ 46, 0, 0, 47, 0, 48, 49, 0, 0, 50, 51, 52, 0, 53, 0, 54,
+ 0, 55, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 58, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
+ 70, 71, 0, 0, 0, 0, 51, 72, 0, 73, 74, 0, 0, 75, 76, 0,
+ 0, 0, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
+ 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 83, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0,
+ 0, 0, 70, 63, 0, 90, 0, 0, 91, 92, 0, 75, 0, 0, 93, 0,
+ 0, 94, 0, 0, 0, 0, 0, 95, 0, 96, 25, 97, 0, 0, 0, 0,
+ 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 63, 100, 0,
+ 0, 63, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
+ 0, 90, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 76,
+ 0, 42, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111,
+ 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 0, 0,
+ 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 118, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_canonical_combining_class_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 4, 3, 3, 3, 3,
+ 3, 5, 5, 3, 3, 3, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 6, 6, 6, 6, 6, 3, 3, 3, 3, 1, 1, 1,
+ 1, 1, 1, 1, 1, 7, 1, 3, 3, 3, 1, 1, 1, 3, 3, 0,
+ 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 3, 1, 8, 9, 9, 8,
+ 9, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 1, 1, 1, 1, 3, 1, 1, 1, 10, 3, 1, 1, 1, 1,
+ 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 1, 1, 10, 11, 1,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24, 0, 25,
+ 0, 26, 27, 0, 1, 3, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 28, 29, 30, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 28, 29,
+ 30, 34, 35, 1, 1, 3, 3, 1, 1, 1, 1, 1, 3, 1, 1, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 1, 1, 1, 3, 1, 0, 0, 1, 1, 0, 3, 1, 1, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 3, 1, 1, 3, 1, 1, 3, 3, 3, 1, 3, 3, 1, 3, 1,
+ 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 3, 1, 1, 3, 1, 1, 3, 1, 1, 1, 3, 3, 3,
+ 31, 32, 33, 1, 1, 1, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0,
+ 0, 1, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0,
+ 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 46, 47, 0, 48, 0, 0, 0, 0, 0, 47, 47, 47, 47, 0, 0,
+ 47, 0, 1, 1, 39, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 0, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 6, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3,
+ 1, 0, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 9, 49, 3,
+ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 11, 11, 3, 0, 1, 8, 3, 1, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 6, 6, 1, 1, 1, 1, 6, 6, 6, 1, 1, 0, 0, 0,
+ 0, 1, 0, 0, 0, 6, 6, 1, 3, 1, 6, 6, 3, 3, 3, 3,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 11, 2, 10, 51, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
+ 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 39,
+ 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 1, 3, 1, 3, 3, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 39, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0,
+ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0,
+ 0, 0, 38, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 4, 4, 6, 6, 6, 0, 0, 0, 55, 4, 4,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 0, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_canonical_combining_class(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_canonical_combining_class_table_1[field_2];
+ v = re_canonical_combining_class_table_2[(v << 5) | field_1];
+ v = re_canonical_combining_class_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Cased. */
+static RE_UINT8 re_cased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 17, 2, 18, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_cased_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 5, 6, 4,
+ 4, 4, 4, 4, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 4, 15,
+ 4, 4, 4, 4, 16, 4, 4, 4, 4, 17, 18, 4, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 22,
+ 0, 0, 0, 0, 23, 21, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 22, 4, 24, 25, 4, 26, 27, 28,
+ 0, 0, 0, 29, 30, 0, 0, 0, 31, 32, 33, 4, 34, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 35, 4, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 37, 38, 4, 4, 4, 4, 39, 4, 40, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 41, 25, 0, 0, 0, 0, 42, 4, 4, 43, 4, 44, 45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 5, 23, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 4, 4, 48, 0, 0, 46, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 51, 4, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 52, 4, 53, 54, 55, 4, 56, 57, 58, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 59, 60, 5, 52, 52, 37, 37, 61, 61, 62, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 64, 64, 36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_cased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
+ 255, 255, 255, 255, 255, 255, 255, 247, 240, 255, 255, 255, 255, 255, 239, 255,
+ 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 207, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
+ 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 0, 255, 1, 0, 0,
+ 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
+ 63, 63, 255, 170, 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
+ 80, 189, 31, 242, 224, 67, 0, 0, 24, 0, 0, 0, 0, 0, 192, 255,
+ 255, 3, 0, 0, 255, 127, 255, 255, 255, 255, 255, 127, 31, 120, 12, 0,
+ 191, 32, 0, 0, 255, 63, 0, 0, 252, 255, 255, 255, 255, 120, 255, 255,
+ 252, 7, 0, 0, 0, 0, 96, 7, 0, 0, 255, 255, 127, 0, 248, 0,
+ 255, 255, 0, 0, 255, 255, 15, 255, 255, 255, 255, 15, 255, 255, 7, 0,
+ 255, 255, 223, 255, 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 253, 255, 255, 247, 255, 253, 255, 255, 247, 15, 0, 0, 15, 0, 0, 0,
+ 255, 3, 255, 255
+};
+
+RE_UINT32 re_get_cased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_cased_table_1[field_2];
+ v = re_cased_table_2[(v << 5) | field_1];
+ v = re_cased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Case_Ignorable. */
+static RE_UINT8 re_case_ignorable_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 14, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 16,
+ 17, 9, 18, 19, 20, 21, 22, 23, 9, 9, 9, 9, 9, 24, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25, 26, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 27,
+ 9, 9, 9, 9, 28, 9, 29, 9, 30, 9, 31, 9, 32, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 33, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_case_ignorable_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 6, 6, 6, 6, 7, 8, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 14,
+ 15, 0, 16, 17, 0, 0, 18, 19, 20, 5, 21, 0, 0, 22, 0, 23,
+ 24, 25, 26, 0, 0, 0, 27, 6, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 33, 37, 38, 36, 33, 39, 40, 32, 41, 42, 43, 44, 0, 45, 0,
+ 46, 47, 48, 43, 32, 41, 49, 43, 50, 51, 34, 43, 32, 0, 52, 0,
+ 0, 53, 54, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 62, 0,
+ 0, 63, 64, 65, 66, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 69, 69, 0, 70, 71, 0,
+ 72, 0, 73, 0, 74, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0,
+ 77, 0, 78, 79, 0, 80, 3, 0, 81, 82, 44, 83, 50, 84, 0, 85,
+ 0, 86, 0, 87, 0, 0, 88, 89, 0, 90, 6, 91, 92, 6, 6, 93,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, 96,
+ 97, 98, 0, 99, 100, 0, 5, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 6,
+ 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 107, 0, 0, 108, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 111, 0, 0, 112, 113, 0, 0, 114, 6, 50, 0, 17, 115, 0, 0, 57,
+ 116, 117, 0, 0, 0, 0, 118, 119, 0, 120, 121, 0, 28, 122, 105, 74,
+ 0, 123, 124, 125, 0, 126, 127, 128, 0, 0, 92, 129, 0, 0, 0, 130,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 131, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 133, 134, 0, 0, 0, 0, 135, 1, 2, 3, 17, 47, 0, 0, 136,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 138, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 140, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
+ 32, 143, 144, 135, 50, 145, 146, 0, 28, 147, 0, 148, 50, 149, 150, 0,
+ 0, 151, 0, 0, 0, 0, 135, 152, 50, 51, 3, 153, 0, 0, 0, 0,
+ 0, 143, 154, 0, 0, 155, 156, 0, 0, 0, 0, 0, 0, 157, 158, 0,
+ 0, 159, 3, 0, 0, 160, 0, 0, 67, 161, 0, 0, 0, 0, 0, 0,
+ 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 73, 0, 0, 0, 164, 3,
+ 165, 166, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 169, 0, 0, 131, 170, 0, 0, 0, 171, 172, 0, 173, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 176, 0, 177, 81, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 178, 0, 0, 179,
+ 0, 0, 0, 0, 180, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0,
+ 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 185, 6, 186, 187, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 189, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 193, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
+ 32, 6, 6, 6, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 133,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_case_ignorable_table_3[] = {
+ 0, 0, 0, 0, 128, 64, 0, 4, 0, 0, 0, 64, 1, 0, 0, 0,
+ 0, 161, 144, 1, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 48, 4,
+ 176, 0, 0, 0, 248, 3, 0, 0, 0, 0, 0, 130, 0, 0, 254, 255,
+ 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 16, 0, 63, 0, 255, 23,
+ 1, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 191, 255, 61, 0, 0,
+ 0, 128, 2, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 36,
+ 0, 0, 192, 255, 255, 63, 0, 0, 0, 0, 0, 14, 0, 0, 248, 255,
+ 7, 0, 0, 0, 0, 0, 0, 20, 254, 33, 254, 0, 12, 0, 2, 0,
+ 2, 0, 0, 0, 0, 0, 0, 16, 30, 32, 0, 0, 12, 0, 0, 64,
+ 6, 0, 0, 0, 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0,
+ 12, 0, 0, 252, 0, 0, 0, 144, 30, 32, 96, 0, 12, 0, 0, 0,
+ 4, 0, 0, 0, 1, 32, 0, 0, 17, 0, 0, 0, 0, 0, 0, 192,
+ 193, 61, 96, 0, 64, 48, 0, 0, 3, 0, 0, 0, 0, 0, 0, 24,
+ 0, 4, 92, 0, 0, 0, 242, 7, 192, 127, 0, 0, 0, 0, 242, 31,
+ 64, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
+ 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
+ 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
+ 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 143, 32,
+ 0, 120, 0, 0, 8, 0, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0,
+ 135, 1, 4, 14, 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159,
+ 128, 0, 255, 255, 15, 0, 0, 0, 0, 0, 208, 23, 0, 248, 15, 0,
+ 60, 59, 0, 0, 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 0, 63,
+ 0, 0, 247, 255, 253, 33, 16, 3, 0, 240, 255, 255, 255, 7, 0, 1,
+ 0, 0, 0, 248, 255, 255, 255, 251, 0, 0, 0, 160, 3, 224, 0, 224,
+ 0, 224, 0, 96, 0, 248, 0, 3, 144, 124, 0, 0, 223, 255, 2, 128,
+ 0, 0, 255, 31, 255, 255, 1, 0, 0, 0, 0, 48, 0, 128, 3, 0,
+ 0, 128, 0, 128, 0, 128, 0, 0, 32, 0, 0, 0, 0, 60, 62, 8,
+ 0, 0, 0, 126, 0, 0, 0, 112, 0, 0, 32, 0, 0, 16, 0, 0,
+ 0, 128, 247, 191, 0, 0, 0, 240, 0, 0, 3, 0, 0, 7, 0, 0,
+ 68, 8, 0, 0, 96, 16, 0, 0, 48, 0, 0, 0, 255, 255, 3, 128,
+ 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 200, 51, 0, 126, 102, 0,
+ 8, 16, 0, 0, 0, 0, 1, 16, 0, 0, 157, 193, 2, 0, 0, 32,
+ 0, 48, 88, 0, 0, 14, 0, 0, 32, 33, 0, 0, 0, 0, 252, 255,
+ 255, 255, 8, 0, 255, 255, 0, 0, 0, 0, 36, 0, 0, 0, 0, 128,
+ 8, 0, 0, 14, 0, 0, 0, 32, 0, 0, 192, 7, 110, 240, 0, 0,
+ 0, 0, 0, 135, 240, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 255,
+ 127, 0, 0, 0, 0, 0, 120, 38, 0, 32, 0, 0, 128, 239, 31, 0,
+ 0, 0, 8, 0, 0, 0, 192, 127, 0, 158, 0, 0, 0, 128, 211, 64,
+ 248, 7, 0, 0, 192, 31, 31, 0, 92, 0, 0, 64, 0, 0, 248, 133,
+ 13, 0, 0, 0, 0, 0, 60, 176, 1, 0, 0, 48, 0, 0, 248, 167,
+ 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6, 0, 0, 0, 88,
+ 0, 0, 240, 12, 254, 7, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14,
+ 0, 252, 127, 3, 0, 0, 127, 191, 255, 252, 109, 0, 0, 0, 126, 180,
+ 191, 0, 0, 0, 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 255, 1,
+ 0, 0, 31, 0, 0, 0, 127, 0, 0, 128, 255, 255, 27, 0, 0, 0,
+ 0, 0, 0, 96, 128, 3, 248, 255, 231, 15, 0, 0, 0, 60, 0, 0,
+ 28, 0, 0, 0, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
+ 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 0, 0, 255, 63,
+ 0, 240, 0, 0, 240, 15, 0, 0
+};
+
+RE_UINT32 re_get_case_ignorable(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_case_ignorable_table_1[field_2];
+ v = re_case_ignorable_table_2[(v << 5) | field_1];
+ v = re_case_ignorable_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Casefolded. */
+static RE_UINT8 re_changes_when_casefolded_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_casefolded_table_2[] = {
+ 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 20, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
+ 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 20, 36, 37, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 21, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 41, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 42, 0, 43, 4, 4, 4, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 50, 51, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 20, 20, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 20, 54, 0, 0, 0, 52, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 20, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 20, 57, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_casefolded_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
+ 85, 85, 85, 85, 85, 85, 85, 170, 170, 86, 85, 85, 85, 85, 85, 171,
+ 214, 206, 219, 177, 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85,
+ 85, 85, 5, 108, 122, 85, 0, 0, 32, 0, 0, 0, 0, 0, 69, 128,
+ 64, 215, 254, 255, 251, 15, 0, 0, 4, 128, 99, 85, 85, 85, 179, 230,
+ 255, 255, 255, 255, 255, 255, 0, 0, 1, 84, 85, 85, 171, 42, 85, 85,
+ 85, 85, 254, 255, 255, 255, 127, 0, 128, 0, 0, 0, 191, 32, 0, 0,
+ 0, 0, 0, 63, 255, 1, 255, 255, 255, 255, 255, 231, 85, 85, 21, 76,
+ 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170, 0, 255, 0, 0,
+ 255, 255, 156, 31, 156, 31, 0, 15, 0, 31, 156, 31, 64, 12, 4, 0,
+ 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192,
+ 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85,
+ 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85, 244, 2, 0, 0,
+ 0, 0, 255, 255, 127, 0, 248, 0, 255, 0, 0, 0, 255, 255, 15, 0,
+ 255, 255, 7, 0, 3, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_casefolded_table_1[field_2];
+ v = re_changes_when_casefolded_table_2[(v << 5) | field_1];
+ v = re_changes_when_casefolded_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Casemapped. */
+static RE_UINT8 re_changes_when_casemapped_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_casemapped_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 5, 4, 4, 6, 7, 8, 4,
+ 4, 9, 10, 11, 12, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
+ 4, 4, 4, 4, 19, 4, 4, 4, 4, 20, 21, 22, 23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 26,
+ 0, 0, 0, 0, 27, 25, 0, 0, 0, 0, 0, 28, 29, 0, 0, 0,
+ 4, 4, 4, 4, 30, 4, 4, 4, 26, 4, 31, 32, 4, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 29, 4, 37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 38, 4, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 40, 41, 42, 4, 4, 4, 43, 4, 44, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 40, 50, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 4, 4, 55, 0, 0, 53, 56, 46, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 57, 4, 57, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 58, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_casemapped_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
+ 255, 255, 255, 255, 255, 255, 255, 254, 255, 223, 255, 247, 255, 243, 255, 179,
+ 240, 255, 255, 255, 253, 255, 15, 252, 255, 255, 223, 26, 107, 159, 38, 32,
+ 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 207, 184, 64, 215, 255, 255,
+ 251, 255, 255, 255, 255, 255, 227, 255, 255, 255, 191, 239, 3, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 0, 254, 255, 255, 255, 255, 0, 0, 0,
+ 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
+ 0, 0, 0, 34, 0, 64, 0, 0, 255, 255, 255, 79, 63, 63, 255, 170,
+ 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
+ 64, 12, 4, 0, 24, 0, 0, 0, 0, 0, 192, 255, 255, 3, 0, 0,
+ 255, 127, 255, 255, 255, 255, 255, 127, 255, 255, 109, 192, 15, 120, 12, 0,
+ 191, 32, 0, 0, 255, 63, 0, 0, 255, 255, 255, 15, 252, 255, 252, 255,
+ 255, 255, 0, 254, 255, 56, 223, 255, 252, 7, 0, 0, 0, 0, 96, 0,
+ 0, 0, 8, 0, 0, 0, 255, 255, 127, 0, 248, 0, 255, 255, 0, 0,
+ 255, 255, 15, 255, 255, 255, 7, 0, 15, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_casemapped_table_1[field_2];
+ v = re_changes_when_casemapped_table_2[(v << 5) | field_1];
+ v = re_changes_when_casemapped_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Lowercased. */
+static RE_UINT8 re_changes_when_lowercased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
+ 2, 10, 2, 11, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_lowercased_table_2[] = {
+ 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
+ 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
+ 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
+ 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 30, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 19, 37, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 39, 0, 40, 3, 3, 3, 41, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 42, 43, 0, 0, 0, 0, 44, 3, 45, 46, 47, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 18, 50, 0, 0, 0, 26, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_lowercased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
+ 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
+ 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85, 85, 85, 5, 108,
+ 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
+ 0, 128, 0, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
+ 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
+ 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
+ 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
+ 0, 255, 0, 0, 0, 255, 0, 31, 0, 31, 0, 15, 0, 31, 0, 31,
+ 64, 12, 4, 0, 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0,
+ 157, 234, 37, 192, 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5,
+ 84, 85, 84, 85, 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85,
+ 244, 2, 0, 0, 0, 0, 32, 0, 255, 0, 0, 0, 255, 255, 15, 0,
+ 255, 255, 7, 0, 3, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_lowercased_table_1[field_2];
+ v = re_changes_when_lowercased_table_2[(v << 5) | field_1];
+ v = re_changes_when_lowercased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Titlecased. */
+static RE_UINT8 re_changes_when_titlecased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_titlecased_table_2[] = {
+ 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
+ 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
+ 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0,
+ 5, 5, 5, 5, 34, 5, 5, 5, 35, 36, 37, 38, 36, 39, 40, 41,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 23, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 23, 44, 45, 5, 5, 5, 46, 24, 47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 48, 49, 0, 0, 0, 0, 50, 5, 51, 52, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 23, 24, 24, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 58, 59, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_titlecased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
+ 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
+ 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 208, 86, 85, 181,
+ 170, 170, 43, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
+ 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
+ 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
+ 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
+ 254, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 63, 255, 1, 0, 0,
+ 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15, 255, 0, 63, 0,
+ 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64,
+ 220, 0, 207, 0, 255, 0, 220, 0, 16, 0, 0, 0, 255, 3, 0, 0,
+ 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0, 191, 32, 0, 0,
+ 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170, 170, 170, 0, 148,
+ 170, 16, 154, 170, 170, 2, 160, 170, 8, 5, 0, 0, 0, 0, 64, 0,
+ 0, 0, 8, 0, 127, 0, 248, 0, 0, 255, 255, 255, 255, 255, 0, 0,
+ 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0, 252, 255, 255, 255,
+ 15, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_titlecased_table_1[field_2];
+ v = re_changes_when_titlecased_table_2[(v << 5) | field_1];
+ v = re_changes_when_titlecased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Changes_When_Uppercased. */
+static RE_UINT8 re_changes_when_uppercased_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_changes_when_uppercased_table_2[] = {
+ 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
+ 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
+ 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, 0,
+ 5, 5, 5, 5, 35, 5, 5, 5, 36, 37, 38, 39, 24, 40, 41, 42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 23, 43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 23, 45, 46, 5, 5, 5, 47, 24, 48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 49, 50, 0, 0, 0, 0, 51, 5, 52, 53, 54, 55, 56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 23, 24, 24, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 59, 60, 0, 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_changes_when_uppercased_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
+ 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
+ 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 96, 91, 85, 181,
+ 170, 170, 45, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
+ 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
+ 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
+ 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
+ 254, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 231, 0, 0, 0, 63,
+ 255, 1, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15,
+ 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63,
+ 255, 255, 223, 80, 220, 16, 207, 0, 255, 0, 220, 16, 16, 0, 0, 0,
+ 255, 3, 0, 0, 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0,
+ 191, 32, 0, 0, 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170,
+ 170, 170, 0, 148, 170, 16, 154, 170, 170, 2, 160, 170, 8, 5, 0, 0,
+ 0, 0, 64, 0, 0, 0, 8, 0, 127, 0, 248, 0, 0, 255, 255, 255,
+ 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0,
+ 252, 255, 255, 255, 15, 0, 0, 0
+};
+
+RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_changes_when_uppercased_table_1[field_2];
+ v = re_changes_when_uppercased_table_2[(v << 5) | field_1];
+ v = re_changes_when_uppercased_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Dash. */
+static RE_UINT8 re_dash_table_1[] = {
+ 0, 1, 2, 2, 2, 3, 4, 2, 5, 2, 2, 6, 7, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8,
+ 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_dash_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 16, 17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_dash_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 4, 0, 0, 0, 0, 0, 64,
+ 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 8, 0,
+ 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 4, 0, 0, 0, 128, 4,
+ 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 6, 0,
+ 0, 0, 0, 1, 8, 0, 0, 0
+};
+
+RE_UINT32 re_get_dash(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_dash_table_1[field_2];
+ v = re_dash_table_2[(v << 5) | field_1];
+ v = re_dash_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Decomposition_Type. */
+static RE_UINT8 re_decomposition_type_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 17, 18,
+ 5, 5, 5, 5, 19, 20, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 22, 23, 5, 5, 5, 5, 5, 24, 25, 5, 26, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+static RE_UINT8 re_decomposition_type_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
+ 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
+ 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0,
+ 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0,
+ 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 42, 0,
+ 0, 43, 0, 0, 0, 43, 44, 0, 45, 0, 46, 47, 48, 49, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
+ 60, 60, 60, 60, 61, 60, 60, 62, 63, 60, 64, 65, 60, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 0, 0, 75, 76, 77, 78, 79, 80, 81, 0,
+ 82, 83, 84, 85, 86, 87, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 90, 78, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 94, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
+ 0, 0, 0, 0, 99, 0, 0, 43, 78, 78, 78, 78, 78, 78, 100, 0,
+ 101, 102, 103, 104, 105, 103, 104, 106, 0, 107, 78, 78, 108, 0, 0, 0,
+ 109, 78, 110, 111, 92, 92, 112, 113, 114, 114, 115, 116, 114, 114, 114, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 123, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, 60,
+ 124, 125, 60, 126, 60, 60, 62, 0, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 135, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 158, 159, 160, 161, 162, 163,
+ 0, 0, 0, 0, 164, 165, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 172, 0, 173, 174, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 175, 175, 176, 175, 177, 178, 179, 175, 180, 181, 182, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 183, 175, 175, 175, 175, 175, 175, 175, 175, 184, 175,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 179, 185, 186, 187, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, 193, 194, 0, 0, 0,
+ 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_decomposition_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 2,
+ 0, 0, 3, 3, 2, 2, 0, 0, 2, 3, 3, 0, 4, 4, 4, 0,
+ 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 0, 2, 2, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 2,
+ 2, 0, 0, 5, 5, 5, 5, 5, 5, 2, 0, 0, 5, 5, 5, 5,
+ 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
+ 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 2, 2, 2, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5,
+ 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0,
+ 2, 2, 2, 5, 5, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 5, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 5, 5, 2, 5, 2, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0,
+ 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 2, 5, 2,
+ 2, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0,
+ 5, 5, 2, 2, 2, 2, 2, 1, 2, 2, 2, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 2, 0, 0, 7, 7, 7, 7, 7, 0, 0,
+ 3, 2, 3, 0, 7, 0, 5, 0, 7, 0, 5, 5, 7, 7, 0, 7,
+ 7, 7, 0, 7, 7, 2, 2, 2, 2, 7, 0, 2, 7, 7, 7, 7,
+ 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0, 2, 2, 0, 2,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 0, 5, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+ 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0,
+ 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0,
+ 5, 0, 5, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0,
+ 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 2, 0, 5, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 5, 5, 5, 5, 0, 0, 0, 5, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
+ 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
+ 2, 2, 2, 2, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 5, 0, 5, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 5, 0, 5,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 0,
+ 5, 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
+ 12, 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 14, 15, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,
+ 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 12, 13, 14, 15, 12, 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13,
+ 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 12, 13, 14, 15, 12, 13, 12, 13, 12, 13, 12, 12, 13,
+ 12, 13, 12, 13, 12, 13, 14, 15, 14, 15, 12, 13, 12, 13, 12, 13,
+ 12, 13, 12, 13, 12, 13, 12, 13, 14, 12, 13, 14, 12, 13, 14, 15,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
+ 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 13, 12, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 13, 14, 14, 14, 14, 14, 14, 13, 14, 13, 13, 14, 14, 13, 13,
+ 14, 14, 13, 14, 13, 14, 13, 13, 14, 13, 13, 14, 13, 14, 13, 13,
+ 14, 13, 14, 14, 13, 13, 13, 14, 13, 13, 13, 13, 13, 14, 13, 13,
+ 13, 13, 13, 14, 13, 13, 14, 13, 14, 14, 14, 13, 14, 14, 14, 14,
+ 0, 0, 14, 14, 14, 14, 13, 13, 14, 13, 13, 13, 13, 14, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 14, 14, 13, 13, 14, 13, 14, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 0, 10, 10, 2, 2, 2, 2, 2, 2, 2,
+ 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0,
+ 12, 15, 12, 0, 12, 0, 12, 15, 12, 15, 12, 15, 12, 15, 12, 15,
+ 12, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 14, 15, 12, 13, 12,
+ 13, 14, 15, 12, 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 12, 13, 12, 13, 12,
+ 13, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14,
+ 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 14, 15, 12, 13, 12,
+ 13, 12, 13, 14, 15, 12, 13, 12, 13, 12, 13, 12, 13, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 0, 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17, 17, 17,
+ 0, 0, 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
+ 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 0, 0, 7, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 0, 0, 7, 7, 7,
+ 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 0,
+ 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 7, 7, 0, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 0, 7, 0, 0, 0, 0,
+ 0, 0, 7, 0, 0, 0, 0, 7, 0, 7, 0, 7, 0, 7, 7, 7,
+ 0, 7, 7, 0, 7, 0, 0, 7, 0, 7, 0, 7, 0, 7, 0, 7,
+ 0, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7,
+ 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 0, 7, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_decomposition_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_decomposition_type_table_1[field_2];
+ v = re_decomposition_type_table_2[(v << 5) | field_1];
+ v = re_decomposition_type_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Default_Ignorable_Code_Point. */
+static RE_UINT8 re_default_ignorable_code_point_table_1[] = {
+ 0, 1, 2, 2, 3, 4, 5, 2, 6, 2, 2, 2, 7, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
+ 2, 2, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 11, 11, 11, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_default_ignorable_code_point_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 12,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
+};
+
+static RE_UINT8 re_default_ignorable_code_point_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 128, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 128, 1, 0, 0, 0, 0, 0, 48, 0, 0, 120, 0, 0,
+ 0, 248, 0, 0, 0, 124, 0, 0, 255, 255, 0, 0, 16, 0, 0, 0,
+ 0, 0, 255, 1, 15, 0, 0, 0, 0, 0, 248, 7, 255, 255, 255, 255
+};
+
+RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_default_ignorable_code_point_table_1[field_2];
+ v = re_default_ignorable_code_point_table_2[(v << 5) | field_1];
+ v = re_default_ignorable_code_point_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Deprecated. */
+RE_UINT32 re_get_deprecated(RE_UINT32 codepoint) {
+ if (codepoint == 0x0149)
+ return 1;
+ if (codepoint == 0x0673)
+ return 1;
+ if (codepoint == 0x0F77)
+ return 1;
+ if (codepoint == 0x0F79)
+ return 1;
+ if (0x17A3 <= codepoint && codepoint <= 0x17A4)
+ return 1;
+ if (0x206A <= codepoint && codepoint <= 0x206F)
+ return 1;
+ if (0x2329 <= codepoint && codepoint <= 0x232A)
+ return 1;
+ if (codepoint == 0x0E0001)
+ return 1;
+
+ return 0;
+}
+
+/* Diacritic. */
+static RE_UINT8 re_diacritic_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 12, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 14,
+ 15, 8, 16, 17, 18, 19, 20, 21, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 22, 23, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 24, 8, 8, 8, 25, 8, 26, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
+};
+
+static RE_UINT8 re_diacritic_table_2[] = {
+ 0, 0, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 5, 5, 5, 5, 6, 7, 8, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 0,
+ 0, 0, 14, 0, 0, 0, 15, 16, 0, 4, 17, 0, 0, 18, 0, 19,
+ 20, 0, 0, 0, 0, 0, 0, 21, 0, 22, 23, 24, 0, 22, 25, 0,
+ 0, 22, 25, 0, 0, 22, 25, 26, 0, 22, 27, 0, 0, 0, 25, 0,
+ 0, 0, 25, 0, 0, 22, 25, 0, 0, 28, 25, 0, 0, 0, 29, 0,
+ 0, 0, 30, 0, 0, 31, 32, 0, 20, 33, 0, 0, 34, 0, 35, 0,
+ 0, 36, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 41, 0, 42, 0, 0, 0, 43, 44, 45, 0, 46, 0, 0,
+ 0, 47, 0, 48, 0, 0, 4, 49, 0, 50, 5, 17, 0, 0, 51, 52,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 58, 0, 0, 59, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 60, 61, 0, 0, 62, 5, 63, 0, 0, 64, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 44, 65, 0, 66, 67, 0, 0, 67, 2, 68,
+ 0, 0, 0, 69, 0, 15, 70, 71, 0, 0, 72, 73, 0, 0, 0, 74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 75, 0, 0, 0, 0, 0, 0, 0, 1, 2, 76, 77, 0, 0, 78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 67, 0, 0, 83, 0,
+ 0, 84, 0, 0, 0, 0, 0, 85, 0, 22, 25, 86, 0, 0, 0, 0,
+ 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 15, 2, 0,
+ 0, 15, 0, 0, 0, 47, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0,
+ 0, 81, 0, 0, 0, 0, 0, 0, 0, 90, 78, 0, 0, 0, 0, 2,
+ 0, 43, 91, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 101, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_diacritic_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 129, 144, 1,
+ 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 224, 7, 0, 48, 4,
+ 48, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 2, 0, 0, 254, 255,
+ 251, 255, 255, 191, 22, 0, 0, 0, 0, 248, 135, 1, 0, 0, 0, 128,
+ 97, 28, 0, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 0,
+ 0, 0, 0, 3, 248, 255, 255, 127, 0, 0, 0, 16, 0, 32, 30, 0,
+ 0, 0, 2, 0, 0, 32, 0, 0, 0, 0, 0, 224, 0, 32, 32, 0,
+ 0, 0, 0, 24, 0, 4, 0, 0, 128, 95, 0, 0, 0, 0, 0, 4,
+ 0, 31, 0, 0, 0, 0, 160, 194, 220, 0, 0, 0, 64, 0, 0, 0,
+ 0, 0, 128, 6, 24, 62, 0, 0, 128, 191, 0, 12, 0, 254, 15, 32,
+ 0, 0, 0, 14, 0, 0, 224, 159, 0, 0, 255, 63, 0, 0, 16, 0,
+ 16, 0, 0, 0, 0, 248, 15, 0, 0, 12, 0, 0, 0, 0, 192, 0,
+ 0, 0, 0, 63, 255, 33, 144, 3, 0, 240, 255, 255, 240, 255, 0, 0,
+ 0, 0, 224, 227, 0, 0, 0, 160, 3, 224, 0, 224, 0, 224, 0, 96,
+ 0, 128, 3, 0, 0, 128, 0, 0, 0, 252, 0, 0, 0, 0, 0, 30,
+ 0, 128, 0, 176, 0, 0, 0, 48, 0, 0, 3, 0, 3, 0, 0, 0,
+ 0, 7, 0, 0, 255, 255, 3, 0, 0, 120, 0, 0, 0, 0, 8, 0,
+ 32, 0, 0, 0, 0, 0, 0, 56, 7, 0, 0, 0, 0, 0, 64, 0,
+ 0, 0, 0, 248, 0, 14, 0, 0, 0, 48, 0, 0, 255, 255, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 192, 8, 0, 0, 0, 96, 0, 0, 0,
+ 252, 0, 0, 0, 0, 0, 0, 6, 0, 0, 24, 0, 1, 28, 0, 0,
+ 0, 0, 96, 0, 0, 6, 0, 0, 192, 31, 31, 0, 68, 0, 0, 0,
+ 12, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 96, 128, 0, 0, 0,
+ 52, 0, 0, 0, 0, 0, 128, 0, 0, 0, 31, 0, 0, 0, 127, 0,
+ 0, 128, 255, 255, 128, 227, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0,
+ 0, 240, 0, 0, 112, 7, 0, 0
+};
+
+RE_UINT32 re_get_diacritic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_diacritic_table_1[field_2];
+ v = re_diacritic_table_2[(v << 5) | field_1];
+ v = re_diacritic_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* East_Asian_Width. */
+static RE_UINT8 re_east_asian_width_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 2, 4, 5, 6, 7, 8, 9, 9, 9,
+ 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 12, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 13, 2, 2, 14, 14, 14, 14, 14, 14, 15, 16,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 9, 9, 9, 9,
+ 9, 18, 9, 19, 2, 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 22, 23, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 26,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 26
+};
+
+static RE_UINT8 re_east_asian_width_table_2[] = {
+ 0, 1, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 0, 0, 10, 0,
+ 0, 0, 11, 12, 0, 0, 13, 0, 14, 14, 14, 15, 16, 17, 18, 0,
+ 19, 14, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 23, 0, 24, 25, 26, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 0, 41, 42, 0, 0, 0, 0, 0, 43,
+ 0, 0, 0, 14, 14, 14, 14, 44, 14, 14, 45, 46, 47, 48, 49, 50,
+ 51, 0, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 21, 21, 69, 21, 21, 21, 21, 21, 21, 70, 71,
+ 72, 73, 74, 21, 75, 21, 21, 21, 76, 77, 21, 21, 78, 21, 21, 79,
+ 73, 21, 80, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 81, 21, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 84, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 86, 87, 88, 0, 0, 0, 0, 89, 90, 90, 91, 92, 93, 94, 95,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 97,
+ 21, 21, 21, 21, 21, 21, 70, 0, 98, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 73, 0, 99, 100, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 102, 0, 0, 0, 0, 0, 103, 0, 104, 105, 14, 106, 107, 108, 0, 0,
+ 109, 101, 110, 111, 0, 0, 0, 0, 21, 112, 21, 113, 69, 21, 114, 115,
+ 21, 73, 116, 21, 21, 21, 21, 117, 21, 118, 119, 120, 121, 102, 0, 122,
+ 21, 21, 123, 0, 21, 21, 124, 125, 0, 0, 0, 0, 0, 0, 0, 126,
+ 0, 0, 0, 0, 0, 0, 0, 0, 127, 128, 129, 130, 21, 21, 131, 21,
+ 0, 0, 0, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 118,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 136
+};
+
+static RE_UINT8 re_east_asian_width_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 2, 1, 1, 2, 1, 1, 2, 2, 0, 2, 0, 1, 2, 2, 1,
+ 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 2,
+ 2, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 2, 2, 0, 0,
+ 2, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2,
+ 2, 2, 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 0,
+ 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 2, 0, 2, 2, 2, 0, 2, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 2, 2, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0,
+ 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 2, 2, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 2,
+ 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2,
+ 2, 0, 0, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0,
+ 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0,
+ 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0,
+ 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 2, 2,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2,
+ 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0,
+ 2, 0, 2, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2,
+ 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 2, 0, 0, 0, 0, 2, 2, 3, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0,
+ 0, 0, 0, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+ 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4,
+ 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 0, 4, 4, 4, 4, 4, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 3, 3, 3, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0
+};
+
+RE_UINT32 re_get_east_asian_width(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_east_asian_width_table_1[field_2];
+ v = re_east_asian_width_table_2[(v << 5) | field_1];
+ v = re_east_asian_width_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Emoji. */
+static RE_UINT8 re_emoji_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_emoji_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 10, 11,
+ 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0,
+ 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 36, 37, 0, 0, 38,
+ 39, 40, 41, 0, 0, 0, 0, 0, 42, 43, 42, 42, 44, 42, 42, 45,
+ 42, 42, 42, 42, 42, 42, 42, 46, 42, 47, 48, 49, 50, 51, 52, 53,
+ 42, 42, 54, 0, 42, 42, 55, 56, 0, 0, 0, 0, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, 42, 42, 62, 42,
+ 0, 0, 0, 63, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_table_3[] = {
+ 0, 0, 0, 0, 8, 4, 255, 3, 0, 66, 0, 0, 0, 0, 0, 16,
+ 0, 2, 0, 0, 4, 0, 0, 2, 0, 0, 240, 3, 0, 6, 0, 0,
+ 0, 0, 0, 12, 0, 1, 0, 0, 0, 128, 0, 0, 0, 254, 15, 7,
+ 4, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120,
+ 31, 64, 50, 33, 77, 196, 0, 7, 5, 255, 15, 128, 105, 1, 0, 200,
+ 0, 0, 252, 26, 131, 12, 3, 96, 48, 193, 26, 0, 0, 6, 191, 39,
+ 36, 191, 84, 32, 2, 1, 24, 0, 144, 80, 184, 0, 24, 0, 0, 0,
+ 0, 0, 224, 0, 2, 0, 1, 128, 0, 0, 48, 0, 224, 0, 0, 24,
+ 0, 0, 33, 0, 0, 0, 1, 32, 0, 0, 128, 2, 16, 0, 0, 0,
+ 0, 0, 3, 192, 0, 64, 254, 7, 192, 255, 255, 255, 6, 0, 0, 4,
+ 0, 128, 252, 7, 0, 0, 3, 0, 255, 255, 255, 255, 243, 255, 255, 255,
+ 255, 255, 207, 206, 255, 255, 185, 255, 255, 255, 255, 191, 255, 255, 255, 63,
+ 0, 126, 255, 255, 255, 128, 249, 7, 128, 60, 97, 0, 48, 1, 6, 16,
+ 28, 0, 14, 112, 10, 129, 8, 252, 255, 255, 0, 0, 63, 248, 231, 0,
+ 63, 26, 249, 31, 255, 15, 0, 0, 0, 240, 255, 255, 255, 255, 255, 247,
+ 191, 255, 255, 255, 255, 255, 255, 253, 255, 239, 255, 255, 0, 0, 31, 7,
+ 127, 0, 255, 255, 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_emoji(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_table_1[field_2];
+ v = re_emoji_table_2[(v << 5) | field_1];
+ v = re_emoji_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Emoji_Component. */
+static RE_UINT8 re_emoji_component_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_emoji_component_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_component_table_3[] = {
+ 0, 0, 0, 0, 8, 4, 255, 3, 0, 32, 0, 0, 8, 0, 0, 0,
+ 0, 128, 0, 0, 192, 255, 255, 255, 0, 0, 0, 248, 0, 0, 15, 0,
+ 255, 255, 255, 255
+};
+
+RE_UINT32 re_get_emoji_component(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_component_table_1[field_2];
+ v = re_emoji_component_table_2[(v << 5) | field_1];
+ v = re_emoji_component_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Emoji_Modifier. */
+RE_UINT32 re_get_emoji_modifier(RE_UINT32 codepoint) {
+ if (0x01F3FB <= codepoint && codepoint <= 0x01F3FF)
+ return 1;
+
+ return 0;
+}
+
+/* Emoji_Modifier_Base. */
+static RE_UINT8 re_emoji_modifier_base_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_modifier_base_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0,
+ 0, 0, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 11, 0, 0, 0,
+ 0, 0, 12, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 17, 0, 18, 19, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_modifier_base_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 2, 0, 60, 0, 0,
+ 32, 0, 0, 0, 156, 28, 0, 0, 204, 255, 1, 0, 192, 255, 255, 17,
+ 238, 128, 2, 0, 0, 4, 0, 0, 0, 0, 48, 4, 0, 0, 97, 0,
+ 224, 248, 0, 0, 8, 0, 112, 0, 1, 16, 0, 0, 0, 144, 0, 255,
+ 64, 0, 255, 115, 0, 0, 128, 0, 0, 0, 96, 11, 0, 224, 254, 63
+};
+
+RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_modifier_base_table_1[field_2];
+ v = re_emoji_modifier_base_table_2[(v << 5) | field_1];
+ v = re_emoji_modifier_base_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Emoji_Presentation. */
+static RE_UINT8 re_emoji_presentation_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_presentation_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 14, 15, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0,
+ 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 21,
+ 22, 23, 24, 0, 0, 0, 0, 0, 25, 26, 25, 27, 28, 25, 29, 30,
+ 25, 31, 32, 25, 25, 25, 25, 33, 25, 34, 35, 36, 37, 18, 0, 38,
+ 25, 25, 39, 0, 25, 25, 40, 41, 0, 0, 0, 0, 0, 0, 0, 42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 46, 25, 25, 47, 25,
+ 0, 0, 0, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_emoji_presentation_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 12, 0, 30, 9, 0, 0, 0, 0, 96,
+ 0, 0, 48, 0, 0, 255, 15, 0, 0, 0, 0, 128, 0, 0, 8, 0,
+ 2, 12, 0, 96, 48, 64, 16, 0, 0, 4, 44, 36, 32, 12, 0, 0,
+ 0, 1, 0, 0, 0, 80, 184, 0, 0, 0, 224, 0, 0, 0, 1, 128,
+ 0, 0, 0, 24, 0, 0, 33, 0, 16, 0, 0, 0, 0, 128, 0, 0,
+ 0, 64, 254, 7, 192, 255, 255, 255, 2, 0, 0, 4, 0, 128, 124, 7,
+ 0, 0, 3, 0, 255, 255, 255, 255, 1, 224, 191, 255, 255, 255, 255, 223,
+ 255, 255, 15, 0, 255, 135, 15, 0, 255, 255, 17, 255, 255, 255, 255, 127,
+ 253, 255, 255, 255, 255, 255, 255, 159, 255, 255, 255, 63, 0, 120, 255, 255,
+ 255, 0, 0, 4, 0, 0, 96, 0, 0, 0, 0, 248, 255, 255, 0, 0,
+ 63, 16, 231, 0, 0, 24, 240, 31, 255, 15, 0, 0, 0, 240, 255, 255,
+ 255, 255, 255, 247, 191, 255, 255, 255, 255, 255, 255, 253, 255, 239, 255, 255,
+ 0, 0, 31, 7, 127, 0, 255, 255, 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_emoji_presentation(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_emoji_presentation_table_1[field_2];
+ v = re_emoji_presentation_table_2[(v << 5) | field_1];
+ v = re_emoji_presentation_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Extended_Pictographic. */
+static RE_UINT8 re_extended_pictographic_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+static RE_UINT8 re_extended_pictographic_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 8, 0, 9, 10,
+ 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 13, 14,
+ 15, 16, 16, 16, 17, 16, 16, 16, 18, 19, 20, 21, 22, 23, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0,
+ 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 29, 9, 0, 30, 31, 32, 16, 33,
+ 34, 35, 36, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 37,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 38, 39, 16, 16, 16, 16, 16,
+ 16, 16, 40, 0, 16, 16, 16, 16, 0, 0, 0, 41, 0, 0, 42, 16,
+ 43, 0, 44, 0, 45, 46, 16, 16, 47, 48, 49, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 38
+};
+
+static RE_UINT8 re_extended_pictographic_table_3[] = {
+ 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0,
+ 4, 0, 0, 2, 0, 0, 240, 3, 0, 6, 0, 0, 0, 0, 0, 12,
+ 0, 1, 0, 0, 0, 128, 0, 0, 0, 254, 15, 7, 4, 0, 0, 0,
+ 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120, 191, 255, 247, 255,
+ 255, 255, 255, 255, 63, 0, 255, 255, 63, 255, 87, 32, 2, 1, 24, 0,
+ 144, 80, 184, 0, 248, 0, 0, 0, 0, 0, 224, 0, 2, 0, 1, 128,
+ 0, 0, 48, 0, 224, 0, 0, 24, 0, 0, 33, 0, 0, 0, 1, 32,
+ 0, 0, 128, 2, 0, 224, 0, 0, 0, 240, 3, 192, 0, 64, 254, 7,
+ 0, 224, 255, 255, 63, 0, 0, 0, 254, 255, 0, 4, 0, 128, 252, 247,
+ 0, 254, 255, 255, 255, 255, 255, 7, 255, 255, 255, 63, 192, 255, 255, 255,
+ 255, 255, 0, 0, 0, 0, 240, 255, 0, 0, 224, 255, 0, 240, 0, 0,
+ 0, 255, 0, 252, 0, 255, 0, 0, 0, 192, 255, 255, 0, 240, 255, 255,
+ 255, 255, 255, 247, 191, 255, 255, 255
+};
+
+RE_UINT32 re_get_extended_pictographic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_extended_pictographic_table_1[field_2];
+ v = re_extended_pictographic_table_2[(v << 5) | field_1];
+ v = re_extended_pictographic_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Extender. */
+static RE_UINT8 re_extender_table_1[] = {
+ 0, 1, 2, 3, 4, 4, 5, 6, 4, 4, 4, 4, 7, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 10, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 11,
+ 4, 4, 4, 4, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, 16, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 17, 4, 18, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
+};
+
+static RE_UINT8 re_extender_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 13, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 6,
+ 0, 0, 0, 18, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_extender_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 3, 0, 1, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 32, 0, 64, 0, 0, 0, 0, 4, 0, 0,
+ 8, 0, 0, 0, 128, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 8,
+ 32, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 96, 0, 0, 0, 112,
+ 0, 16, 0, 0, 0, 128, 0, 0, 0, 0, 1, 0, 0, 0, 0, 32,
+ 0, 0, 24, 0, 192, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 48, 112, 0, 0, 0
+};
+
+RE_UINT32 re_get_extender(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_extender_table_1[field_2];
+ v = re_extender_table_2[(v << 5) | field_1];
+ v = re_extender_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* General_Category. */
+static RE_UINT8 re_general_category_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 19, 20, 20, 21, 21, 21, 21, 21, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 34, 13, 35, 34, 34,
+ 34, 36, 34, 34, 34, 34, 34, 34, 34, 34, 37, 38, 13, 13, 13, 13,
+ 13, 39, 13, 40, 34, 34, 34, 34, 34, 34, 34, 34, 41, 34, 34, 42,
+ 34, 34, 34, 34, 43, 44, 45, 34, 46, 34, 47, 48, 49, 50, 51, 34,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 52, 13, 13, 13, 53, 54, 13,
+ 13, 13, 13, 55, 13, 13, 13, 13, 13, 13, 56, 34, 34, 34, 57, 34,
+ 13, 13, 13, 13, 58, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 59, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 60,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 60
+};
+
+static RE_UINT16 re_general_category_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 7, 15, 16, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 25, 26, 27,
+ 28, 29, 17, 7, 30, 7, 31, 7, 7, 32, 33, 17, 34, 35, 36, 37,
+ 38, 39, 40, 41, 39, 39, 42, 43, 44, 45, 46, 39, 39, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 54, 101, 102, 103, 54, 104, 105, 106, 107, 108, 109, 110, 54,
+ 39, 111, 112, 113, 114, 28, 115, 116, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 117, 39, 118, 119, 120, 39, 121, 39, 122, 123, 124, 28, 28, 125,
+ 126, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 127, 128, 39, 39, 129, 130, 131, 132, 133, 39, 134, 135, 136,
+ 137, 39, 138, 139, 140, 141, 39, 142, 143, 144, 145, 146, 39, 147, 148, 149,
+ 150, 39, 151, 152, 153, 154, 155, 54, 156, 157, 158, 159, 160, 161, 39, 162,
+ 39, 163, 164, 165, 166, 167, 168, 169, 17, 170, 171, 172, 173, 171, 22, 174,
+ 7, 7, 7, 7, 175, 7, 7, 7, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 200, 200, 200, 200, 200, 200, 200, 201, 202, 149, 203, 204, 205, 206, 207,
+ 149, 208, 209, 210, 211, 149, 149, 212, 149, 149, 149, 149, 149, 213, 214, 215,
+ 149, 149, 149, 216, 149, 149, 149, 149, 149, 149, 149, 217, 218, 149, 219, 220,
+ 149, 149, 149, 149, 149, 149, 149, 149, 200, 200, 200, 200, 221, 200, 222, 223,
+ 200, 200, 200, 200, 200, 200, 200, 200, 149, 224, 225, 226, 227, 149, 149, 149,
+ 28, 228, 229, 230, 7, 7, 7, 231, 17, 232, 39, 233, 234, 235, 235, 22,
+ 236, 237, 238, 54, 239, 149, 149, 240, 149, 149, 149, 149, 149, 149, 241, 242,
+ 243, 244, 98, 39, 245, 126, 39, 246, 247, 248, 39, 39, 249, 39, 149, 250,
+ 251, 252, 253, 149, 252, 254, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 149, 149,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 255,
+ 256, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 257, 149, 258, 165, 39, 39, 39, 39, 39, 39, 39, 39,
+ 259, 260, 7, 261, 262, 39, 39, 263, 264, 265, 7, 266, 267, 268, 269, 270,
+ 271, 272, 39, 273, 274, 275, 276, 277, 48, 278, 279, 255, 58, 280, 281, 282,
+ 39, 283, 284, 285, 39, 286, 287, 288, 289, 290, 291, 292, 17, 17, 39, 293,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 294, 295, 296,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 299, 39, 39, 300, 54, 301, 302, 303, 39, 39, 304, 305, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 306, 307, 39, 308, 39, 309, 310,
+ 311, 312, 313, 314, 39, 39, 39, 315, 316, 2, 317, 318, 319, 143, 320, 321,
+ 322, 323, 324, 54, 39, 39, 39, 325, 326, 327, 195, 328, 329, 330, 331, 332,
+ 54, 54, 54, 54, 255, 39, 333, 334, 39, 335, 336, 337, 338, 39, 339, 54,
+ 28, 340, 341, 39, 342, 343, 344, 345, 39, 346, 39, 347, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 234, 142, 309, 54, 54, 54, 54,
+ 348, 349, 350, 351, 143, 352, 54, 353, 354, 355, 54, 54, 39, 356, 357, 210,
+ 358, 359, 360, 361, 362, 54, 363, 364, 39, 365, 366, 367, 368, 369, 54, 54,
+ 39, 39, 370, 54, 28, 371, 17, 372, 39, 373, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 374, 39, 375, 54, 54, 362, 376, 377, 54, 54, 307, 378, 234,
+ 379, 380, 381, 382, 160, 383, 384, 385, 386, 387, 388, 389, 160, 390, 391, 392,
+ 393, 394, 54, 54, 395, 396, 397, 398, 399, 400, 401, 402, 54, 54, 54, 54,
+ 39, 403, 404, 405, 39, 406, 407, 54, 54, 54, 54, 54, 39, 408, 409, 54,
+ 39, 410, 411, 412, 39, 413, 414, 54, 122, 415, 54, 54, 54, 54, 54, 54,
+ 39, 416, 54, 54, 54, 28, 17, 417, 418, 419, 420, 54, 54, 421, 422, 423,
+ 424, 425, 426, 39, 427, 428, 39, 139, 54, 54, 54, 54, 54, 54, 54, 54,
+ 429, 430, 431, 432, 433, 434, 54, 54, 435, 436, 437, 438, 439, 414, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 440, 54, 54, 54, 54, 54, 441, 442, 443,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 300, 54, 54, 54,
+ 195, 195, 195, 444, 39, 39, 39, 39, 39, 39, 445, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 446, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 447, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 139, 143, 448, 54, 54, 307, 449, 39, 450, 451, 452, 453, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 28, 17, 454, 54, 54, 54, 39, 39, 455, 456, 457, 54, 54, 458,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 459,
+ 39, 39, 39, 39, 39, 39, 142, 54, 370, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 143, 54, 460, 461, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 296, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 462, 463, 464, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 149, 149, 149, 149, 149, 149, 149, 241, 149, 465, 149, 466, 467, 468, 149, 469,
+ 149, 149, 470, 54, 54, 54, 54, 471, 149, 149, 472, 473, 54, 54, 54, 54,
+ 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 474, 475, 487,
+ 477, 488, 489, 490, 481, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 22, 502, 22, 503, 504, 505, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 506, 507, 54, 54, 54, 54, 54, 54, 39, 508, 509, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 39, 510, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 511, 54, 28, 512, 513, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 514, 210, 515, 54, 54, 516, 517, 54, 54, 54, 54, 54, 54,
+ 518, 519, 520, 521, 522, 523, 54, 524, 54, 54, 54, 54, 54, 54, 54, 54,
+ 149, 525, 149, 149, 240, 526, 527, 241, 528, 149, 149, 149, 149, 529, 54, 530,
+ 531, 532, 533, 534, 54, 54, 54, 54, 149, 149, 149, 149, 149, 149, 149, 535,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 536, 537, 149, 149, 149, 240, 149, 149, 538, 539,
+ 525, 149, 540, 149, 541, 542, 54, 54, 149, 149, 149, 543, 149, 149, 544, 149,
+ 149, 149, 240, 545, 546, 547, 548, 54, 149, 149, 149, 149, 549, 149, 209, 550,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 342, 54, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 551, 39, 39, 39, 39, 39, 39,
+ 342, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 552, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 553,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 342, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 53, 54, 54, 54, 54, 54,
+ 554, 555, 555, 555, 54, 54, 54, 54, 22, 22, 22, 22, 22, 22, 22, 556,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 557
+};
+
+static RE_UINT8 re_general_category_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 3, 3, 3, 4, 3, 3, 3, 5, 6, 3, 7, 3, 8, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 7, 7, 7, 3,
+ 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 3, 6, 11, 12,
+ 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 7, 6, 7, 1,
+ 2, 3, 4, 4, 4, 4, 14, 3, 11, 14, 15, 16, 7, 17, 14, 11,
+ 14, 7, 18, 18, 11, 13, 3, 3, 11, 18, 15, 19, 18, 18, 18, 3,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 7, 10, 10, 10, 10, 10, 10, 10, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, 10, 13, 10, 13, 10,
+ 13, 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 10, 13, 10, 13, 10, 13, 13,
+ 13, 10, 10, 13, 10, 13, 10, 10, 13, 10, 10, 10, 13, 13, 10, 10,
+ 10, 10, 13, 10, 10, 13, 10, 10, 10, 13, 13, 13, 10, 10, 13, 10,
+ 10, 13, 10, 13, 10, 13, 10, 10, 13, 10, 13, 13, 10, 13, 10, 10,
+ 13, 10, 10, 10, 13, 10, 13, 10, 10, 13, 13, 15, 10, 13, 13, 13,
+ 15, 15, 15, 15, 10, 20, 13, 10, 20, 13, 10, 20, 13, 10, 13, 10,
+ 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 10, 20, 13, 10, 13, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 13, 13, 13, 13, 13, 13, 10, 10, 13, 10, 10, 13,
+ 13, 10, 13, 10, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 15, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 11, 11, 11, 11, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 21, 21, 21, 21, 21, 11, 11, 11, 11, 11, 11, 11, 21, 11, 21, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 10, 13, 10, 13, 21, 11, 10, 13, 0, 0, 21, 13, 13, 13, 3, 10,
+ 0, 0, 0, 0, 11, 11, 10, 3, 10, 10, 10, 0, 10, 0, 10, 10,
+ 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10,
+ 13, 13, 10, 10, 10, 13, 13, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 13, 13, 13, 10, 13, 7, 10, 13, 10, 10, 13, 13, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 13, 14, 22, 22, 22, 22, 22, 23, 23, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 21, 3, 3, 3, 3, 3, 3,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 3, 8, 0, 0, 14, 14, 4,
+ 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 8, 22,
+ 3, 22, 22, 3, 22, 22, 3, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15,
+ 15, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 7, 7, 7, 3, 3, 4, 3, 3, 14, 14,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 3, 17, 0, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 15,
+ 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 3, 15, 22, 22, 22, 22, 22, 22, 22, 17, 14, 22,
+ 22, 22, 22, 22, 22, 21, 21, 22, 22, 14, 22, 22, 22, 22, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 14, 14, 15,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 17,
+ 15, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 21, 21, 14, 3, 3, 3, 21, 0, 0, 22, 4, 4,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 21, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 21, 22, 22, 22, 21, 22, 22, 22, 22, 22, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 0, 0, 3, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 24, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24, 22, 24, 24,
+ 15, 22, 22, 22, 22, 22, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 22, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 3, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 0, 0, 0, 15, 15, 15, 15, 0, 0, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 0, 0, 24, 24, 0, 0, 24, 24, 22, 15, 0,
+ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 15, 15, 0, 15,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 15, 15, 4, 4, 18, 18, 18, 18, 18, 18, 14, 4, 15, 3, 22, 0,
+ 0, 22, 22, 24, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 0, 15, 15, 0, 0, 22, 0, 24, 24,
+ 24, 22, 22, 0, 0, 0, 0, 22, 22, 0, 0, 22, 22, 22, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 15, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 22, 22, 15, 15, 15, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 22, 22, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15,
+ 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 22, 0, 22, 22, 24, 0, 24, 24, 22, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 3, 4, 0, 0, 0, 0, 0, 0, 0, 15, 22, 22, 22, 22, 22, 22,
+ 0, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 22, 15, 24, 22,
+ 24, 22, 22, 22, 22, 0, 0, 24, 24, 0, 0, 24, 24, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 24, 0, 0, 0, 0, 15, 15, 0, 15,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 15, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 22, 15, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, 15, 0, 15, 15,
+ 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 0, 0, 0, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 24, 24,
+ 22, 24, 24, 0, 0, 0, 24, 24, 24, 0, 24, 24, 24, 22, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 18, 18, 18, 14, 14, 14, 14, 14, 14, 4, 14, 0, 0, 0, 0, 0,
+ 22, 24, 24, 24, 22, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 22, 22,
+ 22, 24, 24, 24, 24, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 0, 15, 15, 15, 0, 0, 0, 0, 0,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 3, 18, 18, 18, 18, 18, 18, 18, 14,
+ 15, 22, 24, 24, 3, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 22, 15, 24, 22,
+ 24, 24, 24, 24, 24, 0, 22, 24, 24, 0, 24, 24, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 15, 0,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 24, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 15, 24, 24,
+ 24, 22, 22, 22, 22, 0, 24, 24, 24, 0, 24, 24, 24, 22, 15, 14,
+ 0, 0, 0, 0, 15, 15, 15, 24, 18, 18, 18, 18, 18, 18, 18, 15,
+ 15, 15, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 15, 15, 15, 15, 15, 15,
+ 0, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 22, 0, 0, 0, 0, 24,
+ 24, 24, 22, 22, 22, 0, 22, 0, 24, 24, 24, 24, 24, 24, 24, 24,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 24, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 15, 15, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 4,
+ 15, 15, 15, 15, 15, 15, 21, 22, 22, 22, 22, 22, 22, 22, 22, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 0, 0, 0, 0,
+ 0, 15, 15, 0, 15, 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 15, 0, 0,
+ 15, 15, 15, 15, 15, 0, 21, 0, 22, 22, 22, 22, 22, 22, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 15, 15, 15, 15,
+ 15, 14, 14, 14, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 14, 3, 14, 14, 14, 22, 22, 14, 14, 14, 14, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 14, 22, 14, 22, 14, 22, 5, 6, 5, 6, 24, 24,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24,
+ 22, 22, 22, 22, 22, 3, 22, 22, 15, 15, 15, 15, 15, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 14, 14,
+ 14, 14, 14, 14, 14, 14, 22, 14, 14, 14, 14, 14, 14, 0, 14, 14,
+ 3, 3, 3, 3, 3, 14, 14, 14, 14, 3, 3, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 22, 22, 22,
+ 22, 24, 22, 22, 22, 22, 22, 22, 24, 22, 22, 24, 24, 22, 22, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 24, 24, 22, 22, 15, 15, 15, 15, 22, 22,
+ 22, 15, 24, 24, 24, 15, 15, 24, 24, 24, 24, 24, 24, 24, 15, 15,
+ 15, 22, 22, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 24, 24, 22, 22, 24, 24, 24, 24, 24, 24, 22, 15, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24, 24, 24, 22, 14, 14,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 3, 21, 13, 13, 13,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 22, 22, 22,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 0, 0, 13, 13, 13, 13, 13, 13, 0, 0,
+ 8, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 3, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 5, 6, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 25, 25,
+ 25, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 15, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 22, 22, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15,
+ 15, 0, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 22, 22, 24, 22, 22, 22, 22, 22, 22, 22, 24, 24,
+ 24, 24, 24, 24, 24, 24, 22, 24, 24, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 3, 3, 3, 21, 3, 3, 3, 4, 15, 22, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 22, 22, 22, 17, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 15, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
+ 22, 22, 22, 24, 24, 24, 24, 22, 22, 24, 24, 24, 0, 0, 0, 0,
+ 24, 24, 22, 24, 24, 24, 24, 24, 24, 22, 22, 22, 0, 0, 0, 0,
+ 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 0, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 22, 22, 24, 24, 22, 0, 0, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 24, 22, 24, 22, 22, 22, 22, 22, 22, 22, 0,
+ 22, 24, 22, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 21, 3, 3, 3, 3, 3, 3, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 22,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 22, 24, 22, 22, 22, 22, 22, 24, 22, 24, 24, 24,
+ 24, 24, 22, 24, 24, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3,
+ 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 22, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 24, 22, 22, 22, 22, 24, 24, 22, 22, 24, 22, 22, 22, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 24, 22, 22, 24, 24, 24, 22, 24, 22,
+ 22, 22, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3,
+ 15, 15, 15, 15, 24, 24, 24, 24, 24, 24, 24, 24, 22, 22, 22, 22,
+ 22, 22, 22, 22, 24, 24, 22, 22, 0, 0, 0, 3, 3, 3, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 15, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 21, 21, 21, 21, 21, 21, 3, 3,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 3, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 24, 22, 22, 22, 22, 22, 22, 22, 15, 15, 15, 15, 22, 15, 15,
+ 15, 15, 15, 15, 22, 15, 15, 24, 22, 22, 15, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 21, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21, 21,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 10, 0, 10, 0, 10, 0, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 13, 13, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 13, 11,
+ 11, 11, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 11, 11,
+ 13, 13, 13, 13, 0, 0, 13, 13, 10, 10, 10, 10, 0, 11, 11, 11,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 11, 11, 11,
+ 0, 0, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 11, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 17,
+ 8, 8, 8, 8, 8, 8, 3, 3, 16, 19, 5, 16, 16, 19, 5, 16,
+ 3, 3, 3, 3, 3, 3, 3, 3, 26, 27, 17, 17, 17, 17, 17, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 16, 19, 3, 3, 3, 3, 12,
+ 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
+ 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 18, 21, 0, 0, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 21,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23,
+ 23, 22, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 10, 14, 14, 14, 14, 10, 14, 14, 13, 10, 10, 10, 13, 13,
+ 10, 10, 10, 13, 14, 10, 14, 14, 7, 10, 10, 10, 10, 10, 14, 14,
+ 14, 14, 14, 14, 10, 14, 10, 14, 10, 14, 10, 10, 10, 10, 14, 13,
+ 10, 10, 10, 10, 13, 15, 15, 15, 15, 13, 14, 14, 13, 13, 10, 10,
+ 7, 7, 7, 7, 7, 10, 13, 13, 13, 13, 14, 7, 14, 14, 13, 14,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 10, 13, 25, 25, 25, 25, 18, 14, 14, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14,
+ 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7,
+ 14, 14, 7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 7, 14, 14, 14, 14, 14, 14, 14, 5, 6, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7,
+ 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6,
+ 5, 6, 5, 6, 5, 6, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 7, 7, 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 7, 7,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 14, 14, 7, 7, 7, 7, 7, 7, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 10, 13, 10, 10, 10, 13, 13, 10, 13, 10, 13, 10, 13, 10, 10, 10,
+ 10, 13, 10, 13, 13, 10, 13, 13, 13, 13, 13, 13, 21, 21, 10, 10,
+ 10, 13, 10, 13, 13, 14, 14, 14, 14, 14, 14, 10, 13, 10, 13, 22,
+ 22, 22, 10, 13, 0, 0, 0, 0, 0, 3, 3, 3, 3, 18, 3, 3,
+ 13, 13, 13, 13, 13, 13, 0, 13, 0, 0, 0, 0, 0, 13, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 21,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 3, 3, 16, 19, 16, 19, 3, 3, 3, 16, 19, 3, 16, 19, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 8, 3, 3, 8, 3, 16, 19, 3, 3,
+ 16, 19, 5, 6, 5, 6, 5, 6, 5, 6, 3, 3, 3, 3, 3, 21,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 3, 3, 3, 3,
+ 8, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 14, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 2, 3, 3, 3, 14, 21, 15, 25, 5, 6, 5, 6, 5, 6, 5, 6,
+ 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 8, 5, 6, 6,
+ 14, 25, 25, 25, 25, 25, 25, 25, 25, 25, 22, 22, 22, 22, 24, 24,
+ 8, 21, 21, 21, 21, 21, 14, 14, 25, 25, 25, 21, 15, 3, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 22, 22, 11, 11, 21, 21, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 21, 21, 21, 15,
+ 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
+ 14, 14, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18,
+ 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 21, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 15, 22,
+ 23, 23, 23, 3, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 3, 21,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 21, 21, 22, 22,
+ 15, 15, 15, 15, 15, 15, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 22, 22, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 11, 11, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 13, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 21, 13, 13, 13, 13, 13, 13, 13, 13, 10, 13, 10, 13, 10, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 21, 11, 11, 10, 13, 10, 13, 15,
+ 10, 13, 10, 13, 13, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 10, 10, 10, 10, 13,
+ 10, 10, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13,
+ 0, 0, 10, 13, 10, 10, 10, 10, 13, 10, 13, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 13, 15, 21, 21, 13, 15, 15, 15, 15, 15,
+ 15, 15, 22, 15, 15, 15, 22, 15, 15, 15, 15, 22, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 24, 24, 22, 22, 24, 14, 14, 14, 14, 22, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 14, 14, 4, 14, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 15, 15, 15, 15, 15, 15, 3, 3, 3, 15, 3, 15, 15, 22,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 24, 24, 22, 22, 22, 22, 24, 24, 22, 22, 24, 24,
+ 24, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3,
+ 15, 15, 15, 15, 15, 22, 21, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 24,
+ 24, 22, 22, 24, 24, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 22, 15, 15, 15, 15, 15, 15, 15, 15, 22, 24, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 3, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 21, 15, 15, 15, 15, 15, 15, 14, 14, 14, 15, 24, 22, 24, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 22, 15, 22, 22, 22, 15, 15, 22, 22, 15, 15, 15, 15, 15, 22, 22,
+ 15, 22, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 21, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 22, 22, 24, 24,
+ 3, 3, 15, 21, 21, 24, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 0,
+ 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 21, 21, 21, 21,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 11, 11, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 15, 15, 15, 24, 24, 22, 24, 24, 22, 24, 24, 3, 24, 22, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 15, 22, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 0,
+ 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 6, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 4, 14, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 3, 3, 3, 3, 3, 3, 3, 5, 6, 3, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 3, 8, 8, 12, 12, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 6, 5, 6, 5, 6, 3, 3, 5, 6, 3, 3, 3, 3, 12, 12, 12,
+ 3, 3, 3, 0, 3, 3, 3, 3, 8, 5, 6, 5, 6, 5, 6, 3,
+ 3, 3, 7, 8, 7, 7, 7, 0, 3, 4, 3, 3, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 17,
+ 0, 3, 3, 3, 4, 3, 3, 3, 5, 6, 3, 7, 3, 8, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 7, 7, 7, 3,
+ 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 7, 6, 7, 5,
+ 6, 3, 5, 6, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 21, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 21, 21,
+ 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15,
+ 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 0, 0, 0,
+ 4, 4, 7, 11, 14, 4, 4, 0, 14, 7, 7, 7, 7, 14, 14, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 14, 14, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
+ 3, 3, 3, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 14, 14, 14, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0,
+ 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 25, 15, 15, 15, 15, 15, 15, 15, 15, 25, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 3,
+ 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 3, 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 0, 0, 15, 0, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 3, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 14, 14, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 0, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 18, 18, 18, 18, 18, 18, 0, 0, 0, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 18, 18, 15, 15,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 22, 22, 22, 0, 22, 22, 0, 0, 0, 0, 0, 22, 22, 22, 22,
+ 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 22, 22, 22, 0, 0, 0, 0, 22,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 18, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 22, 22, 0, 0, 0, 0, 18, 18, 18, 18, 18,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18,
+ 15, 15, 15, 15, 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 22, 22, 8, 0, 0,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 18, 18, 18, 18, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 22, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 22, 22, 22, 22, 24, 24, 22, 22, 3, 3, 17, 3, 3,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 24, 22, 22, 22,
+ 22, 22, 22, 22, 22, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 3, 3, 3, 3, 15, 24, 24, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24,
+ 24, 15, 15, 15, 15, 3, 3, 3, 3, 22, 22, 22, 22, 3, 24, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 3, 15, 3, 3, 3,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 24, 22,
+ 22, 22, 24, 24, 22, 24, 22, 22, 3, 3, 3, 3, 3, 3, 22, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 22, 22, 24, 24, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15,
+ 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 22, 22, 15, 24, 24,
+ 22, 24, 24, 24, 24, 0, 0, 24, 24, 0, 0, 24, 24, 24, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 15, 15, 15,
+ 15, 15, 24, 24, 0, 0, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0,
+ 22, 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22,
+ 24, 24, 22, 22, 22, 24, 22, 15, 15, 15, 15, 3, 3, 3, 3, 3,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 0, 3, 22, 15,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 24, 22, 24, 24, 24, 24, 22,
+ 22, 24, 22, 22, 15, 15, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24,
+ 24, 24, 22, 22, 22, 22, 0, 0, 24, 24, 24, 24, 22, 22, 24, 22,
+ 22, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 22, 22, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 22, 24, 22,
+ 22, 3, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 24, 22, 24, 24,
+ 22, 22, 22, 22, 22, 22, 24, 22, 15, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 22, 22, 22, 22, 24, 22, 22, 22, 22, 22, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 3, 3, 3, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 24, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 22, 3, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 0, 0, 15, 15, 15, 15,
+ 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 24, 24, 24, 24, 24, 24, 0, 24, 24, 0, 0, 22, 22, 24, 22, 15,
+ 24, 15, 24, 22, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 24, 24, 24, 22, 22, 22, 22, 0, 0, 22, 22, 24, 24, 24, 24,
+ 22, 15, 3, 15, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 22, 22, 22, 22, 22, 24, 15, 22, 22, 22, 22, 3,
+ 3, 3, 3, 3, 3, 3, 3, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 22, 22, 22, 22, 22, 22, 24, 24, 22, 22, 22, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 24, 22, 22, 3, 3, 3, 15, 3, 3,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24,
+ 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 24, 22,
+ 15, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0,
+ 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 0, 24, 22, 22, 22, 22, 22, 22,
+ 22, 24, 22, 22, 24, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 0, 22, 22, 0, 22,
+ 22, 22, 22, 22, 22, 22, 15, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 24, 24, 24, 24, 24, 0,
+ 22, 22, 0, 24, 24, 22, 24, 22, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 22, 22, 24, 24, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 4, 4, 4,
+ 4, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0,
+ 22, 22, 22, 22, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 22, 22, 22, 22, 22, 22, 22, 3, 3, 3, 3, 3, 14, 14, 14, 14,
+ 21, 21, 21, 21, 3, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 18, 18, 18, 18, 18,
+ 18, 18, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 3, 3, 3, 3, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 22,
+ 15, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 22,
+ 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 3, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 14, 22, 22, 3,
+ 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 24, 24, 22, 22, 22, 14, 14, 14, 24, 24, 24,
+ 24, 24, 24, 17, 17, 17, 17, 17, 17, 17, 17, 22, 22, 22, 22, 22,
+ 22, 22, 22, 14, 14, 22, 22, 22, 22, 22, 22, 22, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 22, 22, 22, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 22, 22, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 0, 10, 10,
+ 0, 0, 10, 0, 0, 10, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10,
+ 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 10, 10, 0, 10, 10, 10, 10, 0, 0, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 0, 10, 10, 10, 10, 0,
+ 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 10, 10, 10, 10, 10, 10,
+ 10, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13,
+ 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7,
+ 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 10, 13, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 14, 14, 14, 14, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 14, 14, 14,
+ 14, 14, 14, 14, 14, 22, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 22, 14, 14, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22,
+ 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 22, 22, 22, 22, 22,
+ 22, 22, 0, 22, 22, 0, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 15, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 22, 22, 22,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 4,
+ 15, 15, 15, 15, 15, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 22, 22, 22, 22, 22, 22, 22, 21, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 18, 18, 18,
+ 4, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0,
+ 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0, 15, 0, 0, 0, 0,
+ 0, 0, 15, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 15, 15, 15,
+ 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15,
+ 0, 15, 15, 0, 15, 0, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15,
+ 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0, 0
+};
+
+RE_UINT32 re_get_general_category(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_general_category_table_1[field_2];
+ v = re_general_category_table_2[(v << 5) | field_1];
+ v = re_general_category_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Graph. */
+static RE_UINT8 re_graph_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 17, 18, 18, 13, 13, 13, 13, 13, 13, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 18, 18, 13, 31, 18, 18,
+ 18, 32, 18, 18, 18, 18, 18, 18, 18, 18, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 18, 38,
+ 18, 18, 18, 18, 39, 40, 41, 18, 42, 18, 43, 44, 45, 46, 47, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 48, 13, 13, 13, 49, 50, 13,
+ 13, 13, 13, 51, 13, 13, 13, 13, 13, 13, 52, 18, 18, 18, 53, 18,
+ 13, 13, 13, 13, 54, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 55, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56
+};
+
+static RE_UINT16 re_graph_table_2[] = {
+ 0, 1, 2, 3, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 5, 6, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 8, 2, 9, 2, 10, 11,
+ 12, 2, 2, 2, 2, 2, 2, 2, 13, 2, 14, 2, 2, 15, 2, 16,
+ 2, 17, 18, 19, 0, 20, 21, 2, 2, 2, 2, 2, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 31, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 41, 45, 46, 47, 41, 2, 48, 49, 50, 51, 52, 53,
+ 1, 54, 55, 0, 56, 57, 58, 0, 2, 2, 59, 60, 61, 12, 62, 0,
+ 2, 2, 2, 2, 2, 2, 63, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 64, 2, 65, 66, 67, 2, 68, 2, 16, 69, 70, 2, 2, 71,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 72, 2, 2, 73, 74, 75, 76, 77, 2, 2, 78, 79,
+ 80, 2, 2, 73, 2, 81, 2, 82, 3, 83, 84, 85, 2, 86, 87, 2,
+ 88, 2, 3, 89, 79, 90, 91, 0, 2, 2, 86, 69, 2, 2, 2, 92,
+ 2, 93, 94, 2, 95, 16, 10, 96, 2, 2, 2, 2, 2, 2, 2, 97,
+ 2, 2, 2, 2, 2, 2, 2, 2, 71, 2, 98, 78, 2, 20, 99, 100,
+ 101, 102, 3, 103, 104, 2, 105, 106, 2, 2, 2, 2, 86, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 107, 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 108, 109, 2, 2, 2,
+ 2, 110, 3, 2, 2, 2, 2, 111, 2, 63, 2, 112, 75, 113, 113, 2,
+ 2, 2, 114, 0, 97, 2, 2, 76, 2, 2, 2, 2, 2, 2, 82, 115,
+ 1, 2, 1, 2, 8, 2, 2, 2, 116, 7, 2, 2, 110, 2, 2, 117,
+ 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69,
+ 2, 2, 2, 2, 118, 2, 119, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 120, 2, 2, 2, 2, 2, 121, 2, 2, 2, 2, 2, 2, 122, 123,
+ 2, 124, 2, 121, 2, 2, 125, 2, 2, 2, 126, 69, 2, 2, 127, 3,
+ 2, 75, 128, 2, 2, 2, 129, 75, 130, 131, 2, 86, 2, 2, 2, 132,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 117, 133, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 90, 2, 2, 70, 0, 134, 135, 136, 2, 2, 2, 137, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 105, 2, 138, 2, 139, 140,
+ 70, 2, 141, 142, 2, 2, 2, 89, 1, 2, 2, 2, 2, 3, 143, 144,
+ 145, 146, 147, 0, 2, 2, 2, 96, 148, 149, 2, 2, 104, 91, 105, 78,
+ 0, 0, 0, 0, 69, 2, 106, 55, 2, 150, 81, 96, 151, 2, 152, 0,
+ 2, 2, 2, 2, 78, 153, 154, 55, 2, 10, 2, 155, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 75, 82, 139, 0, 0, 0, 0,
+ 156, 157, 109, 2, 3, 158, 0, 159, 160, 161, 0, 0, 2, 162, 138, 2,
+ 163, 164, 165, 2, 2, 0, 2, 166, 2, 167, 168, 169, 170, 171, 0, 0,
+ 2, 2, 172, 0, 2, 114, 2, 173, 2, 174, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 2, 175, 0, 0, 2, 10, 70, 0, 0, 105, 120, 75,
+ 2, 2, 176, 177, 2, 2, 178, 179, 2, 20, 10, 75, 2, 2, 2, 180,
+ 181, 3, 0, 0, 182, 153, 2, 183, 22, 184, 185, 186, 0, 0, 0, 0,
+ 2, 2, 187, 188, 2, 2, 174, 0, 0, 0, 0, 0, 2, 168, 78, 0,
+ 2, 2, 189, 190, 2, 73, 191, 0, 16, 86, 0, 0, 0, 0, 0, 0,
+ 2, 55, 0, 0, 0, 2, 2, 192, 193, 194, 195, 0, 0, 196, 4, 197,
+ 2, 2, 10, 2, 2, 198, 2, 73, 0, 0, 0, 0, 0, 0, 0, 0,
+ 199, 200, 201, 118, 138, 202, 0, 0, 203, 204, 174, 205, 206, 191, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 207, 2, 208,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 70, 0, 0, 0,
+ 2, 2, 2, 209, 2, 2, 2, 2, 2, 2, 210, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 73, 3, 212, 0, 0, 105, 213, 2, 2, 214, 215, 216, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 96, 0, 0, 0, 2, 2, 217, 2, 218, 0, 0, 219,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 121,
+ 2, 2, 2, 2, 2, 2, 82, 0, 172, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 220, 221, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 222, 223, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 82, 2, 224, 2, 2, 2, 2, 2, 172,
+ 2, 2, 225, 0, 0, 0, 0, 76, 2, 2, 75, 73, 0, 0, 0, 0,
+ 2, 2, 20, 2, 12, 226, 227, 2, 228, 229, 230, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 231, 2, 2, 2, 2, 2, 2, 2, 2, 232, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 235, 236, 0, 0, 0, 0, 0, 0, 2, 237, 212, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 161, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 238, 0, 2, 2, 239, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 240, 2, 241, 0, 0, 1, 78, 0, 0, 0, 0, 0, 0,
+ 227, 242, 243, 244, 245, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 86, 2, 2, 76, 248, 249, 82, 2, 2, 2, 2, 2, 250, 0, 251,
+ 252, 55, 253, 225, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 121, 254, 2, 2, 2, 76, 2, 2, 73, 120,
+ 86, 2, 174, 2, 10, 255, 0, 0, 2, 2, 2, 256, 2, 2, 145, 2,
+ 2, 2, 76, 257, 119, 258, 259, 0, 2, 2, 2, 2, 141, 2, 19, 260,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 78, 0, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 241, 2, 2, 2, 2, 2, 2,
+ 78, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 261, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 91,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 0, 0, 0, 0, 0,
+ 262, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 216,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78
+};
+
+static RE_UINT8 re_graph_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127,
+ 255, 255, 255, 252, 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 254, 255,
+ 255, 255, 127, 254, 255, 231, 254, 255, 255, 0, 255, 255, 255, 135, 31, 0,
+ 255, 255, 255, 223, 255, 191, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0,
+ 255, 255, 255, 231, 255, 63, 255, 127, 255, 255, 255, 79, 255, 7, 0, 0,
+ 255, 255, 223, 255, 255, 0, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243,
+ 159, 121, 128, 176, 207, 255, 255, 127, 238, 135, 249, 255, 255, 253, 109, 211,
+ 135, 57, 2, 94, 192, 255, 127, 0, 238, 191, 251, 255, 255, 253, 237, 243,
+ 191, 59, 1, 0, 207, 255, 3, 254, 238, 159, 249, 255, 159, 57, 224, 176,
+ 207, 255, 255, 0, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
+ 192, 255, 255, 7, 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7,
+ 207, 255, 128, 255, 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0,
+ 223, 253, 240, 255, 207, 255, 255, 255, 238, 255, 127, 252, 255, 255, 251, 47,
+ 127, 132, 95, 255, 192, 255, 28, 0, 255, 255, 255, 135, 255, 255, 255, 15,
+ 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243, 255, 254, 255, 255,
+ 255, 31, 254, 255, 255, 255, 255, 254, 255, 223, 255, 7, 191, 32, 255, 255,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 31, 255, 255, 255, 3, 255, 255, 63, 63,
+ 254, 255, 255, 31, 255, 255, 255, 1, 255, 223, 31, 0, 255, 255, 127, 0,
+ 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 255, 63, 255, 3, 255, 3,
+ 255, 127, 255, 3, 255, 7, 255, 255, 255, 255, 63, 0, 255, 15, 255, 15,
+ 241, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199,
+ 255, 255, 255, 207, 255, 255, 255, 159, 255, 63, 255, 255, 1, 0, 0, 0,
+ 255, 255, 15, 240, 255, 255, 255, 248, 255, 227, 255, 255, 255, 1, 255, 255,
+ 255, 255, 255, 7, 255, 255, 255, 251, 63, 63, 255, 170, 223, 255, 207, 239,
+ 255, 255, 220, 127, 0, 248, 255, 255, 255, 124, 255, 255, 223, 255, 243, 255,
+ 255, 127, 255, 31, 0, 0, 255, 255, 255, 255, 1, 0, 127, 0, 0, 0,
+ 255, 255, 207, 255, 255, 255, 191, 255, 255, 127, 255, 255, 255, 255, 15, 254,
+ 255, 128, 1, 128, 127, 127, 127, 127, 255, 255, 7, 0, 0, 0, 255, 15,
+ 224, 255, 255, 255, 15, 0, 255, 255, 255, 31, 255, 255, 127, 0, 255, 255,
+ 255, 15, 0, 0, 255, 255, 255, 0, 252, 7, 0, 0, 0, 0, 224, 255,
+ 255, 31, 255, 3, 63, 192, 255, 3, 255, 255, 15, 128, 255, 191, 255, 195,
+ 255, 63, 255, 243, 7, 0, 0, 248, 126, 126, 126, 0, 127, 127, 255, 255,
+ 255, 63, 255, 3, 127, 248, 255, 255, 127, 0, 248, 224, 255, 255, 127, 95,
+ 219, 255, 255, 255, 3, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0,
+ 0, 0, 255, 63, 255, 255, 247, 255, 127, 15, 223, 255, 252, 252, 252, 28,
+ 127, 127, 0, 62, 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63,
+ 135, 255, 255, 255, 255, 255, 143, 255, 15, 224, 255, 255, 255, 255, 255, 191,
+ 15, 255, 63, 0, 255, 3, 255, 255, 255, 255, 15, 255, 15, 128, 0, 0,
+ 63, 253, 255, 255, 255, 255, 191, 145, 128, 255, 0, 0, 255, 255, 55, 248,
+ 255, 255, 255, 143, 255, 255, 255, 131, 255, 255, 255, 240, 111, 240, 239, 254,
+ 255, 255, 63, 135, 255, 1, 255, 1, 127, 248, 127, 0, 255, 255, 63, 254,
+ 255, 255, 63, 255, 255, 255, 7, 255, 255, 255, 3, 30, 0, 254, 0, 0,
+ 255, 1, 0, 0, 255, 255, 7, 252, 255, 0, 255, 3, 255, 59, 3, 0,
+ 255, 63, 252, 255, 255, 255, 0, 128, 3, 32, 255, 255, 255, 1, 255, 3,
+ 254, 255, 31, 0, 255, 255, 251, 255, 127, 189, 255, 191, 255, 7, 255, 3,
+ 255, 253, 237, 251, 159, 57, 129, 224, 207, 31, 31, 0, 255, 255, 255, 239,
+ 3, 0, 0, 0, 31, 0, 255, 3, 255, 31, 0, 0, 255, 3, 0, 0,
+ 255, 255, 7, 128, 127, 242, 111, 255, 255, 255, 191, 249, 127, 0, 255, 3,
+ 255, 252, 255, 255, 31, 0, 0, 0, 7, 0, 0, 0, 255, 253, 255, 255,
+ 255, 255, 127, 255, 63, 0, 255, 255, 255, 254, 127, 0, 127, 251, 255, 255,
+ 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1, 0, 0, 1, 0,
+ 255, 255, 3, 128, 255, 127, 31, 0, 15, 0, 0, 0, 255, 127, 255, 1,
+ 255, 195, 0, 0, 255, 63, 63, 0, 63, 0, 255, 251, 251, 255, 255, 224,
+ 255, 255, 0, 0, 255, 135, 255, 255, 255, 128, 255, 255, 31, 0, 3, 0,
+ 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31, 255, 1, 255, 243,
+ 127, 254, 255, 255, 63, 0, 0, 0, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 255, 207, 255, 255, 255, 15, 0, 248, 254, 255, 0, 0, 127, 255, 255, 249,
+ 219, 7, 0, 0, 255, 31, 255, 63, 159, 255, 127, 0, 255, 15, 255, 195,
+ 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 3, 0,
+ 255, 127, 254, 255, 254, 255, 254, 255, 255, 63, 0, 0, 192, 255, 255, 255,
+ 7, 0, 255, 255, 255, 1, 3, 0, 255, 31, 255, 31, 255, 63, 3, 0,
+ 255, 255, 255, 253, 255, 63, 31, 7, 255, 1, 127, 0, 7, 0, 127, 0,
+ 0, 0, 255, 3, 3, 0, 255, 255, 2, 0, 0, 0
+};
+
+RE_UINT32 re_get_graph(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_graph_table_1[field_2];
+ v = re_graph_table_2[(v << 5) | field_1];
+ v = re_graph_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Grapheme_Base. */
+static RE_UINT8 re_grapheme_base_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 18, 18, 13, 31, 18, 18,
+ 18, 32, 18, 18, 18, 18, 18, 18, 18, 18, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 18, 38,
+ 18, 18, 18, 18, 39, 40, 41, 18, 42, 18, 43, 44, 45, 46, 47, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 48, 13, 13, 13, 49, 50, 13,
+ 13, 13, 13, 51, 13, 13, 13, 13, 13, 13, 52, 18, 18, 18, 53, 18,
+ 13, 13, 13, 13, 54, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18
+};
+
+static RE_UINT16 re_grapheme_base_table_2[] = {
+ 0, 1, 1, 2, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 4, 5, 6, 1, 1,
+ 1, 1, 1, 1, 7, 1, 1, 1, 1, 8, 9, 1, 10, 11, 12, 13,
+ 14, 1, 15, 8, 1, 1, 16, 17, 18, 19, 20, 1, 1, 21, 1, 22,
+ 23, 24, 25, 15, 0, 26, 27, 0, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 0, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 0,
+ 1, 81, 82, 83, 84, 1, 85, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 86, 1, 87, 88, 89, 1, 90, 1, 91, 92, 93, 1, 1, 94,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 92, 1, 1, 95, 96, 97, 98, 99, 1, 100, 101, 102,
+ 103, 1, 1, 95, 104, 105, 1, 106, 2, 107, 108, 109, 1, 110, 111, 1,
+ 112, 1, 113, 114, 102, 115, 0, 0, 116, 117, 118, 119, 120, 121, 1, 122,
+ 1, 123, 124, 1, 125, 126, 127, 128, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 94, 1, 129, 130, 1, 26, 131, 132,
+ 133, 134, 1, 135, 136, 1, 0, 0, 1, 1, 1, 1, 110, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 137, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 138, 139, 1, 1, 1,
+ 1, 140, 2, 1, 1, 1, 1, 141, 1, 85, 1, 142, 143, 144, 144, 0,
+ 1, 1, 145, 0, 146, 1, 1, 147, 1, 1, 1, 1, 1, 1, 106, 148,
+ 1, 149, 68, 1, 150, 1, 1, 1, 151, 8, 1, 1, 140, 1, 1, 152,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 92,
+ 1, 1, 1, 1, 153, 1, 154, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 155, 1, 156, 130, 1, 1, 157, 1, 1, 1, 1, 1, 1, 158, 159,
+ 160, 161, 1, 162, 1, 1, 163, 164, 1, 165, 166, 92, 28, 167, 168, 169,
+ 1, 170, 171, 172, 1, 173, 174, 175, 176, 177, 1, 110, 1, 1, 1, 178,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 152, 179, 180,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 181, 1, 1, 93, 0, 182, 183, 184, 1, 1, 1, 185, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 186, 1, 187, 1, 27, 188,
+ 189, 186, 190, 191, 1, 1, 1, 92, 68, 1, 1, 1, 130, 2, 192, 193,
+ 194, 195, 196, 0, 1, 1, 1, 91, 197, 198, 1, 1, 136, 199, 186, 92,
+ 0, 0, 0, 0, 92, 1, 200, 201, 1, 202, 133, 106, 203, 1, 204, 0,
+ 1, 1, 1, 1, 130, 149, 205, 180, 1, 206, 1, 207, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 143, 106, 27, 0, 0, 0, 0,
+ 208, 209, 139, 1, 2, 210, 0, 211, 212, 213, 0, 0, 1, 214, 187, 1,
+ 215, 106, 216, 1, 1, 0, 1, 217, 1, 218, 219, 220, 221, 222, 0, 0,
+ 1, 1, 223, 0, 1, 145, 1, 224, 1, 225, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 1, 226, 0, 0, 1, 206, 227, 0, 0, 186, 155, 143,
+ 228, 162, 229, 19, 120, 230, 231, 232, 28, 233, 206, 234, 120, 235, 236, 237,
+ 238, 239, 0, 0, 240, 149, 2, 241, 44, 242, 243, 244, 0, 0, 0, 0,
+ 1, 162, 245, 246, 1, 247, 248, 0, 0, 0, 0, 0, 1, 249, 201, 0,
+ 1, 250, 251, 252, 1, 253, 254, 0, 91, 255, 0, 0, 0, 0, 0, 0,
+ 1, 256, 0, 0, 0, 1, 1, 257, 258, 259, 260, 0, 0, 261, 262, 263,
+ 264, 265, 266, 1, 267, 268, 1, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+ 269, 270, 271, 153, 19, 272, 0, 0, 273, 200, 274, 275, 276, 254, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 1, 279,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 93, 0, 0, 0,
+ 1, 1, 1, 280, 1, 1, 1, 1, 1, 1, 244, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 95, 2, 282, 0, 0, 186, 283, 1, 284, 285, 286, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 91, 0, 0, 0, 1, 1, 133, 1, 287, 0, 0, 288,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 162,
+ 1, 1, 1, 1, 1, 1, 106, 0, 223, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 289, 290, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 180, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 291, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 106, 1, 293, 1, 294, 295, 296, 1, 223,
+ 1, 1, 297, 0, 0, 0, 0, 147, 1, 1, 143, 95, 0, 0, 0, 0,
+ 1, 1, 26, 1, 298, 299, 300, 1, 301, 302, 303, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 304, 1, 1, 1, 1, 1, 1, 1, 1, 305, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 306, 0, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 309, 282, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 310, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 311, 0, 1, 1, 312, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 313, 1, 314, 0, 0, 68, 130, 0, 0, 0, 0, 0, 0,
+ 300, 315, 316, 317, 318, 319, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 110, 1, 1, 147, 321, 322, 106, 1, 1, 1, 1, 1, 115, 0, 323,
+ 324, 180, 325, 326, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 162, 327, 1, 1, 1, 147, 1, 1, 95, 155,
+ 110, 1, 328, 1, 206, 329, 0, 0, 1, 1, 1, 330, 1, 1, 194, 1,
+ 1, 1, 147, 331, 154, 332, 333, 0, 1, 1, 1, 1, 190, 1, 15, 189,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 130, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 314, 1, 1, 1, 1, 1, 1,
+ 130, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_base_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 223, 255, 255,
+ 0, 0, 255, 252, 240, 215, 255, 255, 251, 255, 255, 255, 7, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 254, 255, 231, 0, 0, 0, 0, 0, 64,
+ 73, 0, 255, 255, 255, 135, 31, 0, 192, 255, 0, 200, 255, 7, 0, 0,
+ 255, 255, 63, 64, 96, 194, 255, 255, 255, 63, 253, 255, 255, 255, 0, 0,
+ 0, 224, 255, 255, 63, 0, 2, 0, 255, 7, 240, 199, 255, 255, 63, 4,
+ 16, 1, 255, 127, 255, 255, 255, 65, 255, 255, 223, 255, 255, 0, 0, 0,
+ 248, 255, 255, 255, 255, 255, 255, 235, 1, 222, 1, 255, 243, 255, 255, 255,
+ 237, 159, 249, 255, 255, 253, 197, 163, 129, 89, 0, 176, 195, 255, 255, 63,
+ 232, 135, 249, 255, 255, 253, 109, 195, 1, 0, 0, 94, 192, 255, 92, 0,
+ 232, 191, 251, 255, 255, 253, 237, 227, 1, 26, 1, 0, 195, 255, 3, 2,
+ 236, 159, 249, 255, 255, 253, 237, 35, 129, 25, 0, 176, 195, 255, 255, 0,
+ 232, 199, 61, 214, 24, 199, 255, 131, 198, 29, 1, 0, 192, 255, 255, 7,
+ 238, 223, 253, 255, 255, 253, 255, 35, 30, 0, 0, 7, 195, 255, 128, 255,
+ 253, 223, 253, 255, 255, 253, 239, 99, 155, 13, 0, 64, 195, 255, 6, 0,
+ 252, 223, 253, 255, 255, 255, 255, 167, 193, 221, 112, 255, 195, 255, 255, 255,
+ 236, 255, 127, 252, 255, 255, 251, 47, 127, 0, 3, 127, 192, 255, 28, 0,
+ 254, 255, 255, 255, 255, 255, 13, 128, 127, 128, 255, 15, 214, 247, 255, 255,
+ 175, 255, 13, 32, 95, 0, 255, 243, 255, 255, 255, 252, 255, 255, 95, 253,
+ 255, 254, 255, 255, 255, 31, 0, 128, 32, 31, 0, 0, 0, 0, 0, 192,
+ 191, 223, 255, 7, 255, 31, 2, 153, 255, 255, 255, 60, 254, 255, 225, 255,
+ 155, 223, 255, 223, 191, 32, 255, 255, 255, 61, 127, 61, 255, 61, 255, 255,
+ 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 7,
+ 255, 255, 255, 31, 255, 255, 255, 3, 255, 255, 63, 63, 255, 255, 255, 1,
+ 255, 223, 3, 0, 255, 255, 99, 0, 255, 255, 3, 0, 255, 223, 1, 0,
+ 255, 255, 79, 192, 191, 1, 240, 31, 255, 3, 255, 3, 255, 7, 255, 3,
+ 159, 255, 255, 255, 255, 5, 255, 255, 255, 255, 63, 0, 120, 14, 251, 1,
+ 241, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199,
+ 255, 255, 127, 198, 255, 255, 191, 0, 26, 224, 7, 0, 255, 63, 0, 0,
+ 240, 255, 255, 255, 255, 255, 15, 232, 251, 15, 255, 255, 255, 7, 240, 31,
+ 252, 255, 255, 255, 195, 196, 255, 255, 191, 92, 12, 240, 255, 15, 48, 248,
+ 255, 227, 255, 255, 255, 1, 255, 255, 255, 255, 255, 231, 255, 0, 8, 0,
+ 2, 222, 239, 4, 63, 63, 255, 170, 255, 255, 255, 63, 223, 255, 207, 239,
+ 255, 255, 220, 127, 255, 7, 255, 255, 255, 128, 255, 255, 0, 0, 243, 255,
+ 255, 127, 255, 31, 127, 0, 0, 0, 255, 255, 207, 255, 255, 255, 191, 255,
+ 255, 127, 255, 255, 255, 127, 12, 254, 255, 128, 1, 0, 255, 255, 127, 0,
+ 127, 127, 127, 127, 255, 255, 7, 0, 255, 255, 255, 251, 255, 255, 15, 0,
+ 0, 0, 255, 15, 255, 3, 255, 255, 255, 255, 127, 248, 224, 255, 255, 255,
+ 15, 0, 255, 255, 255, 31, 255, 255, 127, 0, 255, 255, 255, 15, 0, 0,
+ 255, 127, 8, 192, 255, 255, 252, 0, 252, 7, 0, 0, 0, 0, 224, 255,
+ 187, 247, 255, 255, 159, 15, 255, 3, 255, 255, 255, 0, 15, 192, 255, 3,
+ 0, 0, 252, 127, 63, 192, 255, 255, 127, 0, 12, 128, 255, 255, 55, 204,
+ 255, 191, 255, 195, 223, 255, 255, 127, 255, 129, 25, 0, 247, 47, 255, 243,
+ 255, 255, 255, 239, 255, 255, 98, 62, 5, 0, 0, 248, 255, 207, 63, 0,
+ 126, 126, 126, 0, 127, 127, 255, 255, 223, 30, 255, 3, 127, 248, 255, 255,
+ 255, 255, 255, 15, 255, 63, 255, 255, 127, 0, 248, 160, 255, 255, 127, 95,
+ 219, 255, 255, 255, 3, 0, 248, 255, 0, 0, 255, 255, 255, 255, 252, 255,
+ 0, 0, 255, 63, 0, 0, 255, 3, 255, 255, 247, 255, 127, 15, 223, 255,
+ 252, 252, 252, 28, 127, 127, 0, 48, 255, 239, 255, 255, 127, 255, 255, 183,
+ 255, 63, 255, 63, 135, 255, 255, 255, 255, 255, 143, 255, 1, 0, 0, 0,
+ 255, 255, 1, 0, 254, 255, 255, 15, 15, 224, 255, 255, 255, 255, 255, 191,
+ 15, 255, 63, 0, 255, 255, 15, 255, 255, 0, 255, 255, 15, 128, 0, 0,
+ 63, 253, 255, 255, 255, 255, 191, 145, 128, 255, 0, 0, 255, 255, 55, 248,
+ 255, 255, 255, 143, 255, 255, 255, 131, 255, 255, 255, 240, 1, 0, 239, 254,
+ 255, 1, 255, 1, 31, 248, 127, 0, 255, 255, 63, 254, 255, 255, 63, 255,
+ 255, 255, 7, 255, 255, 255, 3, 30, 0, 254, 0, 0, 255, 1, 0, 0,
+ 255, 255, 7, 252, 15, 0, 255, 3, 255, 35, 3, 0, 63, 0, 254, 3,
+ 253, 255, 255, 255, 128, 63, 252, 255, 255, 255, 135, 217, 3, 0, 255, 255,
+ 255, 1, 255, 3, 127, 16, 192, 255, 255, 255, 119, 0, 255, 255, 63, 128,
+ 255, 97, 255, 255, 254, 255, 31, 0, 255, 255, 251, 255, 255, 127, 44, 63,
+ 127, 189, 255, 191, 7, 0, 255, 3, 255, 253, 237, 163, 158, 57, 1, 224,
+ 15, 0, 0, 0, 163, 255, 255, 175, 3, 0, 0, 0, 255, 255, 6, 90,
+ 242, 0, 255, 3, 255, 127, 3, 79, 255, 255, 7, 88, 30, 0, 255, 3,
+ 255, 31, 0, 0, 255, 215, 64, 1, 255, 3, 0, 0, 67, 0, 255, 255,
+ 255, 127, 0, 9, 255, 255, 7, 128, 127, 242, 111, 255, 255, 255, 190, 161,
+ 119, 0, 255, 3, 255, 252, 255, 255, 255, 255, 15, 240, 30, 0, 0, 0,
+ 1, 248, 255, 255, 255, 255, 7, 134, 127, 0, 129, 241, 255, 3, 128, 252,
+ 7, 0, 0, 0, 255, 253, 255, 255, 255, 255, 0, 64, 63, 0, 255, 255,
+ 0, 2, 18, 0, 127, 251, 255, 255, 64, 0, 255, 3, 191, 253, 255, 255,
+ 255, 127, 88, 1, 255, 255, 231, 1, 0, 0, 1, 0, 255, 255, 3, 128,
+ 255, 127, 31, 0, 255, 127, 0, 0, 255, 195, 0, 0, 255, 63, 32, 0,
+ 255, 255, 128, 255, 63, 0, 255, 251, 251, 255, 255, 224, 255, 0, 248, 255,
+ 15, 0, 3, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 147, 127, 254, 255, 255, 95, 60, 0, 0, 24, 240, 255, 255,
+ 255, 195, 255, 255, 35, 0, 0, 0, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 255, 207, 255, 255, 0, 0, 128, 7, 0, 224, 223, 255,
+ 239, 15, 0, 0, 255, 31, 128, 63, 255, 15, 255, 131, 159, 255, 0, 0,
+ 15, 8, 255, 195, 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10,
+ 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
+ 0, 0, 3, 0, 255, 127, 254, 255, 254, 255, 254, 255, 192, 255, 255, 255,
+ 7, 0, 255, 255, 255, 1, 3, 0, 63, 0, 0, 0, 255, 31, 255, 31,
+ 255, 0, 255, 3, 255, 63, 3, 0, 255, 255, 255, 253, 255, 63, 31, 7,
+ 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_grapheme_base(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_grapheme_base_table_1[field_2];
+ v = re_grapheme_base_table_2[(v << 5) | field_1];
+ v = re_grapheme_base_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Grapheme_Cluster_Break. */
+static RE_UINT8 re_grapheme_cluster_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 14, 15, 16, 21, 9, 9, 9, 9, 9, 9, 9, 9, 22, 23,
+ 24, 9, 25, 26, 27, 28, 29, 30, 9, 9, 9, 9, 9, 31, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34,
+ 9, 9, 9, 9, 35, 9, 36, 9, 37, 9, 38, 9, 39, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 40, 41, 41, 41, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_grapheme_cluster_break_table_2[] = {
+ 0, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 6, 1, 1, 1, 1,
+ 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 1,
+ 11, 1, 12, 13, 1, 1, 14, 15, 16, 17, 18, 1, 1, 19, 1, 20,
+ 21, 22, 23, 1, 1, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 34, 35, 38, 39, 30, 40, 41, 29, 42, 43, 44, 1,
+ 45, 46, 47, 29, 30, 48, 49, 29, 50, 51, 52, 29, 30, 1, 53, 54,
+ 1, 55, 56, 1, 1, 57, 58, 1, 59, 60, 1, 61, 62, 63, 64, 1,
+ 1, 65, 66, 67, 68, 1, 1, 1, 69, 69, 69, 70, 70, 71, 72, 72,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 74, 74, 75, 75, 1, 76, 77, 1,
+ 78, 1, 1, 1, 79, 80, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1,
+ 82, 1, 83, 84, 1, 17, 85, 1, 86, 87, 88, 89, 90, 91, 1, 92,
+ 1, 93, 1, 1, 1, 1, 94, 95, 1, 1, 1, 1, 1, 1, 5, 96,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 97, 98, 1, 99, 1, 1, 17, 100, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 101, 1, 1, 1, 102, 1, 1, 1, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 103, 1, 1, 104, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 105, 46, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1,
+ 107, 108, 1, 1, 109, 110, 111, 112, 1, 113, 114, 115, 26, 116, 117, 118,
+ 1, 119, 120, 121, 1, 122, 123, 124, 1, 1, 1, 1, 1, 1, 1, 125,
+ 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127,
+ 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129,
+ 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131,
+ 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126,
+ 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128,
+ 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130,
+ 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132,
+ 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127,
+ 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129,
+ 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131,
+ 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126,
+ 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128,
+ 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130,
+ 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132,
+ 131, 132, 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 132,
+ 126, 127, 128, 129, 130, 131, 132, 126, 127, 128, 129, 130, 131, 133, 134, 135,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 136, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 6, 6, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 46, 1, 1, 137,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 138,
+ 1, 1, 1, 1, 1, 1, 1, 85, 1, 1, 1, 139, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 140, 141, 1, 1, 1, 1, 1, 79, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 142, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 143, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1,
+ 144, 145, 146, 102, 90, 147, 148, 1, 149, 150, 151, 152, 90, 153, 154, 1,
+ 1, 155, 1, 1, 1, 1, 102, 156, 50, 51, 157, 158, 1, 1, 1, 1,
+ 1, 159, 160, 1, 1, 161, 162, 1, 1, 1, 1, 1, 1, 163, 164, 1,
+ 1, 165, 85, 1, 1, 166, 1, 1, 73, 167, 1, 1, 1, 1, 1, 1,
+ 1, 168, 1, 1, 1, 1, 1, 1, 1, 169, 170, 1, 1, 1, 171, 172,
+ 173, 174, 175, 1, 176, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 177, 1, 1, 178, 179, 1, 1, 1, 180, 181, 1, 182, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 183, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 184, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 185, 1, 186, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 187, 188, 189, 1, 1, 190,
+ 1, 1, 1, 1, 191, 192, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 193, 194, 195, 1, 1,
+ 1, 1, 196, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 5, 197, 5, 198, 199, 200, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 201, 202, 1, 1, 1, 1, 1, 1, 1, 186, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 203, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 186, 1, 1, 1, 204, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 205,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 206,
+ 3, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 207,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
+};
+
+static RE_UINT8 re_grapheme_cluster_break_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4,
+ 0, 4, 4, 0, 4, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 5, 0, 4,
+ 4, 4, 4, 4, 4, 0, 0, 4, 4, 0, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 4, 4, 4, 0, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 4, 0, 6, 6,
+ 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 4, 6, 6,
+ 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 6,
+ 6, 4, 4, 4, 4, 0, 0, 6, 6, 0, 0, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 6,
+ 6, 4, 4, 0, 0, 0, 0, 4, 4, 0, 0, 4, 4, 4, 0, 0,
+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 4, 4, 4, 4, 4, 0, 4, 4, 6, 0, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4,
+ 6, 4, 4, 4, 4, 0, 0, 6, 6, 0, 0, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6,
+ 4, 6, 6, 0, 0, 0, 6, 6, 6, 0, 6, 6, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,
+ 4, 6, 6, 6, 6, 0, 4, 4, 4, 0, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 4,
+ 6, 6, 4, 6, 6, 0, 4, 6, 6, 0, 6, 6, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 6,
+ 6, 4, 4, 4, 4, 0, 6, 6, 6, 0, 6, 6, 6, 4, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
+ 6, 6, 4, 4, 4, 0, 4, 0, 6, 6, 6, 6, 6, 6, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, 6, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0, 0, 0, 0, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 4, 4, 4, 4, 4, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4,
+ 4, 6, 4, 4, 4, 4, 4, 4, 0, 4, 4, 6, 6, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 6, 4, 4, 0, 0, 0, 0, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 6, 4, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 6, 6,
+ 6, 6, 6, 6, 6, 6, 4, 6, 6, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 6, 6, 6, 6, 4, 4, 6, 6, 6, 0, 0, 0, 0,
+ 6, 6, 4, 6, 6, 6, 6, 6, 6, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 6, 6, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 4, 6, 4, 4, 4, 4, 4, 4, 4, 0,
+ 4, 0, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6,
+ 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 6, 4, 6, 6, 6,
+ 6, 6, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 4, 4, 4, 4, 6, 6, 4, 4, 6, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 6, 4, 4, 6, 6, 6, 4, 6, 4,
+ 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4,
+ 4, 4, 4, 4, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 6, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 6, 4, 4, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 10, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6, 4, 4, 6, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 6, 6, 4, 4, 4, 4, 6, 6, 4, 4, 6, 6,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 6,
+ 6, 4, 4, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 4, 4, 4, 0, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4,
+ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 6, 6,
+ 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6, 4, 6, 6, 4, 6, 6, 0, 6, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 4,
+ 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 4, 4, 4, 4, 6, 6, 4, 4, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 6, 4, 4, 4,
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 6, 0, 5, 5, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 4,
+ 4, 4, 6, 6, 4, 6, 4, 4, 0, 0, 0, 0, 0, 0, 4, 0,
+ 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 6, 6, 0, 0, 6, 6, 0, 0, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4,
+ 6, 6, 4, 4, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 4, 4, 4, 4, 4, 4, 6, 4, 6, 6, 4, 6, 4,
+ 4, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 6, 6, 4, 4, 4, 4, 0, 0, 6, 6, 6, 6, 4, 4, 6, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 4, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 4, 6, 6,
+ 4, 4, 4, 4, 4, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 6, 6, 6, 6, 6, 0, 6, 6, 0, 0, 4, 4, 6, 4, 5,
+ 6, 5, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 6, 6, 4, 4, 4, 4, 0, 0, 4, 4, 6, 6, 6, 6,
+ 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 4, 4, 4, 4, 6, 5, 4, 4, 4, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 6, 6, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 6, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 6, 4, 4, 4, 4, 4, 4,
+ 4, 6, 4, 4, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 4, 0, 4, 4, 0, 4,
+ 4, 4, 4, 4, 4, 4, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 0,
+ 4, 4, 0, 6, 6, 4, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 4,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 6, 4, 4, 4, 0, 0, 0, 6, 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 0, 4, 4, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_grapheme_cluster_break_table_1[field_2];
+ v = re_grapheme_cluster_break_table_2[(v << 5) | field_1];
+ v = re_grapheme_cluster_break_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Grapheme_Extend. */
+static RE_UINT8 re_grapheme_extend_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15,
+ 16, 9, 17, 18, 19, 20, 21, 22, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25,
+ 9, 9, 9, 9, 26, 9, 27, 9, 28, 9, 29, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 30, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT8 re_grapheme_extend_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0,
+ 7, 0, 8, 9, 0, 0, 10, 11, 12, 13, 14, 0, 0, 15, 0, 16,
+ 17, 18, 19, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 30, 31, 34, 35, 26, 36, 37, 25, 38, 39, 40, 0,
+ 41, 42, 43, 25, 26, 44, 45, 25, 46, 47, 28, 25, 26, 0, 48, 0,
+ 0, 49, 50, 0, 0, 51, 52, 0, 53, 54, 0, 55, 56, 57, 58, 0,
+ 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 65, 65, 0, 66, 67, 0,
+ 68, 0, 0, 0, 69, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0,
+ 72, 0, 73, 74, 0, 13, 75, 0, 76, 77, 38, 78, 46, 79, 0, 80,
+ 0, 81, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, 0, 0, 1, 84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 0, 0, 0, 0, 0, 13, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 91, 42, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0,
+ 93, 94, 0, 0, 0, 0, 95, 96, 0, 97, 98, 0, 22, 99, 0, 100,
+ 0, 101, 102, 31, 0, 103, 26, 104, 0, 0, 0, 0, 0, 0, 0, 105,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106,
+ 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 107, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 108, 109, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
+ 26, 112, 113, 88, 46, 114, 0, 0, 22, 115, 0, 116, 46, 117, 118, 0,
+ 0, 119, 0, 0, 0, 0, 88, 120, 46, 47, 121, 122, 0, 0, 0, 0,
+ 0, 112, 123, 0, 0, 124, 125, 0, 0, 0, 0, 0, 0, 126, 127, 0,
+ 0, 128, 75, 0, 0, 129, 0, 0, 63, 130, 0, 0, 0, 0, 0, 0,
+ 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, 134, 75,
+ 135, 136, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 139, 0, 0, 140, 141, 0, 0, 0, 142, 143, 0, 144, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150,
+ 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 153, 154, 0, 0,
+ 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 156, 1, 157, 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 160, 161, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 163, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_extend_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 248, 3, 0, 0,
+ 0, 0, 254, 255, 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 255, 7,
+ 0, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 159, 159, 61, 0, 0,
+ 0, 0, 2, 0, 0, 0, 255, 255, 255, 7, 0, 0, 192, 255, 1, 0,
+ 0, 248, 15, 32, 0, 0, 192, 251, 239, 62, 0, 0, 0, 0, 0, 14,
+ 0, 0, 248, 255, 251, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 20,
+ 254, 33, 254, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 80,
+ 30, 32, 128, 0, 12, 0, 0, 64, 6, 0, 0, 0, 0, 0, 0, 16,
+ 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0, 12, 0, 0, 252,
+ 0, 0, 0, 208, 30, 32, 224, 0, 4, 0, 0, 0, 0, 0, 0, 64,
+ 1, 32, 128, 0, 17, 0, 0, 0, 0, 0, 0, 192, 193, 61, 96, 0,
+ 0, 0, 0, 144, 68, 48, 96, 0, 3, 0, 0, 0, 0, 0, 0, 88,
+ 0, 132, 92, 128, 0, 0, 242, 7, 128, 127, 0, 0, 0, 0, 242, 31,
+ 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
+ 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
+ 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
+ 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 15, 32,
+ 0, 56, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0, 135, 1, 4, 14,
+ 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159, 1, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 240, 23, 0, 248, 15, 0, 60, 59, 0, 0,
+ 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 247, 255, 253, 33, 16, 3,
+ 255, 255, 255, 251, 0, 16, 0, 0, 255, 255, 1, 0, 0, 128, 3, 0,
+ 0, 0, 0, 128, 0, 252, 0, 0, 0, 0, 0, 6, 0, 128, 247, 63,
+ 0, 0, 3, 0, 68, 8, 0, 0, 96, 16, 0, 0, 48, 0, 0, 0,
+ 255, 255, 3, 128, 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 200, 51,
+ 32, 0, 0, 0, 0, 126, 102, 0, 8, 16, 0, 0, 0, 0, 157, 193,
+ 0, 48, 64, 0, 32, 33, 0, 0, 0, 0, 0, 32, 0, 0, 192, 7,
+ 110, 240, 0, 0, 0, 0, 0, 135, 240, 0, 0, 0, 0, 24, 0, 0,
+ 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 120, 6, 128, 239, 31, 0,
+ 0, 0, 8, 0, 0, 0, 192, 127, 0, 158, 0, 0, 0, 128, 211, 64,
+ 248, 7, 0, 0, 1, 0, 128, 0, 192, 31, 31, 0, 92, 0, 0, 64,
+ 0, 0, 249, 165, 13, 0, 0, 0, 0, 128, 60, 176, 1, 0, 0, 48,
+ 0, 0, 248, 167, 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6,
+ 0, 0, 1, 88, 8, 0, 0, 0, 0, 0, 240, 12, 254, 7, 0, 0,
+ 0, 0, 248, 121, 128, 0, 126, 14, 0, 252, 127, 3, 0, 0, 127, 191,
+ 0, 0, 252, 255, 255, 252, 109, 0, 0, 0, 126, 180, 191, 0, 0, 0,
+ 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 31, 0, 0, 0, 127, 0,
+ 0, 128, 0, 0, 0, 128, 7, 0, 16, 0, 0, 0, 0, 0, 0, 96,
+ 160, 195, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
+ 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0,
+ 127, 255, 255, 249, 219, 7, 0, 0, 0, 240, 0, 0, 240, 7, 0, 0
+};
+
+RE_UINT32 re_get_grapheme_extend(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_grapheme_extend_table_1[field_2];
+ v = re_grapheme_extend_table_2[(v << 5) | field_1];
+ v = re_grapheme_extend_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Grapheme_Link. */
+static RE_UINT8 re_grapheme_link_table_1[] = {
+ 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 8, 0, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_link_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 3, 0,
+ 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 5, 0, 0, 10, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 0, 0, 0, 0, 5, 0, 0, 0, 15, 0, 0, 0, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 12, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 9, 0,
+ 0, 19, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 20, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 12, 0, 0,
+ 0, 12, 0, 0, 0, 16, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0,
+ 0, 17, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 9,
+ 0, 7, 23, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_grapheme_link_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 24, 0, 4, 0, 0,
+ 0, 0, 0, 4, 16, 0, 0, 0, 0, 0, 0, 6, 0, 0, 16, 0,
+ 0, 0, 4, 0, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 0,
+ 0, 0, 0, 128, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 8, 0,
+ 0, 0, 64, 0, 0, 0, 0, 2, 0, 0, 24, 0, 0, 0, 32, 0,
+ 4, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 96, 128, 0, 0, 0,
+ 48, 0, 0, 0, 0, 0, 128, 0
+};
+
+RE_UINT32 re_get_grapheme_link(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_grapheme_link_table_1[field_2];
+ v = re_grapheme_link_table_2[(v << 5) | field_1];
+ v = re_grapheme_link_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Hangul_Syllable_Type. */
+static RE_UINT8 re_hangul_syllable_type_table_1[] = {
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7,
+ 8, 9, 3, 4, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_hangul_syllable_type_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7,
+ 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9,
+ 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11,
+ 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6,
+ 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8,
+ 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10,
+ 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12,
+ 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7,
+ 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9,
+ 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11,
+ 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6,
+ 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8,
+ 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10,
+ 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12,
+ 11, 12, 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 12,
+ 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, 13, 14, 15
+};
+
+static RE_UINT8 re_hangul_syllable_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_hangul_syllable_type_table_1[field_2];
+ v = re_hangul_syllable_type_table_2[(v << 5) | field_1];
+ v = re_hangul_syllable_type_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Hex_Digit. */
+RE_UINT32 re_get_hex_digit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
+ if (0x41 <= codepoint && codepoint <= 0x46)
+ return 1;
+ if (0x61 <= codepoint && codepoint <= 0x66)
+ return 1;
+ if (0xFF10 <= codepoint && codepoint <= 0xFF19)
+ return 1;
+ if (0xFF21 <= codepoint && codepoint <= 0xFF26)
+ return 1;
+ if (0xFF41 <= codepoint && codepoint <= 0xFF46)
+ return 1;
+
+ return 0;
+}
+
+/* Hyphen. */
+static RE_UINT8 re_hyphen_table_1[] = {
+ 0, 1, 2, 2, 2, 2, 3, 2, 4, 2, 2, 5, 6, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_hyphen_table_2[] = {
+ 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 0, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_hyphen_table_3[] = {
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 4, 0, 0, 64, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 128, 0, 0, 0, 0, 8, 8, 0, 0, 0,
+ 32, 0, 0, 0
+};
+
+RE_UINT32 re_get_hyphen(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_hyphen_table_1[field_2];
+ v = re_hyphen_table_2[(v << 5) | field_1];
+ v = re_hyphen_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* ID_Continue. */
+static RE_UINT8 re_id_continue_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 38, 39, 40, 9, 41, 9, 42, 43, 9, 9, 44, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 45, 12, 12, 12, 46, 47, 12,
+ 12, 12, 12, 48, 12, 12, 12, 12, 12, 12, 49, 9, 9, 9, 50, 9,
+ 12, 12, 12, 12, 51, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 52, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
+};
+
+static RE_UINT16 re_id_continue_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 7, 8, 6, 6, 6, 9, 10, 11, 6, 12,
+ 6, 6, 6, 6, 13, 6, 6, 6, 6, 14, 15, 6, 16, 17, 18, 19,
+ 20, 6, 6, 21, 6, 6, 22, 23, 24, 6, 25, 6, 6, 26, 6, 27,
+ 6, 28, 29, 30, 0, 31, 32, 11, 6, 6, 6, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 43, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 53, 6, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 0, 70, 71, 72, 0, 73, 74, 75, 76, 77, 78, 79, 0,
+ 6, 6, 80, 6, 81, 6, 82, 83, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 84, 6, 85, 86, 87, 6, 88, 6, 89, 90, 91, 6, 6, 92,
+ 67, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 93, 3, 6, 6, 94, 95, 96, 97, 98, 6, 6, 99, 100,
+ 101, 6, 6, 102, 6, 103, 6, 104, 105, 106, 107, 108, 6, 109, 110, 0,
+ 29, 6, 105, 111, 112, 113, 114, 0, 6, 6, 115, 116, 6, 6, 6, 97,
+ 6, 117, 118, 81, 119, 89, 120, 68, 6, 6, 6, 6, 6, 6, 6, 121,
+ 6, 6, 6, 6, 6, 6, 6, 6, 92, 6, 122, 81, 6, 123, 124, 125,
+ 0, 126, 127, 128, 129, 0, 129, 130, 131, 132, 133, 6, 134, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 41, 44, 209, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 191, 122, 0,
- 36, 122, 0, 0, 7, 7, 111, 0, 62, 36, 36, 36, 36, 36, 0, 82,
- 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 15, 15, 15, 15, 15, 15, 15, 15,
- 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 135, 105, 6, 6, 6, 6, 136, 6, 82, 6, 137, 138, 139, 139, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 61, 93, 88, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 0, 93, 117, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 61, 0, 0, 0, 0, 36, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 0, 36, 36, 36, 104,
- 36, 36, 104, 0, 36, 36, 41, 220, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 89, 58, 221, 63, 222, 44,
- 66, 58, 44, 0, 0, 0, 0, 0, 0, 0, 106, 89, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 106, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 11, 11, 11,
- 11, 11, 11, 159, 15, 139, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11,
- 159, 15, 15, 15, 15, 15, 15, 49, 48, 223, 10, 49, 11, 159, 170, 14,
- 15, 14, 15, 15, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15,
- 15, 50, 22, 10, 11, 49, 11, 224, 15, 15, 15, 15, 15, 15, 50, 22,
- 11, 160, 166, 11, 224, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11,
- 11, 159, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11, 159, 15,
- 15, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15,
- 15, 15, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 11,
- 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11,
- 11, 11, 159, 15, 15, 15, 15, 15, 15, 39, 11, 11, 11, 11, 11, 11,
- 224, 15, 15, 15, 15, 15, 24, 15, 33, 11, 11, 11, 11, 11, 22, 15,
- 15, 15, 15, 15, 15, 139, 15, 11, 11, 11, 11, 11, 11, 224, 15, 15,
- 15, 15, 15, 24, 15, 33, 11, 11, 11, 11, 11, 22, 15, 15, 15, 15,
- 15, 15, 139, 15, 11, 11, 11, 11, 11, 11, 224, 15, 15, 15, 15, 15,
- 24, 15, 27, 100, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 66, 93, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 116, 0, 86, 0, 0,
- 0, 116, 122, 0, 0, 0, 93, 44, 58, 44, 44, 44, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 44, 66, 44, 44, 44, 44, 97, 44, 59, 75, 66, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 44, 117, 36, 41,
- 7, 7, 111, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 7, 7, 111, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 104, 0, 0, 44, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 11, 11, 11, 11, 11, 11, 159, 15, 15, 15, 15, 15, 15, 15,
- 15, 44, 117, 0, 7, 7, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 82, 36, 36, 36, 36, 36, 36, 102, 78, 82, 36, 61, 36, 112, 0,
- 108, 62, 112, 82, 102, 78, 112, 112, 102, 78, 61, 36, 61, 36, 82, 43,
- 36, 36, 99, 36, 36, 36, 36, 0, 82, 82, 99, 36, 36, 36, 36, 0,
+ 140, 141, 67, 6, 142, 67, 6, 83, 143, 14, 6, 6, 144, 6, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 78,
+ 6, 6, 6, 6, 145, 0, 24, 81, 6, 6, 6, 6, 6, 6, 6, 6,
+ 146, 147, 6, 148, 6, 6, 6, 26, 149, 150, 6, 6, 151, 6, 152, 153,
+ 6, 154, 6, 97, 6, 6, 155, 156, 6, 157, 97, 78, 6, 6, 158, 105,
+ 6, 138, 159, 160, 6, 6, 161, 162, 163, 164, 83, 80, 6, 6, 6, 165,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 166, 167, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 157, 6, 6, 168, 0, 169, 170, 171, 6, 6, 26, 172, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 81, 24, 6, 173, 6, 174, 175,
+ 91, 176, 177, 178, 6, 6, 6, 78, 1, 2, 3, 107, 6, 105, 179, 0,
+ 180, 181, 182, 0, 6, 6, 6, 68, 0, 0, 6, 96, 0, 0, 0, 183,
+ 0, 0, 0, 0, 78, 6, 184, 114, 6, 185, 103, 68, 81, 6, 186, 0,
+ 6, 6, 6, 6, 81, 80, 187, 29, 6, 188, 6, 189, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 138, 104, 174, 0, 0, 0, 0,
+ 190, 191, 104, 138, 105, 0, 0, 192, 104, 168, 0, 0, 6, 193, 0, 0,
+ 194, 195, 0, 78, 78, 0, 75, 196, 6, 104, 104, 197, 26, 0, 0, 0,
+ 6, 6, 134, 0, 6, 197, 6, 197, 6, 198, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 199, 0, 0, 78, 200, 184, 0, 0, 24, 201, 138,
+ 6, 6, 196, 202, 6, 68, 24, 203, 6, 31, 204, 205, 6, 6, 206, 0,
+ 207, 208, 0, 0, 209, 119, 6, 210, 34, 211, 212, 213, 0, 0, 0, 0,
+ 6, 6, 214, 215, 6, 6, 216, 0, 0, 0, 0, 0, 6, 217, 218, 0,
+ 6, 6, 219, 0, 6, 102, 100, 0, 89, 115, 0, 0, 0, 0, 0, 0,
+ 6, 68, 0, 0, 0, 6, 6, 220, 221, 222, 223, 0, 0, 224, 225, 226,
+ 6, 105, 200, 6, 227, 0, 6, 102, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 5, 229, 230, 173, 231, 0, 0, 232, 233, 198, 234, 235, 100, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 236, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 168, 0, 0, 0,
+ 6, 6, 6, 144, 6, 6, 6, 6, 6, 6, 189, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11,
- 11, 11, 123, 0, 11, 11, 11, 11, 11, 11, 123, 0, 11, 11, 11, 11,
- 11, 11, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 102, 105, 100, 0, 0, 24, 108, 6, 138, 223, 237, 91, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 127, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 104, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 41, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 104, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36, 36, 36, 36, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 238, 6, 239, 0, 0, 240,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 117,
+ 6, 6, 6, 6, 6, 6, 104, 0, 134, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 105, 0, 241, 204, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0,
+ 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 31, 6, 248, 249, 250, 6, 251, 252, 253, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 254, 255, 83, 31, 31, 135, 135, 228, 228, 256, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 257, 6, 258, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 261, 262, 0, 0, 0, 0, 0, 0, 6, 263, 264, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 265, 0, 6, 6, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 250, 266, 267, 268, 269, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 81, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 96, 6, 6, 6, 6, 6, 6,
+ 81, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 271, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 114,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 30, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_id_continue_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7,
+ 0, 4, 160, 4, 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0,
+ 31, 80, 0, 0, 255, 255, 223, 188, 192, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 251, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 254, 255, 255, 255, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 195, 255, 255, 255, 255, 239, 159, 255, 253, 255, 159,
+ 0, 0, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 63, 36,
+ 255, 63, 0, 0, 255, 255, 255, 15, 255, 7, 0, 0, 255, 255, 223, 255,
+ 255, 0, 248, 255, 207, 255, 254, 255, 239, 159, 249, 255, 255, 253, 197, 243,
+ 159, 121, 128, 176, 207, 255, 3, 80, 238, 135, 249, 255, 255, 253, 109, 211,
+ 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 251, 255, 255, 253, 237, 243,
+ 191, 59, 1, 0, 207, 255, 0, 254, 238, 159, 249, 255, 159, 57, 224, 176,
+ 207, 255, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
+ 192, 255, 0, 0, 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7,
+ 207, 255, 0, 0, 239, 223, 253, 255, 255, 253, 239, 243, 223, 61, 96, 64,
+ 207, 255, 6, 0, 223, 125, 240, 128, 207, 255, 0, 252, 238, 255, 127, 252,
+ 255, 255, 251, 47, 127, 132, 95, 255, 192, 255, 12, 0, 254, 255, 255, 255,
+ 255, 255, 255, 7, 255, 127, 255, 3, 214, 247, 255, 255, 175, 255, 255, 63,
+ 95, 63, 255, 243, 1, 0, 0, 3, 255, 3, 160, 194, 255, 254, 255, 255,
+ 255, 31, 254, 255, 223, 255, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0,
+ 255, 3, 255, 255, 255, 255, 255, 63, 191, 32, 255, 255, 255, 255, 255, 247,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 231, 0, 254, 3, 0, 255, 255, 0, 0,
+ 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 31, 0,
+ 255, 255, 31, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 143, 48,
+ 255, 3, 0, 0, 0, 56, 255, 3, 255, 255, 255, 1, 255, 7, 255, 255,
+ 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 15, 192, 255, 255, 255,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 7, 255, 255, 255, 159,
+ 255, 3, 255, 3, 128, 0, 255, 191, 1, 0, 0, 0, 255, 15, 255, 3,
+ 0, 248, 15, 0, 255, 255, 255, 0, 255, 227, 255, 255, 255, 1, 255, 255,
+ 0, 0, 247, 255, 255, 255, 255, 251, 63, 63, 255, 170, 255, 255, 223, 95,
+ 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 0, 128, 1, 0, 16, 0,
+ 0, 0, 2, 128, 0, 0, 255, 31, 226, 255, 1, 0, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 1, 0, 0, 255, 127, 255, 255,
+ 31, 248, 15, 0, 255, 128, 0, 128, 255, 255, 127, 0, 127, 127, 127, 127,
+ 224, 0, 0, 0, 254, 255, 62, 31, 255, 255, 127, 254, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 0, 0, 255, 31, 255, 255, 255, 15, 0, 0,
+ 255, 255, 240, 191, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 16, 0, 0, 63, 0, 255, 3,
+ 255, 255, 255, 232, 255, 63, 255, 255, 1, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 7, 0, 0, 56, 255, 255, 124, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 55, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
+ 0, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 15,
+ 255, 255, 24, 0, 0, 224, 0, 0, 0, 0, 223, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 32,
+ 255, 255, 1, 0, 0, 224, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255,
+ 255, 0, 255, 255, 15, 0, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145,
+ 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254, 255, 255, 63, 135,
+ 127, 0, 0, 0, 255, 255, 7, 0, 255, 0, 255, 3, 255, 27, 3, 0,
+ 128, 0, 255, 255, 31, 0, 0, 0, 192, 255, 0, 128, 255, 1, 255, 3,
+ 240, 0, 255, 255, 255, 255, 79, 0, 31, 222, 255, 23, 255, 255, 251, 255,
+ 255, 255, 255, 64, 127, 189, 255, 191, 255, 7, 255, 3, 255, 253, 237, 251,
+ 159, 57, 129, 224, 207, 31, 31, 0, 255, 7, 255, 195, 3, 0, 0, 0,
+ 191, 0, 255, 3, 255, 255, 63, 255, 1, 0, 0, 63, 17, 0, 255, 3,
+ 255, 3, 0, 128, 127, 242, 111, 255, 255, 255, 191, 249, 15, 0, 255, 3,
+ 255, 252, 255, 255, 255, 255, 255, 252, 27, 0, 0, 0, 255, 255, 255, 35,
+ 255, 253, 255, 255, 1, 0, 255, 3, 0, 0, 252, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1,
+ 0, 0, 1, 0, 248, 255, 255, 224, 255, 135, 255, 255, 255, 128, 255, 255,
+ 27, 0, 3, 0, 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 99,
+ 224, 227, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
+ 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
+ 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
+ 247, 207, 255, 255, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
+ 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63,
+ 255, 67, 0, 0, 31, 0, 127, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-static RE_UINT8 re_sentence_break_stage_4[] = {
- 0, 0, 0, 0, 0, 6, 2, 6, 6, 1, 0, 0, 6, 12, 13, 0,
- 0, 0, 0, 13, 13, 13, 0, 0, 14, 14, 11, 0, 10, 10, 10, 10,
- 10, 10, 14, 0, 0, 0, 0, 12, 0, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 13, 0, 13, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 13, 0, 4, 0, 0, 6, 0, 0, 0, 0, 0, 7, 13,
- 0, 5, 0, 0, 0, 7, 0, 0, 8, 8, 8, 0, 8, 8, 8, 7,
- 7, 7, 7, 0, 8, 7, 8, 7, 7, 8, 7, 8, 7, 7, 8, 7,
- 8, 8, 7, 8, 7, 8, 7, 7, 7, 8, 8, 7, 8, 7, 8, 8,
- 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 7, 7, 8, 7, 7, 9,
- 9, 9, 9, 9, 9, 7, 7, 7, 7, 9, 9, 9, 7, 7, 0, 0,
- 0, 0, 9, 9, 9, 9, 0, 0, 7, 0, 0, 0, 9, 0, 9, 0,
- 3, 3, 3, 3, 9, 0, 8, 7, 0, 0, 7, 7, 7, 7, 0, 8,
- 0, 0, 8, 0, 8, 0, 8, 8, 8, 8, 0, 8, 7, 7, 7, 8,
- 8, 7, 0, 8, 8, 7, 0, 3, 3, 3, 8, 7, 0, 9, 0, 0,
- 0, 14, 0, 0, 7, 12, 0, 0, 0, 3, 3, 3, 3, 3, 0, 3,
- 0, 3, 3, 0, 9, 9, 9, 0, 0, 0, 0, 9, 5, 5, 5, 5,
- 5, 5, 0, 0, 14, 14, 0, 0, 3, 3, 3, 0, 5, 0, 12, 12,
- 9, 9, 9, 3, 10, 10, 0, 10, 10, 0, 9, 9, 3, 9, 9, 9,
- 12, 9, 3, 3, 3, 5, 0, 3, 3, 9, 9, 3, 3, 0, 3, 3,
- 3, 3, 9, 9, 10, 10, 9, 9, 9, 0, 0, 9, 12, 12, 12, 0,
- 0, 0, 0, 5, 9, 3, 9, 9, 0, 9, 9, 9, 9, 9, 3, 3,
- 3, 9, 0, 0, 14, 12, 9, 0, 0, 3, 0, 0, 3, 3, 9, 3,
- 9, 3, 3, 3, 3, 3, 0, 0, 0, 12, 0, 0, 0, 12, 12, 0,
- 9, 0, 9, 9, 0, 0, 0, 3, 3, 3, 5, 3, 3, 9, 3, 3,
- 12, 12, 10, 10, 3, 0, 0, 3, 3, 3, 9, 0, 9, 9, 0, 9,
- 0, 0, 10, 10, 9, 0, 3, 0, 0, 9, 9, 0, 9, 3, 0, 0,
- 9, 0, 0, 0, 0, 9, 3, 3, 0, 0, 3, 3, 0, 0, 3, 9,
- 0, 0, 9, 0, 0, 0, 3, 0, 3, 0, 3, 0, 10, 10, 0, 0,
- 0, 9, 0, 9, 0, 3, 0, 3, 0, 3, 13, 13, 13, 13, 3, 3,
- 3, 0, 0, 0, 3, 3, 3, 9, 10, 10, 12, 12, 10, 10, 3, 3,
- 0, 8, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0, 8, 8, 0, 0,
- 9, 0, 12, 9, 6, 9, 9, 9, 9, 9, 9, 13, 13, 0, 0, 0,
- 3, 12, 12, 0, 9, 0, 3, 3, 0, 0, 14, 12, 14, 12, 0, 3,
- 3, 3, 5, 0, 9, 3, 3, 9, 9, 3, 9, 0, 12, 12, 12, 12,
- 0, 0, 12, 12, 9, 9, 12, 12, 0, 8, 0, 8, 7, 0, 7, 7,
- 8, 0, 7, 0, 8, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 5,
- 3, 3, 5, 5, 0, 0, 0, 14, 14, 0, 0, 0, 13, 13, 13, 13,
- 11, 0, 0, 0, 4, 4, 5, 5, 5, 5, 5, 6, 0, 13, 13, 0,
- 12, 12, 0, 0, 0, 13, 13, 12, 0, 0, 0, 6, 5, 0, 5, 5,
- 0, 13, 13, 7, 0, 0, 0, 8, 0, 0, 7, 8, 8, 8, 7, 7,
- 8, 0, 8, 0, 8, 8, 0, 7, 9, 7, 0, 0, 0, 8, 7, 7,
- 0, 0, 7, 0, 9, 9, 9, 8, 0, 0, 8, 8, 0, 0, 13, 13,
- 8, 7, 7, 8, 7, 8, 7, 3, 7, 7, 0, 7, 0, 0, 12, 9,
- 0, 0, 13, 0, 6, 14, 12, 0, 0, 13, 13, 13, 9, 9, 0, 12,
- 9, 0, 12, 12, 8, 7, 9, 3, 3, 3, 0, 9, 7, 7, 3, 3,
- 3, 3, 0, 12, 0, 0, 8, 7, 9, 0, 0, 8, 7, 8, 7, 9,
- 7, 7, 7, 9, 9, 9, 3, 9, 0, 9, 9, 3, 0, 12, 12, 12,
- 0, 0, 9, 3, 12, 12, 9, 9, 9, 3, 3, 0, 3, 3, 3, 12,
- 0, 0, 0, 7, 0, 9, 3, 9, 9, 9, 13, 13, 14, 14, 0, 14,
- 0, 14, 14, 0, 13, 0, 0, 13, 0, 14, 12, 12, 14, 13, 13, 13,
- 13, 13, 13, 0, 9, 0, 0, 5, 0, 13, 0, 13, 13, 12, 13, 13,
- 14, 0, 9, 9, 0, 5, 5, 5, 0, 5, 12, 12, 3, 0, 10, 10,
- 9, 12, 12, 0, 3, 12, 0, 0, 10, 10, 9, 0, 12, 12, 0, 12,
- 12, 0, 3, 0, 9, 12, 0, 0, 9, 9, 0, 3, 9, 9, 9, 12,
- 3, 0, 12, 12, 3, 9, 0, 9, 12, 9, 0, 0, 5, 0, 0, 0,
- 0, 3, 3, 12, 3, 3, 3, 5, 5, 5, 5, 3, 0, 8, 8, 0,
- 8, 0, 7, 7,
-};
+RE_UINT32 re_get_id_continue(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Sentence_Break: 8564 bytes. */
-
-RE_UINT32 re_get_sentence_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_sentence_break_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_sentence_break_stage_2[pos + f] << 5;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_sentence_break_stage_3[pos + f] << 2;
- value = re_sentence_break_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Math. */
+ v = re_id_continue_table_1[field_2];
+ v = re_id_continue_table_2[(v << 5) | field_1];
+ v = re_id_continue_table_3[(v << 2) | field_0];
-static RE_UINT8 re_math_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_math_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 7,
- 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2,
+/* Ideographic. */
+static RE_UINT8 re_ideographic_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 2, 2, 2,
+ 2, 7, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 11, 12, 2,
+ 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 14, 0, 0, 0, 15, 0,
+ 2, 2, 2, 2, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_math_stage_3[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
- 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 16, 17, 18, 19,
- 4, 4, 4, 4, 4, 4, 20, 21, 22, 23, 4, 4, 4, 4, 4, 15,
- 4, 4, 4, 4, 15, 15, 15, 15, 15, 15, 15, 15, 24, 25, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 27, 4, 4, 28, 29, 4, 30,
- 15, 31, 32, 33, 34, 35, 15, 15, 15, 15, 36, 15, 15, 15, 15, 37,
- 4, 4, 4, 4, 4, 4, 4, 4, 38, 39, 40, 41, 4, 4, 4, 4,
+static RE_UINT8 re_ideographic_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 5, 3, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8,
+ 3, 3, 3, 3, 3, 3, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 13, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 14, 3, 3, 3, 3, 3, 3,
+ 13, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 16,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 17, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_math_stage_4[] = {
- 0, 0, 0, 0, 0, 8, 0, 112, 0, 0, 0, 64, 0, 0, 0, 80,
- 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 128, 0, 0, 0, 128, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 115, 0,
- 192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 28, 0,
- 17, 0, 4, 0, 30, 0, 0, 124, 0, 124, 0, 0, 0, 0, 0, 0,
- 0, 0, 255, 31, 98, 248, 0, 0, 132, 252, 47, 63, 16, 179, 251, 241,
- 255, 11, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 126, 195, 240,
- 255, 255, 255, 47, 48, 0, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 0, 15, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 0, 248, 255, 255, 191, 0, 0, 0, 1, 240, 7, 0, 0, 0,
- 0, 0, 0, 0, 3, 192, 255, 240, 195, 140, 15, 0, 148, 31, 0, 255,
- 96, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 15, 224, 0, 0,
- 0, 0, 0, 0, 0, 0, 255, 255, 159, 31, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 126, 1, 0, 0,
- 0, 8, 0, 112, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 30, 0, 0, 255, 255, 223, 255, 255, 255, 255, 255,
- 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 255, 255, 255, 255,
- 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 63, 255, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255,
- 239, 255, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
- 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 0, 0, 0, 0, 3, 0,
+static RE_UINT8 re_ideographic_table_3[] = {
+ 0, 0, 0, 0, 192, 0, 0, 0, 254, 3, 0, 7, 255, 255, 255, 255,
+ 255, 255, 255, 31, 255, 63, 255, 255, 255, 255, 255, 3, 16, 0, 0, 0,
+ 255, 255, 255, 0, 255, 255, 63, 0, 255, 1, 0, 0, 0, 0, 255, 255,
+ 255, 255, 255, 15, 255, 255, 255, 63, 255, 255, 31, 0, 3, 0, 255, 255,
+ 1, 0, 0, 0, 255, 7, 0, 0
};
-/* Math: 628 bytes. */
-
-RE_UINT32 re_get_math(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_math_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_math_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_math_stage_3[pos + f] << 6;
- pos += code;
- value = (re_math_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+RE_UINT32 re_get_ideographic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_ideographic_table_1[field_2];
+ v = re_ideographic_table_2[(v << 5) | field_1];
+ v = re_ideographic_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Alphabetic. */
+/* IDS_Binary_Operator. */
+RE_UINT32 re_get_ids_binary_operator(RE_UINT32 codepoint) {
+ if (0x2FF0 <= codepoint && codepoint <= 0x2FF1)
+ return 1;
+ if (0x2FF4 <= codepoint && codepoint <= 0x2FFB)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_alphabetic_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
+/* ID_Start. */
+static RE_UINT8 re_id_start_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 9, 38, 9, 9, 39, 9, 40, 41, 9, 9, 9, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 42, 12, 12, 12, 43, 44, 12,
+ 12, 12, 12, 45, 12, 12, 12, 12, 12, 12, 46, 9, 9, 9, 47, 9,
+ 12, 12, 12, 12, 48, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -7455,3134 +12959,5435 @@ static RE_UINT8 re_alphabetic_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_alphabetic_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 31, 31, 31, 95, 96, 97, 98, 31, 31, 31, 31, 31, 31, 31, 31,
- 99, 100, 101, 31, 31, 31, 31, 31, 102, 103, 31, 31, 31, 31, 104, 31,
- 31, 105, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_alphabetic_stage_3[] = {
+static RE_UINT8 re_id_start_table_2[] = {
0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 7, 8, 9, 10, 4, 11,
- 4, 4, 4, 4, 12, 4, 4, 4, 4, 13, 14, 4, 15, 16, 17, 18,
- 19, 4, 20, 21, 4, 4, 22, 23, 24, 4, 25, 4, 4, 26, 27, 28,
- 29, 30, 31, 32, 0, 33, 34, 35, 4, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 0,
- 57, 58, 59, 60, 57, 61, 62, 63, 57, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 0, 74, 75, 76, 0, 77, 0, 78, 79, 80, 81, 0, 0,
- 4, 82, 24, 4, 83, 4, 84, 85, 4, 4, 86, 4, 87, 88, 89, 4,
- 90, 4, 72, 0, 91, 4, 4, 92, 71, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 93, 1, 4, 4, 94, 95, 96, 96, 97, 4, 98, 99, 0,
- 0, 4, 4, 31, 4, 100, 4, 101, 102, 103, 24, 104, 4, 105, 106, 0,
- 107, 4, 102, 108, 0, 109, 0, 0, 4, 110, 111, 0, 4, 112, 4, 113,
- 4, 114, 115, 116, 117, 64, 0, 118, 4, 4, 4, 4, 4, 4, 0, 119,
- 92, 4, 120, 116, 4, 121, 122, 123, 0, 0, 0, 124, 125, 0, 0, 0,
- 126, 127, 128, 4, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 129, 4, 106, 4, 130, 102, 4, 4, 4, 4, 131,
- 4, 84, 4, 132, 114, 133, 133, 4, 0, 134, 0, 0, 0, 0, 0, 0,
- 135, 136, 71, 4, 137, 71, 4, 85, 138, 13, 4, 4, 139, 72, 0, 24,
- 4, 4, 4, 4, 4, 101, 0, 0, 4, 4, 4, 4, 4, 4, 4, 91,
- 4, 4, 4, 4, 30, 0, 24, 116, 140, 141, 4, 142, 4, 4, 4, 91,
- 143, 144, 4, 4, 145, 4, 146, 143, 147, 148, 4, 96, 4, 4, 149, 150,
- 27, 100, 151, 81, 4, 152, 134, 153, 4, 114, 154, 155, 4, 102, 156, 157,
- 158, 159, 85, 160, 4, 4, 4, 32, 4, 4, 4, 4, 4, 161, 162, 107,
- 4, 4, 4, 163, 4, 4, 164, 0, 165, 166, 167, 4, 4, 26, 168, 4,
- 4, 116, 24, 4, 169, 4, 148, 170, 0, 0, 0, 171, 4, 4, 4, 81,
- 0, 1, 1, 172, 4, 102, 173, 0, 174, 175, 176, 0, 4, 4, 4, 72,
- 0, 0, 4, 177, 0, 0, 0, 0, 0, 0, 0, 0, 81, 4, 178, 0,
- 4, 25, 100, 72, 116, 4, 179, 0, 4, 4, 4, 4, 116, 24, 180, 107,
- 4, 160, 4, 60, 0, 0, 0, 0, 4, 114, 101, 148, 0, 0, 0, 0,
- 181, 182, 101, 114, 102, 0, 0, 183, 101, 164, 0, 0, 4, 184, 0, 0,
- 185, 101, 0, 81, 81, 0, 78, 186, 4, 101, 101, 151, 26, 0, 0, 0,
- 4, 4, 15, 0, 4, 151, 4, 151, 4, 148, 0, 0, 0, 0, 0, 0,
- 81, 187, 188, 0, 0, 0, 0, 114, 4, 4, 188, 0, 144, 31, 24, 15,
- 4, 151, 189, 190, 4, 4, 191, 0, 192, 193, 0, 0, 194, 117, 4, 15,
- 39, 48, 195, 60, 0, 0, 0, 0, 4, 4, 196, 0, 4, 4, 197, 0,
- 0, 0, 0, 0, 4, 198, 199, 0, 4, 102, 200, 0, 4, 201, 0, 0,
- 64, 32, 0, 0, 0, 0, 0, 0, 4, 31, 0, 0, 0, 4, 4, 202,
- 0, 0, 0, 0, 0, 203, 29, 204, 4, 205, 24, 4, 206, 0, 4, 31,
- 207, 208, 77, 209, 169, 210, 0, 0, 211, 212, 213, 214, 215, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 114, 4, 4, 4, 4, 164, 0, 0, 0,
- 4, 4, 4, 139, 4, 4, 4, 4, 4, 4, 60, 0, 0, 0, 0, 0,
- 4, 139, 0, 0, 0, 0, 0, 0, 4, 4, 216, 0, 0, 0, 0, 0,
- 4, 31, 102, 0, 0, 0, 24, 154, 4, 91, 60, 217, 91, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 218, 4, 219, 0, 0, 220,
- 4, 4, 4, 4, 4, 4, 4, 221, 4, 4, 4, 4, 4, 4, 4, 151,
- 102, 0, 222, 223, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 107,
- 4, 4, 4, 224, 225, 0, 0, 0, 4, 4, 226, 4, 227, 228, 229, 4,
- 230, 231, 232, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 233, 234, 85,
- 226, 226, 130, 130, 207, 207, 235, 0, 236, 237, 0, 0, 0, 0, 0, 0,
- 4, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 240,
- 4, 4, 4, 4, 4, 4, 186, 0, 4, 4, 241, 0, 0, 0, 0, 0,
- 229, 242, 243, 244, 245, 246, 0, 0, 0, 24, 247, 247, 106, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 114, 0, 4, 177, 4, 4, 4, 4, 4, 4,
- 116, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 248, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 77, 116, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
+ 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
+ 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
+ 27, 28, 29, 17, 0, 30, 31, 0, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 45, 49, 50, 51, 52, 46, 0,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0,
+ 68, 69, 67, 0, 70, 71, 72, 0, 73, 0, 74, 75, 76, 0, 0, 0,
+ 4, 77, 78, 79, 80, 4, 81, 82, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 83, 4, 84, 85, 86, 4, 87, 4, 88, 0, 22, 4, 4, 89,
+ 68, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 90, 1, 4, 4, 91, 92, 93, 93, 94, 4, 95, 96, 0,
+ 0, 4, 4, 29, 4, 97, 4, 98, 99, 0, 15, 100, 4, 101, 102, 0,
+ 103, 4, 104, 0, 0, 105, 0, 0, 106, 95, 107, 0, 108, 109, 4, 110,
+ 4, 111, 112, 113, 114, 115, 0, 116, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 89, 4, 117, 113, 4, 118, 119, 120,
+ 0, 0, 0, 121, 122, 0, 0, 0, 123, 124, 125, 4, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 126, 99, 4, 4, 4, 4, 127, 4, 81, 4, 128, 103, 129, 129, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 131, 68, 4, 132, 68, 4, 82, 106, 12, 4, 4, 133, 4, 0, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 134,
+ 4, 4, 4, 4, 75, 0, 15, 113, 4, 4, 4, 4, 4, 4, 4, 4,
+ 135, 136, 4, 137, 113, 4, 4, 22, 138, 139, 4, 4, 140, 4, 141, 142,
+ 143, 144, 4, 95, 139, 95, 0, 145, 25, 146, 67, 134, 32, 147, 148, 149,
+ 4, 14, 150, 151, 4, 152, 153, 154, 155, 156, 82, 157, 4, 4, 4, 144,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 158, 159, 160,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 161, 4, 4, 162, 0, 163, 164, 165, 4, 4, 93, 166, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 113, 15, 4, 167, 4, 31, 168,
+ 0, 0, 0, 169, 4, 4, 4, 134, 0, 1, 1, 170, 4, 99, 171, 0,
+ 172, 173, 174, 0, 4, 4, 4, 88, 0, 0, 4, 104, 0, 0, 0, 0,
+ 0, 0, 0, 0, 134, 4, 175, 0, 4, 23, 176, 98, 113, 4, 177, 0,
+ 4, 4, 4, 4, 113, 15, 178, 160, 4, 179, 4, 111, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 103, 98, 31, 0, 0, 0, 0,
+ 180, 181, 98, 103, 99, 0, 0, 182, 98, 162, 0, 0, 4, 183, 0, 0,
+ 184, 98, 0, 134, 134, 0, 74, 185, 4, 98, 98, 147, 93, 0, 0, 0,
+ 4, 4, 14, 0, 4, 147, 4, 147, 4, 111, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 186, 0, 0, 134, 187, 110, 0, 0, 15, 185, 103,
+ 108, 188, 0, 0, 108, 22, 15, 14, 108, 67, 189, 190, 108, 147, 191, 0,
+ 192, 193, 0, 0, 194, 114, 99, 0, 48, 45, 195, 56, 0, 0, 0, 0,
+ 4, 104, 196, 56, 4, 22, 197, 0, 0, 0, 0, 0, 4, 133, 198, 0,
+ 4, 22, 199, 0, 4, 200, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
+ 4, 193, 0, 0, 0, 4, 4, 201, 202, 203, 204, 0, 0, 205, 175, 206,
+ 207, 208, 209, 4, 210, 0, 4, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 211, 133, 73, 212, 22, 0, 0, 0, 213, 175, 214, 215, 216, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 46, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 162, 0, 0, 0,
+ 4, 4, 4, 133, 4, 4, 4, 4, 4, 4, 111, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 29, 99, 0, 0, 0, 15, 217, 4, 22, 111, 218, 22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 219, 0, 166, 0, 0, 220,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 188,
+ 4, 4, 4, 4, 4, 4, 98, 0, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 99, 0, 221, 222, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 30, 4, 225, 226, 227, 4, 228, 229, 230, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 231, 232, 82, 30, 30, 126, 126, 211, 211, 150, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 233, 234, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 193, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 185, 0, 4, 4, 235, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 227, 236, 237, 238, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 113, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 104, 4, 4, 4, 4, 4, 4,
+ 113, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 241, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 73,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 17, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_alphabetic_stage_4[] = {
+static RE_UINT8 re_id_start_table_3[] = {
0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 32, 0, 0, 0,
- 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
- 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0,
- 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0, 0, 0, 255, 7,
- 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31, 254, 225, 0, 156,
- 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0, 0, 252, 255, 255,
- 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0, 255, 255, 255, 1,
- 255, 7, 0, 0, 255, 255, 223, 63, 0, 0, 240, 255, 248, 3, 255, 255,
- 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255, 239, 159, 249, 255,
- 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16, 238, 135, 249, 255,
- 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0, 238, 191, 251, 255,
- 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30, 238, 159, 249, 255,
- 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195,
- 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227, 223, 29, 96, 7,
- 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64, 15, 0, 6, 0,
- 255, 255, 255, 231, 223, 93, 240, 128, 15, 0, 0, 252, 236, 255, 127, 252,
- 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0, 254, 255, 255, 255,
- 255, 255, 255, 7, 127, 32, 0, 0, 214, 247, 255, 255, 175, 255, 255, 59,
- 95, 32, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 254, 255,
- 3, 255, 255, 254, 255, 255, 255, 31, 255, 255, 127, 249, 255, 255, 0, 60,
- 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255,
- 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 0, 0,
- 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 15, 0,
- 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255, 255, 1, 128, 16,
- 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 1,
- 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0, 255, 255, 255, 15,
- 254, 255, 31, 0, 128, 0, 0, 0, 255, 255, 239, 255, 239, 15, 0, 0,
- 255, 243, 0, 252, 191, 255, 3, 0, 255, 255, 127, 0, 0, 224, 0, 252,
- 255, 255, 255, 63, 255, 1, 255, 255, 0, 222, 111, 4, 128, 255, 31, 0,
- 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
- 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62, 80, 189, 255, 243,
- 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255, 31, 120, 12, 0,
- 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0, 224, 0, 0, 0,
- 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255, 255, 127, 0, 0,
- 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143, 0, 0, 128, 255,
- 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0, 191, 255, 255, 255,
- 255, 0, 0, 0, 47, 0, 0, 0, 0, 0, 252, 232, 255, 255, 7, 0,
- 255, 255, 247, 255, 255, 255, 0, 124, 255, 63, 0, 0, 255, 255, 127, 252,
- 5, 0, 0, 56, 255, 255, 60, 0, 126, 126, 126, 0, 127, 127, 255, 255,
- 255, 0, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
- 0, 0, 248, 255, 255, 255, 252, 255, 0, 0, 255, 15, 0, 0, 223, 255,
- 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
- 255, 63, 255, 63, 255, 255, 31, 0, 255, 255, 1, 0, 15, 255, 62, 0,
- 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
- 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0, 128, 0, 255, 255,
- 63, 0, 0, 0, 112, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
- 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191, 159, 25, 129, 224,
- 187, 7, 0, 128, 179, 0, 0, 0, 255, 255, 63, 127, 0, 0, 0, 63,
- 17, 0, 0, 0, 255, 255, 63, 1, 0, 0, 0, 128, 255, 252, 255, 255,
- 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32, 255, 253, 255, 255,
- 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255,
- 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255, 255, 127, 123, 1,
- 127, 0, 0, 0, 248, 255, 255, 224, 255, 135, 255, 255, 255, 128, 255, 255,
- 11, 0, 0, 0, 255, 255, 255, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 223, 255, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 247, 15, 0, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63, 0, 64, 0, 0,
- 255, 15, 0, 0, 143, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 255, 3, 255, 255,
- 3, 0, 255, 255,
-};
-
-/* Alphabetic: 2596 bytes. */
-
-RE_UINT32 re_get_alphabetic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_alphabetic_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_alphabetic_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_alphabetic_stage_3[pos + f] << 5;
- pos += code;
- value = (re_alphabetic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 188,
+ 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
+ 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
+ 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
+ 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
+ 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 255, 255, 0, 0, 0,
+ 240, 255, 255, 255, 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255,
+ 225, 159, 249, 255, 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16,
+ 224, 135, 249, 255, 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0,
+ 224, 191, 251, 255, 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2,
+ 224, 159, 249, 255, 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214,
+ 24, 199, 255, 3, 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7,
+ 3, 0, 0, 0, 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64,
+ 3, 0, 6, 0, 240, 223, 253, 255, 255, 255, 255, 39, 0, 64, 112, 128,
+ 3, 0, 0, 252, 224, 255, 127, 252, 255, 255, 251, 47, 127, 0, 0, 0,
+ 254, 255, 255, 255, 255, 255, 13, 0, 214, 247, 255, 255, 175, 255, 13, 32,
+ 95, 0, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 0, 0,
+ 0, 31, 0, 0, 255, 7, 0, 128, 0, 0, 63, 60, 98, 192, 225, 255,
+ 3, 64, 0, 0, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 255, 7, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
+ 255, 223, 3, 0, 255, 255, 3, 0, 255, 223, 1, 0, 255, 255, 15, 0,
+ 0, 0, 128, 16, 255, 5, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0, 255, 255, 127, 0,
+ 255, 255, 31, 0, 128, 0, 0, 0, 224, 255, 255, 255, 224, 15, 0, 0,
+ 248, 255, 255, 255, 1, 192, 0, 252, 63, 0, 0, 0, 15, 0, 0, 0,
+ 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 255, 255, 255, 231,
+ 0, 222, 111, 4, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 127, 255, 255, 31, 120, 12, 0,
+ 255, 128, 0, 0, 127, 127, 127, 127, 224, 0, 0, 0, 254, 3, 62, 31,
+ 255, 255, 127, 248, 255, 127, 0, 0, 255, 255, 255, 31, 255, 31, 255, 255,
+ 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255, 252, 255, 255, 255,
+ 255, 249, 255, 255, 252, 7, 0, 0, 0, 0, 224, 255, 187, 247, 255, 255,
+ 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 7, 0,
+ 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0, 255, 255, 127, 196,
+ 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 3, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 160,
+ 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255,
+ 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 1, 0,
+ 255, 7, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192,
+ 1, 0, 239, 254, 31, 0, 0, 0, 255, 3, 3, 0, 128, 0, 255, 255,
+ 255, 255, 255, 0, 144, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
+ 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
+ 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
+ 255, 7, 0, 1, 0, 0, 0, 128, 127, 242, 111, 255, 255, 255, 0, 128,
+ 2, 0, 0, 0, 255, 252, 255, 255, 10, 0, 0, 0, 1, 248, 255, 255,
+ 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32, 255, 253, 255, 255,
+ 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0, 191, 253, 255, 255,
+ 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224, 255, 7, 1, 0,
+ 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 3, 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 253, 255, 255, 247, 255, 31, 128, 63, 0, 64, 0, 0, 15, 8, 0, 0,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15, 3, 0, 255, 255
+};
+
+RE_UINT32 re_get_id_start(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_id_start_table_1[field_2];
+ v = re_id_start_table_2[(v << 5) | field_1];
+ v = re_id_start_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Lowercase. */
-
-static RE_UINT8 re_lowercase_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_lowercase_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 19, 20, 3, 3, 3, 3,
- 3, 3, 3, 3, 21, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_lowercase_stage_3[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 5, 13, 14, 15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 24, 25,
- 0, 26, 15, 5, 27, 5, 28, 5, 5, 29, 0, 15, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 31, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
- 0, 0, 0, 0, 30, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0,
- 5, 5, 5, 5, 33, 5, 5, 5, 34, 35, 36, 37, 35, 38, 39, 40,
- 0, 0, 0, 41, 42, 0, 0, 0, 43, 44, 45, 26, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 47, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 26, 48, 49, 5, 5, 5, 50, 15, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 52, 53, 0, 0, 0, 0, 54, 5, 55, 56, 57, 58, 59,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 60, 61, 15, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 63, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 68, 69, 81,
- 71, 72, 82, 64, 75, 83, 84, 85, 86, 82, 87, 26, 88, 75, 89, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_lowercase_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 0, 0, 0, 128,
- 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 85, 85, 171, 170, 170,
- 170, 170, 170, 212, 41, 49, 36, 78, 42, 45, 81, 230, 64, 82, 85, 181,
- 170, 170, 41, 170, 170, 170, 250, 147, 133, 170, 255, 255, 255, 255, 255, 255,
- 255, 255, 239, 255, 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 138, 60, 0, 0, 1, 0, 0, 240, 255, 255,
- 255, 127, 227, 170, 170, 170, 47, 25, 0, 0, 255, 255, 2, 168, 170, 170,
- 84, 213, 170, 170, 170, 170, 0, 0, 255, 1, 0, 0, 255, 255, 255, 231,
- 0, 0, 0, 63, 170, 170, 234, 191, 255, 0, 63, 0, 255, 0, 255, 0,
- 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64, 220, 0, 207, 0,
- 255, 0, 220, 0, 0, 0, 2, 128, 0, 0, 255, 31, 0, 196, 8, 0,
- 0, 128, 16, 50, 192, 67, 0, 0, 16, 0, 0, 0, 255, 3, 0, 0,
- 255, 255, 255, 127, 98, 21, 218, 63, 26, 80, 8, 0, 191, 32, 0, 0,
- 170, 42, 0, 0, 170, 170, 170, 58, 168, 170, 171, 170, 170, 170, 255, 149,
- 170, 80, 186, 170, 170, 130, 160, 170, 8, 0, 0, 0, 0, 0, 0, 7,
- 255, 255, 255, 247, 255, 0, 255, 255, 127, 0, 248, 0, 0, 255, 255, 255,
- 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0,
- 0, 0, 0, 252, 255, 255, 15, 0, 0, 192, 223, 255, 255, 0, 0, 0,
- 252, 255, 255, 15, 0, 0, 192, 235, 239, 255, 0, 0, 0, 252, 255, 255,
- 15, 0, 0, 192, 255, 255, 255, 0, 0, 0, 252, 255, 255, 15, 0, 0,
- 192, 255, 255, 255, 0, 192, 255, 255, 0, 0, 192, 255, 63, 0, 0, 0,
- 252, 255, 255, 247, 3, 0, 0, 240, 255, 255, 223, 15, 255, 127, 63, 0,
- 255, 253, 0, 0, 247, 11, 0, 0, 252, 255, 255, 255, 15, 0, 0, 0,
-};
+/* IDS_Trinary_Operator. */
+RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 codepoint) {
+ if (0x2FF2 <= codepoint && codepoint <= 0x2FF3)
+ return 1;
-/* Lowercase: 1000 bytes. */
-
-RE_UINT32 re_get_lowercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_lowercase_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_lowercase_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_lowercase_stage_3[pos + f] << 5;
- pos += code;
- value = (re_lowercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return 0;
}
-/* Uppercase. */
-
-static RE_UINT8 re_uppercase_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_uppercase_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12,
- 3, 3, 13, 3, 3, 3, 14, 3, 3, 3, 3, 3, 15, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 16, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 17, 18, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 20, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_uppercase_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
- 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
- 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+/* Indic_Positional_Category. */
+static RE_UINT8 re_indic_positional_category_table_1[] = {
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
- 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 0, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 19, 39, 0, 0, 0,
- 0, 0, 0, 0, 0, 40, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 41, 0, 42, 3, 3, 3, 43, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 44, 45, 0, 0, 0, 0, 46, 3, 47, 48, 49, 50, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 18, 51, 0, 0, 0, 26, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 55, 56, 57, 58, 59, 26, 60, 61, 62, 63, 64, 65, 54, 55, 56,
- 57, 66, 25, 26, 60, 57, 67, 68, 69, 70, 40, 41, 26, 71, 72, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 73, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 74, 74, 60, 0, 0, 0,
-};
-
-static RE_UINT8 re_uppercase_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
- 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
- 213, 210, 174, 17, 144, 164, 170, 74, 85, 85, 210, 85, 85, 85, 5, 108,
- 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
- 0, 128, 28, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
- 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
- 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
- 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
- 0, 255, 0, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 31, 0, 15,
- 132, 56, 39, 62, 80, 61, 15, 192, 32, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192, 5, 40, 4, 0,
- 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85, 85, 85, 0, 106,
- 85, 40, 69, 85, 85, 125, 95, 85, 116, 0, 0, 0, 255, 0, 0, 0,
- 255, 255, 15, 0, 255, 255, 7, 0, 255, 255, 255, 3, 0, 0, 240, 255,
- 255, 63, 0, 0, 0, 255, 255, 255, 3, 0, 0, 208, 100, 222, 63, 0,
- 255, 3, 0, 0, 176, 231, 223, 31, 0, 0, 0, 123, 95, 252, 1, 0,
- 0, 240, 255, 255, 63, 0, 0, 0, 3, 0, 0, 240, 1, 0, 0, 0,
- 252, 255, 255, 7, 0, 0, 0, 240, 255, 255, 31, 0, 255, 1, 0, 0,
- 0, 4, 0, 0, 3, 0, 0, 0, 255, 3, 255, 255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Uppercase: 916 bytes. */
-
-RE_UINT32 re_get_uppercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_uppercase_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_uppercase_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_uppercase_stage_3[pos + f] << 5;
- pos += code;
- value = (re_uppercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Cased. */
-
-static RE_UINT8 re_cased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_indic_positional_category_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 6, 10, 11, 9, 6, 12, 13, 5, 14, 15, 4, 16, 17, 18, 0,
+ 19, 20, 21, 4, 5, 14, 22, 4, 23, 24, 25, 4, 5, 0, 26, 27,
+ 0, 28, 29, 0, 0, 30, 31, 0, 32, 33, 0, 34, 35, 36, 37, 0,
+ 0, 38, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 43, 43, 0, 44, 45, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 47, 48, 0,
+ 49, 0, 50, 51, 0, 0, 0, 0, 52, 53, 54, 55, 56, 57, 0, 58,
+ 0, 59, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 65, 0, 0, 66, 67, 68, 69, 0, 70, 71, 0, 1, 72, 73, 74,
+ 0, 75, 76, 77, 0, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 81,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 85, 86, 0, 56, 87, 0, 0, 88, 89, 90, 91, 56, 92, 93, 0,
+ 0, 94, 0, 0, 0, 0, 95, 96, 23, 97, 98, 99, 0, 0, 0, 0,
+ 0, 100, 101, 0, 0, 102, 103, 0, 0, 0, 0, 0, 0, 104, 105, 0,
+ 0, 106, 107, 0, 0, 108, 0, 0, 109, 110, 0, 0, 0, 0, 0, 0,
+ 0, 111, 0, 0, 0, 0, 0, 0, 0, 112, 113, 0, 0, 0, 114, 115,
+ 116, 117, 118, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 120, 0, 0, 121, 122, 0, 0, 0, 123, 124, 0, 125, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_cased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+static RE_UINT8 re_indic_positional_category_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 2, 4,
+ 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 2,
+ 0, 1, 3, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 4,
+ 2, 3, 3, 3, 3, 0, 0, 4, 4, 0, 0, 5, 5, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 3, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 3, 3, 3, 1, 0, 1, 1, 6, 0, 2, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 1,
+ 2, 3, 3, 3, 3, 0, 0, 4, 7, 0, 0, 5, 8, 3, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 1, 2, 2, 0, 0, 0, 4, 4, 4, 0, 5, 5, 5, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 2, 2, 2, 2, 0, 1, 1, 9, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 2, 2, 2, 2, 0, 1, 6, 6, 0, 6, 6, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2,
+ 2, 2, 2, 3, 3, 0, 4, 4, 4, 0, 5, 5, 5, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2,
+ 2, 2, 1, 1, 3, 0, 3, 0, 2, 4, 7, 4, 5, 8, 5, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 1, 3, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 3, 0, 1, 0, 0, 0, 0, 2, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 1, 9, 3, 3, 9, 9, 9, 9, 1, 1, 1, 1, 1, 2,
+ 1, 9, 1, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 19, 20, 3, 3, 3, 3,
- 3, 3, 3, 3, 21, 3, 3, 3, 22, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_cased_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 5, 6, 4,
- 4, 4, 4, 4, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 4, 15,
- 4, 4, 4, 4, 16, 4, 4, 4, 4, 17, 18, 4, 19, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 22,
- 0, 0, 0, 0, 23, 21, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4, 22, 4, 24, 25, 4, 26, 27, 28,
- 0, 0, 0, 29, 30, 0, 0, 0, 31, 32, 33, 4, 34, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 4, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 37, 38, 4, 4, 4, 4, 39, 4, 40, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 41, 25, 0, 0, 0, 0, 42, 4, 4, 43, 4, 44, 45,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 5, 47, 4, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 4, 4, 49, 0, 0, 46, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 52, 4, 52, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 53, 4, 54, 55, 56, 4, 57, 58, 59, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 60, 61, 5, 53, 53, 37, 37, 62, 62, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 65, 65, 36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 3,
+ 3, 4, 1, 1, 1, 1, 1, 3, 2, 0, 1, 2, 11, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 3, 3, 0, 0, 0, 0, 3, 3,
+ 3, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 2, 4, 1, 1, 2, 2, 2, 2, 2, 2, 3, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 3, 3, 3, 7, 8,
+ 5, 4, 4, 4, 5, 5, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 1, 1, 3, 2, 2, 6, 6, 1, 1, 2, 2, 2, 0, 0, 0, 0,
+ 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 1, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 10, 10, 10, 2, 2, 10, 2, 2, 2, 2, 2,
+ 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 2, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 3, 2, 1, 1, 1, 3, 3, 3, 3, 0,
+ 0, 2, 1, 2, 2, 1, 1, 1, 1, 3, 3, 1, 3, 2, 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3,
+ 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 1, 1, 3, 3, 3, 12, 9, 13, 4, 4,
+ 5, 5, 1, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 3, 1, 3, 4, 2, 1, 1, 2, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1,
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 4, 4, 7, 2, 2, 3, 1, 1, 1,
+ 1, 1, 1, 1, 4, 4, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 14, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3,
+ 1, 2, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 3, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 1, 3, 3, 3, 3, 1,
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 2, 2, 1, 1, 3, 3, 4, 4, 1, 3, 12, 15,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 1, 4,
+ 4, 1, 3, 2, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 1, 1, 3, 10, 10, 1, 1, 10, 2, 10, 10, 2, 1, 1,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 1, 4, 2,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 2, 1, 2, 2, 3, 2, 2, 0, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 3, 3, 0, 1, 14, 0, 0, 0, 0, 0, 3, 3, 3, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0,
+ 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 4, 2, 3, 3, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 4, 1, 9, 9,
+ 1, 3, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 4, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 6,
+ 2, 0, 1, 1, 0, 0, 0, 0, 0, 3, 3, 1, 3, 0, 4, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3,
+ 1, 1, 6, 6, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 2, 4, 2, 3, 3, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 2, 2,
+ 1, 2, 2, 2, 2, 0, 0, 4, 4, 0, 0, 5, 5, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 4, 2, 3, 3, 3, 3, 3, 3, 1, 1,
+ 2, 2, 3, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 4, 2, 3, 3, 3, 3, 3, 3, 4, 1, 7, 5, 2, 5, 1,
+ 1, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 4, 2, 3, 3, 3, 3, 0, 0, 4, 7, 5, 8, 1, 1, 2, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 1, 2, 3,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 4, 2,
+ 3, 3, 1, 1, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 1,
+ 2, 2, 1, 1, 3, 3, 4, 1, 3, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 2, 3,
+ 3, 3, 3, 1, 1, 1, 1, 1, 2, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 4, 0, 4, 5, 0, 0, 1, 1, 2, 0, 1,
+ 2, 1, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 4, 2, 3, 3, 3, 3, 0, 0, 1, 1, 2, 2, 2, 2,
+ 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 3, 1, 1, 1, 1, 2, 1, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 3, 3, 1, 1, 1, 2, 2, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 1, 1, 3, 3, 3, 3, 3, 0, 1, 1, 1, 1, 1, 1, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 0, 2, 3, 3, 3, 3, 3, 3,
+ 3, 4, 3, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 3, 0, 0, 0, 1, 0, 1, 1, 0, 1,
+ 1, 1, 3, 1, 3, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0,
+ 1, 1, 0, 2, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 3, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_cased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 255, 255, 255, 247, 240, 255, 255, 255, 255, 255, 239, 255,
- 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 207, 188, 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255,
- 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 0, 255, 1, 0, 0,
- 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
- 63, 63, 255, 170, 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15,
- 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
- 80, 189, 31, 242, 224, 67, 0, 0, 24, 0, 0, 0, 0, 0, 192, 255,
- 255, 3, 0, 0, 255, 127, 255, 255, 255, 255, 255, 127, 31, 120, 12, 0,
- 191, 32, 0, 0, 255, 63, 0, 0, 252, 255, 255, 255, 255, 120, 255, 255,
- 124, 0, 0, 0, 0, 0, 0, 7, 0, 0, 255, 255, 255, 0, 255, 255,
- 127, 0, 248, 0, 255, 255, 0, 0, 255, 255, 15, 255, 255, 255, 255, 15,
- 255, 255, 7, 0, 255, 255, 223, 255, 255, 255, 255, 223, 100, 222, 255, 235,
- 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
- 63, 255, 255, 255, 253, 255, 255, 247, 255, 253, 255, 255, 247, 15, 0, 0,
- 15, 0, 0, 0, 255, 3, 255, 255,
-};
+RE_UINT32 re_get_indic_positional_category(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-/* Cased: 912 bytes. */
-
-RE_UINT32 re_get_cased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_cased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_cased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_cased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_cased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-/* Case_Ignorable. */
+ v = re_indic_positional_category_table_1[field_2];
+ v = re_indic_positional_category_table_2[(v << 5) | field_1];
+ v = re_indic_positional_category_table_3[(v << 5) | field_0];
-static RE_UINT8 re_case_ignorable_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9, 10,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ return v;
+}
-static RE_UINT8 re_case_ignorable_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 1, 17, 1, 1, 1, 18, 19, 20, 21, 22, 23, 24, 1, 25,
- 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 28, 29, 1,
- 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Indic_Syllabic_Category. */
+static RE_UINT8 re_indic_syllabic_category_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 31, 1, 1, 1, 32, 1, 33, 34, 35, 36, 37, 38, 1, 1, 1, 1,
+ 1, 1, 11, 1, 12, 13, 14, 15, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39, 1, 1, 40, 41,
- 1, 42, 43, 44, 1, 1, 1, 1, 1, 1, 45, 1, 1, 46, 1, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 64, 1, 1, 1, 65,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 66, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 67, 68, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1,
- 70, 71, 72, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 76, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_case_ignorable_stage_3[] = {
- 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 6, 6, 6, 6, 6, 7, 8, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 14,
- 15, 0, 16, 17, 0, 0, 18, 19, 20, 5, 21, 0, 0, 22, 0, 23,
- 24, 25, 26, 0, 0, 0, 27, 6, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 33, 37, 38, 36, 33, 39, 40, 32, 41, 42, 43, 44, 0, 45, 0,
- 46, 47, 48, 43, 32, 41, 49, 43, 50, 51, 34, 43, 0, 0, 52, 0,
- 0, 53, 54, 0, 0, 55, 56, 0, 57, 58, 0, 59, 60, 61, 62, 0,
- 0, 63, 64, 65, 66, 0, 0, 33, 0, 0, 67, 0, 0, 0, 0, 0,
- 68, 68, 69, 69, 0, 70, 71, 0, 72, 0, 73, 0, 74, 75, 0, 0,
- 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 78, 79, 0, 80, 0, 0,
- 81, 82, 44, 83, 50, 84, 0, 85, 0, 86, 0, 87, 0, 0, 88, 89,
- 0, 90, 6, 91, 92, 6, 6, 93, 0, 0, 0, 0, 0, 94, 95, 96,
- 97, 98, 0, 99, 100, 0, 5, 101, 0, 0, 0, 102, 0, 0, 0, 103,
- 0, 0, 0, 104, 0, 0, 0, 6, 0, 105, 0, 0, 0, 0, 0, 0,
- 106, 107, 0, 0, 108, 0, 0, 109, 110, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 87, 111, 0, 0, 112, 113, 0, 0, 114,
- 6, 50, 0, 17, 115, 0, 0, 57, 116, 74, 0, 0, 0, 0, 117, 118,
- 0, 119, 120, 0, 28, 121, 105, 74, 0, 122, 123, 124, 0, 125, 126, 127,
- 0, 0, 92, 0, 0, 0, 0, 128, 2, 0, 0, 0, 0, 129, 50, 0,
- 130, 131, 132, 0, 0, 0, 0, 133, 1, 2, 3, 17, 47, 0, 0, 134,
- 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 136, 0, 0, 0, 0, 137, 138, 0, 0, 0, 0, 0, 74,
- 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 32, 140, 141, 133, 50, 142, 143, 0, 28, 144, 0, 145, 50, 146, 147, 0,
- 0, 148, 0, 0, 0, 0, 133, 149, 50, 51, 3, 150, 0, 0, 0, 0,
- 0, 140, 151, 0, 0, 152, 153, 0, 0, 0, 0, 0, 0, 154, 155, 0,
- 0, 156, 3, 0, 0, 157, 0, 0, 67, 158, 0, 0, 0, 0, 0, 0,
- 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 3,
- 161, 162, 163, 0, 164, 0, 0, 0, 0, 165, 0, 0, 129, 166, 0, 0,
- 0, 167, 168, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
- 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
- 0, 173, 81, 0, 0, 0, 0, 0, 0, 0, 105, 0, 174, 0, 0, 175,
- 0, 0, 0, 0, 176, 81, 0, 0, 0, 0, 0, 177, 178, 179, 0, 0,
- 0, 0, 180, 0, 0, 0, 0, 0, 6, 181, 6, 182, 183, 184, 0, 0,
- 185, 186, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 173, 0,
- 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
- 32, 6, 6, 6, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 131,
-};
-
-static RE_UINT8 re_case_ignorable_stage_4[] = {
- 0, 0, 0, 0, 128, 64, 0, 4, 0, 0, 0, 64, 1, 0, 0, 0,
- 0, 161, 144, 1, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 48, 4,
- 176, 0, 0, 0, 248, 3, 0, 0, 0, 0, 0, 2, 0, 0, 254, 255,
- 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 16, 0, 63, 0, 255, 23,
- 1, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 191, 255, 61, 0, 0,
- 0, 128, 2, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 36,
- 0, 0, 192, 255, 255, 63, 0, 0, 0, 0, 0, 14, 0, 0, 248, 255,
- 7, 0, 0, 0, 0, 0, 0, 20, 254, 33, 254, 0, 12, 0, 2, 0,
- 2, 0, 0, 0, 0, 0, 0, 16, 30, 32, 0, 0, 12, 0, 0, 64,
- 6, 0, 0, 0, 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0,
- 12, 0, 0, 252, 0, 0, 0, 144, 30, 32, 64, 0, 12, 0, 0, 0,
- 4, 0, 0, 0, 1, 32, 0, 0, 17, 0, 0, 0, 0, 0, 0, 192,
- 193, 61, 96, 0, 64, 48, 0, 0, 3, 0, 0, 0, 0, 0, 0, 24,
- 0, 4, 92, 0, 0, 0, 242, 7, 192, 127, 0, 0, 0, 0, 242, 31,
- 64, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
- 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
- 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
- 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 143, 32,
- 0, 120, 0, 0, 8, 0, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0,
- 135, 1, 4, 14, 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159,
- 128, 0, 255, 127, 15, 0, 0, 0, 0, 0, 208, 23, 0, 248, 15, 0,
- 60, 59, 0, 0, 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 0, 63,
- 0, 0, 247, 255, 253, 33, 16, 3, 0, 240, 255, 255, 255, 7, 0, 1,
- 0, 0, 0, 248, 255, 255, 255, 251, 0, 0, 0, 160, 3, 224, 0, 224,
- 0, 224, 0, 96, 0, 248, 0, 3, 144, 124, 0, 0, 223, 255, 2, 128,
- 0, 0, 255, 31, 255, 255, 1, 0, 0, 0, 0, 48, 0, 128, 3, 0,
- 0, 128, 0, 128, 0, 128, 0, 0, 32, 0, 0, 0, 0, 60, 62, 8,
- 0, 0, 0, 126, 0, 0, 0, 112, 0, 0, 32, 0, 0, 16, 0, 0,
- 0, 128, 247, 191, 0, 0, 0, 240, 0, 0, 3, 0, 0, 7, 0, 0,
- 68, 8, 0, 0, 48, 0, 0, 0, 255, 255, 3, 128, 192, 63, 0, 0,
- 128, 255, 3, 0, 0, 0, 200, 51, 0, 126, 102, 0, 8, 16, 0, 0,
- 0, 0, 1, 16, 0, 0, 157, 193, 2, 0, 0, 32, 0, 48, 88, 0,
- 32, 33, 0, 0, 0, 0, 252, 255, 255, 255, 8, 0, 255, 255, 0, 0,
- 0, 0, 36, 0, 0, 0, 0, 128, 8, 0, 0, 14, 0, 0, 0, 32,
- 0, 0, 192, 7, 110, 240, 0, 0, 0, 0, 0, 135, 240, 0, 0, 0,
- 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 120, 38, 0, 32, 0, 0,
- 128, 239, 31, 0, 0, 0, 8, 0, 0, 0, 192, 127, 0, 30, 0, 0,
- 0, 128, 211, 64, 248, 7, 0, 0, 192, 31, 31, 0, 92, 0, 0, 64,
- 0, 0, 248, 133, 13, 0, 0, 0, 0, 0, 60, 176, 1, 0, 0, 48,
- 0, 0, 248, 167, 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6,
- 0, 0, 240, 12, 254, 7, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14,
- 0, 252, 127, 3, 0, 0, 127, 191, 255, 252, 109, 0, 0, 0, 126, 180,
- 191, 0, 0, 0, 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 255, 1,
- 0, 0, 31, 0, 0, 0, 127, 0, 0, 128, 255, 255, 11, 0, 0, 0,
- 0, 0, 0, 96, 128, 3, 248, 255, 231, 15, 0, 0, 0, 60, 0, 0,
- 28, 0, 0, 0, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
- 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 0, 0, 255, 63,
- 0, 240, 0, 0, 240, 15, 0, 0,
-};
-
-/* Case_Ignorable: 1904 bytes. */
-
-RE_UINT32 re_get_case_ignorable(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_case_ignorable_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_case_ignorable_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_case_ignorable_stage_3[pos + f] << 5;
- pos += code;
- value = (re_case_ignorable_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Changes_When_Lowercased. */
-
-static RE_UINT8 re_changes_when_lowercased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_changes_when_lowercased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12,
- 3, 3, 13, 3, 3, 3, 14, 3, 3, 3, 3, 3, 15, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 16, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 17, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+static RE_UINT8 re_indic_syllabic_category_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 17, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 27, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 0, 48, 49, 50, 51, 52, 53, 0,
+ 54, 55, 56, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 54, 63, 64, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 68, 69, 54, 70, 71, 0,
+ 72, 54, 73, 74, 75, 0, 0, 0, 76, 77, 78, 0, 79, 80, 54, 81,
+ 54, 82, 83, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 0, 0, 86,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 0, 0, 88, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 0, 103, 104, 105, 106,
+ 107, 108, 109, 110, 54, 111, 112, 113, 0, 0, 0, 0, 0, 0, 114, 115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 119, 120, 121, 122, 123, 124, 0, 0, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 0, 0, 135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0,
+ 143, 144, 145, 146, 147, 148, 149, 0, 0, 0, 0, 0, 143, 150, 151, 0,
+ 143, 152, 153, 0, 154, 155, 65, 0, 156, 157, 0, 0, 0, 0, 0, 0,
+ 154, 158, 0, 0, 0, 0, 0, 0, 159, 160, 161, 0, 0, 162, 163, 164,
+ 165, 166, 167, 54, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 169, 170, 171, 172, 173, 174, 0, 0, 175, 176, 177, 178, 179, 65, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_lowercased_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
- 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
- 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+static RE_UINT8 re_indic_syllabic_category_table_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
- 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 30, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 19, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 39, 0, 40, 3, 3, 3, 41, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 42, 43, 0, 0, 0, 0, 44, 3, 45, 46, 47, 48, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 18, 49, 0, 0, 0, 26, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 52, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_changes_when_lowercased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
- 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
- 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85, 85, 85, 5, 108,
- 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
- 0, 128, 0, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
- 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
- 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
- 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
- 0, 255, 0, 0, 0, 255, 0, 31, 0, 31, 0, 15, 0, 31, 0, 31,
- 64, 12, 4, 0, 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0,
- 157, 234, 37, 192, 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5,
- 84, 85, 84, 85, 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85,
- 116, 0, 0, 0, 255, 0, 0, 0, 255, 255, 15, 0, 255, 255, 7, 0,
- 3, 0, 0, 0,
-};
-
-/* Changes_When_Lowercased: 764 bytes. */
-
-RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_lowercased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_lowercased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_lowercased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_lowercased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Changes_When_Uppercased. */
-
-static RE_UINT8 re_changes_when_uppercased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 8, 8,
+ 0, 12, 12, 0, 0, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 1, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0, 8, 8, 11, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 7, 0, 7,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 0,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 0, 7, 7, 0, 7, 7, 0, 0, 9, 0, 8, 8,
+ 8, 8, 8, 0, 0, 0, 0, 8, 8, 0, 0, 8, 8, 11, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4, 14, 1, 1, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6,
+ 6, 6, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 0, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 12, 12, 12, 9, 9, 9,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 8, 8, 8, 0, 0, 0, 0, 7, 7, 0, 7,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 16, 0, 6, 6, 6, 6, 6, 6, 0, 0, 0, 6, 6,
+ 6, 0, 6, 6, 6, 7, 0, 0, 0, 7, 7, 0, 7, 0, 7, 7,
+ 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 7, 0, 0, 0, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 8, 8,
+ 8, 8, 8, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6,
+ 6, 0, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 8, 8, 0, 7, 7, 7, 0, 0, 0, 0, 0,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6,
+ 6, 0, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 0, 0, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 7, 0,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 18, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 11, 19, 0,
+ 0, 0, 0, 0, 13, 13, 13, 8, 0, 0, 0, 0, 0, 0, 0, 6,
+ 6, 6, 8, 8, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13,
+ 0, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 11, 0, 0, 0, 0, 8,
+ 8, 8, 8, 8, 8, 0, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 0, 8, 20, 20, 20, 20, 21, 4, 18, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 7, 7, 0, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 8, 15, 15, 0, 0,
+ 8, 8, 8, 8, 8, 0, 0, 0, 20, 20, 20, 20, 0, 4, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 7, 7, 7, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 0, 3, 0, 3, 0, 9, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0,
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 5,
+ 8, 8, 4, 4, 18, 10, 0, 0, 22, 22, 22, 22, 22, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 4, 20, 5, 24, 18, 15, 15, 15, 15, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 1, 0,
+ 7, 7, 6, 6, 6, 6, 8, 8, 8, 8, 7, 7, 7, 7, 15, 15,
+ 15, 7, 8, 20, 20, 7, 7, 8, 8, 20, 20, 20, 20, 20, 7, 7,
+ 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 15, 8, 8, 8, 8, 20, 20, 20, 20, 20, 20, 20, 7, 20,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 20, 8, 8, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 8, 8, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 8, 8, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 4, 5, 8, 25, 25, 3, 26, 21, 3, 3,
+ 3, 18, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 23, 23, 23, 0, 0, 0, 0,
+ 27, 27, 4, 27, 27, 27, 27, 27, 27, 27, 8, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0,
+ 29, 29, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 27, 27, 27, 27, 27, 27, 27, 20, 20, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6,
+ 6, 6, 6, 7, 7, 15, 15, 23, 27, 27, 30, 23, 23, 23, 23, 0,
+ 24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 4, 20, 20, 20, 20, 20, 18, 3, 3, 0, 0, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 26, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 11, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 4, 26, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 23, 23, 23, 8, 8, 8, 8, 8, 8, 18, 24, 23, 23, 7, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 7, 7, 7, 27, 27,
+ 7, 7, 7, 7, 6, 6, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 27, 27, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 23, 23, 8, 8, 8, 8, 8, 8, 8, 27, 27, 27,
+ 27, 27, 27, 27, 4, 4, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 7, 7, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 13, 12, 17, 17, 12, 12, 12, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 8, 6, 6, 6, 11, 7, 7, 7, 7, 4, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 8, 8, 8, 8, 8, 0, 0, 0, 0, 18, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 28, 28,
+ 28, 28, 7, 7, 7, 7, 28, 23, 23, 7, 7, 7, 7, 7, 7, 7,
+ 7, 23, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 11, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 20, 20, 20, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 27,
+ 27, 27, 27, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 26, 5, 6, 6, 6, 6, 6, 7, 7, 7, 6, 6, 6, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 15, 15, 15,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 8, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 0,
+ 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 7, 7, 7, 1, 1, 1, 0, 0, 0, 7, 20, 20, 20, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20,
+ 29, 20, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 5, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
+ 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 27, 27, 27, 27, 27,
+ 27, 27, 27, 8, 8, 8, 8, 8, 8, 8, 8, 0, 20, 18, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 8, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 4, 5,
+ 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 0, 9, 9, 9, 0, 0, 0, 0, 24,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 5, 17, 17, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,
+ 4, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 9, 0, 0, 0, 0, 0,
+ 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 24, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 28, 28, 28, 28, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 11, 10, 35, 35, 0, 0, 0, 0, 0, 3, 9, 8, 8, 0, 8, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 8, 8, 8, 8, 4, 11, 9, 14, 0, 0, 0, 0, 0, 0, 12, 0,
+ 6, 6, 6, 6, 7, 7, 7, 0, 7, 0, 7, 7, 7, 7, 0, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 18, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 5, 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6,
+ 6, 0, 0, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7,
+ 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 9, 9, 10, 8, 8,
+ 8, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0, 8, 8, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 4, 4,
+ 6, 6, 8, 8, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0,
+ 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 11, 4, 4, 5, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 4,
+ 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4,
+ 4, 5, 11, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
+ 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 4, 4, 5, 11,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 8, 8, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 5, 11,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 5, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 11, 9, 7, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 15, 15, 15,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 4, 5, 11, 9, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 0, 0, 6, 0, 0, 7, 7, 7, 7,
+ 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 0, 8, 8, 0, 0, 4, 4, 18, 24, 35,
+ 15, 19, 15, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6, 6, 6, 6, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 4, 5,
+ 11, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 3, 18, 4, 4, 4, 4, 5, 35, 15, 15, 15, 15, 1,
+ 0, 0, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7,
+ 7, 7, 7, 7, 35, 35, 35, 35, 35, 35, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 4, 5, 14, 24, 0, 0, 0, 10, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 8, 4, 4, 5, 11,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
+ 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23, 23,
+ 8, 8, 8, 8, 8, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 0, 0, 0, 8, 0, 8, 8, 0, 8,
+ 4, 5, 9, 8, 18, 24, 19, 15, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6, 6, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 0,
+ 8, 8, 0, 8, 8, 4, 5, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 1, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_uppercased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_changes_when_uppercased_stage_3[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
- 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, 0,
- 5, 5, 5, 5, 35, 5, 5, 5, 36, 37, 38, 39, 24, 40, 41, 42,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 23, 43, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 44, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 45, 46, 5, 5, 5, 47, 24, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 49, 50, 0, 0, 0, 0, 51, 5, 52, 53, 54, 55, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 23, 24, 24, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 58, 59, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_changes_when_uppercased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
- 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
- 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 96, 91, 85, 181,
- 170, 170, 45, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
- 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
- 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
- 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
- 254, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 231, 0, 0, 0, 63,
- 255, 1, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15,
- 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63,
- 255, 255, 223, 80, 220, 16, 207, 0, 255, 0, 220, 16, 16, 0, 0, 0,
- 255, 3, 0, 0, 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0,
- 191, 32, 0, 0, 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170,
- 170, 170, 0, 148, 170, 16, 154, 170, 170, 2, 160, 170, 8, 0, 0, 0,
- 0, 0, 8, 0, 127, 0, 248, 0, 0, 255, 255, 255, 255, 255, 0, 0,
- 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0, 252, 255, 255, 255,
- 15, 0, 0, 0,
-};
+ v = re_indic_syllabic_category_table_1[field_2];
+ v = re_indic_syllabic_category_table_2[(v << 5) | field_1];
+ v = re_indic_syllabic_category_table_3[(v << 5) | field_0];
-/* Changes_When_Uppercased: 844 bytes. */
-
-RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_uppercased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_uppercased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_uppercased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_uppercased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* Changes_When_Titlecased. */
-
-static RE_UINT8 re_changes_when_titlecased_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+/* Join_Control. */
+RE_UINT32 re_get_join_control(RE_UINT32 codepoint) {
+ if (0x200C <= codepoint && codepoint <= 0x200D)
+ return 1;
-static RE_UINT8 re_changes_when_titlecased_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 5, 6,
- 7, 3, 8, 3, 3, 3, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 10, 3, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 3, 13,
- 3, 3, 14, 3, 3, 3, 15, 3, 3, 3, 3, 3, 16, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 17, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+ return 0;
+}
-static RE_UINT8 re_changes_when_titlecased_stage_3[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 5, 13, 14, 15, 16, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
- 0, 23, 24, 5, 25, 5, 26, 5, 5, 27, 0, 28, 29, 0, 0, 0,
+/* Joining_Group. */
+static RE_UINT8 re_joining_group_table_1[] = {
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_joining_group_table_2[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
- 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0,
- 5, 5, 5, 5, 34, 5, 5, 5, 35, 36, 37, 38, 36, 39, 40, 41,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 23, 42, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 43, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 44, 45, 5, 5, 5, 46, 24, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 48, 49, 0, 0, 0, 0, 50, 5, 51, 52, 53, 54, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 23, 24, 24, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 57, 58, 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0,
+ 0, 0, 0, 12, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_titlecased_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 0, 0, 0, 128,
- 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 84, 85, 171, 170, 170,
- 170, 170, 170, 212, 41, 17, 36, 70, 42, 33, 81, 162, 208, 86, 85, 181,
- 170, 170, 43, 170, 168, 170, 10, 144, 133, 170, 223, 26, 107, 159, 38, 32,
- 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 138, 56, 0, 0, 1, 0,
- 0, 240, 255, 255, 255, 127, 227, 170, 170, 170, 47, 9, 0, 0, 255, 255,
- 255, 255, 255, 255, 2, 168, 170, 170, 84, 213, 170, 170, 170, 170, 0, 0,
- 254, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 63, 255, 1, 0, 0,
- 0, 0, 0, 34, 0, 64, 0, 0, 170, 170, 234, 15, 255, 0, 63, 0,
- 255, 0, 255, 0, 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64,
- 220, 0, 207, 0, 255, 0, 220, 0, 16, 0, 0, 0, 255, 3, 0, 0,
- 255, 255, 255, 127, 98, 21, 72, 0, 10, 80, 8, 0, 191, 32, 0, 0,
- 170, 42, 0, 0, 170, 170, 170, 10, 168, 170, 168, 170, 170, 170, 0, 148,
- 170, 16, 154, 170, 170, 2, 160, 170, 8, 0, 0, 0, 0, 0, 8, 0,
- 127, 0, 248, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255,
- 255, 255, 255, 15, 255, 255, 7, 0, 252, 255, 255, 255, 15, 0, 0, 0,
+static RE_UINT8 re_joining_group_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 2, 2, 3, 2, 1, 2, 4, 5, 4, 4, 6, 6, 6, 7,
+ 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14,
+ 0, 15, 16, 17, 18, 19, 20, 21, 3, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16,
+ 0, 2, 2, 2, 0, 2, 3, 3, 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 10, 10, 11,
+ 12, 15, 15, 15, 15, 15, 15, 16, 16, 13, 22, 13, 17, 17, 17, 13,
+ 13, 13, 13, 13, 13, 18, 18, 18, 18, 20, 20, 20, 20, 23, 24, 6,
+ 5, 25, 25, 26, 3, 3, 3, 3, 3, 3, 3, 3, 14, 27, 14, 3,
+ 1, 1, 28, 28, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 12, 0, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 0, 30, 31, 31, 32, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 32, 51, 52, 30, 31, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 55,
+ 4, 4, 4, 4, 4, 4, 4, 6, 6, 7, 7, 8, 9, 12, 12, 12,
+ 15, 15, 13, 13, 13, 19, 19, 20, 20, 20, 18, 8, 8, 9, 6, 6,
+ 9, 8, 6, 2, 2, 14, 14, 1, 3, 3, 56, 56, 6, 9, 9, 17,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 6, 11, 15, 16, 18, 19, 1, 1, 8, 3, 68, 0, 7, 10,
+ 13, 69, 8, 12, 17, 0, 4, 4, 4, 8, 1, 70, 71, 72, 4, 4,
+ 4, 6, 13, 12, 71, 6, 6, 18, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 73, 74, 74, 75, 75, 76, 0, 77, 0, 78, 78, 0, 0, 79, 80, 81,
+ 82, 82, 82, 83, 84, 85, 86, 87, 88, 89, 89, 90, 90, 91, 92, 92,
+ 92, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 96, 97, 98, 99,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 100, 0, 101, 0,
+ 101, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Changes_When_Titlecased: 824 bytes. */
-
-RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_titlecased_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_titlecased_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_titlecased_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_titlecased_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+RE_UINT32 re_get_joining_group(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-/* Changes_When_Casefolded. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_changes_when_casefolded_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ v = re_joining_group_table_1[field_2];
+ v = re_joining_group_table_2[(v << 5) | field_1];
+ v = re_joining_group_table_3[(v << 5) | field_0];
-static RE_UINT8 re_changes_when_casefolded_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+ return v;
+}
-static RE_UINT8 re_changes_when_casefolded_stage_3[] = {
- 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
- 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
- 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 20, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
- 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 20, 36, 37, 38,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 21, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 41, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 42, 0, 43, 4, 4, 4, 44, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 50, 51, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 20, 20, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 20, 54, 0, 0, 0, 52, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 20, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 57, 0, 0, 0, 0, 0, 0,
+/* Joining_Type. */
+static RE_UINT8 re_joining_type_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15,
+ 16, 9, 17, 18, 19, 20, 21, 22, 9, 9, 9, 9, 9, 23, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24, 25, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 26,
+ 9, 9, 9, 9, 27, 9, 28, 9, 29, 9, 30, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 31, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_changes_when_casefolded_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
- 85, 85, 85, 85, 85, 85, 85, 170, 170, 86, 85, 85, 85, 85, 85, 171,
- 214, 206, 219, 177, 213, 210, 174, 17, 176, 173, 170, 74, 85, 85, 214, 85,
- 85, 85, 5, 108, 122, 85, 0, 0, 32, 0, 0, 0, 0, 0, 69, 128,
- 64, 215, 254, 255, 251, 15, 0, 0, 4, 128, 99, 85, 85, 85, 179, 230,
- 255, 255, 255, 255, 255, 255, 0, 0, 1, 84, 85, 85, 171, 42, 85, 85,
- 85, 85, 254, 255, 255, 255, 127, 0, 128, 0, 0, 0, 191, 32, 0, 0,
- 0, 0, 0, 63, 255, 1, 255, 255, 255, 255, 255, 231, 85, 85, 21, 76,
- 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170, 0, 255, 0, 0,
- 255, 255, 156, 31, 156, 31, 0, 15, 0, 31, 156, 31, 64, 12, 4, 0,
- 8, 0, 0, 0, 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192,
- 5, 40, 4, 0, 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85,
- 85, 85, 0, 106, 85, 40, 69, 85, 85, 125, 95, 85, 116, 0, 0, 0,
- 0, 0, 255, 255, 127, 0, 248, 0, 255, 0, 0, 0, 255, 255, 15, 0,
- 255, 255, 7, 0, 3, 0, 0, 0,
+static RE_UINT8 re_joining_type_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 21, 22,
+ 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 35, 39, 40, 38, 35, 41, 42, 34, 43, 44, 33, 45, 0, 46, 0,
+ 47, 48, 49, 33, 34, 43, 50, 33, 51, 52, 36, 33, 34, 0, 53, 0,
+ 0, 54, 55, 0, 0, 56, 57, 0, 58, 59, 0, 60, 61, 62, 63, 0,
+ 0, 64, 65, 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 70, 70, 0, 71, 72, 0,
+ 73, 13, 13, 74, 75, 76, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0,
+ 78, 0, 79, 80, 0, 81, 82, 0, 83, 84, 45, 85, 51, 86, 0, 87,
+ 0, 88, 0, 0, 0, 0, 89, 90, 0, 0, 0, 0, 0, 0, 2, 91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 93, 0, 94, 0, 0, 81, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 98, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 100, 48, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 102, 103, 13, 104, 0, 0, 105, 106, 0, 107, 108, 0, 30, 109, 0, 110,
+ 0, 111, 112, 35, 0, 113, 34, 114, 0, 0, 0, 0, 0, 0, 0, 115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
+ 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 119, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 120, 121, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 124, 125, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 128, 0, 0, 0, 129, 130, 0, 0, 131, 132, 0,
+ 34, 133, 134, 97, 51, 135, 0, 0, 30, 136, 0, 137, 51, 138, 139, 0,
+ 0, 140, 0, 0, 0, 0, 97, 141, 51, 52, 82, 142, 0, 0, 0, 0,
+ 0, 133, 143, 0, 0, 144, 145, 0, 0, 0, 0, 0, 0, 146, 147, 0,
+ 0, 148, 82, 0, 0, 149, 0, 0, 68, 150, 0, 0, 0, 0, 0, 0,
+ 0, 151, 0, 0, 0, 0, 0, 0, 0, 152, 153, 0, 0, 0, 154, 82,
+ 155, 156, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 159, 0, 0, 160, 161, 0, 0, 0, 162, 163, 0, 164, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 171,
+ 0, 0, 0, 0, 172, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 98, 0, 0,
+ 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 176, 2, 177, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 180, 181, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 168, 0, 13, 13, 183, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Changes_When_Casefolded: 816 bytes. */
-
-RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_casefolded_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_casefolded_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_casefolded_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_casefolded_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Changes_When_Casemapped. */
-
-static RE_UINT8 re_changes_when_casemapped_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
+static RE_UINT8 re_joining_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
+ 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 2, 0, 3, 3, 3, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 3,
+ 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 1, 3, 3, 3, 0, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3,
+ 2, 2, 3, 3, 0, 3, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 3, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
+ 2, 3, 2, 3, 3, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 2, 3, 3, 3, 1, 1, 1, 0, 0, 0, 0,
+ 2, 0, 2, 2, 2, 2, 0, 3, 2, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 0, 3, 2,
+ 2, 3, 3, 2, 2, 0, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 4, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
+ 2, 2, 2, 2, 2, 3, 0, 3, 0, 3, 3, 0, 0, 5, 3, 3,
+ 3, 3, 3, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 3, 2, 2,
+ 2, 3, 0, 0, 3, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 2, 3, 3,
+ 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 2, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 2, 2, 3, 3, 3, 0, 2, 3, 3, 2, 2, 3, 2, 2,
+ 0, 2, 3, 3, 2, 0, 0, 0, 0, 3, 2, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
+ 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_changes_when_casemapped_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 3, 3, 3, 3, 6, 7,
- 8, 3, 9, 3, 3, 3, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 11, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 3, 14,
- 3, 3, 15, 3, 3, 3, 16, 3, 3, 3, 3, 3, 17, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 18, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
+RE_UINT32 re_get_joining_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_changes_when_casemapped_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 5, 4, 4, 6, 7, 8, 4,
- 4, 9, 10, 11, 12, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18,
- 4, 4, 4, 4, 19, 4, 4, 4, 4, 20, 21, 22, 23, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 26,
- 0, 0, 0, 0, 27, 25, 0, 0, 0, 0, 0, 28, 29, 0, 0, 0,
- 4, 4, 4, 4, 30, 4, 4, 4, 26, 4, 31, 32, 4, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 29, 4, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 4, 39, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 40, 41, 42, 4, 4, 4, 43, 4, 44, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 45, 46, 0, 0, 0, 0, 47, 4, 48, 49, 40, 50, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 4, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 4, 4, 54, 0, 0, 52, 55, 46, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 56, 4, 56, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 57, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_changes_when_casemapped_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 32, 0, 255, 255, 127, 255,
- 255, 255, 255, 255, 255, 255, 255, 254, 255, 223, 255, 247, 255, 243, 255, 179,
- 240, 255, 255, 255, 253, 255, 15, 252, 255, 255, 223, 26, 107, 159, 38, 32,
- 141, 31, 4, 96, 32, 0, 0, 0, 0, 0, 207, 184, 64, 215, 255, 255,
- 251, 255, 255, 255, 255, 255, 227, 255, 255, 255, 191, 239, 3, 252, 255, 255,
- 255, 255, 254, 255, 255, 255, 127, 0, 254, 255, 255, 255, 255, 0, 0, 0,
- 191, 32, 255, 255, 255, 255, 255, 231, 255, 255, 63, 63, 255, 1, 255, 255,
- 0, 0, 0, 34, 0, 64, 0, 0, 255, 255, 255, 79, 63, 63, 255, 170,
- 255, 255, 255, 63, 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31,
- 64, 12, 4, 0, 24, 0, 0, 0, 0, 0, 192, 255, 255, 3, 0, 0,
- 255, 127, 255, 255, 255, 255, 255, 127, 255, 255, 109, 192, 15, 120, 12, 0,
- 191, 32, 0, 0, 255, 63, 0, 0, 255, 255, 255, 15, 252, 255, 252, 255,
- 255, 255, 0, 254, 255, 56, 223, 255, 124, 0, 0, 0, 0, 0, 8, 0,
- 0, 0, 255, 255, 127, 0, 248, 0, 255, 255, 0, 0, 255, 255, 15, 255,
- 255, 255, 7, 0, 15, 0, 0, 0,
-};
+ v = re_joining_type_table_1[field_2];
+ v = re_joining_type_table_2[(v << 5) | field_1];
+ v = re_joining_type_table_3[(v << 5) | field_0];
-/* Changes_When_Casemapped: 816 bytes. */
-
-RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_changes_when_casemapped_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_changes_when_casemapped_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_changes_when_casemapped_stage_3[pos + f] << 5;
- pos += code;
- value = (re_changes_when_casemapped_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* ID_Start. */
-
-static RE_UINT8 re_id_start_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
+/* Line_Break. */
+static RE_UINT8 re_line_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 18, 19, 20, 25, 26, 26, 27, 27, 27, 27, 27, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 27, 40, 41, 27, 27,
+ 27, 42, 27, 27, 27, 27, 27, 27, 27, 27, 43, 44, 13, 13, 13, 13,
+ 13, 45, 46, 47, 27, 27, 27, 27, 27, 27, 27, 27, 48, 27, 27, 49,
+ 27, 27, 27, 27, 50, 51, 52, 27, 53, 27, 54, 55, 56, 57, 58, 59,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 59,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 59,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 60, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27
+};
+
+static RE_UINT16 re_line_break_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 8, 7, 9, 9, 10, 11, 12, 13, 7, 7,
+ 7, 7, 7, 7, 14, 7, 7, 7, 7, 15, 16, 7, 17, 18, 19, 20,
+ 21, 7, 22, 23, 7, 7, 24, 25, 26, 27, 28, 7, 7, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 53, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 36, 82, 83, 84, 36, 85, 86, 87, 88, 89, 90, 91, 36,
+ 92, 92, 93, 92, 94, 7, 95, 7, 96, 96, 96, 97, 97, 98, 99, 99,
+ 7, 7, 100, 7, 101, 102, 103, 7, 104, 7, 105, 106, 107, 7, 7, 108,
+ 109, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 110, 7, 7, 111, 112, 113, 114, 115, 92, 92, 116, 117,
+ 118, 7, 7, 119, 120, 121, 7, 122, 123, 124, 125, 126, 92, 127, 128, 7,
+ 129, 92, 130, 131, 132, 133, 134, 36, 135, 136, 137, 138, 139, 140, 7, 141,
+ 7, 142, 143, 144, 145, 146, 147, 148, 7, 7, 7, 7, 7, 7, 9, 149,
+ 7, 7, 7, 7, 7, 7, 7, 7, 108, 7, 150, 151, 7, 37, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 7, 167, 7,
+ 168, 169, 170, 171, 172, 173, 7, 174, 175, 176, 7, 7, 7, 7, 7, 177,
+ 7, 178, 35, 179, 179, 179, 179, 180, 179, 179, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 7, 196, 197, 198, 7, 199, 200,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 201, 7, 202, 203,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 204, 205, 206, 7, 7, 7,
+ 7, 207, 123, 7, 7, 7, 7, 208, 7, 95, 7, 209, 210, 211, 211, 9,
+ 212, 213, 214, 36, 215, 216, 216, 217, 216, 216, 216, 216, 216, 216, 218, 219,
+ 220, 221, 222, 223, 224, 225, 223, 226, 227, 228, 216, 216, 229, 216, 216, 230,
+ 231, 216, 232, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 7, 7,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 233, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 234, 216, 235, 144, 7, 7, 7, 7, 7, 7, 7, 7,
+ 236, 237, 7, 238, 239, 7, 7, 240, 7, 7, 7, 7, 7, 7, 241, 242,
+ 243, 244, 7, 245, 246, 136, 247, 248, 30, 249, 250, 251, 40, 252, 253, 254,
+ 7, 255, 256, 92, 92, 92, 257, 258, 259, 260, 7, 261, 7, 7, 7, 262,
+ 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264,
+ 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266,
+ 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268,
+ 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263,
+ 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265,
+ 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267,
+ 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269,
+ 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264,
+ 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266,
+ 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268,
+ 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263,
+ 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265,
+ 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267,
+ 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269,
+ 268, 269, 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 269,
+ 263, 264, 265, 266, 267, 268, 269, 263, 264, 265, 266, 267, 268, 270, 271, 272,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 274, 275, 276, 7, 7, 7, 277, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 278, 279, 7, 280, 7, 281, 282,
+ 283, 284, 285, 286, 7, 7, 7, 287, 288, 289, 290, 291, 292, 231, 293, 294,
+ 295, 296, 297, 36, 7, 7, 7, 298, 299, 300, 7, 7, 301, 302, 279, 303,
+ 36, 36, 36, 36, 304, 7, 305, 306, 7, 307, 308, 309, 310, 7, 311, 36,
+ 7, 7, 7, 7, 151, 312, 313, 314, 7, 315, 7, 316, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 210, 122, 281, 36, 36, 36, 36,
+ 317, 318, 319, 7, 123, 320, 36, 321, 322, 323, 36, 36, 7, 324, 280, 7,
+ 325, 326, 327, 7, 7, 36, 7, 328, 7, 329, 330, 331, 332, 333, 36, 36,
+ 7, 7, 334, 36, 7, 335, 7, 336, 7, 337, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 123, 7, 338, 36, 36, 7, 315, 339, 36, 36, 279, 340, 210,
+ 139, 341, 342, 343, 139, 344, 345, 346, 139, 347, 348, 349, 139, 252, 350, 351,
+ 352, 353, 36, 36, 354, 355, 356, 357, 358, 359, 360, 361, 36, 36, 36, 36,
+ 7, 362, 363, 364, 7, 27, 365, 36, 36, 36, 36, 36, 7, 366, 367, 36,
+ 7, 27, 368, 369, 7, 370, 371, 36, 372, 373, 36, 36, 36, 36, 36, 36,
+ 7, 374, 36, 36, 36, 7, 7, 375, 376, 377, 378, 36, 36, 379, 380, 381,
+ 382, 383, 384, 7, 385, 386, 7, 119, 36, 36, 36, 36, 36, 36, 36, 36,
+ 387, 388, 389, 390, 391, 392, 36, 36, 393, 394, 395, 396, 397, 371, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 398, 36, 36, 36, 36, 36, 399, 400, 401,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 107, 36, 36, 36,
+ 7, 7, 7, 402, 7, 7, 7, 7, 7, 7, 403, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 404, 7, 405, 7, 7, 7, 7, 7, 7, 406, 7, 7, 7, 7,
+ 7, 407, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 408, 7,
+ 7, 7, 178, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 119, 123, 409, 36, 36, 279, 410, 7, 411, 412, 413, 414, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 7, 7, 415, 36, 36, 36, 7, 7, 416, 9, 417, 36, 36, 418,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 419,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 122, 36, 420, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 216, 216, 216, 216, 216, 216, 216, 216, 231, 36, 421, 422, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 423, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 424, 425, 426, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 122, 7, 427, 7, 428, 429, 430, 7, 334,
+ 7, 7, 431, 36, 36, 36, 36, 432, 7, 7, 210, 119, 36, 36, 36, 36,
+ 7, 7, 37, 7, 433, 434, 435, 7, 436, 437, 438, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 439, 7, 7, 7, 7, 7, 7, 7, 7, 440, 441,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 9, 442, 9, 443, 444, 445, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 446, 447, 36, 36, 36, 36, 36, 36, 7, 448, 449, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 7, 450, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 451, 36, 7, 7, 452, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 453, 7, 454, 36, 36, 455, 151, 36, 36, 36, 36, 36, 36,
+ 435, 456, 457, 458, 459, 460, 36, 461, 36, 36, 36, 36, 36, 36, 36, 36,
+ 216, 216, 216, 216, 216, 216, 216, 216, 462, 463, 179, 464, 179, 465, 216, 466,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 467, 468, 469, 470,
+ 216, 216, 471, 472, 473, 474, 216, 216, 475, 476, 477, 478, 479, 216, 480, 481,
+ 216, 216, 482, 483, 216, 484, 485, 216, 7, 7, 7, 486, 7, 7, 487, 216,
+ 488, 7, 489, 7, 490, 491, 216, 216, 492, 493, 216, 494, 216, 495, 496, 216,
+ 7, 7, 486, 216, 216, 216, 216, 216, 7, 7, 7, 7, 497, 7, 35, 498,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 499,
+ 500, 9, 9, 9, 36, 36, 36, 36, 9, 9, 9, 9, 9, 9, 9, 501,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36
+};
+
+static RE_UINT8 re_line_break_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 5, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 6, 7, 8, 9, 10, 11, 9, 8, 12, 13, 9, 10, 14, 15, 14, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14, 9, 9, 9, 7,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 10, 13, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 2, 18, 9, 1,
+ 1, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 20, 12, 11, 10, 10, 10, 9, 21, 21, 9, 21, 8, 9, 2, 9, 9,
+ 11, 10, 21, 21, 22, 9, 21, 21, 21, 21, 21, 8, 21, 21, 21, 12,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 21, 22, 21, 21, 21, 22, 21, 9, 9,
+ 21, 9, 9, 9, 9, 9, 9, 9, 21, 21, 21, 21, 9, 21, 9, 22,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 20, 20, 20,
+ 20, 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 14, 9,
+ 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 2, 0, 0, 9, 9, 10,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 9, 1, 1, 9, 1, 1, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 23,
+ 23, 23, 23, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 14, 14, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 0, 7, 7,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 11, 17, 17, 9, 9, 9,
+ 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 7, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 1,
+ 1, 1, 1, 1, 1, 9, 9, 1, 1, 9, 1, 1, 1, 1, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 14, 7, 9, 0, 0, 1, 10, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 1, 1, 1, 9, 1, 1, 1, 1, 1, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 0, 0, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 2, 2, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 9, 0, 9,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 11, 11, 9, 9, 9, 9, 9, 11, 9, 10, 9, 9, 1, 0,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 0, 9, 9, 0, 9, 9, 0, 0, 1, 0, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 0,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 1, 1, 9, 9, 9, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 10, 0, 0, 0, 0, 0, 0, 0, 9, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 9, 9, 0, 9,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 0, 9, 0, 9, 9,
+ 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 9, 0, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 9, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 0, 0, 22, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 22, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 9, 0,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 9, 9,
+ 0, 0, 0, 0, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 9, 9, 9, 9, 9,
+ 0, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 1, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 10,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 0, 0, 0, 0,
+ 0, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0,
+ 24, 24, 24, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 24, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 24, 24, 24, 24,
+ 9, 22, 22, 22, 22, 9, 22, 22, 20, 22, 22, 2, 20, 7, 7, 7,
+ 7, 7, 20, 9, 7, 9, 9, 9, 1, 1, 9, 9, 9, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 2, 1, 9, 1, 9, 1, 12, 18, 12, 18, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 2, 1, 1, 9, 9, 9, 9, 9, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2,
+ 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 22, 22, 2, 22, 9, 9, 9, 9, 9, 20, 20, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 9, 9, 9, 9,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 24, 24, 24, 24, 24,
+ 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 1, 1, 1,
+ 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 9, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 2, 2, 28, 24, 2, 9, 2, 10, 24, 24, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 7, 7, 2, 2, 22, 9, 7, 7, 9, 1, 1, 1, 20, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 9, 0, 0, 0, 7, 7, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0,
+ 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 0, 0, 0, 24, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 0, 0, 9, 9,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 9, 2, 2, 2,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 1, 9, 9,
+ 9, 9, 9, 9, 1, 9, 9, 1, 1, 1, 9, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 0, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 22, 9, 0,
+ 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 2, 29, 1, 30, 1, 1,
+ 2, 20, 2, 2, 31, 21, 21, 9, 8, 8, 12, 8, 8, 8, 12, 8,
+ 21, 21, 9, 9, 32, 32, 32, 2, 4, 4, 1, 1, 1, 1, 1, 20,
+ 11, 11, 11, 11, 11, 11, 11, 11, 9, 8, 8, 21, 28, 28, 9, 9,
+ 9, 9, 9, 9, 14, 12, 18, 28, 28, 28, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 2, 9, 2, 2, 2, 2, 9, 2, 2, 2,
+ 33, 9, 9, 9, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 9, 0, 0, 21, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 21,
+ 9, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 11, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 11, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 11, 9, 21, 9, 9, 9, 11, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 21, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 21, 21, 9, 9, 9, 9, 9, 21, 9, 9, 21, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 9, 21, 21, 9, 9, 9, 21, 21, 9, 9, 21, 9, 9, 9, 21,
+ 9, 21, 10, 10, 9, 21, 9, 9, 9, 9, 21, 9, 9, 21, 21, 21,
+ 21, 9, 9, 21, 9, 21, 9, 21, 21, 21, 21, 21, 21, 9, 21, 9,
+ 9, 9, 9, 9, 21, 21, 21, 21, 9, 9, 9, 9, 21, 21, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 21, 9, 9, 9,
+ 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 9, 9, 21, 21, 21, 21, 9, 9, 21, 21, 9, 9, 21, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 21, 9, 9, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 21, 9, 9, 9, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 32,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 12, 18, 9, 9, 9, 9,
+ 9, 9, 21, 9, 9, 9, 9, 9, 9, 9, 34, 34, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 9, 9, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 9, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 21, 9, 9, 21, 21, 9, 9, 9, 9, 21, 21, 9, 9,
+ 21, 21, 9, 9, 9, 9, 21, 21, 21, 9, 9, 21, 9, 9, 21, 21,
+ 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 34, 34, 34, 34, 9, 21, 21, 9, 9, 21, 9, 9, 9, 9, 21, 21,
+ 9, 9, 9, 9, 34, 34, 21, 21, 34, 9, 34, 34, 34, 35, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 9, 9, 9, 9,
+ 21, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 21, 21, 9, 21, 21, 21, 9, 21, 34, 21, 21, 9, 21, 21, 9, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 21, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 21, 21, 21, 34, 9, 34,
+ 34, 34, 21, 34, 34, 21, 21, 21, 34, 34, 21, 21, 34, 21, 21, 34,
+ 34, 34, 9, 21, 9, 9, 9, 9, 21, 21, 34, 21, 21, 21, 21, 21,
+ 21, 34, 34, 34, 34, 34, 21, 34, 34, 35, 34, 21, 21, 34, 34, 34,
+ 34, 34, 34, 34, 34, 9, 9, 9, 34, 34, 35, 35, 35, 35, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 21, 9, 9, 9, 8, 8, 8, 8, 8,
+ 8, 9, 7, 7, 34, 9, 9, 9, 12, 18, 12, 18, 12, 18, 12, 18,
+ 12, 18, 12, 18, 12, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 12, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18, 12,
+ 18, 12, 18, 12, 18, 12, 18, 12, 18, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 12, 18, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 21, 21, 21, 21, 21, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 9, 9, 0, 0, 0, 0, 0, 7, 2, 2, 2, 9, 7, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2,
+ 2, 2, 2, 2, 2, 2, 9, 2, 12, 2, 9, 9, 8, 8, 9, 9,
+ 8, 8, 12, 18, 12, 18, 12, 18, 12, 18, 2, 2, 2, 2, 7, 9,
+ 2, 2, 9, 2, 2, 9, 9, 9, 9, 9, 31, 31, 2, 2, 2, 9,
+ 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 9, 2, 9, 2, 2,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0,
+ 2, 18, 18, 34, 34, 28, 34, 34, 12, 18, 12, 18, 12, 18, 12, 18,
+ 12, 18, 34, 34, 12, 18, 12, 18, 12, 18, 12, 18, 28, 12, 18, 18,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 1, 1, 1, 1,
+ 34, 34, 34, 34, 34, 1, 34, 34, 34, 34, 34, 28, 28, 34, 34, 34,
+ 0, 36, 34, 36, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34, 36, 34,
+ 34, 34, 34, 34, 34, 36, 36, 0, 0, 1, 1, 28, 28, 28, 28, 34,
+ 28, 36, 34, 36, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 34, 36, 34, 36, 34, 34, 34, 34, 34, 34, 36, 34,
+ 34, 34, 34, 34, 34, 36, 36, 34, 34, 34, 34, 28, 36, 28, 28, 34,
+ 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 21, 21, 21, 21, 21, 21, 21, 21,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 7, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 9, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 9, 9, 9, 1, 9, 9, 9, 9, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 9, 9, 9, 9, 1, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 22, 22, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9, 1,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 9, 9, 9, 0, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 9, 9,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 24, 24, 24, 24, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 9, 2, 2, 2,
+ 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 2, 2, 9, 9, 9, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0,
+ 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 23, 1, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 9, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 0, 23, 0,
+ 23, 23, 0, 23, 23, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 14, 18, 18, 14, 14, 7, 7, 12, 18, 32, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 34, 34, 34, 34, 34, 12, 18, 12, 18, 12, 18, 12, 18, 12, 18, 12,
+ 18, 12, 18, 12, 18, 34, 34, 12, 18, 34, 34, 34, 34, 34, 34, 34,
+ 18, 34, 18, 0, 28, 28, 7, 7, 34, 12, 18, 12, 18, 12, 18, 34,
+ 34, 34, 34, 34, 34, 34, 34, 0, 34, 10, 11, 34, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 33,
+ 0, 7, 34, 34, 10, 11, 34, 34, 12, 18, 34, 34, 18, 34, 18, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 28, 28, 34, 34, 34, 7,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 12, 34, 18, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 12, 34, 18, 34, 12,
+ 18, 18, 12, 18, 18, 28, 34, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 28, 28,
+ 0, 0, 34, 34, 34, 34, 34, 34, 0, 0, 34, 34, 34, 34, 34, 34,
+ 0, 0, 34, 34, 34, 34, 34, 34, 0, 0, 34, 34, 34, 0, 0, 0,
+ 11, 10, 34, 34, 34, 10, 10, 0, 9, 9, 9, 9, 9, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 40, 21, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 2, 2, 2, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 2,
+ 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+ 2, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_id_start_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 1, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 1, 57, 58, 59, 60, 61, 62, 63, 31, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 31, 76, 77, 78, 31,
- 1, 1, 1, 79, 80, 81, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 84, 85, 31, 31, 86, 87,
- 1, 1, 1, 1, 1, 1, 1, 88, 1, 1, 89, 31, 31, 31, 31, 31,
- 1, 90, 91, 31, 31, 31, 31, 31, 31, 31, 31, 31, 92, 31, 31, 31,
- 31, 31, 31, 31, 93, 94, 95, 96, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 97, 98, 31, 31, 31, 31, 31, 99, 100, 31, 31, 31, 31, 101, 31,
- 1, 1, 1, 1, 1, 1, 102, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 103, 104, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 105, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 107, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_id_start_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
- 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
- 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
- 27, 28, 29, 17, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 44, 48, 49, 50, 51, 45, 0,
- 52, 53, 54, 55, 56, 57, 58, 59, 52, 60, 61, 62, 63, 64, 65, 0,
- 66, 67, 65, 0, 68, 69, 70, 0, 71, 0, 72, 73, 74, 0, 0, 0,
- 4, 75, 76, 77, 78, 4, 79, 80, 4, 4, 81, 4, 82, 83, 84, 4,
- 85, 4, 86, 0, 22, 4, 4, 87, 66, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 88, 1, 4, 4, 89, 90, 91, 91, 92, 4, 93, 94, 0,
- 0, 4, 4, 29, 4, 95, 4, 96, 97, 0, 15, 98, 4, 99, 100, 0,
- 101, 4, 102, 0, 0, 103, 0, 0, 104, 93, 105, 0, 106, 107, 4, 108,
- 4, 109, 110, 111, 112, 113, 0, 114, 4, 4, 4, 4, 4, 4, 0, 0,
- 87, 4, 115, 111, 4, 116, 117, 118, 0, 0, 0, 119, 120, 0, 0, 0,
- 121, 122, 123, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 124, 97, 4, 4, 4, 4, 125, 4, 79, 4, 126, 101, 127, 127, 0,
- 128, 129, 66, 4, 130, 66, 4, 80, 104, 12, 4, 4, 131, 86, 0, 15,
- 4, 4, 4, 4, 4, 96, 0, 0, 4, 4, 4, 4, 4, 4, 4, 22,
- 4, 4, 4, 4, 73, 0, 15, 111, 132, 133, 4, 134, 111, 4, 4, 22,
- 135, 136, 4, 4, 137, 4, 138, 135, 139, 140, 4, 93, 136, 93, 0, 141,
- 25, 142, 65, 143, 31, 144, 145, 146, 4, 14, 147, 148, 4, 149, 150, 151,
- 152, 153, 80, 154, 4, 4, 4, 140, 4, 4, 4, 4, 4, 155, 156, 157,
- 4, 4, 4, 158, 4, 4, 159, 0, 160, 161, 162, 4, 4, 91, 163, 4,
- 4, 111, 15, 4, 164, 4, 165, 166, 0, 0, 0, 167, 4, 4, 4, 143,
- 0, 1, 1, 168, 4, 97, 169, 0, 170, 171, 172, 0, 4, 4, 4, 86,
- 0, 0, 4, 102, 0, 0, 0, 0, 0, 0, 0, 0, 143, 4, 173, 0,
- 4, 23, 174, 96, 111, 4, 175, 0, 4, 4, 4, 4, 111, 15, 176, 157,
- 4, 154, 4, 109, 0, 0, 0, 0, 4, 101, 96, 165, 0, 0, 0, 0,
- 177, 178, 96, 101, 97, 0, 0, 179, 96, 159, 0, 0, 4, 180, 0, 0,
- 181, 96, 0, 143, 143, 0, 72, 182, 4, 96, 96, 144, 91, 0, 0, 0,
- 4, 4, 14, 0, 4, 144, 4, 144, 4, 109, 0, 0, 0, 0, 0, 0,
- 143, 183, 108, 0, 0, 0, 0, 101, 106, 184, 0, 0, 106, 22, 15, 14,
- 106, 65, 185, 186, 106, 144, 187, 0, 188, 189, 0, 0, 190, 112, 97, 0,
- 47, 44, 191, 55, 0, 0, 0, 0, 4, 102, 192, 0, 4, 22, 193, 0,
- 0, 0, 0, 0, 4, 131, 194, 0, 4, 22, 195, 0, 4, 196, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 4, 189, 0, 0, 0, 4, 4, 197,
- 0, 0, 0, 0, 0, 198, 173, 199, 200, 201, 202, 4, 203, 0, 4, 29,
- 204, 131, 71, 205, 22, 0, 0, 0, 206, 173, 207, 208, 209, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 144, 4, 4, 4, 4, 159, 0, 0, 0,
- 4, 4, 4, 131, 4, 4, 4, 4, 4, 4, 109, 0, 0, 0, 0, 0,
- 4, 131, 0, 0, 0, 0, 0, 0, 4, 4, 65, 0, 0, 0, 0, 0,
- 4, 29, 97, 0, 0, 0, 15, 210, 4, 22, 109, 211, 22, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 212, 0, 163, 0, 0, 213,
- 4, 4, 4, 4, 4, 4, 4, 184, 4, 4, 4, 4, 4, 4, 4, 144,
- 97, 0, 214, 215, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 157,
- 4, 4, 4, 216, 217, 0, 0, 0, 4, 4, 218, 4, 219, 220, 221, 4,
- 222, 223, 224, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 225, 226, 80,
- 218, 218, 124, 124, 204, 204, 147, 0, 4, 227, 228, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 189, 4, 4, 4, 4, 4, 4, 182, 0,
- 4, 4, 229, 0, 0, 0, 0, 0, 221, 230, 231, 232, 233, 234, 0, 0,
- 4, 4, 4, 4, 4, 4, 101, 0, 4, 102, 4, 4, 4, 4, 4, 4,
- 111, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 235, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 71, 111, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_id_start_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 188,
- 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
- 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
- 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
- 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
- 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
- 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 63, 240, 255, 255, 255,
- 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255, 225, 159, 249, 255,
- 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16, 224, 135, 249, 255,
- 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0, 224, 191, 251, 255,
- 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2, 224, 159, 249, 255,
- 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214, 24, 199, 255, 3,
- 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7, 3, 0, 0, 0,
- 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64, 3, 0, 6, 0,
- 255, 255, 255, 39, 0, 64, 112, 128, 3, 0, 0, 252, 224, 255, 127, 252,
- 255, 255, 251, 47, 127, 0, 0, 0, 254, 255, 255, 255, 255, 255, 13, 0,
- 214, 247, 255, 255, 175, 255, 13, 32, 95, 0, 0, 240, 1, 0, 0, 0,
- 255, 254, 255, 255, 255, 31, 0, 0, 0, 31, 0, 0, 255, 7, 0, 128,
- 0, 0, 63, 60, 98, 192, 225, 255, 3, 64, 0, 0, 191, 32, 255, 255,
- 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127,
- 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 7, 255, 255, 63, 63,
- 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 3, 0, 255, 255, 3, 0,
- 255, 223, 1, 0, 255, 255, 15, 0, 0, 0, 128, 16, 255, 5, 255, 255,
- 255, 255, 63, 0, 255, 255, 255, 127, 255, 63, 31, 0, 255, 15, 255, 255,
- 255, 3, 0, 0, 255, 255, 127, 0, 255, 255, 31, 0, 128, 0, 0, 0,
- 224, 255, 255, 255, 224, 15, 0, 0, 248, 255, 255, 255, 1, 192, 0, 252,
- 63, 0, 0, 0, 15, 0, 0, 0, 0, 224, 0, 252, 255, 255, 255, 63,
- 255, 1, 255, 255, 255, 255, 255, 231, 0, 222, 111, 4, 63, 63, 255, 170,
- 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 2, 128,
- 0, 0, 255, 31, 132, 252, 47, 63, 80, 253, 255, 243, 224, 67, 0, 0,
- 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127,
- 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 248, 255, 127, 0, 0,
- 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255,
- 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0, 187, 247, 255, 255,
- 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 255, 31,
- 255, 255, 7, 0, 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0,
- 255, 255, 127, 196, 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 0, 255, 255, 15, 0, 255, 255,
- 127, 248, 255, 255, 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3,
- 127, 0, 248, 160, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255,
- 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 15, 0, 0, 223, 255,
- 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
- 255, 63, 255, 63, 255, 255, 1, 0, 255, 7, 255, 255, 15, 255, 62, 0,
- 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
- 255, 255, 255, 192, 1, 0, 239, 254, 31, 0, 0, 0, 128, 0, 255, 255,
- 255, 255, 255, 0, 16, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
- 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
- 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
- 255, 7, 0, 1, 0, 0, 0, 128, 255, 252, 255, 255, 10, 0, 0, 0,
- 1, 248, 255, 255, 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32,
- 255, 253, 255, 255, 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0,
- 191, 253, 255, 255, 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224,
- 255, 7, 1, 0, 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 7, 255, 31, 255, 1, 255, 3, 255, 255, 223, 255, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 255, 31, 128, 63,
- 0, 64, 0, 0, 15, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255,
-};
-
-/* ID_Start: 2496 bytes. */
-
-RE_UINT32 re_get_id_start(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_id_start_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_id_start_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_id_start_stage_3[pos + f] << 5;
- pos += code;
- value = (re_id_start_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* ID_Continue. */
-
-static RE_UINT8 re_id_continue_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 2, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 2,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9,
+ 9, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9,
+ 2, 2, 2, 2, 2, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 26, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_id_continue_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 1, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 1, 57, 58, 59, 60, 61, 62, 63, 31, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 31, 76, 77, 78, 31,
- 1, 1, 1, 79, 80, 81, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 84, 85, 31, 31, 86, 87,
- 1, 1, 1, 1, 1, 1, 1, 88, 1, 1, 89, 31, 31, 31, 31, 31,
- 1, 90, 91, 31, 31, 31, 31, 31, 31, 31, 31, 31, 92, 31, 31, 31,
- 31, 93, 94, 31, 95, 96, 97, 98, 31, 31, 99, 31, 31, 31, 31, 31,
- 100, 101, 102, 31, 31, 31, 31, 31, 103, 104, 31, 31, 31, 31, 105, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
- 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_id_continue_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 4, 0, 0, 5, 6, 7, 8, 7, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 0,
- 7, 7, 7, 7, 7, 7, 7, 12, 13, 7, 14, 7, 7, 7, 7, 15,
- 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 2, 7, 17, 7, 7, 18, 2, 7, 19, 20, 7, 3, 21,
- 0, 4, 7, 7, 7, 7, 22, 7, 7, 7, 7, 7, 7, 23, 24, 25,
- 0, 7, 7, 7, 26, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 27,
- 7, 7, 28, 0, 7, 29, 4, 0, 0, 0, 7, 30, 0, 31, 14, 7,
- 7, 7, 7, 7, 7, 7, 32, 2, 23, 33, 24, 34, 35, 36, 32, 37,
- 38, 33, 24, 39, 40, 41, 42, 43, 44, 14, 24, 45, 46, 47, 32, 48,
- 49, 33, 24, 45, 50, 51, 32, 52, 53, 54, 55, 22, 56, 57, 42, 0,
- 58, 59, 24, 60, 61, 62, 32, 0, 63, 59, 24, 64, 61, 65, 32, 66,
- 63, 59, 7, 7, 67, 68, 32, 69, 70, 71, 7, 72, 73, 74, 42, 75,
- 2, 7, 7, 4, 76, 1, 0, 0, 77, 7, 78, 28, 79, 80, 0, 0,
- 47, 81, 1, 82, 83, 7, 84, 2, 85, 83, 7, 84, 86, 0, 0, 0,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 28, 7, 7, 87, 7, 7, 88,
- 7, 7, 7, 7, 89, 90, 7, 7, 89, 7, 7, 91, 92, 8, 7, 7,
- 7, 92, 7, 7, 7, 26, 48, 10, 7, 0, 7, 7, 7, 7, 7, 93,
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 25, 7, 2, 4, 7, 7, 7, 7, 94, 18,
- 58, 95, 7, 95, 7, 96, 58, 97, 7, 7, 7, 7, 7, 98, 1, 0,
- 99, 1, 7, 7, 7, 7, 7, 18, 7, 7, 4, 7, 7, 7, 7, 43,
- 7, 76, 29, 29, 42, 7, 28, 95, 7, 7, 29, 7, 1, 4, 0, 0,
- 7, 29, 7, 7, 7, 76, 7, 25, 1, 1, 100, 28, 0, 0, 0, 0,
- 7, 7, 7, 7, 29, 1, 101, 96, 7, 7, 7, 7, 7, 7, 7, 96,
- 7, 7, 7, 102, 60, 7, 7, 28, 18, 7, 7, 26, 0, 103, 7, 4,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 104,
- 7, 93, 7, 7, 93, 105, 7, 28, 7, 7, 7, 106, 107, 108, 84, 107,
- 0, 0, 0, 109, 47, 110, 0, 111, 0, 84, 0, 0, 0, 84, 112, 47,
- 113, 114, 115, 80, 116, 0, 7, 7, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 7, 7, 76, 7, 7, 7, 7, 7, 7, 7, 7, 117, 96,
- 7, 7, 87, 7, 7, 7, 118, 109, 7, 119, 120, 120, 120, 120, 7, 7,
- 121, 0, 2, 122, 2, 7, 7, 7, 7, 123, 2, 7, 7, 7, 7, 88,
- 124, 7, 7, 2, 7, 7, 7, 7, 76, 0, 7, 4, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 84, 0, 0, 0, 0, 7, 7, 28,
- 84, 7, 29, 0, 7, 7, 7, 125, 7, 7, 7, 7, 7, 7, 7, 10,
- 0, 126, 127, 7, 7, 7, 7, 7, 128, 7, 7, 7, 129, 0, 0, 126,
- 7, 7, 102, 0, 7, 7, 7, 96, 7, 7, 7, 7, 43, 1, 7, 130,
- 7, 7, 28, 7, 7, 96, 7, 84, 7, 7, 7, 7, 131, 1, 7, 76,
- 7, 7, 7, 119, 28, 1, 7, 71, 7, 7, 7, 7, 21, 99, 7, 129,
- 132, 133, 120, 7, 7, 88, 102, 7, 7, 7, 7, 7, 7, 7, 134, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 96, 7, 135, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 28, 7, 7, 7, 7, 7, 7, 1, 0, 0,
- 119, 136, 24, 137, 138, 7, 7, 7, 7, 7, 7, 10, 0, 31, 7, 7,
- 7, 7, 7, 28, 0, 7, 7, 7, 7, 127, 7, 7, 102, 0, 0, 29,
- 7, 0, 7, 139, 140, 0, 0, 85, 7, 7, 7, 7, 7, 7, 7, 84,
- 0, 1, 2, 3, 2, 4, 42, 7, 7, 7, 7, 76, 141, 142, 0, 0,
- 143, 7, 8, 144, 28, 28, 0, 0, 7, 7, 7, 7, 7, 7, 7, 4,
- 0, 0, 0, 0, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 145,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 84, 7, 7, 7, 47, 47, 0,
- 7, 7, 140, 7, 4, 7, 7, 4, 7, 28, 7, 7, 146, 147, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 28, 1, 7, 7, 146, 7, 29,
- 7, 7, 102, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 119, 7, 43, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 148, 7, 7, 149, 7, 43, 7, 119, 7, 76, 0, 0, 0, 0, 7, 150,
- 7, 43, 7, 1, 0, 0, 0, 0, 7, 7, 7, 151, 0, 0, 0, 0,
- 152, 153, 7, 154, 0, 0, 7, 84, 7, 84, 0, 0, 83, 7, 119, 0,
- 7, 7, 7, 43, 7, 43, 7, 21, 7, 10, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 18, 0, 0, 0, 7, 7, 7, 21, 7, 7, 7, 21,
- 7, 7, 102, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 84, 100, 7, 7, 47, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 119, 0, 42, 109, 7, 7, 7, 4, 0, 7, 18, 1,
- 7, 7, 7, 85, 155, 7, 7, 156, 7, 7, 7, 7, 157, 158, 0, 0,
- 7, 14, 7, 159, 0, 0, 0, 0, 160, 19, 18, 7, 7, 7, 4, 1,
- 23, 33, 24, 161, 50, 162, 163, 95, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 4, 22, 0, 0, 7, 7, 7, 7, 164, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 165, 47, 166, 0, 0,
- 7, 7, 7, 7, 167, 1, 0, 0, 7, 7, 7, 18, 1, 0, 0, 0,
- 7, 26, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 1, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 7, 7, 168, 169, 0,
- 7, 7, 7, 76, 100, 7, 7, 7, 7, 170, 0, 0, 7, 7, 7, 18,
- 24, 7, 7, 8, 47, 1, 0, 127, 7, 127, 83, 119, 0, 0, 0, 0,
- 171, 7, 7, 172, 102, 1, 173, 7, 76, 174, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 76, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 18, 7, 76, 1, 0, 0, 0, 0, 0, 0, 7, 28, 95,
- 7, 7, 7, 119, 96, 1, 31, 175, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 3, 7, 7, 7, 118, 7, 0, 0, 0, 0, 176, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 102,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21,
- 7, 76, 0, 0, 0, 21, 177, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 4, 84, 18, 178, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 179, 180, 181, 0, 182, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 85, 7, 7, 7, 58, 184, 185, 186, 7, 7, 7,
- 187, 188, 7, 189, 190, 59, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 165, 7, 59, 88, 7, 88,
- 7, 85, 7, 85, 76, 7, 76, 7, 24, 7, 24, 7, 191, 7, 7, 7,
- 7, 7, 7, 135, 7, 7, 84, 192, 110, 101, 2, 0, 0, 0, 0, 0,
- 8, 128, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 84, 28, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95, 119, 0, 0,
- 7, 7, 7, 7, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 186, 7, 195, 196, 197, 198, 199, 200, 104, 29, 201, 29, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 119, 0, 0,
- 7, 7, 7, 95, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 47, 0,
- 7, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_id_continue_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 135, 255, 7, 0, 4, 160, 4, 255, 255,
- 127, 255, 195, 255, 3, 0, 31, 80, 223, 188, 192, 215, 251, 255, 191, 255,
- 251, 252, 127, 2, 255, 1, 255, 191, 182, 0, 7, 0, 255, 195, 239, 159,
- 255, 253, 255, 159, 255, 231, 63, 36, 255, 63, 255, 15, 223, 63, 248, 255,
- 207, 255, 249, 255, 197, 243, 159, 121, 128, 176, 3, 80, 238, 135, 109, 211,
- 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 237, 243, 191, 59, 1, 0,
- 0, 254, 238, 159, 159, 57, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199,
- 199, 61, 129, 0, 255, 223, 253, 255, 255, 227, 223, 61, 96, 7, 239, 223,
- 239, 243, 96, 64, 6, 0, 223, 125, 240, 128, 0, 252, 236, 255, 127, 252,
- 251, 47, 127, 132, 95, 255, 12, 0, 255, 127, 214, 247, 175, 255, 95, 63,
- 255, 243, 0, 3, 160, 194, 255, 254, 255, 31, 223, 255, 64, 0, 191, 32,
- 255, 247, 255, 61, 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 31, 0,
- 15, 0, 13, 0, 143, 48, 0, 56, 128, 0, 0, 248, 255, 0, 247, 255,
- 255, 251, 255, 170, 223, 95, 220, 31, 207, 15, 0, 128, 16, 0, 2, 128,
- 226, 255, 132, 252, 47, 63, 80, 253, 224, 67, 31, 248, 255, 128, 127, 0,
- 127, 127, 224, 0, 62, 31, 127, 254, 224, 255, 240, 191, 128, 255, 252, 255,
- 255, 249, 124, 0, 255, 232, 1, 128, 126, 126, 126, 0, 255, 55, 127, 248,
- 248, 224, 127, 95, 219, 255, 24, 0, 0, 224, 252, 252, 252, 28, 255, 239,
- 255, 183, 0, 32, 15, 255, 62, 0, 63, 253, 191, 145, 55, 0, 255, 192,
- 111, 240, 239, 254, 63, 135, 112, 0, 79, 0, 31, 30, 255, 23, 255, 64,
- 127, 189, 237, 251, 129, 224, 207, 31, 191, 0, 63, 255, 0, 63, 17, 0,
- 255, 252, 27, 0, 255, 35, 127, 251, 127, 180, 191, 253, 251, 1, 255, 224,
- 11, 0, 240, 0, 255, 99, 224, 227, 7, 248, 231, 15, 0, 60, 28, 0,
- 100, 222, 255, 235, 239, 255, 191, 231, 223, 223, 255, 123, 95, 252, 247, 207,
- 32, 0, 219, 7, 255, 67, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247,
- 247, 94, 238, 251,
-};
-
-/* ID_Continue: 2900 bytes. */
-
-RE_UINT32 re_get_id_continue(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_id_continue_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_id_continue_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_id_continue_stage_3[pos + f] << 4;
- pos += code;
- value = (re_id_continue_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* XID_Start. */
-
-static RE_UINT8 re_xid_start_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 1, 1, 2, 0, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 2, 2,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 2, 2, 2, 2, 9, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 9, 22, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 9, 9, 9, 9, 2, 2, 9, 2, 1, 1, 1, 1, 9, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 22, 9, 2, 2, 2,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 2, 2, 9, 1, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+ 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 1, 1, 9, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 2, 2, 2, 2, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 2, 2, 0, 9, 1, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 22, 2, 2, 7, 7, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 1, 1, 0, 0,
+ 1, 2, 2, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 24, 2, 2, 2, 24,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 9,
+ 1, 9, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 9, 22, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_xid_start_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 1, 58, 59, 60, 61, 62, 63, 64, 31, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 31, 77, 78, 79, 31,
- 1, 1, 1, 80, 81, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 85, 86, 31, 31, 87, 88,
- 1, 1, 1, 1, 1, 1, 1, 89, 1, 1, 90, 31, 31, 31, 31, 31,
- 1, 91, 92, 31, 31, 31, 31, 31, 31, 31, 31, 31, 93, 31, 31, 31,
- 31, 31, 31, 31, 94, 95, 96, 97, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 98, 99, 31, 31, 31, 31, 31, 100, 101, 31, 31, 31, 31, 102, 31,
- 1, 1, 1, 1, 1, 1, 103, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 104, 105, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 108, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_xid_start_stage_3[] = {
- 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
- 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
- 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
- 27, 28, 29, 17, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 44, 48, 49, 50, 51, 45, 0,
- 52, 53, 54, 55, 56, 57, 58, 59, 52, 60, 61, 62, 63, 64, 65, 0,
- 66, 67, 65, 0, 68, 69, 70, 0, 71, 0, 72, 73, 74, 0, 0, 0,
- 4, 75, 76, 77, 78, 4, 79, 80, 4, 4, 81, 4, 82, 83, 84, 4,
- 85, 4, 86, 0, 22, 4, 4, 87, 66, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 88, 1, 4, 4, 89, 90, 91, 91, 92, 4, 93, 94, 0,
- 0, 4, 4, 29, 4, 95, 4, 96, 97, 0, 15, 98, 4, 99, 100, 0,
- 101, 4, 102, 0, 0, 103, 0, 0, 104, 93, 105, 0, 106, 107, 4, 108,
- 4, 109, 110, 111, 112, 113, 0, 114, 4, 4, 4, 4, 4, 4, 0, 0,
- 87, 4, 115, 111, 4, 116, 117, 118, 0, 0, 0, 119, 120, 0, 0, 0,
- 121, 122, 123, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 124, 97, 4, 4, 4, 4, 125, 4, 79, 4, 126, 101, 127, 127, 0,
- 128, 129, 66, 4, 130, 66, 4, 80, 104, 12, 4, 4, 131, 86, 0, 15,
- 4, 4, 4, 4, 4, 96, 0, 0, 4, 4, 4, 4, 4, 4, 4, 22,
- 4, 4, 4, 4, 73, 0, 15, 111, 132, 133, 4, 134, 111, 4, 4, 22,
- 135, 136, 4, 4, 137, 4, 138, 135, 139, 140, 4, 93, 136, 93, 0, 141,
- 25, 142, 65, 143, 31, 144, 145, 146, 4, 14, 147, 148, 4, 149, 150, 151,
- 152, 153, 80, 154, 4, 4, 4, 140, 4, 4, 4, 4, 4, 155, 156, 157,
- 4, 4, 4, 158, 4, 4, 159, 0, 160, 161, 162, 4, 4, 91, 163, 4,
- 4, 4, 111, 31, 4, 4, 4, 4, 4, 111, 15, 4, 164, 4, 165, 166,
- 0, 0, 0, 167, 4, 4, 4, 143, 0, 1, 1, 168, 111, 97, 169, 0,
- 170, 171, 172, 0, 4, 4, 4, 86, 0, 0, 4, 102, 0, 0, 0, 0,
- 0, 0, 0, 0, 143, 4, 173, 0, 4, 23, 174, 96, 111, 4, 175, 0,
- 4, 4, 4, 4, 111, 15, 176, 157, 4, 154, 4, 109, 0, 0, 0, 0,
- 4, 101, 96, 165, 0, 0, 0, 0, 177, 178, 96, 101, 97, 0, 0, 179,
- 96, 159, 0, 0, 4, 180, 0, 0, 181, 96, 0, 143, 143, 0, 72, 182,
- 4, 96, 96, 144, 91, 0, 0, 0, 4, 4, 14, 0, 4, 144, 4, 144,
- 4, 109, 0, 0, 0, 0, 0, 0, 143, 183, 108, 0, 0, 0, 0, 101,
- 106, 184, 0, 0, 106, 22, 15, 14, 106, 65, 185, 186, 106, 144, 187, 0,
- 188, 189, 0, 0, 190, 112, 97, 0, 47, 44, 191, 55, 0, 0, 0, 0,
- 4, 102, 192, 0, 4, 22, 193, 0, 0, 0, 0, 0, 4, 131, 194, 0,
- 4, 22, 195, 0, 4, 196, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0,
- 4, 189, 0, 0, 0, 4, 4, 197, 0, 0, 0, 0, 0, 198, 173, 199,
- 200, 201, 202, 4, 203, 0, 4, 29, 204, 131, 71, 205, 22, 0, 0, 0,
- 206, 173, 207, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
- 4, 4, 4, 4, 159, 0, 0, 0, 4, 4, 4, 131, 4, 4, 4, 4,
- 4, 4, 109, 0, 0, 0, 0, 0, 4, 131, 0, 0, 0, 0, 0, 0,
- 4, 4, 65, 0, 0, 0, 0, 0, 4, 29, 97, 0, 0, 0, 15, 210,
- 4, 22, 109, 211, 22, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0,
- 4, 4, 212, 0, 163, 0, 0, 213, 4, 4, 4, 4, 4, 4, 4, 184,
- 4, 4, 4, 4, 4, 4, 4, 144, 97, 0, 214, 215, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 157, 4, 4, 4, 216, 217, 0, 0, 0,
- 4, 4, 218, 4, 219, 220, 221, 4, 222, 223, 224, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 225, 226, 80, 218, 218, 124, 124, 204, 204, 147, 0,
- 4, 227, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 189,
- 4, 4, 4, 4, 4, 4, 182, 0, 4, 4, 229, 0, 0, 0, 0, 0,
- 221, 230, 231, 232, 233, 234, 0, 0, 4, 4, 4, 4, 4, 4, 101, 0,
- 4, 102, 4, 4, 4, 4, 4, 4, 111, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 235, 4, 4, 4, 4, 4, 4, 4, 4, 4, 71,
- 111, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_xid_start_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 184,
- 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
- 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
- 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
- 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
- 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
- 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 63, 240, 255, 255, 255,
- 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255, 225, 159, 249, 255,
- 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16, 224, 135, 249, 255,
- 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0, 224, 191, 251, 255,
- 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2, 224, 159, 249, 255,
- 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214, 24, 199, 255, 3,
- 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7, 3, 0, 0, 0,
- 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64, 3, 0, 6, 0,
- 255, 255, 255, 39, 0, 64, 112, 128, 3, 0, 0, 252, 224, 255, 127, 252,
- 255, 255, 251, 47, 127, 0, 0, 0, 254, 255, 255, 255, 255, 255, 5, 0,
- 214, 247, 255, 255, 175, 255, 5, 32, 95, 0, 0, 240, 1, 0, 0, 0,
- 255, 254, 255, 255, 255, 31, 0, 0, 0, 31, 0, 0, 255, 7, 0, 128,
- 0, 0, 63, 60, 98, 192, 225, 255, 3, 64, 0, 0, 191, 32, 255, 255,
- 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127,
- 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 7, 255, 255, 63, 63,
- 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 3, 0, 255, 255, 3, 0,
- 255, 223, 1, 0, 255, 255, 15, 0, 0, 0, 128, 16, 255, 5, 255, 255,
- 255, 255, 63, 0, 255, 255, 255, 127, 255, 63, 31, 0, 255, 15, 255, 255,
- 255, 3, 0, 0, 255, 255, 127, 0, 255, 255, 31, 0, 128, 0, 0, 0,
- 224, 255, 255, 255, 224, 15, 0, 0, 248, 255, 255, 255, 1, 192, 0, 252,
- 63, 0, 0, 0, 15, 0, 0, 0, 0, 224, 0, 252, 255, 255, 255, 63,
- 255, 1, 255, 255, 255, 255, 255, 231, 0, 222, 111, 4, 63, 63, 255, 170,
- 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 2, 128,
- 0, 0, 255, 31, 132, 252, 47, 63, 80, 253, 255, 243, 224, 67, 0, 0,
- 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127,
- 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224, 255, 127, 0, 0,
- 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255,
- 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0, 187, 247, 255, 255,
- 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 255, 31,
- 255, 255, 7, 0, 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0,
- 255, 255, 127, 196, 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 0, 255, 255, 15, 0, 255, 255,
- 127, 248, 255, 255, 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3,
- 127, 0, 248, 160, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255,
- 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 3, 0, 0, 138, 170,
- 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183,
- 255, 63, 255, 63, 255, 255, 1, 0, 255, 7, 255, 255, 15, 255, 62, 0,
- 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
- 255, 255, 255, 192, 1, 0, 239, 254, 31, 0, 0, 0, 128, 0, 255, 255,
- 255, 255, 255, 0, 16, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
- 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
- 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
- 255, 7, 0, 1, 0, 0, 0, 128, 255, 252, 255, 255, 10, 0, 0, 0,
- 1, 248, 255, 255, 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32,
- 255, 253, 255, 255, 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0,
- 191, 253, 255, 255, 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224,
- 255, 7, 1, 0, 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 7, 255, 31, 255, 1, 255, 3, 255, 255, 223, 255, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 255, 31, 128, 63,
- 0, 64, 0, 0, 15, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255,
-};
-
-/* XID_Start: 2504 bytes. */
-
-RE_UINT32 re_get_xid_start(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_xid_start_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_xid_start_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_xid_start_stage_3[pos + f] << 5;
- pos += code;
- value = (re_xid_start_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* XID_Continue. */
-
-static RE_UINT8 re_xid_continue_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 9,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 22, 23, 5, 24, 25,
+ 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 22,
+ 9, 2, 2, 2, 2, 22, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 9, 22, 22,
+ 22, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 9, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 22, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 0,
+ 1, 1, 0, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 1, 1, 1, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11,
+ 11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 12, 12, 12, 18, 18, 18, 9, 9,
+ 9, 9, 18, 9, 9, 9, 12, 18, 12, 18, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18, 18, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 20, 20, 20, 20, 20, 20, 20, 12, 18, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 18,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 1,
+ 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 28, 28, 28, 28, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 1, 1, 2,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 9, 9, 9, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+ 0, 0, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9,
+ 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9,
+ 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 9, 9, 2, 2, 2, 2, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 10,
+ 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 12, 12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 9, 9,
+ 11, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9,
+ 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
+ 0, 9, 9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 34, 34, 34,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 9, 9, 9, 34, 34, 34,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 9, 9, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 9, 9, 34, 34, 34, 34, 34, 9, 34, 34, 34,
+ 34, 34, 35, 35, 35, 34, 34, 35, 34, 34, 35, 35, 35, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42,
+ 34, 34, 35, 35, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 35, 34, 34, 34,
+ 34, 35, 35, 35, 34, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 35,
+ 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 34, 9, 34, 9, 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 9,
+ 34, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 35, 35, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 34, 34, 34, 34, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 35, 35, 35, 34, 34, 34, 35, 35, 35, 35, 35,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 8, 8, 8, 28, 28, 28, 9, 9, 9, 9,
+ 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 26, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 34, 34, 34, 34, 34, 34, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 35, 34, 34, 35,
+ 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35,
+ 34, 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 35, 35, 35, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 35, 35, 34, 35, 35, 34, 35, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35,
+ 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_xid_continue_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 31, 31,
- 34, 35, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37,
- 1, 1, 1, 1, 38, 1, 39, 40, 41, 42, 43, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 45, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 1, 58, 59, 60, 61, 62, 63, 64, 31, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 31, 77, 78, 79, 31,
- 1, 1, 1, 80, 81, 82, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 85, 86, 31, 31, 87, 88,
- 1, 1, 1, 1, 1, 1, 1, 89, 1, 1, 90, 31, 31, 31, 31, 31,
- 1, 91, 92, 31, 31, 31, 31, 31, 31, 31, 31, 31, 93, 31, 31, 31,
- 31, 94, 95, 31, 96, 97, 98, 99, 31, 31, 100, 31, 31, 31, 31, 31,
- 101, 102, 103, 31, 31, 31, 31, 31, 104, 105, 31, 31, 31, 31, 106, 31,
- 1, 1, 1, 1, 1, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 108, 109, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 111, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 112, 31, 31, 31, 31, 31,
- 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+RE_UINT32 re_get_line_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_line_break_table_1[field_2];
+ v = re_line_break_table_2[(v << 5) | field_1];
+ v = re_line_break_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Logical_Order_Exception. */
+RE_UINT32 re_get_logical_order_exception(RE_UINT32 codepoint) {
+ if (0x0E40 <= codepoint && codepoint <= 0x0E44)
+ return 1;
+ if (0x0EC0 <= codepoint && codepoint <= 0x0EC4)
+ return 1;
+ if (0x19B5 <= codepoint && codepoint <= 0x19B7)
+ return 1;
+ if (codepoint == 0x19BA)
+ return 1;
+ if (0xAAB5 <= codepoint && codepoint <= 0xAAB6)
+ return 1;
+ if (codepoint == 0xAAB9)
+ return 1;
+ if (0xAABB <= codepoint && codepoint <= 0xAABC)
+ return 1;
+
+ return 0;
+}
+
+/* Lowercase. */
+static RE_UINT8 re_lowercase_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 17, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_lowercase_table_2[] = {
+ 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 5, 13, 14, 15, 16, 17, 18, 19, 0, 0, 20, 21, 22, 23, 24, 25,
+ 0, 26, 15, 5, 27, 5, 28, 5, 5, 29, 0, 15, 30, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 26, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
+ 0, 0, 0, 0, 30, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0,
+ 5, 5, 5, 5, 33, 5, 5, 5, 34, 35, 36, 37, 35, 38, 39, 40,
+ 0, 0, 0, 41, 42, 0, 0, 0, 43, 44, 45, 26, 46, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 26, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 48, 49, 5, 5, 5, 50, 15, 51, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 52, 53, 0, 0, 0, 0, 54, 5, 55, 56, 57, 58, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 60, 61, 15, 15, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 63, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 68, 69, 81,
+ 71, 72, 82, 64, 75, 83, 84, 85, 86, 82, 87, 26, 88, 75, 89, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_lowercase_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 0, 0, 0, 128,
+ 255, 255, 127, 255, 170, 170, 170, 170, 170, 170, 170, 85, 85, 171, 170, 170,
+ 170, 170, 170, 212, 41, 49, 36, 78, 42, 45, 81, 230, 64, 82, 85, 181,
+ 170, 170, 41, 170, 170, 170, 250, 147, 133, 170, 255, 255, 255, 255, 255, 255,
+ 255, 255, 239, 255, 255, 255, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0,
+ 32, 0, 0, 0, 0, 0, 138, 60, 0, 0, 1, 0, 0, 240, 255, 255,
+ 255, 127, 227, 170, 170, 170, 47, 25, 0, 0, 255, 255, 2, 168, 170, 170,
+ 84, 213, 170, 170, 170, 170, 0, 0, 255, 1, 0, 0, 255, 255, 255, 231,
+ 0, 0, 0, 63, 170, 170, 234, 191, 255, 0, 63, 0, 255, 0, 255, 0,
+ 63, 0, 255, 0, 255, 0, 255, 63, 255, 0, 223, 64, 220, 0, 207, 0,
+ 255, 0, 220, 0, 0, 0, 2, 128, 0, 0, 255, 31, 0, 196, 8, 0,
+ 0, 128, 16, 50, 192, 67, 0, 0, 16, 0, 0, 0, 255, 3, 0, 0,
+ 255, 255, 255, 127, 98, 21, 218, 63, 26, 80, 8, 0, 191, 32, 0, 0,
+ 170, 42, 0, 0, 170, 170, 170, 58, 168, 170, 171, 170, 170, 170, 255, 149,
+ 170, 80, 186, 170, 170, 130, 160, 170, 8, 5, 0, 0, 0, 0, 64, 7,
+ 255, 255, 255, 247, 255, 1, 255, 255, 127, 0, 248, 0, 0, 255, 255, 255,
+ 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 255, 15, 255, 255, 7, 0,
+ 0, 0, 0, 252, 255, 255, 15, 0, 0, 192, 223, 255, 255, 0, 0, 0,
+ 252, 255, 255, 15, 0, 0, 192, 235, 239, 255, 0, 0, 0, 252, 255, 255,
+ 15, 0, 0, 192, 255, 255, 255, 0, 0, 0, 252, 255, 255, 15, 0, 0,
+ 192, 255, 255, 255, 0, 192, 255, 255, 0, 0, 192, 255, 63, 0, 0, 0,
+ 252, 255, 255, 247, 3, 0, 0, 240, 255, 255, 223, 15, 255, 127, 63, 0,
+ 255, 253, 0, 0, 247, 11, 0, 0, 252, 255, 255, 255, 15, 0, 0, 0
};
-static RE_UINT8 re_xid_continue_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 4, 0, 0, 5, 6, 7, 8, 7, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 0,
- 7, 7, 7, 7, 7, 7, 7, 12, 13, 7, 14, 7, 7, 7, 7, 15,
- 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 2, 7, 17, 7, 7, 18, 2, 7, 19, 20, 7, 3, 21,
- 0, 4, 7, 7, 7, 7, 22, 7, 7, 7, 7, 7, 7, 23, 24, 25,
- 0, 7, 7, 7, 26, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 27,
- 7, 7, 28, 0, 7, 29, 4, 0, 0, 0, 7, 30, 0, 31, 14, 7,
- 7, 7, 7, 7, 7, 7, 32, 2, 23, 33, 24, 34, 35, 36, 32, 37,
- 38, 33, 24, 39, 40, 41, 42, 43, 44, 14, 24, 45, 46, 47, 32, 48,
- 49, 33, 24, 45, 50, 51, 32, 52, 53, 54, 55, 22, 56, 57, 42, 0,
- 58, 59, 24, 60, 61, 62, 32, 0, 63, 59, 24, 64, 61, 65, 32, 66,
- 63, 59, 7, 7, 67, 68, 32, 69, 70, 71, 7, 72, 73, 74, 42, 75,
- 2, 7, 7, 4, 76, 1, 0, 0, 77, 7, 78, 28, 79, 80, 0, 0,
- 47, 81, 1, 82, 83, 7, 84, 2, 85, 83, 7, 84, 86, 0, 0, 0,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 28, 7, 7, 87, 7, 7, 88,
- 7, 7, 7, 7, 89, 90, 7, 7, 89, 7, 7, 91, 92, 8, 7, 7,
- 7, 92, 7, 7, 7, 26, 48, 10, 7, 0, 7, 7, 7, 7, 7, 93,
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 25, 7, 2, 4, 7, 7, 7, 7, 94, 18,
- 58, 95, 7, 95, 7, 96, 58, 97, 7, 7, 7, 7, 7, 98, 1, 0,
- 99, 1, 7, 7, 7, 7, 7, 18, 7, 7, 4, 7, 7, 7, 7, 43,
- 7, 76, 29, 29, 42, 7, 28, 95, 7, 7, 29, 7, 1, 4, 0, 0,
- 7, 29, 7, 7, 7, 76, 7, 25, 1, 1, 100, 28, 0, 0, 0, 0,
- 7, 7, 7, 7, 29, 1, 101, 96, 7, 7, 7, 7, 7, 7, 7, 96,
- 7, 7, 7, 102, 60, 7, 7, 28, 18, 7, 7, 26, 0, 103, 7, 4,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 104,
- 7, 93, 7, 7, 93, 105, 7, 28, 7, 7, 7, 106, 107, 108, 84, 107,
- 0, 0, 0, 109, 47, 110, 0, 111, 0, 84, 0, 0, 0, 84, 112, 47,
- 113, 114, 115, 80, 116, 0, 7, 7, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 7, 7, 76, 7, 7, 7, 7, 7, 7, 7, 7, 117, 96,
- 7, 7, 87, 7, 7, 7, 118, 109, 7, 119, 120, 120, 120, 120, 7, 7,
- 121, 0, 2, 122, 2, 7, 7, 7, 7, 123, 2, 7, 7, 7, 7, 88,
- 124, 7, 7, 2, 7, 7, 7, 7, 76, 0, 7, 4, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 84, 0, 0, 0, 0, 7, 7, 28,
- 84, 7, 29, 0, 7, 7, 7, 125, 7, 7, 7, 7, 7, 7, 7, 10,
- 0, 126, 127, 7, 7, 7, 7, 7, 128, 7, 7, 7, 129, 0, 0, 126,
- 7, 7, 102, 0, 7, 7, 7, 96, 7, 7, 7, 7, 43, 1, 7, 130,
- 7, 7, 28, 7, 7, 96, 7, 84, 7, 7, 7, 7, 131, 1, 7, 76,
- 7, 7, 7, 119, 28, 1, 7, 71, 7, 7, 7, 7, 21, 99, 7, 129,
- 132, 133, 120, 7, 7, 88, 102, 7, 7, 7, 7, 7, 7, 7, 134, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 96, 7, 135, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 28, 7, 7, 7, 7, 7, 7, 1, 0, 0,
- 119, 136, 24, 137, 138, 7, 7, 7, 7, 7, 7, 10, 0, 31, 7, 7,
- 7, 7, 7, 7, 7, 28, 139, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 28, 0, 7, 7, 7, 7, 127, 7, 7, 102, 0, 0, 1,
- 7, 0, 7, 140, 141, 0, 0, 142, 7, 7, 7, 7, 7, 7, 7, 84,
- 0, 1, 2, 3, 2, 4, 42, 7, 7, 7, 7, 76, 143, 144, 0, 0,
- 145, 7, 8, 146, 28, 28, 0, 0, 7, 7, 7, 7, 7, 7, 7, 4,
- 0, 0, 0, 0, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 147,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 84, 7, 7, 7, 47, 47, 0,
- 7, 7, 141, 7, 4, 7, 7, 4, 7, 28, 7, 7, 148, 149, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 28, 1, 7, 7, 148, 7, 29,
- 7, 7, 102, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 119, 7, 43, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 150, 7, 7, 151, 7, 43, 7, 119, 7, 76, 0, 0, 0, 0, 7, 152,
- 7, 43, 7, 1, 0, 0, 0, 0, 7, 7, 7, 153, 0, 0, 0, 0,
- 154, 155, 7, 156, 0, 0, 7, 84, 7, 84, 0, 0, 83, 7, 119, 0,
- 7, 7, 7, 43, 7, 43, 7, 21, 7, 10, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 18, 0, 0, 0, 7, 7, 7, 21, 7, 7, 7, 21,
- 7, 7, 102, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 84, 100, 7, 7, 47, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 119, 0, 42, 109, 7, 7, 7, 4, 0, 7, 18, 1,
- 7, 7, 7, 85, 157, 7, 7, 158, 7, 7, 7, 7, 159, 160, 0, 0,
- 7, 14, 7, 161, 0, 0, 0, 0, 162, 19, 18, 7, 7, 7, 4, 1,
- 23, 33, 24, 163, 50, 164, 165, 95, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 4, 22, 0, 0, 7, 7, 7, 7, 166, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 167, 47, 168, 0, 0,
- 7, 7, 7, 7, 169, 1, 0, 0, 7, 7, 7, 18, 1, 0, 0, 0,
- 7, 26, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 1, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 7, 7, 170, 171, 0,
- 7, 7, 7, 76, 100, 7, 7, 7, 7, 172, 0, 0, 7, 7, 7, 18,
- 24, 7, 7, 8, 47, 1, 0, 127, 7, 127, 83, 119, 0, 0, 0, 0,
- 173, 7, 7, 174, 102, 1, 175, 7, 76, 176, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 119,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 76, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 18, 7, 76, 1, 0, 0, 0, 0, 0, 0, 7, 28, 95,
- 7, 7, 7, 119, 96, 1, 31, 177, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 3, 7, 7, 7, 118, 7, 0, 0, 0, 0, 178, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 102,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21,
- 7, 76, 0, 0, 0, 21, 179, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 29,
- 7, 7, 7, 7, 7, 7, 4, 84, 18, 180, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 181, 182, 183, 0, 184, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 85, 7, 7, 7, 58, 186, 187, 188, 7, 7, 7,
- 189, 190, 7, 191, 192, 59, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 167, 7, 59, 88, 7, 88,
- 7, 85, 7, 85, 76, 7, 76, 7, 24, 7, 24, 7, 193, 7, 7, 7,
- 7, 7, 7, 135, 7, 7, 84, 194, 110, 101, 2, 0, 0, 0, 0, 0,
- 8, 128, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 84, 28, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95, 119, 0, 0,
- 7, 7, 7, 7, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 188, 7, 197, 198, 199, 200, 201, 202, 104, 29, 203, 29, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 119, 0, 0,
- 7, 7, 7, 95, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 28, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 47, 0,
- 7, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_lowercase(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_xid_continue_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 135, 255, 7, 0, 4, 160, 4, 255, 255,
- 127, 255, 195, 255, 3, 0, 31, 80, 223, 184, 192, 215, 251, 255, 191, 255,
- 251, 252, 127, 2, 255, 1, 255, 191, 182, 0, 7, 0, 255, 195, 239, 159,
- 255, 253, 255, 159, 255, 231, 63, 36, 255, 63, 255, 15, 223, 63, 248, 255,
- 207, 255, 249, 255, 197, 243, 159, 121, 128, 176, 3, 80, 238, 135, 109, 211,
- 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 237, 243, 191, 59, 1, 0,
- 0, 254, 238, 159, 159, 57, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199,
- 199, 61, 129, 0, 255, 223, 253, 255, 255, 227, 223, 61, 96, 7, 239, 223,
- 239, 243, 96, 64, 6, 0, 223, 125, 240, 128, 0, 252, 236, 255, 127, 252,
- 251, 47, 127, 132, 95, 255, 12, 0, 255, 127, 214, 247, 175, 255, 95, 63,
- 255, 243, 0, 3, 160, 194, 255, 254, 255, 31, 223, 255, 64, 0, 191, 32,
- 255, 247, 255, 61, 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 31, 0,
- 15, 0, 13, 0, 143, 48, 0, 56, 128, 0, 0, 248, 255, 0, 247, 255,
- 255, 251, 255, 170, 223, 95, 220, 31, 207, 15, 0, 128, 16, 0, 2, 128,
- 226, 255, 132, 252, 47, 63, 80, 253, 224, 67, 31, 248, 255, 128, 127, 0,
- 127, 127, 224, 0, 62, 31, 127, 230, 224, 255, 240, 191, 128, 255, 252, 255,
- 255, 249, 124, 0, 255, 232, 1, 128, 126, 126, 126, 0, 255, 55, 127, 248,
- 248, 224, 127, 95, 219, 255, 240, 255, 24, 0, 0, 224, 138, 170, 252, 252,
- 252, 28, 255, 239, 255, 183, 0, 32, 15, 255, 62, 0, 63, 253, 191, 145,
- 55, 0, 255, 192, 111, 240, 239, 254, 63, 135, 112, 0, 79, 0, 31, 30,
- 255, 23, 255, 64, 127, 189, 237, 251, 129, 224, 207, 31, 191, 0, 63, 255,
- 0, 63, 17, 0, 255, 252, 27, 0, 255, 35, 127, 251, 127, 180, 191, 253,
- 251, 1, 255, 224, 11, 0, 240, 0, 255, 99, 224, 227, 7, 248, 231, 15,
- 0, 60, 28, 0, 100, 222, 255, 235, 239, 255, 191, 231, 223, 223, 255, 123,
- 95, 252, 247, 207, 32, 0, 219, 7, 255, 67, 150, 254, 247, 10, 132, 234,
- 150, 170, 150, 247, 247, 94, 238, 251,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* XID_Continue: 2920 bytes. */
-
-RE_UINT32 re_get_xid_continue(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_xid_continue_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_xid_continue_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_xid_continue_stage_3[pos + f] << 4;
- pos += code;
- value = (re_xid_continue_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ v = re_lowercase_table_1[field_2];
+ v = re_lowercase_table_2[(v << 5) | field_1];
+ v = re_lowercase_table_3[(v << 2) | field_0];
-/* Default_Ignorable_Code_Point. */
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_default_ignorable_code_point_stage_1[] = {
- 0, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 4, 5, 2,
+/* Math. */
+static RE_UINT8 re_math_table_1[] = {
+ 0, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 7,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_default_ignorable_code_point_stage_2[] = {
- 0, 1, 2, 3, 2, 2, 2, 2, 4, 2, 2, 5, 6, 2, 2, 2,
- 7, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2,
- 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_math_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 10, 11, 12, 13, 0, 14, 15, 16, 17, 18, 0, 19, 20, 21, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 24, 25, 0, 26, 27, 28, 29, 30,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33,
+ 34, 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 0, 19, 37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 40,
+ 23, 23, 41, 23, 42, 43, 44, 23, 45, 46, 47, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 48, 23, 23, 23, 23, 23, 23, 23, 23, 49, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 50, 51, 52, 53, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_default_ignorable_code_point_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 13,
- 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16,
+static RE_UINT8 re_math_table_3[] = {
+ 0, 0, 0, 0, 0, 8, 0, 112, 0, 0, 0, 64, 0, 0, 0, 80,
+ 0, 16, 2, 0, 0, 0, 128, 0, 0, 0, 39, 0, 0, 0, 115, 0,
+ 192, 1, 0, 0, 0, 0, 64, 0, 0, 0, 28, 0, 17, 0, 4, 0,
+ 30, 0, 0, 124, 0, 124, 0, 0, 0, 0, 255, 31, 98, 248, 0, 0,
+ 132, 252, 47, 63, 16, 179, 251, 241, 255, 11, 0, 0, 0, 0, 255, 255,
+ 255, 126, 195, 240, 255, 255, 255, 47, 48, 0, 240, 255, 255, 255, 255, 255,
+ 0, 15, 0, 0, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 248,
+ 255, 255, 191, 0, 0, 0, 1, 240, 7, 0, 0, 0, 3, 192, 255, 240,
+ 195, 140, 15, 0, 148, 31, 0, 255, 96, 0, 0, 0, 5, 0, 0, 0,
+ 15, 224, 0, 0, 159, 31, 0, 0, 0, 2, 0, 0, 126, 1, 0, 0,
+ 4, 30, 0, 0, 255, 255, 223, 255, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 255, 207, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 3, 0
};
-static RE_UINT8 re_default_ignorable_code_point_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
- 0, 120, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 124, 0, 0,
- 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1,
- 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 7,
- 255, 255, 255, 255, 255, 255, 255, 255,
-};
+RE_UINT32 re_get_math(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_math_table_1[field_2];
+ v = re_math_table_2[(v << 5) | field_1];
+ v = re_math_table_3[(v << 2) | field_0];
-/* Default_Ignorable_Code_Point: 488 bytes. */
-
-RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_default_ignorable_code_point_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_default_ignorable_code_point_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_default_ignorable_code_point_stage_3[pos + f] << 6;
- pos += code;
- value = (re_default_ignorable_code_point_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Grapheme_Extend. */
+/* NFC_Quick_Check. */
+static RE_UINT8 re_nfc_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 5, 10, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 5,
+ 5, 5, 5, 5, 12, 13, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 16, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
-static RE_UINT8 re_grapheme_extend_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 7, 8, 9,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_nfc_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 9, 10, 0,
+ 0, 11, 12, 0, 0, 0, 0, 0, 0, 9, 13, 0, 0, 9, 14, 0,
+ 0, 0, 15, 0, 0, 0, 16, 0, 0, 9, 14, 0, 0, 0, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 20, 21, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 30,
+ 31, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, 36, 36, 36, 36,
+ 37, 38, 36, 39, 36, 36, 40, 0, 41, 42, 43, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_nfc_quick_check_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2,
+ 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1,
+ 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 2, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
};
-static RE_UINT8 re_grapheme_extend_stage_2[] = {
- 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 0, 0, 15, 0, 0, 0, 16, 17, 18, 19, 20, 21, 22, 0, 0,
- 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 0, 0,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+RE_UINT32 re_get_nfc_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_nfc_quick_check_table_1[field_2];
+ v = re_nfc_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfc_quick_check_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* NFD_Quick_Check. */
+static RE_UINT8 re_nfd_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 5, 10, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5,
+ 5, 5, 5, 5, 14, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+static RE_UINT8 re_nfd_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 7, 8, 9,
+ 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 15, 16, 0,
+ 17, 18, 19, 20, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 0,
+ 0, 28, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0,
+ 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 39, 0, 0,
+ 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 30, 31, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 34,
- 0, 35, 36, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 52, 53, 54, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 45, 44, 44, 46, 47, 44, 48, 49, 44, 50, 51, 52,
+ 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 0,
+ 58, 59, 60, 61, 62, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67, 68, 13, 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0,
- 62, 56, 63, 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 70, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
+ 71, 72, 44, 73, 44, 44, 46, 0, 74, 75, 76, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_extend_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0,
- 7, 0, 8, 9, 0, 0, 10, 11, 12, 13, 14, 0, 0, 15, 0, 16,
- 17, 18, 19, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 30, 31, 34, 35, 26, 36, 37, 25, 38, 39, 40, 0,
- 41, 42, 43, 25, 26, 44, 45, 25, 46, 47, 28, 25, 0, 0, 48, 0,
- 0, 49, 50, 0, 0, 51, 52, 0, 53, 54, 0, 55, 56, 57, 58, 0,
- 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 64, 64, 65, 65, 0, 66, 67, 0, 68, 0, 0, 0, 69, 70, 0, 0,
- 0, 71, 0, 0, 0, 0, 0, 0, 72, 0, 73, 74, 0, 75, 0, 0,
- 76, 77, 38, 78, 46, 79, 0, 80, 0, 81, 0, 0, 0, 0, 82, 83,
- 0, 0, 0, 0, 0, 0, 1, 84, 85, 0, 0, 0, 0, 0, 13, 86,
- 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 1,
- 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 42, 0, 0, 92,
- 93, 69, 0, 0, 0, 0, 94, 95, 0, 96, 97, 0, 22, 98, 0, 99,
- 0, 100, 101, 31, 0, 102, 26, 103, 0, 0, 0, 0, 0, 0, 0, 104,
- 39, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, 0, 0,
- 108, 109, 0, 0, 0, 0, 0, 69, 0, 110, 0, 0, 0, 0, 0, 0,
- 0, 0, 15, 0, 0, 0, 0, 0, 26, 111, 112, 88, 46, 113, 0, 0,
- 22, 114, 0, 115, 46, 116, 117, 0, 0, 118, 0, 0, 0, 0, 88, 119,
- 46, 47, 120, 121, 0, 0, 0, 0, 0, 111, 122, 0, 0, 123, 124, 0,
- 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, 106, 0, 0, 128, 0, 0,
- 63, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 131, 106, 132, 133, 134, 0, 135, 0, 0, 0,
- 0, 136, 0, 0, 137, 138, 0, 0, 0, 139, 140, 0, 141, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143,
- 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 146, 0, 0, 0,
- 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 148, 149, 150, 0, 0,
- 0, 0, 151, 0, 0, 0, 0, 0, 1, 152, 1, 153, 154, 155, 0, 0,
- 156, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
- 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 159, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2,
-};
-
-static RE_UINT8 re_grapheme_extend_stage_4[] = {
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 248, 3, 0, 0,
- 0, 0, 254, 255, 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 255, 7,
- 0, 248, 255, 255, 0, 0, 1, 0, 0, 0, 192, 159, 159, 61, 0, 0,
- 0, 0, 2, 0, 0, 0, 255, 255, 255, 7, 0, 0, 192, 255, 1, 0,
- 0, 248, 15, 32, 0, 0, 192, 251, 239, 62, 0, 0, 0, 0, 0, 14,
- 0, 0, 248, 255, 251, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 20,
- 254, 33, 254, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 80,
- 30, 32, 128, 0, 12, 0, 0, 64, 6, 0, 0, 0, 0, 0, 0, 16,
- 134, 57, 2, 0, 0, 0, 35, 0, 190, 33, 0, 0, 12, 0, 0, 252,
- 0, 0, 0, 208, 30, 32, 192, 0, 4, 0, 0, 0, 0, 0, 0, 64,
- 1, 32, 128, 0, 17, 0, 0, 0, 0, 0, 0, 192, 193, 61, 96, 0,
- 0, 0, 0, 144, 68, 48, 96, 0, 3, 0, 0, 0, 0, 0, 0, 88,
- 0, 132, 92, 128, 0, 0, 242, 7, 128, 127, 0, 0, 0, 0, 242, 31,
- 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 254, 127,
- 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 224, 253, 102,
- 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 224,
- 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 176, 63, 64, 254, 15, 32,
- 0, 56, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0, 135, 1, 4, 14,
- 0, 0, 128, 9, 0, 0, 64, 127, 229, 31, 248, 159, 0, 0, 255, 127,
- 15, 0, 0, 0, 0, 0, 240, 23, 0, 248, 15, 0, 60, 59, 0, 0,
- 64, 163, 3, 0, 0, 240, 207, 0, 0, 0, 247, 255, 253, 33, 16, 3,
- 255, 255, 255, 251, 0, 16, 0, 0, 255, 255, 1, 0, 0, 128, 3, 0,
- 0, 0, 0, 128, 0, 252, 0, 0, 0, 0, 0, 6, 0, 128, 247, 63,
- 0, 0, 3, 0, 68, 8, 0, 0, 48, 0, 0, 0, 255, 255, 3, 128,
- 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 200, 51, 32, 0, 0, 0,
- 0, 126, 102, 0, 8, 16, 0, 0, 0, 0, 157, 193, 0, 48, 64, 0,
- 32, 33, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 192, 7,
- 110, 240, 0, 0, 0, 0, 0, 135, 240, 0, 0, 0, 0, 0, 0, 255,
- 127, 0, 0, 0, 0, 0, 120, 6, 128, 239, 31, 0, 0, 0, 8, 0,
- 0, 0, 192, 127, 0, 30, 0, 0, 0, 128, 211, 64, 248, 7, 0, 0,
- 1, 0, 128, 0, 192, 31, 31, 0, 92, 0, 0, 64, 0, 0, 249, 165,
- 13, 0, 0, 0, 0, 128, 60, 176, 1, 0, 0, 48, 0, 0, 248, 167,
- 0, 40, 191, 0, 188, 15, 0, 0, 0, 128, 255, 6, 0, 0, 240, 12,
- 254, 7, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14, 0, 252, 127, 3,
- 0, 0, 127, 191, 0, 0, 252, 255, 255, 252, 109, 0, 0, 0, 126, 180,
- 191, 0, 0, 0, 0, 0, 163, 0, 0, 0, 24, 0, 0, 0, 31, 0,
- 0, 0, 127, 0, 0, 128, 0, 0, 0, 128, 7, 0, 0, 0, 0, 96,
- 160, 195, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
- 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 0, 240, 0, 0, 240, 7, 0, 0,
-};
-
-/* Grapheme_Extend: 1672 bytes. */
-
-RE_UINT32 re_get_grapheme_extend(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_grapheme_extend_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_grapheme_extend_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_grapheme_extend_stage_3[pos + f] << 5;
- pos += code;
- value = (re_grapheme_extend_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 0, 85, 86, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_nfd_quick_check_table_3[] = {
+ 255, 255, 255, 255, 64, 0, 129, 193, 64, 0, 129, 65, 0, 0, 3, 0,
+ 192, 0, 14, 129, 7, 14, 12, 0, 192, 0, 0, 128, 252, 127, 254, 255,
+ 255, 31, 0, 32, 48, 0, 206, 0, 0, 0, 0, 48, 63, 0, 240, 255,
+ 228, 255, 255, 255, 255, 255, 239, 191, 31, 40, 254, 255, 255, 3, 254, 255,
+ 255, 131, 231, 255, 116, 143, 255, 253, 255, 255, 255, 253, 255, 255, 116, 143,
+ 255, 255, 63, 255, 249, 255, 48, 3, 3, 3, 192, 252, 131, 255, 255, 255,
+ 250, 255, 247, 255, 255, 253, 237, 255, 255, 255, 255, 0, 255, 231, 255, 79,
+ 255, 255, 183, 255, 255, 255, 255, 177, 255, 230, 255, 207, 255, 255, 239, 255,
+ 255, 227, 255, 255, 255, 254, 255, 255, 126, 242, 255, 255, 255, 255, 255, 139,
+ 247, 223, 123, 239, 255, 253, 151, 254, 253, 255, 247, 223, 123, 239, 255, 253,
+ 191, 255, 255, 255, 191, 170, 251, 255, 255, 255, 255, 215, 244, 255, 255, 255,
+ 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 252, 0, 0, 192, 192,
+ 192, 192, 0, 85, 0, 0, 0, 192, 0, 0, 32, 160, 33, 0, 48, 16,
+ 0, 0, 35, 192, 252, 255, 255, 255, 191, 243, 255, 255, 255, 255, 255, 243,
+ 255, 191, 255, 255, 255, 31, 255, 255, 239, 237, 255, 255, 175, 255, 255, 255,
+ 109, 253, 255, 255, 250, 31, 204, 252, 204, 252, 255, 255, 255, 15, 255, 255,
+ 240, 195, 255, 255, 255, 249, 255, 255, 255, 255, 255, 239, 255, 175, 170, 170,
+ 90, 253, 36, 201, 255, 255, 111, 184, 240, 255, 255, 255, 0, 192, 26, 128,
+ 154, 3, 0, 0, 0, 192, 0, 0, 255, 255, 255, 95, 255, 3, 128, 160,
+ 36, 128, 255, 255, 255, 255, 255, 235, 255, 247, 255, 255, 255, 63, 255, 255,
+ 255, 231, 255, 255, 255, 255, 255, 167, 255, 255, 255, 254, 255, 255, 255, 63,
+ 224, 255, 255, 255, 255, 255, 255, 7, 254, 255, 255, 255
+};
+
+RE_UINT32 re_get_nfd_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_nfd_quick_check_table_1[field_2];
+ v = re_nfd_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfd_quick_check_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Grapheme_Base. */
-
-static RE_UINT8 re_grapheme_base_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6,
-};
-
-static RE_UINT8 re_grapheme_base_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
- 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 19, 19, 13, 32, 19, 19,
- 19, 33, 19, 19, 19, 19, 19, 19, 19, 19, 34, 35, 13, 13, 13, 13,
- 13, 36, 37, 19, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 19, 39,
- 19, 19, 19, 19, 40, 41, 42, 19, 43, 19, 44, 45, 46, 47, 48, 19,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 49, 13, 13, 13, 50, 51, 13,
- 13, 13, 13, 52, 13, 13, 13, 13, 13, 13, 53, 19, 19, 19, 54, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-};
-
-static RE_UINT8 re_grapheme_base_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 2, 2, 30, 31, 32, 33, 2, 2, 2, 2, 2, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 2, 47, 2, 2, 48, 49,
- 50, 51, 2, 52, 2, 2, 2, 2, 53, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 54, 55, 56, 57, 58, 59, 60, 61, 2, 62,
- 63, 64, 65, 66, 67, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 68, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69,
- 2, 70, 2, 2, 71, 72, 2, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- 2, 2, 2, 2, 2, 2, 2, 82, 83, 83, 83, 83, 83, 83, 83, 83,
- 83, 83, 2, 2, 84, 85, 86, 87, 2, 2, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 83, 98, 99, 100, 2, 101, 102, 83, 2, 2, 103, 83,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 83, 115, 83, 116, 117,
- 118, 119, 120, 121, 122, 123, 124, 83, 125, 126, 83, 127, 128, 129, 130, 83,
- 131, 132, 83, 133, 134, 135, 83, 83, 136, 137, 138, 139, 83, 140, 83, 141,
- 2, 2, 2, 2, 2, 2, 2, 142, 143, 2, 144, 83, 83, 83, 83, 83,
- 145, 83, 83, 83, 83, 83, 83, 83, 2, 2, 2, 2, 146, 83, 83, 83,
- 2, 2, 2, 2, 147, 148, 149, 150, 83, 83, 83, 83, 151, 152, 153, 154,
- 2, 2, 2, 2, 2, 2, 2, 155, 2, 2, 2, 2, 2, 156, 83, 83,
- 2, 2, 157, 2, 2, 158, 83, 83, 159, 160, 83, 83, 83, 83, 83, 83,
- 2, 161, 162, 163, 164, 165, 166, 83, 167, 168, 169, 2, 2, 170, 2, 171,
- 2, 2, 2, 2, 172, 173, 83, 83, 83, 83, 174, 83, 83, 175, 83, 83,
- 2, 176, 177, 83, 83, 83, 83, 83, 178, 179, 180, 83, 181, 182, 83, 83,
- 183, 184, 185, 186, 187, 83, 2, 2, 2, 2, 2, 2, 2, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 83, 83, 2, 2, 2, 2, 2, 197, 2, 2,
- 2, 2, 2, 2, 2, 2, 198, 2, 199, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 200, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201,
- 2, 2, 2, 2, 202, 83, 83, 83,
+/* NFKC_Quick_Check. */
+static RE_UINT8 re_nfkc_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 16,
+ 5, 5, 5, 5, 17, 18, 19, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 20, 21, 5, 5, 5, 5, 5, 22, 23, 5, 24, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
};
-static RE_UINT8 re_grapheme_base_stage_4[] = {
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127,
- 0, 0, 0, 0, 255, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 252,
- 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 7, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 127, 254, 255, 255, 255, 255,
- 255, 231, 0, 0, 0, 0, 0, 64, 73, 0, 255, 255, 255, 135, 31, 0,
- 192, 255, 0, 200, 255, 255, 255, 255, 255, 7, 0, 0, 255, 255, 254, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 64, 96, 194, 255, 255,
- 255, 63, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 63, 0, 2, 0, 255, 255, 255, 255, 255, 7, 240, 199,
- 255, 255, 63, 4, 16, 1, 255, 127, 255, 255, 255, 65, 255, 7, 0, 0,
- 0, 0, 0, 0, 255, 255, 223, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 248, 255, 255, 255, 255, 255, 255, 235, 1, 222, 1, 255, 243, 255, 255, 255,
- 237, 159, 249, 255, 255, 253, 197, 163, 129, 89, 0, 176, 195, 255, 255, 63,
- 232, 135, 249, 255, 255, 253, 109, 195, 1, 0, 0, 94, 192, 255, 92, 0,
- 232, 191, 251, 255, 255, 253, 237, 227, 1, 26, 1, 0, 195, 255, 3, 2,
- 236, 159, 249, 255, 255, 253, 237, 35, 129, 25, 0, 176, 195, 255, 255, 0,
- 232, 199, 61, 214, 24, 199, 255, 131, 198, 29, 1, 0, 192, 255, 255, 7,
- 238, 223, 253, 255, 255, 253, 255, 35, 30, 0, 0, 7, 195, 255, 128, 255,
- 253, 223, 253, 255, 255, 253, 239, 99, 155, 13, 0, 64, 195, 255, 6, 0,
- 236, 223, 253, 255, 255, 255, 255, 167, 193, 221, 112, 255, 195, 255, 255, 255,
- 236, 255, 127, 252, 255, 255, 251, 47, 127, 0, 3, 127, 192, 255, 28, 0,
- 254, 255, 255, 255, 255, 255, 13, 128, 127, 128, 255, 15, 0, 0, 0, 0,
- 214, 247, 255, 255, 175, 255, 13, 32, 95, 0, 255, 243, 0, 0, 0, 0,
- 255, 255, 255, 252, 255, 255, 95, 253, 255, 254, 255, 255, 255, 31, 0, 128,
- 32, 31, 0, 0, 0, 0, 0, 192, 191, 223, 255, 7, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 31, 2, 153, 255, 255, 255, 60, 254, 255, 225, 255,
- 155, 223, 255, 223, 255, 255, 255, 255, 191, 32, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 127, 61, 255, 255, 255, 255,
- 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 255, 255,
- 255, 255, 61, 255, 255, 255, 255, 255, 255, 255, 255, 7, 255, 255, 255, 31,
- 255, 255, 255, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 63,
- 255, 255, 255, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1,
- 255, 223, 3, 0, 255, 255, 99, 0, 255, 255, 3, 0, 255, 223, 1, 0,
- 255, 255, 255, 255, 255, 255, 79, 192, 191, 1, 240, 31, 255, 3, 255, 3,
- 255, 7, 255, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1,
- 159, 255, 255, 255, 255, 5, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 127, 120, 14, 251, 1, 241, 255, 255, 255, 255, 63, 31, 0,
- 255, 255, 255, 255, 255, 15, 255, 255, 255, 3, 255, 199, 255, 255, 255, 255,
- 255, 255, 127, 198, 255, 255, 255, 255, 255, 255, 191, 0, 26, 224, 7, 0,
- 255, 3, 255, 3, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 240, 255, 255, 255, 255, 255, 15, 232, 251, 15, 255, 255, 255, 7, 240, 31,
- 252, 255, 255, 255, 195, 196, 255, 255, 255, 255, 255, 255, 191, 92, 12, 240,
- 255, 255, 255, 255, 255, 15, 48, 248, 255, 227, 255, 255, 255, 255, 255, 255,
- 255, 1, 255, 255, 255, 255, 255, 231, 255, 0, 8, 0, 2, 222, 239, 4,
- 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 63, 63, 255, 255, 255, 255, 63, 63, 255, 170, 255, 255, 255, 63,
- 255, 255, 255, 255, 255, 255, 223, 255, 223, 255, 207, 239, 255, 255, 220, 127,
- 255, 7, 255, 255, 255, 128, 255, 255, 255, 255, 255, 255, 0, 0, 243, 255,
- 255, 127, 255, 31, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 127, 0, 0, 0, 255, 7, 0, 0, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 255,
- 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 12, 254,
- 255, 255, 255, 255, 191, 32, 255, 255, 255, 255, 255, 255, 255, 128, 1, 0,
- 255, 255, 127, 0, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 255, 15,
- 255, 255, 255, 255, 255, 3, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 127, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 224, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 127, 255, 255, 255, 255, 255, 7, 255, 255, 255, 255, 15, 0, 255, 255,
- 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 63, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0,
- 255, 31, 255, 255, 255, 255, 255, 255, 127, 0, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 127, 8, 192,
- 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 124, 0, 0, 0, 0, 0, 128, 255,
- 187, 247, 255, 255, 159, 15, 255, 3, 255, 255, 255, 255, 255, 255, 255, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 15, 192, 255, 3, 0, 0, 252, 127,
- 255, 255, 255, 255, 63, 192, 255, 255, 127, 0, 12, 128, 255, 255, 255, 31,
- 248, 255, 255, 255, 255, 255, 55, 204, 255, 191, 255, 195, 223, 255, 255, 127,
- 255, 255, 255, 255, 255, 129, 25, 0, 247, 47, 255, 243, 255, 255, 255, 239,
- 255, 255, 255, 255, 255, 255, 98, 62, 5, 0, 0, 248, 255, 207, 63, 0,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 30, 255, 3,
- 255, 255, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255, 255, 255, 255, 15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 0, 0, 0,
- 127, 0, 248, 160, 255, 255, 127, 95, 219, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 248, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255,
- 255, 255, 252, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 63,
- 0, 0, 255, 3, 0, 0, 255, 255, 255, 255, 247, 255, 127, 15, 223, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31,
- 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 63, 255, 255, 255, 127, 252, 252, 252, 28, 127, 127, 0, 48,
- 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7,
- 135, 255, 255, 255, 255, 255, 143, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 127, 255, 15, 1, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 31,
- 255, 255, 255, 31, 255, 255, 255, 255, 255, 255, 1, 0, 254, 255, 255, 15,
- 255, 255, 255, 255, 15, 224, 255, 255, 255, 7, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 191, 255, 255, 255, 255, 15, 255, 63, 0, 0, 0, 0, 0,
- 255, 255, 255, 63, 255, 3, 255, 255, 255, 255, 15, 255, 255, 255, 255, 15,
- 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 15, 128, 0, 0,
- 255, 255, 255, 255, 255, 255, 127, 0, 255, 255, 63, 0, 255, 0, 0, 0,
- 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 191, 255, 255, 255, 255, 255,
- 255, 255, 255, 127, 128, 255, 0, 0, 0, 0, 0, 0, 255, 255, 55, 248,
- 255, 255, 255, 143, 255, 255, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 252, 255, 255, 255, 255, 255,
- 1, 0, 239, 254, 255, 255, 63, 0, 255, 1, 255, 1, 255, 255, 255, 255,
- 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 31, 248, 127, 0,
- 255, 255, 255, 255, 255, 255, 63, 254, 255, 255, 63, 255, 255, 255, 7, 255,
- 255, 255, 3, 30, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 7, 0, 255, 255, 255, 255, 255, 255, 7, 252,
- 255, 255, 255, 255, 15, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 127,
- 255, 255, 255, 255, 255, 0, 255, 255, 63, 0, 254, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 127, 0,
- 253, 255, 255, 255, 255, 255, 255, 0, 128, 63, 252, 255, 255, 255, 0, 0,
- 252, 255, 255, 255, 255, 255, 135, 217, 3, 0, 255, 255, 255, 1, 255, 3,
- 248, 255, 255, 255, 127, 16, 192, 255, 127, 0, 255, 255, 255, 255, 119, 0,
- 252, 255, 255, 255, 255, 255, 63, 128, 255, 33, 255, 255, 254, 255, 31, 0,
- 255, 255, 251, 255, 255, 127, 44, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 127, 189, 255, 191, 255, 3, 255, 255, 255, 255, 255, 127, 7, 0, 255, 3,
- 236, 159, 249, 255, 255, 253, 237, 163, 158, 57, 1, 224, 15, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 0, 163, 255, 255, 171, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 6, 90, 242, 0, 255, 3, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 127, 3, 79, 254, 255, 255, 15, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 7, 88, 30, 0, 255, 3, 255, 31, 0, 0,
- 255, 255, 255, 255, 255, 215, 64, 1, 255, 3, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 7, 67, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 127, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 128,
- 0, 0, 0, 0, 255, 252, 255, 255, 255, 255, 15, 240, 30, 0, 0, 0,
- 1, 248, 255, 255, 255, 255, 7, 134, 127, 0, 129, 241, 255, 255, 255, 255,
- 255, 3, 128, 252, 7, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 1,
- 255, 253, 255, 255, 255, 255, 0, 64, 63, 0, 255, 255, 255, 31, 255, 255,
- 255, 255, 0, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 127, 251, 255, 255, 255, 255, 1, 0, 64, 0, 255, 3, 191, 253, 255, 255,
- 255, 127, 88, 1, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 231, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 3, 128,
- 255, 255, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 31, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 1, 255, 255, 255, 127, 255, 195, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 63, 32, 0,
- 255, 255, 255, 255, 255, 255, 128, 255, 63, 0, 255, 251, 251, 255, 255, 224,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 255, 255, 255, 255, 255, 255,
- 255, 0, 248, 255, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 0,
- 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 255, 31,
- 255, 1, 255, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 255, 255, 95, 60, 0, 0,
- 24, 240, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 35, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 255, 255, 255, 1,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 255, 255,
- 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 255, 255, 255, 255,
- 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 128, 7, 0, 0, 0, 0, 0, 224, 223, 255,
- 239, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 31, 128, 63, 255, 195, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 15, 255, 131,
- 255, 255, 255, 255, 255, 255, 255, 255, 159, 255, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 15, 8, 255, 195, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255,
- 255, 255, 255, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 254, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 239, 255, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
- 255, 251, 255, 15, 238, 251, 255, 15, 0, 0, 0, 0, 0, 0, 3, 0,
- 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 15, 0, 255, 127, 254, 255, 254, 255, 254, 255, 255, 255, 63, 0,
- 255, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 255, 255,
- 255, 255, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255,
- 7, 0, 255, 255, 255, 255, 255, 15, 255, 1, 3, 0, 63, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 255, 31, 255, 7,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 255, 15, 0, 0,
- 255, 15, 255, 255, 255, 255, 255, 255, 255, 0, 255, 3, 255, 255, 255, 255,
- 255, 0, 255, 255, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 239, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 123, 252,
- 255, 255, 255, 255, 231, 199, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 63, 15, 7,
- 7, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 31, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 3, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0,
- 255, 255, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_nfkc_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 4, 0, 0, 5, 6,
+ 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 0, 15, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 22, 23, 0,
+ 0, 24, 25, 0, 0, 0, 0, 0, 0, 22, 26, 0, 0, 22, 27, 0,
+ 0, 0, 28, 0, 0, 0, 29, 0, 0, 22, 27, 0, 0, 0, 30, 0,
+ 0, 31, 0, 0, 0, 31, 32, 0, 33, 0, 34, 35, 36, 37, 0, 0,
+ 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 41, 42, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46, 47, 48, 0, 0,
+ 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 0, 0, 60, 61, 62, 48, 63, 0, 0, 0,
+ 0, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 48, 48, 48, 48, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 33, 0, 0, 67, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 31, 48, 48, 48, 48, 48, 48, 69, 0,
+ 70, 71, 0, 0, 72, 0, 0, 4, 0, 73, 48, 48, 74, 0, 0, 0,
+ 75, 48, 76, 75, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+ 80, 81, 48, 82, 48, 48, 83, 0, 84, 85, 86, 48, 48, 87, 88, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 89, 90, 48, 91, 48, 92, 93,
+ 94, 90, 95, 96, 48, 48, 48, 97, 98, 48, 48, 48, 48, 75, 99, 100,
+ 0, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 27, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 9, 0, 47, 70, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 107, 48, 108, 109, 110, 48, 111, 112, 113, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 114, 48, 48, 48, 48, 48, 48, 48, 48, 115, 48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 77, 0, 0, 0,
+ 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Grapheme_Base: 3946 bytes. */
-
-RE_UINT32 re_get_grapheme_base(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_grapheme_base_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_grapheme_base_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_grapheme_base_stage_3[pos + f] << 7;
- pos += code;
- value = (re_grapheme_base_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Grapheme_Link. */
-
-static RE_UINT8 re_grapheme_link_stage_1[] = {
- 0, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_nfkc_quick_check_table_3[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0,
+ 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_grapheme_link_stage_2[] = {
- 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_link_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 2, 1, 0, 3, 4, 0, 4, 0, 0, 0, 5, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 5, 10, 11,
- 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 0, 0, 5, 0, 14, 0, 15, 0, 0, 0, 16, 0, 0, 0, 17,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 18, 19, 0, 20, 0, 0, 15, 21, 0, 0, 22, 0, 1, 0, 0,
- 0, 23, 0, 23, 0, 0, 12, 0, 12, 0, 16, 0, 24, 0, 0, 0,
- 19, 0, 0, 0, 0, 0, 0, 9, 25, 26, 27, 0, 0, 0, 0, 0,
- 12, 0, 0, 0, 0, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_grapheme_link_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 24, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 16, 0, 0, 0, 16, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 0, 128, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
-};
-
-/* Grapheme_Link: 580 bytes. */
-
-RE_UINT32 re_get_grapheme_link(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_grapheme_link_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_grapheme_link_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_grapheme_link_stage_3[pos + f] << 6;
- pos += code;
- value = (re_grapheme_link_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* White_Space. */
-
-static RE_UINT8 re_white_space_stage_1[] = {
+ 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2,
+ 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1,
+ 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 2, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_white_space_stage_2[] = {
- 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 1, 1, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_white_space_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 3, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_white_space_stage_4[] = {
- 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 7, 0, 0, 0, 131, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
-};
-
-/* White_Space: 218 bytes. */
-
-RE_UINT32 re_get_white_space(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_white_space_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_white_space_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_white_space_stage_3[pos + f] << 7;
- pos += code;
- value = (re_white_space_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Bidi_Control. */
-
-static RE_UINT8 re_bidi_control_stage_1[] = {
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_bidi_control_stage_2[] = {
- 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_bidi_control_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_bidi_control_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 192, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 192, 3, 0, 0,
-};
-
-/* Bidi_Control: 162 bytes. */
-
-RE_UINT32 re_get_bidi_control(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_bidi_control_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_bidi_control_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_bidi_control_stage_3[pos + f] << 7;
- pos += code;
- value = (re_bidi_control_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Join_Control. */
-
-static RE_UINT8 re_join_control_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_join_control_stage_2[] = {
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_join_control_stage_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_join_control_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Join_Control: 130 bytes. */
-
-RE_UINT32 re_get_join_control(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_join_control_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_join_control_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_join_control_stage_3[pos + f] << 7;
- pos += code;
- value = (re_join_control_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Dash. */
-
-static RE_UINT8 re_dash_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_dash_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, 1,
- 5, 6, 1, 1, 1, 1, 1, 7, 8, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9,
-};
-
-static RE_UINT8 re_dash_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 1, 1, 1, 1, 1,
- 8, 1, 1, 1, 1, 1, 1, 1, 9, 3, 1, 1, 1, 1, 1, 1,
- 10, 1, 11, 1, 1, 1, 1, 1, 12, 13, 1, 1, 14, 1, 1, 1,
-};
-
-static RE_UINT8 re_dash_stage_4[] = {
- 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 128, 4, 0, 0, 0, 12,
- 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 8, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0,
-};
-
-/* Dash: 364 bytes. */
-
-RE_UINT32 re_get_dash(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_dash_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_dash_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_dash_stage_3[pos + f] << 6;
- pos += code;
- value = (re_dash_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Hyphen. */
-
-static RE_UINT8 re_hyphen_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_hyphen_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 5, 6, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_hyphen_stage_3[] = {
- 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 8, 9, 1, 1,
-};
+RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_hyphen_stage_4[] = {
- 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 8, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-/* Hyphen: 308 bytes. */
-
-RE_UINT32 re_get_hyphen(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_hyphen_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_hyphen_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_hyphen_stage_3[pos + f] << 6;
- pos += code;
- value = (re_hyphen_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ v = re_nfkc_quick_check_table_1[field_2];
+ v = re_nfkc_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfkc_quick_check_table_3[(v << 5) | field_0];
-/* Quotation_Mark. */
+ return v;
+}
-static RE_UINT8 re_quotation_mark_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+/* NFKD_Quick_Check. */
+static RE_UINT8 re_nfkd_quick_check_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 14, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 17, 18,
+ 5, 5, 5, 5, 19, 20, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 22, 23, 5, 5, 5, 5, 5, 24, 25, 5, 26, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
};
-static RE_UINT8 re_quotation_mark_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+static RE_UINT8 re_nfkd_quick_check_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
+ 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
+ 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0,
+ 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0,
+ 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 42, 0,
+ 0, 43, 0, 0, 0, 43, 44, 0, 45, 0, 46, 47, 48, 49, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
+ 59, 59, 59, 59, 60, 59, 59, 61, 62, 59, 63, 64, 59, 65, 66, 67,
+ 68, 69, 70, 71, 72, 40, 0, 0, 73, 74, 75, 59, 76, 77, 78, 0,
+ 79, 80, 81, 82, 83, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 59, 59, 59, 59, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 0, 0, 88, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
+ 0, 0, 0, 0, 90, 0, 0, 43, 59, 59, 59, 59, 59, 59, 91, 0,
+ 92, 93, 94, 95, 96, 94, 95, 97, 0, 98, 59, 59, 99, 0, 0, 0,
+ 100, 59, 101, 100, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 106, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59,
+ 107, 108, 59, 109, 59, 59, 61, 0, 110, 111, 112, 59, 59, 113, 114, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 64, 115, 59, 4, 59, 116, 117,
+ 118, 115, 119, 120, 59, 59, 59, 121, 122, 59, 59, 59, 59, 100, 123, 124,
+ 0, 0, 0, 0, 125, 126, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 15, 0, 58, 92, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 59, 59, 65, 59, 133, 134, 135, 59, 136, 137, 138, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 7, 59, 59, 59, 59, 59, 59, 59, 59, 139, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 140, 141, 142, 143, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 145, 146, 147, 39, 102, 0, 0, 0,
+ 148, 60, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_nfkd_quick_check_table_3[] = {
+ 255, 255, 255, 255, 254, 122, 195, 136, 64, 0, 129, 193, 64, 0, 129, 65,
+ 0, 0, 3, 0, 192, 0, 2, 1, 6, 12, 12, 0, 192, 0, 0, 0,
+ 252, 127, 254, 255, 15, 0, 0, 32, 48, 0, 192, 0, 0, 0, 0, 48,
+ 63, 0, 240, 255, 255, 255, 0, 254, 255, 255, 255, 192, 224, 255, 255, 255,
+ 228, 255, 255, 255, 255, 255, 239, 187, 15, 40, 254, 255, 255, 3, 254, 255,
+ 255, 131, 128, 255, 255, 255, 200, 253, 116, 143, 255, 253, 255, 255, 255, 253,
+ 255, 255, 116, 143, 255, 255, 63, 255, 249, 255, 48, 3, 3, 3, 192, 252,
+ 127, 255, 255, 255, 131, 255, 255, 255, 255, 255, 31, 254, 250, 255, 247, 255,
+ 255, 253, 237, 255, 255, 255, 255, 0, 255, 231, 255, 79, 255, 255, 183, 255,
+ 255, 255, 255, 177, 255, 230, 255, 207, 255, 255, 239, 255, 255, 227, 255, 255,
+ 255, 254, 255, 255, 126, 242, 255, 255, 255, 255, 255, 139, 255, 255, 247, 255,
+ 255, 255, 255, 207, 255, 239, 255, 255, 247, 223, 123, 239, 255, 253, 23, 252,
+ 253, 255, 247, 223, 123, 239, 255, 253, 191, 255, 255, 255, 255, 255, 255, 239,
+ 191, 170, 251, 255, 255, 255, 255, 215, 244, 255, 255, 255, 255, 143, 0, 8,
+ 0, 64, 0, 0, 0, 248, 255, 254, 255, 255, 255, 7, 0, 0, 0, 0,
+ 0, 0, 0, 240, 0, 0, 0, 252, 0, 0, 192, 192, 192, 192, 0, 85,
+ 0, 0, 0, 192, 0, 0, 32, 0, 32, 0, 48, 16, 0, 0, 35, 128,
+ 0, 248, 125, 255, 143, 127, 39, 175, 127, 252, 127, 127, 255, 255, 12, 0,
+ 0, 128, 0, 224, 16, 1, 144, 193, 168, 66, 4, 4, 30, 252, 0, 0,
+ 255, 253, 255, 243, 255, 191, 255, 255, 255, 31, 255, 255, 239, 237, 255, 255,
+ 175, 79, 254, 255, 109, 253, 255, 255, 250, 31, 204, 252, 204, 252, 255, 255,
+ 255, 15, 255, 255, 240, 195, 255, 255, 255, 249, 255, 255, 0, 248, 255, 255,
+ 255, 255, 143, 255, 255, 127, 255, 255, 255, 255, 255, 127, 0, 0, 192, 255,
+ 254, 255, 255, 255, 255, 255, 191, 248, 255, 175, 170, 170, 90, 253, 36, 201,
+ 255, 255, 239, 39, 255, 255, 111, 56, 255, 255, 1, 0, 0, 128, 3, 0,
+ 0, 0, 0, 128, 0, 255, 0, 0, 255, 255, 254, 255, 255, 255, 255, 252,
+ 255, 255, 255, 15, 255, 253, 255, 255, 240, 255, 255, 255, 0, 192, 26, 128,
+ 154, 3, 0, 0, 0, 192, 0, 0, 128, 255, 7, 95, 0, 0, 128, 160,
+ 36, 0, 0, 0, 0, 0, 252, 255, 255, 255, 7, 0, 255, 255, 0, 0,
+ 0, 255, 255, 255, 255, 255, 0, 224, 255, 255, 0, 252, 96, 0, 8, 0,
+ 128, 240, 40, 0, 0, 0, 0, 224, 1, 0, 0, 0, 3, 3, 3, 227,
+ 128, 128, 255, 255, 255, 255, 255, 235, 255, 247, 255, 255, 255, 63, 255, 255,
+ 255, 231, 255, 255, 255, 255, 255, 167, 255, 255, 255, 243, 255, 255, 255, 254,
+ 255, 255, 255, 63, 0, 0, 0, 32, 155, 33, 0, 20, 16, 0, 0, 0,
+ 64, 24, 32, 32, 0, 0, 0, 132, 160, 3, 2, 0, 0, 48, 0, 0,
+ 105, 1, 8, 245, 123, 21, 105, 85, 105, 8, 8, 161, 0, 4, 0, 240,
+ 17, 4, 0, 240, 0, 248, 0, 0, 0, 128, 0, 0, 0, 0, 255, 255,
+ 248, 255, 0, 0, 0, 254, 252, 255
+};
+
+RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_nfkd_quick_check_table_1[field_2];
+ v = re_nfkd_quick_check_table_2[(v << 5) | field_1];
+ v = re_nfkd_quick_check_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Noncharacter_Code_Point. */
+static RE_UINT8 re_noncharacter_code_point_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2
};
-static RE_UINT8 re_quotation_mark_stage_3[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1,
- 5, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 7, 8, 1, 1,
+static RE_UINT8 re_noncharacter_code_point_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3
};
-static RE_UINT8 re_quotation_mark_stage_4[] = {
- 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 255, 0, 0, 0, 6,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 224, 0, 0, 0, 0,
- 30, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 0, 0,
+static RE_UINT8 re_noncharacter_code_point_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 192
};
-/* Quotation_Mark: 284 bytes. */
-
-RE_UINT32 re_get_quotation_mark(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_quotation_mark_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_quotation_mark_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_quotation_mark_stage_3[pos + f] << 6;
- pos += code;
- value = (re_quotation_mark_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Terminal_Punctuation. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_terminal_punctuation_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ v = re_noncharacter_code_point_table_1[field_2];
+ v = re_noncharacter_code_point_table_2[(v << 5) | field_1];
+ v = re_noncharacter_code_point_table_3[(v << 2) | field_0];
-static RE_UINT8 re_terminal_punctuation_stage_2[] = {
- 0, 1, 1, 2, 1, 3, 4, 5, 6, 7, 1, 1, 1, 1, 8, 9,
- 10, 1, 1, 11, 1, 1, 12, 13, 14, 15, 16, 17, 18, 1, 1, 1,
- 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1,
- 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 22, 1, 23, 1, 24, 25, 26, 27, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 29,
- 1, 1, 1, 30, 1, 1, 1, 1, 31, 32, 33, 34, 1, 1, 1, 35,
- 36, 37, 38, 1, 39, 40, 41, 42, 1, 1, 43, 1, 44, 1, 45, 1,
- 1, 1, 1, 1, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 48, 1, 1, 49, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51, 1, 1, 1, 1, 1,
-};
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_terminal_punctuation_stage_3[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0,
- 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 9,
- 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 19, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 0, 23, 0, 24, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 0, 0,
- 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 24, 30, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 26, 0,
- 0, 0, 35, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 38,
- 0, 0, 39, 0, 0, 0, 0, 0, 1, 0, 0, 40, 0, 0, 0, 0,
- 0, 0, 0, 0, 36, 0, 41, 0, 0, 0, 42, 0, 0, 0, 0, 0,
- 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 43,
- 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0,
- 0, 0, 47, 0, 0, 24, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0,
- 0, 51, 0, 0, 0, 4, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 29, 0, 0, 0, 0, 0,
- 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 29, 0, 0,
- 0, 0, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
- 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 60,
- 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
- 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+/* Numeric_Type. */
+static RE_UINT8 re_numeric_type_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 10,
+ 10, 10, 10, 15, 16, 17, 18, 19, 20, 21, 10, 22, 23, 24, 10, 10,
+ 25, 26, 10, 27, 10, 28, 10, 10, 10, 29, 30, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 10, 41, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 42, 43, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 44, 45, 10, 10, 46, 10, 47, 48, 49, 10, 50, 10,
+ 51, 10, 52, 10, 10, 10, 10, 10, 53, 10, 54, 10, 10, 10, 55, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 56, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 57, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT8 re_terminal_punctuation_stage_4[] = {
- 0, 0, 0, 0, 2, 80, 0, 140, 0, 0, 0, 64, 128, 0, 0, 0,
- 0, 2, 0, 0, 8, 0, 0, 0, 0, 16, 0, 200, 0, 0, 16, 0,
- 255, 23, 0, 0, 0, 0, 0, 3, 0, 0, 255, 127, 48, 0, 0, 0,
- 0, 0, 0, 12, 0, 225, 7, 0, 0, 12, 0, 0, 254, 1, 0, 0,
- 0, 64, 0, 0, 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 4,
- 60, 3, 0, 0, 0, 15, 0, 0, 0, 0, 0, 236, 0, 0, 0, 248,
- 0, 0, 0, 192, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
- 2, 208, 0, 0, 6, 0, 0, 0, 0, 224, 0, 0, 0, 0, 248, 0,
- 0, 0, 192, 0, 0, 192, 0, 0, 0, 128, 0, 0, 0, 0, 0, 224,
- 0, 0, 0, 128, 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 247, 0,
- 18, 0, 0, 0, 0, 0, 1, 0, 0, 0, 128, 0, 0, 0, 63, 0,
- 0, 0, 0, 252, 0, 0, 0, 30, 0, 0, 224, 3, 128, 63, 0, 0,
- 3, 0, 0, 0, 14, 0, 0, 0, 96, 32, 0, 192, 0, 0, 0, 31,
- 0, 56, 0, 8, 60, 254, 255, 0, 0, 0, 0, 112, 12, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 2, 0, 0, 0, 128, 1, 0, 0, 31, 0,
- 0, 0, 32, 0, 0, 0, 128, 3, 16, 0, 0, 0, 128, 7, 0, 0,
+static RE_UINT8 re_numeric_type_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 7,
+ 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 9, 10, 0, 0, 0, 4,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
+ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0,
+ 0, 31, 32, 0, 31, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 0, 27, 0, 39, 40, 41, 42, 37, 0, 0, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 0, 0, 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 58, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 59, 60, 61, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 63, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 56, 65, 27,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 20, 68, 69, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 72, 0, 0, 0, 73, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 74, 75, 0, 76, 0, 77, 78, 0, 0, 0, 0, 79, 80, 20,
+ 0, 0, 81, 82, 83, 0, 0, 84, 0, 0, 74, 74, 0, 85, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 86, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 87, 0, 0, 0, 0, 83, 88, 89, 0, 0, 0, 90, 0,
+ 0, 0, 91, 92, 0, 0, 0, 1, 0, 93, 0, 0, 0, 0, 1, 94,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 97, 98, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0,
+ 20, 20, 20, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 101, 102, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 105,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 20, 106, 0, 0, 107, 108, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 59, 0, 0, 44, 0, 0, 0, 110, 0, 59, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 111, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 112, 113, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Terminal_Punctuation: 1128 bytes. */
-
-RE_UINT32 re_get_terminal_punctuation(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_terminal_punctuation_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_terminal_punctuation_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_terminal_punctuation_stage_3[pos + f] << 5;
- pos += code;
- value = (re_terminal_punctuation_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Math. */
-
-static RE_UINT8 re_other_math_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_numeric_type_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 3, 3, 3, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 3, 3, 3, 3,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3,
+ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_math_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
- 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_numeric_type(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_other_math_stage_3[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 11, 0, 12, 13,
- 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, 18,
- 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0,
- 23, 24, 25, 26, 27, 28, 23, 23, 23, 23, 29, 30, 31, 32, 33, 34,
- 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_other_math_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 51, 0, 0, 0, 64, 0, 0, 0, 28, 0,
- 1, 0, 0, 0, 30, 0, 0, 96, 0, 96, 0, 0, 0, 0, 0, 0,
- 0, 0, 255, 31, 98, 248, 0, 0, 132, 252, 47, 62, 16, 179, 251, 241,
- 224, 3, 0, 0, 0, 0, 0, 0, 0, 0, 224, 243, 182, 62, 195, 240,
- 255, 63, 235, 47, 48, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 1, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 3, 192, 127, 240, 193, 140, 15, 0, 148, 31, 0, 0,
- 96, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 15, 96, 0, 0,
- 96, 0, 0, 0, 192, 255, 0, 0, 248, 255, 255, 1, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 48, 0, 0, 0, 0, 10, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 80, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 223, 255, 255, 255, 255, 255, 255, 255, 255, 223, 100, 222, 255, 235,
- 239, 255, 255, 255, 255, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 255, 255, 255,
- 253, 255, 255, 247, 255, 255, 255, 247, 255, 255, 223, 255, 255, 255, 223, 255,
- 255, 127, 255, 255, 255, 127, 255, 255, 255, 253, 255, 255, 255, 253, 255, 255,
- 247, 207, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 150, 254, 247, 10,
- 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
-};
+ v = re_numeric_type_table_1[field_2];
+ v = re_numeric_type_table_2[(v << 5) | field_1];
+ v = re_numeric_type_table_3[(v << 5) | field_0];
-/* Other_Math: 564 bytes. */
-
-RE_UINT32 re_get_other_math(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_math_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_math_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_math_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_math_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* Hex_Digit. */
-
-static RE_UINT8 re_hex_digit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1,
-};
-
-static RE_UINT8 re_hex_digit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_hex_digit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+/* Numeric_Value. */
+static RE_UINT8 re_numeric_value_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 10,
+ 10, 10, 10, 15, 16, 17, 18, 19, 20, 21, 10, 22, 23, 24, 10, 10,
+ 25, 26, 10, 27, 10, 28, 10, 10, 10, 29, 30, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 10, 41, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 42, 43, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 44, 45, 10, 10, 46, 10, 47, 48, 49, 10, 50, 10,
+ 51, 10, 52, 10, 10, 10, 10, 10, 53, 10, 54, 10, 10, 10, 55, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 56, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 57, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT8 re_hex_digit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
+static RE_UINT8 re_numeric_value_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Hex_Digit: 177 bytes. */
-
-RE_UINT32 re_get_hex_digit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 16;
- code = ch ^ (f << 16);
- pos = (RE_UINT32)re_hex_digit_stage_1[f] << 5;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_hex_digit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_hex_digit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_hex_digit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* ASCII_Hex_Digit. */
-
-static RE_UINT8 re_ascii_hex_digit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_ascii_hex_digit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_ascii_hex_digit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_ascii_hex_digit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 7,
+ 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 9, 10, 0, 0, 0, 4,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15, 0,
+ 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 3, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 20, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0,
+ 0, 29, 30, 0, 29, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 0, 37, 0, 38, 39, 40, 41, 42, 0, 0, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 0, 0, 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 64, 65, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 69, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 72, 73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 76, 77, 78, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 81, 0, 0, 0, 82, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 83, 84, 0, 85, 0, 86, 87, 0, 0, 0, 0, 88, 89, 90,
+ 0, 0, 91, 92, 93, 0, 0, 94, 0, 0, 95, 95, 0, 96, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 97, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 98, 0, 0, 0, 0, 99, 100, 101, 0, 0, 0, 102, 0,
+ 0, 0, 103, 104, 0, 0, 0, 1, 0, 105, 0, 0, 0, 0, 1, 106,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 107, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 109, 110, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0,
+ 112, 113, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 116, 117, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 124, 125, 126, 0, 0, 127, 128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 130, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 136, 137, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* ASCII_Hex_Digit: 130 bytes. */
-
-RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_ascii_hex_digit_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_ascii_hex_digit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_ascii_hex_digit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_ascii_hex_digit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Alphabetic. */
-
-static RE_UINT8 re_other_alphabetic_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 7, 2, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_numeric_value_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 4, 0, 0, 0, 0, 0, 2, 0, 0, 11, 12, 13, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 14, 15, 16, 11, 13, 17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 2, 3, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 18, 19, 20, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 18, 37, 38, 39, 40, 41, 42, 43, 44, 19, 45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47,
+ 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 49, 50, 25, 51, 52, 27, 53, 54, 55, 56, 57, 15, 58, 59, 60, 2,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 40, 19, 63, 20,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 40, 19, 63, 20,
+ 20, 64, 45, 0, 0, 7, 40, 65, 66, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 67, 68, 69, 17,
+ 46, 47, 48, 37, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62,
+ 67, 68, 69, 17, 46, 47, 48, 37, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 18, 61, 62, 67, 68, 69, 17, 46, 47, 48, 37, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 61, 62, 67, 68, 69,
+ 17, 46, 47, 48, 37, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 37, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 37, 38, 39, 40, 41, 42, 43,
+ 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, 38, 79, 80, 81, 82, 83,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 84, 85, 86, 87, 39, 88, 89, 90, 91, 92, 93, 94, 95, 96, 40,
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 8, 0, 0, 0, 45, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 6, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
+ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 9, 0, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 0, 20, 37, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 37,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 18, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 18, 37, 38, 39, 40, 41, 42, 43, 44, 19, 99, 100, 101, 63, 102, 103,
+ 104, 105, 20, 106, 107, 108, 64, 109, 110, 111, 112, 45, 113, 114, 115, 65,
+ 116, 117, 118, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 2, 6, 40, 63, 64, 65, 6, 18, 40, 19, 63, 20, 64, 6,
+ 18, 40, 19, 63, 20, 45, 65, 18, 2, 2, 2, 3, 3, 3, 3, 6,
+ 18, 18, 18, 18, 18, 38, 40, 40, 40, 40, 19, 100, 63, 63, 63, 63,
+ 63, 20, 64, 6, 40, 12, 12, 52, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 0, 0, 0, 0,
+ 2, 6, 18, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 18, 37, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 18, 37, 19, 20, 45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 18, 37,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 5, 6, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 18, 37, 19, 3, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 12, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41, 42,
+ 0, 0, 19, 99, 100, 101, 63, 102, 103, 104, 105, 20, 106, 107, 108, 64,
+ 109, 110, 111, 112, 45, 113, 114, 115, 65, 116, 117, 118, 119, 66, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 56, 11, 51, 130, 12, 131, 52, 13, 57,
+ 2, 3, 4, 5, 18, 37, 19, 20, 12, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 37,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 18, 37, 19, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 18, 37, 19,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 18, 40, 19, 20,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41, 42,
+ 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 12, 11, 51, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4,
+ 5, 6, 18, 37, 38, 19, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 18, 37, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 5, 18, 37, 19, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40,
+ 41, 42, 43, 44, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 18, 37, 38, 39, 40, 41, 42, 43, 44, 19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 21, 133, 134, 22, 135, 23, 136, 24, 14, 14, 25, 15, 26, 16, 27,
+ 11, 12, 12, 13, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6, 7, 8, 9, 10, 5,
+ 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3,
+ 4, 5, 6, 3, 4, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 4,
+ 5, 6, 137, 138, 2, 3, 4, 4, 5, 6, 4, 4, 5, 5, 5, 5,
+ 7, 8, 8, 8, 9, 9, 10, 10, 10, 10, 3, 4, 5, 6, 7, 2,
+ 3, 4, 5, 5, 6, 6, 3, 4, 2, 3, 51, 52, 57, 51, 52, 15,
+ 11, 56, 11, 11, 12, 51, 52, 39, 40, 5, 6, 7, 8, 9, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 18, 19, 45, 139, 97,
+ 140, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 67, 68, 69,
+ 17, 46, 47, 48, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 61, 62, 67, 68, 69,
+ 17, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41, 42,
+ 43, 44, 2, 3, 4, 5, 6, 2, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 20, 106, 107, 108,
+ 64, 109, 110, 111, 112, 45, 113, 114, 115, 65, 116, 117, 118, 119, 66, 121,
+ 66, 141, 142, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 11, 12, 13,
+ 0, 2, 3, 45, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 37, 38, 39, 40, 41,
+ 42, 43, 44, 19, 99, 100, 101, 63, 102, 103, 104, 105, 20, 106, 107, 108,
+ 64, 109, 110, 111, 112, 45, 113, 114, 115, 65, 116, 117, 118, 119, 0, 3,
+ 4, 5, 6, 7, 8, 9, 10, 18, 101, 102, 106, 45, 12, 56, 0, 0,
+ 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_alphabetic_stage_2[] = {
- 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 0,
- 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 26, 27, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0,
- 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 0, 43, 44, 45, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+RE_UINT32 re_get_numeric_value(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_numeric_value_table_1[field_2];
+ v = re_numeric_value_table_2[(v << 5) | field_1];
+ v = re_numeric_value_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Other_Alphabetic. */
+static RE_UINT8 re_other_alphabetic_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 10, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 12, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 8,
+ 14, 8, 15, 16, 17, 18, 19, 20, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 22,
+ 8, 8, 8, 8, 8, 8, 8, 8, 23, 8, 24, 8, 25, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
};
-static RE_UINT8 re_other_alphabetic_stage_3[] = {
+static RE_UINT8 re_other_alphabetic_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 3, 0, 4, 0, 5, 6, 0, 0, 7, 8,
- 9, 10, 0, 0, 0, 11, 0, 0, 12, 13, 0, 0, 0, 0, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 19, 20, 21, 23, 24, 20, 21, 25, 26,
- 20, 21, 27, 19, 28, 21, 29, 0, 16, 21, 30, 19, 20, 21, 30, 19,
- 16, 21, 31, 19, 19, 0, 32, 33, 0, 34, 35, 0, 0, 36, 35, 0,
- 0, 0, 0, 37, 38, 39, 0, 0, 0, 40, 41, 42, 43, 0, 0, 0,
- 33, 33, 33, 33, 0, 44, 45, 0, 0, 0, 0, 0, 46, 47, 0, 0,
- 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 50, 51, 0, 0, 0, 0,
- 52, 53, 16, 0, 54, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 44, 59, 60,
- 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 61, 21, 0, 0, 0,
- 62, 63, 0, 0, 64, 14, 65, 66, 0, 67, 68, 0, 16, 14, 0, 1,
- 0, 69, 70, 71, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 74,
- 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0,
- 77, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0,
- 54, 79, 80, 0, 28, 81, 0, 0, 54, 68, 46, 0, 54, 82, 0, 0,
- 0, 83, 0, 0, 0, 0, 66, 45, 16, 21, 22, 19, 0, 0, 0, 0,
- 0, 53, 84, 0, 0, 10, 64, 0, 0, 0, 0, 0, 0, 85, 86, 0,
- 0, 87, 88, 0, 0, 89, 0, 0, 90, 91, 0, 0, 0, 0, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 94,
- 95, 96, 97, 0, 98, 0, 0, 0, 0, 99, 0, 0, 100, 101, 0, 0,
- 0, 102, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 0, 0, 106, 59, 107, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0,
- 108, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0,
- 0, 10, 111, 111, 60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0,
+ 4, 0, 5, 6, 0, 0, 7, 8, 9, 10, 0, 0, 0, 11, 0, 0,
+ 12, 13, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 19,
+ 20, 21, 23, 24, 20, 21, 25, 26, 20, 21, 27, 19, 28, 21, 29, 0,
+ 16, 21, 30, 19, 20, 21, 30, 19, 16, 21, 31, 19, 20, 0, 32, 33,
+ 0, 34, 35, 0, 0, 36, 35, 0, 0, 0, 0, 37, 38, 39, 0, 0,
+ 0, 40, 41, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 33, 33, 0, 44, 45, 0,
+ 0, 0, 0, 0, 46, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
+ 49, 0, 50, 51, 0, 52, 53, 0, 54, 55, 16, 0, 56, 57, 0, 58,
+ 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 44, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 65, 0, 0, 66, 14, 67, 52, 0, 68, 69, 0, 16, 14, 0, 1,
+ 0, 70, 71, 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 81, 82, 0, 28, 83, 0, 0, 56, 69, 46, 0, 56, 84, 85, 0,
+ 0, 86, 0, 0, 0, 0, 52, 45, 16, 21, 22, 19, 0, 0, 0, 0,
+ 0, 55, 87, 0, 0, 10, 66, 0, 0, 0, 0, 0, 0, 88, 89, 0,
+ 0, 90, 53, 0, 0, 91, 0, 0, 92, 93, 0, 0, 0, 0, 0, 0,
+ 0, 94, 0, 0, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 97, 98,
+ 99, 100, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 103, 0, 0, 104, 105, 0, 0, 0, 106, 107, 0, 108, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 61, 111, 0, 0, 112,
+ 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 113, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 116, 116, 62, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_alphabetic_stage_4[] = {
+static RE_UINT8 re_other_alphabetic_table_3[] = {
0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 255, 191, 182, 0, 0, 0,
0, 0, 255, 7, 0, 248, 255, 254, 0, 0, 1, 0, 0, 0, 192, 31,
158, 33, 0, 0, 0, 0, 2, 0, 0, 0, 255, 255, 192, 255, 1, 0,
@@ -10596,5620 +18401,7541 @@ static RE_UINT8 re_other_alphabetic_stage_4[] = {
0, 248, 127, 121, 0, 0, 192, 195, 157, 63, 30, 0, 252, 191, 0, 60,
0, 0, 192, 255, 255, 1, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0,
255, 15, 255, 1, 0, 0, 128, 15, 0, 0, 224, 127, 254, 255, 31, 0,
- 31, 0, 0, 0, 0, 0, 224, 255, 7, 0, 0, 0, 254, 51, 0, 0,
- 128, 255, 3, 0, 240, 255, 127, 0, 128, 255, 31, 0, 255, 255, 255, 255,
- 255, 3, 0, 0, 0, 0, 240, 15, 4, 8, 0, 0, 248, 0, 0, 0,
- 3, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 128, 192, 7, 0, 0,
- 128, 255, 7, 0, 0, 254, 127, 0, 8, 48, 0, 0, 0, 0, 0, 56,
- 0, 0, 157, 65, 0, 248, 32, 0, 248, 7, 0, 0, 0, 0, 0, 64,
- 0, 0, 192, 7, 110, 240, 0, 0, 240, 0, 0, 0, 0, 0, 0, 255,
- 63, 0, 0, 0, 0, 0, 255, 1, 0, 0, 248, 255, 0, 240, 159, 64,
- 59, 0, 0, 0, 0, 128, 63, 127, 0, 0, 0, 48, 0, 0, 255, 127,
- 1, 0, 0, 0, 0, 248, 63, 0, 0, 0, 0, 224, 255, 7, 0, 0,
- 0, 240, 255, 1, 0, 0, 254, 252, 16, 0, 0, 0, 254, 7, 0, 0,
+ 0, 0, 0, 128, 1, 0, 0, 0, 31, 0, 0, 0, 0, 0, 224, 255,
+ 7, 0, 0, 0, 254, 51, 0, 0, 128, 255, 3, 0, 240, 255, 127, 0,
+ 128, 255, 31, 0, 255, 255, 255, 255, 255, 3, 0, 0, 0, 0, 240, 15,
+ 4, 8, 0, 0, 248, 0, 0, 0, 3, 0, 0, 0, 47, 0, 0, 0,
+ 192, 7, 0, 0, 128, 255, 7, 0, 0, 254, 127, 0, 8, 48, 0, 0,
+ 0, 0, 0, 56, 0, 0, 157, 65, 0, 248, 32, 0, 248, 7, 0, 0,
+ 0, 0, 0, 64, 0, 0, 192, 7, 110, 240, 0, 0, 240, 0, 0, 0,
+ 0, 24, 0, 0, 0, 0, 0, 255, 63, 0, 0, 0, 0, 0, 255, 1,
+ 0, 0, 248, 255, 0, 192, 0, 0, 0, 240, 159, 64, 59, 0, 0, 0,
+ 0, 128, 63, 127, 0, 0, 0, 48, 0, 0, 255, 127, 0, 248, 63, 0,
+ 0, 0, 0, 224, 255, 7, 0, 0, 0, 240, 255, 1, 0, 0, 191, 25,
+ 5, 0, 0, 0, 0, 0, 254, 252, 16, 0, 0, 0, 254, 7, 0, 0,
0, 0, 224, 123, 0, 0, 254, 15, 0, 252, 255, 0, 0, 128, 127, 127,
0, 0, 252, 255, 255, 254, 127, 0, 0, 0, 126, 180, 139, 0, 0, 0,
0, 124, 123, 0, 0, 0, 120, 0, 0, 128, 254, 255, 255, 128, 7, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 128, 0, 0, 0, 255, 3, 255, 255,
-};
-
-/* Other_Alphabetic: 1280 bytes. */
-
-RE_UINT32 re_get_other_alphabetic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_other_alphabetic_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_other_alphabetic_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_other_alphabetic_stage_3[pos + f] << 5;
- pos += code;
- value = (re_other_alphabetic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Ideographic. */
-
-static RE_UINT8 re_ideographic_stage_1[] = {
- 0, 1, 2, 3, 4, 0, 0, 5, 0, 0, 0, 6, 7, 8, 0, 0,
- 3, 3, 3, 3, 3, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_ideographic_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 7, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 12, 13, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 15, 0, 0, 0, 0, 0, 0, 2, 16, 0, 0,
-};
-
-static RE_UINT8 re_ideographic_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0,
- 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 2, 2, 2, 2,
- 2, 5, 2, 6, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 7,
- 2, 2, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 2, 2,
- 2, 2, 2, 10, 0, 0, 0, 0, 2, 2, 2, 11, 2, 2, 2, 2,
- 2, 2, 2, 2, 12, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15,
- 16, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_ideographic_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 254, 3, 0, 7,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
- 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 3, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 0,
- 255, 255, 255, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 127, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 31, 0, 255, 255, 255, 63, 255, 255, 255, 255,
- 255, 255, 255, 255, 3, 0, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0,
- 255, 255, 255, 63, 0, 0, 0, 0,
-};
-
-/* Ideographic: 600 bytes. */
-
-RE_UINT32 re_get_ideographic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_ideographic_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_ideographic_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_ideographic_stage_3[pos + f] << 6;
- pos += code;
- value = (re_ideographic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Diacritic. */
-
-static RE_UINT8 re_diacritic_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_diacritic_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 1, 17, 1, 1, 1, 18, 1, 19, 20, 21, 22, 23, 1, 24,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 26, 1,
- 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 28, 29, 30, 31, 32, 33, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 35, 36,
- 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1, 39, 1, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 37, 50, 1, 51, 52, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 53, 54, 1, 1, 1, 55,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 56, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 54, 57, 1, 1, 1, 1, 1, 58, 59, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_diacritic_stage_3[] = {
- 0, 0, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 5, 5, 5, 5, 6, 7, 8, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 11, 12, 13, 0,
- 0, 0, 14, 0, 0, 0, 15, 16, 0, 4, 17, 0, 0, 18, 0, 19,
- 20, 0, 0, 0, 0, 0, 0, 21, 0, 22, 23, 24, 0, 22, 25, 0,
- 0, 22, 25, 0, 0, 22, 25, 26, 0, 22, 25, 0, 0, 0, 25, 0,
- 0, 0, 25, 0, 0, 22, 25, 0, 0, 27, 25, 0, 0, 0, 28, 0,
- 0, 0, 29, 0, 0, 30, 31, 0, 20, 32, 0, 0, 33, 0, 34, 0,
- 0, 35, 0, 36, 37, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, 43, 44, 0, 45, 0, 0,
- 0, 46, 0, 47, 0, 0, 4, 48, 0, 49, 5, 17, 0, 0, 50, 51,
- 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 55,
- 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 22,
- 0, 0, 0, 59, 60, 0, 0, 61, 5, 62, 0, 0, 63, 0, 0, 20,
- 0, 0, 0, 0, 0, 0, 43, 64, 0, 65, 66, 0, 0, 66, 2, 67,
- 0, 0, 0, 68, 0, 15, 69, 70, 0, 0, 71, 0, 0, 0, 0, 72,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 74, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0,
- 0, 80, 0, 66, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 0, 83,
- 0, 22, 25, 84, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 86, 0,
- 0, 0, 0, 0, 0, 15, 2, 0, 0, 15, 0, 0, 0, 46, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
- 0, 42, 88, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0,
- 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
- 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 98, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_diacritic_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 129, 144, 1,
- 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 224, 7, 0, 48, 4,
- 48, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 2, 0, 0, 254, 255,
- 251, 255, 255, 191, 22, 0, 0, 0, 0, 248, 135, 1, 0, 0, 0, 128,
- 97, 28, 0, 0, 255, 7, 0, 0, 192, 255, 1, 0, 0, 248, 63, 0,
- 0, 0, 0, 3, 248, 255, 255, 127, 0, 0, 0, 16, 0, 32, 30, 0,
- 0, 0, 2, 0, 0, 32, 0, 0, 0, 0, 0, 224, 0, 0, 0, 24,
- 0, 4, 0, 0, 128, 95, 0, 0, 0, 0, 0, 4, 0, 31, 0, 0,
- 0, 0, 160, 194, 220, 0, 0, 0, 64, 0, 0, 0, 0, 0, 128, 6,
- 24, 62, 0, 0, 128, 191, 0, 12, 0, 254, 15, 32, 0, 0, 0, 14,
- 0, 0, 224, 159, 0, 0, 255, 63, 0, 0, 16, 0, 16, 0, 0, 0,
- 0, 248, 15, 0, 0, 12, 0, 0, 0, 0, 192, 0, 0, 0, 0, 63,
- 255, 33, 144, 3, 0, 240, 255, 255, 240, 255, 0, 0, 0, 0, 224, 227,
- 0, 0, 0, 160, 3, 224, 0, 224, 0, 224, 0, 96, 0, 128, 3, 0,
- 0, 128, 0, 0, 0, 252, 0, 0, 0, 0, 0, 30, 0, 128, 0, 176,
- 0, 0, 0, 48, 0, 0, 3, 0, 3, 0, 0, 0, 0, 7, 0, 0,
- 255, 255, 3, 0, 0, 120, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0,
- 0, 0, 0, 56, 7, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 248,
- 0, 48, 0, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 0, 192,
- 8, 0, 0, 0, 96, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 24, 0, 1, 28, 0, 0, 0, 0, 96, 0, 0, 6, 0, 0,
- 192, 31, 31, 0, 68, 0, 0, 0, 12, 0, 0, 0, 0, 8, 0, 0,
- 128, 0, 0, 0, 52, 0, 0, 0, 0, 0, 128, 0, 0, 0, 31, 0,
- 0, 0, 127, 0, 0, 128, 255, 255, 128, 227, 7, 248, 231, 15, 0, 0,
- 0, 60, 0, 0, 0, 240, 0, 0, 112, 7, 0, 0,
-};
-
-/* Diacritic: 1300 bytes. */
-
-RE_UINT32 re_get_diacritic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_diacritic_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_diacritic_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_diacritic_stage_3[pos + f] << 5;
- pos += code;
- value = (re_diacritic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Extender. */
-
-static RE_UINT8 re_extender_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 3, 0, 127, 255, 255, 249, 219, 7, 0, 0, 128, 0, 0, 0,
+ 255, 3, 255, 255
};
-static RE_UINT8 re_extender_stage_2[] = {
- 0, 1, 2, 3, 2, 2, 2, 4, 2, 2, 2, 2, 5, 6, 7, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 9, 2, 2, 10, 11, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 15, 2, 2, 16, 2, 2,
- 2, 2, 2, 2, 2, 17, 2, 18, 2, 2, 2, 2, 2, 2, 2, 2,
- 19, 2, 2, 2, 20, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-};
+RE_UINT32 re_get_other_alphabetic(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_extender_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4,
- 0, 5, 0, 5, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0,
- 11, 0, 12, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
- 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_extender_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 32, 0, 0, 0, 0, 0, 62, 0,
- 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 128, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 32, 0, 0, 24, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 48, 112, 0, 0, 0, 0, 0, 0, 0,
-};
+ v = re_other_alphabetic_table_1[field_2];
+ v = re_other_alphabetic_table_2[(v << 5) | field_1];
+ v = re_other_alphabetic_table_3[(v << 2) | field_0];
-/* Extender: 640 bytes. */
-
-RE_UINT32 re_get_extender(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_extender_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_extender_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_extender_stage_3[pos + f] << 6;
- pos += code;
- value = (re_extender_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Other_Lowercase. */
-
-static RE_UINT8 re_other_lowercase_stage_1[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Other_Default_Ignorable_Code_Point. */
+static RE_UINT8 re_other_default_ignorable_code_point_table_1[] = {
+ 0, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 5, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_other_lowercase_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 4, 2, 5, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 7, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_other_lowercase_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
- 0, 8, 9, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 15,
- 0, 0, 0, 0, 0, 16, 0, 0,
-};
-
-static RE_UINT8 re_other_lowercase_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4,
- 0, 0, 0, 0, 0, 0, 255, 1, 3, 0, 0, 0, 31, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 240, 255, 255,
- 255, 255, 255, 255, 255, 7, 0, 1, 0, 0, 0, 248, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 2, 128, 0, 0, 255, 31, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 240, 0, 0, 0, 0,
-};
-
-/* Other_Lowercase: 372 bytes. */
-
-RE_UINT32 re_get_other_lowercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_lowercase_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_other_lowercase_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_lowercase_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_lowercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Uppercase. */
-
-static RE_UINT8 re_other_uppercase_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_other_uppercase_stage_2[] = {
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
-};
-
-static RE_UINT8 re_other_uppercase_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 7, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_other_uppercase_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0,
- 0, 0, 0, 0, 0, 0, 192, 255, 255, 255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 255, 255, 255, 3, 255, 255, 255, 3, 255, 255,
- 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_other_default_ignorable_code_point_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 7,
+ 8, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-/* Other_Uppercase: 210 bytes. */
-
-RE_UINT32 re_get_other_uppercase(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_other_uppercase_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_other_uppercase_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_other_uppercase_stage_3[pos + f] << 7;
- pos += code;
- value = (re_other_uppercase_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Noncharacter_Code_Point. */
-
-static RE_UINT8 re_noncharacter_code_point_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1,
+static RE_UINT8 re_other_default_ignorable_code_point_table_3[] = {
+ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 128, 1, 0, 0, 0,
+ 0, 0, 48, 0, 32, 0, 0, 0, 16, 0, 0, 0, 0, 0, 255, 1,
+ 253, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255
};
-static RE_UINT8 re_noncharacter_code_point_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
-};
+RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_noncharacter_code_point_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_noncharacter_code_point_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192,
-};
+ v = re_other_default_ignorable_code_point_table_1[field_2];
+ v = re_other_default_ignorable_code_point_table_2[(v << 5) | field_1];
+ v = re_other_default_ignorable_code_point_table_3[(v << 2) | field_0];
-/* Noncharacter_Code_Point: 177 bytes. */
-
-RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 16;
- code = ch ^ (f << 16);
- pos = (RE_UINT32)re_noncharacter_code_point_stage_1[f] << 5;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_noncharacter_code_point_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_noncharacter_code_point_stage_3[pos + f] << 7;
- pos += code;
- value = (re_noncharacter_code_point_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
/* Other_Grapheme_Extend. */
-
-static RE_UINT8 re_other_grapheme_extend_stage_1[] = {
- 0, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_other_grapheme_extend_stage_2[] = {
+static RE_UINT8 re_other_grapheme_extend_table_1[] = {
0, 0, 1, 2, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_grapheme_extend_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,
- 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
- 11, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_other_grapheme_extend_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 2, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_other_grapheme_extend_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 96, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 192, 7, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+static RE_UINT8 re_other_grapheme_extend_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 128, 0, 4, 0, 96, 0,
+ 0, 128, 0, 128, 0, 0, 32, 0, 0, 16, 0, 0, 0, 192, 0, 0,
+ 0, 0, 0, 192, 0, 0, 1, 32, 0, 128, 0, 0, 0, 0, 1, 0,
+ 32, 192, 7, 0, 255, 255, 255, 255
};
-/* Other_Grapheme_Extend: 444 bytes. */
-
-RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_grapheme_extend_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_grapheme_extend_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_other_grapheme_extend_stage_3[pos + f] << 7;
- pos += code;
- value = (re_other_grapheme_extend_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_other_grapheme_extend_table_1[field_2];
+ v = re_other_grapheme_extend_table_2[(v << 5) | field_1];
+ v = re_other_grapheme_extend_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* IDS_Binary_Operator. */
+/* Other_ID_Continue. */
+RE_UINT32 re_get_other_id_continue(RE_UINT32 codepoint) {
+ if (codepoint == 0xB7)
+ return 1;
+ if (codepoint == 0x0387)
+ return 1;
+ if (0x1369 <= codepoint && codepoint <= 0x1371)
+ return 1;
+ if (codepoint == 0x19DA)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_ids_binary_operator_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Other_ID_Start. */
+RE_UINT32 re_get_other_id_start(RE_UINT32 codepoint) {
+ if (0x1885 <= codepoint && codepoint <= 0x1886)
+ return 1;
+ if (codepoint == 0x2118)
+ return 1;
+ if (codepoint == 0x212E)
+ return 1;
+ if (0x309B <= codepoint && codepoint <= 0x309C)
+ return 1;
+
+ return 0;
+}
+
+/* Other_Lowercase. */
+static RE_UINT8 re_other_lowercase_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_ids_binary_operator_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_other_lowercase_table_2[] = {
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 5, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_ids_binary_operator_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+static RE_UINT8 re_other_lowercase_table_3[] = {
+ 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 255, 1, 3, 0, 0, 0,
+ 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 4, 0, 240, 255, 255,
+ 255, 255, 255, 255, 255, 7, 0, 1, 0, 0, 0, 248, 0, 0, 2, 128,
+ 0, 0, 255, 31, 0, 0, 255, 255, 255, 3, 0, 0, 0, 0, 0, 48,
+ 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 240
};
-static RE_UINT8 re_ids_binary_operator_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 15,
-};
+RE_UINT32 re_get_other_lowercase(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* IDS_Binary_Operator: 130 bytes. */
-
-RE_UINT32 re_get_ids_binary_operator(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_ids_binary_operator_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_ids_binary_operator_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_ids_binary_operator_stage_3[pos + f] << 7;
- pos += code;
- value = (re_ids_binary_operator_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* IDS_Trinary_Operator. */
+ v = re_other_lowercase_table_1[field_2];
+ v = re_other_lowercase_table_2[(v << 5) | field_1];
+ v = re_other_lowercase_table_3[(v << 2) | field_0];
-static RE_UINT8 re_ids_trinary_operator_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ return (v >> offset) & 0x1;
+}
+
+/* Other_Math. */
+static RE_UINT8 re_other_math_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_ids_trinary_operator_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_ids_trinary_operator_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_ids_trinary_operator_stage_4[] = {
+static RE_UINT8 re_other_math_table_2[] = {
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
-};
-
-/* IDS_Trinary_Operator: 130 bytes. */
-
-RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_ids_trinary_operator_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_ids_trinary_operator_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_ids_trinary_operator_stage_3[pos + f] << 7;
- pos += code;
- value = (re_ids_trinary_operator_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Radical. */
-
-static RE_UINT8 re_radical_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 6, 7, 8, 0, 9, 10, 11, 12, 13, 0, 14, 15, 16, 17,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 20, 21,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 24,
+ 25, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 31,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 34, 34, 35, 34, 36, 37, 38, 34, 39, 40, 41, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 42, 43, 44, 35, 35, 45, 45, 46, 46, 47, 34,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 48, 49, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_other_math_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 39, 0, 0, 0, 51, 0,
+ 0, 0, 64, 0, 0, 0, 28, 0, 1, 0, 0, 0, 30, 0, 0, 96,
+ 0, 96, 0, 0, 0, 0, 255, 31, 98, 248, 0, 0, 132, 252, 47, 62,
+ 16, 179, 251, 241, 224, 3, 0, 0, 0, 0, 224, 243, 182, 62, 195, 240,
+ 255, 63, 235, 47, 48, 0, 0, 0, 0, 15, 0, 0, 0, 0, 176, 0,
+ 0, 0, 1, 0, 4, 0, 0, 0, 3, 192, 127, 240, 193, 140, 15, 0,
+ 148, 31, 0, 0, 96, 0, 0, 0, 5, 0, 0, 0, 15, 96, 0, 0,
+ 192, 255, 0, 0, 248, 255, 255, 1, 0, 0, 0, 15, 0, 0, 0, 48,
+ 10, 1, 0, 0, 0, 0, 0, 80, 255, 255, 255, 255, 255, 255, 223, 255,
+ 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
+ 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
+ 255, 255, 255, 247, 255, 127, 255, 255, 255, 253, 255, 255, 247, 207, 255, 255,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15
};
-static RE_UINT8 re_radical_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_other_math(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_radical_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_radical_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 0, 0,
-};
+ v = re_other_math_table_1[field_2];
+ v = re_other_math_table_2[(v << 5) | field_1];
+ v = re_other_math_table_3[(v << 2) | field_0];
-/* Radical: 162 bytes. */
-
-RE_UINT32 re_get_radical(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_radical_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_radical_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_radical_stage_3[pos + f] << 7;
- pos += code;
- value = (re_radical_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Unified_Ideograph. */
-
-static RE_UINT8 re_unified_ideograph_stage_1[] = {
- 0, 1, 2, 2, 3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2,
-};
+/* Other_Uppercase. */
+RE_UINT32 re_get_other_uppercase(RE_UINT32 codepoint) {
+ if (0x2160 <= codepoint && codepoint <= 0x216F)
+ return 1;
+ if (0x24B6 <= codepoint && codepoint <= 0x24CF)
+ return 1;
+ if (0x01F130 <= codepoint && codepoint <= 0x01F149)
+ return 1;
+ if (0x01F150 <= codepoint && codepoint <= 0x01F169)
+ return 1;
+ if (0x01F170 <= codepoint && codepoint <= 0x01F189)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_unified_ideograph_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* Pattern_Syntax. */
+static RE_UINT8 re_pattern_syntax_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 6, 7, 1,
- 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_unified_ideograph_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1,
- 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9,
-};
-
-static RE_UINT8 re_unified_ideograph_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 63, 0, 255, 255, 255, 255, 255, 255, 0, 0,
- 0, 192, 26, 128, 154, 3, 0, 0, 255, 255, 127, 0, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 31, 0, 255, 255, 255, 63, 255, 255, 255, 255,
- 255, 255, 255, 255, 3, 0, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0,
-};
-
-/* Unified_Ideograph: 434 bytes. */
-
-RE_UINT32 re_get_unified_ideograph(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_unified_ideograph_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_unified_ideograph_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_unified_ideograph_stage_3[pos + f] << 6;
- pos += code;
- value = (re_unified_ideograph_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_Default_Ignorable_Code_Point. */
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_2[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 7, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 7, 8, 0, 9, 9, 0, 0, 0, 10,
- 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_other_default_ignorable_code_point_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
- 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1,
- 253, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 255, 255,
-};
-
-/* Other_Default_Ignorable_Code_Point: 356 bytes. */
-
-RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_other_default_ignorable_code_point_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_other_default_ignorable_code_point_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_default_ignorable_code_point_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_default_ignorable_code_point_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Deprecated. */
-
-static RE_UINT8 re_deprecated_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_deprecated_stage_2[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1,
- 5, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_deprecated_stage_3[] = {
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_deprecated_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 128, 2,
- 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Deprecated: 292 bytes. */
-
-RE_UINT32 re_get_deprecated(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_deprecated_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_deprecated_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_deprecated_stage_3[pos + f] << 6;
- pos += code;
- value = (re_deprecated_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Soft_Dotted. */
-
-static RE_UINT8 re_soft_dotted_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_soft_dotted_stage_2[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5,
- 6, 3, 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 9, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_soft_dotted_stage_3[] = {
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_pattern_syntax_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 0,
- 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 18, 0, 19, 20, 0, 21, 0, 22, 23, 0, 24, 0, 17, 18,
- 0, 19, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_soft_dotted_stage_4[] = {
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 128, 0, 0, 0, 2, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 32, 0, 0, 4, 0, 0, 0, 8, 0,
- 0, 0, 64, 1, 4, 0, 0, 0, 0, 0, 64, 0, 16, 1, 0, 0,
- 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0,
- 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, 192, 0, 0, 12, 0, 0,
- 0, 0, 0, 192, 0, 0, 12, 0, 192, 0, 0, 0, 0, 0, 0, 12,
- 0, 192, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Soft_Dotted: 424 bytes. */
-
-RE_UINT32 re_get_soft_dotted(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_soft_dotted_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_soft_dotted_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_soft_dotted_stage_3[pos + f] << 5;
- pos += code;
- value = (re_soft_dotted_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Logical_Order_Exception. */
-
-static RE_UINT8 re_logical_order_exception_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1,
+static RE_UINT8 re_pattern_syntax_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 120, 254, 90, 67, 136,
+ 0, 0, 128, 0, 0, 0, 255, 255, 255, 0, 255, 127, 254, 255, 239, 127,
+ 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 240, 255, 14, 255, 255, 255,
+ 1, 0, 1, 0, 0, 0, 0, 192, 96, 0, 0, 0
};
-static RE_UINT8 re_logical_order_exception_stage_2[] = {
- 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_pattern_syntax(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_logical_order_exception_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_logical_order_exception_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 224, 4, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 26, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ v = re_pattern_syntax_table_1[field_2];
+ v = re_pattern_syntax_table_2[(v << 5) | field_1];
+ v = re_pattern_syntax_table_3[(v << 2) | field_0];
-/* Logical_Order_Exception: 209 bytes. */
-
-RE_UINT32 re_get_logical_order_exception(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 16;
- code = ch ^ (f << 16);
- pos = (RE_UINT32)re_logical_order_exception_stage_1[f] << 5;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_logical_order_exception_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_logical_order_exception_stage_3[pos + f] << 7;
- pos += code;
- value = (re_logical_order_exception_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Other_ID_Start. */
-
-static RE_UINT8 re_other_id_start_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_other_id_start_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_other_id_start_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+/* Pattern_White_Space. */
+RE_UINT32 re_get_pattern_white_space(RE_UINT32 codepoint) {
+ if (0x09 <= codepoint && codepoint <= 0x0D)
+ return 1;
+ if (codepoint == 0x20)
+ return 1;
+ if (codepoint == 0x85)
+ return 1;
+ if (0x200E <= codepoint && codepoint <= 0x200F)
+ return 1;
+ if (0x2028 <= codepoint && codepoint <= 0x2029)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_other_id_start_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 64, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+/* Posix_AlNum. */
+static RE_UINT8 re_posix_alnum_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 10, 39, 10, 10, 40, 10, 41, 42, 43, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 44, 13, 13, 13, 45, 46, 13,
+ 13, 13, 13, 47, 13, 13, 13, 13, 13, 13, 48, 10, 10, 10, 49, 10,
+ 13, 13, 13, 13, 50, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-/* Other_ID_Start: 194 bytes. */
-
-RE_UINT32 re_get_other_id_start(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_other_id_start_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_id_start_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_id_start_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_id_start_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Other_ID_Continue. */
-
-static RE_UINT8 re_other_id_continue_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
+static RE_UINT8 re_posix_alnum_table_2[] = {
+ 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12,
+ 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 5, 16, 17, 18, 19,
+ 20, 5, 21, 22, 5, 5, 23, 24, 25, 5, 26, 5, 5, 27, 28, 29,
+ 30, 31, 32, 33, 0, 34, 35, 36, 5, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 49, 53, 54, 55, 56, 57, 0,
+ 58, 59, 60, 61, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 0, 76, 77, 78, 0, 79, 0, 80, 81, 82, 83, 0, 0,
+ 5, 84, 25, 5, 85, 5, 86, 87, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 88, 5, 89, 90, 91, 5, 92, 5, 74, 0, 93, 5, 5, 94,
+ 73, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 95, 2, 5, 5, 96, 97, 98, 98, 99, 5, 100, 101, 0,
+ 0, 5, 5, 32, 5, 102, 5, 103, 104, 105, 25, 106, 5, 107, 108, 0,
+ 109, 5, 104, 110, 0, 111, 79, 0, 5, 112, 113, 0, 5, 114, 5, 115,
+ 5, 116, 117, 118, 119, 66, 0, 120, 5, 5, 5, 5, 5, 5, 0, 121,
+ 5, 5, 5, 5, 5, 5, 5, 5, 94, 5, 122, 118, 5, 123, 124, 125,
+ 0, 0, 0, 126, 127, 0, 0, 0, 128, 129, 130, 5, 16, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 131, 5, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 132, 104, 5, 5, 5, 5, 133, 5, 86, 5, 134, 116, 135, 135, 5,
+ 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 138, 73, 5, 139, 73, 5, 87, 140, 14, 5, 5, 141, 5, 0, 25,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 83,
+ 5, 5, 5, 5, 31, 0, 25, 118, 5, 5, 5, 5, 5, 5, 5, 5,
+ 142, 143, 5, 144, 5, 5, 5, 93, 145, 146, 5, 5, 147, 5, 148, 149,
+ 150, 151, 5, 98, 5, 5, 152, 153, 28, 102, 154, 83, 5, 155, 136, 156,
+ 5, 116, 157, 158, 5, 104, 159, 160, 161, 162, 87, 163, 5, 5, 5, 33,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 164, 165, 109,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 166, 5, 5, 167, 0, 168, 169, 170, 5, 5, 27, 171, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 118, 25, 5, 172, 5, 151, 173,
+ 0, 0, 0, 174, 5, 5, 5, 83, 0, 2, 2, 175, 5, 104, 176, 0,
+ 177, 178, 179, 0, 5, 5, 5, 74, 0, 0, 5, 180, 0, 0, 0, 0,
+ 0, 0, 0, 0, 83, 5, 181, 0, 5, 26, 102, 74, 118, 5, 182, 0,
+ 5, 5, 5, 5, 118, 25, 183, 109, 5, 184, 5, 61, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 116, 103, 151, 0, 0, 0, 0,
+ 185, 186, 103, 116, 104, 0, 0, 187, 103, 167, 0, 0, 5, 188, 0, 0,
+ 189, 103, 0, 83, 83, 0, 80, 190, 5, 103, 103, 154, 27, 0, 0, 0,
+ 5, 5, 16, 0, 5, 154, 5, 154, 5, 151, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 191, 0, 0, 83, 192, 193, 0, 0, 25, 190, 116,
+ 5, 5, 193, 0, 146, 32, 25, 16, 5, 154, 194, 195, 5, 5, 196, 0,
+ 197, 198, 0, 0, 199, 119, 5, 16, 40, 49, 200, 61, 0, 0, 0, 0,
+ 5, 5, 201, 202, 5, 5, 203, 0, 0, 0, 0, 0, 5, 204, 205, 0,
+ 5, 104, 206, 0, 5, 207, 0, 0, 66, 33, 0, 0, 0, 0, 0, 0,
+ 5, 32, 0, 0, 0, 5, 5, 208, 209, 210, 211, 0, 0, 212, 30, 213,
+ 5, 214, 25, 5, 215, 0, 5, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 216, 217, 79, 218, 172, 219, 0, 0, 220, 221, 222, 223, 224, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 225, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 167, 0, 0, 0,
+ 5, 5, 5, 141, 5, 5, 5, 5, 5, 5, 61, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 32, 104, 0, 0, 0, 25, 157, 5, 93, 61, 227, 93, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 228, 5, 229, 0, 0, 230,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 231,
+ 5, 5, 5, 5, 5, 5, 103, 0, 16, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 104, 0, 232, 194, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 34, 5, 235, 236, 237, 5, 238, 239, 240, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 241, 242, 87, 34, 34, 132, 132, 216, 216, 243, 0,
+ 244, 245, 0, 0, 0, 0, 0, 0, 5, 246, 247, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 248, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 190, 0, 5, 5, 249, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 237, 250, 251, 252, 253, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 163, 163, 108, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 118, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 180, 5, 5, 5, 5, 5, 5,
+ 118, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 255, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 79,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 33, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_posix_alnum_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4,
+ 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0,
+ 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31,
+ 254, 225, 0, 156, 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0,
+ 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0,
+ 255, 255, 255, 1, 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 240, 255,
+ 248, 3, 255, 255, 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255,
+ 239, 159, 249, 255, 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16,
+ 238, 135, 249, 255, 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0,
+ 238, 191, 251, 255, 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30,
+ 238, 159, 249, 255, 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214,
+ 24, 199, 255, 195, 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227,
+ 223, 29, 96, 7, 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64,
+ 15, 0, 6, 0, 255, 223, 253, 255, 255, 255, 255, 231, 223, 93, 240, 128,
+ 15, 0, 0, 252, 238, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255,
+ 0, 0, 12, 0, 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 0, 0,
+ 214, 247, 255, 255, 175, 255, 255, 59, 95, 32, 0, 240, 1, 0, 0, 0,
+ 255, 254, 255, 255, 255, 31, 254, 255, 3, 255, 255, 254, 255, 255, 255, 31,
+ 255, 255, 127, 249, 255, 255, 0, 60, 191, 32, 255, 255, 255, 255, 255, 247,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255,
+ 255, 199, 255, 1, 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0,
+ 255, 255, 207, 255, 255, 1, 128, 16, 255, 7, 255, 255, 255, 255, 63, 0,
+ 255, 255, 255, 127, 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255,
+ 255, 3, 0, 0, 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 128,
+ 255, 255, 239, 255, 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0,
+ 255, 255, 127, 0, 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255,
+ 0, 222, 111, 4, 128, 255, 31, 0, 63, 63, 255, 170, 255, 255, 223, 95,
+ 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31,
+ 132, 252, 47, 62, 80, 189, 255, 243, 224, 67, 0, 0, 0, 0, 192, 255,
+ 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127,
+ 0, 128, 0, 0, 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224,
+ 224, 255, 255, 255, 255, 127, 0, 0, 255, 31, 255, 255, 0, 12, 0, 0,
+ 255, 127, 240, 143, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 191, 255, 255, 255, 255, 0, 0, 0,
+ 47, 0, 0, 0, 0, 0, 252, 232, 255, 255, 7, 0, 255, 255, 247, 255,
+ 255, 255, 0, 124, 255, 63, 0, 0, 255, 255, 127, 252, 5, 0, 0, 56,
+ 255, 255, 60, 0, 126, 126, 126, 0, 127, 127, 255, 255, 255, 3, 255, 255,
+ 15, 0, 255, 255, 127, 248, 255, 255, 255, 63, 255, 255, 255, 255, 255, 3,
+ 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255,
+ 255, 255, 252, 255, 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255,
+ 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63,
+ 255, 255, 31, 0, 255, 255, 1, 0, 15, 255, 62, 0, 255, 255, 15, 255,
+ 255, 0, 255, 255, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
+ 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0, 255, 27, 3, 0,
+ 128, 0, 255, 255, 63, 0, 0, 0, 240, 0, 255, 255, 255, 255, 71, 0,
+ 30, 192, 0, 20, 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191,
+ 159, 25, 129, 224, 187, 7, 0, 128, 3, 0, 0, 0, 179, 0, 0, 0,
+ 255, 255, 63, 127, 0, 0, 0, 63, 17, 0, 0, 0, 255, 255, 63, 1,
+ 0, 0, 0, 128, 127, 242, 111, 255, 255, 255, 191, 153, 7, 0, 0, 0,
+ 255, 252, 255, 255, 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32,
+ 255, 253, 255, 255, 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255,
+ 255, 127, 123, 1, 0, 0, 1, 0, 127, 0, 0, 0, 248, 255, 255, 224,
+ 255, 135, 255, 255, 255, 128, 255, 255, 11, 0, 3, 0, 255, 255, 255, 0,
+ 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 255, 223,
+ 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
+ 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, 247, 15, 0, 0,
+ 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63, 0, 64, 0, 0,
+ 255, 15, 0, 0, 143, 8, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-static RE_UINT8 re_other_id_continue_stage_2[] = {
- 0, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_posix_alnum(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_other_id_continue_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_other_id_continue_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0,
- 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 3, 0,
- 0, 0, 0, 4, 0, 0, 0, 0,
-};
+ v = re_posix_alnum_table_1[field_2];
+ v = re_posix_alnum_table_2[(v << 5) | field_1];
+ v = re_posix_alnum_table_3[(v << 2) | field_0];
-/* Other_ID_Continue: 202 bytes. */
-
-RE_UINT32 re_get_other_id_continue(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_other_id_continue_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_other_id_continue_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_other_id_continue_stage_3[pos + f] << 6;
- pos += code;
- value = (re_other_id_continue_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Sentence_Terminal. */
+/* Posix_Digit. */
+RE_UINT32 re_get_posix_digit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
-static RE_UINT8 re_sentence_terminal_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 7, 8, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
+ return 0;
+}
-static RE_UINT8 re_sentence_terminal_stage_2[] = {
- 0, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 1,
- 7, 1, 1, 8, 1, 1, 9, 10, 11, 12, 13, 14, 15, 1, 1, 1,
- 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 1,
- 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 19, 1, 20, 1, 21, 22, 23, 24, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 28,
- 29, 30, 31, 1, 32, 33, 34, 35, 1, 1, 36, 1, 34, 1, 37, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 39, 1, 1, 40, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1,
+/* Posix_Punct. */
+static RE_UINT8 re_posix_punct_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 13, 27, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 28, 29, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 30,
+ 13, 13, 13, 13, 31, 32, 33, 13, 34, 13, 35, 36, 37, 38, 39, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13
};
-static RE_UINT8 re_sentence_terminal_stage_3[] = {
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0,
- 5, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
- 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 3, 0, 0, 0, 0,
- 0, 17, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
- 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 22, 0,
- 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 28,
- 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0,
- 1, 0, 0, 31, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 3, 34, 0,
- 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 2, 0, 0,
- 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
- 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
- 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,
- 0, 0, 0, 22, 0, 0, 0, 44, 0, 43, 45, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0,
- 0, 0, 0, 0, 47, 0, 0, 0,
-};
+static RE_UINT8 re_posix_punct_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 8, 9, 0, 0, 10,
+ 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 13, 14, 15, 16,
+ 17, 0, 0, 18, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 22,
+ 0, 23, 14, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25,
+ 0, 0, 0, 10, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28,
+ 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 31, 32, 0, 0, 0, 33,
+ 0, 34, 35, 0, 0, 0, 0, 0, 36, 37, 0, 0, 38, 39, 40, 0,
+ 0, 0, 41, 0, 39, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 0, 0, 0,
+ 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 46, 47, 0, 0, 48, 0, 49, 0, 0, 0, 0, 50, 0,
+ 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 39, 53,
+ 39, 0, 0, 0, 0, 54, 0, 0, 0, 0, 12, 55, 0, 0, 0, 56,
+ 0, 57, 0, 39, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61,
+ 62, 63, 64, 65, 66, 53, 0, 0, 67, 68, 69, 0, 70, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 71, 51, 0, 56, 72, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 72, 73, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 74, 75, 53, 53, 53,
+ 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 27, 0, 0, 0, 0,
+ 53, 77, 78, 0, 79, 53, 53, 80, 53, 53, 53, 53, 53, 53, 72, 81,
+ 82, 83, 0, 0, 47, 45, 0, 42, 0, 0, 0, 0, 84, 0, 53, 85,
+ 64, 86, 87, 53, 86, 88, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 53, 71, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 89, 0, 0, 90, 0, 0, 0, 91, 92, 93, 0, 0, 94, 0, 0, 0,
+ 0, 95, 0, 96, 0, 0, 97, 98, 0, 97, 34, 0, 0, 0, 99, 0,
+ 0, 0, 56, 100, 0, 0, 39, 26, 0, 0, 42, 101, 0, 0, 0, 102,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 104, 93, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 105,
+ 44, 62, 106, 107, 0, 0, 0, 0, 1, 2, 2, 108, 0, 0, 0, 109,
+ 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 0, 112, 113, 45, 62, 114,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 27, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 115, 0, 0, 0, 0, 34, 34, 0, 0, 0, 0, 0, 0,
+ 0, 0, 116, 34, 0, 0, 117, 118, 0, 112, 0, 0, 119, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0,
+ 0, 0, 122, 0, 0, 123, 93, 0, 0, 0, 85, 124, 0, 0, 125, 0,
+ 0, 126, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0,
+ 0, 0, 130, 131, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0,
+ 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 11,
+ 0, 34, 71, 0, 133, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 134, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 135, 136,
+ 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 97, 0, 0, 0, 138, 0, 111, 139, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 72, 53, 142, 53, 143, 144, 145, 53, 43,
+ 53, 53, 146, 0, 0, 0, 0, 0, 53, 53, 92, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 147, 42, 138, 138, 31, 31, 103, 103, 148, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 0, 140, 0, 149, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 153, 53, 53, 80, 154, 155, 72, 156, 157, 41, 41, 86, 21, 0, 158,
+ 159, 160, 161, 108, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 162, 163, 53, 53, 53, 80, 53, 53, 164, 165,
+ 153, 53, 166, 53, 63, 167, 0, 0, 53, 53, 53, 168, 53, 53, 169, 53,
+ 53, 53, 80, 170, 171, 172, 173, 0, 53, 53, 53, 53, 106, 53, 51, 0
+};
+
+static RE_UINT8 re_posix_punct_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 248, 1, 0, 0, 120,
+ 254, 219, 211, 137, 0, 0, 128, 0, 60, 0, 252, 255, 224, 175, 255, 255,
+ 0, 0, 32, 64, 176, 0, 0, 0, 0, 0, 64, 0, 4, 0, 0, 0,
+ 0, 0, 0, 252, 0, 230, 0, 0, 0, 0, 0, 64, 73, 0, 0, 0,
+ 0, 0, 24, 0, 192, 255, 0, 200, 0, 60, 0, 0, 0, 0, 16, 64,
+ 0, 2, 0, 96, 255, 63, 0, 0, 0, 0, 192, 195, 0, 0, 255, 127,
+ 48, 0, 1, 0, 0, 0, 12, 44, 0, 0, 3, 0, 0, 0, 1, 0,
+ 0, 0, 248, 7, 0, 0, 128, 128, 16, 0, 0, 0, 0, 128, 0, 0,
+ 0, 0, 0, 2, 0, 0, 16, 0, 0, 0, 0, 128, 0, 128, 0, 12,
+ 254, 255, 255, 252, 0, 0, 80, 61, 32, 0, 0, 0, 0, 0, 0, 192,
+ 191, 223, 255, 7, 0, 252, 0, 0, 0, 0, 0, 8, 255, 1, 0, 0,
+ 0, 0, 255, 3, 1, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 24,
+ 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 15, 255, 7, 0, 0,
+ 49, 0, 0, 0, 255, 255, 255, 255, 127, 63, 0, 0, 255, 7, 240, 31,
+ 0, 0, 0, 240, 0, 0, 0, 248, 255, 0, 8, 0, 0, 0, 0, 160,
+ 3, 224, 0, 224, 0, 224, 0, 96, 0, 0, 255, 255, 255, 0, 255, 255,
+ 255, 255, 255, 127, 0, 0, 0, 124, 0, 124, 0, 0, 123, 3, 208, 193,
+ 175, 66, 0, 12, 31, 188, 0, 0, 0, 12, 255, 255, 127, 0, 0, 0,
+ 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 207, 255, 255, 255, 191, 255,
+ 224, 7, 0, 222, 255, 127, 255, 255, 255, 255, 7, 0, 255, 255, 255, 251,
+ 255, 255, 15, 0, 0, 0, 255, 15, 30, 255, 255, 255, 1, 0, 193, 224,
+ 0, 0, 195, 255, 15, 0, 0, 0, 0, 252, 255, 255, 255, 0, 1, 0,
+ 255, 255, 1, 0, 0, 224, 0, 0, 0, 0, 8, 64, 0, 0, 252, 0,
+ 255, 255, 127, 0, 3, 0, 0, 0, 0, 6, 0, 0, 0, 15, 192, 3,
+ 0, 0, 240, 0, 0, 192, 0, 0, 0, 0, 0, 23, 254, 63, 0, 192,
+ 0, 0, 128, 3, 0, 12, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0,
+ 0, 0, 252, 255, 0, 0, 0, 48, 255, 255, 247, 255, 127, 15, 0, 0,
+ 63, 0, 0, 0, 127, 127, 0, 48, 7, 0, 0, 0, 0, 0, 128, 255,
+ 0, 0, 0, 254, 255, 115, 255, 31, 255, 255, 255, 31, 0, 0, 128, 1,
+ 0, 0, 255, 1, 0, 1, 0, 0, 0, 0, 127, 0, 0, 0, 0, 30,
+ 0, 32, 0, 0, 0, 0, 224, 3, 128, 63, 0, 0, 0, 0, 0, 216,
+ 0, 0, 48, 0, 224, 33, 0, 232, 0, 0, 0, 63, 0, 248, 0, 44,
+ 64, 0, 0, 0, 254, 255, 255, 0, 14, 0, 0, 0, 255, 31, 0, 0,
+ 112, 0, 0, 0, 0, 0, 0, 220, 62, 0, 0, 0, 0, 0, 224, 255,
+ 255, 255, 3, 128, 0, 0, 31, 0, 0, 0, 32, 0, 48, 0, 0, 0,
+ 0, 0, 128, 7, 0, 0, 0, 144, 127, 254, 255, 255, 31, 28, 0, 0,
+ 24, 240, 255, 255, 255, 195, 255, 255, 35, 0, 0, 0, 2, 0, 0, 8,
+ 8, 0, 0, 0, 0, 224, 223, 255, 239, 15, 0, 0, 0, 16, 1, 0,
+ 0, 64, 0, 0, 255, 15, 255, 255, 255, 127, 254, 255, 254, 255, 254, 255,
+ 0, 224, 255, 255, 255, 255, 0, 0, 192, 255, 255, 255, 7, 0, 255, 255,
+ 255, 255, 255, 15, 255, 1, 3, 0, 255, 255, 255, 0, 255, 31, 255, 31,
+ 255, 255, 255, 1, 255, 15, 0, 0, 255, 0, 255, 3, 255, 63, 3, 0,
+ 255, 255, 255, 253, 255, 239, 255, 255, 255, 63, 31, 7, 127, 0, 255, 255,
+ 255, 1, 127, 0, 7, 0, 127, 0
+};
+
+RE_UINT32 re_get_posix_punct(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_posix_punct_table_1[field_2];
+ v = re_posix_punct_table_2[(v << 5) | field_1];
+ v = re_posix_punct_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_sentence_terminal_stage_4[] = {
- 0, 0, 0, 0, 2, 64, 0, 128, 0, 2, 0, 0, 0, 0, 0, 192,
- 0, 0, 16, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 128, 98,
- 48, 0, 0, 0, 0, 12, 0, 0, 132, 1, 0, 0, 0, 64, 0, 0,
- 0, 0, 96, 0, 8, 2, 0, 0, 0, 15, 0, 0, 0, 0, 0, 204,
- 0, 0, 0, 24, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
- 4, 0, 0, 0, 0, 0, 0, 128, 0, 192, 0, 0, 0, 0, 136, 0,
- 0, 0, 192, 0, 0, 128, 0, 0, 0, 3, 0, 0, 0, 0, 0, 224,
- 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 196, 0, 2, 0, 0, 0,
- 0, 0, 224, 3, 128, 1, 0, 0, 3, 0, 0, 0, 14, 0, 0, 0,
- 96, 32, 0, 192, 0, 0, 0, 27, 0, 24, 0, 0, 12, 254, 255, 0,
- 6, 0, 0, 0, 0, 0, 0, 112, 12, 0, 0, 0, 0, 0, 128, 1,
- 0, 0, 32, 0, 16, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
-};
+/* Posix_XDigit. */
+RE_UINT32 re_get_posix_xdigit(RE_UINT32 codepoint) {
+ if (0x30 <= codepoint && codepoint <= 0x39)
+ return 1;
+ if (0x41 <= codepoint && codepoint <= 0x46)
+ return 1;
+ if (0x61 <= codepoint && codepoint <= 0x66)
+ return 1;
+
+ return 0;
+}
-/* Sentence_Terminal: 960 bytes. */
-
-RE_UINT32 re_get_sentence_terminal(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_sentence_terminal_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_sentence_terminal_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_sentence_terminal_stage_3[pos + f] << 5;
- pos += code;
- value = (re_sentence_terminal_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+/* Prepended_Concatenation_Mark. */
+RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 codepoint) {
+ if (0x0600 <= codepoint && codepoint <= 0x0605)
+ return 1;
+ if (codepoint == 0x06DD)
+ return 1;
+ if (codepoint == 0x070F)
+ return 1;
+ if (codepoint == 0x08E2)
+ return 1;
+ if (codepoint == 0x0110BD)
+ return 1;
+ if (codepoint == 0x0110CD)
+ return 1;
+
+ return 0;
}
-/* Variation_Selector. */
+/* Print. */
+static RE_UINT8 re_print_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 13, 15, 16, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 17, 18, 18, 13, 13, 13, 13, 13, 13, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 18, 18, 13, 31, 18, 18,
+ 18, 32, 18, 18, 18, 18, 18, 18, 18, 18, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 18, 18, 18, 18, 18, 18, 18, 18, 37, 18, 18, 38,
+ 18, 18, 18, 18, 39, 40, 41, 18, 42, 18, 43, 44, 45, 46, 47, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 48, 13, 13, 13, 49, 50, 13,
+ 13, 13, 13, 51, 13, 13, 13, 13, 13, 13, 52, 18, 18, 18, 53, 18,
+ 13, 13, 13, 13, 54, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 55, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 56
+};
-static RE_UINT8 re_variation_selector_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+static RE_UINT16 re_print_table_2[] = {
+ 0, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 1, 8, 1, 9, 10,
+ 11, 1, 1, 1, 1, 1, 1, 1, 12, 1, 13, 1, 1, 14, 1, 15,
+ 1, 16, 17, 18, 0, 19, 20, 1, 1, 1, 1, 1, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 30, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 40, 44, 45, 46, 40, 1, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 0, 56, 57, 58, 0, 1, 1, 59, 60, 61, 11, 62, 0,
+ 1, 1, 1, 1, 1, 1, 63, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 64, 1, 65, 66, 67, 1, 68, 1, 15, 69, 70, 1, 1, 71,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 69, 1, 1, 72, 73, 74, 75, 76, 1, 1, 77, 78,
+ 79, 1, 1, 72, 1, 80, 1, 81, 2, 82, 83, 84, 1, 85, 86, 1,
+ 87, 1, 2, 88, 78, 89, 90, 0, 1, 1, 85, 69, 1, 1, 1, 91,
+ 1, 92, 93, 1, 94, 15, 9, 95, 1, 1, 1, 1, 1, 1, 1, 96,
+ 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 97, 77, 1, 19, 98, 99,
+ 1, 100, 1, 101, 102, 1, 103, 104, 1, 1, 1, 1, 85, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 105, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 107, 1, 1, 1,
+ 1, 108, 2, 1, 1, 1, 1, 109, 1, 63, 1, 110, 74, 111, 111, 1,
+ 1, 1, 112, 0, 96, 1, 1, 75, 1, 1, 1, 1, 1, 1, 81, 113,
+ 1, 1, 53, 1, 7, 1, 1, 1, 114, 6, 1, 1, 108, 1, 1, 115,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69,
+ 1, 1, 1, 1, 116, 1, 117, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 118, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 120, 121,
+ 1, 122, 1, 119, 1, 1, 123, 1, 1, 1, 124, 69, 1, 1, 125, 2,
+ 1, 74, 126, 1, 1, 1, 127, 74, 128, 129, 1, 85, 1, 1, 1, 130,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 115, 131, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 89, 1, 1, 70, 0, 132, 133, 134, 1, 1, 1, 135, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103, 1, 136, 1, 137, 138,
+ 70, 1, 139, 140, 1, 1, 1, 88, 53, 1, 1, 1, 1, 2, 141, 142,
+ 143, 144, 145, 0, 1, 1, 1, 95, 146, 147, 1, 1, 102, 90, 103, 77,
+ 0, 0, 0, 0, 69, 1, 104, 55, 1, 148, 80, 95, 149, 1, 150, 0,
+ 1, 1, 1, 1, 77, 151, 152, 55, 1, 9, 1, 153, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 81, 137, 0, 0, 0, 0,
+ 154, 155, 107, 1, 2, 156, 0, 157, 158, 159, 0, 0, 1, 160, 136, 1,
+ 161, 162, 163, 1, 1, 0, 1, 164, 1, 165, 166, 167, 168, 169, 0, 0,
+ 1, 1, 170, 0, 1, 112, 1, 171, 1, 172, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 1, 173, 0, 0, 1, 9, 70, 0, 0, 103, 118, 74,
+ 1, 1, 174, 175, 1, 1, 176, 177, 1, 19, 9, 74, 1, 1, 1, 178,
+ 179, 2, 0, 0, 180, 151, 1, 181, 21, 182, 183, 184, 0, 0, 0, 0,
+ 1, 1, 185, 186, 1, 1, 172, 0, 0, 0, 0, 0, 1, 166, 77, 0,
+ 1, 1, 187, 188, 1, 72, 189, 0, 15, 85, 0, 0, 0, 0, 0, 0,
+ 1, 55, 0, 0, 0, 1, 1, 190, 191, 192, 193, 0, 0, 100, 3, 194,
+ 1, 1, 9, 1, 1, 195, 1, 72, 0, 0, 0, 0, 0, 0, 0, 0,
+ 196, 197, 198, 116, 136, 199, 0, 0, 200, 201, 172, 202, 203, 189, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 204, 1, 205,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 0, 0, 0,
+ 1, 1, 1, 206, 1, 1, 1, 1, 1, 1, 207, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 72, 2, 209, 0, 0, 103, 210, 1, 1, 211, 212, 213, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 95, 0, 0, 0, 1, 1, 214, 1, 215, 0, 0, 216,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 119,
+ 1, 1, 1, 1, 1, 1, 81, 0, 170, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 217, 218, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 219, 220, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 81, 1, 221, 1, 1, 1, 1, 1, 170,
+ 1, 1, 222, 0, 0, 0, 0, 75, 1, 1, 74, 72, 0, 0, 0, 0,
+ 1, 1, 19, 1, 11, 223, 224, 1, 225, 226, 227, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 228, 1, 1, 1, 1, 1, 1, 1, 1, 229, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 232, 233, 0, 0, 0, 0, 0, 0, 1, 234, 209, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 159, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 235, 0, 1, 1, 236, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 237, 1, 238, 0, 0, 53, 77, 0, 0, 0, 0, 0, 0,
+ 224, 239, 240, 241, 242, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 85, 1, 1, 75, 245, 246, 81, 1, 1, 1, 1, 1, 247, 0, 248,
+ 249, 55, 250, 222, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 119, 251, 1, 1, 1, 75, 1, 1, 72, 118,
+ 85, 1, 172, 1, 9, 252, 0, 0, 1, 1, 1, 253, 1, 1, 143, 1,
+ 1, 1, 75, 254, 117, 255, 256, 0, 1, 1, 1, 1, 139, 1, 18, 257,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 77, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 238, 1, 1, 1, 1, 1, 1,
+ 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 258, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 90,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 0, 0, 0, 0, 0,
+ 259, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 213,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77
};
-static RE_UINT8 re_variation_selector_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_print_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 252,
+ 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 254, 255, 255, 255, 127, 254,
+ 255, 231, 254, 255, 255, 0, 255, 255, 255, 135, 31, 0, 255, 255, 255, 223,
+ 255, 191, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 255, 231,
+ 255, 63, 255, 127, 255, 255, 255, 79, 255, 7, 0, 0, 255, 255, 223, 255,
+ 255, 0, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243, 159, 121, 128, 176,
+ 207, 255, 255, 127, 238, 135, 249, 255, 255, 253, 109, 211, 135, 57, 2, 94,
+ 192, 255, 127, 0, 238, 191, 251, 255, 255, 253, 237, 243, 191, 59, 1, 0,
+ 207, 255, 3, 254, 238, 159, 249, 255, 159, 57, 224, 176, 207, 255, 255, 0,
+ 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 192, 255, 255, 7,
+ 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7, 207, 255, 128, 255,
+ 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0, 223, 253, 240, 255,
+ 207, 255, 255, 255, 238, 255, 127, 252, 255, 255, 251, 47, 127, 132, 95, 255,
+ 192, 255, 28, 0, 254, 255, 255, 255, 255, 255, 255, 135, 255, 255, 255, 15,
+ 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243, 255, 254, 255, 255,
+ 255, 31, 254, 255, 255, 255, 255, 254, 255, 223, 255, 7, 191, 32, 255, 255,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 31, 255, 255, 255, 3, 255, 255, 63, 63,
+ 255, 255, 255, 1, 255, 223, 31, 0, 255, 255, 127, 0, 255, 255, 15, 0,
+ 255, 223, 13, 0, 255, 255, 255, 63, 255, 3, 255, 3, 255, 127, 255, 3,
+ 255, 7, 255, 255, 255, 255, 63, 0, 255, 15, 255, 15, 241, 255, 255, 255,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199, 255, 255, 255, 207,
+ 255, 255, 255, 159, 255, 63, 255, 255, 1, 0, 0, 0, 255, 255, 15, 240,
+ 255, 255, 255, 248, 255, 227, 255, 255, 255, 1, 255, 255, 255, 255, 255, 7,
+ 255, 255, 255, 251, 63, 63, 255, 170, 223, 255, 207, 239, 255, 255, 220, 127,
+ 255, 252, 255, 255, 223, 255, 243, 255, 255, 127, 255, 31, 0, 0, 255, 255,
+ 255, 255, 1, 0, 127, 0, 0, 0, 255, 255, 207, 255, 255, 255, 191, 255,
+ 255, 127, 255, 255, 255, 255, 15, 254, 255, 128, 1, 128, 127, 127, 127, 127,
+ 255, 255, 7, 0, 0, 0, 255, 15, 224, 255, 255, 255, 15, 0, 255, 255,
+ 255, 31, 255, 255, 127, 0, 255, 255, 255, 15, 0, 0, 255, 255, 255, 0,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 31, 255, 3, 63, 192, 255, 3,
+ 255, 255, 15, 128, 255, 191, 255, 195, 255, 63, 255, 243, 7, 0, 0, 248,
+ 126, 126, 126, 0, 127, 127, 255, 255, 255, 63, 255, 3, 127, 248, 255, 255,
+ 127, 0, 248, 224, 255, 255, 127, 95, 219, 255, 255, 255, 3, 0, 248, 255,
+ 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 63, 255, 255, 247, 255,
+ 127, 15, 223, 255, 252, 252, 252, 28, 127, 127, 0, 62, 255, 239, 255, 255,
+ 127, 255, 255, 183, 255, 63, 255, 63, 135, 255, 255, 255, 255, 255, 143, 255,
+ 15, 224, 255, 255, 255, 255, 255, 191, 15, 255, 63, 0, 255, 3, 255, 255,
+ 255, 255, 15, 255, 15, 128, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145,
+ 128, 255, 0, 0, 255, 255, 55, 248, 255, 255, 255, 143, 255, 255, 255, 131,
+ 255, 255, 255, 240, 111, 240, 239, 254, 255, 255, 63, 135, 255, 1, 255, 1,
+ 127, 248, 127, 0, 255, 255, 63, 254, 255, 255, 63, 255, 255, 255, 7, 255,
+ 255, 255, 3, 30, 0, 254, 0, 0, 255, 1, 0, 0, 255, 255, 7, 252,
+ 255, 0, 255, 3, 255, 59, 3, 0, 255, 63, 252, 255, 255, 255, 0, 128,
+ 3, 32, 255, 255, 255, 1, 255, 3, 254, 255, 31, 0, 255, 255, 251, 255,
+ 127, 189, 255, 191, 255, 7, 255, 3, 255, 253, 237, 251, 159, 57, 129, 224,
+ 207, 31, 31, 0, 255, 255, 255, 239, 3, 0, 0, 0, 31, 0, 255, 3,
+ 255, 31, 0, 0, 255, 3, 0, 0, 255, 255, 7, 128, 127, 242, 111, 255,
+ 255, 255, 191, 249, 127, 0, 255, 3, 31, 0, 0, 0, 7, 0, 0, 0,
+ 255, 253, 255, 255, 255, 255, 127, 255, 63, 0, 255, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1,
+ 0, 0, 1, 0, 255, 255, 3, 128, 255, 127, 31, 0, 15, 0, 0, 0,
+ 255, 127, 255, 1, 255, 195, 0, 0, 255, 63, 63, 0, 63, 0, 255, 251,
+ 251, 255, 255, 224, 255, 255, 0, 0, 255, 135, 255, 255, 255, 128, 255, 255,
+ 31, 0, 3, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 243, 127, 254, 255, 255, 63, 0, 0, 0, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 255, 207, 255, 255, 255, 15, 0, 248, 254, 255, 0, 0,
+ 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63, 159, 255, 127, 0,
+ 255, 15, 255, 195, 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10,
+ 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
+ 0, 0, 3, 0, 255, 127, 254, 255, 254, 255, 254, 255, 255, 63, 0, 0,
+ 192, 255, 255, 255, 7, 0, 255, 255, 255, 1, 3, 0, 255, 31, 255, 31,
+ 255, 63, 3, 0, 255, 255, 255, 253, 255, 63, 31, 7, 255, 1, 127, 0,
+ 7, 0, 127, 0, 0, 0, 255, 3, 3, 0, 255, 255, 2, 0, 0, 0
};
-static RE_UINT8 re_variation_selector_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_print(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_variation_selector_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0,
- 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Variation_Selector: 236 bytes. */
-
-RE_UINT32 re_get_variation_selector(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_variation_selector_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_variation_selector_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_variation_selector_stage_3[pos + f] << 6;
- pos += code;
- value = (re_variation_selector_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ v = re_print_table_1[field_2];
+ v = re_print_table_2[(v << 5) | field_1];
+ v = re_print_table_3[(v << 2) | field_0];
-/* Pattern_White_Space. */
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_pattern_white_space_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+/* Quotation_Mark. */
+static RE_UINT8 re_quotation_mark_table_1[] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_pattern_white_space_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_pattern_white_space_stage_3[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_pattern_white_space_stage_4[] = {
- 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 3, 0, 0,
-};
-
-/* Pattern_White_Space: 178 bytes. */
-
-RE_UINT32 re_get_pattern_white_space(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_pattern_white_space_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_pattern_white_space_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_pattern_white_space_stage_3[pos + f] << 6;
- pos += code;
- value = (re_pattern_white_space_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Pattern_Syntax. */
-
-static RE_UINT8 re_pattern_syntax_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_pattern_syntax_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 3, 4, 5, 3, 3, 1, 6, 7, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 9,
-};
-
-static RE_UINT8 re_pattern_syntax_stage_3[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 6, 4, 4, 4, 4, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 9, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 11, 8,
- 8, 8, 4, 4, 4, 4, 4, 4, 12, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 13, 4, 4, 4, 4, 14, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_pattern_syntax_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 120, 1, 0, 0, 120,
- 0, 0, 0, 0, 254, 90, 67, 136, 0, 0, 128, 0, 0, 0, 128, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 127,
- 254, 255, 239, 127, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
- 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 255, 255,
- 14, 255, 255, 255, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 192,
- 96, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Pattern_Syntax: 364 bytes. */
-
-RE_UINT32 re_get_pattern_syntax(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_pattern_syntax_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_pattern_syntax_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_pattern_syntax_stage_3[pos + f] << 6;
- pos += code;
- value = (re_pattern_syntax_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Prepended_Concatenation_Mark. */
-
-static RE_UINT8 re_prepended_concatenation_mark_stage_1[] = {
- 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_prepended_concatenation_mark_stage_2[] = {
- 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_quotation_mark_table_2[] = {
+ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_prepended_concatenation_mark_stage_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 3, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_prepended_concatenation_mark_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
- 0, 32, 0, 0, 0, 0, 0, 0,
-};
-
-/* Prepended_Concatenation_Mark: 236 bytes. */
-
-RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_prepended_concatenation_mark_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_prepended_concatenation_mark_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_prepended_concatenation_mark_stage_3[pos + f] << 6;
- pos += code;
- value = (re_prepended_concatenation_mark_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Regional_Indicator. */
-
-static RE_UINT8 re_regional_indicator_stage_1[] = {
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,
-};
-
-static RE_UINT8 re_regional_indicator_stage_2[] = {
+ 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
-};
-
-static RE_UINT8 re_regional_indicator_stage_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0
};
-static RE_UINT8 re_regional_indicator_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255,
+static RE_UINT8 re_quotation_mark_table_3[] = {
+ 0, 0, 0, 0, 132, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 255,
+ 0, 0, 0, 6, 4, 0, 0, 0, 0, 240, 0, 224, 30, 0, 0, 0,
+ 12, 0, 0, 0
};
-/* Regional_Indicator: 130 bytes. */
-
-RE_UINT32 re_get_regional_indicator(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_regional_indicator_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_regional_indicator_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_regional_indicator_stage_3[pos + f] << 7;
- pos += code;
- value = (re_regional_indicator_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Hangul_Syllable_Type. */
-
-static RE_UINT8 re_hangul_syllable_type_stage_1[] = {
- 0, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_quotation_mark(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_hangul_syllable_type_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 4, 5, 6,
- 7, 8, 9, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8,
- 9, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8, 9, 3,
- 4, 5, 6, 7, 8, 9, 3, 10, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_hangul_syllable_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7,
- 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9,
- 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10,
- 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6,
- 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8,
- 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8,
- 10, 8, 6, 7, 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 10, 8,
- 8, 9, 8, 10, 8, 6, 7, 8, 9, 8, 11, 2, 12, 4, 4, 13,
-};
+ v = re_quotation_mark_table_1[field_2];
+ v = re_quotation_mark_table_2[(v << 5) | field_1];
+ v = re_quotation_mark_table_3[(v << 2) | field_0];
-static RE_UINT8 re_hangul_syllable_type_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0,
-};
+ return (v >> offset) & 0x1;
+}
-/* Hangul_Syllable_Type: 664 bytes. */
-
-RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_hangul_syllable_type_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_hangul_syllable_type_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_hangul_syllable_type_stage_3[pos + f] << 4;
- value = re_hangul_syllable_type_stage_4[pos + code];
-
- return value;
+/* Radical. */
+RE_UINT32 re_get_radical(RE_UINT32 codepoint) {
+ if (0x2E80 <= codepoint && codepoint <= 0x2E99)
+ return 1;
+ if (0x2E9B <= codepoint && codepoint <= 0x2EF3)
+ return 1;
+ if (0x2F00 <= codepoint && codepoint <= 0x2FD5)
+ return 1;
+
+ return 0;
}
-/* Bidi_Class. */
+/* Regional_Indicator. */
+RE_UINT32 re_get_regional_indicator(RE_UINT32 codepoint) {
+ if (0x01F1E6 <= codepoint && codepoint <= 0x01F1FF)
+ return 1;
-static RE_UINT8 re_bidi_class_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 7,
- 8, 9, 5, 5, 5, 5, 10, 5, 5, 5, 5, 11, 5, 12, 13, 14,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
-};
+ return 0;
+}
-static RE_UINT8 re_bidi_class_stage_2[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10,
- 4, 4, 11, 4, 4, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 30, 32, 33, 34, 35, 36,
- 37, 38, 28, 39, 40, 41, 4, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, 55, 4,
- 56, 4, 4, 4, 4, 4, 4, 4, 4, 4, 57, 4, 58, 59, 60, 61,
- 62, 4, 63, 4, 64, 65, 4, 66, 67, 68, 69, 4, 70, 71, 72, 73,
- 74, 4, 4, 75, 4, 4, 4, 76, 4, 4, 4, 4, 4, 4, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 86, 86, 86, 88, 89, 90, 86,
- 91, 92, 93, 94, 86, 86, 86, 86, 86, 86, 95, 86, 86, 86, 86, 86,
- 4, 4, 4, 4, 86, 86, 86, 86, 86, 86, 86, 86, 86, 96, 97, 86,
- 4, 4, 4, 98, 4, 99, 4, 100, 86, 101, 102, 103, 86, 86, 86, 104,
- 105, 4, 106, 107, 4, 4, 4, 108, 109, 110, 111, 112, 4, 113, 4, 114,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 86, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 115, 116, 4, 4, 4, 4, 117, 118, 119, 120, 121, 4, 122, 4,
- 123, 124, 4, 125, 126, 127, 128, 129, 130, 131, 132, 133, 4, 4, 4, 134,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 135, 136, 16, 16,
- 16, 16, 16, 16, 137, 16, 16, 138, 139, 140, 16, 141, 142, 143, 4, 144,
- 4, 4, 4, 4, 145, 86, 146, 147, 4, 4, 4, 148, 4, 149, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 150, 150, 150, 150, 151, 150, 150, 150, 152, 150, 150, 153, 154, 150, 150, 150,
- 150, 150, 150, 150, 155, 150, 150, 150, 150, 156, 150, 150, 157, 158, 150, 150,
- 159, 160, 161, 4, 162, 163, 164, 165, 166, 4, 4, 167, 40, 168, 4, 4,
- 169, 170, 171, 172, 4, 4, 173, 174, 175, 176, 177, 4, 178, 4, 4, 4,
- 179, 4, 4, 4, 4, 4, 4, 180, 181, 182, 183, 4, 4, 4, 4, 4,
- 184, 4, 185, 4, 186, 187, 188, 4, 4, 4, 4, 189, 4, 4, 4, 190,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 191, 192, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 193, 194, 195,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 196, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 197, 198, 4, 86, 199, 4, 4, 86, 200, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 201, 202, 203, 204, 205,
- 4, 4, 4, 4, 4, 4, 4, 4, 206, 207, 208, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 209, 4, 4, 4, 192, 4, 4, 4, 4, 4, 4, 210, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 150, 150, 150, 211, 150, 212, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
- 150, 157, 16, 150, 16, 213, 150, 150, 16, 16, 16, 214, 150, 150, 150, 150,
- 215, 86, 216, 217, 218, 219, 4, 4, 4, 220, 4, 4, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 221, 86, 103, 86, 222,
- 223, 224, 225, 4, 226, 227, 228, 229, 86, 230, 231, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 232,
+/* Script. */
+static RE_UINT8 re_script_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 21, 21, 34, 35, 21, 21,
+ 21, 36, 21, 21, 21, 21, 21, 21, 21, 21, 37, 38, 39, 39, 39, 39,
+ 39, 40, 41, 42, 21, 21, 21, 21, 21, 21, 21, 21, 43, 21, 21, 44,
+ 21, 21, 21, 21, 45, 46, 47, 21, 48, 21, 49, 50, 51, 52, 53, 21,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 54, 13, 13, 13, 55, 56, 13,
+ 13, 13, 13, 57, 13, 13, 13, 13, 13, 13, 58, 21, 21, 21, 59, 21,
+ 13, 13, 13, 13, 60, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 61, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21
+};
+
+static RE_UINT16 re_script_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 5, 0, 6, 7, 7, 7, 8, 9, 10, 11, 12,
+ 13, 13, 13, 13, 14, 13, 13, 13, 13, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 23, 23, 26, 23, 27, 28, 29, 23, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 38, 84, 85, 86, 38, 87, 87, 88, 89, 90, 91, 92, 38,
+ 93, 93, 93, 93, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 99, 98, 100, 101, 102, 98, 103, 98, 104, 105, 106, 107, 107, 108,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 110, 111, 111, 112, 113, 114, 115, 116, 117, 117, 118, 119,
+ 120, 121, 121, 122, 121, 123, 109, 124, 125, 126, 127, 128, 129, 130, 131, 117,
+ 132, 133, 134, 135, 136, 137, 138, 38, 139, 139, 140, 141, 142, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 4, 153, 154, 155, 4, 156, 7, 157,
+ 4, 4, 4, 4, 4, 4, 4, 4, 158, 11, 159, 160, 11, 161, 162, 163,
+ 164, 0, 0, 165, 166, 0, 167, 168, 0, 169, 170, 4, 171, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 172, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 174, 174, 174, 174, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0,
+ 177, 178, 179, 4, 180, 180, 180, 181, 94, 182, 183, 184, 185, 186, 186, 13,
+ 0, 0, 187, 38, 188, 189, 189, 190, 189, 189, 189, 189, 189, 189, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 97, 97, 203, 204, 0, 205,
+ 206, 0, 0, 207, 0, 0, 208, 209, 199, 199, 210, 0, 0, 0, 0, 0,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 0, 0,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 211,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 213, 212, 214, 215, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 217, 13, 13, 13, 218, 218, 219, 0, 220, 4, 4, 221, 4, 222, 223,
+ 224, 225, 226, 227, 228, 228, 229, 42, 230, 231, 232, 233, 234, 234, 235, 236,
+ 237, 238, 239, 93, 240, 240, 241, 242, 243, 244, 245, 246, 107, 107, 247, 248,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 249, 250, 251,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 252, 189, 189, 253, 38, 254, 255, 256, 23, 23, 23, 257, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 258, 259, 23, 260, 23, 261, 262,
+ 263, 264, 265, 266, 23, 23, 23, 267, 268, 1, 1, 269, 270, 206, 271, 272,
+ 273, 274, 275, 38, 276, 276, 276, 277, 278, 279, 11, 11, 280, 281, 282, 283,
+ 38, 38, 38, 38, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 38,
+ 295, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 38, 38, 38, 38,
+ 306, 306, 306, 306, 306, 306, 306, 306, 306, 307, 308, 309, 38, 38, 38, 38,
+ 310, 311, 312, 313, 314, 315, 38, 316, 317, 318, 38, 38, 319, 320, 321, 322,
+ 323, 324, 325, 326, 327, 38, 328, 329, 330, 331, 332, 333, 334, 335, 38, 38,
+ 336, 336, 337, 38, 338, 339, 338, 340, 341, 342, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 343, 344, 345, 38, 38, 346, 347, 348, 38, 38, 349, 350, 351,
+ 352, 352, 353, 354, 355, 355, 356, 357, 358, 359, 360, 361, 362, 362, 362, 363,
+ 364, 365, 38, 38, 366, 367, 368, 369, 370, 371, 372, 373, 38, 38, 38, 38,
+ 374, 374, 375, 376, 377, 377, 378, 38, 38, 38, 38, 38, 379, 380, 381, 38,
+ 382, 382, 383, 384, 385, 386, 387, 38, 388, 389, 38, 38, 38, 38, 38, 38,
+ 390, 391, 38, 38, 38, 392, 392, 393, 394, 395, 396, 38, 38, 397, 398, 399,
+ 400, 400, 401, 402, 402, 403, 404, 405, 38, 38, 38, 38, 38, 38, 38, 38,
+ 406, 407, 408, 409, 410, 411, 38, 38, 412, 413, 414, 415, 416, 417, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 418, 38, 38, 38, 38, 38, 419, 420, 421,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 423, 38, 38, 38,
+ 422, 422, 422, 424, 422, 422, 422, 422, 422, 422, 425, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 427, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 429, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
+ 218, 430, 431, 432, 38, 38, 433, 434, 435, 435, 436, 437, 438, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 439, 439, 440, 38, 38, 38, 441, 441, 442, 441, 443, 38, 38, 444,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 446,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 447, 447, 447, 447, 447, 447, 447, 447,
+ 447, 447, 447, 447, 447, 447, 448, 38, 449, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 450, 196, 196, 196, 196, 196, 196, 196, 451, 38, 452, 453, 454, 454, 454, 454,
+ 454, 454, 454, 454, 454, 454, 454, 455, 38, 38, 38, 38, 38, 38, 38, 38,
+ 456, 456, 456, 457, 458, 459, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 462, 463, 464, 0, 465,
+ 11, 11, 466, 38, 38, 38, 38, 467, 0, 0, 468, 469, 38, 38, 38, 38,
+ 0, 0, 470, 0, 471, 472, 473, 0, 474, 475, 476, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0,
+ 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479,
+ 479, 479, 479, 479, 480, 481, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 482, 483, 38, 38, 38, 38, 38, 38, 484, 485, 486, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 487, 488, 38, 38, 38, 38, 38, 38, 38, 38,
+ 489, 489, 489, 489, 489, 489, 490, 38, 491, 491, 492, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 493, 0, 494, 38, 38, 268, 495, 38, 38, 38, 38, 38, 38,
+ 496, 497, 498, 499, 500, 501, 38, 502, 38, 38, 38, 38, 38, 38, 38, 38,
+ 0, 503, 0, 0, 467, 504, 505, 460, 0, 0, 0, 0, 0, 506, 38, 507,
+ 508, 509, 510, 511, 38, 38, 38, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, 467, 0, 0, 469, 514,
+ 503, 0, 515, 0, 516, 517, 38, 38, 0, 0, 0, 518, 0, 0, 519, 0,
+ 0, 0, 467, 520, 521, 522, 523, 38, 0, 0, 0, 0, 265, 0, 173, 524,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 525, 38, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 526, 189, 189, 189, 189, 189, 189,
+ 525, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 527, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 528,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 525, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 529, 38, 38, 38, 38, 38,
+ 530, 0, 0, 0, 38, 38, 38, 38, 7, 7, 7, 7, 7, 7, 7, 531,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38
+};
+
+static RE_UINT8 re_script_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 232,
- 233, 233, 233, 233, 7, 7, 7, 234, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
-};
-
-static RE_UINT8 re_bidi_class_stage_3[] = {
- 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 8, 9, 7, 8, 8, 10,
- 11, 0, 0, 0, 12, 13, 14, 15, 8, 8, 16, 8, 8, 8, 16, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 17,
- 18, 19, 18, 19, 20, 21, 19, 19, 22, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 23, 24, 25, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 24, 8, 26, 27, 8, 8, 8, 8, 8, 8,
- 8, 28, 29, 22, 22, 22, 22, 30, 31, 32, 32, 32, 32, 32, 32, 32,
- 33, 34, 22, 35, 36, 36, 36, 36, 36, 37, 22, 22, 38, 39, 40, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 41, 42, 43, 44, 5, 45,
- 36, 36, 46, 36, 36, 36, 22, 22, 22, 35, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 41, 22, 40, 36, 32, 32, 32, 32, 32, 47, 48, 49,
- 32, 32, 50, 51, 52, 53, 32, 32, 32, 32, 32, 54, 36, 36, 32, 32,
- 32, 32, 32, 32, 36, 36, 36, 36, 36, 36, 37, 22, 55, 22, 22, 22,
- 56, 8, 8, 8, 8, 8, 8, 57, 58, 59, 58, 8, 60, 8, 8, 8,
- 61, 8, 8, 8, 8, 8, 8, 62, 63, 64, 8, 8, 60, 8, 65, 66,
- 67, 8, 8, 8, 8, 8, 8, 62, 68, 69, 61, 8, 8, 8, 70, 8,
- 71, 59, 8, 8, 60, 8, 72, 73, 61, 8, 8, 8, 8, 8, 8, 74,
- 63, 64, 75, 8, 60, 8, 8, 8, 76, 8, 8, 8, 8, 8, 8, 8,
- 77, 64, 8, 8, 8, 8, 9, 78, 79, 8, 8, 8, 8, 8, 8, 80,
- 81, 82, 83, 8, 60, 8, 8, 84, 8, 85, 8, 8, 60, 8, 8, 8,
- 27, 8, 8, 8, 8, 8, 8, 86, 63, 64, 8, 8, 60, 8, 8, 8,
- 8, 76, 87, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 88, 89,
- 90, 91, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 88, 92,
- 8, 93, 8, 8, 8, 8, 8, 8, 8, 8, 8, 27, 8, 8, 94, 95,
- 8, 8, 8, 8, 8, 8, 58, 91, 96, 97, 22, 58, 22, 22, 22, 92,
- 75, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 97, 98, 99,
- 8, 8, 8, 100, 77, 8, 63, 8, 101, 64, 8, 64, 8, 8, 8, 8,
- 8, 8, 8, 97, 8, 8, 8, 8, 8, 8, 19, 102, 8, 8, 8, 8,
- 7, 8, 8, 8, 8, 8, 8, 8, 103, 8, 8, 104, 8, 8, 8, 8,
- 8, 8, 105, 8, 8, 8, 105, 8, 8, 8, 60, 8, 8, 8, 60, 8,
- 8, 8, 8, 8, 8, 8, 106, 93, 75, 58, 107, 108, 8, 8, 19, 102,
- 19, 109, 8, 8, 8, 8, 8, 8, 83, 8, 8, 8, 8, 61, 8, 8,
- 8, 8, 8, 8, 110, 77, 76, 111, 112, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 113, 19, 19, 19, 19, 8, 8, 90, 114, 8, 8, 8, 8,
- 8, 8, 75, 91, 115, 92, 26, 116, 8, 8, 8, 8, 8, 8, 22, 91,
- 107, 8, 8, 8, 8, 8, 117, 118, 76, 8, 8, 8, 8, 26, 107, 8,
- 27, 8, 8, 8, 119, 120, 8, 8, 8, 8, 8, 8, 75, 121, 27, 8,
- 8, 8, 8, 8, 8, 122, 123, 8, 8, 8, 124, 22, 98, 59, 62, 27,
- 22, 22, 22, 22, 22, 22, 22, 125, 8, 8, 8, 8, 8, 8, 8, 126,
- 102, 20, 8, 20, 8, 20, 8, 127, 128, 129, 19, 19, 19, 130, 131, 19,
- 132, 19, 19, 133, 134, 135, 136, 137, 5, 137, 8, 8, 138, 138, 138, 138,
- 138, 138, 22, 22, 22, 22, 77, 8, 139, 102, 140, 141, 142, 143, 8, 144,
- 145, 146, 19, 19, 8, 8, 8, 8, 8, 147, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 148, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 149, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 19, 19, 150, 19, 19, 19, 19, 19, 19, 19, 19, 19, 84, 8, 8, 8,
- 19, 151, 8, 8, 19, 19, 19, 19, 19, 5, 5, 152, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 18, 19, 19, 19, 19, 19, 19, 19, 153, 19, 19,
- 19, 19, 19, 19, 19, 19, 154, 19, 19, 19, 149, 19, 19, 19, 19, 19,
- 8, 8, 8, 8, 20, 155, 27, 156, 8, 8, 8, 8, 8, 8, 8, 90,
- 8, 8, 8, 8, 22, 22, 22, 22, 19, 19, 8, 8, 8, 8, 8, 8,
- 19, 19, 19, 157, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 158, 8,
- 19, 19, 149, 8, 8, 8, 19, 158, 159, 19, 19, 19, 7, 119, 141, 20,
- 8, 8, 8, 160, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 161,
- 19, 19, 19, 19, 158, 8, 8, 8, 8, 8, 8, 127, 8, 8, 8, 8,
- 8, 8, 19, 19, 8, 8, 8, 162, 8, 8, 8, 8, 8, 8, 156, 19,
- 8, 163, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 151,
- 8, 8, 8, 113, 8, 8, 8, 16, 8, 8, 19, 19, 19, 19, 19, 19,
- 84, 8, 8, 8, 8, 8, 8, 8, 8, 20, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 90, 164, 165, 8, 8, 8, 80, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 27, 8, 19, 19, 19, 19, 102, 8, 8, 8,
- 8, 7, 8, 8, 8, 8, 8, 8, 166, 167, 8, 8, 83, 158, 8, 168,
- 8, 8, 8, 8, 8, 8, 163, 8, 85, 8, 8, 8, 22, 22, 27, 90,
- 8, 8, 8, 8, 80, 93, 8, 8, 90, 22, 27, 8, 8, 8, 8, 8,
- 56, 8, 8, 8, 8, 8, 169, 170, 8, 8, 8, 8, 64, 8, 8, 8,
- 8, 8, 8, 8, 8, 171, 99, 8, 167, 62, 8, 8, 8, 8, 8, 62,
- 8, 8, 8, 8, 8, 8, 172, 81, 61, 8, 8, 8, 8, 85, 75, 8,
- 8, 8, 8, 8, 64, 59, 8, 8, 8, 8, 8, 173, 32, 174, 32, 32,
- 32, 32, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 175,
- 36, 36, 0, 0, 0, 0, 36, 176, 22, 22, 19, 102, 22, 22, 19, 19,
- 19, 19, 177, 178, 179, 180, 36, 36, 36, 36, 36, 36, 36, 36, 36, 181,
- 182, 4, 5, 6, 7, 8, 8, 9, 7, 8, 8, 9, 149, 8, 8, 8,
- 8, 8, 8, 8, 183, 84, 0, 184, 185, 8, 8, 8, 8, 8, 8, 8,
- 19, 145, 19, 158, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 64,
- 8, 8, 8, 8, 186, 5, 5, 152, 8, 8, 8, 8, 8, 8, 80, 56,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 187, 32, 32, 32, 32,
- 188, 189, 32, 32, 32, 32, 32, 190, 32, 32, 32, 32, 191, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 192, 36, 36, 36, 36, 193, 36, 38, 194,
- 32, 32, 32, 32, 38, 38, 38, 195, 32, 32, 32, 32, 32, 32, 36, 36,
- 41, 22, 40, 36, 36, 36, 32, 32, 61, 8, 8, 8, 8, 8, 8, 22,
- 91, 8, 18, 19, 149, 8, 8, 90, 27, 8, 8, 8, 8, 8, 196, 67,
- 56, 8, 8, 8, 90, 197, 92, 8, 8, 8, 8, 8, 8, 8, 167, 8,
- 27, 8, 8, 8, 8, 8, 80, 91, 8, 63, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 90, 198, 75, 8, 8, 8, 90, 26, 56, 8, 8,
- 77, 8, 8, 8, 80, 92, 92, 8, 8, 8, 8, 8, 8, 8, 8, 22,
- 87, 8, 8, 75, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 26, 199,
- 200, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 119, 106,
- 77, 8, 8, 85, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 26, 201,
- 77, 8, 8, 8, 19, 145, 8, 8, 8, 8, 8, 8, 8, 202, 203, 8,
- 8, 8, 8, 97, 204, 107, 8, 8, 8, 8, 8, 8, 8, 90, 22, 67,
- 8, 8, 122, 60, 77, 8, 8, 8, 171, 67, 8, 8, 8, 8, 26, 205,
- 90, 8, 171, 111, 8, 8, 8, 8, 8, 73, 91, 27, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 91, 93, 8, 8, 73, 22, 22, 73, 206, 8,
- 8, 8, 8, 8, 8, 8, 171, 207, 203, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 121, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 86, 8,
- 8, 8, 20, 208, 209, 19, 102, 8, 8, 8, 8, 8, 8, 8, 92, 8,
- 8, 8, 8, 8, 8, 8, 91, 8, 8, 90, 8, 8, 8, 8, 8, 8,
- 8, 90, 56, 8, 8, 8, 8, 8, 8, 8, 8, 8, 210, 8, 8, 8,
- 8, 8, 8, 83, 211, 8, 8, 8, 8, 8, 8, 8, 90, 27, 212, 213,
- 214, 107, 8, 8, 8, 119, 8, 8, 215, 8, 8, 8, 8, 8, 8, 8,
- 19, 19, 84, 8, 8, 8, 8, 8, 8, 8, 8, 161, 8, 8, 8, 8,
- 8, 8, 216, 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8,
- 8, 185, 8, 8, 8, 8, 8, 8, 161, 217, 5, 5, 5, 5, 5, 5,
- 22, 22, 22, 22, 22, 22, 91, 26, 22, 22, 22, 22, 22, 92, 64, 8,
- 62, 8, 8, 26, 58, 22, 8, 8, 91, 22, 22, 218, 219, 56, 8, 8,
- 8, 8, 8, 8, 8, 122, 8, 220, 32, 32, 221, 32, 32, 32, 32, 32,
- 189, 222, 32, 32, 32, 32, 32, 32, 36, 36, 32, 32, 32, 32, 32, 32,
- 36, 36, 36, 36, 36, 36, 223, 36, 19, 19, 19, 19, 19, 158, 19, 19,
- 19, 19, 158, 8, 19, 84, 156, 19, 156, 19, 156, 19, 19, 19, 149, 8,
- 5, 224, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 225, 8, 8,
- 8, 8, 8, 8, 149, 8, 8, 8, 19, 19, 149, 8, 19, 145, 19, 151,
- 19, 19, 19, 7, 19, 158, 8, 8, 19, 158, 19, 19, 19, 19, 19, 19,
- 19, 8, 19, 102, 19, 19, 19, 19, 19, 8, 19, 19, 19, 149, 8, 8,
- 19, 153, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 139, 18,
- 19, 19, 19, 19, 226, 227, 19, 19, 19, 226, 19, 19, 19, 19, 19, 19,
- 19, 19, 158, 8, 19, 149, 158, 151, 151, 8, 149, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 228, 0, 0, 0, 0, 0, 0, 0, 0,
- 22, 22, 22, 22, 22, 22, 0, 0,
-};
-
-static RE_UINT8 re_bidi_class_stage_4[] = {
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 8, 7, 8, 9, 7, 11, 11,
- 11, 11, 11, 11, 7, 7, 7, 8, 9, 10, 10, 4, 4, 4, 10, 10,
- 10, 10, 10, 3, 6, 3, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 6, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10,
- 0, 0, 0, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 7, 11, 11,
- 6, 10, 4, 4, 4, 4, 10, 10, 10, 10, 0, 10, 10, 11, 10, 10,
- 4, 4, 2, 2, 10, 0, 10, 10, 10, 2, 0, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 0, 0, 0, 0, 0,
- 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10,
- 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 10, 10, 0, 10,
- 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 10, 0, 0, 10, 10, 4, 1, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 1, 12, 1, 12, 12, 1, 12, 12, 1, 12,
- 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 10, 10,
- 13, 4, 4, 13, 6, 13, 10, 10, 12, 12, 12, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 13, 13, 13,
- 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12,
- 12, 12, 12, 12, 12, 5, 10, 12, 12, 12, 12, 12, 12, 13, 13, 12,
- 12, 10, 12, 12, 12, 12, 13, 13, 2, 2, 13, 13, 13, 13, 13, 13,
- 13, 12, 13, 13, 13, 13, 13, 13, 1, 1, 1, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 1, 1, 10, 10, 10, 10, 1, 1, 1, 12, 1, 1,
- 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 1, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 1, 12, 12, 12, 1, 12, 12, 12, 12, 12, 1, 1,
- 1, 12, 12, 12, 1, 1, 1, 1, 12, 12, 5, 12, 12, 12, 12, 12,
- 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0,
- 0, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 12, 0, 0,
- 0, 0, 12, 12, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 12, 12, 12, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 12, 0, 0, 12, 12, 0, 0, 0, 0, 0,
- 0, 12, 12, 0, 0, 0, 0, 12, 12, 0, 0, 12, 12, 12, 0, 0,
- 12, 12, 0, 0, 0, 12, 0, 0, 0, 12, 12, 12, 12, 12, 0, 12,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12,
- 0, 0, 0, 0, 12, 0, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 10, 4, 10, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0, 0, 12, 12,
- 12, 0, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0,
- 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 12, 12, 0, 0,
- 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12, 0, 12, 0,
- 0, 12, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 0,
- 12, 12, 12, 12, 12, 0, 0, 0, 12, 12, 12, 12, 12, 12, 0, 0,
- 0, 0, 0, 0, 0, 12, 0, 12, 0, 12, 10, 10, 10, 10, 0, 0,
- 12, 12, 12, 12, 12, 0, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12,
- 12, 0, 12, 12, 12, 12, 12, 12, 0, 12, 12, 0, 0, 12, 12, 0,
- 12, 12, 0, 0, 0, 0, 12, 12, 0, 0, 12, 0, 0, 12, 12, 0,
- 10, 10, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0,
- 0, 0, 0, 0, 12, 12, 0, 12, 12, 12, 12, 12, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 12, 0, 0, 10, 10, 10, 12, 12, 12, 11, 0,
- 12, 12, 12, 0, 0, 0, 0, 12, 0, 12, 12, 12, 0, 0, 0, 0,
- 10, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10,
- 12, 0, 0, 12, 0, 0, 0, 0, 12, 0, 12, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 0, 0, 12, 0, 0, 0, 0, 12, 0, 12, 12,
- 12, 12, 12, 0, 12, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, 0,
- 12, 12, 0, 12, 12, 12, 0, 0, 12, 12, 0, 0, 0, 12, 0, 12,
- 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 12, 12,
- 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12,
- 0, 0, 0, 0, 0, 10, 0, 10, 0, 0, 0, 0, 0, 10, 10, 0,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 0, 1,
- 9, 7, 16, 17, 18, 14, 15, 6, 4, 4, 4, 4, 4, 10, 10, 10,
- 10, 10, 10, 10, 6, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
- 11, 11, 11, 11, 11, 11, 19, 20, 21, 22, 11, 11, 11, 11, 11, 11,
- 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 10, 10, 10, 0,
- 4, 4, 4, 4, 4, 4, 4, 4, 10, 10, 0, 10, 10, 10, 10, 0,
- 0, 0, 0, 0, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10,
- 10, 10, 10, 10, 0, 10, 0, 10, 0, 10, 0, 0, 0, 0, 4, 0,
- 0, 0, 10, 10, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0,
- 0, 0, 10, 10, 10, 10, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0,
- 10, 10, 3, 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
- 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 0, 0, 0, 0, 10, 10, 10, 10, 0, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 12,
- 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 0, 0, 9, 10, 10, 10, 10, 0, 0, 0,
- 0, 12, 12, 10, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 10,
- 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 10, 10,
- 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 0, 12, 0, 0, 0, 0,
- 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 12,
- 12, 12, 0, 0, 12, 12, 0, 0, 0, 12, 12, 12, 12, 12, 12, 0,
- 12, 0, 12, 12, 12, 0, 0, 12, 0, 0, 0, 0, 0, 1, 12, 1,
- 1, 3, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 10, 10,
- 13, 13, 13, 13, 13, 10, 13, 13, 6, 10, 6, 0, 10, 6, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 4, 10, 10, 3, 3, 10, 10, 10, 0,
- 10, 4, 4, 10, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 11,
- 0, 10, 10, 4, 4, 4, 10, 10, 4, 4, 10, 10, 10, 4, 4, 0,
- 11, 10, 10, 10, 10, 10, 11, 11, 0, 10, 0, 0, 0, 0, 0, 0,
- 12, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 10,
- 1, 12, 12, 12, 1, 12, 12, 1, 1, 1, 1, 1, 12, 12, 12, 12,
- 12, 12, 12, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 12, 12, 1,
- 1, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 12, 12, 12, 12,
- 5, 5, 13, 13, 13, 13, 13, 13, 5, 5, 5, 5, 5, 5, 5, 1,
- 0, 0, 0, 12, 12, 12, 12, 0, 12, 12, 12, 12, 0, 12, 12, 12,
- 12, 12, 0, 0, 12, 0, 12, 12, 12, 0, 12, 0, 0, 0, 0, 12,
- 12, 0, 12, 12, 0, 0, 0, 0, 12, 12, 12, 0, 0, 12, 0, 12,
- 0, 0, 0, 12, 0, 12, 0, 0, 12, 12, 12, 12, 12, 12, 0, 12,
- 0, 0, 12, 12, 12, 12, 0, 12, 12, 0, 0, 12, 12, 12, 12, 0,
- 12, 0, 12, 12, 0, 12, 12, 0, 0, 0, 12, 0, 12, 12, 0, 12,
- 10, 10, 10, 10, 10, 4, 4, 4, 4, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 10, 0, 0, 0, 0, 0, 11, 11, 11, 11, 0, 0, 0, 0,
- 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
- 12, 12, 12, 0, 0, 12, 12, 12, 10, 10, 12, 12, 12, 10, 0, 0,
- 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 12, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 0, 12, 12,
- 0, 0, 0, 0, 0, 0, 0, 4, 12, 12, 12, 12, 12, 12, 12, 1,
- 12, 12, 12, 1, 1, 1, 1, 1, 10, 10, 13, 13, 13, 13, 13, 13,
- 2, 2, 2, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0,
- 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 10, 10,
- 0, 0, 0, 0, 0, 0, 11, 11,
-};
-
-/* Bidi_Class: 5072 bytes. */
-
-RE_UINT32 re_get_bidi_class(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_bidi_class_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_bidi_class_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_bidi_class_stage_3[pos + f] << 3;
- value = re_bidi_class_stage_4[pos + code];
-
- return value;
-}
-
-/* Canonical_Combining_Class. */
-
-static RE_UINT8 re_canonical_combining_class_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 6,
- 7, 8, 4, 4, 4, 4, 9, 4, 4, 4, 4, 10, 4, 11, 12, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_canonical_combining_class_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
- 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, 9, 10, 0, 11,
- 12, 13, 0, 14, 15, 16, 15, 17, 15, 18, 15, 18, 15, 18, 0, 18,
- 0, 19, 15, 18, 20, 18, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34,
- 0, 0, 35, 0, 36, 0, 0, 0, 37, 38, 39, 0, 40, 41, 42, 43,
- 44, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 1, 5, 5, 5, 0, 0, 5, 5, 5, 5, 1, 5,
+ 0, 0, 0, 0, 5, 1, 5, 1, 5, 5, 5, 0, 5, 0, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 10, 0, 10, 1,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17,
+ 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17,
+ 17, 0, 17, 0, 0, 0, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 0, 17,
+ 17, 17, 17, 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18,
+ 18, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
+ 18, 0, 18, 18, 0, 18, 18, 0, 18, 18, 0, 0, 18, 0, 18, 18,
+ 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0,
+ 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19,
+ 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19,
+ 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19,
+ 0, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 20,
+ 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20,
+ 20, 0, 20, 20, 0, 20, 20, 20, 20, 20, 0, 0, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 0, 0, 20, 20, 0, 0, 20, 20, 20, 0, 0,
+ 0, 0, 0, 0, 0, 20, 20, 20, 0, 0, 0, 0, 20, 20, 0, 20,
+ 20, 20, 20, 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 21, 21, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 0, 21, 21, 21, 21, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
+ 0, 0, 0, 21, 21, 0, 0, 0, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 21, 21,
+ 21, 21, 21, 0, 0, 0, 21, 21, 21, 0, 21, 21, 21, 21, 0, 0,
+ 21, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22,
+ 22, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22,
+ 22, 22, 22, 22, 22, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 0, 22, 22, 22, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23,
+ 23, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 0, 0, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 0, 23, 23, 23, 0, 23, 23, 23, 23, 0, 0,
+ 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 23, 0,
+ 23, 23, 23, 23, 0, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 24, 24,
+ 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 0, 24, 24, 24, 0, 24, 24, 24, 24, 24, 24,
+ 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 0, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 0, 0, 0, 0, 25,
+ 25, 25, 25, 25, 25, 0, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 1,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+ 0, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 0,
+ 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 1, 1, 1, 1, 28, 28, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 1, 30, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 0, 0, 33, 33, 33, 33, 33, 33, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 1, 1, 1, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 37, 37,
+ 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40,
+ 40, 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 42, 42, 1, 1, 42, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0,
+ 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 45, 45,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 30, 30, 30,
+ 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 4, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 4, 4, 1, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
+ 5, 5, 2, 2, 2, 2, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55,
+ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 56, 1, 56, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 4, 4, 4, 4, 31, 31,
+ 1, 1, 1, 1, 1, 1, 1, 1, 56, 56, 56, 56, 1, 1, 1, 1,
+ 0, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 0, 0, 4, 4, 1, 1, 57, 57, 57,
+ 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 58, 58, 58,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 1, 1, 1, 1, 1, 1,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 66,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 1,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 0, 68, 68,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 0,
+ 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 55, 0, 0, 0, 0,
- 56, 0, 0, 57, 58, 59, 60, 61, 0, 0, 62, 63, 0, 0, 0, 64,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 31, 31, 31,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 0, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 0, 0, 0,
- 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0,
- 0, 74, 75, 0, 76, 60, 0, 77, 78, 0, 0, 79, 80, 81, 0, 0,
- 0, 82, 0, 83, 0, 0, 49, 84, 49, 0, 85, 0, 86, 0, 0, 0,
- 75, 0, 0, 0, 0, 0, 0, 87, 88, 89, 90, 0, 0, 0, 0, 0,
- 49, 0, 0, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 0, 0,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 0, 78,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 87, 87, 0, 0, 87, 0, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 0, 87, 87, 0, 0, 0, 87, 0, 0, 87,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 0, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 0, 91, 91, 0, 0, 0, 0, 0, 91, 91, 91, 91, 91,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, 93,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 96, 96, 96, 96, 0, 96, 96, 0, 0, 0, 0, 0, 96, 96, 96, 96,
+ 96, 96, 96, 96, 0, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 0, 0, 96, 96, 96, 0, 0, 0, 0, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100, 100, 100, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, 101, 101,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 103, 103, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 0, 0,
+ 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0, 0,
+ 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0,
+ 119, 119, 119, 119, 119, 119, 119, 0, 119, 0, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0, 0,
+ 121, 121, 121, 121, 0, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 121,
+ 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 121, 121, 121, 121, 121, 121,
+ 121, 0, 121, 121, 0, 121, 121, 121, 121, 121, 0, 4, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 0, 0, 121, 121, 0, 0, 121, 121, 121, 0, 0,
+ 121, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 121, 121, 121,
+ 121, 121, 121, 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0,
+ 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122,
+ 122, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 0, 0, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 130, 0, 0, 130, 130, 130, 130,
+ 130, 130, 130, 130, 0, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 130, 130, 0, 0, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 0, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 0, 137, 137, 0, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 137, 0, 137, 137, 0, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 0, 138, 138, 0, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0,
+ 138, 138, 0, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0,
+ 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 0,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 143, 143,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0,
+ 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 145, 145, 145, 145, 145,
+ 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 148, 149, 1, 1, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 94, 0, 0, 0,
+ 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 58, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 151, 151, 151, 151,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152,
+ 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54,
+ 54, 54, 0, 54, 54, 0, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0, 0, 153, 153,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 154,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 0, 0, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0, 156, 156,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0, 10, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 10, 0, 10, 0, 10, 0, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 96, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 57, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_canonical_combining_class_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 1, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 21, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 25, 0,
- 0, 0, 26, 27, 28, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 32,
- 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 35, 36,
- 0, 0, 26, 37, 38, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0,
- 0, 0, 41, 1, 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 46,
- 0, 47, 48, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 49,
- 0, 47, 0, 0, 0, 0, 0, 0, 0, 47, 50, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 57, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 60, 61,
- 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 65, 0, 36, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0,
- 0, 0, 52, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 72, 0, 0, 0, 0,
- 0, 0, 0, 0, 73, 0, 66, 74, 0, 0, 0, 0, 0, 0, 75, 76,
- 0, 0, 0, 0, 0, 0, 46, 0, 67, 0, 0, 0, 0, 77, 78, 0,
- 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 80, 0, 79, 0,
- 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 1, 1, 1, 90, 91, 0, 0, 92, 93, 94, 95, 96, 0,
- 0, 0, 0, 0, 0, 71, 86, 0, 0, 0, 0, 0, 0, 0, 0, 97,
- 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 98, 0, 0,
- 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 100, 101,
- 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
- 102, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 1, 1, 86, 0,
- 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 105, 0, 73, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 106, 107, 108, 0, 0, 0, 0, 0, 102, 0,
- 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0,
- 0, 0, 0, 0, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,
- 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 112,
- 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0,
- 0, 0, 0, 0, 100, 0, 0, 0, 116, 117, 72, 0, 0, 0, 0, 0,
- 102, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 118,
- 112, 0, 0, 0, 0, 0, 51, 0, 73, 119, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 121, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 122, 0, 47, 0, 0, 26, 123, 123, 0,
- 124, 0, 0, 49, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0,
- 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0,
- 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 67, 0, 97, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0,
- 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0,
- 0, 0, 0, 0, 133, 134, 135, 136, 137, 138, 0, 0, 0, 139, 0, 0,
- 140, 0, 0, 0, 0, 0, 0, 0, 131, 1, 1, 141, 142, 112, 0, 0,
- 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0,
- 100, 144, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_canonical_combining_class_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 51, 45, 45, 45, 45, 51, 43, 45, 45, 45, 45,
- 45, 41, 41, 45, 45, 45, 45, 41, 41, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 1, 1, 1, 1, 1, 45, 45, 45, 45, 50, 50, 50,
- 50, 50, 50, 50, 50, 54, 50, 45, 45, 45, 50, 50, 50, 45, 45, 0,
- 50, 50, 50, 45, 45, 45, 45, 50, 51, 45, 45, 50, 52, 53, 53, 52,
- 53, 53, 52, 50, 50, 50, 50, 50, 0, 0, 0, 50, 50, 50, 50, 50,
- 0, 45, 50, 50, 50, 50, 45, 50, 50, 50, 46, 45, 50, 50, 50, 50,
- 50, 50, 45, 45, 45, 45, 45, 45, 50, 50, 45, 50, 50, 46, 49, 50,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15, 16, 17, 0, 18,
- 0, 19, 20, 0, 50, 45, 0, 13, 25, 26, 27, 0, 0, 0, 0, 0,
- 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, 50, 50, 45, 45, 50,
- 50, 50, 50, 50, 45, 50, 50, 45, 30, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 0, 50,
- 50, 50, 50, 45, 50, 0, 0, 50, 50, 0, 45, 50, 50, 45, 0, 0,
- 0, 31, 0, 0, 0, 0, 0, 0, 50, 45, 50, 50, 45, 50, 50, 45,
- 45, 45, 50, 45, 45, 50, 45, 50, 50, 50, 45, 50, 45, 50, 45, 50,
- 45, 50, 50, 0, 0, 0, 0, 0, 50, 50, 45, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 45, 0, 0, 50, 50, 0, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 0, 50, 50, 50, 0, 50, 50, 50, 50, 50, 0, 0,
- 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 45, 50, 50, 50, 50,
- 50, 50, 0, 45, 50, 50, 45, 50, 50, 45, 50, 50, 50, 45, 45, 45,
- 22, 23, 24, 50, 50, 50, 45, 50, 50, 45, 45, 50, 50, 50, 50, 50,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 50, 45, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 4, 4, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 34, 34, 4, 0, 0, 0, 0, 0,
- 35, 35, 35, 35, 0, 0, 0, 0, 36, 36, 4, 0, 0, 0, 0, 0,
- 37, 37, 37, 37, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 45, 0, 45, 0, 43, 0, 0, 0, 0, 0, 0,
- 0, 38, 39, 0, 40, 0, 0, 0, 0, 0, 39, 39, 39, 39, 0, 0,
- 39, 0, 50, 50, 4, 0, 50, 50, 0, 0, 0, 0, 0, 0, 45, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 50, 50, 0, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 46, 50, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
- 45, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 50, 50, 50, 50, 50, 0, 0, 45, 50, 50, 50, 50, 50, 45, 45, 45,
- 45, 45, 45, 50, 50, 45, 0, 0, 0, 0, 0, 50, 45, 50, 50, 50,
- 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 50, 50, 50, 0, 1, 45, 45, 45,
- 45, 45, 50, 50, 45, 45, 45, 45, 50, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
- 50, 50, 0, 0, 0, 0, 0, 0, 50, 50, 45, 50, 50, 50, 50, 50,
- 50, 50, 45, 50, 50, 53, 42, 45, 41, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 51, 49, 49, 45, 0, 50, 52, 45, 50, 45,
- 50, 50, 1, 1, 50, 50, 50, 50, 1, 1, 1, 50, 50, 0, 0, 0,
- 0, 50, 0, 0, 0, 1, 1, 50, 45, 50, 1, 1, 45, 45, 45, 45,
- 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 44, 49, 51, 46, 47, 47, 0, 3, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 45, 45, 45, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 50, 0, 50, 50, 45, 0, 0, 50, 50, 0, 0, 0, 0, 0, 50, 50,
- 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0,
- 50, 50, 50, 50, 50, 50, 50, 45, 45, 45, 45, 45, 45, 45, 50, 50,
- 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 50,
- 50, 1, 45, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 50, 45, 0,
- 0, 0, 0, 0, 0, 0, 45, 45, 50, 50, 50, 45, 50, 45, 45, 45,
- 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 2, 0, 0, 2, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 2, 0, 0, 0, 50, 50, 50, 50, 50, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 4, 2, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 43, 43, 1,
- 1, 1, 0, 0, 0, 48, 43, 43, 43, 43, 43, 0, 0, 0, 0, 0,
- 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 50, 50, 50,
- 50, 50, 45, 45, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0,
- 0, 0, 50, 50, 50, 0, 0, 0, 50, 0, 0, 50, 50, 50, 50, 50,
- 50, 50, 0, 50, 50, 0, 50, 50, 45, 45, 45, 45, 45, 45, 45, 0,
- 50, 50, 2, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_script(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-/* Canonical_Combining_Class: 3088 bytes. */
-
-RE_UINT32 re_get_canonical_combining_class(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_canonical_combining_class_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_canonical_combining_class_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_canonical_combining_class_stage_3[pos + f] << 3;
- value = re_canonical_combining_class_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-/* Decomposition_Type. */
+ v = re_script_table_1[field_2];
+ v = re_script_table_2[(v << 5) | field_1];
+ v = re_script_table_3[(v << 5) | field_0];
-static RE_UINT8 re_decomposition_type_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 8, 9, 10, 10, 10, 10, 11, 7, 7, 7, 7, 12,
- 7, 7, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 7, 7, 15, 16, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 17,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
+ return v;
+}
-static RE_UINT8 re_decomposition_type_stage_2[] = {
- 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
- 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
- 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0,
- 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0,
- 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 42, 0,
- 0, 43, 0, 0, 0, 43, 44, 0, 45, 0, 46, 47, 48, 49, 0, 0,
- 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* Script_Extensions. */
+static RE_UINT8 script_extensions_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 17, 18, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 21, 21, 34, 35, 21, 21,
+ 21, 36, 21, 21, 21, 21, 21, 21, 21, 21, 37, 38, 39, 39, 39, 39,
+ 39, 40, 41, 42, 21, 21, 21, 21, 21, 21, 21, 21, 43, 21, 21, 44,
+ 21, 21, 21, 21, 45, 46, 47, 21, 48, 21, 49, 50, 51, 52, 53, 21,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 54, 13, 13, 13, 55, 56, 13,
+ 13, 13, 13, 57, 13, 13, 13, 13, 13, 13, 58, 21, 21, 21, 59, 21,
+ 13, 13, 13, 13, 60, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 61, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21
+};
+static RE_UINT16 script_extensions_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 5, 0, 6, 7, 7, 8, 9, 10, 11, 12, 13,
+ 14, 14, 14, 14, 15, 14, 14, 14, 14, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 24, 24, 27, 24, 28, 29, 30, 24, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 39, 85, 86, 87, 39, 88, 88, 89, 90, 91, 92, 93, 39,
+ 94, 94, 95, 94, 94, 96, 97, 98, 99, 99, 99, 99, 99, 99, 99, 99,
+ 100, 100, 101, 100, 102, 103, 104, 100, 105, 100, 106, 107, 108, 109, 109, 110,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 112, 113, 113, 114, 115, 116, 117, 118, 119, 119, 120, 121,
+ 122, 123, 123, 124, 123, 125, 111, 126, 127, 128, 129, 130, 131, 132, 133, 119,
+ 134, 135, 136, 137, 138, 139, 140, 39, 141, 141, 142, 143, 144, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 4, 155, 156, 157, 4, 158, 159, 160,
+ 4, 4, 4, 4, 4, 4, 4, 4, 161, 12, 162, 163, 12, 164, 165, 166,
+ 167, 168, 0, 169, 170, 0, 171, 172, 0, 173, 174, 4, 175, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 176, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 178, 178, 178, 178, 178, 178, 178, 178, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 180, 0, 0, 0,
+ 181, 182, 183, 4, 184, 184, 184, 185, 96, 186, 187, 188, 189, 190, 190, 14,
+ 0, 0, 191, 39, 192, 193, 193, 194, 193, 193, 193, 193, 193, 193, 195, 196,
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 99, 99, 207, 208, 209, 210,
+ 211, 209, 212, 213, 209, 214, 215, 216, 203, 203, 217, 218, 0, 0, 0, 219,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 0, 0,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 220,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 222, 221, 223, 224, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 226, 14, 227, 14, 228, 228, 229, 230, 231, 4, 4, 232, 4, 233, 234,
+ 235, 236, 237, 238, 239, 239, 240, 241, 242, 243, 244, 245, 246, 246, 247, 248,
+ 249, 250, 251, 94, 252, 252, 253, 254, 255, 256, 257, 258, 109, 109, 259, 260,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 261, 262, 263,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 264, 193, 193, 265, 39, 266, 267, 268, 24, 24, 24, 269, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 270, 271, 24, 272, 24, 273, 274,
+ 275, 276, 277, 278, 24, 24, 24, 279, 280, 1, 1, 281, 282, 211, 283, 284,
+ 285, 286, 287, 39, 288, 288, 288, 289, 290, 291, 12, 12, 292, 293, 294, 295,
+ 39, 39, 39, 39, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 39,
+ 307, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 39, 39, 39, 39,
+ 318, 318, 318, 318, 318, 318, 318, 318, 318, 319, 320, 321, 39, 39, 39, 39,
+ 322, 323, 324, 325, 326, 327, 39, 328, 329, 330, 39, 39, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 39, 340, 341, 342, 343, 344, 345, 346, 347, 39, 39,
+ 348, 348, 349, 39, 350, 351, 350, 352, 353, 354, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 355, 356, 357, 39, 39, 358, 359, 360, 39, 39, 361, 362, 363,
+ 364, 364, 365, 366, 367, 367, 368, 369, 370, 371, 372, 373, 374, 374, 374, 375,
+ 376, 377, 39, 39, 378, 379, 380, 381, 382, 383, 384, 385, 39, 39, 39, 39,
+ 386, 386, 387, 388, 389, 389, 390, 39, 39, 39, 39, 39, 391, 392, 393, 39,
+ 394, 394, 395, 396, 397, 398, 399, 39, 400, 401, 39, 39, 39, 39, 39, 39,
+ 402, 403, 39, 39, 39, 404, 404, 405, 406, 407, 408, 39, 39, 409, 410, 411,
+ 412, 412, 413, 414, 414, 415, 416, 417, 39, 39, 39, 39, 39, 39, 39, 39,
+ 418, 419, 420, 421, 422, 423, 39, 39, 424, 425, 426, 427, 428, 429, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 430, 39, 39, 39, 39, 39, 431, 432, 433,
+ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 435, 39, 39, 39,
+ 434, 434, 434, 436, 434, 434, 434, 434, 434, 434, 437, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
+ 438, 439, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440,
+ 440, 440, 441, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 442, 443, 444, 39, 39, 445, 446, 447, 447, 448, 449, 450, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 451, 451, 452, 39, 39, 39, 453, 453, 454, 453, 455, 39, 39, 456,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 458,
+ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457,
+ 457, 457, 457, 457, 457, 457, 457, 457, 459, 459, 459, 459, 459, 459, 459, 459,
+ 459, 459, 459, 459, 459, 459, 460, 39, 461, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 462, 200, 200, 200, 200, 200, 200, 200, 463, 39, 464, 465, 466, 466, 466, 466,
+ 466, 466, 466, 466, 466, 466, 466, 467, 39, 39, 39, 39, 39, 39, 39, 39,
+ 468, 468, 468, 469, 470, 471, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 474, 475, 476, 0, 477,
+ 12, 12, 478, 39, 39, 39, 39, 479, 0, 0, 480, 481, 39, 39, 39, 39,
+ 0, 0, 482, 0, 483, 484, 485, 0, 486, 487, 488, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0,
+ 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+ 491, 491, 491, 491, 492, 493, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 494, 495, 39, 39, 39, 39, 39, 39, 496, 497, 498, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 499, 500, 39, 39, 39, 39, 39, 39, 39, 39,
+ 501, 501, 501, 501, 501, 501, 502, 39, 503, 503, 504, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 505, 0, 506, 39, 39, 280, 507, 39, 39, 39, 39, 39, 39,
+ 508, 509, 510, 511, 512, 513, 39, 514, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 515, 0, 0, 479, 516, 517, 472, 0, 0, 0, 0, 0, 518, 39, 519,
+ 520, 521, 522, 523, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 524, 525, 0, 0, 0, 479, 0, 0, 526, 527,
+ 515, 0, 528, 0, 529, 530, 39, 39, 0, 0, 0, 531, 0, 0, 532, 0,
+ 0, 0, 479, 533, 534, 535, 536, 39, 0, 0, 0, 0, 537, 0, 177, 538,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 539, 39, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 540, 193, 193, 193, 193, 193, 193,
+ 539, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 541, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 542,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 539, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 543, 39, 39, 39, 39, 39,
+ 544, 0, 0, 0, 39, 39, 39, 39, 7, 7, 7, 7, 7, 7, 7, 545,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39
+};
+static RE_UINT8 script_extensions_table_3[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 158, 4, 4, 158, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 5, 5, 5, 5, 1, 5, 5, 5, 0, 0, 5, 5, 5, 5, 1, 5,
+ 0, 0, 0, 0, 5, 1, 5, 1, 5, 5, 5, 0, 5, 0, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 160, 161, 162, 162, 161, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9,
+ 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 1, 10, 10, 10, 10, 10, 10, 163, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 163, 164, 0, 10, 163,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 165, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 10, 10, 10, 10, 10, 10,
+ 166, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 168, 10, 10, 10, 10, 10, 10, 10, 10, 1, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 169, 170, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 171, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17,
+ 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17,
+ 17, 0, 17, 0, 0, 0, 17, 17, 17, 17, 0, 0, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 17, 0,
+ 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 0, 17,
+ 17, 17, 17, 17, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18,
+ 18, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18,
+ 18, 0, 18, 18, 0, 18, 18, 0, 18, 18, 0, 0, 18, 0, 18, 18,
+ 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0,
+ 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 18, 0,
+ 0, 0, 0, 0, 0, 0, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19,
+ 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19,
+ 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 19, 19, 19, 0, 0, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 19, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19,
+ 0, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 20,
+ 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20,
+ 20, 0, 20, 20, 0, 20, 20, 20, 20, 20, 0, 0, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 0, 0, 20, 20, 0, 0, 20, 20, 20, 0, 0,
+ 0, 0, 0, 0, 0, 20, 20, 20, 0, 0, 0, 0, 20, 20, 0, 20,
+ 20, 20, 20, 20, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 21, 21, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 0, 21, 21, 21, 21, 0, 0, 0, 21, 21, 0, 21, 0, 21, 21,
+ 0, 0, 0, 21, 21, 0, 0, 0, 21, 21, 21, 0, 0, 0, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 21, 21,
+ 21, 21, 21, 0, 0, 0, 21, 21, 21, 0, 21, 21, 21, 21, 0, 0,
+ 21, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22,
+ 22, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22,
+ 22, 22, 22, 22, 22, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0,
+ 0, 0, 0, 0, 0, 22, 22, 0, 22, 22, 22, 0, 0, 0, 0, 0,
+ 22, 22, 22, 22, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23,
+ 23, 0, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 0, 23, 23, 23, 23, 23, 0, 0, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 0, 23, 23, 23, 0, 23, 23, 23, 23, 0, 0,
+ 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 23, 0,
+ 23, 23, 23, 23, 0, 0, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
+ 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 24, 24,
+ 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 0, 24, 24, 24, 0, 24, 24, 24, 24, 24, 24,
+ 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 0, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0,
+ 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 0, 0, 0, 0, 25,
+ 25, 25, 25, 25, 25, 0, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 0, 0, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 1,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+ 0, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 27, 27, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 0,
+ 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 28, 28,
+ 28, 28, 28, 28, 28, 1, 1, 1, 1, 28, 28, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 180, 30, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 0, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 0, 0, 33, 33, 33, 33, 33, 33, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 1, 1, 1, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 37, 37,
+ 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 181, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40,
+ 40, 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0,
+ 42, 42, 182, 182, 42, 182, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0,
+ 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0,
+ 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0, 0, 0,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 45, 45,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 46, 46,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 30, 30, 30,
+ 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 183, 184, 183, 185, 184, 186, 186, 187, 186, 187, 188, 184, 187, 187, 184, 184,
+ 187, 186, 184, 184, 184, 184, 184, 184, 184, 189, 186, 184, 184, 186, 184, 184,
+ 184, 184, 190, 185, 191, 186, 186, 192, 185, 185, 193, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
+ 5, 5, 2, 2, 2, 2, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
+ 158, 158, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 194, 4, 0, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 5, 0, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 195,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
- 60, 60, 60, 60, 61, 60, 60, 62, 63, 60, 64, 65, 60, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 0, 0, 75, 76, 77, 78, 79, 80, 81, 0,
- 82, 83, 84, 85, 86, 87, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 78, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6,
+ 30, 30, 30, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 30, 0, 0,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55,
+ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 1, 1, 1, 161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 197, 197, 198, 1, 56, 199, 56, 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 1, 198, 197, 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198,
+ 1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 200, 200, 200, 200, 31, 31,
+ 198, 201, 201, 201, 201, 201, 1, 198, 56, 56, 56, 56, 202, 202, 199, 199,
+ 0, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 0, 0, 201, 201, 201, 201, 57, 57, 57,
+ 201, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 197, 201, 58, 58, 58,
+ 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0,
+ 199, 199, 199, 199, 199, 199, 199, 199, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 1,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 1, 1, 1,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 199,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 94, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 0, 0, 43, 78, 78, 78, 78, 78, 78, 100, 0,
- 101, 102, 103, 104, 105, 103, 104, 106, 0, 107, 78, 78, 108, 0, 0, 0,
- 109, 78, 110, 111, 92, 92, 112, 113, 114, 114, 115, 116, 114, 114, 114, 117,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 161,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 203, 203, 203, 203, 203, 203, 203, 203, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 0,
+ 204, 204, 204, 205, 205, 205, 206, 206, 206, 206, 0, 0, 0, 0, 0, 0,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 186, 16, 207, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 208, 66,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 209,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 0, 68, 68,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 0, 69, 69, 69, 69,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, 32, 32, 32, 32, 0,
+ 0, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 0,
+ 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 210, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 210, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 198, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 197, 197, 197, 197, 197, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 201, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 201, 201,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 31, 31, 31,
+ 0, 0, 31, 31, 31, 31, 31, 31, 0, 0, 31, 31, 31, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 72, 72, 0, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 0, 0, 0, 0, 0,
+ 211, 211, 211, 0, 0, 0, 0, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 0, 0, 0, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 0, 0,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 0, 0, 0, 0,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 0, 78,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 87, 87, 0, 0, 87, 0, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 0, 87, 87, 0, 0, 0, 87, 0, 0, 87,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 0, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 0, 91, 91, 0, 0, 0, 0, 0, 91, 91, 91, 91, 91,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, 93,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 96, 96, 96, 96, 0, 96, 96, 0, 0, 0, 0, 0, 96, 96, 96, 96,
+ 96, 96, 96, 96, 0, 96, 96, 96, 0, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 0, 0, 96, 96, 96, 0, 0, 0, 0, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100, 100, 100, 100, 100, 100,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, 101, 101,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, 103, 103, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0, 0, 0,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 0, 0,
+ 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 0, 0,
+ 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0, 0,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, 0, 0, 0, 0,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0,
+ 119, 119, 119, 119, 119, 119, 119, 0, 119, 0, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0,
+ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, 0, 0, 0,
+ 121, 177, 121, 177, 0, 121, 121, 121, 121, 121, 121, 121, 121, 0, 0, 121,
+ 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 0, 121, 121, 121, 121, 121, 121,
+ 121, 0, 121, 121, 0, 121, 121, 121, 121, 121, 0, 177, 177, 121, 121, 121,
+ 121, 121, 121, 121, 121, 0, 0, 121, 121, 0, 0, 121, 121, 121, 0, 0,
+ 121, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 121, 121, 121,
+ 121, 121, 121, 121, 0, 0, 121, 121, 121, 121, 121, 121, 121, 0, 0, 0,
+ 121, 121, 121, 121, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122,
+ 122, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 0, 0, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 130, 0, 0, 130, 130, 130, 130,
+ 130, 130, 130, 130, 0, 130, 130, 0, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 130, 130, 0, 0, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131, 131, 131,
+ 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
+ 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136, 0, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 0, 137, 137, 0, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 137, 0, 137, 137, 0, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 0, 138, 138, 0, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0,
+ 138, 138, 0, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 177, 177, 21, 177, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0,
+ 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, 0,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, 143, 143,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0,
+ 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 145, 145, 145, 145, 145,
+ 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 148, 149, 1, 1, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0, 0,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+ 150, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120,
+ 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 58, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 0, 0, 0, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 0, 0, 151, 151, 151, 151,
+ 214, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 122, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, 60,
- 123, 124, 60, 125, 60, 60, 62, 0, 126, 127, 128, 129, 130, 131, 132, 133,
- 134, 134, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
- 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 157, 158, 159, 160, 161, 162,
- 0, 0, 0, 0, 163, 164, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 170, 0, 171, 172, 0,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 173, 173, 174, 173, 175, 176, 177, 173, 178, 179, 180, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 181, 173, 173, 173, 173, 173, 173, 173, 173, 182, 173,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
+ 199, 199, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152,
+ 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54,
+ 54, 54, 0, 54, 54, 0, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 0, 0, 0, 153, 153,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 154,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 0, 0, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, 0, 0, 156, 156,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0, 10, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 10, 0, 10, 0, 10, 0, 10, 10, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10,
+ 0, 10, 10, 0, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 0, 10, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 57, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 199, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 177, 183, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, 191, 192, 0, 0, 0,
- 193, 194, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+static RE_UINT16 script_extensions_table_4[] = {
+ 0, 2, 4, 7, 10, 13, 19, 23, 32, 35, 39, 42, 56, 69, 90, 112,
+ 117, 121, 124, 127, 130, 133, 137, 140, 145, 148, 153, 155, 158, 161, 164, 171,
+ 174, 183, 187, 189, 191, 194, 197, 201, 208, 214, 216, 219, 222, 226, 229, 244,
+ 258, 270, 273, 277, 280, 283, 286, 290, 293
+};
+static RE_UINT8 script_extensions_table_5[] = {
+ 5, 0, 2, 0, 7, 77, 0, 7, 54, 0, 7, 2, 0, 10, 106, 11,
+ 12, 107, 0, 10, 11, 12, 0, 156, 10, 15, 99, 103, 106, 109, 11, 0,
+ 10, 11, 0, 10, 12, 107, 0, 10, 106, 0, 17, 16, 121, 19, 18, 23,
+ 2, 24, 20, 117, 21, 22, 123, 0, 17, 16, 121, 19, 18, 23, 2, 24,
+ 20, 21, 22, 123, 0, 17, 16, 128, 138, 137, 121, 19, 18, 23, 116, 24,
+ 131, 20, 120, 25, 63, 126, 21, 22, 123, 0, 17, 16, 128, 138, 137, 121,
+ 19, 18, 23, 43, 116, 24, 131, 20, 120, 25, 63, 126, 21, 22, 123, 0,
+ 16, 128, 113, 116, 0, 17, 115, 63, 0, 18, 119, 0, 19, 118, 0, 121,
+ 21, 0, 23, 131, 0, 115, 29, 44, 0, 30, 2, 0, 39, 38, 40, 37,
+ 0, 42, 64, 0, 17, 16, 121, 23, 0, 16, 0, 16, 121, 0, 17, 16,
+ 0, 16, 117, 0, 16, 23, 24, 20, 21, 22, 0, 16, 131, 0, 17, 16,
+ 121, 23, 131, 20, 22, 123, 0, 16, 121, 23, 0, 17, 0, 131, 0, 7,
+ 11, 0, 2, 42, 0, 16, 121, 2, 0, 3, 31, 56, 57, 58, 59, 0,
+ 3, 31, 56, 57, 58, 0, 56, 0, 3, 56, 0, 57, 58, 0, 56, 57,
+ 58, 0, 56, 2, 0, 16, 128, 19, 18, 118, 23, 113, 116, 24, 125, 131,
+ 120, 126, 123, 0, 16, 128, 19, 18, 118, 23, 113, 116, 125, 131, 120, 126,
+ 123, 0, 16, 128, 19, 18, 118, 113, 116, 125, 120, 126, 123, 0, 16, 21,
+ 0, 66, 2, 29, 0, 46, 68, 0, 10, 12, 0, 87, 72, 0, 87, 86,
+ 72, 0, 10, 6, 0, 151, 0
+};
+
+int re_get_script_extensions(RE_UINT32 codepoint, RE_UINT8* scripts) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+ int offset;
+ int count;
-static RE_UINT8 re_decomposition_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 7,
- 8, 9, 8, 8, 10, 11, 10, 12, 8, 9, 8, 8, 10, 11, 10, 9,
- 8, 8, 8, 8, 13, 8, 8, 8, 8, 12, 8, 8, 14, 8, 10, 15,
- 16, 8, 17, 8, 12, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 15,
- 12, 0, 0, 18, 19, 0, 0, 0, 0, 20, 20, 21, 8, 8, 8, 22,
- 8, 13, 8, 8, 23, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13,
- 0, 13, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 24, 24, 25, 0,
- 0, 0, 0, 0, 0, 0, 20, 5, 24, 25, 0, 0, 0, 0, 0, 0,
- 9, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 26, 27,
- 0, 21, 11, 22, 19, 0, 0, 0, 0, 0, 13, 8, 19, 0, 0, 0,
- 0, 0, 13, 11, 28, 29, 0, 0, 0, 0, 0, 0, 30, 5, 31, 0,
- 9, 18, 0, 11, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 9, 18, 0, 11, 0, 0, 0, 0, 0, 13, 0, 0,
- 33, 0, 0, 0, 8, 13, 13, 8, 13, 8, 13, 8, 8, 12, 12, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 13, 11, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 34, 35, 0, 36, 0, 0, 0, 18, 0, 0, 0,
- 0, 0, 32, 0, 32, 19, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
- 0, 0, 18, 19, 0, 0, 0, 9, 0, 0, 0, 0, 18, 27, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 27, 0, 0, 37, 19, 0, 0, 0, 12,
- 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 13, 19, 0, 0, 0, 0,
- 0, 0, 19, 0, 0, 0, 0, 0, 19, 18, 22, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 27, 11, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0,
- 18, 0, 0, 32, 27, 18, 0, 19, 0, 0, 32, 0, 18, 38, 17, 0,
- 32, 0, 0, 0, 18, 0, 0, 32, 27, 18, 0, 19, 0, 0, 32, 0,
- 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
- 0, 27, 36, 36, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 32,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 24, 24, 39, 24,
- 24, 24, 24, 40, 24, 24, 24, 24, 41, 42, 43, 0, 0, 0, 25, 0,
- 0, 0, 0, 0, 0, 0, 44, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 45, 0,
- 8, 8, 8, 8, 8, 8, 12, 0, 8, 8, 8, 8, 8, 12, 8, 12,
- 8, 12, 8, 12, 8, 8, 46, 46, 8, 8, 8, 8, 8, 8, 8, 12,
- 8, 8, 8, 8, 8, 22, 8, 47, 21, 22, 8, 8, 8, 13, 8, 10,
- 8, 8, 8, 8, 13, 22, 8, 48, 49, 50, 30, 0, 51, 3, 0, 0,
- 0, 30, 0, 52, 3, 53, 0, 54, 0, 3, 5, 0, 0, 3, 0, 3,
- 0, 0, 0, 0, 55, 24, 24, 24, 42, 42, 42, 43, 42, 42, 42, 56,
- 0, 0, 35, 0, 0, 0, 0, 0, 57, 34, 58, 59, 59, 60, 61, 62,
- 63, 64, 65, 66, 66, 67, 68, 59, 69, 61, 62, 0, 70, 70, 70, 70,
- 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 71, 0, 0, 0, 13, 0,
- 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
- 0, 19, 32, 19, 0, 0, 0, 0, 0, 36, 0, 72, 35, 0, 0, 0,
- 32, 37, 32, 0, 0, 0, 0, 0, 36, 0, 0, 10, 12, 12, 12, 0,
- 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
- 8, 0, 13, 12, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
- 73, 73, 73, 73, 73, 20, 20, 20, 20, 20, 20, 20, 20, 74, 73, 73,
- 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 75, 0, 0, 0, 0, 0,
- 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 76,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 20, 20, 20, 20, 20, 5, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 26, 30, 0, 0, 0, 0, 36, 36, 36, 36, 36,
- 36, 46, 32, 0, 9, 22, 33, 12, 0, 0, 0, 0, 0, 19, 3, 78,
- 0, 0, 0, 0, 0, 37, 11, 79, 0, 0, 0, 0, 34, 20, 20, 20,
- 20, 20, 20, 30, 4, 24, 24, 24, 20, 20, 20, 20, 20, 20, 20, 30,
- 20, 73, 0, 0, 80, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 75,
- 20, 20, 20, 81, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 82,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 20, 20,
- 20, 20, 20, 20, 83, 81, 81, 81, 20, 20, 20, 20, 20, 20, 20, 84,
- 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 24,
- 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, 36, 10, 8, 11,
- 36, 33, 13, 8, 8, 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8,
- 20, 30, 0, 0, 3, 20, 0, 46, 59, 59, 85, 8, 8, 11, 8, 36,
- 9, 22, 8, 15, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 86, 86, 86, 87, 87, 87, 87, 88, 86, 87, 87, 89, 0, 0, 0,
- 0, 0, 0, 0, 90, 91, 92, 93, 86, 88, 87, 86, 86, 86, 94, 88,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 99, 100, 100, 100, 100, 100, 101, 95, 95,
- 95, 95, 95, 95, 102, 96, 96, 96, 96, 96, 96, 103, 98, 100, 100, 104,
- 0, 0, 0, 0, 105, 98, 106, 107, 108, 106, 109, 106, 105, 97, 96, 106,
- 97, 110, 111, 98, 112, 107, 113, 106, 96, 96, 96, 96, 96, 107, 114, 96,
- 97, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, 95, 115,
- 0, 0, 0, 0, 116, 116, 117, 0, 0, 0, 0, 0, 116, 116, 116, 116,
- 116, 118, 119, 20, 120, 121, 121, 121, 121, 120, 121, 0, 122, 123, 124, 124,
- 125, 92, 126, 127, 91, 126, 128, 128, 128, 128, 127, 92, 126, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 126, 127, 92, 129,
- 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
- 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 134, 135, 133, 135, 133, 135, 133, 135, 136,
- 131, 137, 133, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 19,
- 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
- 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 36,
- 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 13,
- 8, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 8,
- 19, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 138, 59, 59, 59, 59, 59, 59, 59, 59, 59, 138,
- 139, 140, 61, 138, 59, 59, 66, 61, 59, 61, 59, 59, 59, 59, 59, 59,
- 59, 66, 141, 61, 59, 138, 59, 138, 59, 59, 59, 59, 59, 59, 66, 141,
- 59, 142, 143, 59, 138, 59, 59, 59, 59, 62, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 143, 59, 59, 59, 59, 140, 144, 61, 59, 141, 59, 145, 0,
- 139, 146, 145, 61, 140, 144, 145, 145, 140, 144, 141, 59, 141, 59, 61, 142,
- 59, 59, 66, 59, 59, 59, 59, 0, 61, 61, 66, 59, 59, 59, 59, 0,
- 20, 20, 30, 0, 20, 20, 20, 20, 20, 20, 147, 75, 81, 81, 81, 81,
- 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 4, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 0, 20, 20, 35, 0, 150, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_decomposition_type_stage_4[] = {
- 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 10, 0, 0, 0, 0, 2,
- 0, 0, 10, 10, 2, 2, 0, 0, 2, 10, 10, 0, 17, 17, 17, 0,
- 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 1, 1, 1, 2,
- 2, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2,
- 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0,
- 2, 2, 2, 1, 1, 2, 2, 0, 2, 2, 2, 0, 0, 2, 0, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 2, 10, 10, 10, 0,
- 10, 10, 0, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
- 0, 0, 0, 10, 1, 1, 2, 1, 0, 1, 0, 1, 1, 2, 1, 2,
- 1, 1, 2, 0, 1, 1, 2, 2, 2, 2, 2, 4, 0, 4, 0, 0,
- 0, 0, 0, 4, 2, 0, 2, 2, 2, 0, 2, 0, 10, 10, 0, 0,
- 11, 0, 0, 0, 2, 2, 3, 2, 0, 2, 3, 3, 3, 3, 3, 3,
- 0, 3, 2, 0, 0, 3, 3, 3, 3, 3, 0, 0, 10, 2, 10, 0,
- 3, 0, 1, 0, 3, 0, 1, 1, 3, 3, 0, 3, 3, 2, 2, 2,
- 2, 3, 0, 2, 3, 0, 0, 0, 17, 17, 17, 17, 0, 17, 0, 0,
- 2, 2, 0, 2, 9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 0,
- 11, 10, 0, 0, 13, 0, 0, 0, 2, 0, 1, 12, 0, 0, 1, 12,
- 16, 9, 9, 9, 16, 16, 16, 16, 9, 9, 9, 16, 2, 16, 16, 16,
- 2, 2, 2, 16, 3, 3, 1, 1, 8, 7, 8, 7, 5, 6, 8, 7,
- 8, 7, 5, 6, 8, 7, 0, 0, 0, 0, 0, 8, 7, 5, 6, 8,
- 7, 8, 7, 8, 7, 8, 8, 7, 5, 8, 7, 5, 8, 8, 8, 8,
- 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6,
- 6, 6, 6, 6, 6, 8, 8, 8, 8, 7, 7, 7, 7, 5, 5, 5,
- 7, 8, 0, 0, 5, 7, 5, 5, 7, 5, 7, 7, 5, 5, 7, 7,
- 5, 5, 7, 5, 5, 7, 7, 5, 7, 7, 5, 7, 5, 5, 5, 7,
- 0, 0, 5, 5, 5, 7, 7, 7, 5, 7, 5, 7, 8, 0, 0, 0,
- 12, 12, 12, 12, 12, 12, 0, 0, 12, 0, 0, 12, 12, 2, 2, 2,
- 15, 15, 15, 0, 15, 15, 15, 15, 8, 6, 8, 0, 8, 0, 8, 6,
- 8, 6, 8, 6, 8, 8, 7, 8, 7, 8, 7, 5, 6, 8, 7, 8,
- 6, 8, 7, 5, 7, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13,
- 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14,
- 14, 0, 0, 0, 13, 13, 13, 0, 3, 0, 3, 3, 0, 0, 3, 0,
- 0, 3, 3, 0, 3, 3, 3, 0, 3, 0, 3, 0, 0, 0, 3, 3,
- 3, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 2, 2, 2, 9,
- 16, 0, 0, 0, 16, 16, 16, 0, 9, 9, 0, 0,
-};
+ v = script_extensions_table_1[field_2];
+ v = script_extensions_table_2[(v << 5) | field_1];
+ v = script_extensions_table_3[(v << 5) | field_0];
+
+ if (v < 158) {
+ scripts[0] = v;
-/* Decomposition_Type: 3868 bytes. */
-
-RE_UINT32 re_get_decomposition_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_decomposition_type_stage_1[f] << 6;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_decomposition_type_stage_2[pos + f] << 3;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_decomposition_type_stage_3[pos + f] << 2;
- value = re_decomposition_type_stage_4[pos + code];
-
- return value;
+ return 1;
+ }
+
+ offset = script_extensions_table_4[v - 158];
+ count = 0;
+
+ do {
+ scripts[count] = script_extensions_table_5[offset + count];
+ ++count;
+ } while (script_extensions_table_5[offset + count] != 0);
+
+ return count;
}
-/* East_Asian_Width. */
+/* Sentence_Break. */
+static RE_UINT8 re_sentence_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 19, 19, 13, 32, 19, 19,
+ 19, 33, 19, 19, 19, 19, 19, 19, 19, 19, 34, 35, 13, 13, 13, 13,
+ 13, 36, 13, 37, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 19, 39,
+ 19, 19, 19, 19, 40, 41, 42, 19, 43, 19, 44, 45, 46, 47, 48, 19,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 49, 13, 13, 13, 50, 51, 13,
+ 13, 13, 13, 52, 13, 13, 13, 13, 13, 13, 53, 19, 19, 19, 54, 19,
+ 13, 13, 13, 13, 55, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 56, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19
+};
-static RE_UINT8 re_east_asian_width_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 7, 8, 9,
- 10, 10, 10, 10, 10, 10, 11, 5, 12, 10, 10, 13, 10, 10, 10, 14,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15,
+static RE_UINT16 re_sentence_break_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 8, 16, 17, 18, 19, 20, 21, 22, 23, 23, 23, 24, 25, 26, 27, 28,
+ 29, 30, 18, 8, 31, 8, 32, 8, 8, 33, 34, 18, 35, 36, 37, 38,
+ 39, 40, 41, 42, 40, 40, 43, 44, 45, 46, 47, 40, 40, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 72, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 55, 101, 102, 103, 55, 104, 105, 106, 107, 108, 109, 110, 55,
+ 40, 111, 112, 113, 114, 29, 115, 116, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 117, 40, 118, 119, 120, 40, 121, 40, 122, 123, 124, 29, 29, 125,
+ 98, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 126, 127, 40, 40, 128, 129, 130, 131, 132, 40, 133, 134, 135,
+ 136, 40, 40, 137, 138, 139, 40, 140, 141, 142, 143, 144, 40, 145, 146, 55,
+ 147, 40, 148, 149, 150, 151, 152, 55, 153, 133, 154, 155, 156, 157, 40, 158,
+ 40, 159, 160, 161, 162, 163, 164, 165, 18, 18, 18, 18, 18, 18, 23, 166,
+ 8, 8, 8, 8, 167, 8, 8, 8, 168, 169, 170, 171, 169, 172, 173, 174,
+ 175, 176, 177, 178, 179, 55, 180, 181, 182, 183, 184, 30, 185, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 186, 187, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 188, 30, 189, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 190, 191, 55, 55, 192, 193,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 194, 55, 195, 196,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 29, 197, 198, 199, 8, 8, 8, 200, 18, 201, 40, 202, 203, 204, 204, 23,
+ 205, 206, 207, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 208, 209, 98, 40, 210, 98, 40, 116, 211, 212, 40, 40, 213, 40, 55, 214,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 215,
+ 40, 40, 40, 40, 216, 55, 214, 217, 40, 40, 40, 40, 40, 40, 40, 40,
+ 218, 219, 8, 220, 221, 40, 40, 222, 223, 224, 8, 225, 226, 227, 228, 229,
+ 230, 231, 40, 232, 233, 133, 234, 235, 49, 236, 237, 215, 59, 238, 239, 240,
+ 40, 241, 242, 243, 40, 244, 245, 246, 247, 248, 249, 250, 18, 18, 40, 251,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 252, 253, 254,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 255, 40, 40, 256, 55, 257, 258, 259, 40, 40, 260, 261, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 262, 214, 40, 263, 40, 264, 265,
+ 266, 267, 268, 269, 40, 40, 40, 270, 271, 2, 272, 273, 274, 141, 275, 276,
+ 277, 278, 279, 55, 40, 40, 40, 280, 55, 55, 40, 281, 55, 55, 55, 282,
+ 55, 55, 55, 55, 215, 40, 283, 152, 40, 284, 285, 286, 287, 40, 288, 55,
+ 29, 289, 290, 40, 287, 291, 292, 293, 40, 294, 40, 295, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 203, 140, 264, 55, 55, 55, 55,
+ 296, 297, 140, 203, 141, 55, 55, 298, 140, 256, 55, 55, 40, 299, 55, 55,
+ 300, 301, 302, 215, 215, 55, 106, 303, 40, 140, 140, 304, 260, 55, 55, 55,
+ 40, 40, 305, 55, 29, 306, 18, 307, 40, 308, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 40, 309, 55, 55, 215, 310, 311, 55, 55, 214, 312, 203,
+ 156, 313, 314, 315, 156, 316, 317, 318, 156, 319, 320, 321, 156, 238, 322, 55,
+ 323, 324, 55, 55, 325, 326, 327, 328, 329, 330, 331, 332, 55, 55, 55, 55,
+ 40, 333, 334, 335, 40, 46, 336, 55, 55, 55, 55, 55, 40, 337, 338, 55,
+ 40, 46, 339, 55, 40, 340, 135, 55, 122, 341, 55, 55, 55, 55, 55, 55,
+ 40, 342, 55, 55, 55, 29, 18, 343, 344, 345, 346, 55, 55, 347, 348, 349,
+ 350, 351, 352, 40, 353, 55, 40, 137, 55, 55, 55, 55, 55, 55, 55, 55,
+ 354, 355, 356, 357, 358, 359, 55, 55, 360, 361, 362, 363, 364, 135, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 365, 55, 55, 55, 55, 55, 366, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 256, 55, 55, 55,
+ 40, 40, 40, 213, 40, 40, 40, 40, 40, 40, 295, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 367, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 368, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 137, 141, 369, 55, 55, 214, 370, 40, 371, 372, 373, 124, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 29, 18, 374, 55, 55, 55, 40, 40, 375, 23, 376, 55, 55, 377,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 378,
+ 40, 40, 40, 40, 40, 40, 140, 55, 305, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 141, 55, 379, 380, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 254, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 381, 382, 383, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 384, 385, 386, 55, 55,
+ 55, 55, 387, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 388, 389, 401,
+ 391, 402, 403, 404, 395, 405, 406, 407, 408, 409, 410, 197, 411, 412, 413, 414,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 23, 415, 23, 416, 417, 418, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 419, 420, 55, 55, 55, 55, 55, 55, 40, 421, 422, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 40, 423, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 424, 55, 29, 425, 426, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 427, 428, 429, 430, 431, 432, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 433, 434, 434, 435, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 436, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 437,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 287, 55, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 281, 40, 40, 40, 40, 40, 40,
+ 287, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 438, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 439,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 287, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 54, 55, 55, 55, 55, 55,
+ 440, 23, 23, 23, 55, 55, 55, 55, 23, 23, 23, 23, 23, 23, 23, 441,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55
+};
+
+static RE_UINT8 re_sentence_break_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 4, 5, 0, 0, 0, 0, 5, 5, 5, 0, 0, 6, 6, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 0, 0, 0, 0, 4,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 0, 5, 0, 0,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5, 0, 12, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 10, 9, 10, 9, 10, 9, 10, 9,
+ 10, 9, 10, 9, 10, 9, 10, 9, 10, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 9, 10, 9, 10, 9, 10, 10,
+ 10, 9, 9, 10, 9, 10, 9, 9, 10, 9, 9, 9, 10, 10, 9, 9,
+ 9, 9, 10, 9, 9, 10, 9, 9, 9, 10, 10, 10, 9, 9, 10, 9,
+ 9, 10, 9, 10, 9, 10, 9, 9, 10, 9, 10, 10, 9, 10, 9, 9,
+ 10, 9, 9, 9, 10, 9, 10, 9, 9, 10, 10, 13, 9, 10, 10, 10,
+ 13, 13, 13, 13, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 10, 9,
+ 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 9, 9, 10, 9, 10, 9, 9, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 9, 9, 10, 9, 9, 10,
+ 10, 9, 10, 9, 9, 9, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13,
+ 10, 10, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 13, 0, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 9, 10, 9, 10, 13, 0, 9, 10, 0, 0, 10, 10, 10, 10, 0, 9,
+ 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 0, 9, 0, 9, 9,
+ 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
+ 10, 10, 9, 9, 9, 10, 10, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 10, 10, 9, 10, 0, 9, 10, 9, 9, 10, 10, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 10, 0, 14, 14, 14, 14, 14, 14, 14, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 0, 0, 13, 0, 0, 0, 6, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 0, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14,
+ 0, 14, 14, 0, 14, 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 13,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 12, 0, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 0, 13, 13,
+ 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 4, 13, 14, 14, 14, 14, 14, 14, 14, 12, 0, 14,
+ 14, 14, 14, 14, 14, 13, 13, 14, 14, 0, 14, 14, 14, 14, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 0, 0, 13,
+ 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+ 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 13, 13, 0, 0, 6, 4, 13, 0, 0, 14, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 13, 14, 14, 14, 13, 14, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 13, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 0, 0, 0, 13, 13, 13, 13, 0, 0, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 13, 13, 0, 13,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 0, 13, 13, 0, 13, 13, 0, 0, 14, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 14, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 0, 13, 0,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 14, 14, 13, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13,
+ 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 13, 13, 0, 13,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 13, 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 0, 0, 0, 13, 13, 0, 13, 0, 13, 13,
+ 0, 0, 0, 13, 13, 0, 0, 0, 13, 13, 13, 0, 0, 0, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 0, 0, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 13, 0,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 13, 0,
+ 0, 0, 0, 0, 13, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 13,
+ 13, 13, 14, 14, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13,
+ 0, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 14, 0, 0, 0, 0, 14,
+ 14, 14, 14, 14, 14, 0, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 13, 13, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 0, 13, 0, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 0, 0,
+ 13, 13, 13, 13, 13, 0, 13, 0, 14, 14, 14, 14, 14, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 13, 13, 13, 13,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 14, 0, 14, 5, 5, 5, 5, 14, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 13, 13, 13, 13, 13, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 13, 13, 13, 13, 14, 14,
+ 14, 13, 14, 14, 14, 13, 13, 14, 14, 14, 14, 14, 14, 14, 13, 13,
+ 13, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 14, 14, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 0,
+ 13, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 14, 14, 14,
+ 0, 0, 4, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 4, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 5, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 13, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13,
+ 13, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 13, 0, 0, 0, 0, 13, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 4, 0, 0, 0, 0, 6, 4, 0, 14, 14, 14, 12, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 4, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0, 0, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 4, 4, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 4,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 14, 13, 13,
+ 13, 13, 13, 13, 14, 13, 13, 14, 14, 14, 13, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 0, 9, 0, 9, 0, 9, 0, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 0, 10, 10, 9, 9, 9, 9, 9, 0, 10, 0,
+ 0, 0, 10, 10, 10, 0, 10, 10, 9, 9, 9, 9, 9, 0, 0, 0,
+ 10, 10, 10, 10, 0, 0, 10, 10, 9, 9, 9, 9, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 0, 0, 0,
+ 0, 0, 10, 10, 10, 0, 10, 10, 9, 9, 9, 9, 9, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 14, 14, 12, 12,
+ 0, 0, 0, 6, 6, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 7, 0, 0, 0, 11, 11, 12, 12, 12, 12, 12, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 4, 4, 0, 0,
+ 0, 0, 0, 0, 0, 5, 5, 4, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 10, 9, 9, 9, 10, 10,
+ 9, 9, 9, 10, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0,
+ 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 9, 0, 10,
+ 9, 9, 9, 9, 10, 13, 13, 13, 13, 10, 0, 0, 10, 10, 9, 9,
+ 0, 0, 0, 0, 0, 9, 10, 10, 10, 10, 0, 0, 0, 0, 10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 9, 10, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 9, 10, 9, 9, 9, 10, 10, 9, 10, 9, 10, 9, 10, 9, 9, 9,
+ 9, 10, 9, 10, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9,
+ 9, 10, 9, 10, 10, 0, 0, 0, 0, 0, 0, 9, 10, 9, 10, 14,
+ 14, 14, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 10, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 4, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 6, 4, 0, 0, 13, 13, 13, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
+ 0, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 14, 14, 0, 0, 13, 13, 13,
+ 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 13, 14,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 13,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 10, 10, 14, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 9, 10, 9, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 13, 0, 0, 9, 10, 9, 10, 13,
+ 9, 10, 9, 10, 10, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 9, 9, 9, 9, 10,
+ 9, 9, 9, 9, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10, 9, 10,
+ 0, 0, 9, 10, 9, 9, 9, 9, 10, 9, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 10, 13, 10, 10, 10, 13, 13, 13, 13, 13,
+ 13, 13, 14, 13, 13, 13, 14, 13, 13, 13, 13, 14, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 0, 13, 13, 14,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 0, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 4, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 13, 14, 14, 14, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 13, 14, 14, 14, 13, 13, 14, 14, 13, 13, 13, 13, 13, 14, 14,
+ 13, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 4, 4, 13, 13, 13, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 0,
+ 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 0, 0, 0, 0, 0, 0,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 4, 14, 14, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 13, 14, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 0, 13, 0,
+ 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 5,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 6, 6, 0, 6, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 6, 6, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 7, 0, 0, 6, 4, 4, 6, 5, 5, 5, 5, 5, 5, 0,
+ 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 12,
+ 0, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 6, 6, 7, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 0, 0, 0, 0, 4,
+ 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 0, 5, 0, 5,
+ 5, 4, 5, 5, 6, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
+ 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13,
+ 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 13, 13, 13, 13, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 0, 0, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 0, 0, 13, 0, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 13, 13,
+ 13, 14, 14, 14, 0, 14, 14, 0, 0, 0, 0, 0, 14, 14, 14, 14,
+ 13, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 0, 0, 14, 14, 14, 0, 0, 0, 0, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 14, 14, 0, 0, 0,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 12, 4, 4,
+ 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 4, 4, 4, 13, 14, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 13, 13, 13, 13, 4, 4, 0, 0, 14, 14, 14, 14, 4, 14, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, 0, 13, 0, 4, 4,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 4, 4, 0, 4, 4, 0, 14, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 4, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 0, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13,
+ 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 0, 14, 14, 13, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 13, 13, 13,
+ 13, 13, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 4, 4, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 14, 13,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 13, 13, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 13, 13, 13, 13, 14, 14, 0, 0,
+ 14, 4, 4, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 13, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 4, 4, 4, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 0, 0, 13, 13, 13, 13,
+ 13, 13, 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 0, 14, 14, 14, 14, 13,
+ 14, 13, 14, 14, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14,
+ 14, 13, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 13, 14, 14, 14, 14, 0,
+ 0, 0, 4, 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 4, 4, 13, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 13, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 0, 14, 14, 0, 14,
+ 14, 14, 14, 14, 14, 14, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 0, 13, 13, 0, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0,
+ 14, 14, 0, 14, 14, 14, 14, 14, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 14, 14, 14, 14, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 14,
+ 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 14,
+ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 14, 14, 4,
+ 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14,
+ 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 0, 9, 9,
+ 0, 0, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 0, 10, 0, 10, 10, 10,
+ 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 9, 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 16, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 17,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 17,
-};
-
-static RE_UINT8 re_east_asian_width_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 0, 9, 9, 9, 9, 0,
+ 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+ 9, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 9, 9, 9, 27, 9, 9, 28, 9, 9, 9, 9, 9, 9, 29, 30, 31,
- 32, 33, 34, 35, 36, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 37, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 9, 9, 9, 9, 9, 9,
- 9, 9, 39, 9, 9, 9, 9, 9, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 40,
+ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 30, 30, 30, 30, 9, 9, 9, 9, 9, 9, 42, 9, 43, 44,
+ 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10,
+ 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,
+ 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 45,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 46,
- 30, 30, 30, 30, 30, 47, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 30, 30, 48, 30, 30, 49, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 9, 10, 0, 0, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 14, 14, 14, 14, 14, 14, 14, 13, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 13, 13, 0, 13, 0, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 0, 13, 0, 0, 0, 0,
+ 0, 0, 13, 0, 0, 0, 0, 13, 0, 13, 0, 13, 0, 13, 13, 13,
+ 0, 13, 13, 0, 13, 0, 0, 13, 0, 13, 0, 13, 0, 13, 0, 13,
+ 0, 13, 13, 0, 13, 0, 0, 13, 13, 13, 13, 0, 13, 13, 13, 13,
+ 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 50, 51, 52, 53, 54, 9, 55, 56, 57, 58, 59, 60, 61, 62, 9, 63,
- 9, 9, 64, 65, 66, 67, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 68,
- 9, 9, 41, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 69,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+RE_UINT32 re_get_sentence_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_sentence_break_table_1[field_2];
+ v = re_sentence_break_table_2[(v << 5) | field_1];
+ v = re_sentence_break_table_3[(v << 5) | field_0];
+
+ return v;
+}
+
+/* Sentence_Terminal. */
+static RE_UINT8 re_sentence_terminal_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 3, 3, 9, 10, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 11, 12, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13,
+ 3, 3, 14, 15, 16, 17, 18, 19, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 20, 21, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 22,
+ 3, 3, 3, 3, 3, 3, 23, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
};
-static RE_UINT8 re_east_asian_width_stage_3[] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 0, 0, 0, 0, 3, 4, 5, 6, 7, 0, 8, 9, 10, 11, 12, 13,
- 14, 0, 15, 16, 17, 16, 18, 8, 19, 20, 21, 0, 17, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 22, 23, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 14, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 0, 0, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0,
- 0, 0, 29, 28, 30, 31, 29, 28, 30, 31, 0, 0, 0, 0, 0, 0,
- 14, 0, 28, 28, 28, 28, 28, 28, 28, 28, 14, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0,
- 0, 0, 33, 34, 6, 0, 35, 36, 0, 0, 0, 0, 0, 0, 37, 38,
- 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41, 14, 36, 0, 42, 16, 0, 0, 0, 0, 43, 44, 28, 45, 28, 31,
- 0, 14, 28, 31, 0, 0, 0, 31, 0, 0, 46, 0, 38, 0, 0, 0,
- 12, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 0, 56, 57, 0, 0,
- 57, 0, 58, 14, 58, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 55, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 62, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 45, 28, 28, 28, 28, 45, 0,
- 28, 28, 63, 0, 30, 31, 57, 53, 64, 65, 31, 0, 63, 38, 0, 66,
- 67, 68, 69, 70, 0, 0, 0, 0, 71, 32, 72, 0, 73, 74, 0, 75,
- 0, 0, 76, 17, 77, 59, 0, 78, 79, 80, 81, 28, 82, 83, 84, 85,
- 86, 59, 0, 0, 0, 87, 0, 58, 0, 88, 89, 0, 0, 0, 17, 28,
- 0, 0, 90, 0, 0, 0, 87, 75, 0, 0, 0, 0, 91, 92, 0, 0,
- 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 31, 0, 0, 0, 0,
- 32, 32, 32, 96, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 0, 0, 0, 32, 72,
- 98, 32, 32, 32, 32, 32, 32, 99, 100, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 99, 100, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 90, 32, 32, 32, 32, 32, 100, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 99, 32, 32, 32, 32, 32, 101, 32, 32, 32, 32, 72, 0, 32, 32,
- 32, 32, 32, 99, 32, 32, 32, 32, 32, 28, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 102, 32, 32, 32, 32, 32, 32, 99, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 102,
- 32, 32, 32, 32, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 32, 103, 0, 0, 32, 32, 32, 32, 104, 32, 99, 72, 0, 0,
- 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 108, 108, 108,
- 108, 108, 108, 108, 108, 108, 108, 109, 110, 110, 110, 111, 112, 109, 0, 58,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 0,
- 32, 32, 32, 99, 0, 0, 0, 0, 0, 0, 101, 0, 113, 0, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72,
- 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0,
- 28, 115, 28, 28, 28, 116, 28, 28, 28, 28, 28, 28, 28, 31, 28, 28,
- 28, 80, 117, 118, 28, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 101, 0, 32, 32, 32, 32, 32, 72, 32, 87, 103, 0, 97, 0, 0, 0,
- 32, 32, 32, 32, 87, 90, 120, 32, 32, 32, 32, 32, 32, 32, 32, 121,
- 32, 32, 72, 0, 32, 32, 32, 32, 32, 122, 72, 0, 32, 32, 123, 32,
- 32, 32, 32, 32, 32, 32, 32, 99, 124, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125,
- 32, 32, 32, 32, 32, 32, 32, 97, 0, 126, 32, 32, 32, 0, 0, 127,
- 0, 0, 66, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 97, 114, 129, 0, 0, 94, 113, 101,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 72, 0, 0,
- 0, 90, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 130, 131,
- 32, 32, 32, 32, 132, 133, 32, 32, 32, 132, 32, 32, 32, 32, 32, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 101,
- 101, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 116,
+static RE_UINT8 re_sentence_terminal_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 6,
+ 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
+ 0, 16, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 22, 0, 0, 25, 0, 0, 0, 0, 26, 0,
+ 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 30, 0, 0, 0, 0, 0, 1, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
+ 0, 0, 33, 0, 0, 3, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0,
+ 0, 37, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
+ 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0,
+ 0, 0, 43, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 0, 0, 0, 45, 0, 44, 46, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_east_asian_width_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 0, 1, 5, 5, 1, 5, 5, 1,
- 1, 0, 1, 0, 5, 1, 1, 5, 1, 1, 1, 1, 1, 0, 1, 1,
- 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
- 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1,
- 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0,
- 0, 3, 3, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0,
- 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 3, 3, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1,
- 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 3, 1, 0, 0, 0, 0, 3, 3, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1,
- 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 3, 1, 1, 1, 1, 1,
- 1, 1, 3, 3, 1, 3, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1,
- 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 3, 3, 0, 3,
- 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 5, 5,
- 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0,
- 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 3, 1, 1,
- 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
- 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
- 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 3, 3, 3, 3, 0, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 3, 3, 3, 3,
- 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3,
- 3, 3, 3, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0,
- 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3,
- 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0,
- 3, 3, 0, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3,
+static RE_UINT8 re_sentence_terminal_table_3[] = {
+ 0, 0, 0, 0, 2, 64, 0, 128, 0, 2, 0, 0, 0, 0, 0, 192,
+ 0, 0, 16, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 128, 98,
+ 48, 0, 0, 0, 0, 12, 0, 0, 132, 1, 0, 0, 0, 64, 0, 0,
+ 0, 0, 96, 0, 8, 2, 0, 0, 0, 15, 0, 0, 0, 0, 0, 204,
+ 0, 0, 0, 24, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
+ 4, 0, 0, 0, 0, 0, 0, 128, 0, 192, 0, 0, 0, 0, 136, 0,
+ 0, 0, 192, 0, 0, 128, 0, 0, 0, 3, 0, 0, 0, 0, 0, 224,
+ 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 196, 0, 2, 0, 0, 0,
+ 0, 0, 224, 3, 128, 1, 0, 0, 3, 0, 0, 0, 14, 0, 0, 0,
+ 96, 32, 0, 192, 0, 0, 0, 27, 0, 24, 0, 0, 12, 254, 255, 0,
+ 6, 0, 0, 0, 0, 0, 0, 112, 80, 0, 0, 0, 12, 0, 0, 0,
+ 0, 0, 128, 1, 0, 0, 32, 0, 16, 0, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 0
};
-/* East_Asian_Width: 3040 bytes. */
-
-RE_UINT32 re_get_east_asian_width(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_east_asian_width_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_east_asian_width_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_east_asian_width_stage_3[pos + f] << 3;
- value = re_east_asian_width_stage_4[pos + code];
-
- return value;
-}
+RE_UINT32 re_get_sentence_terminal(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Joining_Group. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_joining_group_stage_1[] = {
- 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
+ v = re_sentence_terminal_table_1[field_2];
+ v = re_sentence_terminal_table_2[(v << 5) | field_1];
+ v = re_sentence_terminal_table_3[(v << 2) | field_0];
-static RE_UINT8 re_joining_group_stage_2[] = {
- 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ return (v >> offset) & 0x1;
+}
+
+/* Soft_Dotted. */
+static RE_UINT8 re_soft_dotted_table_1[] = {
+ 0, 1, 2, 2, 2, 2, 2, 3, 4, 2, 2, 5, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_joining_group_stage_3[] = {
+static RE_UINT8 re_soft_dotted_table_2[] = {
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 0, 14, 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 22, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 0,
+ 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_joining_group_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 45, 0, 3, 3, 43, 3, 45, 3, 4, 41, 4, 4, 13, 13, 13, 6,
- 6, 31, 31, 35, 35, 33, 33, 39, 39, 1, 1, 11, 11, 55, 55, 55,
- 0, 9, 29, 19, 22, 24, 26, 16, 43, 45, 45, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 29,
- 0, 3, 3, 3, 0, 3, 43, 43, 45, 4, 4, 4, 4, 4, 4, 4,
- 4, 13, 13, 13, 13, 13, 13, 13, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 35, 35, 33, 33, 39,
- 1, 9, 9, 9, 9, 9, 9, 29, 29, 11, 38, 11, 19, 19, 19, 11,
- 11, 11, 11, 11, 11, 22, 22, 22, 22, 26, 26, 26, 26, 56, 21, 13,
- 41, 17, 17, 14, 43, 43, 43, 43, 43, 43, 43, 43, 55, 47, 55, 43,
- 45, 45, 46, 46, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 31,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 1, 0, 0, 21,
- 2, 0, 5, 12, 12, 7, 7, 15, 44, 50, 18, 42, 42, 48, 49, 20,
- 23, 25, 27, 36, 10, 8, 28, 32, 34, 30, 7, 37, 40, 5, 12, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 53,
- 4, 4, 4, 4, 4, 4, 4, 13, 13, 6, 6, 31, 35, 1, 1, 1,
- 9, 9, 11, 11, 11, 24, 24, 26, 26, 26, 22, 31, 31, 35, 13, 13,
- 35, 31, 13, 3, 3, 55, 55, 45, 43, 43, 54, 54, 13, 35, 35, 19,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 0, 0, 0, 0,
- 4, 4, 13, 39, 9, 29, 22, 24, 45, 45, 31, 43, 57, 0, 6, 33,
- 11, 58, 31, 1, 19, 0, 4, 4, 4, 31, 45, 86, 87, 88, 0, 0,
- 59, 61, 61, 65, 65, 62, 0, 83, 0, 85, 85, 0, 0, 66, 80, 84,
- 68, 68, 68, 69, 63, 81, 70, 71, 77, 60, 60, 73, 73, 76, 74, 74,
- 74, 75, 0, 0, 78, 0, 0, 0, 0, 0, 0, 72, 64, 79, 82, 67,
- 0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 100, 0, 101, 0,
- 101, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 18, 0, 19, 20, 0, 21, 0, 22, 23, 0, 24, 0, 17, 18,
+ 0, 19, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Joining_Group: 788 bytes. */
-
-RE_UINT32 re_get_joining_group(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_joining_group_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_joining_group_stage_2[pos + f] << 5;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_joining_group_stage_3[pos + f] << 4;
- value = re_joining_group_stage_4[pos + code];
-
- return value;
-}
-
-/* Joining_Type. */
-
-static RE_UINT8 re_joining_type_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 6,
- 7, 8, 4, 9, 4, 4, 10, 4, 4, 4, 4, 11, 4, 12, 13, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+static RE_UINT8 re_soft_dotted_table_3[] = {
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 128, 0, 0, 0, 2, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 32, 0, 0, 4, 0, 0, 0, 8, 0,
+ 0, 0, 64, 1, 4, 0, 0, 0, 0, 0, 64, 0, 16, 1, 0, 0,
+ 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0,
+ 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, 192, 0, 0, 12, 0, 0,
+ 0, 0, 0, 192, 0, 0, 12, 0, 192, 0, 0, 0, 0, 0, 0, 12,
+ 0, 192, 0, 0
};
-static RE_UINT8 re_joining_type_stage_2[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0,
- 0, 0, 4, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 23, 25, 26, 27, 28, 29,
- 30, 31, 26, 32, 33, 34, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 50, 51,
- 52, 53, 54, 0, 55, 0, 0, 0, 56, 57, 58, 0, 59, 60, 61, 62,
- 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 76, 0, 0, 0, 0,
- 77, 78, 0, 79, 80, 81, 82, 83, 84, 85, 86, 87, 0, 0, 0, 88,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 70, 0, 0, 0, 91,
- 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 97, 0,
- 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, 100, 0, 0,
- 101, 102, 103, 0, 104, 105, 106, 107, 108, 0, 0, 109, 33, 110, 0, 0,
- 111, 112, 113, 114, 0, 0, 115, 116, 117, 118, 119, 0, 120, 0, 0, 0,
- 121, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 0, 0, 0, 0, 0,
- 126, 0, 127, 0, 128, 129, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 134, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 136, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 138, 139, 0, 0, 140, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 141, 142, 143, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 144, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 146, 147, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 149, 2, 0, 0, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_soft_dotted(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_joining_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
- 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 6,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 9, 10, 11, 12,
- 13, 14, 2, 2, 0, 15, 16, 12, 12, 17, 17, 18, 12, 12, 12, 12,
- 19, 20, 21, 22, 22, 23, 0, 24, 0, 25, 26, 27, 12, 28, 2, 2,
- 2, 29, 12, 30, 12, 31, 32, 18, 0, 0, 0, 0, 33, 2, 34, 0,
- 0, 35, 12, 12, 12, 36, 37, 38, 0, 0, 33, 39, 40, 41, 0, 0,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 12, 48, 49, 50,
- 0, 0, 3, 2, 39, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 52,
- 5, 53, 5, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 56,
- 57, 1, 0, 0, 54, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 56,
- 60, 61, 55, 0, 0, 0, 62, 0, 63, 53, 0, 0, 54, 0, 0, 64,
- 55, 0, 0, 0, 0, 0, 0, 65, 57, 1, 58, 0, 54, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0,
- 67, 0, 0, 0, 0, 0, 0, 33, 68, 69, 70, 0, 54, 0, 0, 0,
- 58, 71, 0, 0, 54, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 72,
- 57, 1, 0, 0, 54, 0, 0, 0, 0, 66, 73, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 74, 51, 25, 75, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 74, 76, 0, 77, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 78, 55, 0, 0, 0, 0, 0, 0, 5, 75,
- 79, 80, 2, 5, 2, 2, 2, 76, 58, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 80, 81, 82, 0, 0, 0, 83, 34, 0, 57, 0,
- 84, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 54, 0, 0, 0, 54, 0,
- 0, 0, 0, 0, 0, 0, 86, 77, 58, 5, 37, 1, 0, 0, 0, 0,
- 87, 88, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 89,
- 90, 12, 12, 12, 12, 91, 0, 0, 0, 0, 0, 0, 92, 34, 66, 45,
- 0, 0, 25, 93, 0, 0, 0, 0, 0, 0, 58, 75, 94, 76, 3, 22,
- 0, 0, 0, 0, 0, 0, 2, 75, 37, 0, 0, 0, 0, 0, 95, 8,
- 66, 0, 0, 0, 0, 3, 37, 0, 4, 0, 0, 0, 96, 97, 0, 0,
- 0, 0, 0, 0, 58, 98, 4, 0, 0, 0, 0, 0, 0, 99, 100, 0,
- 0, 0, 101, 2, 81, 53, 56, 4, 2, 2, 2, 2, 2, 2, 2, 39,
- 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 76, 64, 0, 0,
- 0, 0, 2, 2, 2, 2, 34, 0, 0, 0, 0, 0, 0, 25, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 101, 77, 0, 0, 0, 33, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 104, 105, 0, 0, 70, 0, 0, 0,
- 12, 12, 12, 12, 12, 12, 106, 0, 71, 0, 0, 0, 2, 2, 4, 25,
- 0, 0, 0, 0, 33, 77, 0, 0, 25, 2, 4, 0, 0, 0, 0, 0,
- 51, 0, 0, 0, 0, 0, 107, 108, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 109, 82, 0, 105, 56, 0, 0, 0, 0, 0, 56,
- 0, 0, 0, 0, 0, 0, 110, 68, 55, 0, 0, 0, 0, 71, 58, 0,
- 0, 0, 0, 0, 1, 53, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0,
- 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 33, 51, 111, 99, 0, 0, 0, 0, 0, 92,
- 112, 113, 114, 115, 116, 117, 0, 0, 118, 119, 120, 0, 0, 121, 0, 0,
- 122, 12, 12, 12, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 12,
- 125, 2, 126, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 2,
- 75, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, 0, 0, 0, 127, 59,
- 51, 0, 0, 0, 25, 40, 76, 0, 0, 0, 0, 0, 0, 0, 105, 0,
- 4, 0, 0, 0, 0, 0, 33, 75, 0, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 128, 58, 0, 0, 0, 25, 3, 51, 0, 0,
- 34, 0, 0, 0, 33, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 73, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 129,
- 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 86,
- 34, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 131,
- 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 6, 0,
- 0, 0, 0, 80, 133, 37, 0, 0, 0, 0, 0, 0, 0, 25, 2, 59,
- 0, 0, 99, 54, 34, 0, 0, 0, 5, 51, 0, 0, 0, 0, 3, 134,
- 25, 0, 109, 45, 0, 0, 0, 0, 0, 64, 75, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 75, 6, 0, 0, 64, 2, 2, 64, 135, 0,
- 0, 0, 0, 0, 0, 0, 109, 136, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0,
- 0, 0, 0, 0, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 76, 0,
- 0, 0, 0, 0, 0, 0, 75, 0, 0, 25, 0, 0, 0, 0, 0, 0,
- 0, 25, 51, 0, 0, 0, 0, 0, 0, 0, 0, 70, 37, 0, 0, 0,
- 0, 0, 0, 0, 25, 4, 3, 2, 137, 37, 0, 0, 0, 96, 0, 0,
- 85, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 75, 3,
- 2, 2, 2, 2, 2, 76, 1, 0, 56, 0, 0, 3, 5, 2, 0, 0,
- 75, 2, 2, 138, 139, 51, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0,
- 0, 0, 75, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12,
- 140, 37, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 2, 2, 2, 2,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_joining_type_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
- 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5,
- 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 0, 5, 5, 0, 5,
- 5, 5, 5, 0, 5, 0, 0, 0, 2, 0, 3, 3, 3, 3, 2, 3,
- 2, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2,
- 3, 2, 2, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 2, 2,
- 5, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 2, 3, 2, 3, 2, 2, 3, 3, 0, 3, 5, 5,
- 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 3, 3,
- 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5,
- 3, 5, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 2,
- 3, 2, 3, 2, 3, 2, 2, 3, 5, 5, 5, 0, 0, 3, 2, 2,
- 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
- 2, 3, 2, 3, 3, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0,
- 3, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 3, 2, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0,
- 2, 0, 2, 2, 2, 2, 0, 3, 2, 3, 3, 0, 0, 0, 0, 0,
- 2, 2, 3, 3, 3, 0, 3, 2, 2, 3, 3, 2, 2, 0, 2, 2,
- 2, 3, 2, 2, 2, 2, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0,
- 0, 0, 5, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0,
- 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0,
- 0, 5, 5, 0, 0, 0, 0, 5, 5, 0, 0, 5, 5, 5, 0, 0,
- 5, 5, 0, 0, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 0, 5,
- 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 0, 0, 5,
- 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 5, 0, 0,
- 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 0, 5, 0,
- 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
- 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5,
- 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,
- 0, 5, 5, 0, 0, 5, 5, 0, 5, 5, 0, 0, 0, 0, 5, 5,
- 0, 0, 5, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0,
- 0, 0, 0, 0, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 1, 5, 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 5, 2, 2, 5, 2, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0,
- 5, 0, 5, 0, 0, 5, 5, 5, 0, 0, 0, 0, 5, 0, 5, 5,
- 0, 0, 5, 5, 5, 5, 0, 0, 5, 5, 0, 5, 5, 5, 0, 0,
- 5, 5, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5,
- 0, 0, 0, 5, 0, 1, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0,
- 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0,
- 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5,
- 5, 5, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0,
- 5, 0, 5, 5, 5, 0, 0, 5, 0, 5, 5, 5, 0, 5, 5, 0,
- 2, 2, 2, 2, 2, 3, 0, 3, 0, 3, 3, 0, 0, 4, 3, 3,
- 3, 3, 3, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 3, 2, 2,
- 2, 3, 0, 0, 3, 5, 5, 0, 0, 0, 0, 2, 2, 2, 2, 3,
- 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 3, 2, 3, 3,
- 2, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 2, 2, 0,
- 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 5, 5, 5, 5,
- 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, 5,
- 5, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0,
- 5, 5, 0, 0, 5, 0, 5, 5, 5, 0, 5, 0, 0, 0, 0, 5,
- 5, 0, 5, 5, 0, 0, 0, 0, 5, 5, 5, 0, 0, 5, 0, 5,
- 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5,
- 5, 0, 0, 5, 5, 5, 5, 0, 5, 0, 5, 5, 0, 5, 5, 0,
- 0, 0, 5, 0, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5,
- 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5, 5,
- 2, 2, 2, 2, 5, 5, 5, 5,
-};
+ v = re_soft_dotted_table_1[field_2];
+ v = re_soft_dotted_table_2[(v << 5) | field_1];
+ v = re_soft_dotted_table_3[(v << 2) | field_0];
-/* Joining_Type: 3560 bytes. */
-
-RE_UINT32 re_get_joining_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_joining_type_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_joining_type_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_joining_type_stage_3[pos + f] << 3;
- value = re_joining_type_stage_4[pos + code];
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Line_Break. */
-
-static RE_UINT8 re_line_break_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 10, 17, 5, 18, 10, 10, 19, 10, 20, 21, 22,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 23,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 23,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 24, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-};
-
-static RE_UINT8 re_line_break_stage_2[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 2, 2, 2, 2, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 2, 51, 2, 2, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 2, 2, 2, 70, 2, 2, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 86, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 87, 79, 79, 79, 79, 79, 79, 79, 79, 88, 2, 2, 89, 90, 2, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 100,
- 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102,
- 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104,
- 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106,
- 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101,
- 102, 103, 104, 105, 106, 100, 101, 102, 103, 104, 105, 106, 100, 101, 102, 107,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 79, 79, 79, 79, 110, 111, 2, 2, 112, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, 109, 122, 123, 124, 2, 125, 126, 109, 2, 2, 127, 109,
- 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 109, 139, 109, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 109, 149, 150, 109, 151, 152, 153, 154, 109,
- 155, 156, 109, 157, 158, 159, 109, 109, 160, 161, 162, 163, 109, 164, 109, 165,
- 2, 2, 2, 2, 2, 2, 2, 166, 167, 2, 168, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 2, 2, 2, 2, 169, 170, 171, 2, 172, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 2, 2, 2, 173, 174, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 2, 2, 2, 2, 175, 176, 177, 178, 109, 109, 109, 109, 179, 180, 181, 182,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 183,
- 79, 79, 79, 79, 79, 184, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 79, 79, 185, 79, 79, 186, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 187, 188, 109, 109, 109, 109, 109, 109,
- 2, 189, 190, 191, 192, 193, 194, 109, 195, 196, 197, 2, 2, 198, 2, 199,
- 2, 2, 2, 2, 200, 201, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 202, 109, 203, 109, 109, 204, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 2, 205, 206, 109, 109, 109, 109, 109, 207, 208, 209, 109, 210, 211, 109, 109,
- 79, 79, 212, 213, 79, 79, 79, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 228,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 228,
- 229, 109, 230, 231, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
-};
-
-static RE_UINT16 re_line_break_stage_3[] = {
- 0, 1, 0, 0, 2, 3, 4, 5, 6, 6, 6, 7, 6, 6, 6, 8,
- 9, 0, 0, 0, 10, 11, 12, 13, 6, 6, 14, 6, 6, 6, 14, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 14, 15, 16, 17, 6, 6, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 20, 0, 6, 21,
- 22, 23, 6, 6, 24, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 25, 26, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 27, 6, 6, 6, 28, 27, 6, 6, 6, 6,
- 6, 29, 30, 0, 0, 0, 0, 31, 32, 33, 34, 34, 34, 35, 36, 33,
- 6, 37, 0, 38, 6, 6, 6, 6, 6, 25, 0, 0, 4, 39, 40, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 41, 42, 42, 43, 4, 44,
- 6, 45, 46, 6, 6, 6, 0, 0, 0, 47, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 48, 0, 49, 33, 4, 44, 6, 6, 6, 25, 50, 51,
- 6, 6, 48, 52, 53, 54, 6, 28, 6, 6, 6, 55, 6, 56, 33, 33,
- 33, 33, 33, 33, 6, 6, 57, 58, 33, 33, 59, 0, 52, 0, 0, 0,
- 50, 6, 6, 6, 6, 6, 6, 60, 0, 0, 61, 6, 62, 4, 6, 6,
- 63, 64, 65, 6, 6, 66, 67, 68, 69, 70, 71, 72, 73, 4, 74, 75,
- 76, 77, 65, 6, 6, 66, 78, 79, 80, 81, 82, 83, 84, 4, 85, 33,
- 76, 45, 24, 6, 6, 66, 86, 68, 87, 88, 89, 33, 73, 4, 90, 91,
- 76, 64, 65, 6, 6, 66, 86, 68, 69, 81, 92, 72, 73, 4, 6, 33,
- 93, 94, 95, 96, 97, 94, 6, 98, 99, 100, 101, 33, 84, 4, 6, 102,
- 103, 57, 66, 6, 6, 66, 6, 104, 105, 100, 106, 56, 73, 4, 107, 6,
- 108, 57, 66, 6, 6, 66, 109, 68, 105, 100, 106, 110, 73, 4, 111, 33,
- 112, 57, 66, 6, 6, 6, 6, 113, 105, 114, 115, 6, 73, 4, 6, 116,
- 117, 6, 28, 118, 6, 6, 24, 119, 28, 120, 121, 0, 84, 4, 122, 33,
- 123, 124, 124, 124, 124, 124, 124, 125, 124, 126, 4, 127, 33, 33, 33, 33,
- 128, 129, 124, 124, 130, 124, 124, 131, 132, 131, 4, 133, 33, 33, 33, 33,
- 134, 135, 136, 26, 4, 44, 137, 138, 6, 27, 6, 6, 6, 139, 30, 140,
- 141, 142, 0, 30, 0, 0, 0, 143, 144, 57, 145, 146, 33, 33, 33, 33,
- 124, 124, 124, 124, 124, 124, 124, 124, 4, 147, 124, 124, 124, 124, 124, 124,
- 124, 124, 4, 148, 6, 6, 6, 6, 45, 149, 6, 6, 6, 6, 6, 6,
- 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 95, 28, 95, 6, 6, 6, 6,
- 6, 95, 6, 6, 6, 6, 95, 28, 95, 6, 28, 6, 6, 6, 6, 6,
- 6, 6, 95, 6, 6, 6, 6, 6, 6, 6, 6, 153, 154, 6, 6, 139,
- 6, 6, 6, 155, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 58, 58,
- 156, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 156, 6, 6, 157, 6, 6, 6, 6, 6, 6, 6, 6, 6, 158, 6, 89,
- 6, 57, 159, 33, 6, 6, 160, 33, 6, 6, 161, 33, 6, 57, 162, 33,
- 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 163, 164, 4, 165, 6, 155,
- 166, 167, 4, 165, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 89,
- 168, 6, 6, 6, 6, 169, 6, 6, 6, 6, 6, 6, 6, 6, 58, 33,
- 6, 6, 6, 28, 0, 170, 0, 170, 171, 4, 124, 124, 124, 131, 172, 33,
- 124, 124, 124, 124, 124, 173, 124, 124, 124, 174, 4, 175, 6, 6, 6, 6,
- 6, 6, 176, 177, 124, 124, 124, 124, 124, 124, 124, 178, 124, 124, 124, 179,
- 4, 165, 4, 165, 124, 131, 0, 180, 33, 33, 33, 33, 33, 33, 33, 33,
- 103, 6, 6, 6, 6, 6, 181, 0, 103, 182, 4, 183, 156, 25, 50, 139,
- 184, 6, 6, 6, 61, 185, 4, 44, 6, 6, 6, 6, 48, 0, 170, 22,
- 6, 6, 6, 6, 181, 0, 0, 186, 4, 187, 4, 44, 6, 6, 6, 188,
- 6, 89, 6, 6, 6, 6, 6, 189, 6, 33, 190, 0, 0, 191, 192, 193,
- 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 194,
- 6, 6, 58, 58, 6, 6, 6, 6, 58, 58, 6, 195, 6, 6, 6, 58,
- 6, 6, 6, 6, 6, 6, 57, 6, 57, 6, 196, 109, 6, 6, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 212, 213,
- 214, 215, 6, 139, 216, 217, 218, 219, 217, 217, 0, 0, 0, 0, 220, 33,
- 221, 116, 222, 6, 223, 224, 6, 6, 6, 6, 225, 226, 227, 228, 227, 229,
- 6, 230, 227, 229, 6, 6, 6, 6, 6, 6, 231, 6, 6, 6, 6, 6,
- 232, 233, 234, 235, 236, 237, 238, 225, 6, 239, 240, 6, 241, 242, 6, 6,
- 242, 6, 243, 244, 243, 6, 6, 14, 6, 6, 6, 6, 6, 245, 6, 6,
- 6, 246, 240, 247, 6, 248, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 249, 6,
- 6, 6, 6, 6, 28, 33, 33, 33, 6, 56, 33, 33, 227, 227, 227, 227,
- 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 250,
- 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, 227, 227, 227, 227, 251, 6,
- 227, 227, 252, 6, 253, 229, 242, 225, 254, 255, 229, 6, 252, 14, 6, 6,
- 256, 257, 258, 259, 6, 6, 6, 260, 261, 6, 6, 6, 262, 263, 6, 264,
- 6, 6, 6, 265, 6, 6, 6, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 6, 6, 6, 6, 6, 6, 6, 6, 14, 277, 278, 279, 280, 227,
- 227, 227, 228, 6, 6, 6, 6, 6, 281, 6, 6, 6, 282, 279, 6, 6,
- 283, 284, 284, 285, 6, 6, 6, 6, 6, 6, 6, 246, 6, 6, 6, 286,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 287, 229, 6, 6, 196, 6,
- 6, 6, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 28, 6, 6, 6, 6, 6, 28, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 176, 288, 289,
- 6, 6, 6, 6, 45, 149, 6, 6, 6, 6, 6, 6, 6, 290, 291, 71,
- 6, 6, 28, 33, 28, 28, 28, 28, 28, 28, 28, 28, 0, 0, 0, 0,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 33, 33, 33, 33, 33, 33,
- 267, 267, 267, 302, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 303, 33,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 304, 33, 33, 33, 267, 303,
- 305, 279, 306, 307, 267, 308, 309, 310, 311, 312, 267, 267, 313, 267, 267, 267,
- 314, 315, 316, 317, 318, 312, 267, 267, 313, 267, 267, 267, 314, 315, 319, 320,
- 321, 267, 267, 267, 267, 267, 322, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 323, 267, 267, 267, 267, 267, 324, 267, 267, 267, 267, 303, 33, 325, 325,
- 267, 267, 267, 323, 267, 267, 267, 267, 267, 227, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 6, 6, 6, 6, 6, 6, 6, 6,
- 267, 267, 326, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 327, 267, 267, 267, 267, 267, 267, 323, 33, 6, 6, 6, 6, 6, 188,
- 6, 328, 6, 6, 4, 329, 33, 33, 6, 6, 6, 6, 6, 176, 190, 185,
- 6, 6, 6, 48, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 330, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 331, 33, 33, 33, 33, 33, 290, 6,
- 332, 333, 6, 6, 25, 182, 6, 334, 6, 6, 6, 6, 6, 6, 335, 33,
- 26, 6, 6, 6, 6, 6, 181, 0, 336, 337, 4, 165, 0, 0, 26, 338,
- 4, 44, 6, 6, 48, 339, 6, 6, 176, 0, 170, 290, 150, 150, 150, 340,
- 50, 6, 6, 6, 6, 6, 25, 0, 341, 342, 4, 343, 124, 124, 4, 344,
- 6, 6, 6, 6, 6, 61, 180, 33, 333, 345, 4, 346, 124, 124, 124, 124,
- 124, 124, 124, 124, 124, 124, 124, 124, 347, 33, 33, 348, 6, 25, 349, 33,
- 350, 350, 350, 33, 28, 28, 6, 6, 6, 6, 6, 6, 6, 33, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 351, 4, 165,
- 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353,
- 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354,
- 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353,
- 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352,
- 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353,
- 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353,
- 353, 353, 352, 353, 353, 354, 353, 353, 353, 352, 353, 353, 354, 353, 353, 353,
- 353, 352, 353, 353, 355, 33, 151, 151, 356, 357, 152, 152, 152, 152, 152, 358,
- 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 28, 33, 360, 361, 34, 362, 363, 364, 365, 34, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 155, 33, 360, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 366, 33, 33, 6, 6, 6, 6, 6, 6,
- 6, 6, 118, 6, 6, 6, 6, 6, 6, 33, 33, 33, 33, 33, 6, 367,
- 0, 0, 368, 369, 0, 0, 370, 284, 371, 372, 373, 374, 323, 375, 57, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 376,
- 377, 378, 267, 379, 267, 267, 267, 380, 267, 267, 267, 381, 382, 325, 383, 267,
- 267, 267, 267, 384, 267, 267, 267, 323, 385, 385, 385, 386, 387, 28, 33, 388,
- 6, 109, 6, 6, 28, 6, 6, 389, 6, 58, 6, 58, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 56,
- 390, 6, 6, 6, 6, 6, 391, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 28, 6, 182, 89, 33, 33, 33, 33, 33, 6, 6, 6, 6, 6, 392,
- 6, 6, 6, 139, 6, 6, 6, 6, 6, 6, 89, 33, 40, 6, 6, 182,
- 6, 6, 6, 6, 182, 393, 6, 6, 6, 56, 6, 6, 6, 6, 48, 394,
- 6, 6, 6, 395, 6, 6, 6, 6, 182, 6, 396, 33, 33, 33, 33, 33,
- 6, 6, 6, 58, 4, 165, 6, 6, 6, 6, 182, 6, 6, 6, 6, 182,
- 6, 6, 6, 6, 6, 33, 6, 6, 6, 6, 6, 6, 182, 290, 33, 33,
- 6, 6, 6, 6, 6, 6, 28, 33, 6, 6, 58, 33, 6, 33, 33, 33,
- 58, 66, 6, 6, 6, 6, 45, 397, 6, 6, 395, 6, 6, 6, 6, 6,
- 6, 6, 6, 28, 290, 6, 33, 33, 33, 33, 33, 33, 6, 6, 398, 360,
- 6, 6, 6, 399, 6, 6, 6, 400, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 22, 6, 6, 118, 6, 6, 6, 6, 6,
- 401, 402, 109, 27, 6, 6, 58, 80, 6, 89, 403, 89, 6, 6, 6, 6,
- 6, 6, 6, 6, 33, 33, 33, 33, 6, 6, 6, 6, 404, 360, 405, 33,
- 6, 6, 6, 6, 6, 6, 58, 406, 6, 6, 58, 6, 6, 6, 56, 6,
- 6, 6, 155, 407, 33, 27, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 89, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 56, 33, 6, 6, 6, 6, 6, 6, 56, 118,
- 6, 6, 6, 6, 181, 33, 4, 165, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 28,
- 6, 6, 6, 6, 6, 33, 6, 6, 48, 0, 40, 155, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 28, 33,
- 184, 6, 6, 6, 6, 6, 6, 0, 140, 396, 118, 6, 408, 4, 33, 71,
- 184, 6, 6, 6, 6, 6, 0, 409, 410, 149, 6, 6, 6, 89, 4, 165,
- 184, 6, 6, 6, 176, 0, 411, 4, 412, 33, 6, 6, 6, 6, 413, 33,
- 184, 6, 6, 6, 6, 6, 25, 0, 414, 415, 4, 416, 27, 6, 139, 33,
- 6, 6, 24, 6, 6, 181, 0, 417, 33, 33, 33, 33, 33, 33, 33, 33,
- 28, 418, 6, 45, 6, 419, 6, 6, 6, 6, 6, 176, 0, 394, 4, 165,
- 112, 64, 65, 6, 6, 66, 86, 420, 69, 81, 101, 393, 421, 422, 422, 33,
- 6, 6, 6, 6, 6, 6, 142, 0, 423, 424, 4, 425, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 0, 0, 50, 33, 4, 165, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 176, 336, 0, 426, 427, 403, 345, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 0, 0, 428, 33, 4, 165, 429, 430, 33, 33,
- 6, 6, 6, 6, 6, 25, 0, 89, 4, 165, 33, 33, 33, 33, 33, 33,
- 124, 124, 124, 431, 124, 173, 4, 432, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 181, 0, 433, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 6, 6, 6, 6, 6, 6, 6, 6, 4, 44, 56, 290,
- 33, 33, 33, 33, 6, 118, 6, 6, 6, 6, 61, 434, 435, 33, 33, 33,
- 61, 184, 6, 6, 6, 6, 25, 436, 437, 33, 61, 50, 6, 6, 6, 6,
- 6, 438, 0, 439, 440, 33, 33, 33, 6, 6, 6, 6, 6, 6, 6, 89,
- 6, 66, 6, 6, 6, 176, 180, 0, 441, 33, 4, 44, 6, 139, 442, 6,
- 6, 6, 434, 0, 0, 30, 180, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 28, 24, 6, 6, 6, 6, 443, 444, 445, 33, 4, 165, 45, 66, 6, 6,
- 6, 446, 194, 89, 4, 165, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 447, 89,
- 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 448, 449, 6, 155, 450,
- 6, 6, 6, 155, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 451, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 182, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 452, 6, 6, 6, 6,
- 453, 454, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 455,
- 6, 6, 6, 6, 6, 28, 456, 457, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 282, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 28, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 89, 6, 6, 6, 28, 4, 458, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 58, 459, 33,
- 6, 6, 6, 6, 6, 6, 140, 460, 461, 33, 4, 462, 24, 6, 6, 393,
- 6, 6, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 463, 464, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 465, 61, 0, 0, 0, 0, 0,
- 0, 71, 184, 6, 33, 33, 33, 33, 33, 33, 33, 33, 466, 33, 33, 33,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 33,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 324, 33,
- 267, 267, 267, 323, 33, 33, 33, 33, 33, 33, 467, 33, 468, 33, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 303,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 56, 6, 139,
- 6, 89, 6, 469, 170, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 58, 33,
- 6, 6, 6, 6, 28, 27, 6, 6, 6, 6, 6, 6, 142, 470, 0, 0,
- 471, 50, 6, 6, 6, 472, 6, 6, 6, 6, 6, 6, 6, 89, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 473, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 182, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 33, 6, 6, 6, 89,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 57, 6, 6, 6, 6, 6,
- 6, 6, 6, 57, 474, 475, 6, 476, 109, 6, 6, 6, 6, 6, 6, 6,
- 45, 189, 57, 57, 6, 6, 6, 477, 478, 118, 66, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 479, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 423, 25, 0, 0, 0, 0, 0, 103, 480, 6,
- 481, 482, 33, 59, 30, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 180, 0, 0, 483, 484, 394, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 139, 423, 58, 4, 343, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 6, 6, 6, 6, 6, 181, 4, 485,
- 6, 6, 6, 6, 6, 6, 6, 6, 64, 6, 180, 33, 33, 33, 33, 33,
- 6, 6, 6, 6, 6, 6, 6, 6, 181, 433, 4, 486, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 27, 6,
- 6, 6, 6, 6, 6, 487, 488, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 27, 6, 6, 6, 6, 6, 6, 58, 33, 33, 33, 33, 33, 33, 33, 33,
- 109, 6, 6, 6, 489, 27, 490, 491, 492, 493, 489, 195, 489, 490, 490, 83,
- 6, 24, 6, 182, 494, 24, 6, 182, 33, 33, 33, 33, 33, 33, 155, 33,
- 227, 495, 227, 227, 227, 496, 227, 227, 227, 227, 227, 227, 227, 497, 227, 227,
- 227, 227, 227, 227, 227, 495, 267, 267, 267, 267, 267, 267, 498, 499, 499, 499,
- 500, 267, 267, 501, 267, 267, 502, 503, 504, 505, 267, 267, 267, 267, 267, 506,
- 267, 267, 267, 267, 267, 267, 267, 267, 507, 508, 509, 267, 510, 508, 508, 511,
- 512, 513, 514, 267, 515, 516, 517, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 264, 267, 518, 6, 266, 267, 519, 6, 6, 520, 267, 267, 267, 267, 521, 522,
- 267, 267, 523, 267, 267, 267, 267, 267, 267, 267, 249, 524, 267, 267, 249, 520,
- 267, 267, 267, 267, 267, 267, 267, 267, 525, 526, 6, 6, 6, 6, 527, 528,
- 267, 267, 267, 267, 529, 267, 530, 267, 509, 531, 267, 267, 267, 267, 267, 267,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 524, 267,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 266, 267, 267, 267, 267, 267,
- 6, 524, 6, 6, 6, 6, 6, 6, 6, 267, 6, 520, 6, 6, 6, 6,
- 6, 267, 6, 6, 6, 532, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 6, 533, 267, 508, 534, 267, 508, 535, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 536, 537, 267, 525, 538, 539, 267, 267, 267, 267,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 524, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 304,
- 82, 33, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33,
+/* Terminal_Punctuation. */
+static RE_UINT8 re_terminal_punctuation_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 13, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14,
+ 15, 9, 16, 17, 18, 19, 20, 21, 9, 22, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 25,
+ 9, 9, 9, 9, 9, 9, 26, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_line_break_stage_4[] = {
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 22, 20, 20, 21, 16, 16,
- 19, 6, 3, 12, 9, 10, 12, 3, 1, 36, 12, 9, 8, 15, 8, 7,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 12, 12, 12, 6,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 9, 36, 12, 12,
- 12, 12, 12, 1, 18, 2, 12, 16, 16, 16, 16, 16, 16, 29, 16, 16,
- 4, 1, 10, 9, 9, 9, 12, 25, 25, 12, 25, 3, 12, 18, 12, 12,
- 10, 9, 25, 25, 17, 12, 25, 25, 25, 25, 25, 3, 25, 25, 25, 1,
- 12, 12, 12, 12, 12, 12, 12, 25, 17, 25, 25, 25, 17, 25, 12, 12,
- 25, 12, 12, 12, 12, 12, 12, 12, 25, 25, 25, 25, 12, 25, 12, 17,
- 16, 16, 16, 16, 16, 16, 16, 4, 16, 16, 16, 16, 4, 4, 4, 4,
- 4, 4, 4, 16, 16, 16, 16, 16, 0, 0, 12, 12, 12, 12, 8, 12,
- 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 0, 12, 12,
- 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16,
- 16, 16, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 0, 12, 8, 18, 0, 0, 12, 12, 9,
- 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 16,
- 12, 16, 16, 12, 16, 16, 6, 16, 0, 0, 0, 0, 0, 0, 0, 0,
- 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, 0, 37,
- 37, 37, 37, 12, 12, 0, 0, 0, 12, 10, 10, 10, 8, 8, 12, 12,
- 16, 16, 16, 6, 16, 0, 6, 6, 11, 11, 10, 11, 11, 12, 12, 12,
- 16, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 12, 16, 16,
- 16, 16, 16, 16, 16, 12, 12, 16, 16, 12, 16, 16, 16, 16, 12, 12,
- 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 12,
- 12, 16, 12, 12, 12, 12, 12, 12, 16, 16, 16, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 16, 16, 16, 12, 0, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 12, 12, 12, 12, 8, 6, 12, 0, 0, 16, 9, 9,
- 16, 16, 12, 16, 16, 16, 16, 16, 16, 16, 16, 16, 12, 16, 16, 16,
- 12, 16, 16, 16, 16, 16, 0, 0, 12, 16, 16, 16, 0, 0, 12, 0,
- 12, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 0, 12, 12,
- 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16,
- 12, 12, 16, 16, 16, 12, 16, 16, 12, 16, 16, 16, 16, 16, 16, 16,
- 12, 12, 16, 16, 18, 18, 11, 11, 12, 16, 16, 16, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 0, 0, 12, 12, 0, 0, 12, 12, 12, 12, 12,
- 12, 0, 12, 12, 12, 12, 12, 12, 12, 0, 12, 0, 0, 0, 12, 12,
- 12, 12, 0, 0, 16, 12, 16, 16, 16, 16, 16, 16, 16, 0, 0, 16,
- 16, 0, 0, 16, 16, 16, 12, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 0, 0, 12, 12, 0, 12, 12, 12, 16, 16, 0, 0, 11, 11,
- 12, 12, 10, 10, 12, 12, 12, 12, 12, 10, 12, 9, 12, 12, 16, 0,
- 0, 16, 16, 16, 0, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 12,
- 12, 0, 12, 12, 0, 12, 12, 0, 12, 12, 0, 0, 16, 0, 16, 16,
- 16, 16, 16, 0, 0, 0, 0, 16, 16, 0, 0, 16, 16, 16, 0, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 11, 11, 16, 16, 12, 12, 12, 16, 12, 0,
- 12, 0, 12, 12, 0, 12, 12, 12, 16, 16, 16, 16, 16, 16, 0, 16,
- 16, 16, 0, 16, 16, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 12, 9, 0, 0, 0, 0, 0, 0, 0, 12, 16, 16, 16, 16, 16, 16,
- 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 16, 12, 0, 12, 12, 12,
- 12, 12, 12, 0, 0, 0, 12, 12, 12, 0, 12, 12, 12, 12, 0, 0,
- 0, 12, 12, 0, 12, 0, 12, 12, 0, 0, 0, 12, 12, 0, 0, 0,
- 12, 12, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16,
- 16, 0, 16, 16, 16, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 16,
- 12, 9, 12, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 12, 12, 12,
- 12, 12, 0, 0, 0, 12, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16,
- 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17,
- 12, 16, 16, 16, 17, 12, 12, 12, 12, 12, 12, 12, 0, 12, 12, 12,
- 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 12, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 0, 12, 12, 12, 12, 12, 12, 16, 16, 12, 16, 16,
- 16, 0, 16, 16, 16, 16, 12, 12, 0, 0, 0, 0, 12, 12, 12, 16,
- 12, 10, 12, 12, 12, 12, 12, 12, 0, 0, 16, 16, 0, 12, 12, 12,
- 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 12, 0, 0,
- 0, 0, 16, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 0, 16, 0,
- 0, 0, 16, 16, 12, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 9,
- 24, 24, 24, 24, 24, 24, 24, 12, 11, 11, 18, 18, 0, 0, 0, 0,
- 0, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24,
- 24, 24, 24, 24, 0, 24, 0, 24, 24, 24, 24, 24, 24, 24, 0, 0,
- 24, 24, 24, 24, 24, 0, 24, 0, 11, 11, 0, 0, 24, 24, 24, 24,
- 12, 17, 17, 17, 17, 12, 17, 17, 4, 17, 17, 18, 4, 6, 6, 6,
- 6, 6, 4, 12, 6, 12, 12, 12, 12, 12, 12, 12, 18, 16, 12, 16,
- 12, 16, 1, 2, 1, 2, 16, 16, 12, 12, 12, 12, 12, 0, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 16, 18, 16, 16,
- 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 16, 16, 0, 18, 18,
- 12, 12, 12, 12, 12, 12, 16, 12, 17, 17, 18, 17, 12, 12, 12, 12,
- 12, 4, 4, 0, 0, 0, 0, 0, 11, 11, 18, 18, 12, 12, 12, 12,
- 11, 11, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 12, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32,
- 33, 33, 33, 33, 33, 33, 33, 33, 12, 12, 12, 0, 0, 16, 16, 16,
- 12, 18, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0,
- 18, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 0, 0, 0,
- 12, 12, 12, 18, 18, 18, 12, 12, 12, 12, 16, 16, 16, 0, 0, 0,
- 12, 12, 16, 16, 16, 18, 18, 0, 12, 12, 16, 16, 0, 0, 0, 0,
- 12, 0, 16, 16, 0, 0, 0, 0, 24, 24, 24, 24, 18, 18, 5, 24,
- 18, 12, 18, 9, 24, 24, 0, 0, 11, 11, 0, 0, 0, 0, 0, 0,
- 12, 12, 6, 6, 18, 18, 17, 12, 6, 6, 12, 16, 16, 16, 4, 0,
- 12, 12, 12, 12, 12, 16, 16, 12, 12, 16, 12, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 0, 0, 0, 0, 12, 0, 0, 0, 6, 6, 11, 11,
- 24, 24, 24, 24, 24, 0, 0, 0, 24, 24, 24, 24, 0, 0, 0, 0,
- 24, 24, 0, 0, 0, 0, 0, 0, 11, 11, 24, 0, 0, 0, 24, 24,
- 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 0, 0, 12, 12,
- 24, 24, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24, 24, 0, 0, 16,
- 16, 16, 16, 16, 16, 16, 16, 0, 12, 12, 12, 12, 16, 16, 16, 16,
- 12, 12, 12, 12, 0, 0, 0, 0, 11, 11, 18, 18, 12, 18, 18, 18,
- 16, 16, 16, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 12, 12,
- 0, 0, 0, 18, 18, 18, 18, 18, 11, 11, 0, 0, 0, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 18, 18, 12, 12, 12, 0, 0, 12, 12, 12,
- 16, 16, 16, 12, 16, 16, 16, 16, 16, 12, 12, 12, 12, 16, 12, 12,
- 12, 12, 12, 12, 16, 12, 12, 16, 16, 16, 12, 0, 0, 0, 0, 0,
- 16, 16, 0, 16, 16, 16, 16, 16, 0, 12, 0, 12, 0, 12, 0, 12,
- 12, 12, 12, 12, 0, 0, 12, 12, 0, 0, 12, 12, 12, 0, 12, 12,
- 12, 12, 12, 12, 12, 17, 12, 0, 18, 18, 18, 18, 18, 18, 18, 4,
- 18, 18, 18, 28, 16, 42, 16, 16, 18, 4, 18, 18, 26, 25, 25, 12,
- 3, 3, 1, 3, 3, 3, 1, 3, 25, 25, 12, 12, 14, 14, 14, 18,
- 20, 20, 16, 16, 16, 16, 16, 4, 10, 10, 10, 10, 10, 10, 10, 10,
- 12, 3, 3, 25, 5, 5, 12, 12, 12, 12, 12, 12, 8, 1, 2, 5,
- 5, 5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 12,
- 18, 18, 18, 18, 12, 18, 18, 18, 30, 12, 12, 12, 12, 0, 16, 16,
- 12, 12, 0, 0, 25, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 25,
- 12, 25, 25, 25, 25, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 0,
- 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 10, 9, 9, 9, 9, 10, 9, 9, 10, 9,
- 16, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 10, 12, 25, 12, 12,
- 12, 12, 12, 25, 12, 12, 9, 12, 12, 25, 25, 12, 12, 12, 12, 12,
- 12, 12, 12, 25, 12, 12, 12, 12, 12, 12, 12, 12, 25, 25, 12, 12,
- 12, 12, 12, 25, 12, 12, 25, 12, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 12, 12, 12, 12, 25, 25, 12, 12, 12, 12, 12, 12,
- 12, 25, 12, 12, 0, 0, 0, 0, 12, 12, 25, 12, 25, 12, 12, 12,
- 25, 12, 25, 25, 12, 12, 12, 25, 25, 12, 12, 25, 12, 12, 12, 25,
- 12, 25, 9, 9, 12, 25, 12, 12, 12, 12, 25, 12, 12, 25, 25, 25,
- 25, 12, 12, 25, 12, 25, 12, 25, 25, 25, 25, 25, 25, 12, 25, 12,
- 12, 12, 12, 12, 25, 25, 25, 25, 25, 12, 12, 12, 25, 12, 12, 12,
- 12, 12, 25, 12, 12, 12, 12, 12, 25, 25, 12, 12, 25, 25, 25, 25,
- 12, 12, 25, 25, 12, 12, 25, 25, 12, 12, 12, 12, 12, 25, 12, 12,
- 12, 25, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14,
- 1, 2, 1, 2, 12, 12, 12, 12, 12, 12, 13, 13, 12, 12, 12, 12,
- 12, 1, 2, 12, 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12,
- 25, 25, 25, 25, 25, 25, 25, 12, 25, 25, 25, 25, 25, 12, 12, 12,
- 12, 12, 25, 25, 25, 25, 12, 12, 25, 25, 12, 25, 25, 25, 25, 25,
- 25, 25, 12, 12, 12, 12, 25, 25, 25, 12, 12, 25, 12, 12, 25, 25,
- 13, 13, 13, 13, 12, 25, 25, 12, 12, 25, 12, 12, 12, 12, 25, 25,
- 12, 12, 12, 12, 13, 13, 25, 25, 13, 12, 13, 13, 13, 40, 13, 13,
- 12, 13, 13, 13, 12, 12, 12, 12, 25, 12, 25, 12, 12, 12, 12, 12,
- 25, 25, 12, 25, 25, 25, 12, 25, 13, 25, 25, 12, 25, 25, 12, 25,
- 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 25, 25,
- 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 25, 25, 25, 25, 13, 12, 13, 13, 13, 25, 13, 13, 25, 25, 25,
- 13, 13, 25, 25, 13, 25, 25, 13, 13, 13, 12, 25, 12, 12, 12, 12,
- 25, 25, 13, 25, 25, 25, 25, 25, 25, 13, 13, 13, 13, 13, 25, 13,
- 13, 40, 13, 25, 25, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12,
- 13, 13, 40, 40, 40, 40, 12, 12, 12, 12, 12, 3, 3, 3, 3, 3,
- 3, 12, 6, 6, 13, 12, 12, 12, 1, 2, 1, 2, 1, 2, 1, 2,
- 1, 2, 1, 2, 1, 2, 25, 25, 12, 12, 12, 12, 12, 1, 2, 12,
- 12, 12, 12, 12, 12, 12, 1, 2, 12, 12, 12, 1, 2, 1, 2, 1,
- 2, 1, 2, 1, 2, 1, 2, 1, 2, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 1, 2, 12, 12, 12, 12, 12, 12, 12, 25, 25, 25,
- 16, 16, 12, 12, 0, 0, 0, 0, 0, 6, 18, 18, 18, 12, 6, 18,
- 0, 0, 0, 0, 0, 0, 0, 12, 18, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 18, 18,
- 18, 18, 18, 18, 18, 18, 12, 18, 1, 18, 12, 12, 3, 3, 12, 12,
- 3, 3, 1, 2, 1, 2, 1, 2, 1, 2, 18, 18, 18, 18, 6, 12,
- 18, 18, 12, 18, 18, 12, 12, 12, 12, 12, 26, 26, 18, 18, 18, 12,
- 18, 18, 1, 18, 18, 18, 18, 18, 18, 18, 18, 12, 18, 12, 18, 18,
- 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 13, 0, 0, 18, 2, 2, 13, 13, 5, 13, 13,
- 1, 2, 13, 13, 1, 2, 1, 2, 1, 2, 1, 2, 5, 1, 2, 2,
- 13, 13, 16, 16, 16, 16, 16, 16, 13, 13, 13, 13, 13, 16, 13, 13,
- 13, 13, 13, 5, 5, 13, 13, 13, 0, 38, 13, 38, 13, 38, 13, 38,
- 13, 38, 13, 13, 13, 13, 13, 13, 13, 13, 13, 38, 13, 13, 13, 13,
- 13, 13, 13, 38, 13, 38, 13, 38, 13, 13, 13, 13, 13, 13, 38, 13,
- 13, 13, 13, 13, 13, 38, 38, 0, 0, 16, 16, 5, 5, 5, 5, 13,
- 5, 38, 13, 38, 13, 38, 13, 38, 13, 13, 13, 13, 13, 38, 38, 13,
- 13, 13, 13, 5, 38, 5, 5, 13, 0, 0, 0, 0, 0, 13, 13, 13,
- 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0,
- 13, 13, 13, 0, 0, 0, 0, 0, 38, 38, 38, 38, 38, 38, 38, 38,
- 13, 13, 13, 13, 13, 5, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0,
- 12, 12, 12, 12, 12, 18, 6, 18, 11, 11, 12, 12, 0, 0, 0, 0,
- 16, 16, 12, 18, 18, 18, 18, 18, 0, 0, 12, 12, 12, 12, 12, 0,
- 12, 12, 16, 12, 12, 12, 16, 12, 12, 12, 12, 16, 12, 12, 12, 12,
- 10, 12, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 17, 17, 6, 6,
- 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18,
- 12, 12, 12, 12, 17, 12, 12, 16, 16, 16, 16, 16, 16, 16, 18, 18,
- 31, 31, 31, 31, 31, 0, 0, 0, 16, 12, 12, 12, 12, 12, 12, 18,
- 18, 18, 12, 12, 12, 12, 0, 12, 11, 11, 0, 0, 0, 0, 12, 12,
- 11, 11, 24, 24, 24, 24, 24, 0, 12, 12, 12, 12, 16, 16, 0, 0,
- 11, 11, 0, 0, 12, 18, 18, 18, 24, 24, 24, 0, 0, 0, 0, 0,
- 0, 0, 0, 24, 24, 24, 24, 24, 18, 18, 12, 12, 12, 16, 16, 0,
- 0, 12, 12, 12, 12, 12, 12, 0, 16, 16, 16, 18, 16, 16, 0, 0,
- 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 34, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0,
- 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27,
- 0, 0, 0, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 37, 16, 37,
- 37, 12, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0,
- 37, 37, 37, 37, 37, 0, 37, 0, 37, 37, 0, 37, 37, 0, 37, 37,
- 12, 12, 12, 12, 12, 12, 2, 1, 12, 12, 12, 12, 10, 12, 0, 0,
- 8, 2, 2, 8, 8, 6, 6, 1, 2, 14, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 1, 2, 1, 2, 1, 2, 1, 2, 13, 13, 1,
- 2, 13, 13, 13, 13, 13, 13, 13, 2, 13, 2, 0, 5, 5, 6, 6,
- 13, 1, 2, 1, 2, 1, 2, 13, 13, 9, 10, 13, 0, 0, 0, 0,
- 12, 12, 12, 12, 12, 0, 0, 30, 0, 6, 13, 13, 9, 10, 13, 13,
- 1, 2, 13, 13, 2, 13, 2, 13, 13, 13, 5, 5, 13, 13, 13, 6,
- 13, 13, 13, 1, 13, 2, 13, 13, 13, 13, 13, 1, 13, 2, 13, 1,
- 2, 2, 1, 2, 2, 5, 13, 38, 38, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 5, 5, 0, 0, 13, 13, 13, 13, 13, 13,
- 0, 0, 13, 13, 13, 0, 0, 0, 10, 9, 13, 13, 13, 9, 9, 0,
- 0, 16, 16, 16, 23, 25, 0, 0, 12, 12, 12, 0, 12, 12, 0, 12,
- 18, 18, 18, 0, 0, 0, 0, 12, 12, 12, 12, 12, 0, 0, 0, 12,
- 12, 12, 12, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12,
- 16, 16, 16, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 0, 18,
- 18, 12, 12, 12, 12, 12, 0, 0, 12, 0, 0, 0, 12, 0, 0, 12,
- 12, 12, 12, 0, 12, 12, 0, 0, 12, 12, 12, 12, 0, 0, 0, 18,
- 12, 12, 0, 0, 0, 0, 0, 12, 12, 16, 16, 16, 0, 16, 16, 0,
- 0, 0, 0, 0, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18,
- 12, 12, 12, 12, 12, 16, 16, 0, 18, 18, 18, 18, 18, 18, 14, 0,
- 0, 18, 18, 18, 18, 18, 18, 18, 0, 12, 12, 12, 12, 0, 0, 0,
- 12, 12, 12, 12, 12, 12, 11, 11, 16, 16, 16, 12, 12, 12, 18, 18,
- 18, 18, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 11, 11,
- 18, 18, 18, 18, 12, 16, 16, 0, 12, 12, 12, 16, 12, 17, 12, 0,
- 16, 12, 12, 12, 12, 18, 18, 12, 18, 16, 16, 16, 16, 12, 0, 0,
- 11, 11, 12, 17, 12, 18, 18, 18, 18, 18, 12, 18, 18, 12, 16, 0,
- 12, 0, 12, 12, 12, 12, 0, 12, 12, 18, 0, 0, 0, 0, 0, 0,
- 12, 12, 0, 16, 16, 12, 16, 16, 12, 12, 16, 16, 0, 0, 16, 16,
- 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 12,
- 12, 12, 12, 18, 18, 18, 18, 12, 11, 11, 0, 18, 0, 12, 16, 12,
- 16, 17, 18, 18, 6, 6, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18,
- 16, 18, 18, 12, 12, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 0, 0, 0, 24, 24, 24, 0, 0, 24, 24, 24,
- 11, 11, 24, 24, 18, 18, 18, 24, 16, 16, 16, 12, 0, 0, 0, 0,
- 0, 0, 16, 16, 16, 16, 16, 16, 16, 12, 17, 12, 16, 0, 0, 0,
- 16, 16, 12, 16, 16, 16, 16, 17, 12, 18, 18, 18, 18, 17, 12, 16,
- 12, 12, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 12, 17, 17,
- 17, 18, 18, 0, 0, 0, 0, 0, 12, 18, 18, 18, 18, 18, 0, 0,
- 17, 6, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 0,
- 0, 0, 16, 0, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 12, 16,
- 12, 12, 16, 16, 16, 16, 16, 0, 12, 12, 12, 16, 16, 16, 16, 12,
- 12, 12, 12, 12, 12, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12,
- 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0,
- 1, 1, 1, 2, 2, 2, 12, 12, 12, 12, 2, 12, 12, 12, 1, 2,
- 1, 2, 12, 12, 12, 12, 12, 12, 12, 1, 2, 2, 12, 12, 12, 12,
- 4, 4, 4, 4, 4, 4, 4, 1, 2, 0, 0, 0, 0, 0, 0, 0,
- 11, 11, 0, 0, 0, 0, 18, 18, 16, 16, 16, 16, 16, 18, 0, 0,
- 18, 18, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 12, 0, 0,
- 11, 11, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18,
- 18, 12, 12, 0, 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0, 16,
- 5, 5, 5, 5, 0, 0, 0, 0, 38, 38, 38, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 38, 38, 38, 38, 12, 12, 0, 0, 12, 16, 16, 18,
- 16, 16, 12, 12, 12, 16, 16, 16, 16, 16, 16, 12, 12, 16, 16, 16,
- 12, 12, 16, 16, 16, 16, 12, 12, 12, 12, 16, 16, 16, 12, 0, 0,
- 0, 0, 12, 0, 0, 12, 12, 0, 0, 12, 12, 12, 12, 0, 12, 12,
- 12, 12, 0, 12, 0, 12, 12, 12, 12, 12, 0, 12, 12, 12, 12, 0,
- 12, 12, 12, 12, 12, 0, 12, 0, 12, 12, 12, 12, 0, 0, 11, 11,
- 12, 12, 12, 12, 12, 16, 12, 12, 12, 12, 12, 12, 16, 12, 12, 18,
- 18, 18, 18, 12, 0, 0, 0, 0, 16, 0, 0, 16, 16, 16, 16, 16,
- 16, 16, 0, 16, 16, 0, 16, 16, 11, 11, 0, 0, 0, 0, 0, 9,
- 11, 11, 0, 0, 0, 0, 1, 1, 12, 12, 12, 12, 10, 12, 12, 12,
- 10, 12, 12, 12, 12, 0, 0, 0, 0, 12, 12, 0, 12, 0, 0, 12,
- 12, 12, 12, 0, 12, 12, 12, 12, 0, 12, 0, 12, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 12, 12,
- 0, 12, 12, 12, 0, 12, 12, 12, 25, 25, 25, 25, 25, 13, 13, 13,
- 25, 25, 25, 25, 25, 25, 12, 12, 25, 25, 12, 12, 12, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
- 13, 13, 13, 13, 13, 40, 13, 13, 13, 13, 13, 13, 12, 12, 13, 13,
- 13, 13, 13, 13, 13, 12, 12, 13, 13, 13, 13, 13, 12, 13, 13, 13,
- 13, 13, 40, 40, 40, 13, 13, 40, 13, 13, 40, 40, 40, 13, 13, 13,
- 13, 13, 13, 41, 41, 41, 41, 41, 13, 13, 40, 40, 13, 13, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 40, 40, 40, 13, 13, 13, 40, 13, 13, 13,
- 13, 40, 40, 40, 13, 40, 40, 40, 13, 13, 13, 13, 13, 13, 13, 40,
- 13, 40, 13, 13, 13, 13, 13, 13, 12, 13, 12, 13, 12, 13, 13, 13,
- 13, 13, 40, 13, 13, 13, 13, 12, 13, 12, 12, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 12, 13, 13, 12, 12, 12, 12, 12, 12,
- 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 40, 40, 13, 13,
- 13, 13, 40, 13, 13, 13, 13, 13, 40, 13, 13, 13, 13, 40, 40, 13,
- 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 40, 40, 40,
- 13, 13, 13, 40, 40, 40, 40, 40, 12, 12, 12, 12, 12, 12, 3, 3,
- 3, 5, 5, 5, 12, 12, 12, 12, 13, 13, 13, 40, 13, 13, 13, 13,
- 13, 13, 13, 13, 40, 40, 40, 13, 13, 13, 13, 13, 40, 13, 13, 13,
- 12, 12, 12, 12, 12, 12, 13, 13, 12, 12, 12, 12, 13, 13, 13, 40,
- 13, 13, 13, 13, 13, 13, 40, 13, 40, 40, 13, 13, 40, 40, 40, 13,
- 13, 13, 13, 13, 13, 40, 40, 13, 40, 40, 13, 40, 13, 13, 13, 13,
- 13, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 13, 13,
+static RE_UINT8 re_terminal_punctuation_table_2[] = {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0,
+ 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 9,
+ 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 19, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
+ 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,
+ 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 26, 0,
+ 0, 0, 35, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 39, 0, 0, 0, 0, 0, 1, 0, 0, 40, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 41, 0,
+ 0, 0, 42, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32, 0, 0, 0, 0, 43, 0, 44, 0, 0, 45, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0,
+ 0, 0, 47, 0, 0, 24, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0,
+ 0, 51, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
+ 0, 0, 29, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0,
+ 0, 0, 56, 0, 57, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 49, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 0, 0, 0, 61, 0, 62, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Line_Break: 12816 bytes. */
-
-RE_UINT32 re_get_line_break(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_line_break_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_line_break_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_line_break_stage_3[pos + f] << 3;
- value = re_line_break_stage_4[pos + code];
-
- return value;
-}
-
-/* Numeric_Type. */
-
-static RE_UINT8 re_numeric_type_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 8,
- 15, 16, 17, 8, 18, 19, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20,
- 21, 22, 23, 24, 25, 8, 8, 8, 8, 8, 8, 8, 8, 26, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 27, 8, 28, 29, 30, 8,
- 31, 32, 8, 8, 33, 34, 8, 35, 8, 8, 8, 8, 36, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 37,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+static RE_UINT8 re_terminal_punctuation_table_3[] = {
+ 0, 0, 0, 0, 2, 80, 0, 140, 0, 0, 0, 64, 128, 0, 0, 0,
+ 0, 2, 0, 0, 8, 0, 0, 0, 0, 16, 0, 200, 0, 0, 16, 0,
+ 255, 23, 0, 0, 0, 0, 0, 3, 0, 0, 255, 127, 48, 0, 0, 0,
+ 0, 0, 0, 12, 0, 225, 7, 0, 0, 12, 0, 0, 254, 1, 0, 0,
+ 0, 64, 0, 0, 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 4,
+ 60, 3, 0, 0, 0, 15, 0, 0, 0, 0, 0, 236, 0, 0, 0, 248,
+ 0, 0, 0, 192, 0, 0, 0, 48, 128, 3, 0, 0, 0, 64, 0, 16,
+ 2, 208, 0, 0, 6, 0, 0, 0, 0, 224, 0, 0, 0, 0, 248, 0,
+ 0, 0, 192, 0, 0, 192, 0, 0, 0, 128, 0, 0, 0, 0, 0, 224,
+ 0, 0, 0, 128, 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 247, 0,
+ 18, 0, 0, 0, 0, 0, 1, 0, 0, 0, 128, 0, 0, 0, 63, 0,
+ 0, 0, 0, 252, 0, 0, 0, 30, 0, 0, 224, 3, 128, 63, 0, 0,
+ 3, 0, 0, 0, 14, 0, 0, 0, 96, 32, 0, 192, 0, 0, 0, 31,
+ 0, 56, 0, 12, 60, 254, 255, 0, 0, 0, 0, 112, 80, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 24, 0, 0, 2, 0, 0, 0, 128, 1,
+ 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 128, 3, 16, 0, 0, 0,
+ 128, 7, 0, 0
};
-static RE_UINT8 re_numeric_type_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 5, 1, 6, 1, 5, 1, 5, 1, 7, 1, 8,
- 1, 9, 1, 5, 1, 10, 1, 5, 1, 11, 1, 11, 12, 1, 1, 1,
- 1, 4, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 15,
- 11, 1, 1, 1, 1, 16, 1, 17, 1, 1, 18, 1, 1, 11, 0, 1,
- 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 19, 20, 1, 1, 21, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 23, 24, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 27, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 29, 1, 1, 1, 1, 1, 30, 1, 31, 32, 33, 1, 1, 1, 1, 1,
- 34, 1, 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 38, 39, 40, 41, 37, 42, 1, 1,
- 1, 1, 1, 1, 43, 44, 1, 1, 1, 1, 1, 1, 1, 45, 1, 46,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1, 1,
- 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 50, 51, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 53, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 55, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 1, 1, 1, 1, 1,
- 1, 1, 55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 58, 1, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 59, 60, 1, 61, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 62, 1, 1, 1, 1,
- 63, 1, 1, 11, 4, 1, 1, 64, 1, 11, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 65, 66, 67, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1,
- 1, 1, 1, 1, 68, 69, 70, 1, 1, 1, 1, 71, 72, 73, 1, 74,
- 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 75, 76, 77, 78, 1, 79, 80, 1, 81, 82, 83, 1, 84, 85, 1,
- 1, 1, 1, 86, 0, 1, 1, 1, 1, 87, 1, 1, 88, 89, 1, 1,
- 1, 90, 1, 0, 91, 1, 1, 92, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 11, 1, 11, 1, 1, 1, 1, 1, 11, 1, 4, 93, 1, 1, 1,
- 1, 1, 1, 94, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 95, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 96,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 97, 98, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 99, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 100, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 101, 1, 102, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103,
- 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 104, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 105, 106, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 109, 110, 1, 111, 59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 36, 1, 112, 1, 1, 1, 1, 113, 114, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 115, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 116, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 117, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 115, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
+RE_UINT32 re_get_terminal_punctuation(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-static RE_UINT8 re_numeric_type_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 1, 2, 0, 0,
- 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 0, 0,
- 0, 0, 0, 0, 5, 1, 6, 7, 0, 0, 0, 0, 5, 1, 8, 0,
- 0, 0, 0, 0, 5, 1, 9, 0, 0, 0, 0, 0, 5, 1, 0, 10,
- 0, 0, 0, 10, 5, 1, 11, 12, 0, 0, 1, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 13, 14, 0, 0, 0, 0, 0, 0, 15, 16, 17,
- 0, 0, 0, 0, 0, 18, 12, 0, 0, 0, 0, 0, 1, 2, 11, 7,
- 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 0, 0, 0, 0,
- 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21,
- 22, 21, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11,
- 23, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 24, 25, 26,
- 11, 22, 24, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29,
- 0, 0, 0, 0, 0, 0, 30, 31, 22, 32, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, 0, 36, 7, 0, 9,
- 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 0, 0,
- 0, 11, 36, 11, 0, 0, 0, 0, 11, 7, 0, 0, 0, 0, 36, 11,
- 34, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,
- 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0,
- 0, 42, 43, 0, 0, 0, 0, 35, 12, 0, 0, 35, 0, 12, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 0, 42, 0, 0, 0, 0, 0, 0, 0,
- 44, 0, 0, 0, 0, 45, 0, 0, 46, 42, 0, 0, 0, 0, 0, 0,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 41, 41, 0, 0, 0, 0, 0, 0, 0, 39,
- 0, 0, 0, 0, 0, 0, 0, 18, 0, 48, 12, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 44, 0, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0,
- 0, 0, 0, 0, 0, 44, 38, 0, 0, 0, 0, 0, 41, 0, 0, 0,
- 44, 42, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 44, 0,
- 0, 0, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 0, 0, 0, 38, 38, 12,
- 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 50, 0, 0, 0, 0, 34,
- 35, 11, 11, 11, 11, 11, 14, 0, 11, 11, 11, 11, 11, 11, 11, 12,
- 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 11, 11, 14,
- 0, 0, 0, 0, 14, 0, 0, 0, 41, 39, 0, 0, 0, 0, 0, 0,
- 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 36,
- 0, 0, 0, 0, 35, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
- 0, 0, 18, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 11, 11, 8, 11, 11, 11, 11, 11, 55, 12, 0, 0, 0, 0, 0, 56,
- 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0,
- 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 0, 0, 36, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 22, 24, 11, 10,
- 0, 0, 0, 57, 10, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 0, 0, 58, 59, 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1,
- 0, 0, 1, 2, 36, 11, 17, 0, 0, 0, 0, 0, 0, 0, 1, 61,
- 0, 0, 0, 0, 1, 13, 9, 0, 0, 0, 1, 13, 11, 17, 0, 0,
- 11, 11, 17, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 10, 0, 0, 0, 0, 1, 62, 7, 0, 0, 0,
- 11, 11, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 14, 0,
- 0, 0, 0, 0, 11, 11, 11, 12, 0, 5, 1, 1, 1, 1, 1, 1,
- 35, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 11,
- 11, 11, 11, 11, 11, 63, 47, 0, 36, 11, 11, 11, 11, 64, 11, 49,
- 22, 65, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
- 38, 42, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 34,
- 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0,
- 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-static RE_UINT8 re_numeric_type_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0,
- 0, 2, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3,
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 2, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 1, 1, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
- 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0,
- 3, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 1, 1, 0, 0, 0,
-};
+ v = re_terminal_punctuation_table_1[field_2];
+ v = re_terminal_punctuation_table_2[(v << 5) | field_1];
+ v = re_terminal_punctuation_table_3[(v << 2) | field_0];
-/* Numeric_Type: 3232 bytes. */
-
-RE_UINT32 re_get_numeric_type(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_numeric_type_stage_1[f] << 5;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_numeric_type_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_numeric_type_stage_3[pos + f] << 3;
- value = re_numeric_type_stage_4[pos + code];
-
- return value;
+ return (v >> offset) & 0x1;
}
-/* Numeric_Value. */
-
-static RE_UINT8 re_numeric_value_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 8,
- 15, 16, 17, 8, 18, 19, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20,
- 21, 22, 23, 24, 25, 8, 8, 8, 8, 8, 8, 8, 8, 26, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 27, 8, 28, 29, 30, 8,
- 31, 32, 8, 8, 33, 34, 8, 35, 8, 8, 8, 8, 36, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 37,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+/* Unified_Ideograph. */
+static RE_UINT8 re_unified_ideograph_table_1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 6, 7, 1,
+ 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_numeric_value_stage_2[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 5, 1, 6, 1, 5, 1, 5, 1, 7, 1, 8,
- 1, 9, 1, 5, 1, 10, 1, 5, 1, 11, 1, 11, 12, 1, 1, 1,
- 1, 4, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 15,
- 11, 1, 1, 1, 1, 16, 1, 17, 1, 1, 18, 1, 1, 11, 0, 1,
- 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 19, 4, 1, 1, 20, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 22, 23, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 28, 1, 1, 1, 1, 1, 29, 1, 30, 31, 32, 1, 1, 1, 1, 1,
- 33, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 37, 38, 39, 40, 41, 42, 1, 1,
- 1, 1, 1, 1, 43, 44, 1, 1, 1, 1, 1, 1, 1, 45, 1, 46,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1, 1,
- 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 50, 51, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 53, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 55, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1, 1,
- 1, 1, 58, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 60, 1, 61, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 62, 63, 1, 64, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 65, 1, 1, 1, 1,
- 66, 1, 1, 11, 4, 1, 1, 67, 1, 11, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 68, 69, 70, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1,
- 1, 1, 1, 1, 71, 72, 73, 1, 1, 1, 1, 74, 75, 76, 1, 77,
- 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 78, 79, 80, 81, 1, 82, 83, 1, 84, 85, 86, 1, 87, 88, 1,
- 1, 1, 1, 89, 0, 1, 1, 1, 1, 90, 1, 1, 91, 92, 1, 1,
- 1, 93, 1, 0, 94, 1, 1, 95, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 11, 1, 11, 1, 1, 1, 1, 1, 11, 1, 4, 96, 1, 1, 1,
- 1, 1, 1, 97, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 98, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 99,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 100, 101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 102, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 104, 1, 105, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106,
- 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 107, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 108, 109, 1, 110, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 111, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 112, 113, 1, 114, 115, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 116, 1, 117, 1, 1, 1, 1, 118, 119, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 120, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 122, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 124, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_unified_ideograph_table_2[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 5, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1,
+ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_numeric_value_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 1, 2, 0, 0,
- 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0,
- 0, 0, 0, 0, 5, 6, 7, 8, 0, 0, 0, 0, 5, 6, 9, 0,
- 0, 0, 0, 0, 5, 6, 10, 0, 0, 0, 0, 0, 5, 6, 0, 11,
- 0, 0, 0, 12, 5, 6, 13, 14, 0, 0, 1, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 15, 16, 0, 0, 0, 0, 0, 0, 17, 18, 19,
- 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 1, 2, 1, 2,
- 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 22, 0, 0, 0, 0,
- 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2,
- 0, 0, 24, 25, 26, 27, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 30, 31, 32, 33, 26, 30, 34, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 0, 0, 0, 38, 39,
- 26, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,
- 43, 0, 0, 0, 17, 2, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 46, 0, 0, 0, 47, 48, 49, 0, 0, 0, 0,
- 26, 46, 0, 0, 0, 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0,
- 0, 55, 0, 0, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 60, 0, 0, 0, 0, 61,
- 62, 0, 0, 63, 0, 64, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0,
- 67, 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0,
- 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 73, 73, 0, 0, 0, 0, 0, 0, 0, 74,
- 0, 0, 0, 0, 0, 0, 0, 75, 0, 76, 77, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0,
- 0, 0, 0, 0, 0, 86, 53, 0, 0, 0, 0, 0, 0, 0, 77, 0,
- 0, 0, 0, 0, 87, 0, 0, 0, 88, 89, 0, 0, 0, 0, 0, 90,
- 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 38, 92, 0, 0,
- 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 1, 2, 0, 0, 1, 2,
- 0, 0, 0, 0, 0, 94, 95, 77, 0, 0, 0, 0, 0, 0, 96, 0,
- 0, 0, 97, 0, 0, 0, 0, 98, 99, 6, 47, 100, 101, 102, 103, 0,
- 104, 105, 106, 107, 108, 109, 110, 111, 0, 112, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 18, 113, 114, 0, 0, 0, 0, 115, 0, 0, 0,
- 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0,
- 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 99, 121, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 124, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 125, 26, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 133, 0, 0, 0, 133,
- 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138,
- 0, 0, 0, 0, 26, 126, 139, 140, 0, 0, 0, 141, 142, 0, 0, 0,
- 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 145, 146, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 1, 2, 17, 18, 147, 0,
- 0, 0, 0, 0, 0, 0, 1, 148, 0, 0, 0, 0, 1, 18, 149, 0,
- 0, 0, 1, 150, 145, 151, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0,
- 6, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 0, 0,
- 0, 0, 1, 168, 169, 0, 0, 0, 1, 170, 171, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 170, 172, 0, 0, 0, 0, 0, 26, 126, 173, 174,
- 0, 5, 6, 1, 175, 176, 177, 6, 99, 6, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 18, 113, 178, 179, 180, 181, 182, 183, 0,
- 17, 18, 113, 178, 179, 184, 39, 185, 186, 187, 0, 0, 0, 0, 0, 0,
- 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0,
- 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0,
- 0, 0, 0, 0, 0, 74, 0, 0, 192, 70, 0, 70, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 0, 57, 0, 0, 0, 0,
- 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0,
- 0, 0, 196, 0, 0, 0, 0, 0,
+static RE_UINT8 re_unified_ideograph_table_3[] = {
+ 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 31, 0, 192, 26, 128,
+ 154, 3, 0, 0, 255, 255, 255, 63, 255, 255, 31, 0, 3, 0, 255, 255,
+ 1, 0, 0, 0, 255, 7, 0, 0
};
-static RE_UINT8 re_numeric_value_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 37, 39, 41, 43, 45, 47, 49,
- 51, 53, 0, 0, 0, 0, 0, 0, 0, 0, 39, 41, 0, 0, 0, 0,
- 0, 37, 0, 0, 22, 27, 32, 0, 0, 0, 0, 0, 0, 0, 2, 37,
- 39, 41, 43, 45, 47, 49, 51, 53, 0, 0, 0, 0, 12, 16, 20, 22,
- 32, 60, 0, 0, 0, 0, 0, 0, 0, 0, 22, 27, 32, 12, 16, 20,
- 54, 99, 108, 0, 0, 0, 0, 0, 2, 37, 39, 41, 37, 39, 41, 0,
- 4, 7, 9, 11, 14, 18, 21, 0, 54, 99, 108, 22, 27, 32, 12, 16,
- 20, 0, 0, 0, 0, 0, 0, 0, 51, 53, 27, 38, 40, 42, 44, 46,
- 48, 50, 52, 1, 0, 0, 0, 0, 0, 37, 39, 41, 43, 45, 47, 49,
- 51, 53, 54, 64, 74, 84, 94, 95, 96, 97, 98, 99, 117, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0,
- 51, 53, 37, 0, 0, 0, 0, 0, 2, 0, 0, 0, 43, 45, 47, 49,
- 17, 15, 14, 23, 31, 21, 25, 29, 33, 19, 34, 16, 24, 30, 35, 37,
- 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 55, 56, 94, 99, 103, 108,
- 108, 112, 117, 0, 0, 47, 94, 121, 126, 2, 0, 0, 0, 0, 0, 0,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 37, 39, 41, 43,
- 45, 47, 49, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 2, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 2,
- 0, 0, 0, 0, 0, 0, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54,
- 53, 54, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 54, 64, 74, 0, 0, 0, 0, 0, 0, 0, 37, 39, 41, 43, 0, 0,
- 53, 54, 0, 0, 0, 0, 0, 0, 54, 64, 74, 84, 94, 95, 96, 97,
- 0, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 0, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0,
- 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0,
- 37, 0, 0, 49, 0, 0, 0, 117, 0, 41, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0,
- 0, 0, 0, 0, 45, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 140,
- 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
- 41, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
- 0, 39, 0, 51, 0, 47, 0, 0, 0, 54, 0, 108, 64, 74, 0, 0,
- 0, 0, 0, 0, 84, 0, 0, 0, 0, 41, 41, 41, 41, 0, 0, 0,
- 0, 0, 0, 43, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0,
- 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 64,
- 0, 0, 0, 0, 37, 39, 41, 0, 39, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 51, 0, 0, 0,
- 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 99, 0,
- 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 117, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 39, 0, 0, 108, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 99, 0, 0, 0,
- 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 41, 43, 45, 47, 49, 51, 53, 2, 22, 27, 32, 12, 16, 20, 0, 0,
- 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 47, 0, 47, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
- 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0,
- 22, 27, 37, 45, 94, 103, 112, 121, 45, 54, 94, 99, 103, 108, 112, 45,
- 54, 94, 99, 103, 108, 117, 121, 54, 37, 37, 37, 39, 39, 39, 39, 45,
- 54, 54, 54, 54, 54, 74, 94, 94, 94, 94, 99, 101, 103, 103, 103, 103,
- 103, 108, 112, 45, 94, 27, 27, 31, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 22, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 0, 0, 0, 0, 37, 45, 54, 94, 0, 0, 0, 0,
- 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0,
- 0, 37, 39, 54, 64, 99, 0, 0, 37, 39, 41, 54, 64, 99, 108, 117,
- 0, 37, 39, 41, 43, 45, 54, 64, 39, 41, 43, 43, 45, 54, 64, 99,
- 0, 0, 0, 37, 45, 54, 64, 99, 0, 0, 0, 0, 0, 0, 37, 54,
- 64, 99, 39, 41, 0, 0, 0, 0, 0, 0, 0, 0, 36, 27, 0, 0,
- 53, 54, 64, 74, 84, 94, 95, 96, 0, 0, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 133, 134, 135, 136, 13, 19,
- 22, 23, 26, 27, 28, 31, 32, 34, 37, 39, 41, 43, 54, 64, 99, 108,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 94, 0,
- 0, 0, 0, 0, 0, 37, 54, 64, 0, 37, 39, 41, 43, 54, 64, 99,
- 0, 0, 37, 45, 54, 94, 99, 108, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 27, 22, 23, 31, 0, 0, 0, 0, 0, 0, 37, 39, 41,
- 43, 45, 54, 64, 74, 99, 27, 0, 0, 37, 54, 64, 99, 0, 0, 0,
- 0, 0, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 64, 74, 84, 94,
- 95, 96, 97, 98, 99, 108, 2, 37, 96, 97, 98, 99, 108, 0, 0, 0,
- 51, 53, 54, 64, 0, 0, 0, 0, 96, 97, 98, 0, 0, 0, 0, 0,
- 51, 53, 37, 39, 41, 43, 45, 47, 95, 96, 97, 98, 99, 0, 0, 0,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 14, 16, 18, 20, 21,
- 22, 27, 27, 32, 3, 0, 0, 0, 41, 43, 45, 47, 49, 51, 53, 43,
- 45, 47, 49, 51, 53, 37, 39, 41, 43, 45, 47, 49, 51, 53, 37, 39,
- 41, 43, 45, 39, 41, 41, 43, 45, 47, 49, 51, 53, 37, 39, 41, 41,
- 43, 45, 128, 131, 37, 39, 41, 41, 43, 45, 41, 41, 43, 43, 43, 43,
- 47, 49, 49, 49, 51, 51, 53, 53, 53, 53, 39, 41, 43, 45, 47, 37,
- 39, 41, 43, 43, 45, 45, 39, 41, 37, 39, 23, 31, 34, 23, 31, 16,
- 22, 19, 22, 22, 27, 23, 31, 84, 94, 43, 45, 47, 49, 51, 53, 0,
- 51, 53, 0, 54, 99, 117, 137, 140, 141, 142, 0, 0, 0, 0, 0, 0,
- 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 37, 39, 41, 0,
- 60, 61, 62, 63, 0, 0, 0, 0, 97, 98, 37, 39, 41, 43, 45, 37,
- 45, 0, 0, 0, 0, 0, 0, 0, 51, 53, 2, 37, 39, 41, 43, 45,
- 47, 49, 51, 53, 2, 37, 39, 41, 43, 45, 47, 49, 51, 53, 2, 37,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 126, 138, 139, 37, 39, 41, 43, 45,
- 47, 49, 51, 53, 0, 22, 27, 32, 0, 37, 39, 117, 126, 0, 0, 0,
- 120, 121, 122, 123, 124, 125, 0, 39, 102, 104, 109, 117, 27, 19, 0, 0,
- 2, 2, 37, 39, 41, 43, 45, 47, 49, 51, 53, 2, 2, 0, 0, 0,
- 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
- 0, 0, 43, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 0,
+RE_UINT32 re_get_unified_ideograph(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_unified_ideograph_table_1[field_2];
+ v = re_unified_ideograph_table_2[(v << 5) | field_1];
+ v = re_unified_ideograph_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
+
+/* Uppercase. */
+static RE_UINT8 re_uppercase_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
+ 2, 10, 2, 11, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 15, 2, 16, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
+
+static RE_UINT8 re_uppercase_table_2[] = {
+ 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10,
+ 3, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17,
+ 18, 19, 0, 3, 20, 3, 21, 3, 3, 22, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 25,
+ 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 3, 3, 28, 3, 3, 3, 29, 30, 31, 32, 0, 33, 34, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 19, 39, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 40, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 41, 0, 42, 3, 3, 3, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 44, 45, 0, 0, 0, 0, 46, 3, 47, 48, 49, 50, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 18, 52, 0, 0, 0, 26, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 55, 56, 57, 58, 59, 60, 26, 61, 62, 63, 64, 65, 66, 55, 56, 57,
+ 58, 67, 25, 26, 61, 58, 68, 69, 70, 71, 40, 41, 26, 72, 73, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 75, 75, 61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Numeric_Value: 4336 bytes. */
-
-RE_UINT32 re_get_numeric_value(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_numeric_value_stage_1[f] << 5;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_numeric_value_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_numeric_value_stage_3[pos + f] << 3;
- value = re_numeric_value_stage_4[pos + code];
-
- return value;
+static RE_UINT8 re_uppercase_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 255, 255, 127, 127, 85, 85, 85, 85,
+ 85, 85, 85, 170, 170, 84, 85, 85, 85, 85, 85, 43, 214, 206, 219, 177,
+ 213, 210, 174, 17, 144, 164, 170, 74, 85, 85, 210, 85, 85, 85, 5, 108,
+ 122, 85, 0, 0, 0, 0, 69, 128, 64, 215, 254, 255, 251, 15, 0, 0,
+ 0, 128, 28, 85, 85, 85, 144, 230, 255, 255, 255, 255, 255, 255, 0, 0,
+ 1, 84, 85, 85, 171, 42, 85, 85, 85, 85, 254, 255, 255, 255, 127, 0,
+ 191, 32, 0, 0, 255, 255, 63, 0, 0, 0, 255, 255, 255, 255, 255, 231,
+ 85, 85, 21, 64, 0, 255, 0, 63, 0, 255, 0, 255, 0, 63, 0, 170,
+ 0, 255, 0, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 31, 0, 15,
+ 132, 56, 39, 62, 80, 61, 15, 192, 32, 0, 0, 0, 8, 0, 0, 0,
+ 0, 0, 192, 255, 255, 127, 0, 0, 157, 234, 37, 192, 5, 40, 4, 0,
+ 85, 21, 0, 0, 85, 85, 85, 5, 84, 85, 84, 85, 85, 85, 0, 106,
+ 85, 40, 69, 85, 85, 125, 95, 85, 244, 2, 0, 0, 0, 0, 32, 0,
+ 255, 0, 0, 0, 255, 255, 15, 0, 255, 255, 7, 0, 255, 255, 255, 3,
+ 0, 0, 240, 255, 255, 63, 0, 0, 0, 255, 255, 255, 3, 0, 0, 208,
+ 100, 222, 63, 0, 255, 3, 0, 0, 176, 231, 223, 31, 0, 0, 0, 123,
+ 95, 252, 1, 0, 0, 240, 255, 255, 63, 0, 0, 0, 3, 0, 0, 240,
+ 1, 0, 0, 0, 252, 255, 255, 7, 0, 0, 0, 240, 255, 255, 31, 0,
+ 255, 1, 0, 0, 0, 4, 0, 0, 3, 0, 0, 0, 255, 3, 255, 255
+};
+
+RE_UINT32 re_get_uppercase(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_uppercase_table_1[field_2];
+ v = re_uppercase_table_2[(v << 5) | field_1];
+ v = re_uppercase_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Bidi_Mirrored. */
+/* Variation_Selector. */
+RE_UINT32 re_get_variation_selector(RE_UINT32 codepoint) {
+ if (0x180B <= codepoint && codepoint <= 0x180D)
+ return 1;
+ if (0xFE00 <= codepoint && codepoint <= 0xFE0F)
+ return 1;
+ if (0x0E0100 <= codepoint && codepoint <= 0x0E01EF)
+ return 1;
+
+ return 0;
+}
-static RE_UINT8 re_bidi_mirrored_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+/* White_Space. */
+static RE_UINT8 re_white_space_table_1[] = {
+ 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
-static RE_UINT8 re_bidi_mirrored_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1,
- 4, 5, 1, 6, 7, 8, 1, 9, 10, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+static RE_UINT8 re_white_space_table_2[] = {
+ 0, 1, 2, 2, 3, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4, 5, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_bidi_mirrored_stage_3[] = {
- 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3,
- 6, 7, 8, 3, 3, 9, 3, 3, 10, 11, 12, 13, 14, 3, 3, 3,
- 3, 3, 3, 3, 3, 15, 3, 16, 3, 3, 3, 3, 3, 3, 17, 18,
- 19, 20, 21, 22, 3, 3, 3, 23, 24, 3, 3, 3, 3, 3, 3, 3,
- 25, 3, 3, 3, 3, 3, 3, 3, 3, 26, 3, 3, 27, 28, 3, 3,
- 3, 3, 3, 29, 30, 31, 32, 33,
+static RE_UINT8 re_white_space_table_3[] = {
+ 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 255, 7, 0, 0, 0, 131, 0, 0, 0, 0, 0, 128
};
-static RE_UINT8 re_bidi_mirrored_stage_4[] = {
- 0, 0, 0, 0, 0, 3, 0, 80, 0, 0, 0, 40, 0, 0, 0, 40,
- 0, 0, 0, 0, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 24, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 6, 96, 0, 0, 0, 0, 0, 0, 96,
- 0, 96, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 30, 63, 98, 188, 87, 248, 15, 250, 255, 31, 60, 128, 245, 207, 255, 255,
- 255, 159, 7, 1, 204, 255, 255, 193, 0, 62, 195, 255, 255, 63, 255, 255,
- 0, 15, 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 0, 255, 63, 0,
- 121, 59, 120, 112, 252, 255, 0, 0, 248, 255, 255, 249, 253, 255, 0, 1,
- 63, 194, 55, 31, 58, 3, 240, 51, 0, 252, 255, 223, 83, 122, 48, 112,
- 0, 0, 128, 1, 48, 188, 25, 254, 255, 255, 255, 255, 207, 191, 255, 255,
- 255, 255, 127, 80, 124, 112, 136, 47, 0, 0, 0, 0, 0, 0, 0, 64,
- 60, 54, 0, 48, 255, 3, 0, 0, 0, 255, 243, 15, 0, 0, 0, 0,
- 0, 0, 0, 126, 48, 0, 0, 0, 0, 3, 0, 80, 0, 0, 0, 40,
- 0, 0, 0, 168, 13, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
-};
+RE_UINT32 re_get_white_space(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Bidi_Mirrored: 572 bytes. */
-
-RE_UINT32 re_get_bidi_mirrored(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_bidi_mirrored_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_bidi_mirrored_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_bidi_mirrored_stage_3[pos + f] << 6;
- pos += code;
- value = (re_bidi_mirrored_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Indic_Positional_Category. */
+ v = re_white_space_table_1[field_2];
+ v = re_white_space_table_2[(v << 5) | field_1];
+ v = re_white_space_table_3[(v << 2) | field_0];
-static RE_UINT8 re_indic_positional_category_stage_1[] = {
- 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ return (v >> offset) & 0x1;
+}
+
+/* Word. */
+static RE_UINT8 re_word_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13,
+ 13, 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 13, 16, 17, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 18, 10, 10, 10, 10, 10, 10, 10, 10, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 13, 31, 10, 10,
+ 10, 32, 10, 10, 10, 10, 10, 10, 10, 10, 33, 34, 13, 13, 13, 13,
+ 13, 35, 13, 36, 10, 10, 10, 10, 10, 10, 10, 10, 37, 10, 10, 38,
+ 10, 10, 10, 10, 39, 40, 41, 10, 42, 10, 43, 44, 45, 10, 46, 10,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 47, 13, 13, 13, 48, 49, 13,
+ 13, 13, 13, 50, 13, 13, 13, 13, 13, 13, 51, 10, 10, 10, 52, 10,
+ 13, 13, 13, 13, 53, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 54, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
-static RE_UINT8 re_indic_positional_category_stage_2[] = {
+static RE_UINT16 re_word_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 7, 8, 6, 6, 6, 9, 10, 11, 6, 12,
+ 6, 6, 6, 6, 11, 6, 6, 6, 6, 13, 14, 6, 15, 16, 17, 18,
+ 19, 6, 6, 20, 6, 6, 21, 22, 23, 6, 24, 6, 6, 25, 6, 26,
+ 6, 27, 28, 29, 0, 30, 31, 11, 6, 6, 6, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 42, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 52, 6, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 0, 69, 70, 71, 0, 72, 73, 74, 75, 76, 77, 78, 0,
+ 6, 6, 79, 6, 80, 6, 81, 82, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 83, 6, 84, 85, 86, 6, 87, 6, 88, 0, 89, 6, 6, 90,
+ 66, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 91, 3, 6, 6, 92, 93, 94, 95, 96, 6, 6, 97, 98,
+ 99, 6, 6, 100, 6, 101, 6, 102, 103, 104, 105, 106, 6, 107, 108, 0,
+ 28, 6, 103, 109, 108, 110, 111, 0, 6, 6, 112, 113, 6, 6, 6, 95,
+ 6, 114, 115, 80, 116, 88, 117, 67, 6, 6, 6, 6, 6, 6, 6, 118,
+ 6, 6, 6, 6, 6, 6, 6, 6, 90, 6, 119, 80, 6, 120, 121, 122,
+ 123, 124, 125, 126, 127, 0, 23, 128, 129, 130, 131, 6, 132, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 133, 6, 98, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 6, 10, 11, 9, 6, 12, 13, 5, 14, 15, 4, 16, 17, 18, 0,
- 19, 20, 21, 4, 5, 14, 22, 4, 23, 24, 25, 4, 26, 0, 27, 28,
- 0, 29, 30, 0, 0, 31, 32, 0, 33, 34, 0, 35, 36, 37, 38, 0,
- 0, 39, 40, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 44, 44, 0, 45, 46, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 49, 0,
- 50, 0, 51, 52, 0, 0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59,
- 0, 60, 0, 0, 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 134, 103, 6, 6, 6, 6, 135, 6, 81, 6, 136, 137, 138, 138, 6,
+ 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 141, 66, 6, 142, 66, 6, 82, 143, 13, 6, 6, 144, 6, 0, 23,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 77,
+ 6, 6, 6, 6, 145, 0, 23, 80, 6, 6, 6, 6, 6, 6, 6, 6,
+ 146, 147, 6, 148, 6, 6, 6, 25, 149, 150, 6, 6, 151, 6, 152, 153,
+ 6, 154, 6, 95, 6, 6, 155, 156, 6, 157, 95, 77, 6, 6, 158, 103,
+ 6, 137, 159, 160, 6, 6, 161, 162, 163, 164, 82, 79, 6, 6, 6, 165,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 166, 167, 28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 157, 6, 6, 168, 0, 169, 170, 171, 6, 6, 25, 172, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 80, 23, 6, 173, 6, 174, 175,
+ 89, 176, 177, 178, 6, 6, 6, 77, 1, 2, 3, 105, 6, 103, 179, 0,
+ 180, 181, 182, 0, 6, 6, 6, 67, 0, 0, 6, 94, 0, 0, 0, 183,
+ 0, 0, 0, 0, 77, 6, 128, 111, 6, 184, 101, 67, 80, 6, 185, 0,
+ 6, 6, 6, 6, 80, 79, 186, 28, 6, 187, 6, 188, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 137, 102, 174, 0, 0, 0, 0,
+ 189, 190, 102, 137, 103, 0, 0, 191, 102, 168, 0, 0, 6, 192, 0, 0,
+ 193, 194, 0, 77, 77, 0, 74, 195, 6, 102, 102, 196, 25, 0, 0, 0,
+ 6, 6, 132, 0, 6, 196, 6, 196, 6, 197, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 198, 0, 0, 77, 110, 128, 0, 0, 23, 199, 137,
+ 6, 6, 195, 200, 6, 67, 23, 201, 6, 30, 202, 203, 6, 6, 204, 0,
+ 205, 206, 0, 0, 207, 116, 6, 208, 33, 209, 210, 211, 0, 0, 0, 0,
+ 6, 6, 212, 213, 6, 6, 214, 0, 0, 0, 0, 0, 6, 215, 216, 0,
+ 6, 6, 217, 0, 6, 100, 98, 0, 88, 112, 0, 0, 0, 0, 0, 0,
+ 6, 67, 0, 0, 0, 6, 6, 218, 219, 220, 221, 0, 0, 222, 223, 224,
+ 6, 103, 110, 6, 225, 0, 6, 100, 0, 0, 0, 0, 0, 0, 0, 0,
+ 226, 5, 227, 228, 173, 229, 0, 0, 230, 231, 197, 232, 233, 98, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 234, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 168, 0, 0, 0,
+ 6, 6, 6, 144, 6, 6, 6, 6, 6, 6, 188, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 65, 66, 0, 0, 67, 68, 69, 70, 0, 71, 72, 0, 1, 73, 74, 75,
- 0, 76, 77, 78, 0, 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, 82,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 100, 103, 98, 0, 0, 23, 106, 6, 137, 221, 235, 89, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 236, 6, 237, 0, 0, 238,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 114,
+ 6, 6, 6, 6, 6, 6, 102, 0, 132, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 103, 0, 239, 202, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 28, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 243, 244, 0, 0,
+ 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 30, 6, 246, 247, 248, 6, 249, 250, 251, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 252, 253, 82, 30, 30, 134, 134, 226, 226, 254, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 255, 6, 256, 257, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 259, 260, 0, 0, 0, 0, 0, 0, 6, 261, 262, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 263, 0, 6, 6, 112, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 86, 87, 0, 57, 88, 0, 0, 89, 90, 91, 92, 57, 93, 94, 0,
- 0, 95, 0, 0, 0, 0, 96, 97, 23, 98, 99, 100, 0, 0, 0, 0,
- 0, 101, 102, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 105, 106, 0,
- 0, 107, 108, 0, 0, 109, 0, 0, 110, 111, 0, 0, 0, 0, 0, 0,
- 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114,
- 115, 116, 117, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 119, 0, 0, 120, 121, 0, 0, 0, 122, 123, 0, 124, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_indic_positional_category_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 13, 14, 0, 15, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, 0,
- 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 23, 22, 0, 0,
- 4, 24, 25, 26, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 27, 28,
- 0, 0, 0, 0, 0, 0, 0, 29, 4, 12, 30, 31, 0, 32, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,
- 34, 35, 36, 37, 0, 15, 0, 0, 6, 38, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 27, 6, 39, 40, 23, 0, 41, 0, 0,
- 42, 43, 44, 23, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 19, 47, 48, 49, 36, 37, 0, 15, 0, 0,
- 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 50, 51, 52, 53,
- 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 54, 28, 55, 0,
- 56, 57, 28, 58, 0, 0, 0, 0, 0, 0, 0, 0, 54, 28, 59, 60,
- 56, 61, 28, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0,
- 0, 0, 0, 0, 0, 63, 64, 65, 0, 0, 0, 0, 66, 67, 68, 1,
- 69, 70, 0, 71, 72, 72, 71, 72, 72, 72, 72, 72, 72, 72, 72, 60,
- 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 15, 74, 75, 76, 77, 78,
- 0, 0, 0, 0, 0, 33, 62, 10, 79, 80, 81, 82, 83, 38, 0, 0,
- 84, 85, 81, 86, 0, 0, 33, 87, 0, 0, 0, 0, 88, 60, 0, 0,
- 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 89, 76, 90,
- 91, 92, 93, 28, 94, 0, 0, 64, 95, 96, 6, 0, 97, 81, 98, 0,
- 0, 0, 0, 0, 81, 99, 100, 81, 101, 0, 82, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 19, 102, 0, 0, 0, 0, 0, 0, 103, 76, 55,
- 104, 93, 105, 106, 107, 28, 28, 108, 28, 101, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 109, 110, 111, 112, 101, 0, 0, 0, 0, 0, 0,
- 0, 0, 19, 5, 28, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0,
- 114, 115, 113, 62, 0, 0, 0, 0, 0, 2, 46, 116, 46, 0, 0, 0,
- 0, 117, 118, 5, 28, 119, 0, 0, 0, 0, 0, 0, 58, 120, 121, 72,
- 122, 123, 124, 22, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0,
- 0, 0, 0, 0, 38, 0, 0, 0, 16, 16, 19, 0, 0, 0, 0, 0,
- 15, 126, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 81, 81, 81, 81, 127, 0, 0, 0, 0, 0, 0,
- 28, 28, 28, 28, 23, 0, 0, 19, 0, 0, 128, 62, 0, 0, 0, 0,
- 0, 128, 129, 59, 46, 0, 0, 0, 0, 0, 0, 0, 19, 50, 130, 131,
- 132, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 83, 133, 134, 135, 0, 0, 19, 0, 0, 136, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 136, 0, 0, 0, 0, 109, 137, 138, 139,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 141, 0, 142, 0, 0,
- 15, 54, 143, 26, 0, 0, 0, 0, 144, 145, 0, 59, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 28, 72, 121, 58, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 148, 149, 18, 0, 58, 0, 0, 0, 0, 0, 0, 0,
- 0, 19, 9, 150, 146, 38, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 15, 151, 72, 152,
- 101, 0, 153, 60, 0, 0, 0, 0, 0, 0, 0, 48, 154, 109, 0, 16,
- 0, 0, 0, 0, 0, 0, 0, 19, 148, 5, 146, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 128, 79, 6, 155, 13, 156, 0, 15, 0, 0,
- 33, 27, 28, 38, 28, 38, 0, 0, 0, 0, 0, 0, 0, 157, 72, 121,
- 158, 159, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 148, 72, 160, 161,
- 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 62, 163, 164,
- 60, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 48, 72, 149, 165,
- 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 166, 121, 164, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 167, 50, 168, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 148, 59, 28, 18, 0, 0, 0, 0, 0, 157, 72, 27, 81,
- 60, 169, 0, 0, 0, 0, 0, 0, 170, 28, 171, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 5, 172, 55, 0, 0, 0, 0, 170, 1, 4, 0,
- 0, 0, 10, 72, 72, 173, 38, 0, 0, 0, 0, 15, 9, 55, 28, 164,
- 0, 0, 0, 0, 10, 72, 72, 72, 72, 72, 114, 72, 174, 175, 0, 0,
- 0, 0, 0, 0, 83, 171, 16, 94, 176, 177, 0, 0, 0, 0, 0, 0,
- 0, 0, 33, 178, 179, 147, 0, 0, 0, 0, 0, 0, 19, 180, 0, 0,
-};
-
-static RE_UINT8 re_indic_positional_category_stage_4[] = {
- 0, 0, 0, 0, 5, 5, 5, 1, 0, 0, 5, 1, 6, 0, 1, 2,
- 1, 6, 6, 6, 6, 5, 5, 5, 5, 1, 1, 1, 1, 6, 2, 1,
- 0, 5, 6, 5, 5, 5, 6, 6, 0, 0, 6, 6, 0, 5, 1, 1,
- 6, 0, 0, 2, 2, 0, 0, 4, 4, 6, 0, 0, 0, 0, 0, 1,
- 0, 0, 5, 0, 0, 5, 5, 1, 1, 6, 6, 0, 0, 0, 0, 5,
- 5, 0, 0, 5, 5, 6, 0, 0, 0, 6, 0, 0, 5, 5, 0, 0,
- 6, 5, 0, 5, 5, 8, 0, 1, 1, 6, 0, 0, 0, 0, 5, 5,
- 5, 5, 5, 5, 6, 0, 1, 5, 9, 0, 0, 4, 10, 6, 0, 0,
- 0, 0, 5, 8, 0, 0, 1, 1, 5, 1, 1, 0, 0, 0, 2, 2,
- 2, 0, 4, 4, 4, 5, 0, 0, 5, 0, 0, 0, 1, 0, 5, 5,
- 7, 0, 5, 5, 0, 5, 6, 0, 8, 1, 1, 1, 1, 0, 5, 8,
- 8, 0, 8, 8, 0, 1, 1, 0, 5, 5, 1, 1, 5, 0, 1, 1,
- 1, 1, 1, 6, 6, 0, 2, 2, 1, 1, 5, 5, 6, 0, 6, 0,
- 1, 2, 9, 2, 4, 10, 4, 1, 1, 5, 1, 1, 6, 6, 6, 0,
- 3, 3, 3, 3, 3, 1, 0, 5, 5, 5, 5, 0, 6, 6, 6, 5,
- 6, 0, 0, 0, 3, 0, 0, 0, 6, 6, 0, 0, 0, 6, 0, 6,
- 0, 5, 0, 0, 0, 0, 1, 2, 0, 6, 5, 7, 6, 6, 7, 7,
- 7, 7, 5, 5, 5, 7, 5, 5, 6, 0, 5, 5, 0, 6, 6, 6,
- 6, 6, 6, 6, 0, 0, 6, 0, 1, 5, 5, 6, 6, 2, 5, 5,
- 5, 5, 5, 6, 1, 0, 5, 1, 0, 6, 6, 0, 6, 0, 1, 1,
- 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 5, 5, 5,
- 0, 0, 6, 1, 2, 5, 5, 1, 1, 6, 0, 1, 1, 5, 0, 0,
- 0, 0, 5, 6, 0, 0, 1, 5, 6, 6, 9, 10, 4, 2, 2, 2,
- 4, 4, 5, 1, 1, 5, 5, 5, 5, 5, 0, 5, 5, 5, 6, 1,
- 1, 8, 8, 5, 1, 1, 6, 1, 1, 6, 5, 6, 1, 3, 3, 3,
- 1, 1, 3, 1, 1, 0, 0, 0, 6, 2, 1, 5, 0, 2, 6, 1,
- 0, 1, 5, 1, 5, 6, 6, 5, 6, 1, 2, 2, 2, 2, 2, 5,
- 5, 0, 0, 6, 5, 1, 5, 5, 6, 6, 6, 11, 7, 13, 2, 2,
- 4, 4, 5, 8, 5, 5, 1, 0, 0, 1, 6, 6, 5, 6, 2, 1,
- 1, 5, 1, 5, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 5, 6,
- 14, 6, 6, 6, 6, 6, 5, 5, 5, 1, 14, 14, 14, 14, 14, 14,
- 14, 0, 0, 0, 5, 0, 0, 1, 1, 6, 5, 1, 6, 5, 0, 0,
- 0, 0, 0, 6, 6, 6, 5, 6, 6, 6, 2, 2, 5, 6, 1, 12,
- 11, 0, 0, 0, 5, 6, 5, 2, 2, 5, 6, 1, 2, 6, 6, 0,
- 5, 1, 0, 0, 6, 3, 3, 5, 5, 3, 1, 3, 3, 1, 5, 5,
- 0, 0, 0, 2, 6, 5, 2, 1, 0, 1, 0, 0, 6, 1, 1, 0,
- 0, 14, 6, 6, 0, 5, 14, 0, 5, 6, 6, 0, 1, 5, 1, 0,
- 1, 2, 1, 6, 6, 5, 5, 1, 2, 5, 7, 7, 2, 1, 6, 6,
- 5, 5, 5, 8, 0, 6, 6, 5, 5, 5, 8, 8, 1, 0, 0, 2,
- 4, 1, 0, 0, 0, 1, 2, 1, 1, 1, 6, 5, 5, 1, 6, 0,
- 6, 2, 5, 9, 4, 1, 4, 5, 5, 1, 6, 6, 2, 9, 4, 10,
- 5, 5, 1, 6, 1, 5, 1, 6, 1, 5, 2, 1, 0, 6, 0, 5,
- 6, 6, 2, 5, 2, 0, 0, 0, 0, 5, 6, 6, 5, 5, 6, 0,
- 5, 1, 0, 6, 6, 6, 5, 1, 6, 2, 6, 5, 1, 5, 5, 0,
- 5, 5, 6, 5, 6, 0, 0, 6, 1, 1, 1, 0, 5, 5, 0, 1,
- 6, 2, 1, 0,
-};
-
-/* Indic_Positional_Category: 2852 bytes. */
-
-RE_UINT32 re_get_indic_positional_category(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_indic_positional_category_stage_1[f] << 6;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_indic_positional_category_stage_2[pos + f] << 3;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_indic_positional_category_stage_3[pos + f] << 2;
- value = re_indic_positional_category_stage_4[pos + code];
-
- return value;
-}
-
-/* Indic_Syllabic_Category. */
-
-static RE_UINT8 re_indic_syllabic_category_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_indic_syllabic_category_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 20,
- 2, 2, 21, 22, 23, 24, 25, 26, 27, 28, 2, 29, 2, 2, 2, 2,
- 30, 31, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 33, 34, 35, 36, 37, 38, 2, 39, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 40, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 41, 42, 43, 44, 45, 46, 47, 2, 48, 49, 2, 50, 51, 52, 53, 2,
- 54, 2, 2, 55, 56, 57, 2, 2, 58, 59, 60, 61, 2, 62, 2, 2,
-};
-
-static RE_UINT8 re_indic_syllabic_category_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 248, 264, 265, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 79, 79, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12,
- 13, 13, 13, 14, 15, 16, 10, 10, 17, 18, 2, 2, 19, 8, 10, 10,
- 20, 21, 8, 22, 22, 9, 10, 10, 10, 10, 23, 10, 24, 25, 26, 12,
- 13, 27, 27, 28, 0, 29, 0, 30, 17, 18, 2, 2, 26, 0, 0, 31,
- 32, 21, 33, 34, 22, 9, 10, 10, 10, 10, 23, 10, 23, 35, 26, 36,
- 37, 29, 27, 38, 39, 0, 40, 24, 0, 18, 2, 2, 41, 42, 0, 0,
- 32, 21, 8, 43, 43, 9, 10, 10, 10, 10, 23, 10, 23, 40, 26, 12,
- 13, 44, 44, 38, 0, 0, 0, 0, 17, 18, 2, 2, 0, 0, 45, 46,
- 32, 21, 8, 22, 22, 9, 10, 10, 10, 10, 23, 10, 23, 40, 26, 12,
- 13, 27, 27, 38, 0, 47, 0, 30, 17, 18, 2, 2, 48, 0, 0, 0,
- 49, 21, 33, 19, 50, 51, 35, 23, 52, 53, 54, 25, 10, 10, 26, 47,
- 37, 47, 55, 38, 0, 29, 0, 0, 0, 18, 2, 2, 0, 0, 0, 0,
- 7, 56, 8, 50, 50, 9, 10, 10, 10, 10, 23, 10, 10, 10, 26, 57,
- 13, 55, 55, 38, 0, 58, 54, 0, 17, 18, 2, 2, 0, 0, 0, 0,
- 7, 21, 8, 50, 50, 9, 10, 10, 10, 10, 23, 10, 10, 40, 26, 12,
- 13, 55, 55, 38, 0, 58, 0, 59, 17, 18, 2, 2, 60, 0, 0, 0,
- 7, 21, 8, 50, 50, 9, 10, 10, 10, 10, 10, 10, 10, 10, 61, 62,
- 13, 55, 55, 63, 0, 64, 0, 34, 17, 18, 2, 2, 0, 0, 65, 66,
- 67, 21, 8, 8, 8, 33, 25, 10, 10, 10, 10, 10, 30, 10, 10, 48,
- 10, 54, 68, 29, 13, 69, 13, 13, 0, 18, 2, 2, 47, 0, 0, 0,
- 40, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 54, 13, 13, 70, 0,
- 13, 44, 71, 72, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35, 23, 54, 10, 10, 10, 10, 10, 10, 73, 10, 54, 13, 13, 74, 75,
- 13, 76, 71, 77, 2, 2, 3, 10, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 78, 79, 0,
- 10, 10, 40, 10, 10, 10, 10, 10, 10, 10, 10, 53, 16, 13, 13, 80,
- 81, 82, 83, 84, 85, 85, 86, 85, 85, 85, 85, 85, 85, 85, 85, 87,
- 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 89, 8, 90, 13, 13, 91, 92, 93,
- 2, 2, 94, 95, 96, 17, 97, 98, 99, 100, 101, 102, 103, 104, 10, 10,
- 105, 106, 71, 107, 2, 2, 108, 109, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 110, 10, 10, 23, 11, 111, 0, 0, 110, 10, 10, 10, 11, 111, 0, 0,
- 110, 10, 10, 10, 11, 0, 0, 0, 110, 10, 10, 23, 112, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 113, 8, 8, 8, 8, 47, 13, 13,
- 13, 80, 114, 115, 116, 0, 0, 117, 2, 2, 3, 0, 0, 0, 0, 0,
- 118, 10, 10, 10, 10, 10, 10, 54, 13, 13, 119, 0, 120, 121, 122, 0,
- 0, 18, 2, 2, 10, 10, 10, 10, 123, 124, 124, 125, 126, 127, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 13, 13, 13, 13,
- 128, 121, 129, 0, 2, 2, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 131, 13, 0, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 89, 110, 132, 133, 134, 135, 13, 13, 13, 13, 136, 137, 138,
- 2, 2, 3, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 139, 140, 8, 8, 110, 10, 10, 10, 10, 10, 10, 10, 10, 141, 13, 13,
- 13, 142, 10, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 143, 8, 144, 10, 10, 10, 10, 10, 145, 13, 146, 147, 2, 2, 148, 149,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 150, 13, 13, 151, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 152, 13, 128, 121, 153, 0, 0,
- 2, 2, 3, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 154, 155, 155, 155, 156, 0, 0, 0, 65, 157, 158, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0,
- 0, 0, 0, 160, 161, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0,
- 5, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 164, 165, 166, 10, 10, 10, 10, 10, 131, 13, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 167, 168, 169, 170, 10, 171, 0, 0, 0,
- 172, 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 173, 13, 13,
- 13, 174, 0, 0, 2, 2, 3, 0, 155, 155, 155, 155, 175, 0, 0, 176,
- 2, 2, 177, 10, 10, 10, 10, 10, 167, 124, 178, 129, 10, 10, 10, 10,
- 10, 131, 13, 179, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 181, 8, 9, 110, 10, 10, 10, 10, 10, 10, 10, 10, 182, 13, 13, 183,
- 184, 0, 0, 0, 2, 2, 3, 0, 10, 185, 10, 10, 2, 2, 177, 54,
- 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 103, 13, 186, 187, 0, 0,
- 121, 121, 121, 188, 2, 2, 3, 0, 10, 10, 10, 10, 40, 189, 190, 102,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 106,
- 191, 0, 0, 0, 0, 0, 0, 0, 144, 10, 131, 13, 0, 192, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 96, 193, 10, 194, 121, 195, 13, 37, 196, 2, 2, 3, 0,
- 103, 58, 0, 80, 10, 40, 40, 10, 10, 10, 10, 10, 10, 26, 197, 198,
- 2, 2, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 200, 201, 8, 8, 110, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13,
- 13, 202, 0, 0, 203, 204, 204, 204, 204, 205, 2, 2, 0, 0, 0, 206,
- 207, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 208, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 207, 110, 10, 10, 10, 10, 10, 10, 10, 131, 13, 13, 209, 210, 2, 2,
- 0, 211, 0, 0, 124, 212, 10, 10, 10, 10, 10, 10, 182, 0, 0, 0,
- 207, 8, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 131, 13, 13, 13,
- 213, 0, 214, 76, 2, 2, 3, 0, 215, 2, 2, 2, 2, 199, 0, 0,
- 8, 8, 10, 10, 30, 10, 10, 10, 10, 10, 10, 13, 13, 216, 0, 217,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 54, 23, 30, 10, 10, 10, 30, 10, 10, 53, 0, 8, 8, 144, 10,
- 10, 10, 10, 10, 10, 10, 10, 166, 13, 13, 218, 0, 2, 2, 3, 0,
- 7, 21, 8, 22, 22, 9, 10, 10, 10, 10, 23, 10, 23, 40, 219, 12,
- 13, 27, 27, 38, 0, 29, 0, 220, 17, 221, 155, 163, 155, 163, 0, 0,
- 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 10, 103, 13, 13,
- 222, 223, 0, 0, 2, 2, 3, 224, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 8, 8, 110, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 225,
- 226, 227, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 131, 13, 109, 13, 228,
- 229, 0, 0, 0, 0, 0, 8, 109, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 230,
- 76, 0, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 166, 231, 13, 232, 53, 0,
- 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 54, 233, 13, 13, 234, 0, 2, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 144, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 225, 235, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 19, 144, 10, 10, 10, 10,
- 10, 10, 10, 10, 103, 13, 47, 80, 236, 76, 0, 0, 0, 0, 0, 0,
- 237, 13, 238, 10, 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, 241, 242,
- 0, 243, 0, 0, 237, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 244, 245, 121, 121, 246, 247, 248, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 50, 144, 10, 10, 10, 10, 10, 10, 10, 131, 13, 37, 13, 228,
- 227, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 199, 25, 10, 10, 10,
- 10, 10, 10, 10, 249, 85, 85, 85, 85, 85, 86, 85, 13, 250, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 33, 43, 10, 10, 10, 10, 10, 10, 10, 10, 10, 103, 37, 251, 44,
- 252, 253, 0, 0, 2, 2, 3, 0, 8, 43, 50, 10, 10, 10, 10, 10,
- 10, 10, 11, 37, 44, 254, 0, 0, 2, 2, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 255, 37, 0, 0,
-};
-
-static RE_UINT8 re_indic_syllabic_category_stage_4[] = {
- 0, 0, 0, 0, 0, 11, 0, 0, 34, 34, 34, 34, 34, 34, 0, 0,
- 11, 0, 0, 0, 0, 0, 29, 29, 0, 0, 0, 11, 1, 1, 1, 2,
- 8, 8, 8, 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9,
- 4, 3, 9, 9, 9, 9, 9, 9, 9, 5, 9, 9, 0, 27, 27, 0,
- 0, 9, 9, 9, 8, 8, 9, 9, 0, 0, 34, 34, 0, 0, 8, 8,
- 11, 1, 1, 2, 0, 8, 8, 8, 8, 0, 0, 8, 12, 0, 12, 12,
- 12, 0, 12, 0, 0, 0, 12, 12, 12, 12, 0, 0, 9, 0, 0, 9,
- 9, 5, 13, 0, 0, 0, 0, 9, 12, 12, 0, 12, 1, 0, 29, 0,
- 0, 1, 1, 2, 8, 8, 8, 0, 0, 0, 0, 8, 0, 12, 12, 0,
- 4, 0, 9, 9, 9, 9, 9, 0, 9, 5, 0, 0, 0, 27, 0, 0,
- 0, 12, 12, 12, 1, 26, 11, 11, 0, 20, 0, 0, 8, 8, 0, 8,
- 9, 9, 0, 9, 0, 12, 27, 27, 27, 4, 4, 4, 0, 0, 9, 9,
- 0, 12, 0, 0, 0, 0, 1, 23, 8, 0, 8, 8, 8, 12, 0, 0,
- 0, 0, 0, 12, 12, 0, 0, 0, 12, 12, 12, 0, 9, 0, 9, 9,
- 1, 8, 8, 8, 0, 3, 9, 9, 0, 9, 9, 0, 0, 0, 12, 0,
- 0, 14, 14, 0, 12, 12, 12, 6, 6, 3, 9, 9, 9, 5, 16, 0,
- 13, 13, 13, 9, 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 1, 2,
- 0, 0, 5, 0, 9, 0, 9, 0, 9, 9, 6, 0, 25, 25, 25, 25,
- 30, 1, 6, 0, 0, 12, 0, 12, 9, 9, 6, 9, 20, 20, 0, 0,
- 9, 0, 0, 0, 0, 1, 0, 0, 0, 29, 0, 29, 0, 4, 0, 0,
- 9, 9, 1, 2, 9, 9, 1, 1, 6, 3, 0, 0, 22, 22, 22, 22,
- 22, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 0, 0, 0,
- 0, 0, 29, 0, 12, 8, 8, 8, 8, 8, 8, 9, 9, 9, 1, 25,
- 2, 7, 6, 20, 20, 20, 20, 12, 34, 34, 0, 11, 0, 0, 11, 0,
- 12, 12, 8, 8, 9, 9, 12, 12, 12, 12, 20, 20, 20, 12, 9, 25,
- 25, 12, 12, 9, 9, 25, 25, 25, 25, 25, 12, 12, 12, 9, 9, 9,
- 9, 12, 12, 12, 12, 12, 20, 9, 9, 9, 9, 25, 25, 25, 12, 25,
- 34, 34, 25, 25, 9, 9, 0, 0, 8, 8, 8, 12, 6, 0, 0, 0,
- 12, 0, 9, 9, 12, 12, 12, 8, 9, 28, 28, 29, 18, 30, 29, 29,
- 29, 6, 7, 29, 3, 29, 0, 0, 11, 12, 12, 12, 9, 19, 19, 19,
- 21, 21, 1, 21, 21, 21, 21, 21, 21, 21, 9, 29, 12, 12, 12, 10,
- 10, 10, 10, 10, 10, 10, 0, 0, 24, 24, 24, 24, 24, 0, 0, 0,
- 9, 21, 21, 21, 25, 25, 0, 0, 34, 34, 34, 0, 12, 12, 12, 9,
- 12, 20, 20, 19, 21, 21, 17, 19, 19, 19, 19, 0, 7, 9, 9, 9,
- 1, 25, 25, 25, 25, 25, 6, 29, 29, 0, 0, 29, 1, 1, 1, 18,
- 2, 8, 8, 8, 4, 9, 9, 9, 5, 12, 12, 12, 1, 18, 2, 8,
- 8, 8, 12, 12, 12, 19, 19, 19, 9, 9, 6, 7, 19, 19, 12, 12,
- 34, 34, 3, 12, 12, 12, 21, 21, 8, 8, 4, 9, 21, 21, 6, 6,
- 19, 19, 9, 9, 1, 1, 29, 4, 27, 27, 27, 0, 27, 27, 27, 27,
- 27, 27, 0, 0, 27, 14, 14, 27, 27, 27, 11, 0, 0, 0, 0, 29,
- 31, 32, 0, 0, 11, 11, 11, 11, 29, 0, 0, 0, 27, 0, 0, 0,
- 8, 8, 9, 8, 8, 8, 5, 12, 12, 12, 12, 1, 12, 12, 10, 10,
- 10, 10, 12, 12, 12, 12, 10, 19, 19, 12, 12, 12, 12, 19, 12, 1,
- 1, 2, 8, 8, 20, 9, 9, 9, 5, 1, 0, 0, 27, 27, 1, 1,
- 0, 0, 8, 9, 34, 34, 12, 12, 10, 10, 10, 25, 9, 9, 9, 21,
- 21, 21, 21, 6, 1, 1, 18, 2, 12, 12, 12, 4, 9, 20, 20, 20,
- 5, 0, 0, 0, 12, 9, 0, 12, 9, 9, 9, 20, 20, 20, 20, 0,
- 21, 21, 0, 0, 11, 11, 11, 0, 0, 0, 12, 25, 24, 25, 24, 0,
- 0, 2, 7, 0, 12, 8, 12, 12, 12, 12, 12, 21, 21, 21, 21, 9,
- 25, 6, 0, 0, 4, 4, 4, 0, 0, 0, 0, 7, 34, 0, 0, 0,
- 1, 1, 2, 14, 14, 8, 8, 8, 9, 9, 5, 0, 0, 0, 35, 35,
- 35, 35, 35, 35, 35, 35, 34, 34, 0, 0, 0, 33, 1, 1, 2, 8,
- 9, 5, 4, 0, 9, 9, 9, 7, 6, 0, 34, 34, 12, 9, 9, 0,
- 10, 12, 12, 12, 5, 3, 15, 15, 0, 29, 4, 9, 0, 34, 34, 34,
- 1, 5, 4, 26, 0, 0, 27, 0, 9, 4, 6, 0, 12, 12, 0, 4,
- 0, 0, 1, 1, 0, 0, 27, 27, 9, 9, 5, 1, 1, 2, 4, 3,
- 0, 0, 29, 1, 9, 9, 9, 1, 1, 2, 5, 4, 3, 0, 0, 0,
- 1, 1, 2, 5, 4, 0, 0, 0, 9, 1, 2, 5, 2, 9, 9, 9,
- 9, 9, 5, 4, 0, 20, 20, 20, 9, 9, 9, 6, 2, 5, 4, 0,
- 5, 3, 0, 0, 8, 9, 9, 9, 9, 9, 9, 12, 12, 12, 12, 29,
- 6, 1, 1, 1, 1, 2, 15, 20, 20, 20, 20, 11, 0, 11, 0, 7,
- 15, 15, 15, 15, 15, 15, 21, 21, 21, 21, 1, 2, 26, 7, 0, 0,
- 0, 3, 0, 0, 0, 0, 19, 19, 9, 1, 1, 0, 0, 0, 9, 0,
- 1, 2, 4, 9, 6, 7, 16, 20, 9, 1, 2, 7, 12, 12, 11, 9,
-};
-
-/* Indic_Syllabic_Category: 3496 bytes. */
-
-RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_indic_syllabic_category_stage_1[f] << 6;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_indic_syllabic_category_stage_2[pos + f] << 5;
- f = code >> 2;
- code ^= f << 2;
- pos = (RE_UINT32)re_indic_syllabic_category_stage_3[pos + f] << 2;
- value = re_indic_syllabic_category_stage_4[pos + code];
-
- return value;
-}
-
-/* Emoji. */
-
-static RE_UINT8 re_emoji_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 1,
-};
-
-static RE_UINT8 re_emoji_stage_3[] = {
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 4, 1, 1, 5, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 8,
- 1, 1, 1, 9, 1, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1,
- 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 1, 20, 21, 1, 1,
- 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 1, 1, 1, 1, 1,
- 24, 1, 1, 25, 1, 26, 27, 28, 29, 30, 1, 1, 31, 32, 33, 34,
- 32, 32, 32, 35, 36, 37, 38, 39, 32, 40, 32, 41, 1, 1, 1, 42,
- 1, 1, 1, 1, 43, 44, 45, 46, 1, 47, 48, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_stage_4[] = {
- 0, 0, 0, 0, 8, 4, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2,
- 0, 0, 240, 3, 0, 6, 0, 0, 0, 0, 0, 12, 0, 1, 0, 0,
- 0, 128, 0, 0, 0, 254, 15, 7, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120,
- 31, 64, 50, 33, 77, 196, 0, 7, 5, 255, 15, 128, 105, 1, 0, 200,
- 0, 0, 252, 26, 3, 12, 3, 96, 48, 193, 26, 0, 0, 6, 191, 39,
- 36, 191, 84, 32, 2, 1, 24, 0, 144, 80, 184, 0, 24, 0, 0, 0,
- 0, 0, 224, 0, 2, 0, 1, 128, 0, 0, 0, 0, 0, 0, 48, 0,
- 224, 0, 0, 24, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 128, 2, 0, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 192, 0, 64, 254, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 192, 255, 255, 255, 6, 0, 0, 4, 0, 128, 252, 7,
- 0, 0, 3, 0, 0, 0, 0, 0, 255, 255, 255, 255, 243, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 206, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 255, 191,
- 255, 255, 255, 255, 255, 255, 255, 63, 0, 126, 255, 255, 255, 128, 249, 7,
- 128, 60, 97, 0, 48, 1, 6, 16, 28, 0, 14, 112, 10, 129, 8, 252,
- 255, 255, 0, 0, 0, 0, 0, 0, 63, 248, 39, 0, 63, 26, 249, 7,
- 0, 0, 0, 0, 255, 15, 0, 0, 0, 224, 255, 255, 255, 255, 255, 247,
- 191, 255, 255, 255, 255, 255, 123, 252, 255, 255, 255, 255, 231, 199, 255, 255,
- 255, 231, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 15, 7,
- 7, 0, 63, 0, 0, 0, 0, 0,
-};
-
-/* Emoji: 652 bytes. */
-
-RE_UINT32 re_get_emoji(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_emoji_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_emoji_stage_3[pos + f] << 6;
- pos += code;
- value = (re_emoji_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 80, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 94, 6, 6, 6, 6, 6, 6,
+ 80, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 269, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 111,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 29, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 89,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_word_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7,
+ 0, 4, 32, 4, 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0,
+ 31, 80, 0, 0, 255, 255, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 254, 255,
+ 255, 255, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0, 0, 0, 255, 7,
+ 255, 195, 255, 255, 255, 255, 239, 159, 255, 253, 255, 159, 0, 0, 255, 255,
+ 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 63, 36, 255, 63, 0, 0,
+ 255, 255, 255, 15, 255, 7, 0, 0, 255, 255, 223, 255, 255, 0, 248, 255,
+ 207, 255, 254, 255, 239, 159, 249, 255, 255, 253, 197, 243, 159, 121, 128, 176,
+ 207, 255, 3, 80, 238, 135, 249, 255, 255, 253, 109, 211, 135, 57, 2, 94,
+ 192, 255, 63, 0, 238, 191, 251, 255, 255, 253, 237, 243, 191, 59, 1, 0,
+ 207, 255, 0, 254, 238, 159, 249, 255, 159, 57, 224, 176, 207, 255, 2, 0,
+ 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 192, 255, 0, 0,
+ 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7, 207, 255, 0, 0,
+ 239, 223, 253, 255, 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0,
+ 223, 125, 240, 128, 207, 255, 0, 252, 238, 255, 127, 252, 255, 255, 251, 47,
+ 127, 132, 95, 255, 192, 255, 12, 0, 254, 255, 255, 255, 255, 255, 255, 7,
+ 255, 127, 255, 3, 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243,
+ 1, 0, 0, 3, 255, 3, 160, 194, 255, 254, 255, 255, 255, 31, 254, 255,
+ 223, 255, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 255, 3, 255, 255,
+ 255, 255, 255, 63, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 255, 231, 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255,
+ 255, 199, 255, 1, 255, 223, 31, 0, 255, 255, 31, 0, 255, 255, 15, 0,
+ 255, 223, 13, 0, 255, 255, 143, 48, 255, 3, 0, 0, 0, 56, 255, 3,
+ 255, 255, 255, 1, 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 15, 255, 15, 192, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255,
+ 255, 3, 255, 3, 255, 255, 255, 159, 128, 0, 255, 255, 1, 0, 0, 0,
+ 255, 15, 255, 3, 0, 248, 15, 0, 255, 255, 255, 0, 255, 227, 255, 255,
+ 255, 1, 255, 255, 0, 0, 247, 255, 255, 255, 255, 251, 63, 63, 255, 170,
+ 255, 255, 223, 95, 220, 31, 207, 15, 255, 31, 220, 31, 0, 48, 0, 0,
+ 0, 0, 0, 128, 1, 0, 16, 0, 0, 0, 2, 128, 0, 0, 255, 31,
+ 255, 255, 1, 0, 132, 252, 47, 62, 80, 189, 255, 243, 224, 67, 0, 0,
+ 255, 1, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255, 31, 248, 15, 0,
+ 255, 128, 0, 128, 255, 255, 127, 0, 127, 127, 127, 127, 0, 128, 0, 0,
+ 224, 0, 0, 0, 254, 255, 62, 31, 255, 255, 127, 230, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 0, 0, 255, 31, 255, 255, 255, 15, 0, 0,
+ 255, 255, 247, 191, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 16, 0, 0, 63, 0, 255, 3,
+ 255, 255, 255, 232, 255, 63, 255, 255, 1, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 7, 0, 0, 56, 255, 255, 124, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 55, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
+ 0, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 15,
+ 255, 255, 24, 0, 0, 224, 0, 0, 0, 0, 223, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 32,
+ 0, 224, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 15, 0, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0,
+ 255, 255, 255, 192, 111, 240, 239, 254, 255, 255, 63, 135, 127, 0, 0, 0,
+ 255, 255, 7, 0, 255, 0, 255, 3, 255, 27, 3, 0, 31, 0, 0, 0,
+ 192, 255, 0, 128, 255, 1, 255, 3, 240, 0, 255, 255, 255, 255, 79, 0,
+ 31, 222, 255, 23, 255, 255, 251, 255, 255, 255, 255, 64, 127, 189, 255, 191,
+ 255, 7, 255, 3, 255, 253, 237, 251, 159, 57, 129, 224, 207, 31, 31, 0,
+ 255, 7, 255, 195, 3, 0, 0, 0, 191, 0, 255, 3, 255, 255, 63, 255,
+ 1, 0, 0, 63, 17, 0, 255, 3, 255, 3, 0, 128, 127, 242, 111, 255,
+ 255, 255, 191, 249, 15, 0, 255, 3, 255, 252, 255, 255, 255, 255, 255, 252,
+ 27, 0, 0, 0, 255, 255, 255, 35, 255, 253, 255, 255, 1, 0, 255, 3,
+ 0, 0, 252, 255, 255, 254, 127, 0, 127, 251, 255, 255, 255, 255, 127, 180,
+ 191, 253, 255, 255, 255, 127, 251, 1, 0, 0, 1, 0, 248, 255, 255, 224,
+ 255, 135, 255, 255, 255, 128, 255, 255, 27, 0, 3, 0, 0, 0, 7, 0,
+ 255, 7, 255, 31, 255, 1, 255, 99, 224, 227, 7, 248, 231, 15, 0, 0,
+ 0, 60, 0, 0, 28, 0, 0, 0, 255, 255, 255, 223, 100, 222, 255, 235,
+ 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
+ 63, 255, 255, 255, 253, 255, 255, 247, 247, 207, 255, 255, 255, 255, 127, 248,
+ 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0, 127, 255, 255, 249,
+ 219, 7, 0, 0, 255, 31, 255, 63, 255, 67, 0, 0, 31, 0, 127, 0,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15, 3, 0, 255, 255
+};
+
+RE_UINT32 re_get_word(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_word_table_1[field_2];
+ v = re_word_table_2[(v << 5) | field_1];
+ v = re_word_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
}
-/* Emoji_Presentation. */
-
-static RE_UINT8 re_emoji_presentation_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
+/* Word_Break. */
+static RE_UINT8 re_word_break_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 13, 14, 15, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 16, 10, 10, 10, 10, 10, 10, 10, 10, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 10, 10, 13, 29, 10, 10,
+ 10, 30, 10, 10, 10, 10, 10, 10, 10, 10, 31, 32, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 33, 10, 10, 34,
+ 10, 10, 10, 10, 35, 36, 37, 10, 38, 10, 39, 40, 41, 10, 42, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 43, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
+};
+
+static RE_UINT16 re_word_break_table_2[] = {
+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 8, 7, 9, 9, 9, 10, 11, 12, 7, 13,
+ 7, 7, 7, 7, 14, 7, 7, 7, 7, 15, 16, 7, 17, 18, 19, 20,
+ 21, 7, 22, 23, 7, 7, 24, 25, 26, 27, 28, 7, 7, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 53, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 36, 79, 80, 36, 36, 81, 82, 36, 83, 84, 85, 86, 87, 88, 89, 36,
+ 36, 90, 91, 92, 93, 7, 94, 95, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 96, 7, 97, 98, 99, 7, 100, 7, 101, 36, 102, 7, 7, 103,
+ 104, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 105, 106, 7, 7, 107, 108, 109, 110, 111, 36, 112, 113, 114,
+ 115, 7, 7, 116, 117, 118, 7, 119, 120, 121, 62, 36, 36, 36, 122, 36,
+ 123, 36, 124, 125, 126, 127, 128, 36, 129, 130, 131, 132, 133, 134, 7, 135,
+ 7, 136, 137, 138, 139, 140, 141, 142, 7, 7, 7, 7, 7, 7, 9, 143,
+ 7, 7, 7, 7, 7, 7, 7, 7, 103, 7, 144, 138, 7, 145, 146, 147,
+ 148, 149, 150, 151, 152, 36, 127, 153, 154, 155, 156, 7, 157, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 158, 7, 159, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 160, 120, 7, 7, 7, 7, 161, 7, 94, 7, 162, 163, 164, 164, 9,
+ 36, 165, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 166, 167, 36, 36, 168, 169, 169, 170, 171, 15, 7, 7, 172, 7, 36, 173,
+ 36, 36, 36, 36, 36, 36, 173, 174, 169, 169, 175, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 176, 36, 177, 138, 7, 7, 7, 7, 7, 7, 7, 7,
+ 178, 179, 7, 180, 181, 7, 7, 182, 183, 7, 7, 7, 7, 7, 184, 185,
+ 186, 187, 7, 188, 189, 130, 190, 191, 30, 192, 193, 194, 40, 195, 196, 197,
+ 7, 198, 199, 200, 36, 201, 202, 203, 204, 205, 7, 206, 7, 7, 7, 207,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 208, 209, 210,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 211, 212, 213, 7, 7, 214, 215, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 138, 177, 7, 216, 7, 217, 218,
+ 219, 220, 221, 222, 7, 7, 7, 223, 224, 2, 3, 225, 226, 120, 227, 228,
+ 229, 230, 231, 36, 7, 7, 7, 232, 36, 36, 7, 233, 36, 36, 36, 234,
+ 36, 36, 36, 36, 194, 7, 235, 128, 7, 236, 237, 238, 138, 7, 239, 36,
+ 7, 7, 7, 7, 138, 240, 241, 210, 7, 242, 7, 243, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 163, 119, 217, 36, 36, 36, 36,
+ 244, 245, 119, 163, 120, 36, 36, 246, 119, 247, 36, 36, 7, 8, 36, 36,
+ 248, 249, 36, 194, 194, 36, 85, 250, 7, 119, 119, 251, 214, 36, 36, 36,
+ 7, 7, 157, 36, 7, 251, 7, 251, 7, 252, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 7, 253, 36, 36, 194, 254, 255, 36, 36, 177, 256, 163,
+ 133, 257, 258, 259, 133, 260, 261, 262, 133, 263, 264, 265, 133, 195, 266, 36,
+ 267, 268, 36, 36, 269, 139, 270, 271, 272, 273, 274, 275, 36, 36, 36, 36,
+ 7, 276, 277, 278, 7, 27, 279, 36, 36, 36, 36, 36, 7, 280, 281, 36,
+ 7, 27, 282, 36, 7, 283, 114, 36, 284, 285, 36, 36, 36, 36, 36, 36,
+ 7, 286, 36, 36, 36, 7, 7, 287, 288, 289, 290, 36, 36, 291, 292, 293,
+ 294, 295, 296, 7, 297, 36, 7, 116, 36, 36, 36, 36, 36, 36, 36, 36,
+ 298, 299, 300, 301, 302, 303, 36, 36, 304, 305, 306, 307, 308, 114, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 309, 36, 36, 36, 36, 36, 310, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 247, 36, 36, 36,
+ 7, 7, 7, 172, 7, 7, 7, 7, 7, 7, 243, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 311, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 312, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 116, 120, 114, 36, 36, 177, 313, 7, 314, 315, 316, 102, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 7, 7, 36, 36, 36, 36, 7, 7, 317, 9, 318, 36, 36, 319,
+ 320, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 321, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 322, 323, 324, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 325, 326, 327, 36, 36,
+ 36, 36, 328, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 37, 7, 329, 330, 331, 7, 332, 333, 334, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 335, 336, 95, 37, 37, 160, 160, 298, 298, 337, 338,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 9, 339, 9, 340, 341, 342, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 343, 344, 36, 36, 36, 36, 36, 36, 7, 345, 346, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 7, 347, 36, 36, 36, 36, 36, 36, 36, 36,
+ 7, 7, 7, 7, 7, 7, 348, 36, 7, 7, 349, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 331, 350, 351, 352, 353, 354, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 177, 206, 206, 159, 36, 36, 355,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 356,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 122,
+ 357, 9, 9, 9, 36, 36, 36, 36, 9, 9, 9, 9, 9, 9, 9, 358,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36
};
-static RE_UINT8 re_emoji_presentation_stage_2[] = {
+static RE_UINT8 re_word_break_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 8, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 7, 0, 0, 0, 0,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 12,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 11, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 11, 11, 11, 11, 11, 0, 11, 11, 0, 0, 11, 11, 11, 11, 7, 11,
+ 0, 0, 0, 0, 0, 0, 11, 10, 11, 11, 11, 0, 11, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 0, 11, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 7, 11, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14,
+ 0, 14, 14, 0, 14, 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15,
+ 15, 15, 15, 11, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 13, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 7, 0, 11, 11,
+ 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 14, 14, 14, 14, 14, 14, 14, 13, 0, 14,
+ 14, 14, 14, 14, 14, 11, 11, 14, 14, 0, 14, 14, 14, 14, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
+ 11, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 11, 11, 0, 0, 7, 0, 11, 0, 0, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 11, 14, 14, 14, 11, 14, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 11, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 0, 0, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 11, 11, 0, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 0,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 0, 11, 11, 0, 11, 11, 0, 0, 14, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 14, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 0, 11, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 14, 11, 11, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 14, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 11, 11, 0, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 11, 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 0, 0, 0, 11, 11, 0, 11, 0, 11, 11,
+ 0, 0, 0, 11, 11, 0, 0, 0, 11, 11, 11, 0, 0, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 14, 14,
+ 14, 14, 14, 0, 0, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 0, 0, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 11, 0,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 14, 11, 0,
+ 0, 0, 0, 0, 11, 11, 11, 14, 0, 0, 0, 0, 0, 0, 0, 11,
+ 11, 11, 14, 14, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11,
+ 0, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 14, 0, 0, 0, 0, 14,
+ 14, 14, 14, 14, 14, 0, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 14, 0, 14, 0, 0, 0, 0, 14, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 14, 14, 11, 11, 11, 11, 11, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14,
+ 14, 0, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 14, 14, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 0, 11, 0, 0, 0, 0, 0, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 14, 14, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0, 0,
+ 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 11, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 13, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 11, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 14, 11, 11,
+ 11, 11, 11, 11, 14, 11, 11, 14, 14, 14, 11, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 0, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0,
+ 0, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 0, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 0, 14, 16, 13, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8, 0, 0, 10, 2, 2, 13, 13, 13, 13, 13, 12,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+ 12, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 11, 0, 0, 0, 0, 11, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 11, 0, 0,
+ 0, 0, 0, 0, 11, 0, 11, 0, 11, 0, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 14,
+ 14, 14, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14,
+ 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 11, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 17, 17, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 14, 11, 11, 11, 14, 11, 11, 11, 11, 14, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 11, 11, 11, 11, 11, 11, 0, 0, 0, 11, 0, 11, 11, 14,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 14, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 0, 14, 14, 14, 0, 0, 14, 14, 0, 0, 0, 0, 0, 14, 14,
+ 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 0, 0, 11, 11, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 0,
+ 0, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 15, 14, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 0,
+ 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 7, 0, 0, 10, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12,
+ 7, 0, 8, 0, 7, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 13,
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 0, 8, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14,
+ 0, 0, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11,
+ 0, 0, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 0, 0, 11, 0, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 0, 14, 14, 0, 0, 0, 0, 0, 14, 14, 14, 14,
+ 11, 11, 11, 11, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 14, 14, 14, 0, 0, 0, 0, 14,
+ 11, 11, 11, 11, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 14, 14, 0, 0, 0,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 0, 0, 0, 0, 11, 14, 14, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 11, 11, 11, 11, 0, 0, 0, 0, 14, 14, 14, 14, 0, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 0, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 14, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11,
+ 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 0, 14, 14, 11, 14, 14,
+ 14, 14, 14, 14, 14, 0, 0, 14, 14, 0, 0, 14, 14, 14, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 11, 11, 11,
+ 11, 11, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 14, 11,
+ 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 0, 0,
-};
-
-static RE_UINT8 re_emoji_presentation_stage_3[] = {
+ 14, 14, 14, 14, 11, 11, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 14, 14, 0, 0,
+ 14, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 14, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 21,
- 22, 23, 24, 0, 0, 0, 0, 0, 25, 26, 25, 27, 28, 25, 29, 30,
- 25, 31, 32, 25, 25, 25, 25, 33, 25, 34, 35, 36, 37, 18, 0, 38,
- 25, 25, 39, 0, 25, 25, 40, 41, 0, 0, 0, 0, 0, 0, 0, 42,
- 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 46, 25, 47, 48, 25,
- 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_emoji_presentation_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 12, 0, 30, 9, 0, 0, 0, 0, 96,
- 0, 0, 48, 0, 0, 255, 15, 0, 0, 0, 0, 128, 0, 0, 8, 0,
- 2, 12, 0, 96, 48, 64, 16, 0, 0, 4, 44, 36, 32, 12, 0, 0,
- 0, 1, 0, 0, 0, 80, 184, 0, 0, 0, 224, 0, 0, 0, 1, 128,
- 0, 0, 0, 24, 0, 0, 33, 0, 16, 0, 0, 0, 0, 128, 0, 0,
- 0, 64, 254, 7, 192, 255, 255, 255, 2, 0, 0, 4, 0, 128, 124, 7,
- 0, 0, 3, 0, 255, 255, 255, 255, 1, 224, 191, 255, 255, 255, 255, 223,
- 255, 255, 15, 0, 255, 135, 15, 0, 255, 255, 17, 255, 255, 255, 255, 127,
- 253, 255, 255, 255, 255, 255, 255, 159, 255, 255, 255, 63, 0, 120, 255, 255,
- 255, 0, 0, 4, 0, 0, 96, 0, 0, 0, 0, 248, 255, 255, 0, 0,
- 63, 16, 39, 0, 0, 24, 240, 7, 255, 15, 0, 0, 0, 224, 255, 255,
- 255, 255, 255, 247, 191, 255, 255, 255, 255, 255, 123, 252, 231, 199, 255, 255,
- 255, 231, 255, 255, 0, 0, 15, 7, 7, 0, 63, 0,
-};
-
-/* Emoji_Presentation: 544 bytes. */
-
-RE_UINT32 re_get_emoji_presentation(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_presentation_stage_1[f] << 5;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_emoji_presentation_stage_2[pos + f] << 4;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_emoji_presentation_stage_3[pos + f] << 5;
- pos += code;
- value = (re_emoji_presentation_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Emoji_Modifier. */
-
-static RE_UINT8 re_emoji_modifier_stage_1[] = {
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
-};
-
-/* Emoji_Modifier: 130 bytes. */
-
-RE_UINT32 re_get_emoji_modifier(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_emoji_modifier_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_emoji_modifier_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_emoji_modifier_stage_3[pos + f] << 7;
- pos += code;
- value = (re_emoji_modifier_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Emoji_Modifier_Base. */
-
-static RE_UINT8 re_emoji_modifier_base_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_modifier_base_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_base_stage_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 0, 0, 11, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 0, 14, 14, 0, 0, 14, 14, 14, 14, 11,
+ 14, 11, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14,
+ 14, 11, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,
- 0, 6, 7, 0, 0, 8, 9, 0, 0, 10, 11, 12, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_emoji_modifier_base_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 60, 0, 0, 0, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 156, 28, 0, 0, 0, 0, 0, 0,
- 204, 255, 1, 0, 192, 255, 255, 17, 238, 128, 2, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 48, 4, 0, 0, 97, 0, 0, 0, 0, 0,
- 224, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 112, 0,
- 1, 16, 0, 0, 0, 0, 0, 0, 0, 128, 0, 255, 64, 0, 255, 115,
- 0, 0, 0, 0, 0, 0, 96, 11, 0, 224, 254, 63, 0, 0, 0, 0,
-};
-
-/* Emoji_Modifier_Base: 324 bytes. */
-
-RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_modifier_base_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_emoji_modifier_base_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_emoji_modifier_base_stage_3[pos + f] << 6;
- pos += code;
- value = (re_emoji_modifier_base_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Emoji_Component. */
-
-static RE_UINT8 re_emoji_component_stage_1[] = {
- 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_component_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1,
- 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_component_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 6,
- 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 8, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_emoji_component_stage_4[] = {
- 0, 0, 0, 0, 8, 4, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
- 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255,
- 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-};
-
-/* Emoji_Component: 340 bytes. */
-
-RE_UINT32 re_get_emoji_component(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_emoji_component_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_emoji_component_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_emoji_component_stage_3[pos + f] << 6;
- pos += code;
- value = (re_emoji_component_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Extended_Pictographic. */
-
-static RE_UINT8 re_extended_pictographic_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_extended_pictographic_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 5, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 8, 9,
-};
-
-static RE_UINT8 re_extended_pictographic_stage_3[] = {
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 11, 14, 14, 14, 14, 0,
+ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 11, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 7, 8,
- 0, 0, 0, 9, 0, 0, 10, 11, 12, 13, 14, 13, 15, 16, 17, 0,
- 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0,
- 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 23, 24, 25, 26, 27, 28, 13, 13, 13, 13, 13, 29,
- 13, 13, 13, 13, 30, 31, 13, 13, 13, 32, 13, 13, 0, 33, 0, 34,
- 35, 36, 37, 13, 38, 39, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 30,
-};
-
-static RE_UINT8 re_extended_pictographic_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 2, 0, 0, 240, 3, 0, 6, 0, 0,
- 0, 0, 0, 12, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 128, 0, 0, 0, 254, 15, 7, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0, 120,
- 191, 255, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 63, 0, 255, 255, 255, 255, 255, 255, 63, 255, 87, 32, 2, 1, 24, 0,
- 144, 80, 184, 0, 248, 0, 0, 0, 0, 0, 224, 0, 2, 0, 1, 128,
- 0, 0, 0, 0, 0, 0, 48, 0, 224, 0, 0, 24, 0, 0, 0, 0,
- 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32,
- 0, 0, 128, 2, 0, 0, 0, 0, 0, 224, 0, 0, 0, 128, 0, 0,
- 0, 0, 0, 0, 0, 240, 3, 192, 0, 64, 254, 7, 0, 224, 255, 255,
- 255, 255, 255, 255, 63, 0, 0, 0, 254, 255, 0, 4, 0, 128, 252, 247,
- 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7,
- 255, 255, 255, 255, 255, 255, 255, 63, 192, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255,
- 0, 0, 224, 255, 255, 255, 255, 255, 0, 240, 0, 0, 0, 0, 0, 0,
- 0, 255, 0, 252, 0, 0, 0, 0, 0, 255, 0, 0, 0, 192, 255, 255,
- 0, 240, 255, 255, 255, 255, 255, 247, 191, 255, 255, 255, 255, 255, 255, 255,
-};
-
-/* Extended_Pictographic: 596 bytes. */
-
-RE_UINT32 re_get_extended_pictographic(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_extended_pictographic_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_extended_pictographic_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_extended_pictographic_stage_3[pos + f] << 6;
- pos += code;
- value = (re_extended_pictographic_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* NFD_Quick_Check. */
-
-static RE_UINT8 re_nfd_quick_check_stage_1[] = {
- 0, 1, 2, 3, 4, 1, 1, 5, 1, 1, 1, 6, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_nfd_quick_check_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 5, 10, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 12, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5,
- 5, 5, 5, 5, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5,
-};
-
-static RE_UINT8 re_nfd_quick_check_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 7, 8, 9,
- 10, 11, 0, 12, 0, 0, 0, 0, 13, 0, 0, 14, 0, 0, 0, 0,
- 0, 0, 0, 0, 15, 16, 0, 17, 18, 19, 0, 0, 0, 20, 21, 22,
- 0, 23, 0, 24, 0, 22, 0, 25, 0, 0, 0, 0, 0, 26, 27, 0,
- 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 32, 33, 34, 35, 36, 37,
- 38, 0, 0, 0, 39, 0, 40, 41, 42, 43, 44, 45, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0,
- 0, 48, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 51, 0,
- 0, 0, 0, 0, 31, 31, 31, 31, 52, 53, 31, 54, 55, 56, 0, 0,
- 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0,
- 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 31, 31, 31, 31, 31, 31, 31, 65, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_nfd_quick_check_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 191, 255, 126, 62, 191, 255, 126, 190,
- 255, 255, 252, 255, 63, 255, 241, 126, 248, 241, 243, 255, 63, 255, 255, 127,
- 0, 0, 0, 0, 3, 128, 1, 0, 0, 224, 255, 223, 207, 255, 49, 255,
- 255, 255, 255, 207, 192, 255, 15, 0, 27, 0, 0, 0, 0, 0, 16, 64,
- 224, 215, 1, 0, 0, 252, 1, 0, 0, 124, 24, 0, 0, 0, 0, 0,
- 139, 112, 0, 2, 0, 0, 0, 2, 0, 0, 139, 112, 0, 0, 192, 0,
- 6, 0, 207, 252, 252, 252, 63, 3, 0, 0, 0, 0, 124, 0, 0, 0,
- 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 0,
- 0, 0, 0, 255, 0, 0, 0, 0, 0, 24, 0, 176, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 78, 0, 0, 0, 0,
- 0, 25, 0, 48, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 28, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 129, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
- 8, 32, 132, 16, 0, 2, 104, 1, 2, 0, 8, 32, 132, 16, 0, 2,
- 0, 0, 0, 0, 64, 0, 0, 0, 64, 85, 4, 0, 0, 0, 0, 40,
- 11, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 11, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3,
- 255, 255, 63, 63, 255, 255, 255, 255, 63, 63, 255, 170, 255, 255, 255, 63,
- 255, 255, 255, 255, 255, 255, 223, 95, 222, 255, 207, 239, 255, 255, 220, 63,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 12, 0, 0,
- 0, 0, 0, 12, 0, 64, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0,
- 16, 18, 0, 0, 80, 0, 0, 0, 146, 2, 0, 0, 5, 224, 51, 3,
- 51, 3, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 15, 60, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 80, 85, 85, 165, 2, 219, 54, 0, 0, 16, 64, 0, 80, 85, 85,
- 165, 2, 219, 54, 0, 0, 144, 71, 255, 255, 255, 255, 15, 0, 0, 0,
- 255, 63, 229, 127, 101, 252, 255, 255, 255, 255, 255, 255, 255, 63, 255, 255,
- 255, 255, 255, 3, 0, 0, 0, 0, 0, 0, 0, 160, 0, 252, 127, 95,
- 219, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 8, 0, 0,
- 0, 0, 0, 0, 0, 192, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 12,
- 0, 0, 0, 192, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
- 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 63, 0, 0, 0, 0,
-};
-
-/* NFD_Quick_Check: 996 bytes. */
-
-RE_UINT32 re_get_nfd_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 14;
- code = ch ^ (f << 14);
- pos = (RE_UINT32)re_nfd_quick_check_stage_1[f] << 4;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_nfd_quick_check_stage_2[pos + f] << 4;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_nfd_quick_check_stage_3[pos + f] << 6;
- pos += code;
- value = (re_nfd_quick_check_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* NFC_Quick_Check. */
-
-static RE_UINT8 re_nfc_quick_check_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
- 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static RE_UINT8 re_nfc_quick_check_stage_2[] = {
- 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 4, 5, 6, 0, 7, 8, 9, 10, 8, 11, 0, 0, 12, 13,
- 14, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 19,
- 20, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 0, 14, 14, 0, 14,
+ 14, 14, 14, 14, 14, 14, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 0, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 0,
+ 14, 14, 0, 14, 14, 14, 14, 14, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 14,
+ 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 14,
+ 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 25, 25, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 29, 30, 0, 0, 0, 8, 0, 0, 31, 0, 32, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 14, 14, 0,
+ 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14,
+ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
+ 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 25, 25, 25, 25, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_nfc_quick_check_stage_3[] = {
+ 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 10, 11,
- 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 18, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 22, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 10, 0, 29, 30, 31,
- 29, 0, 26, 27, 28, 10, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 34, 0,
- 0, 0, 0, 0, 0, 33, 33, 33, 35, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38,
- 0, 0, 0, 0, 0, 0, 0, 19, 0, 39, 26, 26, 26, 40, 0, 38,
- 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 45, 46, 47, 48, 49, 15, 15, 15, 15, 15, 15, 15, 45, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 41, 0, 0, 0, 0,
- 0, 0, 0, 50, 0, 49, 47, 51, 52, 47, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 53, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 56, 31, 0, 0, 0, 0, 0, 0, 0,
- 15, 15, 15, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_nfc_quick_check_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 2, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- 2, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
-};
-
-/* NFC_Quick_Check: 1592 bytes. */
-
-RE_UINT32 re_get_nfc_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_nfc_quick_check_stage_1[f] << 5;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_nfc_quick_check_stage_2[pos + f] << 4;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_nfc_quick_check_stage_3[pos + f] << 3;
- value = re_nfc_quick_check_stage_4[pos + code];
-
- return value;
-}
-
-/* NFKD_Quick_Check. */
-
-static RE_UINT8 re_nfkd_quick_check_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 7, 8,
- 2, 2, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 0, 0, 11, 0, 0, 11, 11, 0, 0, 11, 11, 11, 11, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11,
+ 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 0, 11, 11, 11,
+ 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0,
+ 11, 11, 11, 11, 11, 0, 11, 0, 0, 0, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14,
+ 14, 14, 0, 14, 14, 0, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, 11, 11, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 11, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+ 0, 11, 11, 0, 11, 0, 0, 11, 0, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 11, 11, 0, 11, 0, 11, 0, 0, 0, 0,
+ 0, 0, 11, 0, 0, 0, 0, 11, 0, 11, 0, 11, 0, 11, 11, 11,
+ 0, 11, 11, 0, 11, 0, 0, 11, 0, 11, 0, 11, 0, 11, 0, 11,
+ 0, 11, 11, 0, 11, 0, 0, 11, 11, 11, 11, 0, 11, 11, 11, 11,
+ 11, 11, 11, 0, 11, 11, 11, 11, 0, 11, 11, 11, 11, 0, 11, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14,
+ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_nfkd_quick_check_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 17, 18, 19,
- 20, 21, 22, 23, 24, 7, 7, 7, 7, 7, 25, 7, 26, 27, 28, 29,
- 30, 31, 32, 33, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 34, 35, 7, 7, 7, 36, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 37, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 33, 38, 39, 33, 40, 41, 42,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 43, 44, 7, 45, 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 48, 7, 7, 49, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 53, 7,
- 7, 54, 55, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 33, 33, 56, 7, 7, 7, 7, 7,
-};
+RE_UINT32 re_get_word_break(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
-static RE_UINT8 re_nfkd_quick_check_stage_3[] = {
- 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10,
- 11, 12, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 0, 0, 26, 27, 0, 0, 0, 0, 28, 0, 0, 0,
- 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 33, 0, 0, 0, 34, 0, 0, 35, 36, 0, 0, 0, 0, 0,
- 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0,
- 0, 0, 39, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 43, 44, 0,
- 45, 0, 46, 47, 48, 49, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51,
- 52, 53, 54, 0, 0, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0,
- 59, 59, 59, 59, 60, 59, 59, 61, 62, 59, 63, 64, 59, 65, 66, 67,
- 68, 69, 70, 71, 72, 40, 0, 0, 73, 74, 75, 59, 76, 77, 78, 0,
- 79, 80, 81, 82, 83, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 59, 59, 59, 59, 87, 45, 0, 0, 88, 0, 0, 51, 0,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 0, 0, 43, 59, 59, 59, 59, 59, 59, 91, 0,
- 92, 93, 94, 95, 96, 94, 95, 97, 0, 98, 59, 59, 99, 0, 0, 0,
- 100, 59, 101, 100, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103,
- 0, 0, 104, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 105, 0, 0,
- 106, 107, 59, 108, 59, 59, 61, 0, 109, 110, 111, 59, 59, 112, 113, 59,
- 59, 64, 114, 59, 4, 59, 115, 116, 117, 114, 118, 119, 59, 59, 59, 120,
- 121, 59, 59, 59, 59, 100, 122, 123, 0, 0, 0, 0, 124, 125, 0, 0,
- 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0,
- 0, 0, 130, 15, 0, 58, 92, 0, 59, 59, 65, 59, 131, 132, 133, 59,
- 134, 135, 136, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 7, 59, 59,
- 59, 59, 59, 59, 59, 59, 137, 59, 133, 138, 139, 140, 141, 142, 0, 0,
- 143, 144, 145, 39, 102, 0, 0, 0, 146, 60, 147, 0, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0,
-};
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
-static RE_UINT8 re_nfkd_quick_check_stage_4[] = {
- 0, 0, 0, 0, 1, 133, 60, 119, 191, 255, 126, 62, 191, 255, 126, 190,
- 255, 255, 252, 255, 63, 255, 253, 254, 249, 243, 243, 255, 63, 255, 255, 255,
- 3, 128, 1, 0, 240, 255, 255, 223, 207, 255, 63, 255, 255, 255, 255, 207,
- 192, 255, 15, 0, 0, 0, 255, 1, 0, 0, 0, 63, 31, 0, 0, 0,
- 27, 0, 0, 0, 0, 0, 16, 68, 240, 215, 1, 0, 0, 252, 1, 0,
- 0, 124, 127, 0, 0, 0, 55, 2, 139, 112, 0, 2, 0, 0, 0, 2,
- 0, 0, 139, 112, 0, 0, 192, 0, 6, 0, 207, 252, 252, 252, 63, 3,
- 128, 0, 0, 0, 124, 0, 0, 0, 0, 0, 224, 1, 5, 0, 8, 0,
- 0, 2, 18, 0, 0, 0, 0, 255, 0, 24, 0, 176, 0, 0, 72, 0,
- 0, 0, 0, 78, 0, 25, 0, 48, 0, 0, 16, 0, 0, 28, 0, 0,
- 0, 1, 0, 0, 129, 13, 0, 0, 0, 0, 0, 116, 0, 0, 8, 0,
- 0, 0, 0, 48, 0, 16, 0, 0, 8, 32, 132, 16, 0, 2, 232, 3,
- 2, 0, 8, 32, 132, 16, 0, 2, 64, 0, 0, 0, 0, 0, 0, 16,
- 64, 85, 4, 0, 0, 0, 0, 40, 11, 0, 0, 0, 0, 112, 255, 247,
- 255, 191, 255, 255, 255, 7, 0, 1, 0, 0, 0, 248, 255, 255, 255, 255,
- 255, 255, 255, 15, 255, 255, 255, 3, 255, 255, 63, 63, 63, 63, 255, 170,
- 255, 255, 255, 63, 255, 255, 223, 255, 223, 255, 207, 239, 255, 255, 220, 127,
- 255, 7, 130, 0, 112, 128, 216, 80, 128, 3, 128, 128, 0, 0, 243, 255,
- 255, 127, 255, 31, 239, 254, 111, 62, 87, 189, 251, 251, 225, 3, 255, 255,
- 0, 2, 0, 12, 0, 64, 0, 0, 0, 224, 0, 0, 16, 18, 0, 0,
- 80, 176, 1, 0, 146, 2, 0, 0, 5, 224, 51, 3, 51, 3, 0, 0,
- 0, 240, 0, 0, 15, 60, 0, 0, 0, 6, 0, 0, 255, 7, 0, 0,
- 0, 0, 112, 0, 0, 128, 0, 0, 0, 0, 0, 128, 255, 255, 63, 0,
- 1, 0, 0, 0, 0, 0, 64, 7, 0, 80, 85, 85, 165, 2, 219, 54,
- 0, 0, 16, 216, 0, 0, 144, 199, 0, 0, 254, 255, 255, 127, 252, 255,
- 255, 255, 255, 127, 255, 0, 255, 255, 0, 0, 1, 0, 0, 0, 0, 3,
- 0, 0, 0, 240, 15, 0, 0, 0, 255, 63, 229, 127, 101, 252, 255, 255,
- 255, 63, 255, 255, 127, 0, 248, 160, 255, 255, 127, 95, 219, 255, 255, 255,
- 255, 255, 3, 0, 0, 0, 248, 255, 0, 0, 255, 255, 255, 0, 0, 0,
- 0, 0, 255, 31, 0, 0, 255, 3, 159, 255, 247, 255, 127, 15, 215, 255,
- 255, 255, 255, 31, 254, 255, 255, 255, 252, 252, 252, 28, 127, 127, 0, 0,
- 0, 0, 0, 20, 0, 8, 0, 0, 0, 192, 0, 0, 0, 24, 0, 0,
- 0, 0, 0, 88, 0, 0, 0, 12, 0, 0, 0, 192, 255, 255, 255, 223,
- 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123,
- 95, 252, 253, 255, 255, 207, 255, 255, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 255, 7, 255, 255,
- 255, 127, 255, 255, 255, 255, 0, 0, 7, 0, 255, 255, 255, 1, 3, 0,
-};
+ v = re_word_break_table_1[field_2];
+ v = re_word_break_table_2[(v << 5) | field_1];
+ v = re_word_break_table_3[(v << 5) | field_0];
-/* NFKD_Quick_Check: 1504 bytes. */
-
-RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_nfkd_quick_check_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_nfkd_quick_check_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_nfkd_quick_check_stage_3[pos + f] << 5;
- pos += code;
- value = (re_nfkd_quick_check_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
+ return v;
}
-/* NFKC_Quick_Check. */
-
-static RE_UINT8 re_nfkc_quick_check_stage_1[] = {
- 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 6,
- 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 10,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 11,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+/* XDigit. */
+static RE_UINT8 re_xdigit_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11,
+ 8, 12, 8, 13, 14, 15, 16, 17, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 19, 8, 8, 20, 8, 21, 8, 8, 8, 22, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
};
-static RE_UINT8 re_nfkc_quick_check_stage_2[] = {
- 0, 0, 1, 0, 2, 3, 0, 4, 0, 0, 5, 6, 7, 8, 9, 10,
- 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 14, 15, 16, 17, 18, 0, 0, 15, 19, 15, 20,
- 0, 21, 0, 22, 15, 20, 0, 23, 24, 0, 24, 25, 26, 27, 28, 0,
- 29, 0, 0, 30, 0, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0,
- 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 38, 0, 0, 39, 40, 41,
- 42, 43, 44, 0, 45, 46, 47, 0, 48, 0, 0, 0, 49, 0, 0, 0,
- 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 53, 0, 54, 0, 0, 0, 0,
- 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 57, 24, 51, 51, 51, 58,
- 59, 0, 60, 61, 62, 51, 63, 0, 64, 65, 51, 51, 51, 51, 51, 51,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 66, 0, 67,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 51, 51, 51, 51, 69, 70, 51, 71, 72, 73, 74, 75,
- 51, 51, 51, 51, 76, 77, 78, 79, 80, 81, 51, 82, 83, 51, 84, 85,
- 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 15, 20, 0, 0,
- 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 90, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 93, 94, 95, 96, 97, 51, 51, 51, 51, 98, 51, 51, 51, 51, 99,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 100, 101, 102, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 103, 104, 105, 0, 106, 107, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 51, 51, 51, 51, 51, 51, 51, 51, 108, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_xdigit_table_2[] = {
+ 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4,
+ 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
+ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 1,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
};
-static RE_UINT8 re_nfkc_quick_check_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
- 0, 0, 0, 0, 0, 0, 5, 6, 1, 7, 0, 0, 0, 0, 0, 6,
- 8, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 1,
- 0, 0, 0, 12, 9, 0, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 25, 0, 0, 0, 26, 7, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 27, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 29,
- 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
- 0, 0, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0,
- 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, 0, 0,
- 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0,
- 36, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 31, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 35, 0, 0, 0, 0,
- 0, 22, 0, 0, 0, 0, 0, 0, 39, 40, 41, 22, 0, 7, 42, 43,
- 7, 0, 39, 40, 41, 22, 0, 7, 0, 0, 0, 0, 0, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 44, 45, 46, 0,
- 0, 0, 0, 0, 0, 45, 45, 45, 47, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 11, 50,
- 11, 51, 11, 11, 11, 52, 0, 1, 0, 0, 0, 53, 11, 11, 11, 11,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55,
- 0, 0, 0, 0, 0, 0, 0, 42, 43, 56, 39, 42, 39, 42, 0, 57,
- 11, 52, 58, 0, 49, 6, 59, 60, 6, 43, 6, 6, 0, 0, 61, 11,
- 11, 25, 11, 9, 0, 1, 0, 0, 62, 63, 64, 65, 66, 67, 68, 68,
- 69, 43, 11, 11, 11, 11, 11, 11, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 70, 0, 0,
- 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 52, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 11, 11, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 71, 52,
- 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 0, 63, 11, 11, 25, 73, 11, 0, 0, 0, 0,
- 11, 11, 11, 25, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 25,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 43,
- 0, 0, 0, 8, 0, 0, 0, 0, 11, 12, 74, 25, 75, 73, 11, 11,
- 11, 11, 11, 11, 11, 12, 11, 11, 11, 11, 11, 43, 0, 0, 0, 0,
- 25, 0, 53, 76, 11, 11, 25, 77, 78, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 43, 0, 0, 0, 53, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 12, 0, 0, 11, 11, 11, 11, 11, 11,
- 11, 11, 73, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 11, 9,
- 0, 0, 11, 43, 0, 0, 11, 11, 79, 11, 50, 11, 25, 80, 81, 11,
- 11, 11, 11, 11, 11, 11, 11, 9, 63, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 25, 73, 73, 73, 82, 25, 25, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 31, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 20, 83, 0, 0, 0, 0, 0, 31, 0, 0,
- 0, 0, 0, 84, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
- 1, 0, 0, 0, 0, 0, 0, 0, 11, 11, 85, 11, 11, 11, 11, 11,
- 11, 11, 11, 85, 86, 87, 11, 88, 62, 11, 11, 11, 11, 11, 11, 11,
- 51, 89, 85, 85, 11, 11, 11, 90, 77, 73, 91, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 12, 11, 11, 11, 11, 92, 11, 11, 11, 11, 11, 11,
- 62, 11, 11, 11, 93, 63, 50, 94, 41, 56, 93, 54, 93, 50, 50, 95,
- 11, 68, 11, 80, 96, 68, 11, 80, 11, 52, 11, 11, 11, 25, 11, 11,
- 11, 11, 0, 0, 0, 82, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 52, 0, 11, 11, 11, 11, 11, 80, 11, 1, 43, 0, 0, 0, 0, 0,
- 11, 11, 11, 12, 0, 0, 0, 0,
+static RE_UINT8 re_xdigit_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 255, 3, 0, 0,
+ 192, 255, 0, 0, 255, 3, 255, 3, 0, 0, 192, 255, 0, 192, 255, 255,
+ 255, 255, 255, 255
};
-static RE_UINT8 re_nfkc_quick_check_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 2, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- 2, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0,
- 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1,
- 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
- 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 2, 2, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1,
- 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
- 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,
- 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
- 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 1, 1, 1,
-};
+RE_UINT32 re_get_xdigit(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* NFKC_Quick_Check: 2688 bytes. */
-
-RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_nfkc_quick_check_stage_1[f] << 6;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_nfkc_quick_check_stage_2[pos + f] << 3;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_nfkc_quick_check_stage_3[pos + f] << 3;
- value = re_nfkc_quick_check_stage_4[pos + code];
-
- return value;
-}
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
-/* Alphanumeric. */
+ v = re_xdigit_table_1[field_2];
+ v = re_xdigit_table_2[(v << 5) | field_1];
+ v = re_xdigit_table_3[(v << 2) | field_0];
-static RE_UINT8 re_alphanumeric_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
+ return (v >> offset) & 0x1;
+}
+
+/* XID_Continue. */
+static RE_UINT8 re_xid_continue_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 38, 39, 40, 9, 41, 9, 42, 43, 9, 9, 44, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 45, 12, 12, 12, 46, 47, 12,
+ 12, 12, 12, 48, 12, 12, 12, 12, 12, 12, 49, 9, 9, 9, 50, 9,
+ 12, 12, 12, 12, 51, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -16224,715 +25950,263 @@ static RE_UINT8 re_alphanumeric_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 52, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_alphanumeric_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 31, 31, 31, 95, 96, 97, 98, 31, 31, 31, 31, 31, 31, 31, 31,
- 99, 100, 101, 31, 31, 31, 31, 31, 102, 103, 31, 31, 31, 31, 104, 31,
- 31, 105, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_alphanumeric_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 3, 0, 0, 4, 5, 6, 7, 6, 7,
+static RE_UINT16 re_xid_continue_table_2[] = {
+ 0, 1, 2, 3, 0, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 7, 8, 6, 6, 6, 9, 10, 11, 6, 12,
+ 6, 6, 6, 6, 13, 6, 6, 6, 6, 14, 15, 6, 16, 17, 18, 19,
+ 20, 6, 6, 21, 6, 6, 22, 23, 24, 6, 25, 6, 6, 26, 6, 27,
+ 6, 28, 29, 30, 0, 31, 32, 11, 6, 6, 6, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 43, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 53, 6, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 0, 70, 71, 72, 0, 73, 74, 75, 76, 77, 78, 79, 0,
+ 6, 6, 80, 6, 81, 6, 82, 83, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 84, 6, 85, 86, 87, 6, 88, 6, 89, 90, 91, 6, 6, 92,
+ 67, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 93, 3, 6, 6, 94, 95, 96, 97, 98, 6, 6, 99, 100,
+ 101, 6, 6, 102, 6, 103, 6, 104, 105, 106, 107, 108, 6, 109, 110, 0,
+ 29, 6, 105, 111, 112, 113, 114, 0, 6, 6, 115, 116, 6, 6, 6, 97,
+ 6, 117, 118, 81, 119, 89, 120, 68, 6, 6, 6, 6, 6, 6, 6, 121,
+ 6, 6, 6, 6, 6, 6, 6, 6, 92, 6, 122, 81, 6, 123, 124, 125,
+ 0, 126, 127, 128, 129, 0, 129, 130, 131, 132, 133, 6, 134, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 135, 105, 6, 6, 6, 6, 136, 6, 82, 6, 137, 138, 139, 139, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 140, 141, 67, 6, 142, 67, 6, 83, 143, 14, 6, 6, 144, 6, 0, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 9, 10, 0,
- 0, 0, 0, 0, 11, 0, 0, 12, 13, 6, 14, 6, 6, 6, 6, 15,
- 6, 6, 6, 6, 6, 6, 6, 6, 16, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 2, 6, 17, 6, 6, 18, 0, 0, 19, 20, 6, 21, 22,
- 0, 3, 6, 6, 6, 23, 24, 6, 6, 6, 6, 6, 6, 25, 26, 27,
- 0, 6, 6, 6, 28, 6, 6, 6, 6, 6, 6, 9, 6, 6, 3, 29,
- 6, 30, 31, 0, 6, 18, 3, 0, 0, 0, 6, 32, 0, 33, 34, 6,
- 6, 6, 6, 35, 36, 37, 38, 2, 39, 40, 41, 42, 43, 44, 38, 45,
- 46, 40, 41, 47, 48, 49, 50, 51, 52, 14, 41, 53, 54, 55, 38, 56,
- 57, 40, 41, 53, 58, 59, 38, 60, 61, 62, 63, 24, 64, 65, 50, 0,
- 66, 67, 41, 68, 69, 70, 38, 0, 66, 67, 41, 71, 69, 72, 38, 73,
- 66, 67, 6, 74, 75, 76, 38, 77, 78, 79, 6, 80, 81, 82, 50, 83,
- 2, 6, 6, 3, 84, 1, 0, 0, 85, 6, 86, 87, 88, 89, 0, 0,
- 55, 0, 1, 0, 23, 6, 31, 2, 90, 23, 6, 31, 0, 0, 0, 0,
- 6, 6, 6, 91, 1, 6, 6, 6, 6, 92, 6, 6, 93, 6, 6, 94,
- 6, 6, 6, 6, 95, 96, 6, 6, 95, 6, 6, 97, 98, 7, 6, 6,
- 6, 98, 6, 6, 6, 3, 0, 0, 6, 0, 6, 6, 6, 6, 6, 99,
- 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 27, 6, 2, 3, 6, 6, 6, 6, 100, 18,
- 36, 101, 6, 101, 6, 101, 36, 102, 6, 6, 6, 38, 18, 103, 1, 0,
- 0, 1, 6, 6, 6, 6, 6, 18, 6, 6, 3, 6, 6, 6, 6, 51,
- 6, 104, 105, 18, 50, 6, 92, 106, 6, 6, 105, 6, 1, 1, 0, 0,
- 6, 105, 6, 6, 6, 104, 2, 106, 1, 1, 107, 0, 0, 0, 0, 0,
- 6, 6, 6, 108, 109, 1, 0, 0, 6, 6, 89, 6, 6, 6, 15, 9,
- 6, 6, 6, 110, 68, 6, 6, 92, 18, 6, 6, 74, 0, 0, 111, 112,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 113, 106,
- 6, 99, 6, 6, 99, 114, 6, 92, 6, 6, 6, 115, 116, 117, 31, 116,
- 0, 0, 0, 0, 0, 0, 0, 118, 0, 31, 0, 0, 0, 0, 0, 0,
- 119, 120, 121, 89, 122, 0, 6, 6, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 6, 6, 1, 0,
- 6, 6, 104, 6, 6, 104, 6, 6, 6, 6, 6, 6, 6, 6, 123, 83,
- 6, 6, 93, 6, 6, 6, 124, 0, 6, 110, 125, 125, 125, 125, 6, 6,
- 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 127, 0, 128, 129, 2, 6, 6, 6, 6, 130, 2, 6, 6, 6, 6, 94,
- 131, 6, 6, 2, 6, 6, 6, 6, 104, 0, 6, 3, 0, 0, 0, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 51, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 31, 0, 0, 0, 0, 6, 6, 92,
- 31, 6, 105, 0, 6, 6, 104, 132, 6, 6, 6, 6, 6, 6, 6, 0,
- 0, 113, 133, 6, 6, 6, 6, 6, 134, 6, 6, 6, 135, 0, 0, 113,
- 15, 6, 136, 0, 6, 6, 6, 101, 6, 6, 6, 6, 137, 1, 0, 138,
- 6, 6, 3, 6, 6, 22, 6, 31, 6, 6, 6, 139, 126, 1, 6, 104,
- 6, 6, 6, 110, 92, 1, 6, 79, 6, 6, 6, 104, 140, 141, 6, 142,
- 143, 144, 125, 6, 6, 94, 136, 6, 6, 6, 6, 6, 6, 6, 3, 1,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 101, 6, 145, 6, 6, 105,
- 6, 6, 6, 6, 6, 6, 92, 6, 6, 6, 6, 6, 6, 1, 0, 0,
- 110, 146, 41, 147, 148, 6, 6, 6, 6, 6, 6, 9, 0, 149, 6, 6,
- 6, 6, 6, 92, 0, 6, 6, 6, 6, 133, 6, 6, 136, 0, 0, 105,
- 0, 0, 0, 0, 0, 0, 0, 150, 6, 6, 6, 6, 6, 6, 6, 31,
- 0, 1, 2, 3, 2, 3, 50, 6, 6, 6, 6, 104, 151, 152, 0, 0,
- 35, 6, 7, 153, 92, 92, 0, 0, 6, 6, 6, 6, 6, 6, 6, 3,
- 0, 0, 0, 0, 6, 6, 6, 106, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 31, 6, 6, 6, 55, 0, 0,
- 6, 6, 28, 6, 3, 6, 6, 3, 6, 92, 6, 6, 154, 155, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 92, 1, 6, 6, 154, 6, 105,
- 6, 6, 136, 6, 6, 6, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 110, 6, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 156, 6, 6, 157, 6, 51, 6, 110, 6, 104, 0, 0, 0, 0, 6, 158,
- 6, 51, 6, 1, 0, 0, 0, 0, 6, 6, 6, 159, 0, 0, 0, 0,
- 160, 161, 6, 51, 0, 0, 6, 31, 6, 31, 0, 0, 23, 6, 106, 0,
- 6, 6, 6, 51, 6, 51, 6, 22, 6, 9, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 18, 0, 0, 0, 6, 6, 6, 22, 6, 6, 6, 22,
- 6, 6, 136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 31, 107, 6, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 110,
- 6, 6, 6, 6, 51, 0, 50, 0, 133, 6, 6, 18, 0, 6, 18, 1,
- 6, 6, 6, 162, 163, 6, 6, 164, 6, 6, 6, 6, 165, 166, 0, 0,
- 6, 14, 6, 167, 0, 0, 0, 0, 168, 19, 18, 6, 6, 6, 18, 1,
- 39, 40, 41, 53, 58, 169, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 170, 171, 0, 0, 6, 6, 6, 6, 172, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 173, 0, 174, 0, 0,
- 6, 6, 6, 104, 175, 1, 0, 0, 6, 6, 6, 176, 1, 0, 0, 0,
- 6, 74, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 18, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 1, 126,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 6, 6, 30, 177, 0,
- 6, 6, 6, 178, 0, 6, 6, 6, 6, 179, 0, 0, 6, 6, 6, 18,
- 41, 6, 6, 125, 55, 1, 0, 133, 6, 133, 23, 110, 0, 0, 0, 0,
- 180, 6, 6, 181, 182, 1, 183, 6, 104, 184, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 110,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 104, 0, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 18, 6, 104, 1, 0, 0, 0, 0, 0, 0, 6, 92, 0,
- 6, 6, 6, 0, 101, 1, 149, 185, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 21, 6, 6, 6, 124, 6, 0, 0, 0, 0, 186, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 136,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 22,
- 6, 104, 0, 0, 0, 22, 187, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 105,
- 6, 6, 6, 6, 6, 6, 3, 31, 18, 188, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 150, 6, 6, 6, 36, 189, 190, 108, 6, 6, 6,
- 191, 192, 6, 193, 194, 67, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 195, 6, 67, 94, 6, 94,
- 6, 150, 6, 150, 104, 6, 104, 6, 41, 6, 41, 6, 196, 6, 6, 6,
- 7, 134, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 31, 198, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 105, 1,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 106, 0, 0, 0,
- 6, 6, 6, 6, 199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 108, 6, 200, 201, 202, 203, 204, 205, 206, 105, 207, 105, 0, 0, 0, 0,
- 0, 0, 0, 6, 1, 6, 1, 6, 1, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 110, 0, 0,
- 6, 6, 6, 106, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 92, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 55, 0,
- 6, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_alphanumeric_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
- 195, 255, 3, 0, 31, 80, 32, 0, 223, 188, 64, 215, 251, 255, 191, 255,
- 3, 252, 127, 2, 255, 1, 255, 191, 182, 0, 255, 135, 7, 0, 255, 254,
- 255, 195, 239, 31, 254, 225, 255, 159, 0, 224, 48, 4, 255, 252, 255, 31,
- 223, 63, 240, 255, 248, 3, 255, 239, 255, 223, 225, 255, 207, 255, 239, 159,
- 249, 255, 255, 253, 197, 227, 159, 89, 128, 176, 3, 16, 238, 135, 109, 195,
- 135, 25, 2, 94, 192, 255, 63, 0, 238, 191, 237, 227, 191, 27, 1, 0,
- 0, 30, 238, 159, 159, 25, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199,
- 199, 29, 129, 0, 239, 223, 253, 255, 255, 227, 223, 29, 96, 7, 239, 227,
- 96, 64, 6, 0, 255, 231, 223, 93, 240, 128, 0, 252, 236, 255, 127, 252,
- 251, 47, 127, 128, 95, 255, 12, 0, 127, 32, 214, 247, 175, 255, 255, 59,
- 95, 32, 255, 243, 3, 255, 127, 249, 255, 63, 191, 32, 255, 247, 255, 61,
- 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 15, 0, 13, 0, 128, 16,
- 255, 127, 255, 15, 31, 0, 128, 0, 239, 255, 239, 15, 127, 0, 0, 222,
- 111, 4, 128, 255, 255, 170, 223, 95, 220, 31, 207, 15, 2, 128, 132, 252,
- 47, 62, 80, 189, 224, 67, 31, 120, 255, 128, 127, 127, 0, 128, 224, 0,
- 254, 3, 62, 31, 127, 224, 224, 255, 240, 143, 252, 255, 255, 249, 124, 0,
- 255, 0, 47, 0, 252, 232, 247, 255, 5, 0, 0, 56, 60, 0, 126, 126,
- 126, 0, 127, 248, 248, 224, 127, 95, 219, 255, 248, 255, 223, 255, 252, 252,
- 252, 28, 255, 183, 15, 255, 62, 0, 63, 253, 191, 145, 55, 0, 255, 192,
- 111, 240, 239, 254, 199, 255, 112, 0, 71, 0, 30, 0, 255, 23, 159, 64,
- 127, 189, 129, 224, 187, 7, 255, 131, 179, 0, 63, 127, 0, 63, 17, 0,
- 63, 1, 26, 0, 231, 127, 255, 32, 127, 251, 127, 180, 203, 0, 191, 253,
- 123, 1, 255, 224, 11, 0, 240, 0, 255, 67, 100, 222, 255, 235, 191, 231,
- 223, 223, 255, 123, 95, 252, 63, 255, 247, 207, 219, 7, 128, 63, 143, 8,
- 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 238, 251,
-};
-
-/* Alphanumeric: 2912 bytes. */
-
-RE_UINT32 re_get_alphanumeric(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_alphanumeric_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_alphanumeric_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_alphanumeric_stage_3[pos + f] << 4;
- pos += code;
- value = (re_alphanumeric_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Any. */
-
-RE_UINT32 re_get_any(RE_UINT32 ch) {
- return 1;
-}
-
-/* Blank. */
-
-static RE_UINT8 re_blank_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_blank_stage_2[] = {
- 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_blank_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
- 3, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_blank_stage_4[] = {
- 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 78,
+ 6, 6, 6, 6, 145, 0, 24, 81, 6, 6, 6, 6, 6, 6, 6, 6,
+ 146, 147, 6, 148, 6, 6, 6, 26, 149, 150, 6, 6, 151, 6, 152, 153,
+ 6, 154, 6, 97, 6, 6, 155, 156, 6, 157, 97, 78, 6, 6, 158, 105,
+ 6, 138, 159, 160, 6, 6, 161, 162, 163, 164, 83, 80, 6, 6, 6, 165,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 166, 167, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 157, 6, 6, 168, 0, 169, 170, 171, 6, 6, 26, 172, 6,
+ 6, 6, 81, 173, 6, 6, 6, 6, 6, 81, 24, 6, 174, 6, 175, 1,
+ 91, 176, 177, 178, 6, 6, 6, 78, 1, 2, 3, 107, 6, 105, 179, 0,
+ 180, 181, 182, 0, 6, 6, 6, 68, 0, 0, 6, 96, 0, 0, 0, 183,
+ 0, 0, 0, 0, 78, 6, 184, 114, 6, 185, 103, 68, 81, 6, 186, 0,
+ 6, 6, 6, 6, 81, 80, 187, 29, 6, 188, 6, 189, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 138, 104, 175, 0, 0, 0, 0,
+ 190, 191, 104, 138, 105, 0, 0, 192, 104, 168, 0, 0, 6, 193, 0, 0,
+ 194, 195, 0, 78, 78, 0, 75, 196, 6, 104, 104, 197, 26, 0, 0, 0,
+ 6, 6, 134, 0, 6, 197, 6, 197, 6, 198, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 199, 0, 0, 78, 200, 184, 0, 0, 24, 201, 138,
+ 6, 6, 196, 202, 6, 68, 24, 203, 6, 31, 204, 205, 6, 6, 206, 0,
+ 207, 208, 0, 0, 209, 119, 6, 210, 34, 211, 212, 213, 0, 0, 0, 0,
+ 6, 6, 214, 215, 6, 6, 216, 0, 0, 0, 0, 0, 6, 217, 218, 0,
+ 6, 6, 219, 0, 6, 102, 100, 0, 89, 115, 0, 0, 0, 0, 0, 0,
+ 6, 68, 0, 0, 0, 6, 6, 220, 221, 222, 223, 0, 0, 224, 225, 226,
+ 6, 105, 200, 6, 227, 0, 6, 102, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 5, 229, 230, 174, 231, 0, 0, 232, 233, 198, 234, 235, 100, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 236, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 168, 0, 0, 0,
+ 6, 6, 6, 144, 6, 6, 6, 6, 6, 6, 189, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255, 7, 0, 0, 0, 128, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
-};
-
-/* Blank: 218 bytes. */
-
-RE_UINT32 re_get_blank(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_blank_stage_1[f] << 5;
- f = code >> 10;
- code ^= f << 10;
- pos = (RE_UINT32)re_blank_stage_2[pos + f] << 3;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_blank_stage_3[pos + f] << 7;
- pos += code;
- value = (re_blank_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Graph. */
-
-static RE_UINT8 re_graph_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 7, 7, 7, 14,
- 15, 16, 17, 18, 19, 13, 20, 13, 21, 13, 13, 13, 13, 22, 7, 7,
- 23, 24, 13, 13, 13, 13, 25, 26, 13, 13, 27, 28, 29, 30, 31, 32,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 33, 7, 34, 35, 7, 36, 7, 7, 7, 37, 13, 38,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 39, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40,
-};
-
-static RE_UINT8 re_graph_stage_2[] = {
- 0, 1, 2, 2, 2, 2, 3, 4, 2, 2, 5, 6, 7, 2, 8, 9,
- 10, 11, 2, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 2, 25, 2, 2, 26, 27, 28, 29, 2, 2, 2, 2, 2, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 2, 43, 2, 2, 44, 45,
- 46, 47, 2, 48, 2, 2, 2, 2, 49, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 50, 51, 52, 53, 54, 55, 56, 57, 2, 58,
- 59, 60, 61, 62, 63, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 64, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 65,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 66, 2, 2, 67, 68, 2, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78,
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 80, 81, 82, 83, 2, 2, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 79, 94, 95, 96, 2, 97, 98, 79, 2, 2, 99, 79,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 79, 111, 79, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 79, 121, 122, 79, 123, 124, 125, 126, 79,
- 127, 128, 79, 129, 130, 131, 79, 79, 132, 133, 134, 135, 79, 136, 79, 137,
- 2, 2, 2, 2, 2, 2, 2, 138, 139, 2, 140, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 2, 2, 2, 2, 141, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 2, 2, 2, 2, 142, 79, 79, 79,
- 2, 2, 2, 2, 143, 144, 145, 146, 79, 79, 79, 79, 147, 148, 149, 150,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 68,
- 2, 2, 2, 2, 2, 151, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 152, 2, 2, 153, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 154, 155, 79, 79, 79, 79, 79, 79,
- 2, 156, 157, 158, 159, 160, 161, 79, 162, 163, 164, 2, 2, 165, 2, 166,
- 2, 2, 2, 2, 2, 167, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 168, 79, 169, 79, 79, 170, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 171, 172, 79, 79, 79, 79, 79, 173, 174, 175, 79, 176, 177, 79, 79,
- 178, 179, 180, 181, 182, 79, 2, 2, 2, 2, 2, 2, 2, 183, 184, 185,
- 186, 187, 188, 189, 190, 191, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 192, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 193, 2,
- 194, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 195, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 196, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 197, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 198, 79, 2, 65, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199,
-};
-
-static RE_UINT8 re_graph_stage_3[] = {
- 0, 0, 1, 2, 2, 2, 2, 3, 0, 0, 1, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,
- 5, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 7, 2, 2,
- 8, 1, 2, 2, 9, 2, 10, 11, 2, 12, 2, 2, 2, 2, 2, 2,
- 13, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 8,
- 2, 2, 15, 3, 2, 16, 17, 0, 0, 0, 2, 18, 0, 19, 2, 2,
- 20, 21, 22, 23, 24, 25, 26, 3, 27, 21, 22, 28, 29, 30, 31, 32,
- 33, 6, 22, 34, 35, 36, 26, 37, 38, 21, 22, 34, 39, 40, 26, 9,
- 41, 42, 43, 44, 45, 46, 31, 17, 12, 47, 22, 48, 49, 50, 26, 51,
- 12, 47, 22, 52, 49, 53, 26, 54, 55, 47, 2, 2, 56, 57, 26, 2,
- 58, 59, 2, 60, 61, 62, 31, 63, 1, 2, 2, 10, 2, 64, 0, 0,
- 65, 2, 66, 15, 67, 68, 0, 0, 2, 2, 2, 2, 69, 2, 70, 1,
- 2, 69, 2, 12, 12, 17, 0, 0, 2, 2, 2, 2, 71, 2, 2, 2,
- 2, 2, 2, 2, 72, 73, 2, 2, 72, 2, 2, 74, 75, 76, 2, 2,
- 2, 75, 2, 2, 2, 8, 2, 70, 2, 77, 2, 2, 2, 2, 2, 78,
- 1, 70, 2, 2, 2, 2, 2, 79, 12, 11, 2, 32, 2, 80, 12, 81,
- 2, 2, 2, 2, 2, 15, 77, 77, 3, 77, 2, 2, 2, 2, 2, 79,
- 2, 2, 17, 2, 2, 2, 2, 82, 2, 3, 64, 64, 83, 2, 15, 11,
- 2, 2, 64, 2, 77, 84, 2, 2, 2, 85, 2, 2, 2, 3, 2, 86,
- 77, 77, 15, 3, 0, 0, 0, 0, 2, 2, 2, 2, 64, 2, 2, 70,
- 2, 2, 2, 2, 2, 2, 2, 87, 2, 2, 2, 88, 48, 2, 2, 2,
- 79, 2, 2, 8, 9, 2, 2, 17, 2, 2, 2, 2, 2, 2, 2, 89,
- 2, 78, 2, 2, 78, 90, 2, 15, 2, 2, 2, 91, 91, 92, 2, 93,
- 94, 2, 95, 2, 2, 3, 91, 96, 3, 70, 2, 2, 0, 2, 2, 36,
- 64, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, 0, 17, 0, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 26, 2, 97, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 98,
- 2, 2, 71, 2, 2, 2, 99, 100, 2, 32, 101, 101, 101, 101, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 0, 2, 89, 2, 2, 2, 2, 2, 80,
- 2, 2, 2, 2, 2, 82, 0, 64, 1, 2, 2, 2, 1, 2, 2, 2,
- 2, 7, 2, 2, 2, 2, 2, 2, 102, 2, 2, 1, 2, 2, 2, 2,
- 3, 2, 2, 17, 2, 2, 80, 2, 2, 3, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,
- 70, 2, 2, 2, 32, 2, 2, 2, 2, 2, 64, 0, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2, 103, 0, 0, 51,
- 2, 2, 64, 77, 2, 2, 2, 9, 2, 2, 2, 2, 104, 77, 2, 2,
- 2, 2, 2, 2, 2, 105, 2, 70, 2, 2, 2, 2, 13, 44, 2, 3,
- 2, 2, 2, 32, 15, 68, 2, 2, 2, 2, 2, 2, 106, 94, 2, 32,
- 107, 108, 101, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 15, 77,
- 2, 2, 80, 2, 109, 2, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2, 2, 77, 0, 0,
- 32, 110, 2, 111, 112, 2, 2, 2, 2, 2, 2, 2, 14, 19, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 113, 2, 2, 9, 0, 0, 15,
- 2, 77, 2, 2, 2, 114, 115, 91, 2, 2, 2, 2, 2, 2, 2, 86,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 116, 117, 101, 118,
- 119, 2, 76, 120, 15, 15, 0, 0, 2, 2, 2, 2, 2, 2, 2, 17,
- 121, 2, 2, 122, 2, 2, 2, 2, 3, 64, 36, 0, 0, 2, 2, 15,
- 2, 70, 2, 2, 2, 36, 2, 64, 2, 2, 123, 2, 17, 2, 2, 17,
- 2, 13, 2, 2, 124, 82, 0, 0, 2, 15, 77, 2, 2, 124, 2, 64,
- 2, 2, 9, 2, 2, 2, 105, 0, 2, 2, 2, 32, 2, 82, 9, 0,
- 125, 2, 2, 126, 2, 127, 2, 2, 2, 3, 51, 0, 0, 0, 2, 128,
- 2, 129, 2, 130, 0, 0, 0, 0, 2, 2, 2, 131, 2, 113, 2, 2,
- 132, 133, 2, 134, 79, 79, 2, 2, 2, 2, 0, 0, 2, 2, 109, 32,
- 2, 2, 2, 135, 2, 97, 2, 136, 2, 137, 138, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 79, 0, 0, 0, 2, 2, 2, 106, 2, 2, 2, 139,
- 2, 2, 9, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,
- 2, 2, 9, 2, 2, 77, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32,
- 2, 2, 2, 2, 15, 113, 2, 140, 2, 2, 2, 2, 141, 2, 79, 77,
- 2, 2, 2, 91, 32, 2, 2, 32, 2, 2, 2, 2, 15, 2, 1, 11,
- 2, 6, 2, 3, 0, 0, 0, 0, 142, 13, 77, 2, 2, 2, 17, 77,
- 20, 21, 22, 143, 39, 144, 145, 11, 2, 2, 2, 2, 2, 146, 0, 0,
- 2, 2, 2, 2, 9, 77, 0, 0, 2, 2, 2, 97, 2, 15, 0, 0,
- 2, 2, 2, 2, 11, 77, 70, 0, 2, 2, 2, 79, 77, 0, 0, 0,
- 2, 8, 64, 2, 0, 0, 0, 0, 2, 2, 2, 64, 0, 0, 0, 0,
- 0, 0, 2, 2, 2, 2, 2, 147, 0, 0, 4, 2, 2, 4, 11, 0,
- 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 106, 0, 2, 2, 2, 79,
- 22, 2, 2, 76, 82, 2, 70, 2, 2, 113, 69, 32, 0, 0, 0, 0,
- 148, 2, 2, 149, 9, 77, 150, 2, 3, 151, 77, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 79, 0, 0, 0, 0, 2, 2, 2, 152,
- 2, 77, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 11,
- 2, 2, 2, 2, 80, 0, 0, 0, 2, 2, 3, 79, 0, 0, 0, 0,
- 2, 2, 2, 2, 32, 0, 0, 0, 2, 2, 2, 79, 2, 3, 44, 0,
- 0, 0, 0, 0, 0, 2, 15, 82, 2, 2, 2, 2, 82, 89, 6, 153,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
- 2, 17, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 10, 2, 2, 2,
- 99, 2, 0, 0, 0, 0, 80, 0, 2, 2, 2, 2, 2, 2, 2, 106,
- 2, 3, 0, 0, 0, 106, 154, 2, 2, 2, 2, 2, 2, 2, 2, 64,
- 2, 2, 2, 2, 2, 2, 17, 70, 79, 68, 80, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 7, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 79, 0, 2, 2, 2, 2, 82, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 80, 2, 2, 2, 2, 2, 32, 2, 79,
- 2, 2, 2, 2, 2, 91, 2, 2, 2, 12, 155, 146, 156, 2, 2, 2,
- 157, 158, 2, 159, 160, 47, 2, 2, 2, 2, 97, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 85, 2, 2, 2, 64, 94, 1, 0, 0, 0, 0, 0,
- 76, 161, 162, 0, 0, 0, 0, 0, 2, 2, 70, 15, 44, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 130, 2, 2, 2, 2, 163, 32, 0, 0,
- 2, 2, 2, 2, 64, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 2, 2, 2, 11, 0, 0, 0, 0, 1, 2, 2, 15, 0, 0, 0, 0,
- 156, 2, 164, 165, 166, 167, 168, 169, 89, 64, 170, 64, 0, 0, 0, 14,
- 2, 2, 64, 2, 2, 2, 2, 2, 2, 80, 3, 1, 1, 1, 2, 82,
- 70, 2, 2, 2, 2, 2, 70, 2, 2, 2, 70, 0, 0, 0, 31, 2,
- 106, 2, 2, 64, 79, 14, 82, 0, 2, 2, 2, 2, 2, 82, 70, 17,
- 2, 2, 2, 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 79, 64, 0,
- 64, 2, 2, 2, 9, 77, 2, 2, 9, 2, 15, 0, 0, 0, 0, 0,
- 119, 2, 2, 2, 2, 2, 2, 171, 2, 2, 172, 2, 8, 2, 2, 2,
- 2, 2, 2, 2, 2, 80, 15, 173, 106, 82, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 32, 0, 0, 2, 2, 2, 11, 2, 2, 2, 2,
- 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 36, 0, 2, 15, 0, 0, 0, 0, 0, 0,
- 174, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15,
-};
-
-static RE_UINT8 re_graph_stage_4[] = {
- 0, 0, 254, 255, 255, 255, 255, 127, 255, 252, 240, 215, 251, 255, 127, 254,
- 255, 231, 255, 0, 255, 135, 31, 0, 255, 223, 255, 191, 3, 0, 255, 63,
- 255, 79, 255, 7, 223, 63, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243,
- 159, 121, 128, 176, 207, 255, 238, 135, 109, 211, 135, 57, 2, 94, 192, 255,
- 127, 0, 238, 191, 237, 243, 191, 59, 1, 0, 3, 254, 238, 159, 159, 57,
- 192, 176, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 253, 255,
- 255, 227, 223, 61, 96, 7, 128, 255, 239, 243, 96, 64, 6, 0, 239, 223,
- 223, 253, 240, 255, 236, 255, 127, 252, 251, 47, 127, 132, 95, 255, 28, 0,
- 255, 15, 214, 247, 175, 255, 95, 63, 255, 243, 255, 254, 255, 31, 191, 32,
- 255, 61, 127, 61, 61, 127, 61, 255, 127, 255, 255, 3, 63, 63, 255, 1,
- 15, 0, 13, 0, 63, 0, 241, 255, 255, 199, 255, 207, 255, 159, 15, 240,
- 255, 248, 255, 251, 255, 170, 223, 255, 207, 239, 220, 127, 0, 248, 255, 124,
- 243, 255, 63, 255, 15, 254, 255, 128, 1, 128, 127, 127, 224, 255, 124, 0,
- 63, 192, 15, 128, 7, 0, 126, 126, 126, 0, 127, 248, 248, 224, 127, 95,
- 219, 255, 252, 255, 247, 255, 127, 15, 252, 252, 252, 28, 0, 62, 255, 239,
- 255, 183, 135, 255, 143, 255, 15, 224, 15, 255, 63, 253, 191, 145, 191, 255,
- 55, 248, 255, 143, 255, 131, 255, 240, 111, 240, 239, 254, 63, 135, 63, 254,
- 7, 255, 3, 30, 0, 254, 7, 252, 0, 128, 3, 32, 127, 189, 237, 251,
- 129, 224, 207, 31, 255, 235, 7, 128, 127, 251, 127, 180, 191, 253, 251, 1,
- 3, 128, 255, 224, 240, 0, 100, 222, 239, 255, 191, 231, 223, 223, 255, 123,
- 95, 252, 255, 249, 219, 7, 159, 255, 150, 254, 247, 10, 132, 234, 150, 170,
- 150, 247, 247, 94, 238, 251, 123, 252, 231, 199, 15, 7, 2, 0,
-};
-
-/* Graph: 3150 bytes. */
-
-RE_UINT32 re_get_graph(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 11;
- code = ch ^ (f << 11);
- pos = (RE_UINT32)re_graph_stage_1[f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_graph_stage_2[pos + f] << 3;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_graph_stage_3[pos + f] << 4;
- pos += code;
- value = (re_graph_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Print. */
-
-static RE_UINT8 re_print_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 5, 9,
- 10, 11, 12, 13, 14, 15, 16, 5, 17, 15, 15, 18, 15, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 27, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 28,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 28,
-};
-
-static RE_UINT8 re_print_stage_2[] = {
- 0, 1, 1, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 1, 15, 16, 1, 1, 17, 18, 19, 20, 21, 22, 23, 24, 1, 25,
- 26, 27, 1, 1, 28, 1, 1, 1, 1, 1, 1, 29, 30, 31, 32, 33,
- 34, 35, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38,
- 1, 1, 1, 1, 39, 1, 40, 41, 42, 43, 44, 45, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 46, 47, 47, 47, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 47, 79, 80, 81, 82,
- 1, 1, 1, 83, 84, 85, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 86, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 1, 1, 87, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 88, 89, 47, 47, 90, 91,
- 1, 1, 1, 1, 1, 1, 1, 92, 1, 1, 93, 47, 47, 47, 47, 47,
- 1, 94, 95, 47, 47, 47, 47, 47, 47, 47, 47, 47, 96, 47, 47, 47,
- 97, 98, 99, 100, 101, 102, 103, 104, 1, 1, 105, 47, 47, 47, 47, 47,
- 106, 107, 108, 47, 47, 47, 47, 47, 109, 110, 47, 47, 111, 112, 113, 47,
- 114, 115, 116, 1, 1, 1, 117, 118, 119, 120, 121, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 1, 1, 122, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 123, 124, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 125, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 126, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 127, 47, 47, 47, 47, 47,
- 128, 38, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 129,
-};
-
-static RE_UINT8 re_print_stage_3[] = {
- 0, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 3, 4, 5, 1, 1, 1, 6, 7, 1, 8, 1, 9, 10,
- 11, 1, 1, 1, 1, 1, 1, 1, 12, 1, 13, 1, 1, 14, 1, 15,
- 1, 16, 17, 18, 0, 19, 20, 1, 1, 1, 1, 1, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 30, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 40, 44, 45, 46, 47, 1, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 0, 57, 58, 59, 0, 1, 1, 60, 61, 62, 11, 63, 0,
- 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 65, 1, 66, 67, 68, 1,
- 69, 1, 15, 70, 71, 1, 1, 72, 1, 1, 1, 1, 70, 1, 1, 73,
- 74, 75, 76, 77, 1, 1, 78, 79, 80, 1, 1, 73, 1, 81, 1, 82,
- 2, 83, 84, 85, 1, 86, 87, 1, 88, 1, 2, 89, 79, 16, 0, 0,
- 1, 1, 86, 70, 1, 1, 1, 90, 1, 91, 92, 1, 93, 15, 9, 94,
- 1, 1, 1, 1, 1, 1, 1, 95, 72, 1, 96, 78, 1, 97, 98, 99,
- 1, 100, 1, 101, 102, 1, 103, 104, 1, 1, 1, 1, 86, 1, 1, 1,
- 1, 105, 18, 1, 1, 1, 1, 1, 1, 1, 1, 106, 107, 1, 1, 1,
- 1, 108, 2, 1, 1, 1, 1, 109, 1, 64, 1, 110, 75, 111, 111, 1,
- 1, 1, 112, 0, 95, 1, 1, 76, 1, 1, 1, 1, 1, 1, 82, 113,
- 1, 1, 54, 1, 7, 1, 1, 1, 114, 6, 1, 1, 108, 94, 1, 115,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 112, 1, 1, 1, 1, 116, 1, 117, 1,
- 1, 118, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 120, 121,
- 1, 122, 1, 119, 1, 1, 123, 1, 1, 1, 124, 70, 1, 1, 125, 2,
- 1, 75, 126, 1, 1, 1, 127, 75, 128, 129, 1, 9, 1, 1, 1, 130,
- 1, 1, 1, 1, 1, 115, 131, 56, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 132, 1, 1, 71, 0, 133, 134, 135, 1, 1, 1, 136, 1,
- 1, 1, 103, 1, 137, 1, 138, 139, 71, 1, 140, 141, 1, 1, 1, 89,
- 54, 1, 1, 1, 1, 2, 142, 143, 144, 145, 146, 0, 1, 1, 1, 94,
- 147, 148, 1, 1, 149, 150, 103, 78, 0, 0, 0, 0, 70, 1, 104, 56,
- 1, 151, 81, 94, 152, 1, 153, 0, 1, 1, 1, 1, 78, 154, 155, 56,
- 1, 9, 1, 156, 0, 0, 0, 0, 1, 75, 82, 138, 0, 0, 0, 0,
- 157, 158, 159, 1, 2, 160, 0, 161, 162, 163, 0, 0, 1, 164, 137, 1,
- 165, 166, 167, 1, 1, 0, 1, 168, 1, 169, 107, 170, 171, 172, 0, 0,
- 1, 1, 173, 0, 1, 174, 1, 175, 1, 176, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 1, 9, 71, 0, 0, 0, 0, 75,
- 1, 1, 177, 178, 1, 1, 179, 180, 1, 97, 117, 75, 1, 1, 132, 181,
- 182, 2, 0, 0, 183, 154, 1, 184, 21, 185, 186, 187, 0, 0, 0, 0,
- 1, 1, 188, 0, 1, 1, 176, 0, 0, 0, 0, 0, 1, 107, 78, 0,
- 1, 1, 189, 190, 1, 73, 191, 0, 15, 86, 0, 0, 0, 0, 0, 0,
- 1, 56, 0, 0, 0, 1, 1, 192, 0, 0, 0, 0, 0, 100, 3, 193,
- 1, 1, 9, 1, 1, 194, 1, 73, 195, 196, 197, 116, 137, 198, 0, 0,
- 199, 200, 176, 201, 202, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
- 0, 0, 0, 0, 0, 0, 1, 203, 1, 1, 1, 1, 71, 0, 0, 0,
- 1, 1, 1, 204, 1, 1, 1, 1, 1, 1, 205, 0, 0, 0, 0, 0,
- 1, 206, 0, 0, 0, 0, 0, 0, 1, 1, 105, 0, 0, 0, 0, 0,
- 1, 73, 2, 207, 0, 0, 103, 208, 1, 1, 209, 210, 112, 0, 0, 0,
- 0, 0, 1, 1, 94, 0, 0, 0, 1, 1, 211, 1, 212, 0, 0, 205,
- 1, 1, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 1, 174,
- 2, 0, 213, 214, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56,
- 1, 1, 1, 215, 216, 205, 0, 0, 1, 1, 1, 1, 1, 1, 1, 82,
- 1, 217, 1, 1, 1, 1, 1, 173, 1, 1, 218, 0, 0, 0, 0, 76,
- 1, 1, 75, 73, 0, 0, 0, 0, 1, 1, 97, 1, 11, 219, 220, 1,
- 221, 222, 223, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 1,
- 1, 1, 1, 1, 1, 1, 225, 1, 1, 1, 1, 1, 226, 227, 0, 0,
- 228, 229, 0, 0, 0, 0, 0, 0, 1, 230, 207, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 163, 1, 1, 1, 1, 1, 1, 231, 0,
- 1, 1, 232, 0, 0, 0, 0, 0, 0, 0, 0, 233, 1, 234, 0, 0,
- 54, 78, 0, 0, 0, 0, 0, 0, 220, 235, 236, 237, 238, 239, 0, 240,
- 1, 86, 1, 1, 76, 241, 242, 82, 116, 1, 1, 116, 1, 190, 0, 243,
- 244, 56, 245, 218, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 82, 246,
- 1, 1, 1, 76, 1, 1, 73, 118, 86, 1, 176, 1, 9, 247, 0, 0,
- 144, 1, 1, 248, 1, 249, 13, 1, 1, 1, 76, 250, 251, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 75, 0, 1, 234, 1, 1, 1, 1, 1, 1,
- 78, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 150, 78, 0, 0, 0, 0, 0, 0, 0,
- 253, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 78,
-};
-
-static RE_UINT8 re_print_stage_4[] = {
- 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 252,
- 240, 215, 255, 255, 251, 255, 255, 255, 255, 255, 254, 255, 255, 255, 127, 254,
- 255, 231, 254, 255, 255, 0, 255, 255, 255, 135, 31, 0, 255, 255, 255, 223,
- 255, 191, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 255, 231,
- 255, 63, 255, 127, 255, 255, 255, 79, 255, 7, 0, 0, 255, 255, 223, 63,
- 0, 0, 248, 255, 239, 159, 249, 255, 255, 253, 197, 243, 159, 121, 128, 176,
- 207, 255, 255, 127, 238, 135, 249, 255, 255, 253, 109, 211, 135, 57, 2, 94,
- 192, 255, 127, 0, 238, 191, 251, 255, 255, 253, 237, 243, 191, 59, 1, 0,
- 207, 255, 3, 254, 238, 159, 249, 255, 159, 57, 192, 176, 207, 255, 255, 0,
- 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0, 192, 255, 255, 7,
- 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7, 207, 255, 128, 255,
- 255, 253, 239, 243, 223, 61, 96, 64, 207, 255, 6, 0, 239, 223, 253, 255,
- 223, 253, 240, 255, 207, 255, 255, 255, 236, 255, 127, 252, 255, 255, 251, 47,
- 127, 132, 95, 255, 192, 255, 28, 0, 254, 255, 255, 255, 255, 255, 255, 135,
- 255, 255, 255, 15, 214, 247, 255, 255, 175, 255, 255, 63, 95, 63, 255, 243,
- 255, 254, 255, 255, 255, 31, 254, 255, 255, 255, 255, 254, 255, 223, 255, 7,
- 191, 32, 255, 255, 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127,
- 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 31, 255, 255, 255, 3,
- 255, 255, 63, 63, 255, 255, 255, 1, 255, 223, 31, 0, 255, 255, 127, 0,
- 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 255, 63, 255, 3, 255, 3,
- 255, 127, 255, 3, 255, 7, 255, 255, 255, 255, 63, 0, 255, 15, 255, 15,
- 241, 255, 255, 255, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 199,
- 255, 255, 255, 207, 255, 255, 255, 159, 255, 255, 15, 240, 255, 255, 255, 248,
- 255, 227, 255, 255, 255, 1, 255, 255, 255, 255, 255, 7, 255, 255, 255, 251,
- 63, 63, 255, 170, 255, 255, 223, 255, 223, 255, 207, 239, 255, 255, 220, 127,
- 255, 252, 255, 255, 223, 255, 243, 255, 255, 127, 255, 31, 0, 0, 255, 255,
- 255, 255, 1, 0, 127, 0, 0, 0, 255, 255, 207, 255, 255, 255, 63, 255,
- 255, 127, 255, 255, 255, 255, 15, 254, 255, 128, 1, 128, 127, 127, 127, 127,
- 255, 255, 0, 0, 0, 0, 255, 15, 224, 255, 255, 255, 15, 0, 255, 255,
- 255, 31, 255, 255, 127, 0, 255, 255, 255, 15, 0, 0, 255, 255, 255, 0,
- 124, 0, 0, 0, 0, 0, 128, 255, 255, 15, 255, 3, 63, 192, 255, 3,
- 255, 255, 15, 128, 255, 191, 255, 195, 255, 63, 255, 243, 7, 0, 0, 248,
- 126, 126, 126, 0, 127, 127, 255, 255, 255, 63, 255, 3, 127, 248, 255, 255,
- 255, 63, 255, 255, 127, 0, 248, 224, 255, 255, 127, 95, 219, 255, 255, 255,
- 3, 0, 248, 255, 255, 255, 252, 255, 255, 0, 0, 0, 0, 0, 255, 63,
- 255, 255, 247, 255, 127, 15, 223, 255, 252, 252, 252, 28, 127, 127, 0, 62,
- 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 135, 255, 255, 255,
- 255, 255, 143, 255, 255, 127, 255, 15, 1, 0, 0, 0, 15, 224, 255, 255,
- 255, 255, 255, 191, 15, 255, 63, 0, 255, 3, 255, 255, 255, 255, 15, 255,
- 15, 128, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 191, 255,
- 128, 255, 0, 0, 255, 255, 55, 248, 255, 255, 255, 143, 255, 255, 255, 131,
- 255, 255, 255, 240, 111, 240, 239, 254, 255, 255, 63, 135, 255, 1, 255, 1,
- 127, 248, 127, 0, 255, 255, 63, 254, 255, 255, 7, 255, 255, 255, 3, 30,
- 0, 254, 0, 0, 255, 1, 0, 0, 255, 255, 7, 0, 255, 255, 7, 252,
- 255, 0, 255, 3, 255, 63, 252, 255, 255, 255, 0, 128, 3, 32, 255, 255,
- 255, 1, 255, 3, 254, 255, 31, 0, 255, 255, 251, 255, 127, 189, 255, 191,
- 255, 7, 255, 3, 255, 253, 237, 251, 159, 57, 129, 224, 207, 31, 31, 0,
- 255, 255, 255, 235, 31, 0, 255, 3, 255, 31, 0, 0, 255, 3, 0, 0,
- 255, 255, 7, 128, 31, 0, 0, 0, 7, 0, 0, 0, 255, 253, 255, 255,
- 255, 255, 127, 255, 63, 0, 255, 255, 255, 254, 127, 0, 127, 251, 255, 255,
- 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1, 255, 255, 3, 128,
- 255, 127, 31, 0, 15, 0, 0, 0, 255, 127, 255, 1, 255, 195, 0, 0,
- 255, 63, 63, 0, 63, 0, 255, 251, 251, 255, 255, 224, 255, 135, 255, 255,
- 255, 128, 255, 255, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
- 255, 1, 255, 243, 127, 254, 255, 255, 63, 0, 0, 0, 100, 222, 255, 235,
- 239, 255, 255, 255, 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255,
- 63, 255, 255, 255, 255, 207, 255, 255, 255, 15, 0, 248, 254, 255, 0, 0,
- 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63, 159, 255, 127, 0,
- 255, 15, 255, 195, 0, 0, 254, 255, 255, 255, 31, 0, 150, 254, 247, 10,
- 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
- 0, 0, 3, 0, 255, 127, 254, 255, 254, 255, 254, 255, 192, 255, 255, 255,
- 7, 0, 255, 255, 255, 1, 3, 0, 255, 31, 255, 7, 255, 63, 0, 0,
- 255, 255, 123, 252, 231, 199, 255, 255, 255, 63, 15, 7, 7, 0, 63, 0,
- 3, 0, 255, 255, 2, 0, 0, 0,
+ 6, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 102, 105, 100, 0, 0, 24, 108, 6, 138, 223, 237, 91, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 238, 6, 239, 0, 0, 240,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 117,
+ 6, 6, 6, 6, 6, 6, 104, 0, 134, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 105, 0, 241, 204, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0,
+ 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 31, 6, 248, 249, 250, 6, 251, 252, 253, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 254, 255, 83, 31, 31, 135, 135, 228, 228, 256, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 257, 6, 258, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 261, 262, 0, 0, 0, 0, 0, 0, 6, 263, 264, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 265, 0, 6, 6, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 250, 266, 267, 268, 269, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 81, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 96, 6, 6, 6, 6, 6, 6,
+ 81, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 271, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 114,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 30, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 91,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_xid_continue_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7,
+ 0, 4, 160, 4, 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0,
+ 31, 80, 0, 0, 255, 255, 223, 184, 192, 215, 255, 255, 251, 255, 255, 255,
+ 255, 255, 191, 255, 251, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
+ 255, 1, 254, 255, 255, 255, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
+ 0, 0, 255, 7, 255, 195, 255, 255, 255, 255, 239, 159, 255, 253, 255, 159,
+ 0, 0, 255, 255, 255, 231, 255, 255, 255, 255, 3, 0, 255, 255, 63, 36,
+ 255, 63, 0, 0, 255, 255, 255, 15, 255, 7, 0, 0, 255, 255, 223, 255,
+ 255, 0, 248, 255, 207, 255, 254, 255, 239, 159, 249, 255, 255, 253, 197, 243,
+ 159, 121, 128, 176, 207, 255, 3, 80, 238, 135, 249, 255, 255, 253, 109, 211,
+ 135, 57, 2, 94, 192, 255, 63, 0, 238, 191, 251, 255, 255, 253, 237, 243,
+ 191, 59, 1, 0, 207, 255, 0, 254, 238, 159, 249, 255, 159, 57, 224, 176,
+ 207, 255, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
+ 192, 255, 0, 0, 255, 223, 253, 255, 255, 253, 255, 227, 223, 61, 96, 7,
+ 207, 255, 0, 0, 239, 223, 253, 255, 255, 253, 239, 243, 223, 61, 96, 64,
+ 207, 255, 6, 0, 223, 125, 240, 128, 207, 255, 0, 252, 238, 255, 127, 252,
+ 255, 255, 251, 47, 127, 132, 95, 255, 192, 255, 12, 0, 254, 255, 255, 255,
+ 255, 255, 255, 7, 255, 127, 255, 3, 214, 247, 255, 255, 175, 255, 255, 63,
+ 95, 63, 255, 243, 1, 0, 0, 3, 255, 3, 160, 194, 255, 254, 255, 255,
+ 255, 31, 254, 255, 223, 255, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0,
+ 255, 3, 255, 255, 255, 255, 255, 63, 191, 32, 255, 255, 255, 255, 255, 247,
+ 255, 61, 127, 61, 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255,
+ 255, 255, 61, 255, 255, 255, 255, 231, 0, 254, 3, 0, 255, 255, 0, 0,
+ 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1, 255, 223, 31, 0,
+ 255, 255, 31, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 143, 48,
+ 255, 3, 0, 0, 0, 56, 255, 3, 255, 255, 255, 1, 255, 7, 255, 255,
+ 255, 255, 63, 0, 255, 255, 255, 127, 255, 15, 255, 15, 192, 255, 255, 255,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 255, 7, 255, 255, 255, 159,
+ 255, 3, 255, 3, 128, 0, 255, 191, 1, 0, 0, 0, 255, 15, 255, 3,
+ 0, 248, 15, 0, 255, 255, 255, 0, 255, 227, 255, 255, 255, 1, 255, 255,
+ 0, 0, 247, 255, 255, 255, 255, 251, 63, 63, 255, 170, 255, 255, 223, 95,
+ 220, 31, 207, 15, 255, 31, 220, 31, 0, 0, 0, 128, 1, 0, 16, 0,
+ 0, 0, 2, 128, 0, 0, 255, 31, 226, 255, 1, 0, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 1, 0, 0, 255, 127, 255, 255,
+ 31, 248, 15, 0, 255, 128, 0, 128, 255, 255, 127, 0, 127, 127, 127, 127,
+ 224, 0, 0, 0, 254, 255, 62, 31, 255, 255, 127, 230, 224, 255, 255, 255,
+ 255, 127, 0, 0, 255, 31, 0, 0, 255, 31, 255, 255, 255, 15, 0, 0,
+ 255, 255, 240, 191, 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255,
+ 252, 7, 0, 0, 0, 0, 224, 255, 255, 16, 0, 0, 63, 0, 255, 3,
+ 255, 255, 255, 232, 255, 63, 255, 255, 1, 128, 255, 3, 255, 63, 255, 3,
+ 255, 255, 127, 252, 7, 0, 0, 56, 255, 255, 124, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 55, 255, 3, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255,
+ 0, 0, 248, 255, 240, 255, 255, 255, 255, 255, 252, 255, 255, 0, 0, 0,
+ 255, 255, 24, 0, 0, 224, 0, 0, 0, 0, 138, 170, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 0, 0, 0, 32,
+ 255, 255, 1, 0, 0, 224, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255,
+ 255, 0, 255, 255, 15, 0, 0, 0, 63, 253, 255, 255, 255, 255, 191, 145,
+ 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254, 255, 255, 63, 135,
+ 127, 0, 0, 0, 255, 255, 7, 0, 255, 0, 255, 3, 255, 27, 3, 0,
+ 128, 0, 255, 255, 31, 0, 0, 0, 192, 255, 0, 128, 255, 1, 255, 3,
+ 240, 0, 255, 255, 255, 255, 79, 0, 31, 222, 255, 23, 255, 255, 251, 255,
+ 255, 255, 255, 64, 127, 189, 255, 191, 255, 7, 255, 3, 255, 253, 237, 251,
+ 159, 57, 129, 224, 207, 31, 31, 0, 255, 7, 255, 195, 3, 0, 0, 0,
+ 191, 0, 255, 3, 255, 255, 63, 255, 1, 0, 0, 63, 17, 0, 255, 3,
+ 255, 3, 0, 128, 127, 242, 111, 255, 255, 255, 191, 249, 15, 0, 255, 3,
+ 255, 252, 255, 255, 255, 255, 255, 252, 27, 0, 0, 0, 255, 255, 255, 35,
+ 255, 253, 255, 255, 1, 0, 255, 3, 0, 0, 252, 255, 255, 254, 127, 0,
+ 127, 251, 255, 255, 255, 255, 127, 180, 191, 253, 255, 255, 255, 127, 251, 1,
+ 0, 0, 1, 0, 248, 255, 255, 224, 255, 135, 255, 255, 255, 128, 255, 255,
+ 27, 0, 3, 0, 0, 0, 7, 0, 255, 7, 255, 31, 255, 1, 255, 99,
+ 224, 227, 7, 248, 231, 15, 0, 0, 0, 60, 0, 0, 28, 0, 0, 0,
+ 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
+ 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
+ 247, 207, 255, 255, 255, 255, 127, 248, 255, 31, 32, 0, 16, 0, 0, 248,
+ 254, 255, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 255, 63,
+ 255, 67, 0, 0, 31, 0, 127, 0, 150, 254, 247, 10, 132, 234, 150, 170,
+ 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 3, 0, 255, 255
};
-/* Print: 2792 bytes. */
-
-RE_UINT32 re_get_print(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_print_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_print_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_print_stage_3[pos + f] << 5;
- pos += code;
- value = (re_print_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
+RE_UINT32 re_get_xid_continue(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
-/* Word. */
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_xid_continue_table_1[field_2];
+ v = re_xid_continue_table_2[(v << 5) | field_1];
+ v = re_xid_continue_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
-static RE_UINT8 re_word_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
+/* XID_Start. */
+static RE_UINT8 re_xid_start_table_1[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 12,
+ 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 14, 12, 15, 16, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 17, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 9, 9, 12, 30, 9, 9,
+ 9, 31, 9, 9, 9, 9, 9, 9, 9, 9, 32, 33, 12, 12, 12, 12,
+ 12, 34, 12, 35, 9, 9, 9, 9, 9, 9, 9, 9, 36, 9, 9, 37,
+ 9, 9, 9, 9, 9, 38, 9, 9, 39, 9, 40, 41, 9, 9, 9, 9,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 42, 12, 12, 12, 43, 44, 12,
+ 12, 12, 12, 45, 12, 12, 12, 12, 12, 12, 46, 9, 9, 9, 47, 9,
+ 12, 12, 12, 12, 48, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -16944,339 +26218,8 @@ static RE_UINT8 re_word_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 27, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static RE_UINT8 re_word_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 95, 96, 31, 97, 98, 99, 100, 31, 31, 101, 31, 31, 31, 31, 31,
- 102, 103, 104, 31, 31, 31, 31, 31, 105, 106, 31, 31, 31, 31, 107, 31,
- 31, 108, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 109, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 110, 111, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 112, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 113, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 114, 31, 31, 31, 31, 31,
- 31, 39, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_word_stage_3[] = {
- 0, 0, 0, 1, 2, 3, 2, 4, 0, 0, 5, 6, 7, 8, 7, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 0,
- 7, 7, 7, 7, 7, 7, 7, 12, 13, 7, 14, 7, 7, 7, 7, 15,
- 7, 7, 7, 7, 7, 7, 7, 7, 14, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 2, 7, 16, 7, 7, 17, 2, 7, 18, 19, 7, 3, 20,
- 0, 4, 7, 7, 7, 7, 21, 7, 7, 7, 7, 7, 7, 22, 23, 24,
- 0, 7, 7, 7, 25, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 26,
- 7, 7, 27, 0, 7, 28, 4, 0, 0, 0, 7, 29, 0, 30, 14, 7,
- 7, 7, 7, 7, 7, 7, 31, 2, 22, 32, 23, 33, 34, 35, 31, 36,
- 37, 32, 23, 38, 39, 40, 41, 42, 43, 14, 23, 44, 45, 46, 31, 47,
- 48, 32, 23, 44, 49, 50, 31, 51, 52, 53, 54, 21, 55, 56, 41, 0,
- 57, 58, 23, 59, 60, 61, 31, 0, 62, 58, 23, 63, 60, 64, 31, 65,
- 62, 58, 7, 7, 66, 67, 31, 68, 69, 70, 7, 71, 72, 73, 41, 74,
- 2, 7, 7, 4, 75, 1, 0, 0, 76, 7, 77, 27, 78, 79, 0, 0,
- 46, 80, 1, 81, 82, 7, 83, 2, 84, 82, 7, 83, 85, 0, 0, 0,
- 7, 7, 7, 7, 1, 7, 7, 7, 7, 27, 7, 7, 86, 7, 7, 87,
- 7, 7, 7, 7, 88, 89, 7, 7, 88, 7, 7, 90, 91, 8, 7, 7,
- 7, 91, 7, 7, 7, 25, 0, 0, 7, 0, 7, 7, 7, 7, 7, 92,
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 24, 7, 2, 4, 7, 7, 7, 7, 93, 17,
- 57, 94, 7, 94, 7, 95, 57, 96, 7, 7, 7, 7, 7, 97, 1, 0,
- 98, 1, 7, 7, 7, 7, 7, 17, 7, 7, 4, 7, 7, 7, 7, 42,
- 7, 75, 28, 28, 41, 7, 27, 94, 7, 7, 28, 7, 1, 1, 0, 0,
- 7, 28, 7, 7, 7, 75, 7, 24, 1, 1, 99, 75, 0, 0, 0, 0,
- 7, 7, 7, 7, 28, 1, 100, 95, 7, 7, 7, 7, 7, 7, 7, 95,
- 7, 7, 7, 101, 59, 7, 7, 27, 17, 7, 7, 25, 0, 102, 7, 4,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 103,
- 7, 92, 7, 7, 92, 104, 7, 27, 7, 7, 7, 105, 106, 107, 83, 106,
- 108, 0, 0, 109, 46, 110, 0, 111, 0, 83, 0, 0, 0, 7, 7, 46,
- 112, 113, 114, 79, 115, 0, 7, 7, 17, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 1, 0,
- 7, 7, 75, 7, 7, 75, 7, 7, 7, 7, 7, 7, 7, 7, 116, 95,
- 7, 7, 86, 7, 7, 7, 117, 109, 7, 118, 119, 119, 119, 119, 7, 7,
- 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 120, 0, 2, 121, 2, 7, 7, 7, 7, 122, 2, 7, 7, 7, 7, 87,
- 123, 7, 7, 2, 7, 7, 7, 7, 75, 0, 7, 4, 0, 0, 0, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 83, 0, 0, 0, 0, 7, 7, 27,
- 83, 7, 28, 0, 7, 7, 7, 124, 7, 7, 7, 7, 7, 7, 7, 10,
- 0, 125, 126, 7, 7, 7, 7, 7, 127, 7, 7, 7, 128, 0, 0, 125,
- 7, 7, 101, 0, 7, 7, 7, 95, 7, 7, 7, 7, 42, 1, 7, 129,
- 7, 7, 27, 7, 7, 95, 7, 83, 7, 7, 7, 7, 130, 1, 7, 75,
- 7, 7, 7, 118, 27, 1, 7, 70, 7, 7, 7, 7, 20, 98, 7, 128,
- 131, 132, 119, 7, 7, 87, 101, 7, 7, 7, 7, 7, 7, 7, 133, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 95, 7, 134, 7, 7, 28,
- 7, 7, 7, 7, 7, 7, 27, 7, 7, 7, 7, 7, 7, 1, 0, 0,
- 118, 135, 23, 136, 137, 7, 7, 7, 7, 7, 7, 10, 0, 30, 7, 7,
- 7, 7, 7, 27, 0, 7, 7, 7, 7, 126, 7, 7, 101, 0, 0, 28,
- 7, 0, 7, 138, 139, 0, 0, 84, 7, 7, 7, 7, 7, 7, 7, 83,
- 0, 1, 2, 3, 2, 4, 41, 7, 7, 7, 7, 75, 140, 141, 0, 0,
- 142, 7, 8, 143, 27, 27, 0, 0, 7, 7, 7, 7, 7, 7, 7, 4,
- 0, 0, 0, 0, 7, 7, 7, 94, 0, 0, 0, 0, 0, 0, 0, 144,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 83, 7, 7, 7, 46, 46, 0,
- 7, 7, 139, 7, 4, 7, 7, 4, 7, 27, 7, 7, 145, 146, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 27, 1, 7, 7, 145, 7, 28,
- 7, 7, 101, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 118, 7, 42, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 147, 7, 7, 148, 7, 42, 7, 118, 7, 75, 0, 0, 0, 0, 7, 149,
- 7, 42, 7, 1, 0, 0, 0, 0, 7, 7, 7, 150, 0, 0, 0, 0,
- 151, 152, 7, 153, 0, 0, 7, 83, 7, 83, 0, 0, 82, 7, 118, 0,
- 7, 7, 7, 42, 7, 42, 7, 20, 7, 10, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 17, 0, 0, 0, 7, 7, 7, 20, 7, 7, 7, 20,
- 7, 7, 101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 83, 99, 7, 7, 46, 0, 0, 0, 0, 0, 0, 0, 0, 7, 118,
- 7, 7, 7, 7, 118, 0, 41, 109, 7, 7, 7, 4, 0, 7, 17, 1,
- 7, 7, 7, 84, 154, 7, 7, 155, 7, 7, 7, 7, 156, 157, 0, 0,
- 7, 14, 7, 158, 0, 0, 0, 0, 159, 18, 17, 7, 7, 7, 4, 1,
- 22, 32, 23, 160, 49, 161, 162, 94, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 4, 21, 0, 0, 7, 7, 7, 7, 163, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 164, 46, 165, 0, 0,
- 7, 7, 7, 7, 166, 1, 0, 0, 7, 7, 7, 17, 1, 0, 0, 0,
- 7, 25, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 4, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 1, 109,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 7, 7, 167, 168, 0,
- 7, 7, 7, 75, 99, 7, 7, 7, 7, 169, 0, 0, 7, 7, 7, 17,
- 23, 7, 7, 8, 46, 1, 0, 126, 7, 126, 82, 118, 0, 0, 0, 0,
- 170, 7, 7, 171, 101, 1, 172, 7, 75, 173, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 118,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 75, 0, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 17, 7, 75, 1, 0, 0, 0, 0, 0, 0, 7, 27, 94,
- 7, 7, 7, 118, 95, 1, 30, 174, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 3, 7, 7, 7, 117, 7, 0, 0, 0, 0, 175, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 101,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 20,
- 7, 75, 0, 0, 0, 20, 176, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 28,
- 7, 7, 7, 7, 7, 7, 4, 83, 17, 177, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 178, 179, 180, 0, 181, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 84, 7, 7, 7, 57, 183, 184, 185, 7, 7, 7,
- 186, 187, 7, 188, 189, 58, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 164, 7, 58, 87, 7, 87,
- 7, 84, 7, 84, 75, 7, 75, 7, 23, 7, 23, 7, 190, 7, 7, 7,
- 7, 7, 7, 134, 7, 7, 83, 191, 110, 100, 2, 0, 0, 0, 0, 0,
- 8, 127, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 83, 27, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 1,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 94, 118, 0, 0,
- 7, 7, 7, 7, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 185, 7, 194, 195, 196, 197, 198, 199, 103, 28, 200, 28, 0, 0, 0, 0,
- 0, 0, 0, 7, 1, 7, 1, 7, 1, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 118, 0, 0,
- 7, 7, 7, 94, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 46, 0,
- 7, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_word_stage_4[] = {
- 0, 0, 255, 3, 254, 255, 255, 135, 255, 7, 0, 4, 32, 4, 255, 255,
- 127, 255, 195, 255, 3, 0, 31, 80, 223, 188, 64, 215, 251, 255, 191, 255,
- 127, 2, 255, 1, 255, 191, 182, 0, 7, 0, 255, 195, 239, 159, 255, 253,
- 255, 159, 255, 231, 63, 36, 255, 63, 255, 15, 223, 63, 248, 255, 207, 255,
- 249, 255, 197, 243, 159, 121, 128, 176, 3, 80, 238, 135, 109, 211, 135, 57,
- 2, 94, 192, 255, 63, 0, 238, 191, 237, 243, 191, 59, 1, 0, 0, 254,
- 238, 159, 159, 57, 192, 176, 2, 0, 236, 199, 61, 214, 24, 199, 199, 61,
- 129, 0, 255, 223, 253, 255, 255, 227, 223, 61, 96, 7, 239, 223, 239, 243,
- 96, 64, 6, 0, 223, 125, 240, 128, 0, 252, 236, 255, 127, 252, 251, 47,
- 127, 132, 95, 255, 12, 0, 255, 127, 214, 247, 175, 255, 95, 63, 255, 243,
- 0, 3, 160, 194, 255, 254, 255, 31, 223, 255, 64, 0, 191, 32, 255, 247,
- 255, 61, 127, 61, 61, 127, 61, 255, 63, 63, 255, 199, 31, 0, 15, 0,
- 13, 0, 143, 48, 0, 56, 128, 0, 0, 248, 255, 0, 247, 255, 255, 251,
- 255, 170, 223, 95, 220, 31, 207, 15, 0, 48, 0, 128, 16, 0, 2, 128,
- 132, 252, 47, 62, 80, 189, 224, 67, 31, 248, 255, 128, 127, 0, 127, 127,
- 224, 0, 62, 31, 127, 230, 224, 255, 247, 191, 128, 255, 252, 255, 255, 249,
- 124, 0, 255, 232, 1, 128, 126, 126, 126, 0, 255, 55, 127, 248, 248, 224,
- 127, 95, 219, 255, 24, 0, 0, 224, 252, 252, 252, 28, 255, 239, 255, 183,
- 0, 32, 15, 255, 62, 0, 63, 253, 191, 145, 55, 0, 255, 192, 111, 240,
- 239, 254, 63, 135, 112, 0, 79, 0, 31, 30, 255, 23, 255, 64, 127, 189,
- 237, 251, 129, 224, 207, 31, 191, 0, 63, 255, 0, 63, 17, 0, 255, 252,
- 27, 0, 255, 35, 127, 251, 127, 180, 191, 253, 251, 1, 255, 224, 11, 0,
- 240, 0, 255, 99, 224, 227, 7, 248, 231, 15, 0, 60, 28, 0, 100, 222,
- 255, 235, 239, 255, 191, 231, 223, 223, 255, 123, 95, 252, 247, 207, 32, 0,
- 219, 7, 255, 67, 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94,
- 238, 251,
-};
-
-/* Word: 2962 bytes. */
-
-RE_UINT32 re_get_word(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_word_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_word_stage_2[pos + f] << 4;
- f = code >> 4;
- code ^= f << 4;
- pos = (RE_UINT32)re_word_stage_3[pos + f] << 4;
- pos += code;
- value = (re_word_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* XDigit. */
-
-static RE_UINT8 re_xdigit_stage_1[] = {
- 0, 1, 1, 1, 1, 2, 1, 3, 4, 1, 1, 5, 1, 1, 6, 7,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_xdigit_stage_2[] = {
- 0, 1, 1, 2, 3, 4, 4, 5, 6, 1, 1, 7, 8, 9, 10, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 11, 12, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14,
- 1, 1, 15, 1, 1, 1, 16, 1, 17, 18, 19, 20, 21, 1, 22, 1,
- 1, 1, 1, 1, 1, 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 1, 1, 1, 1,
- 25, 18, 1, 1, 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_xdigit_stage_3[] = {
- 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 3, 2, 0, 2, 2, 2, 4, 2, 2, 2, 2, 2, 5, 2, 5,
- 2, 5, 2, 5, 2, 5, 2, 5, 2, 6, 2, 6, 3, 2, 2, 2,
- 2, 4, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 6, 2, 2, 2, 2, 7, 2, 6, 2, 2, 8, 2, 2, 6, 0, 2,
- 2, 8, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 6, 4, 2, 2, 9, 2, 6, 2, 2, 2, 2, 2, 0,
- 2, 2, 2, 2, 10, 11, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 2, 2, 2, 2, 5, 2, 0, 12, 2, 2, 6,
- 2, 2, 2, 0, 2, 2, 2, 2, 2, 6, 2, 6, 2, 2, 2, 2,
- 2, 6, 2, 4, 0, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
- 2, 6, 2, 2, 2, 6, 3, 2, 2, 3, 2, 2, 2, 6, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 4, 2, 2,
- 2, 2, 2, 2, 2, 6, 2, 2,
-};
-
-static RE_UINT8 re_xdigit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0,
- 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 0, 0,
- 0, 0, 255, 3, 0, 0, 0, 0, 192, 255, 0, 0, 0, 0, 0, 0,
- 255, 3, 255, 3, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 255, 3,
- 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 192, 255, 0, 192, 255, 255, 255, 255, 255, 255,
-};
-
-/* XDigit: 592 bytes. */
-
-RE_UINT32 re_get_xdigit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_xdigit_stage_1[f] << 4;
- f = code >> 9;
- code ^= f << 9;
- pos = (RE_UINT32)re_xdigit_stage_2[pos + f] << 3;
- f = code >> 6;
- code ^= f << 6;
- pos = (RE_UINT32)re_xdigit_stage_3[pos + f] << 6;
- pos += code;
- value = (re_xdigit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_Digit. */
-
-static RE_UINT8 re_posix_digit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_posix_digit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_digit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_digit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Posix_Digit: 130 bytes. */
-
-RE_UINT32 re_get_posix_digit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_posix_digit_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_posix_digit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_posix_digit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_posix_digit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_AlNum. */
-
-static RE_UINT8 re_posix_alnum_stage_1[] = {
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 5, 5, 8, 9, 10,
- 11, 12, 13, 14, 15, 9, 16, 5, 17, 9, 9, 18, 9, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, 24, 5, 25, 26,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -17291,1529 +26234,1580 @@ static RE_UINT8 re_posix_alnum_stage_1[] = {
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
};
-static RE_UINT8 re_posix_alnum_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28,
- 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31,
- 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 48, 49, 1, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 1, 59, 60, 61, 62, 63, 64, 65, 31, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 31, 78, 79, 80, 31,
- 1, 1, 1, 81, 82, 83, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 84, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 1, 1, 85, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 86, 87, 31, 31, 88, 89,
- 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 91, 31, 31, 31, 31, 31,
- 1, 92, 93, 31, 31, 31, 31, 31, 31, 31, 31, 31, 94, 31, 31, 31,
- 31, 31, 31, 31, 95, 96, 97, 98, 31, 31, 31, 31, 31, 31, 31, 31,
- 99, 100, 101, 31, 31, 31, 31, 31, 102, 103, 31, 31, 31, 31, 104, 31,
- 31, 105, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 1, 1, 1, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 107, 108, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 109, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 1, 1, 111, 31, 31, 31, 31, 31,
-};
-
-static RE_UINT8 re_posix_alnum_stage_3[] = {
- 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12,
- 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 5, 16, 17, 18, 19,
- 20, 5, 21, 22, 5, 5, 23, 24, 25, 5, 26, 5, 5, 27, 28, 29,
- 30, 31, 32, 33, 0, 34, 35, 36, 5, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 49, 53, 54, 55, 56, 57, 0,
- 58, 59, 60, 61, 58, 62, 63, 64, 58, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 0, 75, 76, 77, 0, 78, 0, 79, 80, 81, 82, 0, 0,
- 5, 83, 25, 5, 84, 5, 85, 86, 5, 5, 87, 5, 88, 89, 90, 5,
- 91, 5, 73, 0, 92, 5, 5, 93, 72, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 94, 2, 5, 5, 95, 96, 97, 97, 98, 5, 99, 100, 0,
- 0, 5, 5, 32, 5, 101, 5, 102, 103, 104, 25, 105, 5, 106, 107, 0,
- 108, 5, 103, 109, 0, 110, 0, 0, 5, 111, 112, 0, 5, 113, 5, 114,
- 5, 115, 116, 117, 118, 65, 0, 119, 5, 5, 5, 5, 5, 5, 0, 120,
- 93, 5, 121, 117, 5, 122, 123, 124, 0, 0, 0, 125, 126, 0, 0, 0,
- 127, 128, 129, 5, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 130, 5, 107, 5, 131, 103, 5, 5, 5, 5, 132,
- 5, 85, 5, 133, 115, 134, 134, 5, 0, 135, 0, 0, 0, 0, 0, 0,
- 136, 137, 72, 5, 138, 72, 5, 86, 139, 14, 5, 5, 140, 73, 0, 25,
- 5, 5, 5, 5, 5, 102, 0, 0, 5, 5, 5, 5, 5, 5, 5, 92,
- 5, 5, 5, 5, 31, 0, 25, 117, 141, 142, 5, 143, 5, 5, 5, 92,
- 144, 145, 5, 5, 146, 5, 147, 144, 148, 149, 5, 97, 5, 5, 150, 151,
- 28, 101, 152, 82, 5, 153, 135, 154, 5, 115, 155, 156, 5, 103, 157, 158,
- 159, 160, 86, 161, 5, 5, 5, 33, 5, 5, 5, 5, 5, 162, 163, 108,
- 5, 5, 5, 164, 5, 5, 165, 0, 166, 167, 168, 5, 5, 27, 169, 5,
- 5, 117, 25, 5, 170, 5, 149, 171, 0, 0, 0, 172, 5, 5, 5, 82,
- 0, 2, 2, 173, 5, 103, 174, 0, 175, 176, 177, 0, 5, 5, 5, 73,
- 0, 0, 5, 178, 0, 0, 0, 0, 0, 0, 0, 0, 82, 5, 179, 0,
- 5, 26, 101, 73, 117, 5, 180, 0, 5, 5, 5, 5, 117, 25, 181, 108,
- 5, 161, 5, 61, 0, 0, 0, 0, 5, 115, 102, 149, 0, 0, 0, 0,
- 182, 183, 102, 115, 103, 0, 0, 184, 102, 165, 0, 0, 5, 185, 0, 0,
- 186, 102, 0, 82, 82, 0, 79, 187, 5, 102, 102, 152, 27, 0, 0, 0,
- 5, 5, 16, 0, 5, 152, 5, 152, 5, 149, 0, 0, 0, 0, 0, 0,
- 82, 188, 189, 0, 0, 0, 0, 115, 5, 5, 189, 0, 145, 32, 25, 16,
- 5, 152, 190, 191, 5, 5, 192, 0, 193, 194, 0, 0, 195, 118, 5, 16,
- 40, 49, 196, 61, 0, 0, 0, 0, 5, 5, 197, 0, 5, 5, 198, 0,
- 0, 0, 0, 0, 5, 199, 200, 0, 5, 103, 201, 0, 5, 202, 0, 0,
- 65, 33, 0, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 5, 5, 203,
- 0, 0, 0, 0, 0, 204, 30, 205, 5, 206, 25, 5, 207, 0, 5, 32,
- 208, 209, 78, 210, 170, 211, 0, 0, 212, 213, 214, 215, 216, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 115, 5, 5, 5, 5, 165, 0, 0, 0,
- 5, 5, 5, 140, 5, 5, 5, 5, 5, 5, 61, 0, 0, 0, 0, 0,
- 5, 140, 0, 0, 0, 0, 0, 0, 5, 5, 217, 0, 0, 0, 0, 0,
- 5, 32, 103, 0, 0, 0, 25, 155, 5, 92, 61, 218, 92, 0, 0, 0,
- 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 219, 5, 220, 0, 0, 221,
- 5, 5, 5, 5, 5, 5, 5, 222, 5, 5, 5, 5, 5, 5, 5, 152,
- 103, 0, 223, 224, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 108,
- 5, 5, 5, 225, 226, 0, 0, 0, 5, 5, 227, 5, 228, 229, 230, 5,
- 231, 232, 233, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 234, 235, 86,
- 227, 227, 131, 131, 208, 208, 236, 0, 237, 238, 0, 0, 0, 0, 0, 0,
- 5, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 241,
- 5, 5, 5, 5, 5, 5, 187, 0, 5, 5, 242, 0, 0, 0, 0, 0,
- 230, 243, 244, 245, 246, 247, 0, 0, 0, 25, 248, 248, 107, 0, 0, 0,
- 5, 5, 5, 5, 5, 5, 115, 0, 5, 178, 5, 5, 5, 5, 5, 5,
- 117, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 249, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 78, 117, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_posix_alnum_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4,
- 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0,
- 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255,
- 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2,
- 255, 1, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, 255, 135, 7, 0,
- 0, 0, 255, 7, 255, 255, 255, 254, 0, 192, 255, 255, 255, 255, 239, 31,
- 254, 225, 0, 156, 0, 0, 255, 255, 0, 224, 255, 255, 255, 255, 3, 0,
- 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 255, 252, 255, 31, 0, 0,
- 255, 255, 255, 1, 255, 7, 0, 0, 255, 255, 223, 63, 0, 0, 240, 255,
- 248, 3, 255, 255, 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255,
- 239, 159, 249, 255, 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 16,
- 238, 135, 249, 255, 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0,
- 238, 191, 251, 255, 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 30,
- 238, 159, 249, 255, 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214,
- 24, 199, 255, 195, 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227,
- 223, 29, 96, 7, 15, 0, 0, 0, 255, 253, 239, 227, 223, 29, 96, 64,
- 15, 0, 6, 0, 255, 255, 255, 231, 223, 93, 240, 128, 15, 0, 0, 252,
- 236, 255, 127, 252, 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0,
- 254, 255, 255, 255, 255, 255, 255, 7, 127, 32, 0, 0, 214, 247, 255, 255,
- 175, 255, 255, 59, 95, 32, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255,
- 255, 31, 254, 255, 3, 255, 255, 254, 255, 255, 255, 31, 255, 255, 127, 249,
- 255, 255, 0, 60, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
- 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
- 255, 255, 0, 0, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
- 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255,
- 255, 1, 128, 16, 255, 7, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
- 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0,
- 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 0, 255, 255, 239, 255,
- 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0, 255, 255, 127, 0,
- 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 0, 222, 111, 4,
- 128, 255, 31, 0, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
- 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62,
- 80, 189, 255, 243, 224, 67, 0, 0, 0, 0, 192, 255, 255, 127, 255, 255,
- 31, 120, 12, 0, 255, 128, 0, 0, 127, 127, 127, 127, 0, 128, 0, 0,
- 224, 0, 0, 0, 254, 3, 62, 31, 255, 255, 127, 224, 224, 255, 255, 255,
- 255, 127, 0, 0, 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143,
- 0, 0, 128, 255, 252, 255, 255, 255, 255, 249, 255, 255, 124, 0, 0, 0,
- 191, 255, 255, 255, 255, 0, 0, 0, 47, 0, 0, 0, 0, 0, 252, 232,
- 255, 255, 7, 0, 255, 255, 247, 255, 255, 255, 0, 124, 255, 63, 0, 0,
- 255, 255, 127, 252, 5, 0, 0, 56, 255, 255, 60, 0, 126, 126, 126, 0,
- 127, 127, 255, 255, 255, 0, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255,
- 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 224, 255, 253, 127, 95,
- 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255, 0, 0, 255, 15,
- 0, 0, 223, 255, 192, 255, 255, 255, 252, 252, 252, 28, 255, 239, 255, 255,
- 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 31, 0, 255, 255, 1, 0,
- 15, 255, 62, 0, 255, 255, 15, 255, 63, 253, 255, 255, 255, 255, 191, 145,
- 255, 255, 55, 0, 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0,
- 128, 0, 255, 255, 63, 0, 0, 0, 112, 0, 255, 255, 255, 255, 71, 0,
- 30, 0, 0, 20, 255, 255, 251, 255, 255, 255, 159, 64, 127, 189, 255, 191,
- 159, 25, 129, 224, 187, 7, 0, 128, 179, 0, 0, 0, 255, 255, 63, 127,
- 0, 0, 0, 63, 17, 0, 0, 0, 255, 255, 63, 1, 0, 0, 0, 128,
- 255, 252, 255, 255, 26, 0, 0, 0, 255, 255, 231, 127, 255, 255, 255, 32,
- 255, 253, 255, 255, 255, 255, 127, 127, 0, 0, 252, 255, 255, 254, 127, 0,
- 127, 251, 255, 255, 255, 255, 127, 180, 203, 0, 0, 0, 191, 253, 255, 255,
- 255, 127, 123, 1, 127, 0, 0, 0, 248, 255, 255, 224, 255, 135, 255, 255,
- 255, 128, 255, 255, 11, 0, 0, 0, 255, 255, 255, 0, 0, 0, 7, 0,
- 240, 0, 255, 255, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 223, 255,
- 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223,
- 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247,
- 247, 15, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 255, 31, 128, 63,
- 0, 64, 0, 0, 255, 15, 0, 0, 143, 8, 0, 0, 150, 254, 247, 10,
- 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15,
- 255, 3, 255, 255, 3, 0, 255, 255,
-};
-
-/* Posix_AlNum: 2600 bytes. */
-
-RE_UINT32 re_get_posix_alnum(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 12;
- code = ch ^ (f << 12);
- pos = (RE_UINT32)re_posix_alnum_stage_1[f] << 4;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_posix_alnum_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_posix_alnum_stage_3[pos + f] << 5;
- pos += code;
- value = (re_posix_alnum_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_Punct. */
-
-static RE_UINT8 re_posix_punct_stage_1[] = {
- 0, 1, 2, 3, 3, 4, 3, 5, 6, 7, 3, 8, 3, 9, 10, 11,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static RE_UINT8 re_posix_punct_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 1, 1, 17, 18, 1, 19, 20, 21, 22, 23, 24, 25, 1, 1, 26,
- 27, 28, 29, 29, 30, 29, 29, 31, 29, 29, 29, 32, 33, 34, 35, 36,
- 37, 38, 39, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 40, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 41, 1, 42, 43, 44, 45, 46, 47, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 49, 50, 51,
- 1, 52, 1, 53, 1, 54, 1, 1, 55, 56, 57, 58, 1, 1, 1, 59,
- 60, 61, 62, 1, 63, 64, 65, 66, 67, 68, 69, 1, 70, 1, 71, 72,
- 1, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 75, 1, 1, 76, 68,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 78, 79, 80, 81, 1, 1, 82, 83, 29, 29, 84, 1, 1, 1, 1, 1,
- 1, 85, 86, 1, 1, 1, 1, 1, 1, 87, 1, 1, 88, 89, 90, 1,
- 91, 92, 93, 29, 29, 29, 94, 95, 96, 97, 98, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_punct_stage_3[] = {
- 0, 1, 2, 3, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 8, 9, 0, 0, 10,
- 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 13, 14, 15, 16,
- 17, 0, 0, 18, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 22,
- 0, 23, 14, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25,
- 0, 0, 0, 10, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28,
- 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 31, 32, 0, 0, 0, 33,
- 0, 34, 35, 0, 0, 0, 0, 0, 36, 37, 0, 0, 38, 39, 40, 0,
- 0, 0, 41, 0, 39, 0, 0, 42, 0, 0, 0, 43, 44, 0, 0, 0,
- 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 48,
- 0, 49, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 52, 0, 0, 0, 39, 53, 39, 0, 0, 0, 0, 54, 0, 0,
- 0, 0, 12, 55, 0, 0, 0, 56, 0, 57, 0, 39, 0, 0, 58, 0,
- 0, 0, 0, 0, 0, 59, 60, 61, 62, 63, 64, 65, 66, 53, 0, 0,
- 67, 68, 69, 0, 70, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 71, 51, 0, 56, 72, 0, 0, 53, 53, 53, 72, 73, 53, 53, 53,
- 53, 53, 53, 74, 75, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 76,
- 0, 0, 0, 27, 0, 0, 0, 0, 53, 77, 78, 0, 79, 53, 53, 80,
- 53, 53, 53, 53, 53, 53, 72, 81, 82, 83, 0, 0, 47, 45, 0, 42,
- 0, 0, 0, 0, 84, 0, 53, 85, 64, 86, 87, 53, 86, 88, 53, 53,
- 0, 0, 0, 0, 0, 0, 53, 53, 0, 0, 0, 0, 62, 53, 71, 39,
- 89, 0, 0, 90, 0, 0, 0, 91, 92, 93, 0, 0, 94, 0, 0, 0,
- 0, 95, 0, 96, 0, 0, 97, 98, 0, 97, 34, 0, 0, 0, 99, 0,
- 0, 0, 56, 100, 0, 0, 39, 26, 0, 0, 42, 0, 0, 0, 0, 101,
- 0, 102, 0, 0, 0, 103, 93, 0, 0, 39, 0, 0, 0, 0, 0, 104,
- 44, 62, 105, 106, 0, 0, 0, 0, 1, 2, 2, 107, 0, 0, 0, 108,
- 109, 110, 0, 111, 112, 45, 62, 113, 0, 0, 0, 0, 34, 0, 27, 0,
- 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 5, 114, 0, 0, 0, 0,
- 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 115, 34, 0, 0, 116, 117,
- 0, 111, 0, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0,
- 0, 0, 120, 0, 0, 121, 93, 0, 0, 0, 85, 122, 0, 0, 123, 0,
- 0, 124, 0, 0, 0, 102, 0, 0, 0, 0, 125, 0, 0, 0, 126, 0,
- 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 128, 129, 0, 0, 0, 0,
- 0, 56, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 11, 0, 34, 71, 0, 130, 109, 0, 0,
- 0, 0, 131, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114,
- 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, 134, 0, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 0, 135, 0, 110, 136, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0,
- 53, 53, 53, 53, 53, 53, 53, 72, 53, 139, 53, 140, 141, 142, 53, 43,
- 53, 53, 143, 0, 0, 0, 0, 0, 53, 53, 92, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 144, 42, 135, 135, 31, 31, 102, 102, 145, 0,
- 0, 137, 0, 146, 147, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 26, 53, 150, 53, 53, 80, 151, 152, 72,
- 62, 78, 41, 153, 86, 129, 0, 154, 155, 156, 157, 107, 0, 0, 0, 0,
- 53, 53, 53, 53, 53, 53, 72, 158, 53, 53, 53, 80, 53, 53, 159, 160,
- 150, 53, 161, 53, 63, 21, 0, 0, 162, 53, 53, 163, 53, 164, 165, 53,
- 53, 53, 80, 166, 167, 0, 0, 0,
-};
-
-static RE_UINT8 re_posix_punct_stage_4[] = {
- 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 248, 1, 0, 0, 120,
- 254, 219, 211, 137, 0, 0, 128, 0, 60, 0, 252, 255, 224, 175, 255, 255,
- 0, 0, 32, 64, 176, 0, 0, 0, 0, 0, 64, 0, 4, 0, 0, 0,
- 0, 0, 0, 252, 0, 230, 0, 0, 0, 0, 0, 64, 73, 0, 0, 0,
- 0, 0, 24, 0, 192, 255, 0, 200, 0, 60, 0, 0, 0, 0, 16, 64,
- 0, 2, 0, 96, 255, 63, 0, 0, 0, 0, 192, 195, 0, 0, 255, 127,
- 48, 0, 1, 0, 0, 0, 12, 44, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 248, 7, 0, 0, 128, 128, 16, 0, 0, 0, 0, 128, 0, 0,
- 0, 0, 0, 2, 0, 0, 16, 0, 0, 0, 0, 128, 0, 128, 0, 12,
- 254, 255, 255, 252, 0, 0, 80, 61, 32, 0, 0, 0, 0, 0, 0, 192,
- 191, 223, 255, 7, 0, 252, 0, 0, 0, 0, 0, 8, 255, 1, 0, 0,
- 0, 0, 255, 3, 1, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 24,
- 0, 56, 0, 0, 0, 0, 96, 0, 0, 0, 112, 15, 255, 7, 0, 0,
- 49, 0, 0, 0, 255, 255, 255, 255, 127, 63, 0, 0, 255, 7, 240, 31,
- 0, 0, 0, 240, 0, 0, 0, 248, 255, 0, 8, 0, 0, 0, 0, 160,
- 3, 224, 0, 224, 0, 224, 0, 96, 0, 0, 255, 255, 255, 0, 255, 255,
- 255, 255, 255, 127, 0, 0, 0, 124, 0, 124, 0, 0, 123, 3, 208, 193,
- 175, 66, 0, 12, 31, 188, 0, 0, 0, 12, 255, 255, 127, 0, 0, 0,
- 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 207, 255, 255, 255, 63, 255,
- 224, 7, 0, 222, 255, 127, 255, 255, 255, 255, 0, 0, 255, 255, 255, 251,
- 255, 255, 15, 0, 0, 0, 255, 15, 30, 255, 255, 255, 1, 0, 193, 224,
- 0, 0, 195, 255, 15, 0, 0, 0, 0, 252, 255, 255, 255, 0, 1, 0,
- 255, 255, 1, 0, 0, 224, 0, 0, 0, 0, 8, 64, 0, 0, 252, 0,
- 255, 255, 127, 0, 3, 0, 0, 0, 0, 6, 0, 0, 0, 15, 192, 3,
- 0, 0, 240, 0, 0, 192, 0, 0, 0, 0, 0, 23, 254, 63, 0, 192,
- 0, 0, 128, 3, 0, 8, 0, 0, 0, 2, 0, 0, 0, 0, 252, 255,
- 0, 0, 0, 48, 255, 255, 247, 255, 127, 15, 0, 0, 63, 0, 0, 0,
- 127, 127, 0, 48, 7, 0, 0, 0, 0, 0, 128, 255, 0, 0, 0, 254,
- 255, 115, 255, 15, 255, 255, 255, 31, 0, 0, 128, 1, 0, 0, 255, 1,
- 0, 1, 0, 0, 0, 0, 127, 0, 0, 0, 0, 30, 0, 0, 224, 3,
- 128, 63, 0, 0, 0, 0, 0, 216, 0, 0, 48, 0, 224, 33, 0, 232,
- 0, 0, 0, 63, 0, 248, 0, 40, 64, 0, 0, 0, 254, 255, 255, 0,
- 14, 0, 0, 0, 255, 31, 0, 0, 0, 0, 0, 220, 62, 0, 0, 0,
- 0, 0, 224, 255, 255, 255, 3, 128, 0, 0, 31, 0, 0, 0, 32, 0,
- 48, 0, 0, 0, 0, 0, 128, 7, 0, 0, 0, 144, 127, 254, 255, 255,
- 31, 28, 0, 0, 24, 240, 255, 255, 255, 195, 255, 255, 35, 0, 0, 0,
- 2, 0, 0, 8, 8, 0, 0, 0, 0, 224, 223, 255, 239, 15, 0, 0,
- 0, 16, 1, 0, 0, 64, 0, 0, 255, 15, 255, 255, 255, 127, 254, 255,
- 254, 255, 254, 255, 0, 28, 0, 0, 192, 255, 255, 255, 7, 0, 255, 255,
- 255, 255, 255, 15, 255, 1, 3, 0, 255, 31, 255, 7, 255, 255, 255, 1,
- 255, 15, 0, 0, 255, 0, 255, 3, 255, 239, 255, 255, 255, 255, 123, 252,
- 231, 199, 255, 255, 255, 231, 255, 255, 255, 63, 15, 7, 7, 0, 63, 0,
-};
-
-/* Posix_Punct: 1984 bytes. */
-
-RE_UINT32 re_get_posix_punct(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_posix_punct_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_posix_punct_stage_2[pos + f] << 3;
- f = code >> 5;
- code ^= f << 5;
- pos = (RE_UINT32)re_posix_punct_stage_3[pos + f] << 5;
- pos += code;
- value = (re_posix_punct_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* Posix_XDigit. */
-
-static RE_UINT8 re_posix_xdigit_stage_1[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1,
-};
-
-static RE_UINT8 re_posix_xdigit_stage_2[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_xdigit_stage_3[] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-static RE_UINT8 re_posix_xdigit_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/* Posix_XDigit: 130 bytes. */
-
-RE_UINT32 re_get_posix_xdigit(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-
- f = ch >> 15;
- code = ch ^ (f << 15);
- pos = (RE_UINT32)re_posix_xdigit_stage_1[f] << 4;
- f = code >> 11;
- code ^= f << 11;
- pos = (RE_UINT32)re_posix_xdigit_stage_2[pos + f] << 4;
- f = code >> 7;
- code ^= f << 7;
- pos = (RE_UINT32)re_posix_xdigit_stage_3[pos + f] << 7;
- pos += code;
- value = (re_posix_xdigit_stage_4[pos >> 3] >> (pos & 0x7)) & 0x1;
-
- return value;
-}
-
-/* All_Cases. */
-
-static RE_UINT8 re_all_cases_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_all_cases_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12,
- 6, 13, 6, 6, 14, 6, 6, 6, 6, 6, 6, 6, 15, 16, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 17, 18, 6, 6, 6, 19, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6, 21,
- 6, 6, 6, 6, 22, 6, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 26, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static RE_UINT8 re_all_cases_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 0, 0, 0, 0, 0, 0, 9, 0, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 18, 18, 18, 18, 18, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 21, 34, 18, 18, 35, 18,
- 18, 18, 18, 18, 36, 18, 37, 38, 39, 18, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 18, 18, 18, 64, 65,
- 66, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 18, 18, 18,
- 77, 78, 18, 18, 18, 18, 18, 18, 79, 80, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 81, 82, 82, 82, 83, 0, 84, 85, 85, 85,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_xid_start_table_2[] = {
+ 0, 0, 1, 1, 0, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 5, 6, 0, 0, 0, 7, 8, 9, 4, 10,
+ 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 13, 4, 14, 0, 15, 16,
+ 0, 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, 4, 4, 24, 25, 26,
+ 27, 28, 29, 17, 0, 30, 31, 0, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 45, 49, 50, 51, 52, 46, 0,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0,
+ 68, 69, 67, 0, 70, 71, 72, 0, 73, 0, 74, 75, 76, 0, 0, 0,
+ 4, 77, 78, 79, 80, 4, 81, 82, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 83, 4, 84, 85, 86, 4, 87, 4, 88, 0, 22, 4, 4, 89,
+ 68, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 90, 1, 4, 4, 91, 92, 93, 93, 94, 4, 95, 96, 0,
+ 0, 4, 4, 29, 4, 97, 4, 98, 99, 0, 15, 100, 4, 101, 102, 0,
+ 103, 4, 104, 0, 0, 105, 0, 0, 106, 95, 107, 0, 108, 109, 4, 110,
+ 4, 111, 112, 113, 114, 115, 0, 116, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 89, 4, 117, 113, 4, 118, 119, 120,
+ 0, 0, 0, 121, 122, 0, 0, 0, 123, 124, 125, 4, 14, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 87, 87, 87, 87, 88, 89, 90, 90, 90, 90, 90, 91,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 94,
+ 4, 126, 99, 4, 4, 4, 4, 127, 4, 81, 4, 128, 103, 129, 129, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 95, 96, 97, 97, 97, 97, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
- 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 101, 18, 18, 18,
- 18, 18, 102, 103, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 104, 105, 93, 94, 104, 105, 104, 105, 93, 94, 106, 107, 104, 105, 108, 109,
- 104, 105, 104, 105, 104, 105, 110, 111, 112, 113, 114, 115, 116, 117, 112, 118,
- 0, 0, 0, 0, 119, 120, 121, 0, 0, 122, 0, 0, 123, 123, 124, 124,
- 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 131, 68, 4, 132, 68, 4, 82, 106, 12, 4, 4, 133, 4, 0, 15,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 126, 127, 127, 127, 128, 128, 128, 129, 0, 0,
- 82, 82, 82, 82, 82, 83, 85, 85, 85, 85, 85, 86, 130, 131, 132, 133,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 37, 134, 135, 0,
- 136, 136, 136, 136, 137, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 134,
+ 4, 4, 4, 4, 75, 0, 15, 113, 4, 4, 4, 4, 4, 4, 4, 4,
+ 135, 136, 4, 137, 113, 4, 4, 22, 138, 139, 4, 4, 140, 4, 141, 142,
+ 143, 144, 4, 95, 139, 95, 0, 145, 25, 146, 67, 134, 32, 147, 148, 149,
+ 4, 14, 150, 151, 4, 152, 153, 154, 155, 156, 82, 157, 4, 4, 4, 144,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 158, 159, 160,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 161, 4, 4, 162, 0, 163, 164, 165, 4, 4, 93, 166, 4,
+ 4, 4, 113, 32, 4, 4, 4, 4, 4, 113, 15, 4, 167, 4, 31, 168,
+ 0, 0, 0, 169, 4, 4, 4, 134, 0, 1, 1, 170, 113, 99, 171, 0,
+ 172, 173, 174, 0, 4, 4, 4, 88, 0, 0, 4, 104, 0, 0, 0, 0,
+ 0, 0, 0, 0, 134, 4, 175, 0, 4, 23, 176, 98, 113, 4, 177, 0,
+ 4, 4, 4, 4, 113, 15, 178, 160, 4, 179, 4, 111, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 103, 98, 31, 0, 0, 0, 0,
+ 180, 181, 98, 103, 99, 0, 0, 182, 98, 162, 0, 0, 4, 183, 0, 0,
+ 184, 98, 0, 134, 134, 0, 74, 185, 4, 98, 98, 147, 93, 0, 0, 0,
+ 4, 4, 14, 0, 4, 147, 4, 147, 4, 111, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 186, 0, 0, 134, 187, 110, 0, 0, 15, 185, 103,
+ 108, 188, 0, 0, 108, 22, 15, 14, 108, 67, 189, 190, 108, 147, 191, 0,
+ 192, 193, 0, 0, 194, 114, 99, 0, 48, 45, 195, 56, 0, 0, 0, 0,
+ 4, 104, 196, 56, 4, 22, 197, 0, 0, 0, 0, 0, 4, 133, 198, 0,
+ 4, 22, 199, 0, 4, 200, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
+ 4, 193, 0, 0, 0, 4, 4, 201, 202, 203, 204, 0, 0, 205, 175, 206,
+ 207, 208, 209, 4, 210, 0, 4, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 211, 133, 73, 212, 22, 0, 0, 0, 213, 175, 214, 215, 216, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 46, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 162, 0, 0, 0,
+ 4, 4, 4, 133, 4, 4, 4, 4, 4, 4, 111, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 139, 18, 18, 18, 102, 0, 0,
- 18, 18, 18, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 78, 18, 78, 18, 18, 18, 18, 18, 18, 18, 0, 140,
- 18, 141, 142, 18, 18, 143, 144, 18, 145, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 147,
- 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0,
- 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 11, 11, 4, 5, 15, 15, 8, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 29, 99, 0, 0, 0, 15, 217, 4, 22, 111, 218, 22, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 151, 150, 150, 150, 150, 152,
+ 0, 0, 4, 4, 0, 0, 0, 0, 4, 4, 219, 0, 166, 0, 0, 220,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 188,
+ 4, 4, 4, 4, 4, 4, 98, 0, 14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 153, 153, 153, 153, 153, 153, 154, 0, 155, 155, 155, 155, 155, 155, 156, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 99, 0, 221, 222, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 11, 11, 11, 15, 15, 15, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 15, 15, 15, 15,
+ 4, 4, 30, 4, 225, 226, 227, 4, 228, 229, 230, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 231, 232, 82, 30, 30, 126, 126, 211, 211, 150, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 233, 234, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 193, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 185, 0, 4, 4, 235, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 157, 157, 157, 157, 158, 159, 159, 159, 160, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 227, 236, 237, 238, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 113, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 104, 4, 4, 4, 4, 4, 4,
+ 113, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 241, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 73,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 17, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_all_cases_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
- 5, 6, 5, 7, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5,
- 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
- 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 11,
- 5, 5, 5, 5, 5, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 13,
- 14, 15, 14, 15, 14, 15, 14, 15, 16, 17, 14, 15, 14, 15, 14, 15,
- 0, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14,
- 15, 0, 14, 15, 14, 15, 14, 15, 18, 14, 15, 14, 15, 14, 15, 19,
- 20, 21, 14, 15, 14, 15, 22, 14, 15, 23, 23, 14, 15, 0, 24, 25,
- 26, 14, 15, 23, 27, 28, 29, 30, 14, 15, 31, 0, 29, 32, 33, 34,
- 14, 15, 14, 15, 14, 15, 35, 14, 15, 35, 0, 0, 14, 15, 35, 14,
- 15, 36, 36, 14, 15, 14, 15, 37, 14, 15, 0, 0, 14, 15, 0, 38,
- 0, 0, 0, 0, 39, 40, 41, 39, 40, 41, 39, 40, 41, 14, 15, 14,
- 15, 14, 15, 14, 15, 42, 14, 15, 0, 39, 40, 41, 14, 15, 43, 44,
- 45, 0, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 0, 0, 0, 0,
- 0, 0, 46, 14, 15, 47, 48, 49, 49, 14, 15, 50, 51, 52, 14, 15,
- 53, 54, 55, 56, 57, 0, 58, 58, 0, 59, 0, 60, 61, 0, 0, 0,
- 58, 62, 0, 63, 0, 64, 65, 0, 66, 67, 65, 68, 69, 0, 0, 67,
- 0, 70, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0,
- 74, 0, 75, 74, 0, 0, 0, 76, 74, 77, 78, 78, 79, 0, 0, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 0,
- 0, 0, 0, 0, 0, 83, 0, 0, 14, 15, 14, 15, 0, 0, 14, 15,
- 0, 0, 0, 33, 33, 33, 0, 84, 0, 0, 0, 0, 0, 0, 85, 0,
- 86, 86, 86, 0, 87, 0, 88, 88, 89, 1, 90, 1, 1, 91, 1, 1,
- 92, 93, 94, 1, 95, 1, 1, 1, 96, 97, 0, 98, 1, 1, 99, 1,
- 1, 100, 1, 1, 101, 102, 102, 102, 103, 5, 104, 5, 5, 105, 5, 5,
- 106, 107, 108, 5, 109, 5, 5, 5, 110, 111, 112, 113, 5, 5, 114, 5,
- 5, 115, 5, 5, 116, 117, 117, 118, 119, 120, 0, 0, 0, 121, 122, 123,
- 124, 125, 126, 127, 128, 129, 0, 14, 15, 130, 14, 15, 0, 45, 45, 45,
- 131, 131, 131, 131, 131, 131, 131, 131, 1, 1, 132, 1, 133, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 134, 1, 1, 135, 136, 1, 1, 1, 1, 1,
- 1, 1, 137, 1, 1, 1, 1, 1, 5, 5, 138, 5, 139, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 140, 5, 5, 141, 142, 5, 5, 5, 5, 5,
- 5, 5, 143, 5, 5, 5, 5, 5, 144, 144, 144, 144, 144, 144, 144, 144,
- 14, 15, 145, 146, 14, 15, 14, 15, 14, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 14, 15, 14, 15, 14, 15, 147, 14, 15, 14, 15, 14, 15, 14,
- 15, 14, 15, 14, 15, 14, 15, 148, 0, 149, 149, 149, 149, 149, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0,
- 0, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
- 150, 150, 150, 150, 150, 150, 150, 0, 151, 151, 151, 151, 151, 151, 151, 151,
- 151, 151, 151, 151, 151, 151, 0, 151, 0, 0, 0, 0, 0, 151, 0, 0,
- 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, 152, 152, 152,
- 153, 153, 153, 153, 153, 153, 153, 153, 118, 118, 118, 118, 118, 118, 0, 0,
- 123, 123, 123, 123, 123, 123, 0, 0, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 163, 163, 163, 163, 163,
- 163, 163, 163, 0, 0, 163, 163, 163, 0, 164, 0, 0, 0, 165, 0, 0,
- 0, 0, 0, 0, 0, 0, 166, 0, 167, 168, 14, 15, 14, 15, 14, 15,
- 14, 15, 14, 15, 14, 15, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0,
- 118, 118, 118, 118, 118, 118, 118, 118, 123, 123, 123, 123, 123, 123, 123, 123,
- 0, 118, 0, 118, 0, 118, 0, 118, 0, 123, 0, 123, 0, 123, 0, 123,
- 171, 171, 172, 172, 172, 172, 173, 173, 174, 174, 175, 175, 176, 176, 0, 0,
- 118, 118, 0, 177, 0, 0, 0, 0, 123, 123, 178, 178, 179, 0, 180, 0,
- 0, 0, 0, 177, 0, 0, 0, 0, 181, 181, 181, 181, 179, 0, 0, 0,
- 118, 118, 0, 182, 0, 0, 0, 0, 123, 123, 183, 183, 0, 0, 0, 0,
- 118, 118, 0, 184, 0, 126, 0, 0, 123, 123, 185, 185, 130, 0, 0, 0,
- 186, 186, 187, 187, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0,
- 0, 0, 189, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 192, 0, 193, 193, 193, 193, 193, 193, 193, 193,
- 194, 194, 194, 194, 194, 194, 194, 194, 0, 0, 0, 14, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 0, 0, 0, 0, 0, 0,
- 14, 15, 197, 198, 199, 200, 201, 14, 15, 14, 15, 14, 15, 202, 203, 204,
- 205, 0, 14, 15, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 206, 206,
- 0, 0, 0, 14, 15, 14, 15, 0, 0, 0, 14, 15, 0, 0, 0, 0,
- 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 0, 207,
- 0, 0, 0, 0, 0, 207, 0, 0, 14, 15, 208, 209, 14, 15, 14, 15,
- 0, 14, 15, 14, 15, 210, 14, 15, 0, 0, 0, 14, 15, 211, 0, 0,
- 14, 15, 14, 15, 149, 0, 14, 15, 14, 15, 212, 213, 214, 215, 212, 0,
- 216, 217, 218, 219, 14, 15, 14, 15, 0, 0, 14, 15, 150, 220, 221, 0,
- 0, 0, 0, 222, 0, 0, 0, 0, 223, 223, 223, 223, 223, 223, 223, 223,
- 0, 0, 0, 0, 0, 14, 15, 0, 224, 224, 224, 224, 224, 224, 224, 224,
- 225, 225, 225, 225, 225, 225, 225, 225, 224, 224, 224, 224, 0, 0, 0, 0,
- 225, 225, 225, 225, 0, 0, 0, 0, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 0, 0, 0, 0, 0, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 0, 0, 0, 0, 0, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
- 227, 227, 227, 227, 0, 0, 0, 0,
-};
+static RE_UINT8 re_xid_start_table_3[] = {
+ 0, 0, 0, 0, 254, 255, 255, 7, 0, 4, 32, 4, 255, 255, 127, 255,
+ 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, 0, 0, 223, 184,
+ 64, 215, 255, 255, 251, 255, 255, 255, 255, 255, 191, 255, 3, 252, 255, 255,
+ 255, 255, 254, 255, 255, 255, 127, 2, 255, 1, 0, 0, 0, 0, 255, 255,
+ 255, 135, 7, 0, 255, 7, 0, 0, 0, 192, 254, 255, 255, 255, 47, 0,
+ 96, 192, 0, 156, 0, 0, 253, 255, 255, 255, 0, 0, 0, 224, 255, 255,
+ 63, 0, 2, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 63, 4,
+ 16, 1, 0, 0, 255, 255, 255, 1, 255, 255, 223, 255, 255, 0, 0, 0,
+ 240, 255, 255, 255, 255, 255, 255, 35, 0, 0, 1, 255, 3, 0, 254, 255,
+ 225, 159, 249, 255, 255, 253, 197, 35, 0, 64, 0, 176, 3, 0, 3, 16,
+ 224, 135, 249, 255, 255, 253, 109, 3, 0, 0, 0, 94, 0, 0, 28, 0,
+ 224, 191, 251, 255, 255, 253, 237, 35, 0, 0, 1, 0, 3, 0, 0, 2,
+ 224, 159, 249, 255, 0, 0, 0, 176, 3, 0, 2, 0, 232, 199, 61, 214,
+ 24, 199, 255, 3, 224, 223, 253, 255, 255, 253, 255, 35, 0, 0, 0, 7,
+ 3, 0, 0, 0, 225, 223, 253, 255, 255, 253, 239, 35, 0, 0, 0, 64,
+ 3, 0, 6, 0, 240, 223, 253, 255, 255, 255, 255, 39, 0, 64, 112, 128,
+ 3, 0, 0, 252, 224, 255, 127, 252, 255, 255, 251, 47, 127, 0, 0, 0,
+ 254, 255, 255, 255, 255, 255, 5, 0, 214, 247, 255, 255, 175, 255, 5, 32,
+ 95, 0, 0, 240, 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 0, 0,
+ 0, 31, 0, 0, 255, 7, 0, 128, 0, 0, 63, 60, 98, 192, 225, 255,
+ 3, 64, 0, 0, 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61,
+ 255, 61, 255, 255, 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255,
+ 255, 255, 255, 7, 255, 255, 63, 63, 255, 159, 255, 255, 255, 199, 255, 1,
+ 255, 223, 3, 0, 255, 255, 3, 0, 255, 223, 1, 0, 255, 255, 15, 0,
+ 0, 0, 128, 16, 255, 5, 255, 255, 255, 255, 63, 0, 255, 255, 255, 127,
+ 255, 63, 31, 0, 255, 15, 255, 255, 255, 3, 0, 0, 255, 255, 127, 0,
+ 255, 255, 31, 0, 128, 0, 0, 0, 224, 255, 255, 255, 224, 15, 0, 0,
+ 248, 255, 255, 255, 1, 192, 0, 252, 63, 0, 0, 0, 15, 0, 0, 0,
+ 0, 224, 0, 252, 255, 255, 255, 63, 255, 1, 255, 255, 255, 255, 255, 231,
+ 0, 222, 111, 4, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15,
+ 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 63,
+ 80, 253, 255, 243, 224, 67, 0, 0, 255, 127, 255, 255, 31, 120, 12, 0,
+ 255, 128, 0, 0, 127, 127, 127, 127, 224, 0, 0, 0, 254, 3, 62, 31,
+ 255, 255, 127, 224, 255, 127, 0, 0, 255, 255, 255, 31, 255, 31, 255, 255,
+ 0, 12, 0, 0, 255, 127, 0, 128, 0, 0, 128, 255, 252, 255, 255, 255,
+ 255, 249, 255, 255, 252, 7, 0, 0, 0, 0, 224, 255, 187, 247, 255, 255,
+ 7, 0, 0, 0, 0, 0, 252, 104, 63, 0, 255, 255, 255, 255, 7, 0,
+ 0, 128, 0, 0, 223, 255, 0, 124, 247, 15, 0, 0, 255, 255, 127, 196,
+ 255, 255, 98, 62, 5, 0, 0, 56, 255, 7, 28, 0, 126, 126, 126, 0,
+ 127, 127, 255, 255, 255, 3, 255, 255, 15, 0, 255, 255, 127, 248, 255, 255,
+ 255, 255, 255, 15, 255, 63, 255, 255, 255, 255, 255, 3, 127, 0, 248, 160,
+ 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, 255, 255, 252, 255,
+ 0, 0, 255, 3, 0, 0, 138, 170, 192, 255, 255, 255, 252, 252, 252, 28,
+ 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, 255, 255, 1, 0,
+ 255, 7, 255, 255, 15, 255, 62, 0, 255, 255, 15, 255, 255, 0, 255, 255,
+ 63, 253, 255, 255, 255, 255, 191, 145, 255, 255, 55, 0, 255, 255, 255, 192,
+ 1, 0, 239, 254, 31, 0, 0, 0, 255, 3, 3, 0, 128, 0, 255, 255,
+ 255, 255, 255, 0, 144, 0, 255, 255, 255, 255, 71, 0, 30, 0, 0, 20,
+ 255, 255, 251, 255, 255, 15, 0, 0, 127, 189, 255, 191, 0, 0, 1, 224,
+ 128, 7, 0, 128, 176, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0,
+ 255, 7, 0, 1, 0, 0, 0, 128, 127, 242, 111, 255, 255, 255, 0, 128,
+ 2, 0, 0, 0, 255, 252, 255, 255, 10, 0, 0, 0, 1, 248, 255, 255,
+ 255, 255, 7, 4, 0, 0, 1, 240, 255, 3, 0, 32, 255, 253, 255, 255,
+ 0, 0, 252, 255, 127, 251, 255, 255, 64, 0, 0, 0, 191, 253, 255, 255,
+ 255, 3, 0, 1, 255, 63, 0, 0, 248, 255, 255, 224, 255, 7, 1, 0,
+ 11, 0, 0, 0, 0, 0, 7, 0, 240, 0, 255, 255, 255, 7, 255, 31,
+ 255, 1, 255, 3, 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255,
+ 191, 231, 223, 223, 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255,
+ 253, 255, 255, 247, 255, 31, 128, 63, 0, 64, 0, 0, 15, 8, 0, 0,
+ 150, 254, 247, 10, 132, 234, 150, 170, 150, 247, 247, 94, 255, 251, 255, 15,
+ 238, 251, 255, 15, 3, 0, 255, 255
+};
+
+RE_UINT32 re_get_xid_start(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_xid_start_table_1[field_2];
+ v = re_xid_start_table_2[(v << 5) | field_1];
+ v = re_xid_start_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}
-/* All_Cases: 2544 bytes. */
-
-static RE_AllCases re_all_cases_table[] = {
- {{ 0, 0, 0}},
- {{ 32, 0, 0}},
- {{ 32, 232, 0}},
- {{ 32, 8415, 0}},
- {{ 32, 300, 0}},
- {{ -32, 0, 0}},
- {{ -32, 199, 0}},
- {{ -32, 8383, 0}},
- {{ -32, 268, 0}},
- {{ 743, 775, 0}},
- {{ 32, 8294, 0}},
- {{ 7615, 0, 0}},
- {{ -32, 8262, 0}},
- {{ 121, 0, 0}},
- {{ 1, 0, 0}},
- {{ -1, 0, 0}},
- {{ -199, 0, 0}},
- {{ -232, 0, 0}},
- {{ -121, 0, 0}},
- {{ -300, -268, 0}},
- {{ 195, 0, 0}},
- {{ 210, 0, 0}},
- {{ 206, 0, 0}},
- {{ 205, 0, 0}},
- {{ 79, 0, 0}},
- {{ 202, 0, 0}},
- {{ 203, 0, 0}},
- {{ 207, 0, 0}},
- {{ 97, 0, 0}},
- {{ 211, 0, 0}},
- {{ 209, 0, 0}},
- {{ 163, 0, 0}},
- {{ 213, 0, 0}},
- {{ 130, 0, 0}},
- {{ 214, 0, 0}},
- {{ 218, 0, 0}},
- {{ 217, 0, 0}},
- {{ 219, 0, 0}},
- {{ 56, 0, 0}},
- {{ 1, 2, 0}},
- {{ -1, 1, 0}},
- {{ -2, -1, 0}},
- {{ -79, 0, 0}},
- {{ -97, 0, 0}},
- {{ -56, 0, 0}},
- {{ -130, 0, 0}},
- {{ 10795, 0, 0}},
- {{ -163, 0, 0}},
- {{ 10792, 0, 0}},
- {{ 10815, 0, 0}},
- {{ -195, 0, 0}},
- {{ 69, 0, 0}},
- {{ 71, 0, 0}},
- {{ 10783, 0, 0}},
- {{ 10780, 0, 0}},
- {{ 10782, 0, 0}},
- {{ -210, 0, 0}},
- {{ -206, 0, 0}},
- {{ -205, 0, 0}},
- {{ -202, 0, 0}},
- {{ -203, 0, 0}},
- {{ 42319, 0, 0}},
- {{ 42315, 0, 0}},
- {{ -207, 0, 0}},
- {{ 42280, 0, 0}},
- {{ 42308, 0, 0}},
- {{ -209, 0, 0}},
- {{ -211, 0, 0}},
- {{ 10743, 0, 0}},
- {{ 42305, 0, 0}},
- {{ 10749, 0, 0}},
- {{ -213, 0, 0}},
- {{ -214, 0, 0}},
- {{ 10727, 0, 0}},
- {{ -218, 0, 0}},
- {{ 42307, 0, 0}},
- {{ 42282, 0, 0}},
- {{ -69, 0, 0}},
- {{ -217, 0, 0}},
- {{ -71, 0, 0}},
- {{ -219, 0, 0}},
- {{ 42261, 0, 0}},
- {{ 42258, 0, 0}},
- {{ 84, 116, 7289}},
- {{ 116, 0, 0}},
- {{ 38, 0, 0}},
- {{ 37, 0, 0}},
- {{ 64, 0, 0}},
- {{ 63, 0, 0}},
- {{ 7235, 0, 0}},
- {{ 32, 62, 0}},
- {{ 32, 96, 0}},
- {{ 32, 57, 92}},
- {{ -84, 32, 7205}},
- {{ 32, 86, 0}},
- {{ -743, 32, 0}},
- {{ 32, 54, 0}},
- {{ 32, 80, 0}},
- {{ 31, 32, 0}},
- {{ 32, 47, 0}},
- {{ 32, 7549, 0}},
- {{ -38, 0, 0}},
- {{ -37, 0, 0}},
- {{ 7219, 0, 0}},
- {{ -32, 30, 0}},
- {{ -32, 64, 0}},
- {{ -32, 25, 60}},
- {{ -116, -32, 7173}},
- {{ -32, 54, 0}},
- {{ -775, -32, 0}},
- {{ -32, 22, 0}},
- {{ -32, 48, 0}},
- {{ -31, 1, 0}},
- {{ -32, -1, 0}},
- {{ -32, 15, 0}},
- {{ -32, 7517, 0}},
- {{ -64, 0, 0}},
- {{ -63, 0, 0}},
- {{ 8, 0, 0}},
- {{ -62, -30, 0}},
- {{ -57, -25, 35}},
- {{ -47, -15, 0}},
- {{ -54, -22, 0}},
- {{ -8, 0, 0}},
- {{ -86, -54, 0}},
- {{ -80, -48, 0}},
- {{ 7, 0, 0}},
- {{ -116, 0, 0}},
- {{ -92, -60, -35}},
- {{ -96, -64, 0}},
- {{ -7, 0, 0}},
- {{ 80, 0, 0}},
- {{ 32, 6254, 0}},
- {{ 32, 6253, 0}},
- {{ 32, 6244, 0}},
- {{ 32, 6242, 0}},
- {{ 32, 6242, 6243}},
- {{ 32, 6236, 0}},
- {{ -32, 6222, 0}},
- {{ -32, 6221, 0}},
- {{ -32, 6212, 0}},
- {{ -32, 6210, 0}},
- {{ -32, 6210, 6211}},
- {{ -32, 6204, 0}},
- {{ -80, 0, 0}},
- {{ 1, 6181, 0}},
- {{ -1, 6180, 0}},
- {{ 15, 0, 0}},
- {{ -15, 0, 0}},
- {{ 48, 0, 0}},
- {{ -48, 0, 0}},
- {{ 7264, 0, 0}},
- {{ 3008, 0, 0}},
- {{ 38864, 0, 0}},
- {{ -6254, -6222, 0}},
- {{ -6253, -6221, 0}},
- {{ -6244, -6212, 0}},
- {{ -6242, -6210, 0}},
- {{ -6242, -6210, 1}},
- {{ -6243, -6211, -1}},
- {{ -6236, -6204, 0}},
- {{ -6181, -6180, 0}},
- {{ 35266, 35267, 0}},
- {{ -3008, 0, 0}},
- {{ 35332, 0, 0}},
- {{ 3814, 0, 0}},
- {{ 35384, 0, 0}},
- {{ 1, 59, 0}},
- {{ -1, 58, 0}},
- {{ -59, -58, 0}},
- {{ -7615, 0, 0}},
- {{ 74, 0, 0}},
- {{ 86, 0, 0}},
- {{ 100, 0, 0}},
- {{ 128, 0, 0}},
- {{ 112, 0, 0}},
- {{ 126, 0, 0}},
- {{ 9, 0, 0}},
- {{ -74, 0, 0}},
- {{ -9, 0, 0}},
- {{ -7289, -7205, -7173}},
- {{ -86, 0, 0}},
- {{ -7235, 0, 0}},
- {{ -100, 0, 0}},
- {{ -7219, 0, 0}},
- {{ -112, 0, 0}},
- {{ -128, 0, 0}},
- {{ -126, 0, 0}},
- {{ -7549, -7517, 0}},
- {{ -8415, -8383, 0}},
- {{ -8294, -8262, 0}},
- {{ 28, 0, 0}},
- {{ -28, 0, 0}},
- {{ 16, 0, 0}},
- {{ -16, 0, 0}},
- {{ 26, 0, 0}},
- {{ -26, 0, 0}},
- {{-10743, 0, 0}},
- {{ -3814, 0, 0}},
- {{-10727, 0, 0}},
- {{-10795, 0, 0}},
- {{-10792, 0, 0}},
- {{-10780, 0, 0}},
- {{-10749, 0, 0}},
- {{-10783, 0, 0}},
- {{-10782, 0, 0}},
- {{-10815, 0, 0}},
- {{ -7264, 0, 0}},
- {{-35266, 1, 0}},
- {{-35267, -1, 0}},
- {{-35332, 0, 0}},
- {{-42280, 0, 0}},
- {{-42308, 0, 0}},
- {{-42319, 0, 0}},
- {{-42315, 0, 0}},
- {{-42305, 0, 0}},
- {{-42258, 0, 0}},
- {{-42282, 0, 0}},
- {{-42261, 0, 0}},
- {{ 928, 0, 0}},
- {{-42307, 0, 0}},
- {{-35384, 0, 0}},
- {{ -928, 0, 0}},
- {{-38864, 0, 0}},
- {{ 40, 0, 0}},
- {{ -40, 0, 0}},
- {{ 34, 0, 0}},
- {{ -34, 0, 0}},
+/* All cases. */
+static RE_UINT8 re_all_cases_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10,
+ 2, 11, 2, 12, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-/* All_Cases: 2736 bytes. */
-
-int re_get_all_cases(RE_UINT32 ch, RE_UINT32* codepoints) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_AllCases* all_cases;
- int count;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_all_cases_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_all_cases_stage_2[pos + f] << 5;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_all_cases_stage_3[pos + f] << 3;
- value = re_all_cases_stage_4[pos + code];
-
- all_cases = &re_all_cases_table[value];
-
- codepoints[0] = ch;
- count = 1;
-
- while (count < RE_MAX_CASES && all_cases->diffs[count - 1] != 0) {
- codepoints[count] = (RE_UINT32)((RE_INT32)ch + all_cases->diffs[count -
- 1]);
- ++count;
- }
-
- return count;
+static RE_UINT8 re_all_cases_table_2[] = {
+ 0, 0, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 6, 14, 15, 16, 17, 0, 0, 0, 0, 0, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 6, 29, 6, 6, 30, 31, 32, 33, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39,
+ 0, 0, 0, 0, 40, 36, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0,
+ 6, 6, 6, 43, 44, 6, 6, 6, 45, 46, 47, 48, 46, 49, 50, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 55, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 59, 60, 61, 62, 6, 6, 6, 63, 34, 64, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 65, 66, 67, 0, 0, 0, 0, 68, 6, 69, 70, 71, 72, 73,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 75, 76, 77, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0,
+ 79, 80, 81, 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 85, 86, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT8 re_all_cases_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 134, 1, 3, 1, 1, 1, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 83,
+ 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 29,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 133, 15, 16, 16, 16, 16, 16, 16, 0, 23, 23, 25, 25, 23, 23, 27,
+ 27, 23, 23, 25, 25, 23, 23, 28, 28, 0, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 29, 23, 23, 25, 25, 23, 23, 136,
+ 53, 30, 16, 16, 16, 16, 30, 28, 28, 31, 32, 25, 25, 0, 33, 34,
+ 35, 23, 23, 36, 37, 47, 38, 38, 16, 16, 51, 0, 36, 39, 49, 40,
+ 16, 16, 16, 16, 16, 16, 41, 28, 28, 42, 0, 0, 16, 16, 41, 43,
+ 43, 44, 45, 25, 25, 23, 23, 46, 16, 16, 0, 0, 16, 16, 0, 48,
+ 0, 0, 0, 0, 155, 155, 24, 149, 149, 17, 156, 156, 26, 23, 23, 43,
+ 43, 23, 23, 25, 25, 23, 23, 28, 28, 23, 23, 25, 25, 33, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 150, 150, 18, 16, 16, 47, 48, 16, 16, 16, 16, 16, 16, 16, 16,
+ 49, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 50, 25, 25, 51, 52, 108,
+ 106, 23, 23, 53, 54, 55, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 106, 104, 107, 30, 30, 0, 31, 32, 0, 34, 0, 35, 112, 0, 0, 0,
+ 36, 113, 0, 37, 0, 110, 111, 0, 38, 38, 115, 101, 114, 0, 0, 36,
+ 0, 105, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0,
+ 41, 0, 120, 42, 0, 0, 0, 117, 41, 54, 44, 45, 55, 0, 0, 0,
+ 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 116, 0,
+ 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 0, 0, 16, 16, 0, 0, 0, 75, 76, 76, 0, 56,
+ 0, 0, 0, 0, 0, 0, 57, 0, 58, 59, 58, 0, 60, 0, 61, 62,
+ 0, 1, 6, 1, 1, 7, 1, 1, 8, 142, 10, 1, 145, 1, 1, 1,
+ 63, 64, 0, 151, 65, 65, 66, 65, 65, 67, 65, 65, 57, 58, 59, 58,
+ 0, 1, 6, 1, 1, 7, 1, 1, 8, 9, 10, 1, 11, 1, 1, 1,
+ 63, 64, 151, 19, 65, 65, 66, 65, 65, 67, 65, 65, 60, 61, 62, 71,
+ 138, 140, 0, 0, 0, 159, 157, 71, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 144, 158, 74, 56, 141, 139, 0, 28, 28, 74, 16, 16, 0, 75, 76, 76,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 1, 1, 12, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1,
+ 65, 68, 69, 65, 65, 65, 65, 65, 65, 65, 70, 65, 65, 65, 65, 65,
+ 1, 1, 12, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1,
+ 65, 68, 69, 65, 65, 65, 65, 65, 65, 65, 70, 65, 65, 65, 65, 65,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 16, 16, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 28, 23, 23, 25, 25, 23, 23, 28, 28, 23, 23, 25, 25, 23, 23, 28,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 78, 78, 78, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 78, 78, 78, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 80, 80, 80, 80, 80, 80, 0, 80, 0, 0, 0, 0, 0, 80, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 82, 82, 82,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 0, 0,
+ 146, 147, 148, 161, 162, 163, 164, 152, 154, 0, 0, 0, 0, 0, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 102, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 21, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 153, 0, 0, 83, 0,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 0, 0,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 0, 0,
+ 0, 81, 0, 81, 0, 81, 0, 81, 0, 81, 0, 81, 0, 81, 0, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 84, 84, 85, 85, 86, 86, 87, 87, 90, 90, 88, 88, 75, 75, 0, 0,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 0, 28, 0, 0, 0, 0, 81, 81, 84, 84, 28, 0, 143, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 85, 85, 86, 86, 28, 0, 0, 0,
+ 81, 81, 0, 0, 0, 0, 0, 0, 81, 81, 87, 87, 0, 0, 0, 0,
+ 81, 81, 0, 0, 0, 89, 0, 0, 81, 81, 88, 88, 89, 0, 0, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 90, 90, 75, 75, 28, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 135, 137, 0, 0, 0, 0,
+ 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 0, 0, 0, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 93, 93, 94, 94, 95, 95, 94, 94, 93, 93,
+ 96, 96, 97, 97, 96, 96, 98, 98, 57, 57, 99, 99, 57, 57, 98, 98,
+ 93, 93, 94, 94, 95, 95, 94, 94, 93, 93, 96, 96, 97, 97, 96, 96,
+ 98, 98, 57, 57, 99, 99, 57, 57, 98, 98, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0,
+ 16, 16, 101, 102, 103, 50, 52, 28, 28, 23, 23, 25, 25, 104, 105, 106,
+ 107, 0, 16, 16, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 108, 106,
+ 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 25, 25, 23, 23, 0,
+ 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 0, 80, 0, 0, 0, 0, 0, 80, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 154, 22, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0,
+ 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 25, 25, 109, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 25, 25, 110, 0, 0,
+ 16, 16, 16, 16, 77, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 111, 112, 113, 114, 115, 0,
+ 116, 117, 118, 119, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 0, 0, 16, 16, 77, 120, 121, 28, 28, 23, 23, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, 0,
+ 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127,
+ 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128,
+ 129, 129, 129, 129, 129, 129, 129, 129, 126, 126, 126, 126, 126, 126, 126, 126,
+ 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126,
+ 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128,
+ 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127,
+ 126, 126, 126, 126, 0, 0, 0, 0, 129, 129, 129, 129, 129, 129, 129, 129,
+ 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126,
+ 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 0, 0, 0, 0,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130, 131, 131,
+ 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130, 132, 132,
+ 72, 72, 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130,
+ 131, 131, 130, 130, 98, 98, 130, 130, 99, 99, 130, 130, 98, 98, 130, 130,
+ 132, 132, 72, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_AllCases re_all_cases_table_4[] = {
+ { 0, 0, 0},
+ { 32, 0, 0},
+ { 32, 304, 0},
+ { 32, 8490, 0},
+ { 32, 383, 0},
+ { 32, 8491, 0},
+ { 32, 976, 0},
+ { 32, 1013, 0},
+ { 32, 977, 1012},
+ { 252, 921, 8126},
+ { 32, 1008, 0},
+ { 777, 924, 0},
+ { 32, 7296, 0},
+ { 32, 7297, 0},
+ { 32, 7298, 0},
+ { 376, 0, 0},
+ { 1, 0, 0},
+ { 14, 456, 0},
+ { 2, 498, 0},
+ { 96, 962, 0},
+ { 1, 7303, 0},
+ { 1, 7835, 0},
+ {47811, 42570, 0},
+ { 3, 0, 0},
+ { 2, 453, 0},
+ { 7, 0, 0},
+ { 6, 459, 0},
+ { 127, 0, 0},
+ { 15, 0, 0},
+ { 391, 0, 0},
+ { 978, 0, 0},
+ { 991, 0, 0},
+ { 989, 0, 0},
+ { 83, 0, 0},
+ { 982, 0, 0},
+ { 971, 0, 0},
+ { 1011, 0, 0},
+ { 1015, 0, 0},
+ { 1023, 0, 0},
+ { 1007, 0, 0},
+ { 1002, 0, 0},
+ { 806, 0, 0},
+ { 810, 0, 0},
+ { 31, 0, 0},
+ { 827, 0, 0},
+ { 825, 0, 0},
+ { 805, 0, 0},
+ { 99, 0, 0},
+ { 72, 0, 0},
+ { 958, 0, 0},
+ {11871, 0, 0},
+ { 935, 0, 0},
+ {11864, 0, 0},
+ { 963, 0, 0},
+ { 205, 0, 0},
+ { 201, 0, 0},
+ { 140, 0, 0},
+ { 42, 0, 0},
+ { 37, 0, 0},
+ { 39, 0, 0},
+ { 64, 0, 0},
+ { 67, 0, 0},
+ { 65, 0, 0},
+ { 96, 982, 0},
+ { 96, 1009, 0},
+ { 96, 0, 0},
+ { 96, 981, 0},
+ { 96, 8486, 0},
+ { 96, 7299, 0},
+ { 96, 7300, 7301},
+ { 96, 7302, 0},
+ { 24, 0, 0},
+ { 98, 0, 0},
+ { 48, 0, 0},
+ { 11, 0, 0},
+ { 134, 0, 0},
+ { 130, 0, 0},
+ { 80, 0, 0},
+ { 208, 0, 0},
+ {15776, 0, 0},
+ {15840, 0, 0},
+ { 8, 0, 0},
+ { 3136, 0, 0},
+ { 7745, 0, 0},
+ { 202, 0, 0},
+ { 186, 0, 0},
+ { 190, 0, 0},
+ { 172, 0, 0},
+ { 144, 0, 0},
+ { 9, 0, 0},
+ { 128, 0, 0},
+ { 124, 0, 0},
+ { 16, 0, 0},
+ { 102, 0, 0},
+ { 106, 0, 0},
+ { 110, 0, 0},
+ { 26, 0, 0},
+ { 30, 0, 0},
+ { 38, 0, 0},
+ { 46, 0, 0},
+ { 112, 0, 0},
+ {11785, 0, 0},
+ {12574, 0, 0},
+ {11801, 0, 0},
+ {11836, 0, 0},
+ {11807, 0, 0},
+ {11839, 0, 0},
+ {11810, 0, 0},
+ {11841, 0, 0},
+ {47620, 0, 0},
+ {42472, 0, 0},
+ {42444, 0, 0},
+ {42487, 0, 0},
+ {42445, 0, 0},
+ {42433, 0, 0},
+ {42436, 0, 0},
+ {42286, 0, 0},
+ {42294, 0, 0},
+ {42287, 0, 0},
+ { 3296, 0, 0},
+ {42311, 0, 0},
+ {47688, 0, 0},
+ {47312, 0, 0},
+ {47152, 0, 0},
+ {47184, 0, 0},
+ {47216, 0, 0},
+ { 40, 0, 0},
+ { 56, 0, 0},
+ { 88, 0, 0},
+ { 104, 0, 0},
+ { 34, 0, 0},
+ { 62, 0, 0},
+ { 94, 0, 0},
+ { 345, 0, 0},
+ { 32, 305, 0},
+ { 8545, 107, 0},
+ { 300, 115, 0},
+ { 8686, 229, 0},
+ { 66, 946, 0},
+ { 96, 949, 0},
+ { 73, 952, 1012},
+ { 108, 952, 977},
+ { 220, 953, 8126},
+ { 7419, 921, 953},
+ { 106, 954, 0},
+ { 809, 956, 0},
+ { 6290, 1074, 0},
+ { 6293, 1076, 0},
+ { 6300, 1086, 0},
+ { 15, 457, 0},
+ { 3, 499, 0},
+ { 97, 963, 0},
+ { 6373, 1123, 0},
+ { 251, 7777, 0},
+ {47810, 42571, 0},
+ { 1, 454, 0},
+ { 1, 460, 0},
+ { 118, 960, 0},
+ { 80, 961, 0},
+ { 115, 966, 0},
+ { 8847, 969, 0},
+ { 6306, 1089, 0},
+ { 6310, 1090, 7301},
+ { 6311, 1090, 7300},
+ { 6316, 1098, 0}
+};
+
+int re_get_all_cases(RE_UINT32 codepoint, RE_UINT32* cases) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_all_cases_table_1[field_2];
+ v = re_all_cases_table_2[(v << 5) | field_1];
+ v = re_all_cases_table_3[(v << 5) | field_0];
+
+ cases[0] = codepoint;
+
+ if (re_all_cases_table_4[v].delta == 0)
+ return 1;
+
+ cases[1] = codepoint ^ re_all_cases_table_4[v].delta;
+
+ if (re_all_cases_table_4[v].others[0] == 0)
+ return 2;
+
+ cases[2] = re_all_cases_table_4[v].others[0];
+
+ if (re_all_cases_table_4[v].others[1] == 0)
+ return 3;
+
+ cases[3] = re_all_cases_table_4[v].others[1];
+
+ return 4;
}
-/* Simple_Case_Folding. */
+/* Simple case folding. */
+static RE_UINT8 re_simple_folding_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10,
+ 2, 11, 2, 12, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+};
-static RE_UINT8 re_simple_case_folding_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
+static RE_UINT8 re_simple_folding_table_2[] = {
+ 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
+ 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 33, 36, 37, 38,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 41, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 45, 0, 46, 4, 4, 4, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 48, 49, 0, 0, 0, 0, 50, 4, 51, 52, 53, 54, 55,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0,
+ 60, 61, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 69, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_simple_case_folding_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 10, 11,
- 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, 6, 17, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 18,
- 6, 6, 6, 6, 19, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 22, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+static RE_UINT8 re_simple_folding_table_3[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 66, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 65, 0, 1, 0, 1, 0, 1, 0, 0, 3, 0, 5, 0, 3, 0, 49,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 67, 3, 0, 5, 0, 3, 0, 64,
+ 0, 78, 1, 0, 1, 0, 78, 10, 0, 81, 80, 5, 0, 0, 36, 79,
+ 77, 3, 0, 84, 85, 0, 86, 86, 1, 0, 0, 0, 84, 83, 0, 82,
+ 1, 0, 1, 0, 1, 0, 70, 10, 0, 71, 0, 0, 1, 0, 70, 17,
+ 0, 73, 72, 5, 0, 3, 0, 69, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 3, 0, 9, 1, 0, 4, 5, 0, 3, 0, 17,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 2, 1, 0, 1, 0, 41, 32, 1, 0, 1, 0, 1, 0, 1, 0,
+ 75, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 110, 5, 0, 74, 109, 0,
+ 0, 3, 0, 76, 60, 58, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 53,
+ 0, 0, 0, 0, 0, 0, 24, 0, 20, 22, 20, 0, 29, 0, 31, 30,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 39, 39, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 40, 44, 0, 0, 0, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 33, 26, 0, 0, 34, 29, 0, 10, 0, 8, 1, 0, 0, 52, 51, 51,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 10, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 3, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 113, 113, 113, 113, 113, 113, 0, 113, 0, 0, 0, 0, 0, 113, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 89, 90, 91, 92, 93, 94, 95, 96, 130, 0, 0, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 0, 0, 87, 87, 87,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 62, 0, 0, 98, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 59, 59, 10, 0, 97, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 57, 57, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 55, 55, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 54, 54, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 52, 52, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 99, 100, 0, 0, 0, 0,
+ 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 42, 42, 45, 45, 46, 46, 45, 45, 42, 42,
+ 15, 15, 16, 16, 15, 15, 21, 21, 24, 24, 25, 25, 24, 24, 21, 21,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 102, 111, 103, 0, 0, 10, 0, 3, 0, 5, 0, 106, 104, 107,
+ 105, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 108, 107,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 5, 0, 128, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 5, 0, 122, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 120, 123, 121, 118, 119, 0,
+ 114, 116, 115, 88, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 35, 117, 129, 10, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 0, 0, 0, 0,
+ 23, 23, 23, 23, 23, 23, 23, 23, 27, 27, 27, 27, 27, 27, 27, 27,
+ 23, 23, 23, 23, 23, 23, 23, 23, 37, 37, 37, 37, 37, 37, 37, 37,
+ 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 43, 43, 43, 43, 43, 43, 43, 37, 37, 37, 37, 37, 37, 37, 37,
+ 23, 23, 23, 23, 23, 23, 23, 23, 27, 27, 27, 27, 27, 27, 27, 27,
+ 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 19, 21, 21, 19, 19, 25, 25, 19, 19, 21, 21, 19, 19, 28, 28,
+ 19, 19, 21, 21, 19, 19, 25, 25, 19, 19, 21, 21, 19, 19, 38, 38,
+ 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_UINT16 re_simple_folding_table_4[] = {
+ 0, 1, 2, 3, 6, 7, 8, 9,
+ 11, 14, 15, 16, 19, 22, 24, 26,
+ 30, 31, 32, 34, 37, 38, 39, 40,
+ 42, 46, 48, 56, 62, 64, 65, 67,
+ 72, 74, 76, 80, 83, 88, 94, 96,
+ 98, 99, 102, 104, 105, 106, 110, 112,
+ 124, 127, 128, 130, 134, 140, 144, 172,
+ 186, 190, 201, 202, 205, 208, 250, 252,
+ 268, 345, 376, 391, 777, 805, 806, 810,
+ 825, 827, 935, 958, 963, 971, 978, 982,
+ 989, 991, 1002, 1007, 1011, 1015, 1023, 3136,
+ 3296, 6322, 6325, 6332, 6338, 6342, 6343, 6348,
+ 6372, 7175, 7745, 8513, 8654, 8943, 11785, 11801,
+ 11807, 11810, 11836, 11839, 11841, 11864, 11871, 12574,
+ 15776, 15840, 42286, 42287, 42294, 42311, 42433, 42436,
+ 42444, 42445, 42472, 42487, 47152, 47184, 47216, 47312,
+ 47620, 47688, 47811
+};
+
+RE_UINT32 re_get_simple_case_folding(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_simple_folding_table_1[field_2];
+ v = re_simple_folding_table_2[(v << 5) | field_1];
+ v = re_simple_folding_table_3[(v << 5) | field_0];
+
+ return codepoint ^ re_simple_folding_table_4[v];
+}
+
+/* Full case folding. */
+static RE_UINT8 re_full_folding_table_1[] = {
+ 0, 1, 2, 2, 3, 2, 2, 4, 5, 6, 2, 7, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
+ 2, 12, 2, 13, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
};
-static RE_UINT8 re_simple_case_folding_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 2, 2, 5, 5, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 7, 8, 8, 7, 6, 6, 6, 6, 6, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 8, 20, 6, 6, 21, 6,
- 6, 6, 6, 6, 22, 6, 23, 24, 25, 6, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_full_folding_table_2[] = {
+ 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11,
+ 4, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 4, 22, 4, 23, 4, 4, 24, 25, 0, 26, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 27, 28,
- 29, 30, 1, 2, 31, 32, 0, 0, 33, 34, 35, 6, 6, 6, 36, 37,
- 38, 38, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6,
- 39, 7, 6, 6, 6, 6, 6, 6, 40, 41, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 42, 43, 43, 43, 44, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29,
+ 0, 0, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 4, 4, 32, 4, 4, 4, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 45, 45, 45, 45, 46, 47, 0, 0, 0, 0, 0, 0,
+ 46, 47, 0, 48, 4, 4, 4, 49, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 51, 51, 51, 51, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 53, 54, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 0, 55, 0, 48, 0, 55, 0, 55, 0, 48, 0, 56, 0, 55, 0, 0,
- 0, 55, 0, 55, 0, 55, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61,
- 0, 0, 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, 65, 65, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 50, 51, 0, 0, 0, 0, 52, 4, 53, 54, 55, 56, 57,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 67, 68, 68, 68, 0, 0, 0, 0, 0, 0,
- 43, 43, 43, 43, 43, 44, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 73, 33, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 53, 0, 0,
- 6, 6, 6, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 6, 7, 6, 6, 6, 6, 6, 6, 6, 0, 74,
- 6, 75, 27, 6, 6, 76, 77, 6, 78, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79,
- 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 81, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 82, 82, 82, 82, 82, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0,
+ 63, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 84, 84, 84, 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-static RE_UINT8 re_simple_case_folding_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 0, 3, 0, 3, 0,
- 0, 3, 0, 3, 0, 3, 0, 3, 4, 3, 0, 3, 0, 3, 0, 5,
- 0, 6, 3, 0, 3, 0, 7, 3, 0, 8, 8, 3, 0, 0, 9, 10,
- 11, 3, 0, 8, 12, 0, 13, 14, 3, 0, 0, 0, 13, 15, 0, 16,
- 3, 0, 3, 0, 3, 0, 17, 3, 0, 17, 0, 0, 3, 0, 17, 3,
- 0, 18, 18, 3, 0, 3, 0, 19, 3, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 20, 3, 0, 20, 3, 0, 20, 3, 0, 3, 0, 3,
- 0, 3, 0, 3, 0, 0, 3, 0, 0, 20, 3, 0, 3, 0, 21, 22,
- 23, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 24, 3, 0, 25, 26, 0, 0, 3, 0, 27, 28, 29, 3, 0,
- 0, 0, 0, 0, 0, 30, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0,
- 32, 32, 32, 0, 33, 0, 34, 34, 1, 1, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 38, 39, 0,
- 40, 41, 0, 0, 42, 43, 0, 3, 0, 44, 3, 0, 0, 23, 23, 23,
- 45, 45, 45, 45, 45, 45, 45, 45, 3, 0, 0, 0, 0, 0, 0, 0,
- 46, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0,
- 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 0, 0, 48, 0, 0,
- 49, 49, 49, 49, 49, 49, 0, 0, 50, 51, 52, 53, 53, 54, 55, 56,
- 57, 0, 0, 0, 0, 0, 0, 0, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 0, 0, 58, 58, 58, 3, 0, 3, 0, 3, 0, 0, 0,
- 0, 0, 0, 59, 0, 0, 60, 0, 49, 49, 49, 49, 49, 49, 49, 49,
- 0, 49, 0, 49, 0, 49, 0, 49, 49, 49, 61, 61, 62, 0, 63, 0,
- 64, 64, 64, 64, 62, 0, 0, 0, 49, 49, 65, 65, 0, 0, 0, 0,
- 49, 49, 66, 66, 44, 0, 0, 0, 67, 67, 68, 68, 62, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 71, 0, 0, 0, 0,
- 0, 0, 72, 0, 0, 0, 0, 0, 73, 73, 73, 73, 73, 73, 73, 73,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 74,
- 74, 74, 74, 74, 74, 74, 74, 74, 3, 0, 75, 76, 77, 0, 0, 3,
- 0, 3, 0, 3, 0, 78, 79, 80, 81, 0, 3, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 82, 82, 0, 0, 0, 3, 0, 3, 0, 0,
- 0, 3, 0, 3, 0, 83, 3, 0, 0, 0, 0, 3, 0, 84, 0, 0,
- 3, 0, 85, 86, 87, 88, 85, 0, 89, 90, 91, 92, 3, 0, 3, 0,
- 0, 0, 3, 0, 41, 93, 94, 0, 95, 95, 95, 95, 95, 95, 95, 95,
- 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 0, 0, 0,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 0, 0, 0,
-};
-
-/* Simple_Case_Folding: 1848 bytes. */
-
-static RE_INT32 re_simple_case_folding_table[] = {
- 0,
- 32,
- 775,
- 1,
- -121,
- -268,
- 210,
- 206,
- 205,
- 79,
- 202,
- 203,
- 207,
- 211,
- 209,
- 213,
- 214,
- 218,
- 217,
- 219,
- 2,
- -97,
- -56,
- -130,
- 10795,
- -163,
- 10792,
- -195,
- 69,
- 71,
- 116,
- 38,
- 37,
- 64,
- 63,
- 8,
- -30,
- -25,
- -15,
- -22,
- -54,
- -48,
- -60,
- -64,
- -7,
- 80,
- 15,
- 48,
- 7264,
- -8,
- -6222,
- -6221,
- -6212,
- -6210,
- -6211,
- -6204,
- -6180,
- 35267,
- -3008,
- -58,
- -7615,
- -74,
- -9,
- -7173,
- -86,
- -100,
- -112,
- -128,
- -126,
- -7517,
- -8383,
- -8262,
- 28,
- 16,
- 26,
- -10743,
- -3814,
- -10727,
- -10780,
- -10749,
- -10783,
- -10782,
- -10815,
- -35332,
- -42280,
- -42308,
- -42319,
- -42315,
- -42305,
- -42258,
- -42282,
- -42261,
- 928,
- -42307,
- -35384,
- -38864,
- 40,
- 34,
-};
-
-/* Simple_Case_Folding: 392 bytes. */
-
-RE_UINT32 re_get_simple_case_folding(RE_UINT32 ch) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_INT32 diff;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_simple_case_folding_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_simple_case_folding_stage_2[pos + f] << 5;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_simple_case_folding_stage_3[pos + f] << 3;
- value = re_simple_case_folding_stage_4[pos + code];
-
- diff = re_simple_case_folding_table[value];
-
- return (RE_UINT32)((RE_INT32)ch + diff);
-}
-
-/* Full_Case_Folding. */
-
-static RE_UINT8 re_full_case_folding_stage_1[] = {
- 0, 1, 2, 2, 2, 3, 2, 4, 5, 2, 2, 6, 2, 2, 2, 7,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
-};
-
-static RE_UINT8 re_full_case_folding_stage_2[] = {
- 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 10, 11,
- 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, 6, 17, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 18, 6, 6, 6, 19,
- 6, 6, 6, 6, 20, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 22, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static RE_UINT8 re_full_case_folding_stage_3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 2, 2, 5, 6, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 8, 9, 9, 10, 7, 7, 7, 7, 7, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 9, 22, 7, 7, 23, 7,
- 7, 7, 7, 7, 24, 7, 25, 26, 27, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 30,
- 31, 32, 33, 2, 34, 35, 36, 0, 37, 38, 39, 7, 7, 7, 40, 41,
- 42, 42, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7,
- 43, 44, 7, 7, 7, 7, 7, 7, 45, 46, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 47, 48, 48, 48, 49, 0, 0, 0, 0, 0,
- 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 51, 51, 51, 51, 52, 53, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 55, 56, 57, 57, 57, 57, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 59, 60, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 0, 61, 0, 54, 0, 61, 0, 61, 0, 54, 62, 63, 0, 61, 0, 0,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 0, 0, 0, 0, 80, 81, 82, 0, 0, 0, 0, 0, 83, 83, 0, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 85, 86, 86, 86, 0, 0, 0, 0, 0, 0,
- 48, 48, 48, 48, 48, 49, 0, 0, 0, 0, 0, 0, 87, 88, 89, 90,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 25, 91, 37, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 92, 0, 0,
- 7, 7, 7, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 7, 44, 7, 7, 7, 7, 7, 7, 7, 0, 93,
- 7, 94, 29, 7, 7, 95, 96, 7, 97, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static RE_UINT8 re_full_folding_table_3[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 101, 101, 101, 101, 102, 0, 0, 0, 0, 0,
+ 0, 18, 18, 18, 18, 18, 18, 18, 18, 80, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 103, 103, 103, 103, 103, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 105, 105, 105, 105, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static RE_UINT8 re_full_case_folding_stage_4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 3, 4, 0, 4, 0, 4, 0, 4, 0,
- 5, 0, 4, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 4, 0, 4,
- 0, 6, 4, 0, 4, 0, 4, 0, 7, 4, 0, 4, 0, 4, 0, 8,
- 0, 9, 4, 0, 4, 0, 10, 4, 0, 11, 11, 4, 0, 0, 12, 13,
- 14, 4, 0, 11, 15, 0, 16, 17, 4, 0, 0, 0, 16, 18, 0, 19,
- 4, 0, 4, 0, 4, 0, 20, 4, 0, 20, 0, 0, 4, 0, 20, 4,
- 0, 21, 21, 4, 0, 4, 0, 22, 4, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 23, 4, 0, 23, 4, 0, 23, 4, 0, 4, 0, 4,
- 0, 4, 0, 4, 0, 0, 4, 0, 24, 23, 4, 0, 4, 0, 25, 26,
- 27, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 28, 4, 0, 29, 30, 0, 0, 4, 0, 31, 32, 33, 4, 0,
- 0, 0, 0, 0, 0, 34, 0, 0, 4, 0, 4, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0,
- 36, 36, 36, 0, 37, 0, 38, 38, 39, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 0, 0, 0, 44, 45, 0,
- 46, 47, 0, 0, 48, 49, 0, 4, 0, 50, 4, 0, 0, 27, 27, 27,
- 51, 51, 51, 51, 51, 51, 51, 51, 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 4, 0, 4, 0, 52, 4, 0, 4, 0, 4, 0, 4,
- 0, 4, 0, 4, 0, 4, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 0,
- 0, 0, 0, 0, 0, 0, 0, 54, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, 0, 0, 0, 55, 0, 0,
- 56, 56, 56, 56, 56, 56, 0, 0, 57, 58, 59, 60, 60, 61, 62, 63,
- 64, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 0, 0, 65, 65, 65, 4, 0, 4, 0, 4, 0, 66, 67,
- 68, 69, 70, 71, 0, 0, 72, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 73, 0, 74, 0, 75, 0, 76, 0, 0, 56, 0, 56, 0, 56, 0, 56,
- 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78,
- 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80,
- 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82,
- 0, 0, 83, 84, 85, 0, 86, 87, 56, 56, 88, 88, 89, 0, 90, 0,
- 0, 0, 91, 92, 93, 0, 94, 95, 96, 96, 96, 96, 97, 0, 0, 0,
- 0, 0, 98, 99, 0, 0, 100, 101, 56, 56, 102, 102, 0, 0, 0, 0,
- 0, 0, 103, 104, 105, 0, 106, 107, 56, 56, 108, 108, 50, 0, 0, 0,
- 0, 0, 109, 110, 111, 0, 112, 113, 114, 114, 115, 115, 116, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 119, 0, 0, 0, 0,
- 0, 0, 120, 0, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 4, 0, 123, 124, 125, 0, 0, 4,
- 0, 4, 0, 4, 0, 126, 127, 128, 129, 0, 4, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 130, 130, 0, 0, 0, 4, 0, 4, 0, 0,
- 4, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 4, 0, 131, 4, 0,
- 0, 0, 0, 4, 0, 132, 0, 0, 4, 0, 133, 134, 135, 136, 133, 0,
- 137, 138, 139, 140, 4, 0, 4, 0, 0, 0, 4, 0, 47, 141, 142, 0,
- 143, 143, 143, 143, 143, 143, 143, 143, 144, 145, 146, 147, 148, 149, 150, 0,
- 0, 0, 0, 151, 152, 153, 154, 155, 156, 156, 156, 156, 156, 156, 156, 156,
- 156, 156, 156, 156, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 0, 0, 0, 0, 0, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 0, 0, 0, 0, 0, 0,
-};
-
-/* Full_Case_Folding: 2048 bytes. */
-
-static RE_FullCaseFolding re_full_case_folding_table[] = {
- { 0, { 0, 0}},
- { 32, { 0, 0}},
- { 775, { 0, 0}},
- { -108, { 115, 0}},
- { 1, { 0, 0}},
- { -199, { 775, 0}},
- { 371, { 110, 0}},
- { -121, { 0, 0}},
- { -268, { 0, 0}},
- { 210, { 0, 0}},
- { 206, { 0, 0}},
- { 205, { 0, 0}},
- { 79, { 0, 0}},
- { 202, { 0, 0}},
- { 203, { 0, 0}},
- { 207, { 0, 0}},
- { 211, { 0, 0}},
- { 209, { 0, 0}},
- { 213, { 0, 0}},
- { 214, { 0, 0}},
- { 218, { 0, 0}},
- { 217, { 0, 0}},
- { 219, { 0, 0}},
- { 2, { 0, 0}},
- { -390, { 780, 0}},
- { -97, { 0, 0}},
- { -56, { 0, 0}},
- { -130, { 0, 0}},
- { 10795, { 0, 0}},
- { -163, { 0, 0}},
- { 10792, { 0, 0}},
- { -195, { 0, 0}},
- { 69, { 0, 0}},
- { 71, { 0, 0}},
- { 116, { 0, 0}},
- { 38, { 0, 0}},
- { 37, { 0, 0}},
- { 64, { 0, 0}},
- { 63, { 0, 0}},
- { 41, { 776, 769}},
- { 21, { 776, 769}},
- { 8, { 0, 0}},
- { -30, { 0, 0}},
- { -25, { 0, 0}},
- { -15, { 0, 0}},
- { -22, { 0, 0}},
- { -54, { 0, 0}},
- { -48, { 0, 0}},
- { -60, { 0, 0}},
- { -64, { 0, 0}},
- { -7, { 0, 0}},
- { 80, { 0, 0}},
- { 15, { 0, 0}},
- { 48, { 0, 0}},
- { -34, {1410, 0}},
- { 7264, { 0, 0}},
- { -8, { 0, 0}},
- { -6222, { 0, 0}},
- { -6221, { 0, 0}},
- { -6212, { 0, 0}},
- { -6210, { 0, 0}},
- { -6211, { 0, 0}},
- { -6204, { 0, 0}},
- { -6180, { 0, 0}},
- { 35267, { 0, 0}},
- { -3008, { 0, 0}},
- { -7726, { 817, 0}},
- { -7715, { 776, 0}},
- { -7713, { 778, 0}},
- { -7712, { 778, 0}},
- { -7737, { 702, 0}},
- { -58, { 0, 0}},
- { -7723, { 115, 0}},
- { -7051, { 787, 0}},
- { -7053, { 787, 768}},
- { -7055, { 787, 769}},
- { -7057, { 787, 834}},
- { -128, { 953, 0}},
- { -136, { 953, 0}},
- { -112, { 953, 0}},
- { -120, { 953, 0}},
- { -64, { 953, 0}},
- { -72, { 953, 0}},
- { -66, { 953, 0}},
- { -7170, { 953, 0}},
- { -7176, { 953, 0}},
- { -7173, { 834, 0}},
- { -7174, { 834, 953}},
- { -74, { 0, 0}},
- { -7179, { 953, 0}},
- { -7173, { 0, 0}},
- { -78, { 953, 0}},
- { -7180, { 953, 0}},
- { -7190, { 953, 0}},
- { -7183, { 834, 0}},
- { -7184, { 834, 953}},
- { -86, { 0, 0}},
- { -7189, { 953, 0}},
- { -7193, { 776, 768}},
- { -7194, { 776, 769}},
- { -7197, { 834, 0}},
- { -7198, { 776, 834}},
- { -100, { 0, 0}},
- { -7197, { 776, 768}},
- { -7198, { 776, 769}},
- { -7203, { 787, 0}},
- { -7201, { 834, 0}},
- { -7202, { 776, 834}},
- { -112, { 0, 0}},
- { -118, { 953, 0}},
- { -7210, { 953, 0}},
- { -7206, { 953, 0}},
- { -7213, { 834, 0}},
- { -7214, { 834, 953}},
- { -128, { 0, 0}},
- { -126, { 0, 0}},
- { -7219, { 953, 0}},
- { -7517, { 0, 0}},
- { -8383, { 0, 0}},
- { -8262, { 0, 0}},
- { 28, { 0, 0}},
- { 16, { 0, 0}},
- { 26, { 0, 0}},
- {-10743, { 0, 0}},
- { -3814, { 0, 0}},
- {-10727, { 0, 0}},
- {-10780, { 0, 0}},
- {-10749, { 0, 0}},
- {-10783, { 0, 0}},
- {-10782, { 0, 0}},
- {-10815, { 0, 0}},
- {-35332, { 0, 0}},
- {-42280, { 0, 0}},
- {-42308, { 0, 0}},
- {-42319, { 0, 0}},
- {-42315, { 0, 0}},
- {-42305, { 0, 0}},
- {-42258, { 0, 0}},
- {-42282, { 0, 0}},
- {-42261, { 0, 0}},
- { 928, { 0, 0}},
- {-42307, { 0, 0}},
- {-35384, { 0, 0}},
- {-38864, { 0, 0}},
- {-64154, { 102, 0}},
- {-64155, { 105, 0}},
- {-64156, { 108, 0}},
- {-64157, { 102, 105}},
- {-64158, { 102, 108}},
- {-64146, { 116, 0}},
- {-64147, { 116, 0}},
- {-62879, {1398, 0}},
- {-62880, {1381, 0}},
- {-62881, {1387, 0}},
- {-62872, {1398, 0}},
- {-62883, {1389, 0}},
- { 40, { 0, 0}},
- { 34, { 0, 0}},
-};
-
-/* Full_Case_Folding: 1264 bytes. */
-
-int re_get_full_case_folding(RE_UINT32 ch, RE_UINT32* codepoints) {
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
- RE_FullCaseFolding* case_folding;
- int count;
-
- f = ch >> 13;
- code = ch ^ (f << 13);
- pos = (RE_UINT32)re_full_case_folding_stage_1[f] << 5;
- f = code >> 8;
- code ^= f << 8;
- pos = (RE_UINT32)re_full_case_folding_stage_2[pos + f] << 5;
- f = code >> 3;
- code ^= f << 3;
- pos = (RE_UINT32)re_full_case_folding_stage_3[pos + f] << 3;
- value = re_full_case_folding_stage_4[pos + code];
-
- case_folding = &re_full_case_folding_table[value];
-
- codepoints[0] = (RE_UINT32)((RE_INT32)ch + case_folding->diff);
- count = 1;
-
- while (count < RE_MAX_FOLDED && case_folding->codepoints[count - 1] != 0) {
- codepoints[count] = case_folding->codepoints[count - 1];
- ++count;
- }
-
- return count;
+ 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 61,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 79, 0, 1, 0, 1, 0, 1, 0, 0, 3, 0, 5, 0, 3, 0, 51,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 100, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 81, 3, 0, 5, 0, 3, 0, 77,
+ 0, 93, 1, 0, 1, 0, 93, 10, 0, 96, 95, 5, 0, 0, 37, 94,
+ 92, 3, 0, 99, 101, 0, 102, 102, 1, 0, 0, 0, 99, 98, 0, 97,
+ 1, 0, 1, 0, 1, 0, 85, 10, 0, 86, 0, 0, 1, 0, 85, 17,
+ 0, 88, 87, 5, 0, 3, 0, 84, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 3, 0, 9, 1, 0, 4, 5, 0, 3, 0, 17,
+ 0, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 82, 2, 1, 0, 1, 0, 42, 33, 1, 0, 1, 0, 1, 0, 1, 0,
+ 90, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 158, 5, 0, 89, 157, 0,
+ 0, 3, 0, 91, 72, 70, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 25, 0, 20, 22, 20, 0, 30, 0, 32, 31,
+ 24, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 41, 45, 0, 0, 0, 12, 13, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 34, 27, 0, 0, 35, 30, 0, 10, 0, 8, 1, 0, 0, 55, 54, 54,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 10, 3, 0, 5, 0, 3, 0, 10, 0, 3, 0, 5, 0, 3, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 73, 73, 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 161, 161, 161, 161, 161, 161, 0, 161, 0, 0, 0, 0, 0, 161, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 105, 106, 107, 108, 109, 110, 111, 112, 178, 0, 0, 0, 0, 0, 0, 0,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, 0, 103, 103, 103,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 146, 142, 144, 141, 145, 75, 0, 0, 143, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0,
+ 139, 0, 140, 0, 137, 0, 138, 0, 0, 6, 0, 6, 0, 6, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 53, 53, 53, 53, 53, 53, 53, 56, 56, 56, 56, 56, 56, 56, 56,
+ 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 64, 64, 64, 64, 64,
+ 67, 67, 67, 67, 67, 67, 67, 67, 69, 69, 69, 69, 69, 69, 69, 69,
+ 0, 0, 68, 113, 118, 0, 116, 114, 6, 6, 71, 71, 117, 0, 115, 0,
+ 0, 0, 63, 135, 129, 0, 134, 133, 65, 65, 66, 66, 136, 0, 0, 0,
+ 0, 0, 130, 128, 0, 0, 132, 131, 6, 6, 60, 60, 0, 0, 0, 0,
+ 0, 0, 123, 122, 121, 0, 120, 119, 6, 6, 59, 59, 7, 0, 0, 0,
+ 0, 0, 58, 125, 125, 0, 127, 126, 52, 52, 55, 55, 124, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 147, 148, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 43, 43, 46, 46, 47, 47, 46, 46, 43, 43,
+ 15, 15, 16, 16, 15, 15, 21, 21, 25, 25, 26, 26, 25, 25, 21, 21,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 150, 159, 151, 0, 0, 10, 0, 3, 0, 5, 0, 154, 152, 155,
+ 153, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 156, 155,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 5, 0, 176, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 5, 0, 170, 0, 0,
+ 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 168, 171, 169, 166, 167, 0,
+ 162, 164, 163, 104, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 36, 165, 177, 10, 0, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 182, 183, 180, 181, 179, 185, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 189, 186, 187, 190, 188, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0,
+ 23, 23, 23, 23, 23, 23, 23, 23, 28, 28, 28, 28, 28, 28, 28, 28,
+ 23, 23, 23, 23, 23, 23, 23, 23, 38, 38, 38, 38, 38, 38, 38, 38,
+ 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 44, 44, 44, 44, 44, 44, 44, 44, 38, 38, 38, 38, 38, 38, 38, 38,
+ 23, 23, 23, 23, 23, 23, 23, 23, 28, 28, 28, 28, 28, 28, 28, 28,
+ 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 19, 21, 21, 19, 19, 26, 26, 19, 19, 21, 21, 19, 19, 29, 29,
+ 19, 19, 21, 21, 19, 19, 26, 26, 19, 19, 21, 21, 19, 19, 39, 39,
+ 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static RE_FullCaseFolding re_full_folding_table_4[] = {
+ { 0, 0, 0},
+ { 1, 0, 0},
+ { 2, 0, 0},
+ { 3, 0, 0},
+ { 6, 0, 0},
+ { 7, 0, 0},
+ { 8, 0, 0},
+ { 9, 0, 0},
+ { 11, 0, 0},
+ { 14, 0, 0},
+ { 15, 0, 0},
+ { 16, 0, 0},
+ { 19, 0, 0},
+ { 22, 0, 0},
+ { 24, 0, 0},
+ { 26, 0, 0},
+ { 30, 0, 0},
+ { 31, 0, 0},
+ { 32, 0, 0},
+ { 34, 0, 0},
+ { 37, 0, 0},
+ { 38, 0, 0},
+ { 39, 0, 0},
+ { 40, 0, 0},
+ { 41, 776, 769},
+ { 42, 0, 0},
+ { 46, 0, 0},
+ { 48, 0, 0},
+ { 56, 0, 0},
+ { 62, 0, 0},
+ { 64, 0, 0},
+ { 65, 0, 0},
+ { 67, 0, 0},
+ { 72, 0, 0},
+ { 74, 0, 0},
+ { 76, 0, 0},
+ { 80, 0, 0},
+ { 83, 0, 0},
+ { 88, 0, 0},
+ { 94, 0, 0},
+ { 96, 0, 0},
+ { 98, 0, 0},
+ { 99, 0, 0},
+ { 102, 0, 0},
+ { 104, 0, 0},
+ { 105, 0, 0},
+ { 106, 0, 0},
+ { 110, 0, 0},
+ { 112, 0, 0},
+ { 117, 776, 769},
+ { 124, 0, 0},
+ { 127, 0, 0},
+ { 128, 0, 0},
+ { 128, 953, 0},
+ { 130, 0, 0},
+ { 134, 0, 0},
+ { 136, 953, 0},
+ { 140, 0, 0},
+ { 142, 953, 0},
+ { 144, 0, 0},
+ { 172, 0, 0},
+ { 172, 115, 0},
+ { 176, 953, 0},
+ { 182, 953, 0},
+ { 184, 953, 0},
+ { 186, 0, 0},
+ { 190, 0, 0},
+ { 192, 953, 0},
+ { 194, 953, 0},
+ { 200, 953, 0},
+ { 201, 0, 0},
+ { 202, 0, 0},
+ { 205, 0, 0},
+ { 208, 0, 0},
+ { 226, 1410, 0},
+ { 250, 0, 0},
+ { 252, 0, 0},
+ { 268, 0, 0},
+ { 345, 0, 0},
+ { 345, 775, 0},
+ { 376, 0, 0},
+ { 391, 0, 0},
+ { 410, 780, 0},
+ { 777, 0, 0},
+ { 805, 0, 0},
+ { 806, 0, 0},
+ { 810, 0, 0},
+ { 825, 0, 0},
+ { 827, 0, 0},
+ { 935, 0, 0},
+ { 958, 0, 0},
+ { 963, 0, 0},
+ { 971, 0, 0},
+ { 978, 0, 0},
+ { 982, 0, 0},
+ { 989, 0, 0},
+ { 991, 0, 0},
+ { 1002, 0, 0},
+ { 1007, 0, 0},
+ { 1011, 0, 0},
+ { 1013, 110, 0},
+ { 1015, 0, 0},
+ { 1023, 0, 0},
+ { 3136, 0, 0},
+ { 3296, 0, 0},
+ { 6322, 0, 0},
+ { 6325, 0, 0},
+ { 6332, 0, 0},
+ { 6338, 0, 0},
+ { 6342, 0, 0},
+ { 6343, 0, 0},
+ { 6348, 0, 0},
+ { 6372, 0, 0},
+ { 7170, 953, 0},
+ { 7174, 834, 953},
+ { 7175, 0, 0},
+ { 7175, 834, 0},
+ { 7181, 953, 0},
+ { 7192, 953, 0},
+ { 7202, 776, 834},
+ { 7203, 834, 0},
+ { 7205, 787, 0},
+ { 7206, 776, 769},
+ { 7207, 776, 768},
+ { 7221, 953, 0},
+ { 7226, 953, 0},
+ { 7230, 834, 953},
+ { 7231, 834, 0},
+ { 7274, 776, 769},
+ { 7274, 953, 0},
+ { 7275, 776, 768},
+ { 7278, 776, 834},
+ { 7279, 834, 0},
+ { 7280, 834, 953},
+ { 7281, 834, 0},
+ { 7284, 953, 0},
+ { 7291, 953, 0},
+ { 7313, 787, 769},
+ { 7315, 787, 834},
+ { 7317, 787, 0},
+ { 7319, 787, 768},
+ { 7904, 778, 0},
+ { 7907, 776, 0},
+ { 7917, 115, 0},
+ { 7919, 778, 0},
+ { 7931, 702, 0},
+ { 7934, 817, 0},
+ { 8513, 0, 0},
+ { 8654, 0, 0},
+ { 8943, 0, 0},
+ {11785, 0, 0},
+ {11801, 0, 0},
+ {11807, 0, 0},
+ {11810, 0, 0},
+ {11836, 0, 0},
+ {11839, 0, 0},
+ {11841, 0, 0},
+ {11864, 0, 0},
+ {11871, 0, 0},
+ {12574, 0, 0},
+ {15776, 0, 0},
+ {15840, 0, 0},
+ {42286, 0, 0},
+ {42287, 0, 0},
+ {42294, 0, 0},
+ {42311, 0, 0},
+ {42433, 0, 0},
+ {42436, 0, 0},
+ {42444, 0, 0},
+ {42445, 0, 0},
+ {42472, 0, 0},
+ {42487, 0, 0},
+ {47152, 0, 0},
+ {47184, 0, 0},
+ {47216, 0, 0},
+ {47312, 0, 0},
+ {47620, 0, 0},
+ {47688, 0, 0},
+ {47811, 0, 0},
+ {64354, 102, 108},
+ {64356, 108, 0},
+ {64357, 102, 105},
+ {64358, 102, 0},
+ {64359, 105, 0},
+ {64373, 116, 0},
+ {64374, 116, 0},
+ {65120, 1381, 0},
+ {65121, 1387, 0},
+ {65123, 1389, 0},
+ {65127, 1398, 0},
+ {65128, 1398, 0}
+};
+
+int re_get_full_case_folding(RE_UINT32 codepoint, RE_UINT32* folded) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+ RE_UINT16* data;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_full_folding_table_1[field_2];
+ v = re_full_folding_table_2[(v << 5) | field_1];
+ v = re_full_folding_table_3[(v << 5) | field_0];
+
+ data = re_full_folding_table_4[v].data;
+ folded[0] = codepoint ^ data[0];
+
+ if (data[1] == 0)
+ return 1;
+
+ folded[1] = data[1];
+
+ if (data[2] == 0)
+ return 2;
+
+ folded[2] = data[2];
+
+ return 3;
}
/* Property function table. */
-
RE_GetPropertyFunc re_get_property[] = {
- re_get_general_category,
- re_get_block,
- re_get_script,
- 0,
- re_get_word_break,
- re_get_grapheme_cluster_break,
- re_get_sentence_break,
- re_get_math,
re_get_alphabetic,
- re_get_lowercase,
- re_get_uppercase,
+ re_get_alphanumeric,
+ re_get_any,
+ re_get_ascii_hex_digit,
+ re_get_bidi_class,
+ re_get_bidi_control,
+ re_get_bidi_mirrored,
+ re_get_blank,
+ re_get_block,
+ re_get_canonical_combining_class,
re_get_cased,
re_get_case_ignorable,
- re_get_changes_when_lowercased,
- re_get_changes_when_uppercased,
- re_get_changes_when_titlecased,
re_get_changes_when_casefolded,
re_get_changes_when_casemapped,
- re_get_id_start,
- re_get_id_continue,
- re_get_xid_start,
- re_get_xid_continue,
+ re_get_changes_when_lowercased,
+ re_get_changes_when_titlecased,
+ re_get_changes_when_uppercased,
+ re_get_dash,
+ re_get_decomposition_type,
re_get_default_ignorable_code_point,
- re_get_grapheme_extend,
+ re_get_deprecated,
+ re_get_diacritic,
+ re_get_east_asian_width,
+ re_get_emoji,
+ re_get_emoji_component,
+ re_get_emoji_modifier,
+ re_get_emoji_modifier_base,
+ re_get_emoji_presentation,
+ re_get_extended_pictographic,
+ re_get_extender,
+ re_get_general_category,
+ re_get_graph,
re_get_grapheme_base,
+ re_get_grapheme_cluster_break,
+ re_get_grapheme_extend,
re_get_grapheme_link,
- re_get_white_space,
- re_get_bidi_control,
- re_get_join_control,
- re_get_dash,
- re_get_hyphen,
- re_get_quotation_mark,
- re_get_terminal_punctuation,
- re_get_other_math,
+ re_get_hangul_syllable_type,
re_get_hex_digit,
- re_get_ascii_hex_digit,
- re_get_other_alphabetic,
+ re_get_hyphen,
+ re_get_id_continue,
re_get_ideographic,
- re_get_diacritic,
- re_get_extender,
- re_get_other_lowercase,
- re_get_other_uppercase,
- re_get_noncharacter_code_point,
- re_get_other_grapheme_extend,
re_get_ids_binary_operator,
+ re_get_id_start,
re_get_ids_trinary_operator,
- re_get_radical,
- re_get_unified_ideograph,
- re_get_other_default_ignorable_code_point,
- re_get_deprecated,
- re_get_soft_dotted,
- re_get_logical_order_exception,
- re_get_other_id_start,
- re_get_other_id_continue,
- re_get_sentence_terminal,
- re_get_variation_selector,
- re_get_pattern_white_space,
- re_get_pattern_syntax,
- re_get_prepended_concatenation_mark,
- re_get_regional_indicator,
- re_get_hangul_syllable_type,
- re_get_bidi_class,
- re_get_canonical_combining_class,
- re_get_decomposition_type,
- re_get_east_asian_width,
+ re_get_indic_positional_category,
+ re_get_indic_syllabic_category,
+ re_get_join_control,
re_get_joining_group,
re_get_joining_type,
re_get_line_break,
- re_get_numeric_type,
- re_get_numeric_value,
- re_get_bidi_mirrored,
- re_get_indic_positional_category,
- re_get_indic_syllabic_category,
- re_get_emoji,
- re_get_emoji_presentation,
- re_get_emoji_modifier,
- re_get_emoji_modifier_base,
- re_get_emoji_component,
- re_get_extended_pictographic,
- re_get_nfd_quick_check,
+ re_get_logical_order_exception,
+ re_get_lowercase,
+ re_get_math,
re_get_nfc_quick_check,
- re_get_nfkd_quick_check,
+ re_get_nfd_quick_check,
re_get_nfkc_quick_check,
- re_get_alphanumeric,
- re_get_any,
- re_get_blank,
- re_get_graph,
- re_get_print,
- re_get_word,
- re_get_xdigit,
- re_get_posix_digit,
+ re_get_nfkd_quick_check,
+ re_get_noncharacter_code_point,
+ re_get_numeric_type,
+ re_get_numeric_value,
+ re_get_other_alphabetic,
+ re_get_other_default_ignorable_code_point,
+ re_get_other_grapheme_extend,
+ re_get_other_id_continue,
+ re_get_other_id_start,
+ re_get_other_lowercase,
+ re_get_other_math,
+ re_get_other_uppercase,
+ re_get_pattern_syntax,
+ re_get_pattern_white_space,
re_get_posix_alnum,
+ re_get_posix_digit,
re_get_posix_punct,
re_get_posix_xdigit,
+ re_get_prepended_concatenation_mark,
+ re_get_print,
+ re_get_quotation_mark,
+ re_get_radical,
+ re_get_regional_indicator,
+ re_get_script,
+ 0,
+ re_get_sentence_break,
+ re_get_sentence_terminal,
+ re_get_soft_dotted,
+ re_get_terminal_punctuation,
+ re_get_unified_ideograph,
+ re_get_uppercase,
+ re_get_variation_selector,
+ re_get_white_space,
+ re_get_word,
+ re_get_word_break,
+ re_get_xdigit,
+ re_get_xid_continue,
+ re_get_xid_start
};
diff --git a/regex_3/_regex_unicode.h b/regex_3/_regex_unicode.h
index 77e576400e1deb928a52c7a20d583ab88466aee7..ea8e48ccc049a96f4ca28609fc9ec386fcf22e9d 100644
--- a/regex_3/_regex_unicode.h
+++ b/regex_3/_regex_unicode.h
@@ -13,7 +13,6 @@ typedef unsigned char BOOL;
#define RE_ASCII_MAX 0x7F
#define RE_LOCALE_MAX 0xFF
-#define RE_UNICODE_MAX 0x10FFFF
#define RE_MAX_CASES 4
#define RE_MAX_FOLDED 3
@@ -31,13 +30,13 @@ typedef struct RE_PropertyValue {
RE_UINT16 id;
} RE_PropertyValue;
-typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch);
+typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 codepoint);
-#define RE_PROP_GC 0x0
-#define RE_PROP_CASED 0xB
-#define RE_PROP_UPPERCASE 0xA
-#define RE_PROP_LOWERCASE 0x9
-#define RE_PROP_SCX 0x3
+#define RE_PROP_GC 0x1E
+#define RE_PROP_CASED 0xA
+#define RE_PROP_UPPERCASE 0x56
+#define RE_PROP_LOWERCASE 0x33
+#define RE_PROP_SCX 0x50
#define RE_PROP_C 30
#define RE_PROP_L 31
@@ -46,254 +45,254 @@ typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch);
#define RE_PROP_P 34
#define RE_PROP_S 35
#define RE_PROP_Z 36
-#define RE_PROP_ASSIGNED 38
-#define RE_PROP_CASEDLETTER 37
+#define RE_PROP_ASSIGNED 37
+#define RE_PROP_CASEDLETTER 38
#define RE_PROP_CN 0
-#define RE_PROP_LU 1
-#define RE_PROP_LL 2
-#define RE_PROP_LT 3
-#define RE_PROP_LM 4
-#define RE_PROP_LO 5
-#define RE_PROP_MN 6
-#define RE_PROP_ME 7
-#define RE_PROP_MC 8
+#define RE_PROP_CC 1
+#define RE_PROP_ZS 2
+#define RE_PROP_PO 3
+#define RE_PROP_SC 4
+#define RE_PROP_PS 5
+#define RE_PROP_PE 6
+#define RE_PROP_SM 7
+#define RE_PROP_PD 8
#define RE_PROP_ND 9
-#define RE_PROP_NL 10
-#define RE_PROP_NO 11
-#define RE_PROP_ZS 12
-#define RE_PROP_ZL 13
-#define RE_PROP_ZP 14
-#define RE_PROP_CC 15
-#define RE_PROP_CF 16
-#define RE_PROP_CO 17
-#define RE_PROP_CS 18
-#define RE_PROP_PD 19
-#define RE_PROP_PS 20
-#define RE_PROP_PE 21
-#define RE_PROP_PC 22
-#define RE_PROP_PO 23
-#define RE_PROP_SM 24
-#define RE_PROP_SC 25
-#define RE_PROP_SK 26
-#define RE_PROP_SO 27
-#define RE_PROP_PI 28
-#define RE_PROP_PF 29
+#define RE_PROP_LU 10
+#define RE_PROP_SK 11
+#define RE_PROP_PC 12
+#define RE_PROP_LL 13
+#define RE_PROP_SO 14
+#define RE_PROP_LO 15
+#define RE_PROP_PI 16
+#define RE_PROP_CF 17
+#define RE_PROP_NO 18
+#define RE_PROP_PF 19
+#define RE_PROP_LT 20
+#define RE_PROP_LM 21
+#define RE_PROP_MN 22
+#define RE_PROP_ME 23
+#define RE_PROP_MC 24
+#define RE_PROP_NL 25
+#define RE_PROP_ZL 26
+#define RE_PROP_ZP 27
+#define RE_PROP_CS 28
+#define RE_PROP_CO 29
-#define RE_PROP_C_MASK 0x00078001
-#define RE_PROP_L_MASK 0x0000003E
-#define RE_PROP_M_MASK 0x000001C0
-#define RE_PROP_N_MASK 0x00000E00
-#define RE_PROP_P_MASK 0x30F80000
-#define RE_PROP_S_MASK 0x0F000000
-#define RE_PROP_Z_MASK 0x00007000
+#define RE_PROP_C_MASK 0x30020003
+#define RE_PROP_L_MASK 0x0030A400
+#define RE_PROP_M_MASK 0x01C00000
+#define RE_PROP_N_MASK 0x02040200
+#define RE_PROP_P_MASK 0x00091168
+#define RE_PROP_S_MASK 0x00004890
+#define RE_PROP_Z_MASK 0x0C000004
-#define RE_PROP_ALNUM 0x530001
-#define RE_PROP_ALPHA 0x080001
-#define RE_PROP_ANY 0x540001
-#define RE_PROP_ASCII 0x010001
-#define RE_PROP_BLANK 0x550001
-#define RE_PROP_CNTRL 0x00000F
-#define RE_PROP_DIGIT 0x000009
-#define RE_PROP_GRAPH 0x560001
-#define RE_PROP_LOWER 0x090001
-#define RE_PROP_PRINT 0x570001
-#define RE_PROP_SPACE 0x1A0001
-#define RE_PROP_UPPER 0x0A0001
-#define RE_PROP_WORD 0x580001
-#define RE_PROP_XDIGIT 0x590001
-#define RE_PROP_POSIX_ALNUM 0x5B0001
-#define RE_PROP_POSIX_DIGIT 0x5A0001
-#define RE_PROP_POSIX_PUNCT 0x5C0001
-#define RE_PROP_POSIX_XDIGIT 0x5D0001
+#define RE_PROP_ALNUM 0x010001
+#define RE_PROP_ALPHA 0x000001
+#define RE_PROP_ANY 0x020001
+#define RE_PROP_ASCII 0x080001
+#define RE_PROP_BLANK 0x070001
+#define RE_PROP_CNTRL 0x1E0001
+#define RE_PROP_DIGIT 0x1E0009
+#define RE_PROP_GRAPH 0x1F0001
+#define RE_PROP_LOWER 0x330001
+#define RE_PROP_PRINT 0x4B0001
+#define RE_PROP_SPACE 0x580001
+#define RE_PROP_UPPER 0x560001
+#define RE_PROP_WORD 0x590001
+#define RE_PROP_XDIGIT 0x5B0001
+#define RE_PROP_POSIX_ALNUM 0x460001
+#define RE_PROP_POSIX_DIGIT 0x470001
+#define RE_PROP_POSIX_PUNCT 0x480001
+#define RE_PROP_POSIX_XDIGIT 0x490001
#define RE_WBREAK_OTHER 0
-#define RE_WBREAK_DOUBLEQUOTE 1
-#define RE_WBREAK_SINGLEQUOTE 2
-#define RE_WBREAK_HEBREWLETTER 3
-#define RE_WBREAK_CR 4
-#define RE_WBREAK_LF 5
-#define RE_WBREAK_NEWLINE 6
-#define RE_WBREAK_EXTEND 7
-#define RE_WBREAK_REGIONALINDICATOR 8
-#define RE_WBREAK_FORMAT 9
-#define RE_WBREAK_KATAKANA 10
+#define RE_WBREAK_LF 1
+#define RE_WBREAK_NEWLINE 2
+#define RE_WBREAK_CR 3
+#define RE_WBREAK_WSEGSPACE 4
+#define RE_WBREAK_DOUBLEQUOTE 5
+#define RE_WBREAK_SINGLEQUOTE 6
+#define RE_WBREAK_MIDNUM 7
+#define RE_WBREAK_MIDNUMLET 8
+#define RE_WBREAK_NUMERIC 9
+#define RE_WBREAK_MIDLETTER 10
#define RE_WBREAK_ALETTER 11
-#define RE_WBREAK_MIDLETTER 12
-#define RE_WBREAK_MIDNUM 13
-#define RE_WBREAK_MIDNUMLET 14
-#define RE_WBREAK_NUMERIC 15
-#define RE_WBREAK_EXTENDNUMLET 16
-#define RE_WBREAK_ZWJ 17
-#define RE_WBREAK_WSEGSPACE 18
+#define RE_WBREAK_EXTENDNUMLET 12
+#define RE_WBREAK_FORMAT 13
+#define RE_WBREAK_EXTEND 14
+#define RE_WBREAK_HEBREWLETTER 15
+#define RE_WBREAK_ZWJ 16
+#define RE_WBREAK_KATAKANA 17
+#define RE_WBREAK_REGIONALINDICATOR 18
#define RE_WBREAK_EBASE 19
#define RE_WBREAK_EBASEGAZ 20
#define RE_WBREAK_EMODIFIER 21
#define RE_WBREAK_GLUEAFTERZWJ 22
#define RE_GBREAK_OTHER 0
-#define RE_GBREAK_PREPEND 1
-#define RE_GBREAK_CR 2
-#define RE_GBREAK_LF 3
-#define RE_GBREAK_CONTROL 4
-#define RE_GBREAK_EXTEND 5
-#define RE_GBREAK_REGIONALINDICATOR 6
-#define RE_GBREAK_SPACINGMARK 7
-#define RE_GBREAK_L 8
-#define RE_GBREAK_V 9
-#define RE_GBREAK_T 10
+#define RE_GBREAK_CONTROL 1
+#define RE_GBREAK_LF 2
+#define RE_GBREAK_CR 3
+#define RE_GBREAK_EXTEND 4
+#define RE_GBREAK_PREPEND 5
+#define RE_GBREAK_SPACINGMARK 6
+#define RE_GBREAK_L 7
+#define RE_GBREAK_V 8
+#define RE_GBREAK_T 9
+#define RE_GBREAK_ZWJ 10
#define RE_GBREAK_LV 11
#define RE_GBREAK_LVT 12
-#define RE_GBREAK_ZWJ 13
+#define RE_GBREAK_REGIONALINDICATOR 13
#define RE_GBREAK_EBASE 14
#define RE_GBREAK_EBASEGAZ 15
#define RE_GBREAK_EMODIFIER 16
#define RE_GBREAK_GLUEAFTERZWJ 17
#define RE_LBREAK_UNKNOWN 0
-#define RE_LBREAK_OPENPUNCTUATION 1
-#define RE_LBREAK_CLOSEPUNCTUATION 2
-#define RE_LBREAK_QUOTATION 3
-#define RE_LBREAK_GLUE 4
-#define RE_LBREAK_NONSTARTER 5
-#define RE_LBREAK_EXCLAMATION 6
-#define RE_LBREAK_BREAKSYMBOLS 7
-#define RE_LBREAK_INFIXNUMERIC 8
-#define RE_LBREAK_PREFIXNUMERIC 9
-#define RE_LBREAK_POSTFIXNUMERIC 10
-#define RE_LBREAK_NUMERIC 11
-#define RE_LBREAK_ALPHABETIC 12
-#define RE_LBREAK_IDEOGRAPHIC 13
-#define RE_LBREAK_INSEPARABLE 14
+#define RE_LBREAK_COMBININGMARK 1
+#define RE_LBREAK_BREAKAFTER 2
+#define RE_LBREAK_LINEFEED 3
+#define RE_LBREAK_MANDATORYBREAK 4
+#define RE_LBREAK_CARRIAGERETURN 5
+#define RE_LBREAK_SPACE 6
+#define RE_LBREAK_EXCLAMATION 7
+#define RE_LBREAK_QUOTATION 8
+#define RE_LBREAK_ALPHABETIC 9
+#define RE_LBREAK_PREFIXNUMERIC 10
+#define RE_LBREAK_POSTFIXNUMERIC 11
+#define RE_LBREAK_OPENPUNCTUATION 12
+#define RE_LBREAK_CLOSEPARENTHESIS 13
+#define RE_LBREAK_INFIXNUMERIC 14
#define RE_LBREAK_HYPHEN 15
-#define RE_LBREAK_COMBININGMARK 16
-#define RE_LBREAK_BREAKBEFORE 17
-#define RE_LBREAK_BREAKAFTER 18
-#define RE_LBREAK_SPACE 19
-#define RE_LBREAK_MANDATORYBREAK 20
-#define RE_LBREAK_CARRIAGERETURN 21
-#define RE_LBREAK_LINEFEED 22
-#define RE_LBREAK_CONTINGENTBREAK 23
+#define RE_LBREAK_BREAKSYMBOLS 16
+#define RE_LBREAK_NUMERIC 17
+#define RE_LBREAK_CLOSEPUNCTUATION 18
+#define RE_LBREAK_NEXTLINE 19
+#define RE_LBREAK_GLUE 20
+#define RE_LBREAK_AMBIGUOUS 21
+#define RE_LBREAK_BREAKBEFORE 22
+#define RE_LBREAK_HEBREWLETTER 23
#define RE_LBREAK_COMPLEXCONTEXT 24
-#define RE_LBREAK_AMBIGUOUS 25
-#define RE_LBREAK_BREAKBOTH 26
-#define RE_LBREAK_SURROGATE 27
-#define RE_LBREAK_ZWSPACE 28
-#define RE_LBREAK_NEXTLINE 29
-#define RE_LBREAK_WORDJOINER 30
-#define RE_LBREAK_JL 31
-#define RE_LBREAK_JV 32
-#define RE_LBREAK_JT 33
-#define RE_LBREAK_H2 34
-#define RE_LBREAK_H3 35
-#define RE_LBREAK_CLOSEPARENTHESIS 36
-#define RE_LBREAK_HEBREWLETTER 37
-#define RE_LBREAK_CONDITIONALJAPANESESTARTER 38
-#define RE_LBREAK_REGIONALINDICATOR 39
-#define RE_LBREAK_EBASE 40
-#define RE_LBREAK_EMODIFIER 41
-#define RE_LBREAK_ZWJ 42
+#define RE_LBREAK_JL 25
+#define RE_LBREAK_JV 26
+#define RE_LBREAK_JT 27
+#define RE_LBREAK_NONSTARTER 28
+#define RE_LBREAK_ZWSPACE 29
+#define RE_LBREAK_ZWJ 30
+#define RE_LBREAK_BREAKBOTH 31
+#define RE_LBREAK_INSEPARABLE 32
+#define RE_LBREAK_WORDJOINER 33
+#define RE_LBREAK_IDEOGRAPHIC 34
+#define RE_LBREAK_EBASE 35
+#define RE_LBREAK_CONDITIONALJAPANESESTARTER 36
+#define RE_LBREAK_H2 37
+#define RE_LBREAK_H3 38
+#define RE_LBREAK_SURROGATE 39
+#define RE_LBREAK_CONTINGENTBREAK 40
+#define RE_LBREAK_REGIONALINDICATOR 41
+#define RE_LBREAK_EMODIFIER 42
-extern char* re_strings[1425];
-extern RE_Property re_properties[168];
-extern RE_PropertyValue re_property_values[1568];
+extern char* re_strings[1447];
+extern RE_Property re_properties[173];
+extern RE_PropertyValue re_property_values[1589];
extern RE_UINT16 re_expand_on_folding[104];
extern RE_GetPropertyFunc re_get_property[94];
-RE_UINT32 re_get_general_category(RE_UINT32 ch);
-RE_UINT32 re_get_block(RE_UINT32 ch);
-RE_UINT32 re_get_script(RE_UINT32 ch);
-int re_get_script_extensions(RE_UINT32 ch, RE_UINT8* scripts);
-RE_UINT32 re_get_word_break(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 ch);
-RE_UINT32 re_get_sentence_break(RE_UINT32 ch);
-RE_UINT32 re_get_math(RE_UINT32 ch);
-RE_UINT32 re_get_alphabetic(RE_UINT32 ch);
-RE_UINT32 re_get_lowercase(RE_UINT32 ch);
-RE_UINT32 re_get_uppercase(RE_UINT32 ch);
-RE_UINT32 re_get_cased(RE_UINT32 ch);
-RE_UINT32 re_get_case_ignorable(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 ch);
-RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 ch);
-RE_UINT32 re_get_id_start(RE_UINT32 ch);
-RE_UINT32 re_get_id_continue(RE_UINT32 ch);
-RE_UINT32 re_get_xid_start(RE_UINT32 ch);
-RE_UINT32 re_get_xid_continue(RE_UINT32 ch);
-RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_extend(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_base(RE_UINT32 ch);
-RE_UINT32 re_get_grapheme_link(RE_UINT32 ch);
-RE_UINT32 re_get_white_space(RE_UINT32 ch);
-RE_UINT32 re_get_bidi_control(RE_UINT32 ch);
-RE_UINT32 re_get_join_control(RE_UINT32 ch);
-RE_UINT32 re_get_dash(RE_UINT32 ch);
-RE_UINT32 re_get_hyphen(RE_UINT32 ch);
-RE_UINT32 re_get_quotation_mark(RE_UINT32 ch);
-RE_UINT32 re_get_terminal_punctuation(RE_UINT32 ch);
-RE_UINT32 re_get_other_math(RE_UINT32 ch);
-RE_UINT32 re_get_hex_digit(RE_UINT32 ch);
-RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 ch);
-RE_UINT32 re_get_other_alphabetic(RE_UINT32 ch);
-RE_UINT32 re_get_ideographic(RE_UINT32 ch);
-RE_UINT32 re_get_diacritic(RE_UINT32 ch);
-RE_UINT32 re_get_extender(RE_UINT32 ch);
-RE_UINT32 re_get_other_lowercase(RE_UINT32 ch);
-RE_UINT32 re_get_other_uppercase(RE_UINT32 ch);
-RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 ch);
-RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 ch);
-RE_UINT32 re_get_ids_binary_operator(RE_UINT32 ch);
-RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 ch);
-RE_UINT32 re_get_radical(RE_UINT32 ch);
-RE_UINT32 re_get_unified_ideograph(RE_UINT32 ch);
-RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 ch);
-RE_UINT32 re_get_deprecated(RE_UINT32 ch);
-RE_UINT32 re_get_soft_dotted(RE_UINT32 ch);
-RE_UINT32 re_get_logical_order_exception(RE_UINT32 ch);
-RE_UINT32 re_get_other_id_start(RE_UINT32 ch);
-RE_UINT32 re_get_other_id_continue(RE_UINT32 ch);
-RE_UINT32 re_get_sentence_terminal(RE_UINT32 ch);
-RE_UINT32 re_get_variation_selector(RE_UINT32 ch);
-RE_UINT32 re_get_pattern_white_space(RE_UINT32 ch);
-RE_UINT32 re_get_pattern_syntax(RE_UINT32 ch);
-RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 ch);
-RE_UINT32 re_get_regional_indicator(RE_UINT32 ch);
-RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 ch);
-RE_UINT32 re_get_bidi_class(RE_UINT32 ch);
-RE_UINT32 re_get_canonical_combining_class(RE_UINT32 ch);
-RE_UINT32 re_get_decomposition_type(RE_UINT32 ch);
-RE_UINT32 re_get_east_asian_width(RE_UINT32 ch);
-RE_UINT32 re_get_joining_group(RE_UINT32 ch);
-RE_UINT32 re_get_joining_type(RE_UINT32 ch);
-RE_UINT32 re_get_line_break(RE_UINT32 ch);
-RE_UINT32 re_get_numeric_type(RE_UINT32 ch);
-RE_UINT32 re_get_numeric_value(RE_UINT32 ch);
-RE_UINT32 re_get_bidi_mirrored(RE_UINT32 ch);
-RE_UINT32 re_get_indic_positional_category(RE_UINT32 ch);
-RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 ch);
-RE_UINT32 re_get_emoji(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_presentation(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_modifier(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 ch);
-RE_UINT32 re_get_emoji_component(RE_UINT32 ch);
-RE_UINT32 re_get_extended_pictographic(RE_UINT32 ch);
-RE_UINT32 re_get_nfd_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_nfc_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 ch);
-RE_UINT32 re_get_alphanumeric(RE_UINT32 ch);
-RE_UINT32 re_get_any(RE_UINT32 ch);
-RE_UINT32 re_get_blank(RE_UINT32 ch);
-RE_UINT32 re_get_graph(RE_UINT32 ch);
-RE_UINT32 re_get_print(RE_UINT32 ch);
-RE_UINT32 re_get_word(RE_UINT32 ch);
-RE_UINT32 re_get_xdigit(RE_UINT32 ch);
-RE_UINT32 re_get_posix_digit(RE_UINT32 ch);
-RE_UINT32 re_get_posix_alnum(RE_UINT32 ch);
-RE_UINT32 re_get_posix_punct(RE_UINT32 ch);
-RE_UINT32 re_get_posix_xdigit(RE_UINT32 ch);
-int re_get_all_cases(RE_UINT32 ch, RE_UINT32* codepoints);
-RE_UINT32 re_get_simple_case_folding(RE_UINT32 ch);
-int re_get_full_case_folding(RE_UINT32 ch, RE_UINT32* codepoints);
+RE_UINT32 re_get_alphabetic(RE_UINT32 codepoint);
+RE_UINT32 re_get_alphanumeric(RE_UINT32 codepoint);
+RE_UINT32 re_get_any(RE_UINT32 codepoint);
+RE_UINT32 re_get_ascii_hex_digit(RE_UINT32 codepoint);
+RE_UINT32 re_get_bidi_class(RE_UINT32 codepoint);
+RE_UINT32 re_get_bidi_control(RE_UINT32 codepoint);
+RE_UINT32 re_get_bidi_mirrored(RE_UINT32 codepoint);
+RE_UINT32 re_get_blank(RE_UINT32 codepoint);
+RE_UINT32 re_get_block(RE_UINT32 codepoint);
+RE_UINT32 re_get_canonical_combining_class(RE_UINT32 codepoint);
+RE_UINT32 re_get_cased(RE_UINT32 codepoint);
+RE_UINT32 re_get_case_ignorable(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_casefolded(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_casemapped(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_lowercased(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_titlecased(RE_UINT32 codepoint);
+RE_UINT32 re_get_changes_when_uppercased(RE_UINT32 codepoint);
+RE_UINT32 re_get_dash(RE_UINT32 codepoint);
+RE_UINT32 re_get_decomposition_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_default_ignorable_code_point(RE_UINT32 codepoint);
+RE_UINT32 re_get_deprecated(RE_UINT32 codepoint);
+RE_UINT32 re_get_diacritic(RE_UINT32 codepoint);
+RE_UINT32 re_get_east_asian_width(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_component(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_modifier(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_modifier_base(RE_UINT32 codepoint);
+RE_UINT32 re_get_emoji_presentation(RE_UINT32 codepoint);
+RE_UINT32 re_get_extended_pictographic(RE_UINT32 codepoint);
+RE_UINT32 re_get_extender(RE_UINT32 codepoint);
+RE_UINT32 re_get_general_category(RE_UINT32 codepoint);
+RE_UINT32 re_get_graph(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_base(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_cluster_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_extend(RE_UINT32 codepoint);
+RE_UINT32 re_get_grapheme_link(RE_UINT32 codepoint);
+RE_UINT32 re_get_hangul_syllable_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_hex_digit(RE_UINT32 codepoint);
+RE_UINT32 re_get_hyphen(RE_UINT32 codepoint);
+RE_UINT32 re_get_id_continue(RE_UINT32 codepoint);
+RE_UINT32 re_get_ideographic(RE_UINT32 codepoint);
+RE_UINT32 re_get_ids_binary_operator(RE_UINT32 codepoint);
+RE_UINT32 re_get_id_start(RE_UINT32 codepoint);
+RE_UINT32 re_get_ids_trinary_operator(RE_UINT32 codepoint);
+RE_UINT32 re_get_indic_positional_category(RE_UINT32 codepoint);
+RE_UINT32 re_get_indic_syllabic_category(RE_UINT32 codepoint);
+RE_UINT32 re_get_join_control(RE_UINT32 codepoint);
+RE_UINT32 re_get_joining_group(RE_UINT32 codepoint);
+RE_UINT32 re_get_joining_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_line_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_logical_order_exception(RE_UINT32 codepoint);
+RE_UINT32 re_get_lowercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_math(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfc_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfd_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfkc_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_nfkd_quick_check(RE_UINT32 codepoint);
+RE_UINT32 re_get_noncharacter_code_point(RE_UINT32 codepoint);
+RE_UINT32 re_get_numeric_type(RE_UINT32 codepoint);
+RE_UINT32 re_get_numeric_value(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_alphabetic(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_default_ignorable_code_point(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_grapheme_extend(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_id_continue(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_id_start(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_lowercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_math(RE_UINT32 codepoint);
+RE_UINT32 re_get_other_uppercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_pattern_syntax(RE_UINT32 codepoint);
+RE_UINT32 re_get_pattern_white_space(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_alnum(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_digit(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_punct(RE_UINT32 codepoint);
+RE_UINT32 re_get_posix_xdigit(RE_UINT32 codepoint);
+RE_UINT32 re_get_prepended_concatenation_mark(RE_UINT32 codepoint);
+RE_UINT32 re_get_print(RE_UINT32 codepoint);
+RE_UINT32 re_get_quotation_mark(RE_UINT32 codepoint);
+RE_UINT32 re_get_radical(RE_UINT32 codepoint);
+RE_UINT32 re_get_regional_indicator(RE_UINT32 codepoint);
+RE_UINT32 re_get_script(RE_UINT32 codepoint);
+int re_get_script_extensions(RE_UINT32 codepoint, RE_UINT8* scripts);
+RE_UINT32 re_get_sentence_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_sentence_terminal(RE_UINT32 codepoint);
+RE_UINT32 re_get_soft_dotted(RE_UINT32 codepoint);
+RE_UINT32 re_get_terminal_punctuation(RE_UINT32 codepoint);
+RE_UINT32 re_get_unified_ideograph(RE_UINT32 codepoint);
+RE_UINT32 re_get_uppercase(RE_UINT32 codepoint);
+RE_UINT32 re_get_variation_selector(RE_UINT32 codepoint);
+RE_UINT32 re_get_white_space(RE_UINT32 codepoint);
+RE_UINT32 re_get_word(RE_UINT32 codepoint);
+RE_UINT32 re_get_word_break(RE_UINT32 codepoint);
+RE_UINT32 re_get_xdigit(RE_UINT32 codepoint);
+RE_UINT32 re_get_xid_continue(RE_UINT32 codepoint);
+RE_UINT32 re_get_xid_start(RE_UINT32 codepoint);
+int re_get_all_cases(RE_UINT32 codepoint, RE_UINT32* cases);
+RE_UINT32 re_get_simple_case_folding(RE_UINT32 codepoint);
+int re_get_full_case_folding(RE_UINT32 codepoint, RE_UINT32* folded);
diff --git a/regex_3/regex/regex.py b/regex_3/regex.py
similarity index 91%
rename from regex_3/regex/regex.py
rename to regex_3/regex.py
index 5b28eda3bebbf23efcd98902f55909341b0434c0..a280ab8db74bfa76e42beabe5ded3edf10471fe3 100644
--- a/regex_3/regex/regex.py
+++ b/regex_3/regex.py
@@ -136,6 +136,7 @@ second character.
\g<name> Matches the text matched by the group named name.
\G Matches the empty string, but only at the position where
the search started.
+ \h Matches horizontal whitespace.
\K Keeps only what follows for the entire match.
\L<name> Named list. The list is provided as a keyword argument.
\m Matches the empty string, but only at the start of a word.
@@ -239,54 +240,54 @@ __all__ = ["compile", "DEFAULT_VERSION", "escape", "findall", "finditer",
"T", "TEMPLATE", "U", "UNICODE", "V0", "VERSION0", "V1", "VERSION1", "X",
"VERBOSE", "W", "WORD", "error", "Regex", "__version__", "__doc__"]
-__version__ = "2.5.64"
+__version__ = "2.5.83"
# --------------------------------------------------------------------
# Public interface.
def match(pattern, string, flags=0, pos=None, endpos=None, partial=False,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Try to apply the pattern at the start of the string, returning a match
object, or None if no match was found."""
- return _compile(pattern, flags, kwargs).match(string, pos, endpos,
- concurrent, partial, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).match(string, pos,
+ endpos, concurrent, partial, timeout)
def fullmatch(pattern, string, flags=0, pos=None, endpos=None, partial=False,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Try to apply the pattern against all of the string, returning a match
object, or None if no match was found."""
- return _compile(pattern, flags, kwargs).fullmatch(string, pos, endpos,
- concurrent, partial, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).fullmatch(string,
+ pos, endpos, concurrent, partial, timeout)
def search(pattern, string, flags=0, pos=None, endpos=None, partial=False,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Search through string looking for a match to the pattern, returning a
match object, or None if no match was found."""
- return _compile(pattern, flags, kwargs).search(string, pos, endpos,
- concurrent, partial, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).search(string, pos,
+ endpos, concurrent, partial, timeout)
def sub(pattern, repl, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Return the string obtained by replacing the leftmost (or rightmost with a
reverse pattern) non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable; if a string,
backslash escapes in it are processed; if a callable, it's passed the match
object and must return a replacement string to be used."""
- return _compile(pattern, flags, kwargs).sub(repl, string, count, pos,
- endpos, concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).sub(repl, string,
+ count, pos, endpos, concurrent, timeout)
def subf(pattern, format, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Return the string obtained by replacing the leftmost (or rightmost with a
reverse pattern) non-overlapping occurrences of the pattern in string by the
replacement format. format can be either a string or a callable; if a string,
it's treated as a format string; if a callable, it's passed the match object
and must return a replacement string to be used."""
- return _compile(pattern, flags, kwargs).subf(format, string, count, pos,
- endpos, concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).subf(format, string,
+ count, pos, endpos, concurrent, timeout)
def subn(pattern, repl, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Return a 2-tuple containing (new_string, number). new_string is the string
obtained by replacing the leftmost (or rightmost with a reverse pattern)
non-overlapping occurrences of the pattern in the source string by the
@@ -294,11 +295,11 @@ def subn(pattern, repl, string, count=0, flags=0, pos=None, endpos=None,
can be either a string or a callable; if a string, backslash escapes in it
are processed; if a callable, it's passed the match object and must return a
replacement string to be used."""
- return _compile(pattern, flags, kwargs).subn(repl, string, count, pos,
- endpos, concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).subn(repl, string,
+ count, pos, endpos, concurrent, timeout)
def subfn(pattern, format, string, count=0, flags=0, pos=None, endpos=None,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Return a 2-tuple containing (new_string, number). new_string is the string
obtained by replacing the leftmost (or rightmost with a reverse pattern)
non-overlapping occurrences of the pattern in the source string by the
@@ -306,45 +307,46 @@ def subfn(pattern, format, string, count=0, flags=0, pos=None, endpos=None,
can be either a string or a callable; if a string, it's treated as a format
string; if a callable, it's passed the match object and must return a
replacement string to be used."""
- return _compile(pattern, flags, kwargs).subfn(format, string, count, pos,
- endpos, concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).subfn(format, string,
+ count, pos, endpos, concurrent, timeout)
def split(pattern, string, maxsplit=0, flags=0, concurrent=None, timeout=None,
- **kwargs):
+ ignore_unused=False, **kwargs):
"""Split the source string by the occurrences of the pattern, returning a
list containing the resulting substrings. If capturing parentheses are used
in pattern, then the text of all groups in the pattern are also returned as
part of the resulting list. If maxsplit is nonzero, at most maxsplit splits
occur, and the remainder of the string is returned as the final element of
the list."""
- return _compile(pattern, flags, kwargs).split(string, maxsplit, concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).split(string,
+ maxsplit, concurrent, timeout)
def splititer(pattern, string, maxsplit=0, flags=0, concurrent=None, timeout=None,
- **kwargs):
+ ignore_unused=False, **kwargs):
"Return an iterator yielding the parts of a split string."
- return _compile(pattern, flags, kwargs).splititer(string, maxsplit,
- concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).splititer(string,
+ maxsplit, concurrent, timeout)
def findall(pattern, string, flags=0, pos=None, endpos=None, overlapped=False,
- concurrent=None, timeout=None, **kwargs):
+ concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Return a list of all matches in the string. The matches may be overlapped
if overlapped is True. If one or more groups are present in the pattern,
return a list of groups; this will be a list of tuples if the pattern has
more than one group. Empty matches are included in the result."""
- return _compile(pattern, flags, kwargs).findall(string, pos, endpos,
- overlapped, concurrent, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).findall(string, pos,
+ endpos, overlapped, concurrent, timeout)
def finditer(pattern, string, flags=0, pos=None, endpos=None, overlapped=False,
- partial=False, concurrent=None, timeout=None, **kwargs):
+ partial=False, concurrent=None, timeout=None, ignore_unused=False, **kwargs):
"""Return an iterator over all matches in the string. The matches may be
overlapped if overlapped is True. For each match, the iterator returns a
match object. Empty matches are included in the result."""
- return _compile(pattern, flags, kwargs).finditer(string, pos, endpos,
- overlapped, concurrent, partial, timeout)
+ return _compile(pattern, flags, ignore_unused, kwargs).finditer(string, pos,
+ endpos, overlapped, concurrent, partial, timeout)
-def compile(pattern, flags=0, **kwargs):
+def compile(pattern, flags=0, ignore_unused=False, **kwargs):
"Compile a regular expression pattern, returning a pattern object."
- return _compile(pattern, flags, kwargs)
+ return _compile(pattern, flags, ignore_unused, kwargs)
def purge():
"Clear the regular expression cache"
@@ -353,7 +355,7 @@ def purge():
def template(pattern, flags=0):
"Compile a template pattern, returning a pattern object."
- return _compile(pattern, flags | TEMPLATE)
+ return _compile(pattern, flags | TEMPLATE, False, {})
def escape(pattern, special_only=True, literal_spaces=False):
"""Escape a string for use as a literal in a pattern. If special_only is
@@ -431,7 +433,7 @@ _locale_sensitive = {}
_MAXCACHE = 500
_MAXREPCACHE = 500
-def _compile(pattern, flags=0, kwargs={}):
+def _compile(pattern, flags, ignore_unused, kwargs):
"Compiles a regular expression to a PatternObject."
global DEFAULT_VERSION
@@ -577,6 +579,12 @@ def _compile(pattern, flags=0, kwargs={}):
named_list_indexes[index] = items
args_needed.add((name, values))
+ # Any unused keyword arguments, possibly resulting from a typo?
+ unused_kwargs = set(kwargs) - set(named_lists)
+ if unused_kwargs and not ignore_unused:
+ any_one = next(iter(unused_kwargs))
+ raise ValueError('unused keyword argument {!a}'.format(any_one))
+
# Check the features of the groups.
_check_group_features(info, parsed)
@@ -694,8 +702,8 @@ def _compile_replacement_helper(pattern, template):
return compiled
# We define Pattern here after all the support objects have been defined.
-Pattern = type(_compile('', 0, {}))
-Match = type(_compile('', 0).match(''))
+Pattern = type(_compile('', 0, False, {}))
+Match = type(_compile('', 0, False, {}).match(''))
# We'll define an alias for the 'compile' function so that the repr of a
# pattern object is eval-able.
diff --git a/regex_3/regex/test/__init__.py b/regex_3/regex/test/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/regex_3/regex/test/test_regex.py b/regex_3/test_regex.py
similarity index 97%
rename from regex_3/regex/test/test_regex.py
rename to regex_3/test_regex.py
index 0b0e3ffdaab18288364c2c339e53e46f2989558c..245c0422d9d6f15989ce0a1d6ba25b2c29ad5a7f 100644
--- a/regex_3/regex/test/test_regex.py
+++ b/regex_3/test_regex.py
@@ -1,11 +1,10 @@
-import regex
-import string
from weakref import proxy
-import unittest
import copy
import pickle
-from test.support import run_unittest
+import regex
+import string
import sys
+import unittest
# String subclasses for issue 18468.
class StrSubclass(str):
@@ -1802,8 +1801,8 @@ class RegexTests(unittest.TestCase):
ascii('\a\b\f\n\r\t\v')),
(r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', '0',
ascii('\a\b\f\n\r\t\v')),
- (r'\c\e\g\h\i\j\k\o\p\q\y\z', 'ceghijkopqyz', '0',
- ascii('ceghijkopqyz')),
+ (r'\c\e\g\i\j\k\o\p\q\y\z', 'cegijkopqyz', '0',
+ ascii('cegijkopqyz')),
(r'\xff', '\377', '0', ascii(chr(255))),
# New \x semantics.
@@ -4188,103 +4187,142 @@ thing
['\U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466'])
# Hg issue 320: Abnormal performance
- self.assertEquals(bool(regex.search(r'(?=a)a', 'a')), True)
- self.assertEquals(bool(regex.search(r'(?!b)a', 'a')), True)
+ self.assertEqual(bool(regex.search(r'(?=a)a', 'a')), True)
+ self.assertEqual(bool(regex.search(r'(?!b)a', 'a')), True)
# Hg issue 327: .fullmatch() causes MemoryError
- self.assertEquals(regex.fullmatch(r'((\d)*?)*?', '123').span(), (0, 3))
+ self.assertEqual(regex.fullmatch(r'((\d)*?)*?', '123').span(), (0, 3))
# Hg issue 329: Wrong group matches when question mark quantifier is used within a look behind
- self.assertEquals(regex.search(r'''(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)''',
+ self.assertEqual(regex.search(r'''(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)''',
'x right').capturesdict(), {'mydef': ['right'], 'wrong': [], 'right':
['right']})
+ # Hg issue 353: fuzzy changes negative indexes
+ self.assertEqual(regex.search(r'(?be)(AGTGTTCCCCGCGCCAGCGGGGATAAACCG){s<=5,i<=5,d<=5,s+i+d<=10}',
+ 'TTCCCCGCGCCAGCGGGGATAAACCG').fuzzy_changes, ([], [], [0, 1, 3, 5]))
+
+ # Git issue 364: Contradictory values in fuzzy_counts and fuzzy_changes
+ self.assertEqual(regex.match(r'(?:bc){e}', 'c').fuzzy_counts, (1, 0,
+ 1))
+ self.assertEqual(regex.match(r'(?:bc){e}', 'c').fuzzy_changes, ([0],
+ [], [1]))
+ self.assertEqual(regex.match(r'(?e)(?:bc){e}', 'c').fuzzy_counts, (0,
+ 0, 1))
+ self.assertEqual(regex.match(r'(?e)(?:bc){e}', 'c').fuzzy_changes,
+ ([], [], [0]))
+ self.assertEqual(regex.match(r'(?b)(?:bc){e}', 'c').fuzzy_counts, (0,
+ 0, 1))
+ self.assertEqual(regex.match(r'(?b)(?:bc){e}', 'c').fuzzy_changes,
+ ([], [], [0]))
+
+ # Git issue 370: Confusions about Fuzzy matching behavior
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){e}',
+ '$ 10,112.111.12').fuzzy_counts, (6, 0, 5))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=1}',
+ '$ 10,112.111.12').fuzzy_counts, (1, 0, 0))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=1,i<=1,d<=1}',
+ '$ 10,112.111.12').fuzzy_counts, (1, 0, 0))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=3}',
+ '$ 10,1a2.111.12').fuzzy_counts, (2, 0, 0))
+ self.assertEqual(regex.match('(?e)(?:^(\\$ )?\\d{1,3}(,\\d{3})*(\\.\\d{2})$){s<=2}',
+ '$ 10,1a2.111.12').fuzzy_counts, (2, 0, 0))
+
+ self.assertEqual(regex.fullmatch(r'(?e)(?:0?,0(?:,0)?){s<=1,d<=1}',
+ ',0;0').fuzzy_counts, (1, 0, 0))
+ self.assertEqual(regex.fullmatch(r'(?e)(?:0??,0(?:,0)?){s<=1,d<=1}',
+ ',0;0').fuzzy_counts, (1, 0, 0))
+
+ # Git issue 371: Specifying character set when fuzzy-matching allows characters not in the set
+ self.assertEqual(regex.search(r"\b(?e)(?:\d{6,20}){i<=5:[\-\\\/]}\b",
+ "cat dog starting at 00:01132.000. hello world"), None)
+
def test_fuzzy_ext(self):
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', 'e')),
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', 'e')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'e')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'e')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', '-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', '-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', '-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', '-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'ae')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'ae')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
'ae')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'a-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:a){e<=1:[a-z]}', 'a-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}',
'a-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'ae')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'ae')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
'ae')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'a-')),
+ self.assertEqual(bool(regex.fullmatch(r'(?:ab){e<=1:[a-z]}', 'a-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)(?:ab){e<=1:[a-z]}',
'a-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'ae')),
+ self.assertEqual(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'ae')),
True)
- self.assertEquals(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
'ea')), True)
- self.assertEquals(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'a-')),
+ self.assertEqual(bool(regex.fullmatch(r'(a)\1{e<=1:[a-z]}', 'a-')),
False)
- self.assertEquals(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
+ self.assertEqual(bool(regex.fullmatch(r'(?r)\1{e<=1:[a-z]}(a)',
'-a')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
'ts')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
'st')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
'st')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
'ts')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
'-s')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
's-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
's-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}',
'-s')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
'ssst')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
'ssts')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
'stss')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})',
'tsss')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
'ss-s')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
'sss-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
'-s')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}',
's-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
'\N{LATIN SMALL LETTER SHARP S}ts')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
'\N{LATIN SMALL LETTER SHARP S}st')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(ss)',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(ss)',
'st\N{LATIN SMALL LETTER SHARP S}')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(ss)',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)\1{e<=1:[a-z]}(ss)',
'ts\N{LATIN SMALL LETTER SHARP S}')), True)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
'\N{LATIN SMALL LETTER SHARP S}-s')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?fiu)(ss)\1{e<=1:[a-z]}',
'\N{LATIN SMALL LETTER SHARP S}s-')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(ss)\1{e<=1:[a-z]}',
's-\N{LATIN SMALL LETTER SHARP S}')), False)
- self.assertEquals(bool(regex.fullmatch(r'(?firu)(ss)\1{e<=1:[a-z]}',
+ self.assertEqual(bool(regex.fullmatch(r'(?firu)(ss)\1{e<=1:[a-z]}',
'-s\N{LATIN SMALL LETTER SHARP S}')), False)
def test_subscripted_captures(self):
@@ -4323,7 +4361,7 @@ if sys.version_info < (3, 2, 0):
RegexTests.assertRaisesRegex = RegexTests.assertRaisesRegexp
def test_main():
- run_unittest(RegexTests)
+ unittest.main(verbosity=2)
if __name__ == "__main__":
test_main()
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..4927abe7a921f670cafa74f837bfed057ae40350
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build =
+tag_date = 0
+
diff --git a/setup.py b/setup.py
index 7bce303061936e19f9380b9c123619c4e806cd40..edcd6b8a1c63c28ea4ce60c540b33eefe5adb538 100644
--- a/setup.py
+++ b/setup.py
@@ -1,33 +1,25 @@
#!/usr/bin/env python
-from os.path import abspath, dirname, join
+from setuptools import setup, Extension
+from os.path import join
import sys
-try:
- from setuptools import setup, Extension
-except ImportError:
- from distutils.core import setup, Extension
-
MAJOR, MINOR = sys.version_info[:2]
-BASE_DIR = dirname(abspath(__file__))
-print('BASE_DIR is %s' % BASE_DIR)
-PKG_BASE = 'regex_%i' % MAJOR
-DOCS_DIR = join(BASE_DIR, 'docs')
+SRC_BASE = 'regex_%i' % MAJOR
+
+with open('README.rst') as file:
+ long_description = file.read()
setup(
name='regex',
- version='2019.08.19',
+ version='2020.7.14',
description='Alternative regular expression module, to replace re.',
- long_description=open(join(DOCS_DIR, 'Features.rst')).read(),
-
- # PyPI does spam protection on email addresses, no need to do it here
+ long_description=long_description,
author='Matthew Barnett',
author_email='regex@mrabarnett.plus.com',
-
- maintainer='Matthew Barnett',
- maintainer_email='regex@mrabarnett.plus.com',
-
url='https://bitbucket.org/mrabarnett/mrab-regex',
+ license='Python Software Foundation License',
+
classifiers=[
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
@@ -42,13 +34,11 @@ setup(
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: Text Processing',
'Topic :: Text Processing :: General',
- ],
- license='Python Software Foundation License',
+ ],
+ package_dir={'regex': SRC_BASE},
py_modules=['regex.__init__', 'regex.regex', 'regex._regex_core',
- 'regex.test.__init__', 'regex.test.test_regex'],
- package_dir={'': PKG_BASE},
-
- ext_modules=[Extension('regex._regex', [join(PKG_BASE, '_regex.c'),
- join(PKG_BASE, '_regex_unicode.c')])],
- )
+ 'regex.test_regex'],
+ ext_modules=[Extension('regex._regex', [join(SRC_BASE, '_regex.c'),
+ join(SRC_BASE, '_regex_unicode.c')])],
+)
diff --git a/tools/build_regex_unicode.py b/tools/build_regex_unicode.py
index c87f03641f65002bc65343ddb3ddc5de6cd243d5..44570333ffe0520a7a3ae767ac516fb6d9cc878f 100644
--- a/tools/build_regex_unicode.py
+++ b/tools/build_regex_unicode.py
@@ -1,2353 +1,1776 @@
-#! python3.7
-# -*- coding: utf-8 -*-
-#
-# This Python script parses the Unicode data files and generates the C files
-# for the regex module.
-#
-# Written by MRAB.
-#
-from collections import defaultdict
-from json import dump, load
-from os import remove, rename
-from os.path import dirname, exists, isfile, join, splitext
-from shutil import copy2, move
-from urllib.error import HTTPError
-from urllib.parse import urljoin
-from urllib.request import urlretrieve
-
-def report(*args, **kwargs):
- print(*args, **kwargs, flush=True)
-
-class UnicodeDataError(Exception):
- pass
-
-def download_unicode_file(url, path):
- 'Downloads a Unicode file.'
-
- report('Downloading {}'.format(url))
-
- new_path = path + '.new'
-
- try:
- urlretrieve(url, new_path)
- except ValueError:
- # The download failed. Clean up.
- try:
- remove(new_path)
- except OSError:
- pass
-
- raise
-
- # Make a copy of the downloaded file with a versioned filename.
- with open(new_path, encoding='utf-8') as file:
- # The 1st line of the file should be a comment with a version filename.
- line = file.readline()
-
- if line.startswith('#') and line.endswith('.txt\n'):
- versioned_name = line.strip('# \n')
- versioned_path = join(unicode_folder, versioned_name)
- if isfile(versioned_path):
- # We already have this version.
- remove(new_path)
- else:
- # It's a new version.
- move(new_path, path)
- copy2(path, versioned_path)
-
- version = splitext(versioned_name)[0].partition('-')[2]
- report('Updated to version {}'.format(versioned_name))
-
-class MultistageTable:
- 'A multi-stage table.'
-
- def __init__(self, block_sizes, stages, is_binary):
- self.block_sizes = block_sizes
- self.stages = stages
- self.is_binary = is_binary
-
- self.num_stages = len(self.block_sizes) + 1
-
- # How many bytes of storage are needed for this table?
- if self.is_binary:
- self.bytesize = (sum(smallest_datatype(min(stage), max(stage))[1] *
- len(stage) for stage in self.stages[ : -1]) +
- (len(self.stages[-1]) + 7) // 8)
- else:
- self.bytesize = sum(smallest_datatype(min(stage), max(stage))[1] *
- len(stage) for stage in self.stages)
-
- # Calculate the block-size products for lookup.
- self._size_products = [product(self.block_sizes[stage : ]) for stage in
- range(self.num_stages - 1)]
-
-class PropertySet:
- 'A collection of Unicode properties.'
-
- def __init__(self):
- self._property_list = []
- self._property_dict = {}
- self._munge_property_name = None
-
- def add(self, property):
- 'Adds a property.'
-
- if not self._munge_property_name:
- self._munge_property_name = property.munge_name
-
- if property.name in self:
- raise ValueError('property set already has property {!a}'.format(property.name))
-
- self._property_list.append(property)
-
- for name in [property.name] + property.aliases:
- self._property_dict[self._munge_property_name(name)] = property
-
- def get(self, name, default=None):
- if not self._property_dict:
- return default
-
- return self._property_dict.get(self._munge_property_name(name),
- default)
-
- def __len__(self):
- return len(self._property_list)
-
- def __getitem__(self, name):
- property = self.get(self._munge_property_name(name))
- if property is None:
- raise KeyError(name)
-
- return property
-
- def __delitem__(self, name):
- property = self[name]
-
- self._property_list = [p for p in self._property_list if p is not
- property]
- self._property_dict = {n: p for n, p in self._property_dict.items() if
- p is not property}
-
- def __iter__(self):
- for property in self._property_list:
- yield property
-
-class Property:
- 'A Unicode property.'
-
- def __init__(self, name, aliases=[]):
- self.name = name
- self.aliases = []
- self.default = None
- self.id = None
- self._value_list = []
- self._value_dict = {}
- self._munge_value_name = None
-
- # Ignore any duplicate names.
- seen = {self.munge_name(self.name)}
-
- for name in aliases:
- munged_name = self.munge_name(name)
- if munged_name not in seen:
- self.aliases.append(name)
- seen.add(munged_name)
-
- def add(self, value):
- 'Adds a value.'
-
- if not self._munge_value_name:
- self._munge_value_name = value.munge_name
-
- if value.name in self:
- raise KeyError('property {!a} already has value {!a}'.format(self.name,
- value.name))
-
- self._value_list.append(value)
-
- for munged_name in [value.name] + value.aliases:
- self._value_dict[self._munge_value_name(munged_name)] = value
-
- def munge_name(self, name):
- 'Munges a name into a standard form.'
-
- return name.translate(self._munge_trans).upper()
-
- _munge_trans = str.maketrans('', '', ' -_')
-
- def get(self, name, default=None):
- if not self._value_dict:
- return default
-
- return self._value_dict.get(self._munge_value_name(name), default)
-
- def __len__(self):
- return len(self._value_list)
-
- def __getitem__(self, name):
- value = self.get(name)
- if value is None:
- raise KeyError(name)
-
- return value
-
- def __iter__(self):
- for value in self._value_list:
- yield value
-
- def _expand_entries(self):
- 'Expands the value dict into a list of entries.'
-
- entries = [0] * NUM_CODEPOINTS
-
- if self.name == 'Script_Extensions':
- script = properties['Script']
-
- for value in script._value_list:
- for lower, upper in value.ranges:
- entries[lower : upper + 1] = [value.id] * (upper - lower +
- 1)
-
- for value in self._value_list:
- if not value.mask:
- for lower, upper in value.ranges:
- entries[lower : upper + 1] = [value.id] * (upper - lower +
- 1)
-
- return entries
-
- def generate_code(self, h_file, c_file):
- 'Generates the code for a property.'
-
- # Build the tables.
- self._build_tables(MAX_STAGES)
-
- report('Generating code for {!a}'.format(self.name))
-
- table = self.table
-
- # Write the property tables.
- c_file.write('''
-/* {name}. */
-'''.format(name=self.name))
-
- self.generate_tables(c_file)
-
- if self.name == 'Script_Extensions':
- rows = []
- scripts = properties['Script']
-
- for value in sorted(self, key=lambda value: value.id):
- rows.append(sorted(scripts[name].id for name in
- value.name.split()))
-
- max_cols = max(len(row) for row in rows)
- fmt = ' {{' + ', '.join(['%3d'] * max_cols) + '}},'
-
- rows = [fmt % tuple(row + [0] * (max_cols - len(row))) for row in
- rows]
- rows[-1] = rows[-1].rstrip(',')
-
- c_file.write('''
-static RE_ScriptExt re_scripts_extensions_table[] = {
-''')
-
- for row in rows:
- c_file.write(row + '\n')
-
- c_file.write('''\
-};
-''')
-
- # Write the lookup function.
- if self.name == 'Script_Extensions':
- prototype = 'int re_get_script_extensions(RE_UINT32 ch, RE_UINT8* scripts)'
- else:
- prototype = 'RE_UINT32 re_get_{name}(RE_UINT32 ch)'.format(name=self.name.lower())
-
- h_file.write('{prototype};\n'.format(prototype=prototype))
-
- c_file.write('''
-{prototype} {{
-'''.format(prototype=prototype))
-
- self._generate_locals(c_file)
-
- c_file.write('\n')
-
- self._generate_lookup(c_file)
-
- if self.name == 'Script_Extensions':
- c_file.write('''
- scr = re_scripts_extensions_table[value].scripts;
- scripts[0] = scr[0];
- count = 1;
-
- if (scr[0] != 0) {
- while (count < RE_MAX_SCX && scr[count] != 0) {
- scripts[count] = scr[count];
- ++count;
- }
- }
-
- return count;
-}
-''')
- else:
- c_file.write('''
- return value;
-}
-''')
-
- def generate_tables(self, c_file):
- 'Generates the tables.'
-
- table = self.table
-
- for stage in range(table.num_stages):
- # The contents of this table.
- entries = table.stages[stage]
-
- # What data type should we use for the entries?
- if self.is_binary and stage == table.num_stages - 1:
- data_type = 'RE_UINT8'
-
- entries = self._pack_to_bitflags(entries)
- else:
- data_type = smallest_datatype(min(entries), max(entries))[0]
-
- # The entries will be stored in an array.
- c_file.write('''
-static {data_type} re_{name}_stage_{stage}[] = {{
-'''.format(data_type=data_type, name=self.name.lower(), stage=stage + 1))
-
- # Write the entries, nicely aligned in columns.
- entries = ['{},'.format(e) for e in entries]
-
- entry_width = max(len(e) for e in entries)
- entries = [e.rjust(entry_width) for e in entries]
-
- for start in range(0, len(entries), COLUMNS):
- c_file.write(' {}\n'.format(' '.join(entries[start : start +
- COLUMNS])))
-
- c_file.write('};\n')
-
- # Write how much storage will be used by all of the tables.
- c_file.write('''
-/* {name}: {bytesize} bytes. */
-'''.format(name=self.name, bytesize=table.bytesize))
-
- def _pack_to_bitflags(self, entries):
- entries = tuple(entries)
- new_entries = []
-
- for start in range(0, len(entries), 8):
- new_entries.append(self.bitflag_dict[entries[start : start + 8]])
-
- return new_entries
-
- # Build a dict for converting 8-tuples into bytes.
- bitflag_dict = {}
-
- for byte in range(0x100):
- bitflag_dict[tuple(map(int, '{:08b}'.format(byte)[ : : -1]))] = byte
-
- def _generate_locals(self, c_file):
- c_file.write('''\
- RE_UINT32 code;
- RE_UINT32 f;
- RE_UINT32 pos;
- RE_UINT32 value;
-''')
-
- if self.name == 'Script_Extensions':
- c_file.write('''\
- RE_UINT8* scr;
- int count;
-''')
-
- def _generate_lookup(self, c_file):
- 'Generates the C lookup function.'
-
- table = self.table
- name = self.name.lower()
-
- # Convert the block sizes into shift values.
- shifts = [mul_to_shift(size) for size in table.block_sizes]
-
- c_file.write('''\
- f = ch >> {field_shift};
- code = ch ^ (f << {field_shift});
- pos = (RE_UINT32)re_{name}_stage_1[f] << {block_shift};
-'''.format(field_shift=sum(shifts), name=name, block_shift=shifts[0]))
-
- for stage in range(1, table.num_stages - 1):
- c_file.write('''\
- f = code >> {field_shift};
- code ^= f << {field_shift};
- pos = (RE_UINT32)re_{name}_stage_{stage}[pos + f] << {block_shift};
-'''.format(field_shift=sum(shifts[stage : ]), name=name, stage=stage + 1,
- block_shift=shifts[stage]))
-
- # If it's a binary property, we're using bitflags.
- if self.is_binary:
- c_file.write('''\
- pos += code;
- value = (re_{name}_stage_{stage}[pos >> 3] >> (pos & 0x7)) & 0x1;
-'''.format(name=self.name.lower(), stage=table.num_stages))
- else:
- c_file.write('''\
- value = re_{name}_stage_{stage}[pos + code];
-'''.format(name=self.name.lower(), stage=table.num_stages))
-
- def _build_tables(self, max_stages):
- 'Calculates the block sizes and build the tables.'
-
- entries = self._expand_entries()
-
- self.is_binary = len(self._value_list) == 2
-
- if self.name not in storage:
- smallest_size = float('inf')
-
- report('Determining smallest storage size')
-
- # Try different numbers and sizes of blocks.
- for block_sizes, bytesize in self._table_sizes(entries, 1,
- max_stages, self.is_binary):
- if bytesize < smallest_size:
- best_block_sizes = block_sizes
- smallest_size = bytesize
-
- storage[self.name] = best_block_sizes, smallest_size
- else:
- best_block_sizes, smallest_size = storage[self.name]
-
- report('The storage size is {} bytes'.format(smallest_size))
-
- self._build_multistage_table(entries, best_block_sizes, smallest_size)
-
- def _table_sizes(self, entries, num_stages, max_stages, binary):
- '''Yields different numbers and sizes of blocks, up to max_stages.
-
- All the sizes are powers of 2 and for a binary property the final block
- size is at least 8 because the final stage of the table will be using
- bitflags.
- '''
-
- # What if this is the top stage?
- if binary:
- bytesize = len(entries) // 8
- else:
- bytesize = (smallest_datatype(min(entries), max(entries))[1] *
- len(entries))
-
- yield [], bytesize
-
- if num_stages >= max_stages:
- return
-
- entries = tuple(entries)
-
- # Initialise the block size and double it on each iteration. Usually an
- # index entry is 1 byte, so a data block should be at least 2 bytes.
- size = 16 if binary else 2
-
- # There should be at least 2 blocks.
- while size * 2 <= len(entries) and len(entries) % size == 0:
- # Group the entries into blocks.
- indexes = []
- block_dict = {}
- for start in range(0, len(entries), size):
- block = entries[start : start + size]
- indexes.append(block_dict.setdefault(block, len(block_dict)))
-
- # Collect all the blocks.
- blocks = []
- for block in sorted(block_dict, key=lambda block:
- block_dict[block]):
- blocks.extend(block)
-
- # How much storage will the blocks stage need?
- if binary:
- block_bytesize = len(blocks) // 8
- else:
- block_bytesize = (smallest_datatype(min(blocks),
- max(blocks))[1] * len(blocks))
-
- # Yield the higher stages for the indexes.
- for block_sizes, total_bytesize in self._table_sizes(indexes,
- num_stages + 1, max_stages, False):
- yield block_sizes + [size], total_bytesize + block_bytesize
-
- # Next size up.
- size *= 2
-
- def _build_multistage_table(self, entries, block_sizes, bytesize):
- 'Builds a multi-stage table.'
-
- if product(block_sizes) > len(entries):
- raise UnicodeDataError('product of block sizes greater than number of entries')
-
- # Build the stages from the bottom one up.
- stages = []
-
- for block_size in reversed(block_sizes):
- entries = tuple(entries)
-
- # Group the entries into blocks.
- block_dict = {}
- indexes = []
- for start in range(0, len(entries), block_size):
- block = entries[start : start + block_size]
- indexes.append(block_dict.setdefault(block, len(block_dict)))
-
- # Collect all the blocks.
- blocks = []
- for block in sorted(block_dict, key=lambda block:
- block_dict[block]):
- blocks.extend(block)
-
- # We have a new stage.
- stages.append(blocks)
-
- # Prepare for the next higher stage.
- entries = indexes
-
- # We have the top stage.
- stages.append(entries)
-
- # Put the stages into the correct order (top-down).
- stages.reverse()
-
- self.table = MultistageTable(block_sizes, stages, self.is_binary)
-
-def product(numbers):
- 'Returns the product of a series of numbers.'
-
- if not product:
- raise ValueError('product of empty sequence')
-
- result = 1
- for n in numbers:
- result *= n
-
- return result
-
-def mul_to_shift(number):
- 'Converts a multiplier into a shift.'
-
- shift = number.bit_length() - 1
- if shift < 0 or (1 << shift) != number:
- raise ValueError("can't convert multiplier into shift")
-
- return shift
-
-class AnyProperty(Property):
- 'The Any property.'
-
- def __init__(self):
- Property.__init__(self, 'Any')
-
- def generate_code(self, h_file, c_file):
- 'Generates the code for a property.'
-
- report('Generating code for Any')
-
- # Write the lookup function.
- prototype = 'RE_UINT32 re_get_any(RE_UINT32 ch)'
-
- h_file.write('{prototype};\n'.format(prototype=prototype))
-
- c_file.write('''
-/* Any. */
-
-{prototype} {{
- return 1;
-}}
-'''.format(prototype=prototype))
-
-class Value:
- 'A Unicode value.'
-
- def __init__(self, name, aliases=[], mask=0, id=None):
- self.name = name
- self.aliases = []
- self.id = id
- self.mask = mask
- self._ranges = []
- self._modified = False
-
- # Ignore any duplicate names.
- seen = {self.munge_name(self.name)}
-
- for name in aliases:
- munged_name = self.munge_name(name)
- if munged_name not in seen:
- self.aliases.append(name)
- seen.add(munged_name)
-
- def add(self, ranges):
- 'Adds a codepoint range.'
-
- if isinstance(ranges, tuple):
- self._ranges.append(ranges)
- else:
- self._ranges.extend(ranges)
-
- self._modified = True
-
- @property
- def ranges(self):
- if self._modified:
- self._ranges = merge_ranges(self._ranges)
- self._modified = False
-
- return self._ranges
-
- def munge_name(self, name):
- 'Munges a name into a standard form.'
-
- return name.translate(self._munge_trans).upper()
-
- _munge_trans = str.maketrans('', '', ' -_')
-
- def __iter__(self):
- for codepoints in self.ranges:
- yield codepoints
-
-class NumericValue(Value):
- 'A Unicode numeric value.'
-
- _munge_trans = str.maketrans('', '', ' _')
-
-class CaseProperty(Property):
- 'A case-folding property.'
-
- def _expand_entries(self):
- entries = [0] * NUM_CODEPOINTS
-
- for id, key in enumerate(self._value_list):
- for codepoint in self._value_dict[key]:
- entries[codepoint] = id
-
- return entries
-
-class AllCases(CaseProperty):
- 'All Unicode cases.'
-
- def __init__(self, name, other_cases):
- self.name = name
-
- # How many other cases can there be?
- max_other_cases = max(map(len, other_cases))
- self.max_cases = max_other_cases + 1
-
- extra = tuple([0] * max_other_cases)
-
- self._value_list = [extra]
- self._value_dict = {extra: []}
-
- for diff, codepoints in sorted(other_cases.items()):
- if diff:
- key = (diff + extra)[ : max_other_cases]
- self._value_list.append(key)
- self._value_dict[key] = codepoints
-
- self._value_list.sort(key=lambda diff: sorted(self._value_dict[diff]))
-
- def generate_code(self, h_file, c_file):
- 'Generates the code for a property.'
-
- report('Generating code for {}'.format(self.name))
-
- # Build the tables.
- self._build_tables(MAX_CASE_STAGES)
-
- # Write the all-cases tables.
- c_file.write('''
-/* {name}. */
-'''.format(name=self.name))
-
- self.generate_tables(c_file)
-
- # Calculate the size of the struct.
- entry_size = (self.max_cases - 1) * 4
-
- # Write the entries, nicely aligned in columns.
- rows = [[str(e) for e in r] for r in self._value_list]
- entry_widths = [max(len(e) for e in c) for c in zip(*rows)]
- rows = [[e.rjust(w) for e, w in zip(r, entry_widths)] for r in rows]
-
- c_file.write('''
-static RE_AllCases re_all_cases_table[] = {
-''')
- for r in rows:
- c_file.write(' {{%s}},\n' % ', '.join(r))
-
- c_file.write('};\n')
-
- # Write how much storage will be used by the table.
- c_file.write('''
-/* {name}: {bytesize} bytes. */
-'''.format(name=self.name, bytesize=entry_size * len(rows)))
-
- # Write the lookup function.
- prototype = 'int re_get_{name}(RE_UINT32 ch, RE_UINT32* codepoints)'.format(name=self.name.lower())
-
- h_file.write('{prototype};\n'.format(prototype=prototype))
-
- c_file.write('''
-{prototype} {{
-'''.format(name=self.name, prototype=prototype))
-
- self._generate_locals(c_file)
-
- c_file.write('''\
- RE_AllCases* all_cases;
- int count;
-
-''')
-
- self._generate_lookup(c_file)
-
- c_file.write('''
- all_cases = &re_all_cases_table[value];
-
- codepoints[0] = ch;
- count = 1;
-
- while (count < RE_MAX_CASES && all_cases->diffs[count - 1] != 0) {
- codepoints[count] = (RE_UINT32)((RE_INT32)ch + all_cases->diffs[count -
- 1]);
- ++count;
- }
-
- return count;
-}
-''')
-
-class SimpleCaseFolding(CaseProperty):
- 'Unicode simple case-folding.'
-
- def __init__(self, name, folding):
- self.name = name
- self._value_dict = dict(folding)
- self._value_dict.setdefault(0, [])
- self._value_list = list(self._value_dict)
-
- self._value_list.sort(key=lambda diff: sorted(self._value_dict[diff]))
-
- def generate_code(self, h_file, c_file):
- 'Generates the code for a property.'
-
- report('Generating code for {}'.format(self.name))
-
- # Build the tables.
- self._build_tables(MAX_CASE_STAGES)
-
- # Write the case-folding tables.
- c_file.write('''
-/* {name}. */
-'''.format(name=self.name))
-
- self.generate_tables(c_file)
-
- # Calculate the size of an entry, including alignment.
- entry_size = 4
-
- # Write the entries, nicely aligned in columns.
- rows = [str(r) for r in self._value_list]
- entry_width = max(len(r) for r in rows)
- rows = [r.rjust(entry_width) for r in rows]
-
- c_file.write('''
-static RE_INT32 re_simple_case_folding_table[] = {
-''')
- for r in rows:
- c_file.write(' {},\n'.format(r))
-
- c_file.write('};\n')
-
- # Write how much storage will be used by the table.
- c_file.write('''
-/* {name}: {bytesize} bytes. */
-'''.format(name=self.name, bytesize=entry_size * len(rows)))
-
- # Write the lookup function.
- prototype = 'RE_UINT32 re_get_{name}(RE_UINT32 ch)'.format(name=self.name.lower())
-
- h_file.write('{prototype};\n'.format(prototype=prototype))
-
- c_file.write('''
-{prototype} {{
-'''.format(name=self.name, prototype=prototype))
-
- self._generate_locals(c_file)
-
- c_file.write('''\
- RE_INT32 diff;
-
-''')
-
- self._generate_lookup(c_file)
-
- c_file.write('''
- diff = re_simple_case_folding_table[value];
-
- return (RE_UINT32)((RE_INT32)ch + diff);
-}
-''')
-
-class FullCaseFolding(CaseProperty):
- 'Unicode full case-folding.'
-
- def __init__(self, name, folding):
- self.name = name
- self.max_folded = max(map(len, folding))
-
- extra = tuple([0] * self.max_folded)
-
- self._value_dict = {extra: []}
-
- for folded in folding:
- key = (folded + extra)[ : self.max_folded]
- self._value_dict[key] = folding[folded]
-
- self._value_list = list(self._value_dict)
- self._value_list.sort(key=lambda diff: sorted(self._value_dict[diff]))
-
- def generate_code(self, h_file, c_file):
- 'Generates the code for a property.'
-
- report('Generating code for {}'.format(self.name))
-
- # Build the tables.
- self._build_tables(MAX_CASE_STAGES)
-
- # Write the case-folding tables.
- c_file.write('''
-/* {name}. */
-'''.format(name=self.name))
-
- self.generate_tables(c_file)
-
- # What data type should we use for the case-folding entries?
- rows = self._value_list
-
- # The diff entry needs to be signed 32-bit, the others should be OK
- # with unsigned 16-bit.
- data = [e for r in rows for e in r[1 : ]]
-
- # Verify that unsigned 16-bit is OK.
- data_type = smallest_datatype(min(data), max(data))[0]
- if data_type != 'RE_UINT16':
- raise UnicodeDataError('full case-folding table entry too big')
-
- # Calculate the size of an entry, including alignment.
- entry_size = 4 + 2 * (self.max_folded - 1)
- excess = entry_size % 4
- if excess > 0:
- entry_size += 4 - excess
-
- # Write the entries, nicely aligned in columns.
- rows = [[str(e) for e in r] for r in rows]
- entry_widths = [max(len(e) for e in c) for c in zip(*rows)]
- rows = [[e.rjust(w) for e, w in zip(r, entry_widths)] for r in rows]
-
- c_file.write('''
-static RE_FullCaseFolding re_full_case_folding_table[] = {
-''')
- for r in rows:
- c_file.write(' {%s, {%s}},\n' % (r[0], ', '.join(r[1 : ])))
-
- c_file.write('};\n')
-
- # Write how much storage will be used by the table.
- c_file.write('''
-/* {name}: {bytesize} bytes. */
-'''.format(name=self.name, bytesize=entry_size * len(rows)))
-
- # Write the lookup function.
- prototype = 'int re_get_{name}(RE_UINT32 ch, RE_UINT32* codepoints)'.format(name=self.name.lower())
-
- h_file.write('{prototype};\n'.format(prototype=prototype))
-
- c_file.write('''
-{prototype} {{
-'''.format(name=self.name, prototype=prototype))
-
- self._generate_locals(c_file)
-
- c_file.write('''\
- RE_FullCaseFolding* case_folding;
- int count;
-
-''')
-
- self._generate_lookup(c_file)
-
- c_file.write('''
- case_folding = &re_full_case_folding_table[value];
-
- codepoints[0] = (RE_UINT32)((RE_INT32)ch + case_folding->diff);
- count = 1;
-
- while (count < RE_MAX_FOLDED && case_folding->codepoints[count - 1] != 0) {
- codepoints[count] = case_folding->codepoints[count - 1];
- ++count;
- }
-
- return count;
-}
-''')
-
-def parse_property_files(unicode_folder, unicode_data_files, properties):
- 'Parses the Unicode data files.'
-
- # Parse the property and value aliases files.
- parse_property_aliases(join(unicode_folder, 'PropertyAliases.txt'),
- properties)
-
- parse_value_aliases(join(unicode_folder, 'PropertyValueAliases.txt'),
- properties)
-
- # Parse the other data files.
- next_property_id = 0
- it = iter(unicode_data_files.splitlines())
-
- # Find the 'codepoints' section.
- for line in it:
- if line.startswith('[properties]'):
- break
-
- # Process the 'properties' section.
- for line in it:
- if line.startswith('['):
- break
-
- if line and not line.startswith('#'):
- filename = line.rpartition('/')[2]
- if filename == 'DerivedNumericValues.txt':
- # Treat the numeric values file specially.
- next_property_id = parse_numeric_values_file(unicode_folder,
- filename, next_property_id, properties)
- elif filename == 'emoji-data.txt':
- next_property_id = parse_emoji_file(unicode_folder, filename,
- next_property_id, properties)
- elif filename == 'LineBreak.txt':
- next_property_id = parse_linebreak_file(unicode_folder,
- filename, next_property_id, properties)
- elif filename == 'ScriptExtensions.txt':
- next_property_id = parse_script_extensions_file(unicode_folder,
- filename, next_property_id, properties)
- else:
- next_property_id = parse_unicode_data_file(unicode_folder,
- filename, next_property_id, properties)
-
- if line.startswith('[normalisation]'):
- filename = next(it).rpartition('/')[2]
- next_property_id = parse_unicode_normalisation_file(unicode_folder,
- filename, next_property_id, properties)
-
- # Add the additional properties.
- next_property_id = make_additional_properties(properties, next_property_id)
-
- # Remove all the properties that have been named but not defined.
- undefined = [property for property in properties if property.id is None]
-
- for property in undefined:
- del properties[property.name]
-
- report()
-
-def parse_property_aliases(path, properties):
- 'Parses the file listing the property aliases.'
-
- with open(path, encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line and not line.startswith('#'):
- # It's a data line.
- #
- # Ignore anything after the comment, if any.
- line = line.partition('#')[0]
-
- fields = [field.strip() for field in line.split(';')]
-
- # The canonical name of the property is in field 2. The other
- # fields contain other aliases.
- properties.add(Property(fields[1], aliases=fields))
-
-def parse_value_aliases(path, properties):
- 'Parses the file listing the value aliases for each property.'
-
- with open(path, encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line and not line.startswith('#'):
- # It's a data line.
- #
- # Ignore anything after the comment, if any.
- line = line.partition('#')[0]
-
- fields = [field.strip() for field in line.split(';')]
-
- # The name of the property is in field 1 and the canonical name
- # of the value is in either field 3 or field 4. The other
- # fields contain other aliases.
- value_name = fields[3] if fields[0] == 'ccc' else fields[2]
- properties[fields[0]].add(Value(value_name, aliases=fields[1 :
- ]))
-
-def parse_unicode_data_file(unicode_folder, filename, next_property_id,
- properties):
- 'Parses a Unicode data file.'
-
- report('Parsing {}'.format(filename))
- property = None
- value = None
- is_binary = True
- next_value_id = 0
-
- with open(join(unicode_folder, filename), encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line.startswith('#'):
- # It's a comment line.
- if line.startswith(('# Property:',
- '# All code points not explicitly listed for')):
- # This line is giving the name of the property.
- is_binary = False
- property = properties[line.split()[-1]]
- if property.id is None:
- property.id = next_property_id
- next_property_id += 1
-
- if property.name == 'General_Category':
- property.default = property['Unassigned']
- elif line.startswith('# @missing:'):
- # This line is giving the name of the default value.
- is_binary = False
- value = property[line.split()[-1]]
- value.id = 0
- next_value_id = 1
- property.default = value
- elif line:
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoints = [int(c, 16) for c in fields[0].split('..')]
- name = fields[1].strip()
-
- if is_binary:
- # It's a binary property.
- property = properties[name]
- if property.id is None:
- property.id = next_property_id
- next_property_id += 1
-
- property.default = property['No']
- property['No'].id = 0
- property['Yes'].id = 1
-
- value = property['Yes']
- else:
- # It's a multi-value property.
- value = property[name]
- if value.id is None:
- value.id = next_value_id
- next_value_id += 1
-
- value.add((codepoints[0], codepoints[-1]))
-
- return next_property_id
-
-def parse_numeric_values_file(unicode_folder, filename, next_property_id,
- properties):
- 'Parses the Unicode numeric value data file.'
-
- report('Parsing {}'.format(filename))
- property = None
- value = None
- next_value_id = 0
-
- with open(join(unicode_folder, filename), encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line.startswith('#'):
- # It's a comment line.
- if line.startswith('# Derived Property:'):
- # This line is giving the name of the property.
- property = properties[line.split()[-1]]
- if property.id is None:
- property.id = next_property_id
- next_property_id += 1
-
- if property.default is None:
- name= 'NaN'
- value = property.get(name)
- if value is None:
- value = NumericValue(name, id=0)
- next_value_id = 1
- property.add(value)
-
- property.default = value
- elif line.startswith('# @missing:'):
- # This line is giving the name of the default value.
- name = line.split()[-1]
- value = property.get(name)
- if value is None:
- value = NumericValue(name, id=0)
- next_value_id = 1
- property.add(value)
-
- property.default = value
- elif line:
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoints = [int(c, 16) for c in fields[0].split('..')]
- name = fields[3].strip()
-
- value = property.get(name)
- if value is None:
- value = NumericValue(name, id=next_value_id)
- next_value_id += 1
- property.add(value)
-
- value.add((codepoints[0], codepoints[-1]))
-
- return next_property_id
-
-def parse_emoji_file(unicode_folder, filename, next_property_id, properties):
- 'Parses the Unicode emoji data file.'
-
- report('Parsing {}'.format(filename))
- property = None
- value = None
- next_value_id = 0
-
- with open(join(unicode_folder, filename), encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line.startswith('#'):
- # It's a comment line.
- if line.startswith('# @missing:'):
- # This line is giving the name of the property.
- fields = line.split()
- property = Property(fields[-3])
- properties.add(property)
- assert fields[-1] == 'No'
- if property.id is None:
- property.id = next_property_id
- next_property_id += 1
-
- if property.default is None:
- name = 'No'
- value = property.get(name)
- if value is None:
- value = Value(name, id=0)
- next_value_id = 1
- property.add(value)
-
- property.default = value
- elif line:
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoints = [int(c, 16) for c in fields[0].split('..')]
- name = 'Yes'
- value = property.get(name)
- if value is None:
- value = Value(name, id=next_value_id)
- next_value_id += 1
- property.add(value)
-
- value.add((codepoints[0], codepoints[-1]))
-
- return next_property_id
-
-def parse_linebreak_file(unicode_folder, filename, next_property_id, properties):
- 'Parses the Unicode linebreak data file.'
-
- report('Parsing {}'.format(filename))
- property = Property('Line_Break')
- properties.add(property)
- if property.id is None:
- property.id = next_property_id
- next_property_id += 1
-
- value = None
- next_value_id = 0
-
- with open(join(unicode_folder, filename), encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line.startswith('#'):
- # It's a comment line.
- if line.startswith('# @missing:'):
- # This line is giving the name of the default value.
- name = line.split(';')[-1].strip()
- value = property.get(name)
- if value is None:
- value = NumericValue(name, id=0)
- next_value_id = 1
- property.add(value)
-
- property.default = value
- elif line:
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoints = [int(c, 16) for c in fields[0].split('..')]
- name = fields[1].strip()
- value = property.get(name)
- if value is None:
- value = Value(name, id=next_value_id)
- next_value_id += 1
- property.add(value)
-
- value.add((codepoints[0], codepoints[-1]))
-
- return next_property_id
-
-def parse_unicode_normalisation_file(unicode_folder, filename,
- next_property_id, properties):
- 'Parses a Unicode normalisation file.'
-
- report('Parsing {}'.format(filename))
- property = None
- value = None
- next_value_id = 0
-
- with open(join(unicode_folder, filename), encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line.startswith('#'):
- # It's a comment line.
- if line.startswith('# Derived Property:'):
- property = None
- elif line.startswith('# Property:'):
- # This line is giving the name of the property.
- property = properties[line.split()[-1]]
- if property.id is None:
- property.id = next_property_id
- next_property_id += 1
- elif property and line.startswith('# @missing:'):
- # This line is giving the name of the default value.
- value = property[line.split()[-1]]
- value.id = 0
- next_value_id = 1
- property.default = value
- elif property and line:
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoints = [int(c, 16) for c in fields[0].split('..')]
- name = fields[2].strip()
-
- # It's a multi-value property.
- value = property[name]
- if value.id is None:
- value.id = next_value_id
- next_value_id += 1
-
- value.add((codepoints[0], codepoints[-1]))
-
- return next_property_id
-
-def parse_script_extensions_file(unicode_folder, filename, next_property_id,
- properties):
- 'Parses the Unicode Script Extensions file.'
-
- report('Parsing {}'.format(filename))
-
- scripts = properties['Script']
-
- property = properties['ScriptExtensions']
- if property.id is None:
- property.id = next_property_id
- property.default = scripts.default
- next_property_id += 1
-
- for value in scripts:
- if value.id is not None:
- property.add(Value(value.name, aliases=value.aliases, id=value.id))
-
- next_value_id = max(value.id for value in property) + 1
-
- with open(join(unicode_folder, filename), encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line.startswith('#'):
- pass
- elif line:
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoints = [int(c, 16) for c in fields[0].split('..')]
- script_names = fields[1].strip()
-
- # Ensure that the script names are known.
- for name in script_names.split():
- scripts[name]
-
- try:
- value = property[script_names]
- except KeyError:
- value = Value(script_names, id=next_value_id)
- property.add(value)
- next_value_id += 1
-
- value.add((codepoints[0], codepoints[-1]))
-
- return next_property_id
-
-def make_additional_properties(properties, next_property_id):
- 'Makes the additional properties.'
-
- general_category = properties['General_Category']
-
- # Make the 'Alphanumeric' property.
- alphabetic = properties['Alphabetic']['Yes'].ranges
- decimal_number = general_category['Decimal_Number'].ranges
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Alphanumeric', alphabetic + decimal_number, aliases=['AlNum'])
-
- # Make the 'Any' property.
- next_property_id = make_Any_property(properties, next_property_id)
-
- # General_Category has a compound value called 'Assigned'.
- mask = 0
- ranges = []
-
- for value in general_category:
- if value.id is not None:
- mask |= 1 << value.id
-
- if value.name != 'Unassigned':
- ranges.extend(value.ranges)
-
- value = Value('Assigned', mask=mask)
- value.add(ranges)
- general_category.add(value)
-
- # Make the 'Blank' property.
- assigned = []
-
- for value in general_category:
- if value is not general_category.default:
- assigned.extend(value.ranges)
-
- space_separator = general_category['Space_Separator'].ranges
- blank = [(0x09, 0x09)] + space_separator
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Blank', blank)
-
- # Make the 'Graph' property.
- whitespace = properties['White_Space']['Yes'].ranges
- control = general_category['Control'].ranges
- surrogate = general_category['Surrogate'].ranges
-
- unassigned = range_difference([(0, MAX_CODEPOINT)], assigned)
-
- graph = range_difference([(0, MAX_CODEPOINT)], whitespace + control +
- surrogate + unassigned)
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Graph', graph)
-
- # Make the 'Print' property.
- print_ = range_difference(graph + blank, control)
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Print', print_)
-
- # Make the 'Word' property.
- enclosing_mark = general_category['Enclosing_Mark'].ranges
- nonspacing_mark = general_category['Nonspacing_Mark'].ranges
- spacing_mark = general_category['Spacing_Mark'].ranges
- connector_punctuation = general_category['Connector_Punctuation'].ranges
- join_control = properties['Join_Control']['Yes'].ranges
-
- word = (alphabetic + enclosing_mark + nonspacing_mark + spacing_mark +
- decimal_number + connector_punctuation + join_control)
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Word', word)
-
- # Make the 'XDigit' property.
- hex_digit = properties['Hex_Digit']['Yes'].ranges
-
- xdigit = decimal_number + hex_digit
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'XDigit', xdigit)
-
- # Make the 'Posix_Digit' property.
- posix_digit = [(ord('0'), ord('9'))]
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Posix_Digit', posix_digit)
-
- # Make the 'Posix_AlNum' property.
- posix_alnum = alphabetic + posix_digit
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Posix_AlNum', posix_alnum)
-
- # Make the 'Posix_Punct' property.
- punctuation = []
- for name in 'Pd Ps Pe Pc Po Pi Pf'.split():
- punctuation.extend(general_category[name].ranges)
-
- symbol = general_category['Symbol'].ranges
- for name in 'Sm Sc Sk So '.split():
- symbol.extend(general_category[name].ranges)
-
- posix_punct = range_difference(punctuation + symbol, alphabetic)
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Posix_Punct', posix_punct)
-
- # Make the 'Posix_XDigit' property.
- posix_xdigit = [(ord('0'), ord('9')), (ord('A'), ord('F')), (ord('a'),
- ord('f'))]
-
- next_property_id = make_binary_property(properties, next_property_id,
- 'Posix_XDigit', posix_xdigit)
-
- # The 'General_Category' property has a ompound value called 'Cased_Letter'.
- lc_value = general_category['Cased_Letter']
- ranges = []
-
- for name in 'Lu Ll Lt'.split():
- lc_value.mask |= 1 << general_category[name].id
- ranges.extend(general_category[name].ranges)
-
- lc_value.add(ranges)
-
- # The 'General_Category' property has some compound values called 'Letter',
- # 'Number', etc.
- compound = []
- ids = []
-
- for value in general_category:
- for alias in list(value.aliases):
- if len(alias) == 1:
- # Add the additional alias for the compound value.
- value.aliases.append(alias + '&')
- compound.append(alias)
- elif len(alias) == 2 and alias.istitle():
- # Build the mask for the compound value.
- c_value = general_category[alias[0]]
- c_value.mask |= 1 << value.id
- c_value.add(value.ranges)
- ids.append(value.id)
-
- last_value_id = max(ids)
-
- for id, name in enumerate(sorted(compound), start=last_value_id + 1):
- general_category[name].id = id
-
- last_value_id += len(compound)
-
- for value in general_category:
- if value.id is None:
- last_value_id += 1
- value.id = last_value_id
-
- for property in properties:
- used = []
- not_defined = []
- has_codepoints = False
-
- for value in property:
- if value.id is None:
- not_defined.append(value)
- else:
- used.append(value.id)
-
- if value.ranges:
- has_codepoints = True
-
- if used:
- for id, value in enumerate(not_defined, start=max(used) + 1):
- value.id = id
- elif has_codepoints:
- for id, value in enumerate(not_defined):
- value.id = id
-
- return next_property_id
-
-def make_binary_property(properties, next_property_id, name, ranges,
- aliases=[]):
- 'Makes a binary property.'
-
- yes_aliases = properties['Alphabetic']['Yes'].aliases
- no_aliases = properties['Alphabetic']['No'].aliases
-
- property = Property(name, aliases=aliases)
- property.id = next_property_id
-
- value = Value('No', aliases=no_aliases)
- property.add(value)
-
- property.default = value
-
- value = Value('Yes', aliases=yes_aliases)
- value.add(merge_ranges(ranges))
- property.add(value)
-
- properties.add(property)
-
- return next_property_id + 1
-
-def make_Any_property(properties, next_property_id):
- 'Makes the Any property.'
-
- yes_aliases = properties['Alphabetic']['Yes'].aliases
- no_aliases = properties['Alphabetic']['No'].aliases
-
- property = AnyProperty()
- property.id = next_property_id
-
- value = Value('No', aliases=no_aliases)
- property.add(value)
-
- property.default = value
-
- value = Value('Yes', aliases=yes_aliases)
- value.add((0x0000, MAX_CODEPOINT))
- property.add(value)
-
- properties.add(property)
-
- return next_property_id + 1
-
-def parse_case_folding_file(path):
- 'Parses the Unicode CaseFolding file.'
-
- simple_folding = defaultdict(list)
- full_folding = defaultdict(list)
- equivalent = defaultdict(set)
- turkic_set = set()
- empty_set = set()
-
- with open(path, encoding='utf-8') as file:
- for line in file:
- line = line.rstrip()
- if line and not line.startswith('#'):
- # It's a data line.
- fields = line.partition('#')[0].split(';')
- codepoint = int(fields[0], 16)
- fold_type = fields[1].strip()
- folded = [int(f, 16) for f in fields[2].split()]
-
- if fold_type in 'CFS':
- # We want to determine which codepoints are equivalent to
- # each other under case-folding.
-
- # These are equivalent to each other.
- equiv_set = {(codepoint, ), tuple(folded)}
-
- # First collect the existing equivalences.
- for x in list(equiv_set):
- equiv_set.update(equivalent.get(x, empty_set))
-
- # Then make them all refer to the same equivalence set.
- for x in equiv_set:
- equivalent[x] = equiv_set
-
- # The first entry is the delta.
- entries = tuple([folded[0] - codepoint] + folded[1 : ])
-
- if fold_type in 'CS':
- # Common and simple case-folding.
- simple_folding[entries[0]].append(codepoint)
-
- if fold_type in 'CF':
- # Common and fall case-folding.
- full_folding[entries].append(codepoint)
-
- if fold_type == 'T':
- # Turkic case-folding.
- turkic_set.add((codepoint, tuple(folded)))
-
- # Is the Turkic set what we expected?
- if turkic_set != {(0x49, (0x131, )), (0x130, (0x69, ))}:
- raise UnicodeDataError('Turkic set has changed')
-
- # Which codepoints expand on full case-folding?
- expand_set = set()
-
- for expanded in full_folding:
- if len(expanded) > 1:
- expand_set.update(full_folding[expanded])
-
- # Add the Turkic set to the equivalences. Note that:
- #
- # dotted_capital == dotted_small
- #
- # and:
- #
- # dotted_small == dotless_capital
- #
- # but:
- #
- # dotted_capital != dotless_capital
- #
- for codepoint, folded in turkic_set:
- char1, char2 = (codepoint, ), folded
- equivalent[char1] = equivalent[char1] | {char2}
- equivalent[char2] = equivalent[char2] | {char1}
-
- # Collect and sort the equivalences. We want to know all of the possible
- # case-forms for each codepoint.
- other_cases = defaultdict(list)
-
- for codepoint, equiv_set in equivalent.items():
- if len(codepoint) == 1:
- diff_list = []
-
- for e in equiv_set - {codepoint}:
- if len(e) == 1:
- diff_list.append(e[0] - codepoint[0])
-
- other_cases[tuple(sorted(diff_list))].append(codepoint[0])
-
- # Save the all-cases property.
- all_prop = AllCases('All_Cases', other_cases)
-
- # Save the simple case-folding property.
- simple_folding_prop = SimpleCaseFolding('Simple_Case_Folding',
- simple_folding)
-
- # Save the full case-folding property.
- full_folding_prop = FullCaseFolding('Full_Case_Folding', full_folding)
-
- return all_prop, simple_folding_prop, full_folding_prop, expand_set
-
-def tabulate(rows):
- 'Creates a table with right-justified columns.'
-
- # Convert all the entries to strings.
- rows = [[str(e) for e in row] for row in rows]
-
- # Determine the widths of the columns.
- widths = [max(len(e) for e in column) for column in zip(*rows)]
-
- # Pad all the entries.
- rows = [[e.rjust(w) for e, w in zip(row, widths)] for row in rows]
-
- return rows
-
-def write_properties_description(properties, properties_path):
- 'Writes the Unicode properties description file.'
-
- with open(properties_path, 'w', encoding='utf-8', newline='\n') as file:
- file.write('The following is a list of the {} properties which are supported by this module:\n'.format(len(properties)))
-
- for property in sorted(properties, key=lambda property: property.name.upper()):
- file.write('\n')
-
- name = property.name
- aliases = sorted(property.aliases, key=str.upper)
- if aliases:
- file.write('{} [{}]\n'.format(name, ', '.join(aliases)))
- else:
- file.write('{}\n'.format(name))
-
- for value in sorted(property, key=lambda value: value.name.upper()):
- name = value.name
- aliases = sorted(value.aliases, key=str.upper)
- if aliases:
- file.write(' {} [{}]\n'.format(name,
- ', '.join(aliases)))
- else:
- file.write(' {}\n'.format(name))
-
-def store_properties(unicode_version, properties, path):
- 'Stores the Unicode properties in a file.'
-
- with open(path, 'w', encoding='ascii') as file:
- file.write('Version {}\n'.format(unicode_version))
- for property in sorted(properties, key=lambda p: p.name.upper()):
- aliases = [property.name] + sorted(property.aliases, key=str.upper)
- file.write('Property {}\n'.format(', '.join('"{}"'.format(name) for
- name in aliases)))
-
- value = property.default
- if value is None:
- raise UnicodeDataError('property {!a} has no default value'.format(property.name))
-
- aliases = [value.name] + sorted(value.aliases, key=str.upper)
- file.write('DefaultValue {}\n'.format(', '.join('"{}"'.format(name)
- for name in aliases)))
-
- for value in sorted(property, key=lambda v: v.name.upper()):
- if value is not property.default:
- aliases = [value.name] + sorted(value.aliases, key=str.upper)
- file.write('Value {}'.format(', '.join('"{}"'.format(name)
- for name in aliases)))
-
- if value.mask:
- file.write(' : 0x{:08X}\n'.format(value.mask))
- else:
- file.write('\n')
-
- for lower, upper in value.ranges:
- if lower == upper:
- file.write('{:04X}\n'.format(lower))
- else:
- file.write('{:04X}..{:04X}\n'.format(lower, upper))
-
-def check_unicode_version(unicode_data_files):
- 'Checks the Unicode version in the data files.'
-
- versions = defaultdict(set)
-
- # Read the version and filename from the first line of each data file.
- for line in unicode_data_files.splitlines():
- if line and line[0] != '#' and line[0] != '[':
- name = line.rpartition('/')[-1]
- path = join(unicode_folder, name)
-
- with open(path, encoding='utf-8') as file:
- line = file.readline()
-
- if line == '# emoji-data.txt\n':
- for line in file:
- if line.startswith('# Version:'):
- ver = line.split()[-1]
- ver += '.0' * (2 - ver.count('.'))
- versions[ver].add(name)
- break
- elif line.endswith('.txt\n'):
- ver = line[ : -5].rpartition('-')[2]
- versions[ver].add(name)
-
- if len(versions) != 1:
- if set(versions) == {'12.0.0', '12.1.0'} and versions['12.0.0'] == {'emoji-data.txt'}:
- # Cannot find emoji-data.txt for version 12.1.0.
- pass
- else:
- for ver, names in versions.items():
- print(ver, '=>', [name.strip('# \n') for name in names])
-
- raise ValueError('expected 1 version of Unicode, but found {}'.format(len(versions)))
-
- def make_key(ver):
- return tuple(map(int, ver.split('.')))
-
- return max(versions, key=make_key)
-
-def download_files(unicode_version, unicode_data_files):
- 'Downloads the Unicode data files from the website.'
-
- for line in unicode_data_files.splitlines():
- if line and line[0] != '#' and line[0] != '[':
- base, ext = splitext(line.rpartition('/')[-1])
- versioned_path = join(unicode_folder, '{}-{}{}'.format(base, unicode_version, ext))
-
- if not isfile(versioned_path):
- url = urljoin(unicode_data_base, line)
- path = join(unicode_folder, line.rpartition('/')[-1])
-
- try:
- download_unicode_file(url, path)
- except HTTPError:
- print('{} not found'.format(url))
-
-def merge_ranges(ranges):
- 'Sorts and merges a list of codepoint ranges.'
-
- ranges = sorted(ranges)
- new_ranges = ranges[ : 1]
-
- for lower, upper in ranges:
- if lower <= new_ranges[-1][1] + 1:
- new_ranges[-1] = (new_ranges[-1][0], max(upper, new_ranges[-1][1]))
- else:
- new_ranges.append((lower, upper))
-
- return new_ranges
-
-def range_difference(include_ranges, exclude_ranges):
- 'Returns the difference between a list of inclusive ranges and a list of exclusive ranges.'
-
- new_ranges = []
-
- include = IterRanges(merge_ranges(include_ranges))
- exclude = IterRanges(merge_ranges(exclude_ranges))
-
- lower = include.lower
-
- while lower <= MAX_CODEPOINT:
- if lower < include.lower:
- # We're below the current include range.
- # Advance into the range.
- lower = include.lower
- elif lower > include.upper:
- # We're above the current include range.
- # Advance into the next include range.
- include.next()
- lower = max(lower, include.lower)
- elif lower < exclude.lower:
- # We're below the current exclude range.
- # Accept codepoints as far as the end of the include range.
- upper = min(include.upper, exclude.lower - 1)
- new_ranges.append((lower, upper))
- lower = upper + 1
- elif lower > exclude.upper:
- # We're above the current exclude range.
- exclude.next()
- else:
- # We're within both the include and exclude ranges.
- # Advance out of the overlap.
- upper = min(include.upper, exclude.upper)
- lower = upper + 1
-
- return new_ranges
-
-class IterRanges:
- 'Class for iterating over a list of codepoint ranges.'
-
- def __init__(self, ranges):
- self._ranges = ranges
- self._index = 0
-
- if self._index < len(self._ranges):
- self.lower, self.upper = self._ranges[self._index]
- else:
- self.lower, self.upper = MAX_CODEPOINT + 1, MAX_CODEPOINT + 1
-
- def next(self):
- if self._index < len(self._ranges):
- self._index += 1
-
- if self._index < len(self._ranges):
- self.lower, self.upper = self._ranges[self._index]
- else:
- self.lower, self.upper = MAX_CODEPOINT + 1, MAX_CODEPOINT + 1
-
-def generate_code():
- 'Generates the code.'
-
- h_path = join(code_folder, '_regex_unicode.h')
- c_path = join(code_folder, '_regex_unicode.c')
-
- # Create the list of standardised strings.
- strings = []
-
- for property in properties:
- strings.append(property.name)
- strings.extend(property.aliases)
-
- if property.name != 'Script_Extensions':
- for value in property:
- strings.append(value.name)
- strings.extend(value.aliases)
-
- def reduce_name(name):
- return name.replace('_', '').upper()
-
- def by_id(obj):
- return obj.id
-
- strings = sorted(set(map(reduce_name, strings)))
-
- # The maximum number of scripts/codepoint in the Script_Extensions property.
- max_scx = max(len(val.name.split()) for val in
- properties['Script_Extensions'])
-
- with open(h_path , 'w', encoding='ascii', newline='\n') as h_file, \
- open(c_path, 'w', encoding='ascii', newline='\n') as c_file:
- # Useful definitions.
- h_file.write('''\
-typedef unsigned char RE_UINT8;
-typedef signed char RE_INT8;
-typedef unsigned short RE_UINT16;
-typedef signed short RE_INT16;
-typedef unsigned int RE_UINT32;
-typedef signed int RE_INT32;
-
-typedef unsigned char BOOL;
-#if !defined(FALSE) || !defined(TRUE)
-#define FALSE 0
-#define TRUE 1
-#endif
-
-#define RE_ASCII_MAX 0x7F
-#define RE_LOCALE_MAX 0xFF
-#define RE_UNICODE_MAX 0x10FFFF
-
-#define RE_MAX_CASES {max_cases}
-#define RE_MAX_FOLDED {max_folded}
-#define RE_MAX_SCX {max_scx}
-
-typedef struct RE_Property {{
- RE_UINT16 name;
- RE_UINT8 id;
- RE_UINT8 value_set;
-}} RE_Property;
-
-typedef struct RE_PropertyValue {{
- RE_UINT16 name;
- RE_UINT8 value_set;
- RE_UINT16 id;
-}} RE_PropertyValue;
-
-typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch);
-
-'''.format(max_cases=all_cases.max_cases,
- max_folded=full_case_folding.max_folded, max_scx=max_scx))
-
- RE_Property_size = 4
- RE_PropertyValue_size = 4
-
- for name in ('GC', 'Cased', 'Uppercase', 'Lowercase', 'SCX'):
- h_file.write('#define RE_PROP_{} 0x{:X}\n'.format(name.upper(),
- properties[name].id))
-
- h_file.write('\n')
-
- values = []
- compound = []
-
- for value in properties['GC']:
- if value.mask:
- for alias in value.aliases:
- if len(alias) == 1:
- compound.append((alias, value))
- break
- else:
- compound.append((reduce_name(value.name.upper()), value))
- else:
- for alias in value.aliases:
- if len(alias) == 2 and alias.isalpha():
- values.append((alias, value))
-
- values.sort(key=lambda pair: pair[1].id)
- compound.sort(key=lambda pair: (len(pair[0]) > 1, pair[0]))
-
- for alias, value in compound:
- h_file.write('#define RE_PROP_{} {}\n'.format(alias, value.id))
-
- h_file.write('\n')
-
- for alias, value in values:
- h_file.write('#define RE_PROP_{} {}\n'.format(alias.upper(),
- value.id))
-
- h_file.write('\n')
-
- for alias, value in compound:
- if len(alias) == 1:
- h_file.write('#define RE_PROP_{}_MASK 0x{:08X}\n'.format(alias,
- value.mask))
-
- h_file.write('\n')
-
- # Common abbreviated properties.
- common_properties = 'AlNum Alpha Any ASCII Blank Cntrl Digit Graph Lower Print Space Upper Word XDigit Posix_AlNum Posix_Digit Posix_Punct Posix_XDigit'
-
- for name in common_properties.split():
- property = properties.get(name)
- if property is not None:
- h_file.write('#define RE_PROP_{} 0x{:06X}\n'.format(name.upper(),
- property.id << 16 | 1))
- else:
- for prop_name in 'GC Script Block'.split():
- property = properties[prop_name]
- value = property.get(name)
- if value is not None:
- h_file.write('#define RE_PROP_{} 0x{:06X}\n'.format(name.upper(),
- property.id << 16 | value.id))
- break
- else:
- raise UnicodeDataError('unknown abbreviated property: {!a}'.format(name))
-
- h_file.write('\n')
-
- for value in sorted(properties['Word_Break'], key=by_id):
- h_file.write('#define RE_WBREAK_{} {}\n'.format(reduce_name(value.name),
- value.id))
-
- h_file.write('\n')
-
- for value in sorted(properties['Grapheme_Cluster_Break'], key=by_id):
- h_file.write('#define RE_GBREAK_{} {}\n'.format(reduce_name(value.name),
- value.id))
-
- h_file.write('\n')
-
- for value in sorted(properties['Line_Break'], key=by_id):
- h_file.write('#define RE_LBREAK_{} {}\n'.format(reduce_name(value.name),
- value.id))
-
- c_file.write('''/* For Unicode version {version} */
-
-#include "_regex_unicode.h"
-'''.format(version=unicode_version))
-
- # Write the standardised strings.
- c_file.write('''
-#define RE_BLANK_MASK ((1 << RE_PROP_ZL) | (1 << RE_PROP_ZP))
-#define RE_GRAPH_MASK ((1 << RE_PROP_CC) | (1 << RE_PROP_CS) | (1 << RE_PROP_CN))
-#define RE_WORD_MASK (RE_PROP_M_MASK | (1 << RE_PROP_ND) | (1 << RE_PROP_PC))
-
-typedef struct RE_ScriptExt {
- RE_UINT8 scripts[RE_MAX_SCX];
-} RE_ScriptExt;
-
-typedef struct RE_AllCases {
- RE_INT32 diffs[RE_MAX_CASES - 1];
-} RE_AllCases;
-
-typedef struct RE_FullCaseFolding {
- RE_INT32 diff;
- RE_UINT16 codepoints[RE_MAX_FOLDED - 1];
-} RE_FullCaseFolding;
-
-/* strings. */
-
-char* re_strings[] = {
-''')
-
- bytesize = 0
-
- for string in strings:
- s = reduce_name(string)
- c_file.write(' "{}",\n'.format(s))
- bytesize += len(s) + 1
-
- h_file.write('\nextern char* re_strings[{}];\n'.format(len(strings)))
-
- c_file.write('''}};
-
-/* strings: {bytesize} bytes. */
-'''.format(bytesize=bytesize))
-
- # Write the property name tables.
- #
- # Properties which are aliases have the same property id, and
- # properties, such as binary properties, which have the same set of
- # values have the same value set id.
-
- # The rows of the property and value tables.
- property_rows = []
- value_rows = []
-
- # The value sets.
- value_sets = {}
-
- # Give an id to each distinct property or value name.
- strings = {string: id for id, string in enumerate(strings)}
-
- for property in sorted(properties, key=by_id):
- prop = property
-
- if prop.name == 'Script_Extensions':
- # The Script Extensions property name the same values as the
- # Script property.
- prop = properties['Script']
-
- value_set = tuple((value.name, tuple(value.aliases)) for value in
- prop)
- new_value_set = value_set not in value_sets
- value_set_id = value_sets.setdefault(value_set, len(value_sets))
-
- # name of property, id of property, id of value set
- property_rows.append((strings[reduce_name(property.name)],
- property.id, value_set_id))
- for alias in property.aliases:
- property_rows.append((strings[reduce_name(alias)], property.id,
- value_set_id))
-
- # We don't want to duplicate value sets.
- if new_value_set:
- for value in sorted(prop, key=by_id):
- # name of value, id of value set, value
- value_rows.append((strings[reduce_name(value.name)],
- value_set_id, value.id))
- for alias in value.aliases:
- value_rows.append((strings[reduce_name(alias)],
- value_set_id, value.id))
-
- # Columns of RE_Property are:
- # RE_UINT16 name
- # RE_UINT8 id
- # RE_UINT8 value_set
- fields = [('name', 16), ('id', 8), ('value_set', 8)]
- max_values = [max(column) for column in zip(*property_rows)]
-
- for (name, width), max_value in zip(fields, max_values):
- if max_value >> width:
- raise ValueError("'{}' field of RE_Property struct is too small".format(name))
-
- # Columns of RE_PropertyValue are:
- # RE_UINT16 name
- # RE_UINT8 value_set
- # RE_UINT16 id
- fields = [('name', 16), ('value_set', 8), ('id', 16)]
- max_values = [max(column) for column in zip(*value_rows)]
-
- for (name, width), max_value in zip(fields, max_values):
- if max_value >> width:
- raise ValueError("'{}' field of RE_PropertyValue struct is too small".format(name))
-
- # Fix the column widths of the tables.
- property_rows = tabulate(property_rows)
- value_rows = tabulate(value_rows)
-
- expand_data_type, expand_data_size = smallest_datatype(min(expand_set),
- max(expand_set))
-
- c_file.write('''
-/* properties. */
-
-RE_Property re_properties[] = {
-''')
-
- h_file.write('''\
-extern RE_Property re_properties[{prop_rows}];
-extern RE_PropertyValue re_property_values[{val_rows}];
-extern {data_type} re_expand_on_folding[{expand_rows}];
-extern RE_GetPropertyFunc re_get_property[{func_count}];
-
-'''.format(prop_rows=len(property_rows), val_rows=len(value_rows),
- data_type=expand_data_type, expand_rows=len(expand_set),
- func_count=len(properties)))
-
- for row in property_rows:
- c_file.write(' {{{}}},\n'.format(', '.join(row)))
-
- c_file.write('''\
-}};
-
-/* properties: {bytesize} bytes. */
-
-/* property values. */
-
-RE_PropertyValue re_property_values[] = {{
-'''.format(bytesize=RE_Property_size * len(property_rows)))
-
- for row in value_rows:
- c_file.write(' {{{}}},\n'.format(', '.join(row)))
-
- c_file.write('''\
-}};
-
-/* property values: {bytesize} bytes. */
-
-/* Codepoints which expand on full case-folding. */
-
-{data_type} re_expand_on_folding[] = {{
-'''.format(bytesize=RE_PropertyValue_size * len(value_rows),
- data_type=expand_data_type))
-
- items = ['{},'.format(c) for c in sorted(expand_set)]
- width = max(len(i) for i in items)
- items = [i.rjust(width) for i in items]
-
- columns = 8
- for start in range(0, len(items), columns):
- c_file.write(' {}\n'.format(' '.join(items[start : start +
- columns])))
-
- c_file.write('''}};
-
-/* expand_on_folding: {bytesize} bytes. */
-'''.format(bytesize=len(items) * expand_data_size))
-
- # Build and write the property data tables.
- for index, property in enumerate(sorted(properties, key=by_id)):
- report('{} of {}: {}'.format(index + 1, len(properties),
- property.name))
- property.generate_code(h_file, c_file)
- report()
-
- all_cases.generate_code(h_file, c_file)
- report()
- simple_case_folding.generate_code(h_file, c_file)
- report()
- full_case_folding.generate_code(h_file, c_file)
- report()
-
- # Write the property function array.
- c_file.write('''
-/* Property function table. */
-
-RE_GetPropertyFunc re_get_property[] = {
-''')
-
- for property in sorted(properties, key=by_id):
- report('{} is {}'.format(property.name, property.id))
-
- if property.name == 'Script_Extensions':
- c_file.write(' 0,\n')
- continue
-
- c_file.write(' re_get_{},\n'.format(property.name.lower()))
-
- c_file.write('};\n')
-
-def smallest_datatype(min_value, max_value):
- 'Determines the smallest C data type which can store values in a range.'
-
- # 1 byte, unsigned and signed.
- if 0 <= min_value <= max_value <= 0xFF:
- return 'RE_UINT8', 1
- if -0x80 <= min_value <= max_value <= 0x7F:
- return 'RE_INT8', 1
-
- # 2 bytes, unsigned and signed.
- if 0 <= min_value <= max_value <= 0xFFFF:
- return 'RE_UINT16', 2
- if -0x8000 <= min_value <= max_value <= 0x7FFF:
- return 'RE_INT16', 2
-
- # 4 bytes, unsigned and signed.
- if 0 <= min_value <= max_value <= 0xFFFFFFFF:
- return 'RE_UINT32', 4
- if -0x80000000 <= min_value <= max_value <= 0x7FFFFFFF:
- return 'RE_INT32', 4
-
- raise ValueError('value range too big for 32 bits')
-
-# Whether to update the Unicode data files from the Unicode website.
-UPDATE = False
-#UPDATE = True
-UNICODE_VERSION = '12.1.0'
-
-# Whether to recalculate the best block sizes for the tables.
-RECALC = False
-
-# The URL from which the Unicode data files can be obtained.
-unicode_data_base = 'http://www.unicode.org/Public/UNIDATA/'
-
-# The local folder in which the Unicode data files are stored.
-unicode_folder = r'D:\projects\Unicode\Data'
-
-# The local folder in which the generated C files should be written.
-code_folder = join(dirname(__file__), 'regex')
-
-# The path of the file in which the block sizes are stored.
-json_path = splitext(__file__)[0] + '.json'
-
-COLUMNS = 16
-MAX_CODEPOINT = 0x10FFFF
-NUM_CODEPOINTS = 0x110000
-MAX_STAGES = 4
-MAX_CASE_STAGES = 4 # Fewer stages for case info because it's used frequently.
-
-# The Unicode data files. The file names are given relative to the website URL.
-unicode_data_files = '''\
-[properties]
-extracted/DerivedGeneralCategory.txt
-Blocks.txt
-Scripts.txt
-ScriptExtensions.txt
-auxiliary/WordBreakProperty.txt
-auxiliary/GraphemeBreakProperty.txt
-auxiliary/SentenceBreakProperty.txt
-DerivedCoreProperties.txt
-PropList.txt
-HangulSyllableType.txt
-extracted/DerivedBidiClass.txt
-extracted/DerivedCombiningClass.txt
-extracted/DerivedDecompositionType.txt
-extracted/DerivedEastAsianWidth.txt
-extracted/DerivedJoiningGroup.txt
-extracted/DerivedJoiningType.txt
-extracted/DerivedLineBreak.txt
-extracted/DerivedNumericType.txt
-extracted/DerivedNumericValues.txt
-extracted/DerivedBinaryProperties.txt
-IndicPositionalCategory.txt
-IndicSyllabicCategory.txt
-emoji-data.txt
-#LineBreak.txt
-[normalisation]
-DerivedNormalizationProps.txt
-[others]
-PropertyAliases.txt
-PropertyValueAliases.txt
-PropList.txt
-CaseFolding.txt
-#UnicodeData.txt
-'''
-
-# Ensure that we have downloaded the Unicode data files for UNICODE_VERSION
-# from the Unicode website.
-#
-# Returns True if any we get any new ones.
-if UPDATE:
- download_files(UNICODE_VERSION, unicode_data_files)
-
-# Which version of Unicode is it?
-unicode_version = check_unicode_version(unicode_data_files)
-
-# The set of properties.
-properties = PropertySet()
-
-# Parse the Unicode data files.
-parse_property_files(unicode_folder, unicode_data_files, properties)
-
-storage_path = join(dirname(__file__), 'codepoint_properties.txt')
-
-store_properties(unicode_version, properties, storage_path)
-base, ext = splitext(storage_path)
-copy2(storage_path, '{}-{}{}'.format(base, unicode_version, ext))
-
-# Parse the case-folding data specially.
-path = join(unicode_folder, 'CaseFolding.txt')
-all_cases, simple_case_folding, full_case_folding, expand_set = parse_case_folding_file(path)
-
-properties_path = join(dirname(__file__), 'UnicodeProperties.txt')
-write_properties_description(properties, properties_path)
-
-# Load the sizes of the table blocks.
-try:
- with open(json_path, encoding='utf-8') as json_file:
- storage = load(json_file)
-except (FileNotFoundError, ValueError):
- storage = {}
-
-# If it's a different version of Unicode, forget the saved block sizes.
-if RECALC or storage.get('version') != unicode_version:
- storage.clear()
-
-# Generate the _regex_unicode.h and _regex_unicode.c files.
-generate_code()
-
-# Store the sizes of the table blocks.
-storage['version'] = unicode_version
-
-with open(json_path, 'w', encoding='utf-8') as json_file:
- dump(storage, json_file)
-
-report('\nThere are {} properties'.format(len(properties)))
-
-# Collect and summarise a few statistics.
-import re
-c_path = join(code_folder, '_regex_unicode.c')
-code = open(c_path).read()
-sizes = defaultdict(int)
-for n, s in re.findall(r'(\w+(?: \w+)*): (\d+) bytes', code):
- sizes[n] += int(s)
-sizes = sorted(sizes.items(), key=lambda pair: pair[1], reverse=True)
-total_size = sum(s for n, s in sizes)
-report('\nTotal: {} bytes\n'.format(total_size))
-prop_width = max(len(row[0]) for row in sizes)
-prop_width = max(prop_width, 8)
-storage_width = max(len(str(row[1])) for row in sizes)
-storage_width = max(storage_width, 7)
-report('{:{}} {:{}} {}'.format('Property', prop_width, 'Storage',
- storage_width, 'Percentage'))
-report('{:{}} {:{}} {}'.format('--------', prop_width, '-------',
- storage_width, '----------'))
-format = '{{:<{}}} {{:>{}}} {{:>5.1%}}'.format(prop_width, storage_width)
-for n, s in sizes:
- report(format.format(n, s, s / total_size))
-
-report('\nFinished!')
+#! python3.8
+# -*- coding: utf-8 -*-
+#
+# This Python script parses the Unicode data files and generates the C files
+# for the regex module.
+#
+# Written by MRAB.
+#
+from contextlib import suppress
+from itertools import chain
+from os import listdir, mkdir
+from os.path import basename, dirname, exists, join, normpath
+from urllib.parse import urljoin
+from urllib.request import urlretrieve
+from time import time
+
+import codecs
+import sys
+sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
+
+class Timed:
+ def __init__(self, message=None):
+ self._message = message
+
+ def __enter__(self):
+ self._start = time()
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ finish = time()
+ elapsed = finish - self._start
+
+ if self._message is None:
+ print(f'Took {elapsed:0.2f} secs')
+ else:
+ print(f'{self._message} took {elapsed:0.2f} secs')
+
+ return False
+
+def unique(iterable, key=None):
+
+ if key is None:
+ def key(item):
+ return item
+
+ seen = set()
+
+ for item in iterable:
+ k = key(item)
+
+ if k not in seen:
+ seen.add(k)
+ yield item
+
+class IterRanges:
+ def __init__(self, ranges):
+ self._ranges = ranges
+ self._pos = 0
+ self._update()
+
+ def next(self):
+ if self._pos >= len(self._ranges):
+ return
+
+ self._pos += 1
+ self._update()
+
+ def _update(self):
+ if self._pos < len(self._ranges):
+ self.lower, self.upper = self._ranges[self._pos]
+ else:
+ self.lower = self.upper = NUM_CODEPOINTS
+
+class Ranges:
+ def __init__(self, initial=None):
+ self._ranges = []
+
+ if initial is not None:
+ self._ranges.extend(initial)
+
+ self._is_normalised = initial is None
+
+ def add(self, lower, upper=None):
+ if upper is None:
+ self._ranges.append((lower, lower))
+ else:
+ self._ranges.append((lower, upper))
+
+ self._is_normalised = False
+
+ def __or__(self, other):
+ return Ranges(self._ranges + other._ranges)
+
+ def __sub__(self, other):
+ self._normalise()
+ other._normalise()
+
+ include = IterRanges(self._ranges)
+ exclude = IterRanges(other._ranges)
+ new_ranges = []
+
+ lower = include.lower
+
+ while lower < NUM_CODEPOINTS:
+ if lower < include.lower:
+ # We're below the current include range.
+ # Advance into the range.
+ lower = include.lower
+ elif lower > include.upper:
+ # We're above the current include range.
+ # Advance into the next include range.
+ include.next()
+ lower = max(lower, include.lower)
+ elif lower < exclude.lower:
+ # We're below the current exclude range.
+ # Accept codepoints as far as the end of the include range.
+ upper = min(include.upper, exclude.lower - 1)
+ new_ranges.append((lower, upper))
+ lower = upper + 1
+ elif lower > exclude.upper:
+ # We're above the current exclude range.
+ exclude.next()
+ else:
+ # We're within both the include and exclude ranges.
+ # Advance out of the overlap.
+ upper = min(include.upper, exclude.upper)
+ lower = upper + 1
+
+ return Ranges(new_ranges)
+
+ def __iter__(self):
+ self._normalise()
+
+ return iter(self._ranges)
+
+ def __len__(self):
+ self._normalise()
+
+ return len(self._ranges)
+
+ def lowest(self):
+ self._normalise()
+
+ return self._ranges[0][0]
+
+ def __repr__(self):
+ self._normalise()
+
+ return 'Ranges({!r})'.format(self._ranges)
+
+ def _normalise(self):
+ if self._is_normalised:
+ return
+
+ if len(self._ranges) >= 2:
+ self._ranges.sort()
+
+ new_ranges = []
+ lower, upper = self._ranges[0]
+
+ for l, u in self._ranges[1 : ]:
+ if l - upper > 1:
+ new_ranges.append((lower, upper))
+ lower, upper = l, u
+ else:
+ lower = min(lower, l)
+ upper = max(upper, u)
+
+ new_ranges.append((lower, upper))
+
+ self._ranges = new_ranges
+
+ self._is_normalised = True
+
+munge_dict = str.maketrans({'-': '', '_': '', ' ': ''})
+
+def munge(value):
+ munged_value = value.translate(munge_dict).upper()
+
+ if value.startswith('-'):
+ munged_value = '-' + munged_value
+
+ return munged_value
+
+def download_unicode_files(unicode_data_base, data_files, data_folder):
+ for section in data_files.values():
+ for rel_path in section:
+ path = normpath(join(data_folder, basename(rel_path)))
+
+ if not exists(path):
+ url = urljoin(unicode_data_base, rel_path)
+ print('Downloading {} from {}'.format(rel_path, url),
+ flush=True)
+ urlretrieve(url, path)
+
+def parse_property_aliases(data_folder):
+ properties = {}
+
+ path = join(data_folder, 'PropertyAliases.txt')
+
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line or line.startswith('#'):
+ continue
+
+ fields = [field.strip() for field in line.split(';')]
+ prop_name = fields.pop(1)
+
+ property = {'names': list(unique([prop_name] + fields, key=munge))}
+
+ for name in property['names']:
+ properties[munge(name)] = property
+
+ return properties
+
+def parse_value_aliases(data_folder, properties):
+ path = join(data_folder, 'PropertyValueAliases.txt')
+
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line or line.startswith('#'):
+ continue
+
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ prop_name = fields.pop(0)
+ val_name = fields.pop(2 if prop_name == 'ccc' else 1)
+
+ property = properties[munge(prop_name)]
+ value = {'names': list(unique([val_name] + fields, key=munge))}
+ values = property.setdefault('values', {})
+
+ for name in value['names']:
+ values[munge(name)] = value
+
+def parse_binary(properties, path):
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line or line.startswith('#'):
+ continue
+
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ codepoints = [int(part, 16) for part in fields[0].split('..')]
+ prop_name = fields[1]
+ property = properties[munge(prop_name)]
+ property.setdefault('default', munge('No'))
+ value = property['values'][munge('Yes')]
+ value.setdefault('codepoints', Ranges()).add(codepoints[0],
+ codepoints[-1])
+
+def parse_emoji(properties, path):
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line:
+ continue
+
+ if line.startswith('# @missing:'):
+ fields = line.split()
+ prop_name = fields[-3]
+
+ try:
+ property = properties[munge(prop_name)]
+ except KeyError:
+ property = {'names': [prop_name], 'values': {}}
+ value = {'names': ['No', 'N']}
+ property['values'][munge(value['names'][0])] = value
+ value = {'names': ['Yes', 'Y']}
+ property['values'][munge(value['names'][0])] = value
+ properties[munge(prop_name)] = property
+
+ default = fields[-1]
+ property['default'] = munge(default)
+ elif not line.startswith('#'):
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ codepoints = [int(part, 16) for part in fields[0].split('..')]
+ prop_name = fields[1]
+ property = properties[munge(prop_name)]
+ property.setdefault('default', munge('No'))
+
+ try:
+ value = property['values'][munge('Yes')]
+ except KeyError:
+ value = {'names': ['Yes']}
+ property['values'][munge('Yes')] = value
+
+ value.setdefault('codepoints', Ranges()).add(codepoints[0],
+ codepoints[-1])
+
+def parse_multivalue(properties, path):
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line:
+ continue
+
+ if line.startswith('# Property:'):
+ prop_name = line.split()[-1]
+ property = properties[munge(prop_name)]
+ elif line.startswith('# All code points not explicitly listed for'):
+ prop_name = line.split()[-1]
+ property = properties[munge(prop_name)]
+ elif line.startswith('# @missing:'):
+ default = line.split()[-1]
+ property['default'] = munge(default)
+ elif not line.startswith('#'):
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ codepoints = [int(part, 16) for part in fields[0].split('..')]
+ val_name = fields[1]
+ value = property['values'][munge(val_name)]
+ value.setdefault('codepoints', Ranges()).add(codepoints[0],
+ codepoints[-1])
+
+def parse_normalisation(properties, path):
+ property = None
+
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line:
+ continue
+
+ if line.startswith('# Derived Property:'):
+ property = None
+ elif line.startswith('# Property:'):
+ prop_name = line.split()[-1]
+ property = properties[munge(prop_name)]
+ elif property:
+ if line.startswith('# @missing:'):
+ default = line.split()[-1]
+ property['default'] = munge(default)
+ elif not line.startswith('#'):
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ codepoints = [int(part, 16) for part in
+ fields[0].split('..')]
+ val_name = fields[2]
+
+ value = property['values'][munge(val_name)]
+ value.setdefault('codepoints', Ranges()).add(codepoints[0],
+ codepoints[-1])
+
+def parse_numeric_values(properties, path):
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line:
+ continue
+
+ if line.startswith('# Derived Property:'):
+ prop_name = line.split()[-1]
+ property = properties[munge(prop_name)]
+ default = {'names': ['NaN']}
+ property['values'] = {munge('NaN'): default}
+ property['default'] = munge('NaN')
+ elif line.startswith('# @missing:'):
+ default = line.split()[-1]
+ property['default'] = munge(default)
+ elif not line.startswith('#'):
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ codepoints = [int(part, 16) for part in fields[0].split('..')]
+ val_name = fields[3]
+
+ try:
+ value = property['values'][munge(val_name)]
+ except KeyError:
+ value = {'names': [val_name]}
+ property['values'][munge(val_name)] = value
+
+ value.setdefault('codepoints', Ranges()).add(codepoints[0],
+ codepoints[-1])
+
+def parse_script_extensions(properties, path):
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line:
+ continue
+
+ if line.startswith('# Property:'):
+ prop_name = line.split()[-1]
+ property = properties[munge(prop_name)]
+ property['values'] = {}
+ elif not line.startswith('#'):
+ line = line.partition('#')[0]
+ fields = [field.strip() for field in line.split(';')]
+ codepoints = [int(part, 16) for part in fields[0].split('..')]
+
+ key = tuple(sorted(fields[1].split(), key=str.lower))
+
+ try:
+ value = property['values'][key]
+ except KeyError:
+ value = {'codepoints': Ranges()}
+ property['values'][key] = value
+
+ value['codepoints'].add(codepoints[0], codepoints[-1])
+
+def parse_case_folding(properties, path):
+ simple_folding = {}
+ full_folding = {}
+ turkic_set = set()
+
+ with open(path, encoding='utf-8') as file:
+ for line in file:
+ line = line.strip()
+
+ if not line or line.startswith('#'):
+ continue
+
+ line = line.partition('#')[0]
+ fields = line.split(';')
+ codepoint = int(fields[0], 16)
+ kind = fields[1].strip()
+ folded = [int(part, 16) for part in fields[2].split()]
+ delta = folded[0] ^ codepoint
+
+ if kind in {'S', 'C', 'T'}:
+ simple_folding.setdefault(delta, Ranges()).add(codepoint,
+ codepoint)
+
+ if kind in {'F', 'C', 'T'}:
+ key = tuple([delta] + folded[1 : ])
+ full_folding.setdefault(key, Ranges()).add(codepoint,
+ codepoint)
+
+ if kind == 'T':
+ turkic_set.add((codepoint, tuple(folded)))
+
+ # Is the Turkic set what we expected?
+ if turkic_set != {(0x49, (0x131, )), (0x130, (0x69, ))}:
+ raise ValueError('Turkic set has changed')
+
+ properties['simple_folding'] = simple_folding
+ properties['full_folding'] = full_folding
+
+def parse_unicode_files(data_files, data_folder):
+ properties = parse_property_aliases(data_folder)
+ parse_value_aliases(data_folder, properties)
+
+ def ignore(*args):
+ pass
+
+ parsers = {
+ 'aliases': ignore,
+ 'binary': parse_binary,
+ 'emoji': parse_emoji,
+ 'multivalue': parse_multivalue,
+ 'normalisation': parse_normalisation,
+ 'numeric_values': parse_numeric_values,
+ 'script_extensions': parse_script_extensions,
+ 'case_folding': parse_case_folding,
+ }
+
+ for section, rel_paths in data_files.items():
+ parse = parsers[section]
+
+ for rel_path in rel_paths:
+ data_file = basename(rel_path)
+
+ print('Parsing {}'.format(data_file), flush=True)
+ parse(properties, join(data_folder, data_file))
+
+ unicode_data = {'properties': {}}
+
+ for prop_name, property in properties.items():
+ if has_codepoints(property):
+ unicode_data['properties'][prop_name] = property
+ elif prop_name in {'simple_folding', 'full_folding'}:
+ unicode_data[prop_name] = property
+
+ properties = unicode_data['properties']
+ property = properties[munge('General_Category')]
+ property['default'] = munge('Unassigned')
+
+ values = property['values']
+
+ for val_name, value in list(values.items()):
+ if len(val_name) == 1:
+ new_name = val_name.upper() + '&'
+ values[munge(new_name)] = value
+ value['names'].append(new_name)
+
+ return unicode_data
+
+def make_binary_property(properties, names, codepoints):
+ no_value = {'names': ['No', 'N', 'F', 'False']}
+ yes_value = {'names': ['Yes', 'Y', 'T', 'True'], 'codepoints': codepoints}
+ values = {}
+
+ for value in [no_value, yes_value]:
+ for name in value['names']:
+ values[munge(name)] = value
+
+ property = {'names': names, 'values': values, 'default': munge('No')}
+
+ for name in names:
+ properties[munge(name)] = property
+
+def make_additional_properties(unicode_data):
+
+ def get_values(prop_name):
+ return properties[munge(prop_name)]['values']
+
+ def get_codepoints(prop_name, val_name):
+ return get_values(prop_name)[munge(val_name)]['codepoints']
+
+ properties = unicode_data['properties']
+
+ # Make the 'Alphanumeric' property.
+ alphabetic = get_codepoints('Alphabetic', 'Yes')
+ decimal_number = get_codepoints('General_Category', 'Decimal_Number')
+
+ make_binary_property(properties, ['Alphanumeric', 'AlNum'], alphabetic |
+ decimal_number)
+
+ # Make the 'Any' property.
+ make_binary_property(properties, ['Any'], Ranges([(0, NUM_CODEPOINTS -
+ 1)]))
+
+ # General_Category has a compound value called 'Assigned'.
+ assigned = Ranges()
+
+ for value in unique(get_values('General_Category').values(), key=id):
+ if value['names'][0] != 'Unassigned':
+ try:
+ assigned |= value['codepoints']
+ except KeyError:
+ pass
+
+ value = {'names': ['Assigned']}
+ properties[munge('General_Category')]['values'][munge('Assigned')] = value
+
+ # Make the 'Blank' property.
+ space_separator = get_codepoints('General_Category', 'Space_Separator')
+ blank = Ranges([(0x09, 0x09)]) | space_separator
+
+ make_binary_property(properties, ['Blank'], blank)
+
+ # Make the 'Graph' property.
+ whitespace = get_codepoints('White_Space', 'Yes')
+ control = get_codepoints('General_Category', 'Control')
+ surrogate = get_codepoints('General_Category', 'Surrogate')
+
+ graph = assigned - (whitespace | control | surrogate)
+
+ make_binary_property(properties, ['Graph'], graph)
+
+ # Make the 'Print' property.
+ print_ = (graph | blank) - control
+
+ make_binary_property(properties, ['Print'], print_)
+
+ # Make the 'Word' property.
+ enclosing_mark = get_codepoints('General_Category', 'Enclosing_Mark')
+ nonspacing_mark = get_codepoints('General_Category', 'Nonspacing_Mark')
+ spacing_mark = get_codepoints('General_Category', 'Spacing_Mark')
+ connector_punctuation = get_codepoints('General_Category',
+ 'Connector_Punctuation')
+ join_control = get_codepoints('Join_Control', 'Yes')
+
+ word = (alphabetic | enclosing_mark | nonspacing_mark | spacing_mark |
+ decimal_number | connector_punctuation | join_control)
+
+ make_binary_property(properties, ['Word'], word)
+
+ # Make the 'XDigit' property.
+ hex_digit = get_codepoints('Hex_Digit', 'Yes')
+
+ xdigit = decimal_number | hex_digit
+
+ make_binary_property(properties, ['XDigit'], xdigit)
+
+ # Make the 'Posix_Digit' property.
+ posix_digit = Ranges([(ord('0'), ord('9'))])
+
+ make_binary_property(properties, ['Posix_Digit'], posix_digit)
+
+ # Make the 'Posix_AlNum' property.
+ posix_alnum = alphabetic | posix_digit
+
+ make_binary_property(properties, ['Posix_AlNum'], posix_alnum)
+
+ # Make the 'Posix_Punct' property.
+ punctuation = Ranges()
+
+ for name in 'Pd Ps Pe Pc Po Pi Pf'.split():
+ punctuation |= get_codepoints('General_Category', name)
+
+ symbol = Ranges()
+
+ for name in 'Sm Sc Sk So '.split():
+ symbol |= get_codepoints('General_Category', name)
+
+ posix_punct = (punctuation | symbol) - alphabetic
+
+ make_binary_property(properties, ['Posix_Punct'], posix_punct)
+
+ # Make the 'Posix_XDigit' property.
+ posix_xdigit = Ranges([(ord('0'), ord('9')), (ord('A'), ord('F')),
+ (ord('a'), ord('f'))])
+
+ make_binary_property(properties, ['Posix_XDigit'], posix_xdigit)
+
+def preferred(d):
+ return munge(d['names'][0])
+
+def has_codepoints(property):
+ if 'values' not in property:
+ return False
+
+ return any('codepoints' in value for value in property['values'].values())
+
+def write_summary(unicode_data, tools_folder):
+ print('Writing summary')
+
+ properties = unicode_data['properties']
+
+ path = join(tools_folder, 'Unicode.txt')
+
+ with open(path, 'w', encoding='ascii') as file:
+ file.write('Version {}\n'.format(UNICODE_VERSION))
+
+ for property in sorted(unique(properties.values(), key=id),
+ key=preferred):
+ if not has_codepoints(property):
+ print(property['names'][0])
+ continue
+
+ file.write('Property {}\n'.format(' '.join(property['names'])))
+
+ values = property['values']
+
+ if property['names'][0] == 'Script_Extensions':
+ for key in sorted(values):
+ value = values[key]
+ file.write('Value {}\n'.format(' '.join(key)))
+
+ for lower, upper in value.get('codepoints', []):
+ if lower == upper:
+ file.write('{:04X}\n'.format(lower))
+ else:
+ file.write('{:04X}..{:04X}\n'.format(lower, upper))
+ else:
+ if 'default' in property:
+ default = values[property['default']]
+ file.write('DefaultValue {}\n'.format(default['names'][0]))
+
+ for value in sorted(unique(values.values(), key=id),
+ key=preferred):
+ file.write('Value {}\n'.format(' '.join(value['names'])))
+
+ for lower, upper in value.get('codepoints', []):
+ if lower == upper:
+ file.write('{:04X}\n'.format(lower))
+ else:
+ file.write('{:04X}..{:04X}\n'.format(lower, upper))
+
+ file.write('SimpleFolding\n')
+
+ for delta, ranges in unicode_data['simple_folding'].items():
+ file.write('Value {:04X}\n'.format(delta))
+
+ for lower, upper in ranges:
+ if lower == upper:
+ file.write('{:04X}\n'.format(lower))
+ else:
+ file.write('{:04X}..{:04X}\n'.format(lower, upper))
+
+ file.write('FullFolding\n')
+
+ for key, ranges in unicode_data['full_folding'].items():
+ file.write('Value {}\n'.format(' '.join('{:04X}'.format(value) for
+ value in key)))
+
+ for lower, upper in ranges:
+ if lower == upper:
+ file.write('{:04X}\n'.format(lower))
+ else:
+ file.write('{:04X}..{:04X}\n'.format(lower, upper))
+
+def make_binary_dict():
+ binary_dict = {}
+
+ for n in range(0x100):
+ key = tuple(map(int, format(n, '08b')[ : : -1]))
+ binary_dict[key] = n
+
+ return binary_dict
+
+def collect_strings(properties):
+ strings = []
+
+ for property in properties.values():
+ try:
+ strings.extend(property['names'])
+
+ for value in property['values'].values():
+ strings.extend(value['names'])
+ except KeyError:
+ pass
+
+ return sorted(set(munge(string) for string in strings))
+
+def chunked(iterable, chunk_size):
+ sequence = iterable
+ count = len(sequence)
+
+ for start in range(0, count, chunk_size):
+ chunk = sequence[start : start + chunk_size]
+ yield chunk
+
+def determine_entry_type(iterable):
+ lower, upper = min(iterable), max(iterable)
+
+ if 0 <= lower <= upper <= 0xFF:
+ return 'RE_UINT8'
+
+ if 0 <= lower <= upper <= 0xFFFF:
+ return 'RE_UINT16'
+
+ raise ValueError('cannot determine C type for {}..{}'.format(lower, upper))
+
+def is_binary(property):
+ return sum(1 for val in val_list if val['id'] != 0) == 1
+
+def count_ranges(property):
+ count = 0
+ default_id = property['values'][munge(property['default'])]['id']
+
+ for value in unique(property['values'].values(), key=id):
+ if value['id'] != default_id:
+ count += len(value.get('codepoints', []))
+
+ return count
+
+def generate_small_lookup(property, c_file):
+ c_file.write('''
+/* {}. */
+RE_UINT32 re_get_{}(RE_UINT32 codepoint) {{
+'''.format(property['names'][0], property['names'][0].lower()))
+
+ default_id = property['values'][munge(property['default'])]['id']
+ ranges = []
+
+ for value in unique(property['values'].values(), key=id):
+ if value['id'] != default_id:
+ val_id = value['id']
+
+ for lower, upper in value.get('codepoints', []):
+ ranges.append((lower, upper, val_id))
+
+ if len(ranges) == 1 and ranges[0][ : 2] == (0, NUM_CODEPOINTS - 1):
+ c_file.write(' return {};\n}}\n'.format(ranges[0][2]))
+ else:
+ for lower, upper, val_id in ranges:
+ width = 2 if upper <= 0xFF else 4 if upper <= 0xFFFF else 6
+
+ if lower == upper:
+ c_file.write('''\
+ if (codepoint == 0x{:0{width}X})
+ return {};
+'''.format(lower, val_id, width=width))
+ else:
+ c_file.write('''\
+ if (0x{:0{width}X} <= codepoint && codepoint <= 0x{:0{width}X})
+ return {};
+'''.format(lower, upper, val_id, width=width))
+
+ c_file.write('\n return {};\n}}\n'.format(default_id))
+
+def generate_table(table_name, values, c_file, max_columns=16, public=False):
+ entry_type = determine_entry_type(values)
+
+ if public:
+ c_file.write('{} {}[] = {{\n'.format(entry_type, table_name))
+ else:
+ c_file.write('static {} {}[] = {{\n'.format(entry_type, table_name))
+
+ entries = [str(value) for value in values]
+ max_width = max(len(entry) for entry in entries)
+ entries = [entry.rjust(max_width) + ',' for entry in entries]
+ entries[-1] = entries[-1].rstrip(',')
+
+ for chunk in chunked(entries, max_columns):
+ c_file.write(' %s\n' % ' '.join(chunk))
+
+ c_file.write('};\n')
+
+def generate_lookup(property, c_file):
+ val_list = list(unique(property['values'].values(), key=id))
+
+ if count_ranges(property) <= 8:
+ generate_small_lookup(property, c_file)
+ return
+
+ default_id = property['values'][munge(property['default'])]['id']
+ entries = [default_id] * NUM_CODEPOINTS
+
+ for value in val_list:
+ val_id = value['id']
+
+ for lower, upper in value.get('codepoints', []):
+ entries[lower : upper + 1] = [val_id] * (upper - lower + 1)
+
+ CHUNK_SIZE = 32
+
+ indexes = []
+ chunks = {}
+
+ for chunk in chunked(tuple(entries), CHUNK_SIZE):
+ indexes.append(chunks.setdefault(chunk, len(chunks)))
+
+ table_2 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ entries = indexes
+ indexes = []
+ chunks = {}
+
+ for start in range(0, len(entries), CHUNK_SIZE):
+ chunk = tuple(entries[start : start + CHUNK_SIZE])
+ indexes.append(chunks.setdefault(chunk, len(chunks)))
+
+ table_1 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ table_0 = indexes
+
+ c_file.write('\n/* {}. */\n'.format(property['names'][0]))
+
+ prop_name = property['names'][0].lower()
+ binary = set(table_2) == {0, 1}
+
+ for i, table in enumerate([table_0, table_1, table_2]):
+ if i == 2 and binary:
+ binary = True
+ entries = []
+
+ for start in range(0, len(table), 8):
+ entries.append(binary_dict[tuple(table[start : start + 8])])
+
+ table = entries
+
+ if i > 0:
+ c_file.write('\n')
+
+ generate_table('re_{}_table_{}'.format(prop_name, 1 + i), table,
+ c_file)
+
+ if binary:
+ c_file.write('''
+RE_UINT32 re_get_{0}(RE_UINT32 codepoint) {{
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 offset;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = (codepoint >> 3) & 0x3;
+ offset = codepoint & 0x7;
+
+ v = re_{0}_table_1[field_2];
+ v = re_{0}_table_2[(v << 5) | field_1];
+ v = re_{0}_table_3[(v << 2) | field_0];
+
+ return (v >> offset) & 0x1;
+}}
+'''.format(prop_name))
+ else:
+ c_file.write('''
+RE_UINT32 re_get_{0}(RE_UINT32 codepoint) {{
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_{0}_table_1[field_2];
+ v = re_{0}_table_2[(v << 5) | field_1];
+ v = re_{0}_table_3[(v << 5) | field_0];
+
+ return v;
+}}
+'''.format(prop_name))
+
+def generate_script_extensions_lookup(properties, property, c_file):
+ entries = [0] * NUM_CODEPOINTS
+
+ # Initialise with script.
+ val_list = unique(properties[munge('Script')]['values'].values(), key=id)
+
+ for value in val_list:
+ val_id = value['id']
+
+ for lower, upper in value.get('codepoints', []):
+ entries[lower : upper + 1] = [val_id] * (upper - lower + 1)
+
+ script_count = 1 + max(value['id'] for value in
+ properties[munge('Script')]['values'].values())
+
+ val_list = unique(property['values'].values(), key=id)
+
+ for value in val_list:
+ val_id = value['id']
+
+ for lower, upper in value.get('codepoints', []):
+ entries[lower : upper + 1] = [val_id] * (upper - lower + 1)
+
+ CHUNK_SIZE = 32
+
+ indexes = []
+ chunks = {}
+
+ for chunk in chunked(entries, CHUNK_SIZE):
+ indexes.append(chunks.setdefault(tuple(chunk), len(chunks)))
+
+ table_2 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ entries = indexes
+ indexes = []
+ chunks = {}
+
+ for start in range(0, len(entries), CHUNK_SIZE):
+ chunk = tuple(entries[start : start + CHUNK_SIZE])
+ indexes.append(chunks.setdefault(chunk, len(chunks)))
+
+ table_1 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ table_0 = indexes
+
+ c_file.write('\n/* {}. */\n'.format(property['names'][0]))
+
+ prop_name = property['names'][0].lower()
+
+ for i, table in enumerate([table_0, table_1, table_2]):
+ generate_table('{}_table_{}'.format(prop_name, 1 + i), table, c_file)
+
+ script_values = properties[munge('Script')]['values']
+ ext_dict = {}
+
+ for key, value in property['values'].items():
+ ext_dict[value['id']] = [script_values[munge(name)]['id'] for name in
+ key]
+
+ offsets = []
+ entries = []
+
+ for key, value in sorted(ext_dict.items()):
+ offsets.append(len(entries))
+ entries.extend(value + [0])
+
+ generate_table('{}_table_4'.format(prop_name), offsets, c_file)
+
+ generate_table('{}_table_5'.format(prop_name), entries, c_file)
+
+ c_file.write('''
+int re_get_{0}(RE_UINT32 codepoint, RE_UINT8* scripts) {{
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+ int offset;
+ int count;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = {0}_table_1[field_2];
+ v = {0}_table_2[(v << 5) | field_1];
+ v = {0}_table_3[(v << 5) | field_0];
+
+ if (v < {1}) {{
+ scripts[0] = v;
+
+ return 1;
+ }}
+
+ offset = {0}_table_4[v - {1}];
+ count = 0;
+
+ do {{
+ scripts[count] = {0}_table_5[offset + count];
+ ++count;
+ }} while ({0}_table_5[offset + count] != 0);
+
+ return count;
+}}
+'''.format(prop_name, script_count))
+
+def generate_all_cases(unicode_data, c_file):
+ simple_folding = unicode_data['simple_folding']
+
+ all_cases = {}
+
+ for delta, ranges in simple_folding.items():
+ for lower, upper in ranges:
+ for codepoint in range(lower, upper + 1):
+ folded = codepoint ^ delta
+ all_cases.setdefault(folded, set()).update({codepoint, folded})
+
+ for codepoint in list(all_cases):
+ cases = {codepoint} | all_cases.get(codepoint, set())
+
+ for c in list(cases):
+ cases |= all_cases.get(c, set())
+
+ for c in cases:
+ all_cases[c] = cases
+
+ all_cases[0x49] = {0x49, 0x69, 0x131} # Dotless capital I.
+ all_cases[0x69] = {0x69, 0x49, 0x130} # Dotted small I.
+ all_cases[0x130] = {0x130, 0x69} # Dotted capital I.
+ all_cases[0x131] = {0x131, 0x49} # Dotless small I.
+
+ entries = [0] * NUM_CODEPOINTS
+ others_dict = {(0, ): 0}
+
+ for codepoint, cases in all_cases.items():
+ others = sorted(cases - {codepoint})
+ key = tuple([others[0] ^ codepoint] + others[1 : ])
+ entries[codepoint] = others_dict.setdefault(key, len(others_dict))
+
+ CHUNK_SIZE = 32
+
+ indexes = []
+ chunks = {}
+
+ for chunk in chunked(entries, CHUNK_SIZE):
+ indexes.append(chunks.setdefault(tuple(chunk), len(chunks)))
+
+ table_2 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ entries = indexes
+ indexes = []
+ chunks = {}
+
+ for start in range(0, len(entries), CHUNK_SIZE):
+ chunk = tuple(entries[start : start + CHUNK_SIZE])
+ indexes.append(chunks.setdefault(chunk, len(chunks)))
+
+ table_1 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ table_0 = indexes
+
+ c_file.write('\n/* All cases. */\n')
+
+ for i, table in enumerate([table_0, table_1, table_2]):
+ if i > 0:
+ c_file.write('\n')
+
+ generate_table('re_all_cases_table_{}'.format(1 + i), table, c_file)
+
+ c_file.write('\nstatic RE_AllCases re_all_cases_table_4[] = {\n')
+
+ max_columns = max(len(value) for value in others_dict)
+
+ max_width = max(len(str(item)) for value in others_dict for item in value)
+ fmt = ' {{' + ', '.join(['{:%d}' % max_width] * max_columns) + '}},\n'
+
+ lines = []
+
+ for values in sorted(others_dict, key=others_dict.get):
+ values = list(values) + [0] * max_columns
+ lines.append(fmt.format(*values))
+
+ lines[-1] = lines[-1].rstrip(',\n') + '\n'
+
+ c_file.writelines(lines)
+
+ c_file.write('};\n')
+
+ c_file.write('''
+int re_get_all_cases(RE_UINT32 codepoint, RE_UINT32* cases) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_all_cases_table_1[field_2];
+ v = re_all_cases_table_2[(v << 5) | field_1];
+ v = re_all_cases_table_3[(v << 5) | field_0];
+
+ cases[0] = codepoint;
+
+ if (re_all_cases_table_4[v].delta == 0)
+ return 1;
+
+ cases[1] = codepoint ^ re_all_cases_table_4[v].delta;
+
+ if (re_all_cases_table_4[v].others[0] == 0)
+ return 2;
+
+ cases[2] = re_all_cases_table_4[v].others[0];
+
+ if (re_all_cases_table_4[v].others[1] == 0)
+ return 3;
+
+ cases[3] = re_all_cases_table_4[v].others[1];
+
+ return 4;
+}
+''')
+
+def generate_simple_case_folding(unicode_data, c_file):
+ simple_folding = unicode_data['simple_folding']
+
+ entries = [0] * NUM_CODEPOINTS
+ value_dict = {0: 0}
+
+ for delta, ranges in sorted(simple_folding.items()):
+ val_id = value_dict.setdefault(delta, len(value_dict))
+
+ for lower, upper in ranges:
+ entries[lower : upper + 1] = [val_id] * (upper - lower + 1)
+
+ CHUNK_SIZE = 32
+
+ indexes = []
+ chunks = {}
+
+ for chunk in chunked(entries, CHUNK_SIZE):
+ indexes.append(chunks.setdefault(tuple(chunk), len(chunks)))
+
+ table_2 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ entries = indexes
+ indexes = []
+ chunks = {}
+
+ for start in range(0, len(entries), CHUNK_SIZE):
+ chunk = tuple(entries[start : start + CHUNK_SIZE])
+ indexes.append(chunks.setdefault(chunk, len(chunks)))
+
+ table_1 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ table_0 = indexes
+
+ c_file.write('\n/* Simple case folding. */\n')
+
+ for i, table in enumerate([table_0, table_1, table_2]):
+ if i > 0:
+ c_file.write('\n')
+
+ generate_table('re_simple_folding_table_{}'.format(1 + i), table, c_file)
+
+ c_file.write('\nstatic RE_UINT16 re_simple_folding_table_4[] = {\n')
+
+ entries = [str(value) for value in sorted(value_dict, key=value_dict.get)]
+ max_width = max(len(entry) for entry in entries)
+ entries = [entry.rjust(max_width) + ',' for entry in entries]
+ entries[-1] = entries[-1].rstrip(',')
+
+ for chunk in chunked(entries, 8):
+ c_file.write(' %s\n' % ' '.join(chunk))
+
+ c_file.write('};\n')
+
+ c_file.write('''
+RE_UINT32 re_get_simple_case_folding(RE_UINT32 codepoint) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_simple_folding_table_1[field_2];
+ v = re_simple_folding_table_2[(v << 5) | field_1];
+ v = re_simple_folding_table_3[(v << 5) | field_0];
+
+ return codepoint ^ re_simple_folding_table_4[v];
+}
+''')
+
+def generate_full_case_folding(unicode_data, c_file):
+ full_folding = unicode_data['full_folding']
+
+ entries = [0] * NUM_CODEPOINTS
+ value_dict = {(0, ): 0}
+
+ for delta, ranges in sorted(full_folding.items()):
+ val_id = value_dict.setdefault(delta, len(value_dict))
+
+ for lower, upper in ranges:
+ entries[lower : upper + 1] = [val_id] * (upper - lower + 1)
+
+ CHUNK_SIZE = 32
+
+ indexes = []
+ chunks = {}
+
+ for chunk in chunked(entries, CHUNK_SIZE):
+ indexes.append(chunks.setdefault(tuple(chunk), len(chunks)))
+
+ table_2 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ entries = indexes
+ indexes = []
+ chunks = {}
+
+ for start in range(0, len(entries), CHUNK_SIZE):
+ chunk = tuple(entries[start : start + CHUNK_SIZE])
+ indexes.append(chunks.setdefault(chunk, len(chunks)))
+
+ table_1 = list(chain(*sorted(chunks, key=chunks.get)))
+
+ table_0 = indexes
+
+ c_file.write('\n/* Full case folding. */\n')
+
+ for i, table in enumerate([table_0, table_1, table_2]):
+ if i > 0:
+ c_file.write('\n')
+
+ generate_table('re_full_folding_table_{}'.format(1 + i), table, c_file)
+
+ c_file.write('\nstatic RE_FullCaseFolding re_full_folding_table_4[] = {\n')
+
+ max_folded = max(len(value) for value in value_dict)
+ max_width = max(len(str(item)) for value in value_dict for item in value)
+ rows = [(value + (0, ) * max_folded)[ : max_folded] for value in
+ sorted(value_dict, key=value_dict.get)]
+ fmt = (' {{' + ', '.join(['{:%d}' % max_width] * max_folded) +
+ '}},\n').format
+ lines = []
+
+ for row in rows:
+ lines.append(fmt(*row))
+
+ lines[-1] = lines[-1].rstrip(',\n') + '\n'
+
+ c_file.writelines(lines)
+
+ c_file.write('};\n')
+
+ c_file.write('''
+int re_get_full_case_folding(RE_UINT32 codepoint, RE_UINT32* folded) {
+ RE_UINT32 field_2;
+ RE_UINT32 field_1;
+ RE_UINT32 field_0;
+ RE_UINT32 v;
+ RE_UINT16* data;
+
+ field_2 = codepoint >> 10;
+ field_1 = (codepoint >> 5) & 0x1F;
+ field_0 = codepoint & 0x1F;
+
+ v = re_full_folding_table_1[field_2];
+ v = re_full_folding_table_2[(v << 5) | field_1];
+ v = re_full_folding_table_3[(v << 5) | field_0];
+
+ data = re_full_folding_table_4[v].data;
+ folded[0] = codepoint ^ data[0];
+
+ if (data[1] == 0)
+ return 1;
+
+ folded[1] = data[1];
+
+ if (data[2] == 0)
+ return 2;
+
+ folded[2] = data[2];
+
+ return 3;
+}
+''')
+
+def generate_code(unicode_data, tools_folder):
+ print('Generating code')
+
+ # Codepoints that expand on full casefolding.
+ expanded = []
+
+ for key, ranges in unicode_data['full_folding'].items():
+ if len(key) > 1:
+ for lower, upper in ranges:
+ expanded.extend(range(lower, upper + 1))
+
+ expanded.sort()
+
+ # Assign the property and value IDs.
+ properties = unicode_data['properties']
+ prop_list = list(unique(properties.values(), key=id))
+ prop_list.sort(key=preferred)
+
+ unicode_data['property_tablee_count'] = len(properties)
+ unicode_data['property_count'] = len(prop_list)
+
+ no_yes_maybe = {
+ 'NO', 'N', 'FALSE', 'F',
+ 'YES', 'Y', 'TRUE', 'T',
+ 'MAYBE', 'M',
+ }
+
+ yes_no_maybe_dict = {'No': 0, 'Yes': 1, 'Maybe': 2}
+
+ for prop_id, property in enumerate(prop_list):
+ property['id'] = prop_id
+
+ if property['names'][0] == 'Script_Extensions':
+ script_count = 1 + max(val['id'] for val in
+ properties[munge('Script')]['values'].values())
+
+ def make_key(value):
+ return value['codepoints'].lowest()
+
+ val_list = list(unique(property['values'].values(), key=id))
+ val_list.sort(key=make_key)
+
+ for val_id, value in enumerate(val_list):
+ value['id'] = script_count + val_id
+ else:
+ default = property['default']
+
+ if not (set(property['values']) - no_yes_maybe):
+
+ def make_key(value):
+ return yes_no_maybe_dict[value['names'][0]]
+
+ else:
+
+ def make_key(value):
+ if munge(value['names'][0]) == default:
+ return (0, )
+
+ if 'codepoints' not in value:
+ return (2, )
+
+ return 1, value['codepoints'].lowest()
+
+ val_list = list(unique(property['values'].values(), key=id))
+ val_list.sort(key=make_key)
+
+ def make_key(val):
+ name_list = [name for name in val['names'] if '&' in name]
+
+ if name_list:
+ return 1, name_list[0][0]
+
+ return 0
+
+ if property['names'][0] == 'General_Category':
+
+ def make_key(value):
+ for name in value['names']:
+ if '&' in name:
+ return (1, name)
+
+ if value.get('codepoints'):
+ return (0, )
+
+ return (2, munge(value['names'][0]))
+
+ for val_id, value in enumerate(sorted(val_list, key=make_key)):
+ value['id'] = val_id
+ else:
+ for val_id, value in enumerate(val_list):
+ value['id'] = val_id
+
+ # Collect the value sets.
+ valueset_dict = {}
+
+ for property in sorted(prop_list, key=lambda prop: prop['id']):
+ prop_name = property['names'][0]
+
+ if prop_name == 'Script_Extensions':
+ property['valueset_id'] = properties[munge('Script')]['valueset_id']
+ else:
+ valueset = []
+
+ val_list = list(unique(property['values'].values(), key=id))
+
+ for value in sorted(val_list, key=lambda val: val['id']):
+ valueset.append(tuple(value['names']))
+
+ valueset_id = valueset_dict.setdefault(tuple(valueset),
+ len(valueset_dict))
+ property['valueset_id'] = valueset_id
+
+ strings = collect_strings(properties)
+
+ c_path = join(tools_folder, 'unicode.c')
+ h_path = join(tools_folder, 'unicode.h')
+
+ with open(c_path, 'w', newline='\n', encoding='ascii') as c_file:
+ c_file.write('''\
+/* For Unicode version {} */
+
+#include "_regex_unicode.h"
+
+#define RE_BLANK_MASK ((1 << RE_PROP_ZL) | (1 << RE_PROP_ZP))
+#define RE_GRAPH_MASK ((1 << RE_PROP_CC) | (1 << RE_PROP_CS) | (1 << RE_PROP_CN))
+#define RE_WORD_MASK (RE_PROP_M_MASK | (1 << RE_PROP_ND) | (1 << RE_PROP_PC))
+
+typedef struct {{
+ RE_UINT8 scripts[RE_MAX_SCX];
+}} RE_ScriptExt;
+
+typedef struct {{
+ RE_UINT32 delta;
+ RE_UINT16 others[RE_MAX_CASES - 1];
+}} RE_AllCases;
+
+typedef struct {{
+ RE_UINT16 data[RE_MAX_FOLDED];
+}} RE_FullCaseFolding;
+
+/* Strings. */
+char* re_strings[] = {{
+'''.format(UNICODE_VERSION))
+
+ lines = []
+
+ for string in strings:
+ lines.append(' "{}",\n'.format(string))
+
+ strings_dict = {string: i for i, string in enumerate(strings)}
+
+ unicode_data['string_count'] = len(strings_dict)
+
+ c_file.writelines(lines)
+ c_file.write('''\
+};
+
+/* Properties. */
+RE_Property re_properties[] = {
+''')
+
+ for prop_id, property in enumerate(sorted(prop_list, key=lambda prop:
+ prop['id'])):
+ for name in property['names']:
+ c_file.write(' {{{:4}, {:2}, {:2}}}, /* {} */\n'.format(strings_dict[munge(name)],
+ prop_id, property['valueset_id'], munge(name)))
+
+ c_file.write('''\
+};
+
+/* Property values. */
+RE_PropertyValue re_property_values[] = {
+''')
+
+ def make_key(names):
+ if any(len(name) == 2 for name in names):
+ return 0
+
+ return 1
+
+ gc_valset_id = properties[munge('General_Category')]['valueset_id']
+ count = 0
+
+ for valset, valset_id in sorted(valueset_dict.items(), key=lambda pair:
+ pair[1]):
+ if valset_id == gc_valset_id:
+ valset = sorted(valset, key=make_key)
+
+ for val_id, names in enumerate(valset):
+ for name in names:
+ c_file.write(''' {{{:4}, {:2}, {:3}}}, /* {} */\n'''.format(strings_dict[munge(name)],
+ valset_id, val_id, munge(name)))
+
+ count += len(names)
+
+ unicode_data['valueset_table_count'] = count
+
+ c_file.write('};\n')
+
+ c_file.write('''\n/* Codepoints which expand on full case-folding. */\n''')
+
+ unicode_data['expanded_count'] = len(expanded)
+ generate_table('re_expand_on_folding', expanded, c_file, max_columns=8, public=True)
+
+ for property in prop_list:
+ print(' {}'.format(property['names'][0]), flush=True)
+
+ if property['names'][0] == 'Script_Extensions':
+ generate_script_extensions_lookup(properties, property, c_file)
+ else:
+ generate_lookup(property, c_file)
+
+ print(' All cases', flush=True)
+ generate_all_cases(unicode_data, c_file)
+
+ print(' Simple case folding', flush=True)
+ generate_simple_case_folding(unicode_data, c_file)
+
+ print(' Full case folding', flush=True)
+ generate_full_case_folding(unicode_data, c_file)
+
+ c_file.write('''
+/* Property function table. */
+RE_GetPropertyFunc re_get_property[] = {
+''')
+
+ lines = []
+
+ for property in prop_list:
+ prop_name = property['names'][0].lower()
+
+ if prop_name == 'script_extensions':
+ lines.append(' 0,\n')
+ else:
+ lines.append(' re_get_{},\n'.format(prop_name))
+
+ lines[-1] = lines[-1].rstrip(',\n') + '\n'
+
+ c_file.writelines(lines)
+
+ c_file.write('};\n')
+
+ with open(h_path, 'w', newline='\n', encoding='ascii') as h_file:
+ property = unicode_data['properties'][munge('Script_Extensions')]
+ max_scx = max(len(key) for key in property['values'])
+
+ h_file.write('''\
+typedef unsigned char RE_UINT8;
+typedef signed char RE_INT8;
+typedef unsigned short RE_UINT16;
+typedef signed short RE_INT16;
+typedef unsigned int RE_UINT32;
+typedef signed int RE_INT32;
+
+typedef unsigned char BOOL;
+#if !defined(FALSE) || !defined(TRUE)
+#define FALSE 0
+#define TRUE 1
+#endif
+
+#define RE_ASCII_MAX 0x7F
+#define RE_LOCALE_MAX 0xFF
+
+#define RE_MAX_CASES 4
+#define RE_MAX_FOLDED 3
+#define RE_MAX_SCX {}
+
+typedef struct RE_Property {{
+ RE_UINT16 name;
+ RE_UINT8 id;
+ RE_UINT8 value_set;
+}} RE_Property;
+
+typedef struct RE_PropertyValue {{
+ RE_UINT16 name;
+ RE_UINT8 value_set;
+ RE_UINT16 id;
+}} RE_PropertyValue;
+
+typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 codepoint);
+'''.format(max_scx))
+
+ gc_id = properties[munge('General_Category')]['id']
+ cased_id = properties[munge('Cased')]['id']
+ upper_id = properties[munge('Uppercase')]['id']
+ lower_id = properties[munge('Lowercase')]['id']
+ scx_id = properties[munge('Script_Extensions')]['id']
+
+ h_file.write('''
+#define RE_PROP_GC 0x{:X}
+#define RE_PROP_CASED 0x{:X}
+#define RE_PROP_UPPERCASE 0x{:X}
+#define RE_PROP_LOWERCASE 0x{:X}
+#define RE_PROP_SCX 0x{:X}
+
+'''.format(gc_id, cased_id, upper_id, lower_id, scx_id))
+
+ gc_values = properties[munge('General_Category')]['values']
+ group_names = set('C L M N P S Z Assigned Cased_Letter'.split())
+
+ names = set(gc_values) & set(munge(name) for name in group_names)
+
+ for name in sorted(names, key=lambda name: gc_values[name]['id']):
+ h_file.write('#define RE_PROP_{} {}\n'.format(name,
+ gc_values[name]['id']))
+
+ h_file.write('\n')
+
+ val_list = []
+ masks = {}
+
+ for name in gc_values:
+ if len(name) != 2 or not name.isalpha():
+ continue
+
+ if not gc_values[name].get('codepoints'):
+ continue
+
+ val_id = gc_values[name]['id']
+ val_list.append((val_id, name))
+ masks.setdefault(name[0], 0)
+ masks[name[0]] |= 1 << val_id
+
+ for val_id, name in sorted(val_list):
+ h_file.write('#define RE_PROP_{} {}\n'.format(name, val_id))
+
+ h_file.write('\n')
+
+ for name, mask in sorted(masks.items()):
+ h_file.write('#define RE_PROP_{}_MASK 0x{:08X}\n'.format(name,
+ mask))
+
+ h_file.write('\n')
+
+ common = '''
+ Alnum Alpha Any Ascii Blank Cntrl Digit Graph Lower Print Space
+ Upper Word Xdigit Posix_Alnum Posix_Digit Posix_Punct Posix_Xdigit
+ '''
+
+ for name in common.split():
+ property = properties.get(munge(name))
+
+ if property is not None:
+ h_file.write('#define RE_PROP_{} 0x{:06X}\n'.format(name.upper(),
+ (property['id'] << 16) | 1))
+ else:
+ for prop_name in ['GC', 'Script', 'Block']:
+ property = properties[munge(prop_name)]
+ value = property['values'].get(munge(name))
+
+ if value is not None:
+ h_file.write('#define RE_PROP_{} 0x{:06X}\n'.format(name.upper(),
+ (property['id'] << 16) | value['id']))
+ break
+
+ h_file.write('\n')
+
+ val_list = unique(properties[munge('Word_Break')]['values'].values(),
+ key=id)
+ values = [(value['id'], value['names'][0]) for value in val_list]
+
+ for val_id, name in sorted(values):
+ h_file.write('#define RE_WBREAK_{} {}\n'.format(munge(name),
+ val_id))
+
+ h_file.write('\n')
+
+ val_list = unique(properties[munge('Grapheme_Cluster_Break')]['values'].values(),
+ key=id)
+ values = [(value['id'], value['names'][0]) for value in val_list]
+
+ for val_id, name in sorted(values):
+ h_file.write('#define RE_GBREAK_{} {}\n'.format(munge(name),
+ val_id))
+
+ h_file.write('\n')
+
+ val_list = unique(properties[munge('Line_Break')]['values'].values(),
+ key=id)
+ values = [(value['id'], value['names'][0]) for value in val_list]
+
+ for val_id, name in sorted(values):
+ h_file.write('#define RE_LBREAK_{} {}\n'.format(munge(name),
+ val_id))
+
+ h_file.write('\n')
+
+ h_file.write('extern char* re_strings[{}];\n'.format(unicode_data['string_count']))
+ h_file.write('extern RE_Property re_properties[{}];\n'.format(unicode_data['property_tablee_count']))
+ h_file.write('extern RE_PropertyValue re_property_values[{}];\n'.format(unicode_data['valueset_table_count']))
+ h_file.write('extern RE_UINT16 re_expand_on_folding[{}];\n'.format(unicode_data['expanded_count']))
+ h_file.write('extern RE_GetPropertyFunc re_get_property[{}];\n'.format(unicode_data['property_count']))
+
+ h_file.write('\n')
+
+ for property in prop_list:
+ prop_name = property['names'][0]
+
+ if prop_name == 'Script_Extensions':
+ h_file.write('int re_get_{}(RE_UINT32 codepoint, RE_UINT8* scripts);\n'.format(prop_name.lower()))
+ else:
+ h_file.write('RE_UINT32 re_get_{}(RE_UINT32 codepoint);\n'.format(prop_name.lower()))
+
+ h_file.write('int re_get_all_cases(RE_UINT32 codepoint, RE_UINT32* cases);\n')
+ h_file.write('RE_UINT32 re_get_simple_case_folding(RE_UINT32 codepoint);\n')
+ h_file.write('int re_get_full_case_folding(RE_UINT32 codepoint, RE_UINT32* folded);\n')
+
+# Whether to update the Unicode data files from the Unicode website.
+UNICODE_VERSION = '13.0.0'
+
+# The URL from which the Unicode data files can be obtained.
+unicode_data_base = 'http://www.unicode.org/Public/UNIDATA/'
+
+NUM_CODEPOINTS = 0x110000
+
+# The Unicode data files. The file names are relative to the website URL.
+unicode_data_files = '''
+[aliases]
+PropertyAliases.txt
+PropertyValueAliases.txt
+[binary]
+PropList.txt
+extracted/DerivedBinaryProperties.txt
+DerivedCoreProperties.txt
+[emoji]
+emoji/emoji-data.txt
+[normalisation]
+DerivedNormalizationProps.txt
+[multivalue]
+auxiliary/GraphemeBreakProperty.txt
+auxiliary/SentenceBreakProperty.txt
+auxiliary/WordBreakProperty.txt
+Blocks.txt
+extracted/DerivedBidiClass.txt
+extracted/DerivedCombiningClass.txt
+extracted/DerivedDecompositionType.txt
+extracted/DerivedEastAsianWidth.txt
+extracted/DerivedGeneralCategory.txt
+extracted/DerivedJoiningGroup.txt
+extracted/DerivedJoiningType.txt
+extracted/DerivedLineBreak.txt
+extracted/DerivedNumericType.txt
+HangulSyllableType.txt
+IndicPositionalCategory.txt
+IndicSyllabicCategory.txt
+Scripts.txt
+[numeric_values]
+extracted/DerivedNumericValues.txt
+[case_folding]
+CaseFolding.txt
+[script_extensions]
+ScriptExtensions.txt
+'''
+
+data_files = {}
+section = ''
+
+for line in unicode_data_files.splitlines():
+ if line[ : 1] + line[-1 : ] == '[]':
+ section = line[1 : -1]
+ elif line:
+ data_files.setdefault(section, []).append(line)
+
+# The generated C files will be written into this folder.
+tools_folder = dirname(__file__)
+
+# The local folder in which the Unicode data files are stored.
+data_folder = join(tools_folder, 'unicode_data')
+
+with suppress(FileExistsError):
+ mkdir(data_folder)
+
+download_unicode_files(unicode_data_base, data_files, data_folder)
+
+unicode_data = parse_unicode_files(data_files, data_folder)
+make_additional_properties(unicode_data)
+write_summary(unicode_data, tools_folder)
+
+binary_dict = make_binary_dict()
+
+generate_code(unicode_data, tools_folder)
+
+print('\nFinished!')