summaryrefslogtreecommitdiffstats
path: root/src/corelib/text
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/text')
-rw-r--r--src/corelib/text/UNICODE_LICENSE.txt46
-rw-r--r--src/corelib/text/qanystringview.cpp660
-rw-r--r--src/corelib/text/qanystringview.h317
-rw-r--r--src/corelib/text/qanystringview.qdoc425
-rw-r--r--src/corelib/text/qbytearray.cpp2285
-rw-r--r--src/corelib/text/qbytearray.h673
-rw-r--r--src/corelib/text/qbytearray_p.h65
-rw-r--r--src/corelib/text/qbytearrayalgorithms.h148
-rw-r--r--src/corelib/text/qbytearraylist.cpp74
-rw-r--r--src/corelib/text/qbytearraylist.h85
-rw-r--r--src/corelib/text/qbytearraymatcher.cpp121
-rw-r--r--src/corelib/text/qbytearraymatcher.h110
-rw-r--r--src/corelib/text/qbytearrayview.h252
-rw-r--r--src/corelib/text/qbytearrayview.qdoc475
-rw-r--r--src/corelib/text/qbytedata_p.h68
-rw-r--r--src/corelib/text/qchar.cpp419
-rw-r--r--src/corelib/text/qchar.h255
-rw-r--r--src/corelib/text/qcollator.cpp319
-rw-r--r--src/corelib/text/qcollator.h74
-rw-r--r--src/corelib/text/qcollator_icu.cpp55
-rw-r--r--src/corelib/text/qcollator_macx.cpp64
-rw-r--r--src/corelib/text/qcollator_p.h52
-rw-r--r--src/corelib/text/qcollator_posix.cpp75
-rw-r--r--src/corelib/text/qcollator_win.cpp73
-rw-r--r--src/corelib/text/qdoublescanprint_p.h42
-rw-r--r--src/corelib/text/qlatin1stringmatcher.cpp201
-rw-r--r--src/corelib/text/qlatin1stringmatcher.h172
-rw-r--r--src/corelib/text/qlatin1stringview.h375
-rw-r--r--src/corelib/text/qlatin1stringview.qdoc1295
-rw-r--r--src/corelib/text/qlocale.cpp3617
-rw-r--r--src/corelib/text/qlocale.h1844
-rw-r--r--src/corelib/text/qlocale.qdoc727
-rw-r--r--src/corelib/text/qlocale_data_p.h13726
-rw-r--r--src/corelib/text/qlocale_icu.cpp40
-rw-r--r--src/corelib/text/qlocale_mac.mm608
-rw-r--r--src/corelib/text/qlocale_p.h576
-rw-r--r--src/corelib/text/qlocale_tools.cpp604
-rw-r--r--src/corelib/text/qlocale_tools_p.h87
-rw-r--r--src/corelib/text/qlocale_unix.cpp109
-rw-r--r--src/corelib/text/qlocale_wasm.cpp54
-rw-r--r--src/corelib/text/qlocale_win.cpp540
-rw-r--r--src/corelib/text/qregularexpression.cpp627
-rw-r--r--src/corelib/text/qregularexpression.h217
-rw-r--r--src/corelib/text/qstaticlatin1stringmatcher.h140
-rw-r--r--src/corelib/text/qstaticlatin1stringmatcher.qdoc86
-rw-r--r--src/corelib/text/qstring.cpp7329
-rw-r--r--src/corelib/text/qstring.h1731
-rw-r--r--src/corelib/text/qstring_mips_dsp_asm.S40
-rw-r--r--src/corelib/text/qstringalgorithms.h306
-rw-r--r--src/corelib/text/qstringalgorithms_p.h64
-rw-r--r--src/corelib/text/qstringbuilder.cpp100
-rw-r--r--src/corelib/text/qstringbuilder.h301
-rw-r--r--src/corelib/text/qstringconverter.cpp1458
-rw-r--r--src/corelib/text/qstringconverter.h380
-rw-r--r--src/corelib/text/qstringconverter_base.h176
-rw-r--r--src/corelib/text/qstringconverter_p.h233
-rw-r--r--src/corelib/text/qstringfwd.h56
-rw-r--r--src/corelib/text/qstringiterator.qdoc28
-rw-r--r--src/corelib/text/qstringiterator_p.h85
-rw-r--r--src/corelib/text/qstringlist.cpp382
-rw-r--r--src/corelib/text/qstringlist.h133
-rw-r--r--src/corelib/text/qstringliteral.h60
-rw-r--r--src/corelib/text/qstringmatcher.cpp94
-rw-r--r--src/corelib/text/qstringmatcher.h45
-rw-r--r--src/corelib/text/qstringtokenizer.cpp132
-rw-r--r--src/corelib/text/qstringtokenizer.h93
-rw-r--r--src/corelib/text/qstringview.cpp584
-rw-r--r--src/corelib/text/qstringview.h434
-rw-r--r--src/corelib/text/qt_attribution.json36
-rw-r--r--src/corelib/text/qtextboundaryfinder.cpp68
-rw-r--r--src/corelib/text/qtextboundaryfinder.h42
-rw-r--r--src/corelib/text/qtliterals.qdoc44
-rw-r--r--src/corelib/text/qunicodetables.cpp28112
-rw-r--r--src/corelib/text/qunicodetables_p.h96
-rw-r--r--src/corelib/text/qunicodetools.cpp676
-rw-r--r--src/corelib/text/qunicodetools_p.h40
-rw-r--r--src/corelib/text/qutf8stringview.h243
-rw-r--r--src/corelib/text/qutf8stringview.qdoc242
-rw-r--r--src/corelib/text/qvsnprintf.cpp42
-rw-r--r--src/corelib/text/text.pri90
80 files changed, 45647 insertions, 31205 deletions
diff --git a/src/corelib/text/UNICODE_LICENSE.txt b/src/corelib/text/UNICODE_LICENSE.txt
deleted file mode 100644
index 567fda24dd..0000000000
--- a/src/corelib/text/UNICODE_LICENSE.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
-
-See Terms of Use for definitions of Unicode Inc.'s
-Data Files and Software.
-
-NOTICE TO USER: Carefully read the following legal agreement.
-BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
-DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
-YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
-TERMS AND CONDITIONS OF THIS AGREEMENT.
-IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
-THE DATA FILES OR SOFTWARE.
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright © 1991-2019 Unicode, Inc. All rights reserved.
-Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Unicode data files and any associated documentation
-(the "Data Files") or Unicode software and any associated documentation
-(the "Software") to deal in the Data Files or Software
-without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, and/or sell copies of
-the Data Files or Software, and to permit persons to whom the Data Files
-or Software are furnished to do so, provided that either
-(a) this copyright and permission notice appear with all copies
-of the Data Files or Software, or
-(b) this copyright and permission notice appear in associated
-Documentation.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
-NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
-DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THE DATA FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale,
-use or other dealings in these Data Files or Software without prior
-written authorization of the copyright holder.
diff --git a/src/corelib/text/qanystringview.cpp b/src/corelib/text/qanystringview.cpp
new file mode 100644
index 0000000000..4129257c02
--- /dev/null
+++ b/src/corelib/text/qanystringview.cpp
@@ -0,0 +1,660 @@
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qanystringview.h"
+#include "qdebug.h"
+#include "qttypetraits.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QAnyStringView
+ \inmodule QtCore
+ \since 6.0
+ \brief The QAnyStringView class provides a unified view on Latin-1, UTF-8,
+ or UTF-16 strings with a read-only subset of the QString API.
+ \reentrant
+ \ingroup tools
+ \ingroup string-processing
+
+ \compares strong
+ \compareswith strong char16_t QChar {const char16_t *} {const char *} \
+ QByteArray QByteArrayView QString QStringView QUtf8StringView \
+ QLatin1StringView
+ \endcompareswith
+
+ A QAnyStringView references a contiguous portion of a string it does
+ not own. It acts as an interface type to all kinds of strings,
+ without the need to construct a QString first.
+
+ Unlike QStringView and QUtf8StringView, QAnyStringView can hold
+ strings of any of the following encodings: UTF-8, UTF-16, and
+ Latin-1. The latter is supported because Latin-1, unlike UTF-8,
+ can be efficiently compared to UTF-16 data: a length mismatch
+ already means the strings cannot be equal. This is not true for
+ UTF-8/UTF-16 comparisons, because UTF-8 is a variable-length
+ encoding.
+
+ The string may be represented as an array (or an array-compatible
+ data-structure such as QString, std::basic_string, etc.) of \c
+ char, \c char8_t, QChar, \c ushort, \c char16_t or (on platforms,
+ such as Windows, where it is a 16-bit type) \c wchar_t.
+
+ QAnyStringView is designed as an interface type; its main use-case
+ is as a function parameter type. When QAnyStringViews are used as
+ automatic variables or data members, care must be taken to ensure
+ that the referenced string data (for example, owned by a QString)
+ outlives the QAnyStringView on all code paths, lest the string
+ view ends up referencing deleted data.
+
+ When used as an interface type, QAnyStringView allows a single
+ function to accept a wide variety of string data sources. One
+ function accepting QAnyStringView thus replaces five function
+ overloads (taking QString, \c{(const QChar*, qsizetype)},
+ QUtf8StringView, QLatin1StringView (but see above), and QChar), while
+ at the same time enabling even more string data sources to be
+ passed to the function, such as \c{u8"Hello World"}, a \c char8_t
+ string literal.
+
+ Like elsewhere in Qt, QAnyStringView assumes \c char data is encoded
+ in UTF-8, unless it is presented as a QLatin1StringView.
+
+ Since Qt 6.4, however, UTF-8 string literals that are pure US-ASCII are
+ automatically stored as Latin-1. This is a compile-time check with no
+ runtime overhead. The feature requires compiling in C++20, or with a recent
+ GCC.
+
+ QAnyStringViews should be passed by value, not by reference-to-const:
+ \snippet code/src_corelib_text_qanystringview.cpp 0
+
+ QAnyStringView can also be used as the return value of a function,
+ but this is not recommended. QUtf8StringView or QStringView are
+ better suited as function return values. If you call a function
+ returning QAnyStringView, take extra care to not keep the
+ QAnyStringView around longer than the function promises to keep
+ the referenced string data alive. If in doubt, obtain a strong
+ reference to the data by calling toString() to convert the
+ QAnyStringView into a QString.
+
+ QAnyStringView is a \e{Literal Type}.
+
+ \section2 Compatible Character Types
+
+ QAnyStringView accepts strings over a variety of character types:
+
+ \list
+ \li \c char (both signed and unsigned)
+ \li \c char8_t (C++20 only)
+ \li \c char16_t
+ \li \c wchar_t (where it's a 16-bit type, e.g. Windows)
+ \li \c ushort
+ \li \c QChar
+ \endlist
+
+ The 8-bit character types are interpreted as UTF-8 data (except when
+ presented as a QLatin1StringView) while the 16-bit character types are
+ interpreted as UTF-16 data in host byte order (the same as QString).
+
+ \section2 Sizes and Sub-Strings
+
+ All sizes and positions in QAnyStringView functions are in the
+ encoding's code units (that is, UTF-16 surrogate pairs count as
+ two for the purposes of these functions, the same as in QString,
+ and UTF-8 multibyte sequences count as two, three or four,
+ depending on their length).
+
+ \sa QUtf8StringView, QStringView
+*/
+
+/*!
+ \typedef QAnyStringView::difference_type
+
+ Alias for \c{std::ptrdiff_t}. Provided for compatibility with the STL.
+*/
+
+/*!
+ \typedef QAnyStringView::size_type
+
+ Alias for qsizetype. Provided for compatibility with the STL.
+*/
+
+/*!
+ \fn QAnyStringView::QAnyStringView()
+
+ Constructs a null string view.
+
+ \sa isNull()
+*/
+
+/*!
+ \fn QAnyStringView::QAnyStringView(std::nullptr_t)
+
+ Constructs a null string view.
+
+ \sa isNull()
+*/
+
+/*!
+ \fn template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char *str, qsizetype len)
+
+ Constructs a string view on \a str with length \a len.
+
+ The range \c{[str,len)} must remain valid for the lifetime of this string view object.
+
+ Passing \nullptr as \a str is safe if \a len is 0, too, and results in a null string view.
+
+ The behavior is undefined if \a len is negative or, when positive, if \a str is \nullptr.
+
+ This constructor only participates in overload resolution if \c Char is a compatible
+ character type.
+
+ \sa isNull(), {Compatible Character Types}
+*/
+
+/*!
+ \fn template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char *first, const Char *last)
+
+ Constructs a string view on \a first with length (\a last - \a first).
+
+ The range \c{[first,last)} must remain valid for the lifetime of
+ this string view object.
+
+ Passing \nullptr as \a first is safe if \a last is \nullptr, too,
+ and results in a null string view.
+
+ The behavior is undefined if \a last precedes \a first, or \a first
+ is \nullptr and \a last is not.
+
+ This constructor only participates in overload resolution if \c Char
+ is a compatible character type.
+
+ \sa isNull(), {Compatible Character Types}
+*/
+
+/*!
+ \fn template <typename Char> QAnyStringView::QAnyStringView(const Char *str)
+
+ Constructs a string view on \a str. The length is determined
+ by scanning for the first \c{Char(0)}.
+
+ \a str must remain valid for the lifetime of this string view object.
+
+ Passing \nullptr as \a str is safe and results in a null string view.
+
+ This constructor only participates in overload resolution if \a
+ str is not an array and if \c Char is a compatible character
+ type.
+
+ \sa isNull(), {Compatible Character Types}
+*/
+
+/*!
+ \fn template <typename Char, size_t N> QAnyStringView::QAnyStringView(const Char (&string)[N])
+
+ Constructs a string view on the character string literal \a string.
+ The view covers the array until the first \c{Char(0)} is encountered,
+ or \c N, whichever comes first.
+ If you need the full array, use fromArray() instead.
+
+ \a string must remain valid for the lifetime of this string view
+ object.
+
+ This constructor only participates in overload resolution if \a
+ string is an actual array and \c Char is a compatible character
+ type.
+
+ \sa {Compatible Character Types}
+*/
+
+/*!
+ \fn QAnyStringView::QAnyStringView(const QString &str)
+
+ Constructs a string view on \a str.
+
+ \c{str.data()} must remain valid for the lifetime of this string view object.
+
+ The string view will be null if and only if \c{str.isNull()}.
+*/
+
+/*!
+ \fn QAnyStringView::QAnyStringView(const QByteArray &str)
+
+ Constructs a string view on \a str. The data in \a str is interpreted as UTF-8.
+
+ \c{str.data()} must remain valid for the lifetime of this string view object.
+
+ The string view will be null if and only if \c{str.isNull()}.
+*/
+
+/*!
+ \fn template <typename Container, QAnyStringView::if_compatible_container<Container>> QAnyStringView::QAnyStringView(const Container &str)
+
+ Constructs a string view on \a str. The length is taken from \c{std::size(str)}.
+
+ \c{std::data(str)} must remain valid for the lifetime of this string view object.
+
+ This constructor only participates in overload resolution if \c Container is a
+ container with a compatible character type as \c{value_type}.
+
+ The string view will be empty if and only if \c{std::size(str) == 0}. It is unspecified
+ whether this constructor can result in a null string view (\c{std::data(str)} would
+ have to return \nullptr for this).
+
+ \sa isNull(), isEmpty()
+*/
+
+/*!
+ \fn template <typename Char, size_t Size> static QAnyStringView fromArray(const Char (&string)[Size]) noexcept
+
+ Constructs a string view on the full character string literal \a string,
+ including any trailing \c{Char(0)}. If you don't want the
+ null-terminator included in the view then you can use the constructor
+ overload taking a pointer and a size:
+
+ \snippet code/src_corelib_text_qanystringview.cpp 2
+
+ Alternatively you can use the constructor overload taking an
+ array literal which will create a view up to, but not including,
+ the first null-terminator in the data.
+
+ \a string must remain valid for the lifetime of this string view
+ object.
+
+ This function will work with any array literal if \c Char is a
+ compatible character type.
+*/
+
+/*!
+ \fn QString QAnyStringView::toString() const
+
+ Returns a deep copy of this string view's data as a QString.
+
+ The return value will be a null QString if and only if this string view is null.
+*/
+
+/*!
+ \fn const void *QAnyStringView::data() const
+
+ Returns a const pointer to the first character in the string view.
+
+ \note The character array represented by the return value is \e not null-terminated.
+
+ \sa size_bytes()
+*/
+
+/*!
+ \fn bool QAnyStringView::empty() const
+
+ Returns whether this string view is empty - that is, whether \c{size() == 0}.
+
+ This function is provided for STL compatibility.
+
+ \sa isEmpty(), isNull(), size()
+*/
+
+/*!
+ \fn bool QAnyStringView::isEmpty() const
+
+ Returns whether this string view is empty - that is, whether \c{size() == 0}.
+
+ This function is provided for compatibility with other Qt containers.
+
+ \sa empty(), isNull(), size()
+*/
+
+/*!
+ \fn bool QAnyStringView::isNull() const
+
+ Returns whether this string view is null - that is, whether \c{data() == nullptr}.
+
+ This functions is provided for compatibility with other Qt containers.
+
+ \sa empty(), isEmpty(), size()
+*/
+
+/*!
+ \fn qsizetype QAnyStringView::size() const
+
+ Returns the size of this string view, in the encoding's code points.
+
+ \sa empty(), isEmpty(), isNull(), size_bytes(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::size_bytes() const
+
+ Returns the size of this string view, but in bytes, not code-points.
+
+ You can use this function together with data() for hashing or serialization.
+
+ This function is provided for STL compatibility.
+
+ \sa size(), data()
+*/
+
+/*!
+ \fn QAnyStringView::length() const
+
+ Same as size().
+
+ This function is provided for compatibility with other Qt containers.
+
+ \sa size()
+*/
+
+/*!
+ \fn QChar QAnyStringView::front() const
+
+ Returns the first character in the string view.
+
+ This function is provided for STL compatibility.
+
+ \warning Calling this function on an empty string view constitutes
+ undefined behavior.
+
+ \sa back(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QChar QAnyStringView::back() const
+
+ Returns the last character in the string view.
+
+ This function is provided for STL compatibility.
+
+ \warning Calling this function on an empty string view constitutes
+ undefined behavior.
+
+ \sa front(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::mid(qsizetype pos, qsizetype n) const
+ \since 6.5
+
+ Returns the substring of length \a n starting at position
+ \a pos in this object.
+
+ \deprecated Use sliced() instead in new code.
+
+ Returns an empty string view if \a n exceeds the
+ length of the string view. If there are less than \a n code points
+ available in the string view starting at \a pos, or if
+ \a n is negative (default), the function returns all code points that
+ are available from \a pos.
+
+ \sa first(), last(), sliced(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::left(qsizetype n) const
+ \since 6.5
+
+ \deprecated Use first() instead in new code.
+
+ Returns the substring of length \a n starting at position
+ 0 in this object.
+
+ The entire string view is returned if \a n is greater than or equal
+ to size(), or less than zero.
+
+ \sa first(), last(), sliced(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::right(qsizetype n) const
+ \since 6.5
+
+ \deprecated Use last() instead in new code.
+
+ Returns the substring of length \a n starting at position
+ size() - \a n in this object.
+
+ The entire string view is returned if \a n is greater than or equal
+ to size(), or less than zero.
+
+ \sa first(), last(), sliced(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::first(qsizetype n) const
+ \since 6.5
+
+ Returns a string view that contains the first \a n code points
+ of this string view.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa last(), sliced(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::last(qsizetype n) const
+ \since 6.5
+
+ Returns a string view that contains the last \a n code points of this string view.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa first(), sliced(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::sliced(qsizetype pos, qsizetype n) const
+ \since 6.5
+
+ Returns a string view containing \a n code points of this string view,
+ starting at position \a pos.
+
+//! [UB-sliced-index-length]
+ \note The behavior is undefined when \a pos < 0, \a n < 0,
+ or \a pos + \a n > size().
+//! [UB-sliced-index-length]
+
+ \sa first(), last(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::sliced(qsizetype pos) const
+ \since 6.5
+
+ Returns a string view starting at position \a pos in this object,
+ and extending to its end.
+
+//! [UB-sliced-index-only]
+ \note The behavior is undefined when \a pos < 0 or \a pos > size().
+//! [UB-sliced-index-only]
+
+ \sa first(), last(), chopped(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::chopped(qsizetype n) const
+ \since 6.5
+
+ Returns the substring of length size() - \a n starting at the
+ beginning of this object.
+
+ Same as \c{first(size() - n)}.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa sliced(), first(), last(), chop(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::truncate(qsizetype n)
+ \since 6.5
+
+ Truncates this string view to \a n code points.
+
+ Same as \c{*this = first(n)}.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa sliced(), first(), last(), chopped(), chop(), {Sizes and Sub-Strings}
+*/
+
+/*!
+ \fn QAnyStringView::chop(qsizetype n)
+ \since 6.5
+
+ Truncates this string view by \a n code points.
+
+ Same as \c{*this = first(size() - n)}.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa sliced(), first(), last(), chopped(), truncate(), {Sizes and Sub-Strings}
+*/
+
+/*! \fn template <typename Visitor> decltype(auto) QAnyStringView::visit(Visitor &&v) const
+
+ Calls \a v with either a QUtf8StringView, QLatin1String, or QStringView, depending
+ on the encoding of the string data this string-view references.
+
+ This is how most functions taking QAnyStringView fork off into per-encoding
+ functions:
+
+ \code
+ void processImpl(QLatin1String s) { ~~~ }
+ void processImpl(QUtf8StringView s) { ~~~ }
+ void processImpl(QStringView s) { ~~~ }
+
+ void process(QAnyStringView s)
+ {
+ s.visit([](auto s) { processImpl(s); });
+ }
+ \endcode
+
+ Here, we're reusing the same name, \c s, for both the QAnyStringView
+ object, as well as the lambda's parameter. This is idiomatic code and helps
+ track the identity of the objects through visit() calls, for example in more
+ complex situations such as
+
+ \code
+ bool equal(QAnyStringView lhs, QAnyStringView rhs)
+ {
+ // assuming operator==(QAnyStringView, QAnyStringView) didn't, yet, exist:
+ return lhs.visit([rhs](auto lhs) {
+ rhs.visit([lhs](auto rhs) {
+ return lhs == rhs;
+ });
+ });
+ }
+ \endcode
+
+ visit() requires that all lambda instantiations have the same return type.
+ If they differ, you get a compile error, even if there is a common type. To
+ fix, you can use explicit return types on the lambda, or cast in the return
+ statements:
+
+ \code
+ // wrong:
+ QAnyStringView firstHalf(QAnyStringView input)
+ {
+ return input.visit([](auto input) { // ERROR: lambdas return different types
+ return input.sliced(0, input.size() / 2);
+ });
+ }
+ // correct:
+ QAnyStringView firstHalf(QAnyStringView input)
+ {
+ return input.visit([](auto input) -> QAnyStringView { // OK, explicit return type
+ return input.sliced(0, input.size() / 2);
+ });
+ }
+ // also correct:
+ QAnyStringView firstHalf(QAnyStringView input)
+ {
+ return input.visit([](auto input) {
+ return QAnyStringView(input.sliced(0, input.size() / 2)); // OK, cast to common type
+ });
+ }
+ \endcode
+*/
+
+/*!
+ \fn QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs)
+
+ Compares the string view \a lhs with the string view \a rhs and returns a
+ negative integer if \a lhs is less than \a rhs, a positive integer if it is
+ greater than \a rhs, and zero if they are equal.
+
+ If \a cs is Qt::CaseSensitive (the default), the comparison is case sensitive;
+ otherwise the comparison is case-insensitive.
+
+ \sa operator==(), operator<(), operator>()
+*/
+
+/*!
+ \fn bool QAnyStringView::operator==(const QAnyStringView &lhs, const QAnyStringView & rhs)
+ \fn bool QAnyStringView::operator!=(const QAnyStringView & lhs, const QAnyStringView & rhs)
+ \fn bool QAnyStringView::operator<=(const QAnyStringView & lhs, const QAnyStringView & rhs)
+ \fn bool QAnyStringView::operator>=(const QAnyStringView & lhs, const QAnyStringView & rhs)
+ \fn bool QAnyStringView::operator<(const QAnyStringView & lhs, const QAnyStringView & rhs)
+ \fn bool QAnyStringView::operator>(const QAnyStringView & lhs, const QAnyStringView & rhs)
+
+ Operators that compare \a lhs to \a rhs.
+
+ \sa compare()
+*/
+
+/*!
+ \fn template <typename QStringLike> qToAnyStringViewIgnoringNull(const QStringLike &s);
+ \since 6.0
+ \internal
+
+ Convert \a s to a QAnyStringView ignoring \c{s.isNull()}.
+
+ Returns a string view that references \a{s}'s data, but is never null.
+
+ This is a faster way to convert a QString or QByteArray to a QAnyStringView,
+ if null QStrings or QByteArrays can legitimately be treated as empty ones.
+
+ \sa QString::isNull(), QAnyStringView
+*/
+
+/*!
+ \fn QAnyStringView::operator<<(QDebug d, QAnyStringView s)
+ \since 6.7
+ \relates QDebug
+
+ Outputs \a s to debug stream \a d.
+
+ If \c{d.quotedString()} is \c true, indicates which encoding the string is
+ in. If you just want the string data, use visit() like this:
+
+ \code
+ s.visit([&d) (auto s) { d << s; });
+ \endcode
+
+ \sa QAnyStringView::visit()
+*/
+QDebug operator<<(QDebug d, QAnyStringView s)
+{
+ struct S { const char *prefix, *suffix; };
+ const auto affixes = s.visit([](auto s) {
+ using View = decltype(s);
+ if constexpr (std::is_same_v<View, QLatin1StringView>) {
+ return S{"", "_L1"};
+ } else if constexpr (std::is_same_v<View, QUtf8StringView>) {
+ return S{"u8", ""};
+ } else if constexpr (std::is_same_v<View, QStringView>) {
+ return S{"u", ""};
+ } else {
+ static_assert(QtPrivate::type_dependent_false<View>());
+ }
+ });
+ const QDebugStateSaver saver(d);
+ d.nospace();
+ if (d.quoteStrings())
+ d << affixes.prefix;
+ s.visit([&d](auto s) { d << s; });
+ if (d.quoteStrings())
+ d << affixes.suffix;
+ return d;
+}
+
+
+QT_END_NAMESPACE
diff --git a/src/corelib/text/qanystringview.h b/src/corelib/text/qanystringview.h
index 242efc6e5c..01efd83743 100644
--- a/src/corelib/text/qanystringview.h
+++ b/src/corelib/text/qanystringview.h
@@ -1,50 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QANYSTRINGVIEW_H
#define QANYSTRINGVIEW_H
+#include <QtCore/qcompare.h>
+#include <QtCore/qlatin1stringview.h>
#include <QtCore/qstringview.h>
#include <QtCore/qutf8stringview.h>
+#ifdef __cpp_impl_three_way_comparison
+#include <compare>
+#endif
+#include <QtCore/q20type_traits.h>
+#include <limits>
+
+class tst_QAnyStringView;
+
QT_BEGIN_NAMESPACE
-template <typename, typename> class QStringBuilder;
+namespace QtPrivate {
+
+template <typename Tag, typename Result>
+struct wrapped { using type = Result; };
+
+template <typename Tag, typename Result>
+using wrapped_t = typename wrapped<Tag, Result>::type;
+
+} // namespace QtPrivate
class QAnyStringView
{
@@ -52,6 +35,32 @@ public:
typedef qptrdiff difference_type;
typedef qsizetype size_type;
private:
+ static constexpr size_t SizeMask = (std::numeric_limits<size_t>::max)() / 4;
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED)
+ static constexpr int SizeShift = 2;
+ static constexpr size_t Latin1Flag = 1;
+#else
+ static constexpr int SizeShift = 0;
+ static constexpr size_t Latin1Flag = SizeMask + 1;
+#endif
+ static constexpr size_t TwoByteCodePointFlag = Latin1Flag << 1;
+ static constexpr size_t TypeMask = ~(SizeMask << SizeShift);
+ static_assert(TypeMask == (Latin1Flag|TwoByteCodePointFlag));
+
+ // Tag bits
+ // 0 0 Utf8
+ // 0 1 Latin1
+ // 1 0 Utf16
+ // 1 1 Unused
+ // ^ ^ latin1
+ // | sizeof code-point == 2
+ enum Tag : size_t {
+ Utf8 = 0,
+ Latin1 = Latin1Flag,
+ Utf16 = TwoByteCodePointFlag,
+ Unused = TypeMask,
+ };
+
template <typename Char>
using if_compatible_char = std::enable_if_t<std::disjunction_v<
QtPrivate::IsCompatibleCharType<Char>,
@@ -71,51 +80,66 @@ private:
QtPrivate::IsContainerCompatibleWithQUtf8StringView<T>
>, bool>;
+ template <typename QStringOrQByteArray, typename T>
+ using if_convertible_to = std::enable_if_t<std::conjunction_v<
+ // need to exclude a bunch of stuff, because we take by universal reference:
+ std::negation<std::disjunction<
+ std::is_same<q20::remove_cvref_t<T>, QAnyStringView::Tag>,
+ std::is_same<q20::remove_cvref_t<T>, QAnyStringView>, // don't make a copy/move ctor
+ std::is_pointer<std::decay_t<T>>, // const char*, etc
+ std::is_same<q20::remove_cvref_t<T>, QByteArray>,
+ std::is_same<q20::remove_cvref_t<T>, QString>
+ >>,
+ // this is what we're really after:
+ std::is_convertible<T, QStringOrQByteArray>
+ >, bool>;
+
// confirm we don't make an accidental copy constructor:
static_assert(QtPrivate::IsContainerCompatibleWithQStringView<QAnyStringView>::value == false);
static_assert(QtPrivate::IsContainerCompatibleWithQUtf8StringView<QAnyStringView>::value == false);
- template <typename Char>
- static constexpr std::size_t encodeType(qsizetype sz) noexcept
+ template<typename Char>
+ static constexpr bool isAsciiOnlyCharsAtCompileTime(Char *str, qsizetype sz) noexcept
{
- // only deals with Utf8 and Utf16 - there's only one way to create
- // a Latin1 string, and that ctor deals with the tag itself
+ // do not perform check if not at compile time
+ if (!q20::is_constant_evaluated())
+ return false;
+ if constexpr (sizeof(Char) != sizeof(char)) {
+ Q_UNUSED(str);
+ Q_UNUSED(sz);
+ return false;
+ } else {
+ for (qsizetype i = 0; i < sz; ++i) {
+ if (uchar(str[i]) > 0x7f)
+ return false;
+ }
+ return true;
+ }
+ }
+
+ template<typename Char>
+ static constexpr std::size_t encodeType(const Char *str, qsizetype sz) noexcept
+ {
+ // Utf16 if 16 bit, Latin1 if ASCII, else Utf8
Q_ASSERT(sz >= 0);
Q_ASSERT(sz <= qsizetype(SizeMask));
- return std::size_t(sz) | uint(sizeof(Char) == sizeof(char16_t)) * Tag::Utf16;
+ Q_ASSERT(str || !sz);
+ return (std::size_t(sz) << SizeShift)
+ | uint(sizeof(Char) == sizeof(char16_t)) * Tag::Utf16
+ | uint(isAsciiOnlyCharsAtCompileTime(str, sz)) * Tag::Latin1;
}
template <typename Char>
- static qsizetype lengthHelperPointer(const Char *str) noexcept
+ static constexpr qsizetype lengthHelperPointer(const Char *str) noexcept
{
-#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL)
- if (__builtin_constant_p(*str)) {
- qsizetype result = 0;
- while (*str++ != u'\0')
- ++result;
- return result;
- }
-#endif
+ if (q20::is_constant_evaluated())
+ return qsizetype(std::char_traits<Char>::length(str));
if constexpr (sizeof(Char) == sizeof(char16_t))
return QtPrivate::qustrlen(reinterpret_cast<const char16_t*>(str));
else
return qsizetype(strlen(reinterpret_cast<const char*>(str)));
}
- template <typename Container>
- static constexpr qsizetype lengthHelperContainer(const Container &c) noexcept
- {
- return qsizetype(std::size(c));
- }
-
- template <typename Char, size_t N>
- static constexpr qsizetype lengthHelperContainer(const Char (&str)[N]) noexcept
- {
- const auto it = std::char_traits<Char>::find(str, N, Char(0));
- const auto end = it ? it : std::next(str, N);
- return qsizetype(std::distance(str, end));
- }
-
static QChar toQChar(char ch) noexcept { return toQChar(QLatin1Char{ch}); } // we don't handle UTF-8 multibytes
static QChar toQChar(QChar ch) noexcept { return ch; }
static QChar toQChar(QLatin1Char ch) noexcept { return ch; }
@@ -130,14 +154,15 @@ public:
template <typename Char, if_compatible_char<Char> = true>
constexpr QAnyStringView(const Char *str, qsizetype len)
- : m_data{str},
- m_size{encodeType<Char>((Q_ASSERT(len >= 0), Q_ASSERT(str || !len), len))} {}
+ : m_data{str}, m_size{encodeType<Char>(str, len)}
+ {
+ }
template <typename Char, if_compatible_char<Char> = true>
constexpr QAnyStringView(const Char *f, const Char *l)
: QAnyStringView(f, l - f) {}
-#ifdef Q_CLANG_QDOC
+#ifdef Q_QDOC
template <typename Char, size_t N>
constexpr QAnyStringView(const Char (&array)[N]) noexcept;
@@ -153,16 +178,21 @@ public:
// defined in qstring.h
inline QAnyStringView(const QByteArray &str) noexcept; // TODO: Should we have this at all? Remove?
inline QAnyStringView(const QString &str) noexcept;
- inline constexpr QAnyStringView(QLatin1String str) noexcept;
-
- // defined in qstringbuilder.h
- template <typename A, typename B>
- inline QAnyStringView(const QStringBuilder<A, B> &expr,
- typename QStringBuilder<A, B>::ConvertTo &&capacity = {});
+ inline constexpr QAnyStringView(QLatin1StringView str) noexcept;
template <typename Container, if_compatible_container<Container> = true>
- constexpr QAnyStringView(const Container &c) noexcept
- : QAnyStringView(std::data(c), lengthHelperContainer(c)) {}
+ constexpr Q_ALWAYS_INLINE QAnyStringView(const Container &c) noexcept
+ : QAnyStringView(std::data(c), QtPrivate::lengthHelperContainer(c)) {}
+
+ template <typename Container, if_convertible_to<QString, Container> = true>
+ constexpr QAnyStringView(Container &&c, QtPrivate::wrapped_t<Container, QString> &&capacity = {})
+ //noexcept(std::is_nothrow_constructible_v<QString, Container>)
+ : QAnyStringView(capacity = std::forward<Container>(c)) {}
+
+ template <typename Container, if_convertible_to<QByteArray, Container> = true>
+ constexpr QAnyStringView(Container &&c, QtPrivate::wrapped_t<Container, QByteArray> &&capacity = {})
+ //noexcept(std::is_nothrow_constructible_v<QByteArray, Container>)
+ : QAnyStringView(capacity = std::forward<Container>(c)) {}
template <typename Char, if_compatible_char<Char> = true>
constexpr QAnyStringView(const Char &c) noexcept
@@ -176,11 +206,11 @@ public:
: QAnyStringView(capacity = QChar::fromUcs4(c)) {}
constexpr QAnyStringView(QStringView v) noexcept
- : QAnyStringView(std::data(v), lengthHelperContainer(v)) {}
+ : QAnyStringView(std::data(v), QtPrivate::lengthHelperContainer(v)) {}
template <bool UseChar8T>
constexpr QAnyStringView(QBasicUtf8StringView<UseChar8T> v) noexcept
- : QAnyStringView(std::data(v), lengthHelperContainer(v)) {}
+ : QAnyStringView(std::data(v), QtPrivate::lengthHelperContainer(v)) {}
template <typename Char, size_t Size, if_compatible_char<Char> = true>
[[nodiscard]] constexpr static QAnyStringView fromArray(const Char (&string)[Size]) noexcept
@@ -190,12 +220,61 @@ public:
template <typename Visitor>
inline constexpr decltype(auto) visit(Visitor &&v) const;
+ [[nodiscard]]
+ constexpr QAnyStringView mid(qsizetype pos, qsizetype n = -1) const
+ {
+ using namespace QtPrivate;
+ auto result = QContainerImplHelper::mid(size(), &pos, &n);
+ return result == QContainerImplHelper::Null ? QAnyStringView() : sliced(pos, n);
+ }
+ [[nodiscard]]
+ constexpr QAnyStringView left(qsizetype n) const
+ {
+ if (size_t(n) >= size_t(size()))
+ n = size();
+ return sliced(0, n);
+ }
+ [[nodiscard]]
+ constexpr QAnyStringView right(qsizetype n) const
+ {
+ if (size_t(n) >= size_t(size()))
+ n = size();
+ return sliced(size() - n, n);
+ }
+
+ [[nodiscard]] constexpr QAnyStringView sliced(qsizetype pos) const
+ { verify(pos, 0); auto r = *this; r.advanceData(pos); r.setSize(size() - pos); return r; }
+ [[nodiscard]] constexpr QAnyStringView sliced(qsizetype pos, qsizetype n) const
+ { verify(pos, n); auto r = *this; r.advanceData(pos); r.setSize(n); return r; }
+ [[nodiscard]] constexpr QAnyStringView first(qsizetype n) const
+ { verify(0, n); return sliced(0, n); }
+ [[nodiscard]] constexpr QAnyStringView last(qsizetype n) const
+ { verify(0, n); return sliced(size() - n, n); }
+ [[nodiscard]] constexpr QAnyStringView chopped(qsizetype n) const
+ { verify(0, n); return sliced(0, size() - n); }
+
+ constexpr void truncate(qsizetype n)
+ { verify(0, n); setSize(n); }
+ constexpr void chop(qsizetype n)
+ { verify(0, n); setSize(size() - n); }
+
+
[[nodiscard]] inline QString toString() const; // defined in qstring.h
- [[nodiscard]] constexpr qsizetype size() const noexcept { return qsizetype(m_size & SizeMask); }
+ [[nodiscard]] constexpr qsizetype size() const noexcept
+ { return qsizetype((m_size >> SizeShift) & SizeMask); }
[[nodiscard]] constexpr const void *data() const noexcept { return m_data; }
[[nodiscard]] Q_CORE_EXPORT static int compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+ [[nodiscard]] Q_CORE_EXPORT static bool equal(QAnyStringView lhs, QAnyStringView rhs) noexcept;
+
+ static constexpr inline bool detects_US_ASCII_at_compile_time =
+#ifdef QT_SUPPORTS_IS_CONSTANT_EVALUATED
+ true
+#else
+ false
+#endif
+ ;
//
// STL compatibility API:
@@ -211,35 +290,24 @@ public:
//
[[nodiscard]] constexpr bool isNull() const noexcept { return !m_data; }
[[nodiscard]] constexpr bool isEmpty() const noexcept { return empty(); }
-#if QT_DEPRECATED_SINCE(6, 0)
- [[nodiscard]]
- Q_DECL_DEPRECATED_X("Use size() and port callers to qsizetype.")
- constexpr int length() const /* not nothrow! */
- { return Q_ASSERT(int(size()) == size()), int(size()); }
-#endif
+ [[nodiscard]] constexpr qsizetype length() const noexcept
+ { return size(); }
+
private:
- // TODO: Optimize by inverting and storing the flags in the low bits and
- // the size in the high.
- static_assert(std::is_same_v<std::size_t, size_t>);
- static_assert(sizeof(size_t) == sizeof(qsizetype));
- static constexpr size_t SizeMask = (std::numeric_limits<size_t>::max)() / 4;
- static constexpr size_t Latin1Flag = SizeMask + 1;
- static constexpr size_t TwoByteCodePointFlag = Latin1Flag << 1;
- static constexpr size_t TypeMask = (std::numeric_limits<size_t>::max)() & ~SizeMask;
- static_assert(TypeMask == (Latin1Flag|TwoByteCodePointFlag));
- // HI HI LO LO ...
- // 0 0 SZ SZ Utf8
- // 0 1 SZ SZ Latin1
- // 1 0 SZ SZ Utf16
- // 1 1 SZ SZ Unused
- // ^ ^ latin1
- // | sizeof code-point == 2
- enum Tag : size_t {
- Utf8 = 0,
- Latin1 = Latin1Flag,
- Utf16 = TwoByteCodePointFlag,
- Unused = TypeMask,
- };
+ friend bool comparesEqual(const QAnyStringView &lhs, const QAnyStringView &rhs) noexcept
+ { return QAnyStringView::equal(lhs, rhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QAnyStringView &lhs, const QAnyStringView &rhs) noexcept
+ {
+ const int res = QAnyStringView::compare(lhs, rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QAnyStringView)
+
+#ifndef QT_NO_DEBUG_STREAM
+ Q_CORE_EXPORT friend QDebug operator<<(QDebug d, QAnyStringView s);
+#endif
+
[[nodiscard]] constexpr Tag tag() const noexcept { return Tag{m_size & TypeMask}; }
[[nodiscard]] constexpr bool isUtf16() const noexcept { return tag() == Tag::Utf16; }
[[nodiscard]] constexpr bool isUtf8() const noexcept { return tag() == Tag::Utf8; }
@@ -248,9 +316,13 @@ private:
{ return Q_ASSERT(isUtf16()), QStringView{m_data_utf16, size()}; }
[[nodiscard]] constexpr q_no_char8_t::QUtf8StringView asUtf8StringView() const
{ return Q_ASSERT(isUtf8()), q_no_char8_t::QUtf8StringView{m_data_utf8, size()}; }
- [[nodiscard]] inline constexpr QLatin1String asLatin1StringView() const;
+ [[nodiscard]] inline constexpr QLatin1StringView asLatin1StringView() const;
[[nodiscard]] constexpr size_t charSize() const noexcept { return isUtf16() ? 2 : 1; }
- Q_ALWAYS_INLINE constexpr void verify(qsizetype pos, qsizetype n = 0) const
+ constexpr void setSize(qsizetype sz) noexcept { m_size = size_t(sz) | tag(); }
+ constexpr void advanceData(qsizetype delta) noexcept
+ { m_data_utf8 += delta * charSize(); }
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos = 0,
+ [[maybe_unused]] qsizetype n = 1) const
{
Q_ASSERT(pos >= 0);
Q_ASSERT(pos <= size());
@@ -263,6 +335,7 @@ private:
const char16_t *m_data_utf16;
};
size_t m_size;
+ friend class ::tst_QAnyStringView;
};
Q_DECLARE_TYPEINFO(QAnyStringView, Q_PRIMITIVE_TYPE);
@@ -271,27 +344,7 @@ template <typename QStringLike, std::enable_if_t<std::disjunction_v<
std::is_same<QStringLike, QByteArray>
>, bool> = true>
[[nodiscard]] inline QAnyStringView qToAnyStringViewIgnoringNull(const QStringLike &s) noexcept
-{ return QAnyStringView(s.data(), s.size()); }
-
-
-#define Q_ANY_SV_MAKE_RELOP(op) \
- [[nodiscard]] Q_ALWAYS_INLINE auto operator op (QAnyStringView lhs, QAnyStringView rhs) noexcept \
- { return QAnyStringView::compare(lhs, rhs) op 0; } \
- /* end */
-
-Q_ANY_SV_MAKE_RELOP(==) // size() shortcut doesn't apply for UTF-8 vs. {L1, UTF-16}
-Q_ANY_SV_MAKE_RELOP(!=)
-
-#ifdef __cpp_impl_three_way_comparison
-Q_ANY_SV_MAKE_RELOP(<=>)
-#else
-Q_ANY_SV_MAKE_RELOP(<=)
-Q_ANY_SV_MAKE_RELOP(>=)
-Q_ANY_SV_MAKE_RELOP(<)
-Q_ANY_SV_MAKE_RELOP(>)
-#endif
-
-#undef Q_ANY_SV_MAKE_RELOP
+{ return QAnyStringView(s.begin(), s.size()); }
QT_END_NAMESPACE
diff --git a/src/corelib/text/qanystringview.qdoc b/src/corelib/text/qanystringview.qdoc
deleted file mode 100644
index 31b29fd7a7..0000000000
--- a/src/corelib/text/qanystringview.qdoc
+++ /dev/null
@@ -1,425 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \class QAnyStringView
- \inmodule QtCore
- \since 6.0
- \brief The QAnyStringView class provides a unified view on Latin-1, UTF-8,
- or UTF-16 strings with a read-only subset of the QString API.
- \reentrant
- \ingroup tools
- \ingroup string-processing
-
- A QAnyStringView references a contiguous portion of a string it does
- not own. It acts as an interface type to all kinds of strings,
- without the need to construct a QString first.
-
- Unlike QStringView and QUtf8StringView, QAnyStringView can hold
- strings of any of the following encodings: UTF-8, UTF-16, and
- Latin-1. The latter is supported to keep old source working
- efficiently. It is expected that by Qt 7, the Latin-1 support will
- be removed.
-
- The string may be represented as an array (or an array-compatible
- data-structure such as QString, std::basic_string, etc.) of \c
- char, \c char8_t, QChar, \c ushort, \c char16_t or (on platforms,
- such as Windows, where it is a 16-bit type) \c wchar_t.
-
- QAnyStringView is designed as an interface type; its main use-case
- is as a function parameter type. When QAnyStringViews are used as
- automatic variables or data members, care must be taken to ensure
- that the referenced string data (for example, owned by a QString)
- outlives the QAnyStringView on all code paths, lest the string
- view ends up referencing deleted data.
-
- When used as an interface type, QAnyStringView allows a single
- function to accept a wide variety of string data sources. One
- function accepting QAnyStringView thus replaces five function
- overloads (taking QString, \c{(const QChar*, int)},
- QUtf8StringView, QLatin1String (but see above), and QChar), while
- at the same time enabling even more string data sources to be
- passed to the function, such as \c{u8"Hello World"}, a \c char8_t
- string literal.
-
- Like elsewhere in Qt, QAnyStringView assumes \c char data is encoded
- in UTF-8, unless it is presented as a QLatin1String.
-
- QAnyStringViews should be passed by value, not by reference-to-const:
- \snippet code/src_corelib_text_qanystringview.cpp 0
-
- QAnyStringView can also be used as the return value of a function,
- but this is not recommended. QUtf8StringView or QStringView are
- better suited as function return values. If you call a function
- returning QAnyStringView, take extra care to not keep the
- QAnyStringView around longer than the function promises to keep
- the referenced string data alive. If in doubt, obtain a strong
- reference to the data by calling toString() to convert the
- QAnyStringView into a QString.
-
- QAnyStringView is a \e{Literal Type}.
-
- \section Compatible Character Types
-
- QAnyStringView accepts strings over a variety of character types:
-
- \list
- \li \c char (both signed and unsigned)
- \li \c char8_t (C++20 only)
- \li \c char16_t
- \li \c wchar_t (where it's a 16-bit type, e.g. Windows)
- \li \c ushort
- \li \c QChar
- \endlist
-
- The 8-bit character types are interpreted as UTF-8 data (except when
- presented as a QLatin1String) while the 16-bit character types are
- interpreted as UTF-16 data in host byte order (the same as QString).
-
- \section Sizes and Sub-Strings
-
- All sizes and positions in QAnyStringView functions are in the
- encoding's code points (that is, UTF-16 surrogate pairs count as
- two for the purposes of these functions, the same as in QString,
- and UTF-8 multibyte sequences count as two, three or four,
- depending on their length).
-
- \sa QUtf8StringView, QStringView
-*/
-
-/*!
- \typedef QStringView::difference_type
-
- Alias for \c{std::ptrdiff_t}. Provided for compatibility with the STL.
-*/
-
-/*!
- \typedef QStringView::size_type
-
- Alias for qsizetype. Provided for compatibility with the STL.
-*/
-
-/*!
- \fn QAnyStringView::QAnyStringView()
-
- Constructs a null string view.
-
- \sa isNull()
-*/
-
-/*!
- \fn QAnyStringView::QAnyStringView(std::nullptr_t)
-
- Constructs a null string view.
-
- \sa isNull()
-*/
-
-/*!
- \fn template <typename Char> QAnyStringView::QAnyStringView(const Char *str, qsizetype len)
-
- Constructs a string view on \a str with length \a len.
-
- The range \c{[str,len)} must remain valid for the lifetime of this string view object.
-
- Passing \nullptr as \a str is safe if \a len is 0, too, and results in a null string view.
-
- The behavior is undefined if \a len is negative or, when positive, if \a str is \nullptr.
-
- This constructor only participates in overload resolution if \c Char is a compatible
- character type.
-
- \sa isNull(), {Compatible Character Types}
-*/
-
-/*!
- \fn template <typename Char> QAnyStringView::QAnyStringView(const Char *first, const Char *last)
-
- Constructs a string view on \a first with length (\a last - \a first).
-
- The range \c{[first,last)} must remain valid for the lifetime of
- this string view object.
-
- Passing \c \nullptr as \a first is safe if \a last is \nullptr, too,
- and results in a null string view.
-
- The behavior is undefined if \a last precedes \a first, or \a first
- is \nullptr and \a last is not.
-
- This constructor only participates in overload resolution if \c Char
- is a compatible character type.
-
- \sa isNull(), {Compatible Character Types}
-*/
-
-/*!
- \fn template <typename Char> QAnyStringView::QAnyStringView(const Char *str)
-
- Constructs a string view on \a str. The length is determined
- by scanning for the first \c{Char(0)}.
-
- \a str must remain valid for the lifetime of this string view object.
-
- Passing \nullptr as \a str is safe and results in a null string view.
-
- This constructor only participates in overload resolution if \a
- str is not an array and if \c Char is a compatible character
- type.
-
- \sa isNull(), {Compatible Character Types}
-*/
-
-/*!
- \fn template <typename Char, size_t N> QAnyStringView::QAnyStringView(const Char (&string)[N])
-
- Constructs a string view on the character string literal \a string.
- The view covers the array until the first \c{Char(0)} is encountered,
- or \c N, whichever comes first.
- If you need the full array, use fromArray() instead.
-
- \a string must remain valid for the lifetime of this string view
- object.
-
- This constructor only participates in overload resolution if \a
- string is an actual array and \c Char is a compatible character
- type.
-
- \sa {Compatible Character Types}
-*/
-
-/*!
- \fn QAnyStringView::QAnyStringView(const QString &str)
-
- Constructs a string view on \a str.
-
- \c{str.data()} must remain valid for the lifetime of this string view object.
-
- The string view will be null if and only if \c{str.isNull()}.
-*/
-
-/*!
- \fn QAnyStringView::QAnyStringView(const QByteArray &str)
-
- Constructs a string view on \a str. The data in \a str is interpreted as UTF-8.
-
- \c{str.data()} must remain valid for the lifetime of this string view object.
-
- The string view will be null if and only if \c{str.isNull()}.
-*/
-
-/*!
- \fn template <typename StdBasicString> QAnyStringView::QAnyStringView(const StdBasicString &str)
-
- Constructs a string view on \a str. The length is taken from \c{str.size()}.
-
- \c{str.data()} must remain valid for the lifetime of this string view object.
-
- This constructor only participates in overload resolution if \c StdBasicString is an
- instantiation of \c std::basic_string with a compatible character type.
-
- The string view will be empty if and only if \c{str.empty()}. It is unspecified
- whether this constructor can result in a null string view (\c{str.data()} would
- have to return \nullptr for this).
-
- \sa isNull(), isEmpty(), {Compatible Character Types}
-*/
-
-/*!
- \fn template <typename Char, size_t Size> static QAnyStringView fromArray(const Char (&string)[Size]) noexcept
-
- Constructs a string view on the full character string literal \a string,
- including any trailing \c{Char(0)}. If you don't want the
- null-terminator included in the view then you can use the constructor
- overload taking a pointer and a size:
-
- \snippet code/src_corelib_text_qanystringview.cpp 2
-
- Alternatively you can use the constructor overload taking an
- array literal which will create a view up to, but not including,
- the first null-terminator in the data.
-
- \a string must remain valid for the lifetime of this string view
- object.
-
- This function will work with any array literal if \c Char is a
- compatible character type.
-*/
-
-/*!
- \fn QString QAnyStringView::toString() const
-
- Returns a deep copy of this string view's data as a QString.
-
- The return value will be a null QString if and only if this string view is null.
-*/
-
-/*!
- \fn const void *QStringView::data() const
-
- Returns a const pointer to the first character in the string.
-
- \note The character array represented by the return value is \e not null-terminated.
-
- \sa size_bytes()
-*/
-
-/*!
- \fn bool QAnyStringView::empty() const
-
- Returns whether this string view is empty - that is, whether \c{size() == 0}.
-
- This function is provided for STL compatibility.
-
- \sa isEmpty(), isNull(), size()
-*/
-
-/*!
- \fn bool QAnyStringView::isEmpty() const
-
- Returns whether this string view is empty - that is, whether \c{size() == 0}.
-
- This function is provided for compatibility with other Qt containers.
-
- \sa empty(), isNull(), size()
-*/
-
-/*!
- \fn bool QAnyStringView::isNull() const
-
- Returns whether this string view is null - that is, whether \c{data() == nullptr}.
-
- This functions is provided for compatibility with other Qt containers.
-
- \sa empty(), isEmpty(), size()
-*/
-
-/*!
- \fn qsizetype QAnyStringView::size() const
-
- Returns the size of this string view, in the encoding's code points.
-
- \sa empty(), isEmpty(), isNull(), size_bytes(), {Sizes and Sub-Strings}
-*/
-
-/*!
- \fn QAnyStringView::size_bytes() const
-
- Returns the size of this string view, but in bytes, not code-points.
-
- You can use this function together with data() for hashing or serialization.
-
- This function is provided for STL compatibility.
-
- \sa size(), data()
-*/
-
-/*!
- \fn int QStringView::length() const
- \obsolete
- Use size() instead, and port callers to qsizetype.
-
- Same as size(), except that it returns the result as an \c int.
-
- This function is provided for compatibility with other Qt containers.
-
- \warning QAnyStringView can represent strings with more than 2\sup{31} characters.
- Calling this function on a string view for which size() returns a value greater
- than \c{INT_MAX} constitutes undefined behavior.
-
- \sa size()
-*/
-
-/*!
- \fn QChar QAnyStringView::front() const
-
- Returns the first character in the string.
-
- This function is provided for STL compatibility.
-
- \warning Calling this function on an empty string view constitutes
- undefined behavior.
-
- \sa back(), {Sizes and Sub-Strings}
-*/
-
-/*!
- \fn QChar QAnyStringView::back() const
-
- Returns the last character in the string.
-
- This function is provided for STL compatibility.
-
- \warning Calling this function on an empty string view constitutes
- undefined behavior.
-
- \sa front(), {Sizes and Sub-Strings}
-*/
-
-/*!
- \fn QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs)
-
- Returns an integer that compares to zero as \a lhs compares to \a rhs.
-
- If \a cs is Qt::CaseSensitive (the default), the comparison is case sensitive;
- otherwise the comparison is case-insensitive.
-
- \sa operator==(), operator<(), operator>()
-*/
-
-/*!
- \fn template <typename QStringLike> qToAnyStringViewIgnoringNull(const QStringLike &s);
- \since 6.0
- \internal
-
- Convert \a s to a QAnyStringView ignoring \c{s.isNull()}.
-
- Returns a string-view that references \a{s}'s data, but is never null.
-
- This is a faster way to convert a QString or QByteArray to a QAnyStringView,
- if null QStrings or QByteArrays can legitimately be treated as empty ones.
-
- \sa QString::isNull(), QAnyStringView
-*/
-
-/*!
- \fn QAnyStringView::toWCharArray(wchar_t *array) const
-
- Transcribes this string into the given \a array.
-
- The caller is responsible for ensuring \a array is large enough to hold the
- \c wchar_t encoding of this string (allocating the array with space for size()
- elements is always sufficient). The array is encoded in UTF-16 on
- platforms where \c wchar_t is 2 bytes wide (e.g. Windows); otherwise (Unix
- systems), \c wchar_t is assumed to be 4 bytes wide and the data is written
- in UCS-4.
-
- \note This function writes no null terminator to the end of \a array.
-
- Returns the number of \c wchar_t entries written to \a array.
-
- \sa QString::toWCharArray()
-*/
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index 46902bdec8..e6387e4bed 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -1,43 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Copyright (C) 2019 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// Copyright (C) 2019 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qbytearray.h"
#include "qbytearraymatcher.h"
@@ -50,30 +14,36 @@
#include "private/qsimd_p.h"
#include "qstringalgorithms_p.h"
#include "qscopedpointer.h"
-#include "qbytearray_p.h"
+#include "qstringconverter_p.h"
#include <qdatastream.h>
#include <qmath.h>
+#if defined(Q_OS_WASM)
+#include "private/qstdweb_p.h"
+#endif
#ifndef QT_NO_COMPRESS
#include <zconf.h>
#include <zlib.h>
+#include <qxpfunctional.h>
#endif
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
-#define IS_RAW_DATA(d) ((d)->flags() & QArrayData::RawDataType)
+#include <algorithm>
-QT_BEGIN_NAMESPACE
+#ifdef Q_OS_WIN
+# if !defined(QT_BOOTSTRAPPED) && (defined(QT_NO_CAST_FROM_ASCII) || defined(QT_NO_CAST_FROM_BYTEARRAY))
+// MSVC requires this, but let's apply it to MinGW compilers too, just in case
+# error "This file cannot be compiled with QT_NO_CAST_{TO,FROM}_ASCII, " \
+ "otherwise some QByteArray functions will not get exported."
+# endif
+#endif
-template <typename T, typename Cmp = std::less<>>
-static constexpr bool points_into_range(const T *p, const T *b, const T *e, Cmp less = {}) noexcept
-{
- return !less(p, b) && less(p, e);
-}
+QT_BEGIN_NAMESPACE
-const char QByteArray::_empty = '\0';
+Q_CONSTINIT const char QByteArray::_empty = '\0';
// ASCII case system, used by QByteArray::to{Upper,Lower}() and qstr(n)icmp():
static constexpr inline uchar asciiUpper(uchar c)
@@ -149,31 +119,30 @@ char *qstrcpy(char *dst, const char *src)
A safe \c strncpy() function.
Copies at most \a len bytes from \a src (stopping at \a len or the
- terminating '\\0' whichever comes first) into \a dst and returns a
- pointer to \a dst. Guarantees that \a dst is '\\0'-terminated. If
- \a src or \a dst is \nullptr, returns \nullptr immediately.
+ terminating '\\0' whichever comes first) into \a dst. Guarantees that \a
+ dst is '\\0'-terminated, except when \a dst is \nullptr or \a len is 0. If
+ \a src is \nullptr, returns \nullptr, otherwise returns \a dst.
This function assumes that \a dst is at least \a len characters
long.
\note If \a dst and \a src overlap, the behavior is undefined.
+ \note Unlike strncpy(), this function does \e not write '\\0' to all \a
+ len bytes of \a dst, but stops after the terminating '\\0'. In this sense,
+ it's similar to C11's strncpy_s().
+
\sa qstrcpy()
*/
char *qstrncpy(char *dst, const char *src, size_t len)
{
- if (!src || !dst)
- return nullptr;
- if (len > 0) {
-#ifdef Q_CC_MSVC
- strncpy_s(dst, len, src, len - 1);
-#else
- strncpy(dst, src, len);
-#endif
- dst[len-1] = '\0';
+ if (dst && len > 0) {
+ *dst = '\0';
+ if (src)
+ std::strncat(dst, src, len - 1);
}
- return dst;
+ return src ? dst : nullptr;
}
/*! \fn size_t qstrlen(const char *str)
@@ -212,7 +181,8 @@ char *qstrncpy(char *dst, const char *src, size_t len)
\nullptr, it is treated as less than the other (even if the other is an
empty string).
- \sa qstrncmp(), qstricmp(), qstrnicmp(), {Character Case}, QByteArray::compare()
+ \sa qstrncmp(), qstricmp(), qstrnicmp(), {Character Case},
+ QByteArray::compare()
*/
int qstrcmp(const char *str1, const char *str2)
{
@@ -236,7 +206,8 @@ int qstrcmp(const char *str1, const char *str2)
\nullptr, it is treated as less than the other (even if the other is an
empty string or \a len is 0).
- \sa qstrcmp(), qstricmp(), qstrnicmp(), {Character Case}, QByteArray::compare()
+ \sa qstrcmp(), qstricmp(), qstrnicmp(), {Character Case},
+ QByteArray::compare()
*/
/*! \relates QByteArray
@@ -254,7 +225,8 @@ int qstrcmp(const char *str1, const char *str2)
\nullptr, it is treated as less than the other (even if the other is an
empty string).
- \sa qstrcmp(), qstrncmp(), qstrnicmp(), {Character Case}, QByteArray::compare()
+ \sa qstrcmp(), qstrncmp(), qstrnicmp(), {Character Case},
+ QByteArray::compare()
*/
int qstricmp(const char *str1, const char *str2)
@@ -272,7 +244,7 @@ int qstricmp(const char *str1, const char *str2)
max += offset;
do {
uchar c = s1[offset];
- if (int res = asciiLower(c) - asciiLower(s2[offset]))
+ if (int res = QtMiscUtils::caseCompareAscii(c, s2[offset]))
return res;
if (!c)
return 0;
@@ -298,7 +270,7 @@ int qstricmp(const char *str1, const char *str2)
__m128i a = _mm_loadu_si128(reinterpret_cast<const __m128i *>(s1 + offset));
__m128i b = _mm_loadu_si128(reinterpret_cast<const __m128i *>(s2 + offset));
- // compare the two against each oher
+ // compare the two against each other
__m128i cmp = _mm_cmpeq_epi8(a, b);
// find NUL terminators too
@@ -311,7 +283,7 @@ int qstricmp(const char *str1, const char *str2)
// yes, find out where
uint start = qCountTrailingZeroBits(mask);
uint end = sizeof(mask) * 8 - qCountLeadingZeroBits(mask);
- Q_ASSUME(end >= start);
+ Q_ASSERT(end >= start);
offset += start;
n = end - start;
break;
@@ -343,7 +315,8 @@ int qstricmp(const char *str1, const char *str2)
\nullptr, it is treated as less than the other (even if the other is an
empty string or \a len is 0).
- \sa qstrcmp(), qstrncmp(), qstricmp(), {Character Case}, QByteArray::compare()
+ \sa qstrcmp(), qstrncmp(), qstricmp(), {Character Case},
+ QByteArray::compare()
*/
int qstrnicmp(const char *str1, const char *str2, size_t len)
@@ -354,7 +327,7 @@ int qstrnicmp(const char *str1, const char *str2, size_t len)
return s1 ? 1 : (s2 ? -1 : 0);
for (; len--; ++s1, ++s2) {
const uchar c = *s1;
- if (int res = asciiLower(c) - asciiLower(*s2))
+ if (int res = QtMiscUtils::caseCompareAscii(c, *s2))
return res;
if (!c) // strings are equal
break;
@@ -395,7 +368,7 @@ int qstrnicmp(const char *str1, qsizetype len1, const char *str2, qsizetype len2
if (!c)
return 1;
- if (int res = asciiLower(s1[i]) - asciiLower(c))
+ if (int res = QtMiscUtils::caseCompareAscii(s1[i], c))
return res;
}
return s2[i] ? -1 : 0;
@@ -403,7 +376,7 @@ int qstrnicmp(const char *str1, qsizetype len1, const char *str2, qsizetype len2
// not null-terminated
const qsizetype len = qMin(len1, len2);
for (qsizetype i = 0; i < len; ++i) {
- if (int res = asciiLower(s1[i]) - asciiLower(s2[i]))
+ if (int res = QtMiscUtils::caseCompareAscii(s1[i], s2[i]))
return res;
}
if (len1 == len2)
@@ -428,6 +401,14 @@ int QtPrivate::compareMemory(QByteArrayView lhs, QByteArrayView rhs)
return lhs.size() == rhs.size() ? 0 : lhs.size() > rhs.size() ? 1 : -1;
}
+/*!
+ \internal
+*/
+bool QtPrivate::isValidUtf8(QByteArrayView s) noexcept
+{
+ return QUtf8::isValidUtf8(s).isValidUtf8;
+}
+
// the CRC table below is created by the following piece of code
#if 0
static void createCRC16Table() // build CRC16 lookup table
@@ -532,10 +513,12 @@ quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard)
The default value is -1, which specifies zlib's default
compression.
- \sa qUncompress()
+ \sa qUncompress(const QByteArray &data)
*/
-/*! \relates QByteArray
+/*!
+ \fn QByteArray qCompress(const uchar* data, qsizetype nbytes, int compressionLevel)
+ \relates QByteArray
\overload
@@ -544,44 +527,196 @@ quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard)
*/
#ifndef QT_NO_COMPRESS
+using CompressSizeHint_t = quint32; // 32-bit BE, historically
+
+enum class ZLibOp : bool { Compression, Decompression };
+
+Q_DECL_COLD_FUNCTION
+static const char *zlibOpAsString(ZLibOp op)
+{
+ switch (op) {
+ case ZLibOp::Compression: return "qCompress";
+ case ZLibOp::Decompression: return "qUncompress";
+ }
+ Q_UNREACHABLE_RETURN(nullptr);
+}
+
+Q_DECL_COLD_FUNCTION
+static QByteArray zlibError(ZLibOp op, const char *what)
+{
+ qWarning("%s: %s", zlibOpAsString(op), what);
+ return QByteArray();
+}
+
+Q_DECL_COLD_FUNCTION
+static QByteArray dataIsNull(ZLibOp op)
+{
+ return zlibError(op, "Data is null");
+}
+
+Q_DECL_COLD_FUNCTION
+static QByteArray lengthIsNegative(ZLibOp op)
+{
+ return zlibError(op, "Input length is negative");
+}
+
+Q_DECL_COLD_FUNCTION
+static QByteArray tooMuchData(ZLibOp op)
+{
+ return zlibError(op, "Not enough memory");
+}
+
+Q_DECL_COLD_FUNCTION
+static QByteArray invalidCompressedData()
+{
+ return zlibError(ZLibOp::Decompression, "Input data is corrupted");
+}
+
+Q_DECL_COLD_FUNCTION
+static QByteArray unexpectedZlibError(ZLibOp op, int err, const char *msg)
+{
+ qWarning("%s unexpected zlib error: %s (%d)",
+ zlibOpAsString(op),
+ msg ? msg : "",
+ err);
+ return QByteArray();
+}
+
+static QByteArray xxflate(ZLibOp op, QArrayDataPointer<char> out, QByteArrayView input,
+ qxp::function_ref<int(z_stream *) const> init,
+ qxp::function_ref<int(z_stream *, size_t) const> processChunk,
+ qxp::function_ref<void(z_stream *) const> deinit)
+{
+ if (out.data() == nullptr) // allocation failed
+ return tooMuchData(op);
+ qsizetype capacity = out.allocatedCapacity();
+
+ const auto initalSize = out.size;
+
+ z_stream zs = {};
+ zs.next_in = reinterpret_cast<uchar *>(const_cast<char *>(input.data())); // 1980s C API...
+ if (const int err = init(&zs); err != Z_OK)
+ return unexpectedZlibError(op, err, zs.msg);
+ const auto sg = qScopeGuard([&] { deinit(&zs); });
+
+ using ZlibChunkSize_t = decltype(zs.avail_in);
+ static_assert(!std::is_signed_v<ZlibChunkSize_t>);
+ static_assert(std::is_same_v<ZlibChunkSize_t, decltype(zs.avail_out)>);
+ constexpr auto MaxChunkSize = std::numeric_limits<ZlibChunkSize_t>::max();
+ [[maybe_unused]]
+ constexpr auto MaxStatisticsSize = std::numeric_limits<decltype(zs.total_out)>::max();
+
+ size_t inputLeft = size_t(input.size());
+
+ int res;
+ do {
+ Q_ASSERT(out.freeSpaceAtBegin() == 0); // ensure prepend optimization stays out of the way
+ Q_ASSERT(capacity == out.allocatedCapacity());
+
+ if (zs.avail_out == 0) {
+ Q_ASSERT(size_t(out.size) - initalSize > MaxStatisticsSize || // total_out overflow
+ size_t(out.size) - initalSize == zs.total_out);
+ Q_ASSERT(out.size <= capacity);
+
+ qsizetype avail_out = capacity - out.size;
+ if (avail_out == 0) {
+ out->reallocateAndGrow(QArrayData::GrowsAtEnd, 1); // grow to next natural capacity
+ if (out.data() == nullptr) // reallocation failed
+ return tooMuchData(op);
+ capacity = out.allocatedCapacity();
+ avail_out = capacity - out.size;
+ }
+ zs.next_out = reinterpret_cast<uchar *>(out.data()) + out.size;
+ zs.avail_out = size_t(avail_out) > size_t(MaxChunkSize) ? MaxChunkSize
+ : ZlibChunkSize_t(avail_out);
+ out.size += zs.avail_out;
+
+ Q_ASSERT(zs.avail_out > 0);
+ }
+
+ if (zs.avail_in == 0) {
+ // zs.next_in is kept up-to-date by processChunk(), so nothing to do
+ zs.avail_in = inputLeft > MaxChunkSize ? MaxChunkSize : ZlibChunkSize_t(inputLeft);
+ inputLeft -= zs.avail_in;
+ }
+
+ res = processChunk(&zs, inputLeft);
+ } while (res == Z_OK);
+
+ switch (res) {
+ case Z_STREAM_END:
+ out.size -= zs.avail_out;
+ Q_ASSERT(size_t(out.size) - initalSize > MaxStatisticsSize || // total_out overflow
+ size_t(out.size) - initalSize == zs.total_out);
+ Q_ASSERT(out.size <= out.allocatedCapacity());
+ out.data()[out.size] = '\0';
+ return QByteArray(std::move(out));
+
+ case Z_MEM_ERROR:
+ return tooMuchData(op);
+
+ case Z_BUF_ERROR:
+ Q_UNREACHABLE(); // cannot happen - we supply a buffer that can hold the result,
+ // or else error out early
+
+ case Z_DATA_ERROR: // can only happen on decompression
+ Q_ASSERT(op == ZLibOp::Decompression);
+ return invalidCompressedData();
+
+ default:
+ return unexpectedZlibError(op, res, zs.msg);
+ }
+}
+
QByteArray qCompress(const uchar* data, qsizetype nbytes, int compressionLevel)
{
+ constexpr qsizetype HeaderSize = sizeof(CompressSizeHint_t);
if (nbytes == 0) {
- return QByteArray(4, '\0');
- }
- if (!data) {
- qWarning("qCompress: Data is null");
- return QByteArray();
+ return QByteArray(HeaderSize, '\0');
}
+ if (!data)
+ return dataIsNull(ZLibOp::Compression);
+
+ if (nbytes < 0)
+ return lengthIsNegative(ZLibOp::Compression);
+
if (compressionLevel < -1 || compressionLevel > 9)
compressionLevel = -1;
- ulong len = nbytes + nbytes / 100 + 13;
- QByteArray bazip;
- int res;
- do {
- bazip.resize(len + 4);
- res = ::compress2((uchar*)bazip.data()+4, &len, data, nbytes, compressionLevel);
-
- switch (res) {
- case Z_OK:
- bazip.resize(len + 4);
- bazip[0] = (nbytes & 0xff000000) >> 24;
- bazip[1] = (nbytes & 0x00ff0000) >> 16;
- bazip[2] = (nbytes & 0x0000ff00) >> 8;
- bazip[3] = (nbytes & 0x000000ff);
- break;
- case Z_MEM_ERROR:
- qWarning("qCompress: Z_MEM_ERROR: Not enough memory");
- bazip.resize(0);
- break;
- case Z_BUF_ERROR:
- len *= 2;
- break;
+ QArrayDataPointer out = [&] {
+ constexpr qsizetype SingleAllocLimit = 256 * 1024; // the maximum size for which we use
+ // zlib's compressBound() to guarantee
+ // the output buffer size is sufficient
+ // to hold result
+ qsizetype capacity = HeaderSize;
+ if (nbytes < SingleAllocLimit) {
+ // use maximum size
+ capacity += compressBound(uLong(nbytes)); // cannot overflow (both times)!
+ return QArrayDataPointer<char>(capacity);
}
- } while (res == Z_BUF_ERROR);
- return bazip;
+ // for larger buffers, assume it compresses optimally, and
+ // grow geometrically from there:
+ constexpr qsizetype MaxCompressionFactor = 1024; // max theoretical factor is 1032
+ // cf. http://www.zlib.org/zlib_tech.html,
+ // but use a nearby power-of-two (faster)
+ capacity += std::max(qsizetype(compressBound(uLong(SingleAllocLimit))),
+ nbytes / MaxCompressionFactor);
+ return QArrayDataPointer<char>(capacity, 0, QArrayData::Grow);
+ }();
+
+ if (out.data() == nullptr) // allocation failed
+ return tooMuchData(ZLibOp::Compression);
+
+ qToBigEndian(qt_saturate<CompressSizeHint_t>(nbytes), out.data());
+ out.size = HeaderSize;
+
+ return xxflate(ZLibOp::Compression, std::move(out), {data, nbytes},
+ [=] (z_stream *zs) { return deflateInit(zs, compressionLevel); },
+ [] (z_stream *zs, size_t inputLeft) {
+ return deflate(zs, inputLeft ? Z_NO_FLUSH : Z_FINISH);
+ },
+ [] (z_stream *zs) { deflateEnd(zs); });
}
#endif
@@ -603,18 +738,21 @@ QByteArray qCompress(const uchar* data, qsizetype nbytes, int compressionLevel)
data that was compressed using zlib, you first need to prepend a four
byte header to the byte array containing the data. The header must
contain the expected length (in bytes) of the uncompressed data,
- expressed as an unsigned, big-endian, 32-bit integer.
+ expressed as an unsigned, big-endian, 32-bit integer. This number is
+ just a hint for the initial size of the output buffer size,
+ though. If the indicated size is too small to hold the result, the
+ output buffer size will still be increased until either the output
+ fits or the system runs out of memory. So, despite the 32-bit
+ header, this function, on 64-bit platforms, can produce more than
+ 4GiB of output.
+
+ \note In Qt versions prior to Qt 6.5, more than 2GiB of data
+ worked unreliably; in Qt versions prior to Qt 6.0, not at all.
\sa qCompress()
*/
#ifndef QT_NO_COMPRESS
-static QByteArray invalidCompressedData()
-{
- qWarning("qUncompress: Input data is corrupted");
- return QByteArray();
-}
-
/*! \relates QByteArray
\overload
@@ -624,64 +762,39 @@ static QByteArray invalidCompressedData()
*/
QByteArray qUncompress(const uchar* data, qsizetype nbytes)
{
- if (!data) {
- qWarning("qUncompress: Data is null");
- return QByteArray();
- }
- if (nbytes <= 4) {
- if (nbytes < 4 || (data[0]!=0 || data[1]!=0 || data[2]!=0 || data[3]!=0))
- qWarning("qUncompress: Input data is corrupted");
- return QByteArray();
- }
- size_t expectedSize = size_t((data[0] << 24) | (data[1] << 16) |
- (data[2] << 8) | (data[3] ));
- size_t len = qMax(expectedSize, 1ul);
- const size_t maxPossibleSize = MaxAllocSize - sizeof(QByteArray::Data);
- if (Q_UNLIKELY(len >= maxPossibleSize)) {
- // QByteArray does not support that huge size anyway.
- return invalidCompressedData();
- }
+ if (!data)
+ return dataIsNull(ZLibOp::Decompression);
- QByteArray::DataPointer d(QByteArray::Data::allocate(len));
- if (Q_UNLIKELY(d.data() == nullptr))
+ if (nbytes < 0)
+ return lengthIsNegative(ZLibOp::Decompression);
+
+ constexpr qsizetype HeaderSize = sizeof(CompressSizeHint_t);
+ if (nbytes < HeaderSize)
return invalidCompressedData();
- forever {
- const auto alloc = len;
- int res = ::uncompress((uchar*)d.data(), reinterpret_cast<uLongf*>(&len),
- data+4, nbytes-4);
-
- switch (res) {
- case Z_OK: {
- Q_ASSERT(len <= alloc);
- Q_UNUSED(alloc);
- d.data()[len] = '\0';
- d.size = len;
- return QByteArray(d);
- }
+ const auto expectedSize = qFromBigEndian<CompressSizeHint_t>(data);
+ if (nbytes == HeaderSize) {
+ if (expectedSize != 0)
+ return invalidCompressedData();
+ return QByteArray();
+ }
- case Z_MEM_ERROR:
- qWarning("qUncompress: Z_MEM_ERROR: Not enough memory");
- return QByteArray();
+ constexpr auto MaxDecompressedSize = size_t(QByteArray::max_size());
+ if constexpr (MaxDecompressedSize < std::numeric_limits<CompressSizeHint_t>::max()) {
+ if (expectedSize > MaxDecompressedSize)
+ return tooMuchData(ZLibOp::Decompression);
+ }
- case Z_BUF_ERROR:
- len *= 2;
- if (Q_UNLIKELY(len >= maxPossibleSize)) {
- // QByteArray does not support that huge size anyway.
- return invalidCompressedData();
- } else {
- // grow the block
- d->reallocate(d->allocatedCapacity()*2, QByteArray::Data::GrowsForward);
- if (Q_UNLIKELY(d.data() == nullptr))
- return invalidCompressedData();
- }
- continue;
+ // expectedSize may be truncated, so always use at least nbytes
+ // (larger by at most 1%, according to zlib docs)
+ qsizetype capacity = std::max(qsizetype(expectedSize), // cannot overflow!
+ nbytes);
- case Z_DATA_ERROR:
- qWarning("qUncompress: Z_DATA_ERROR: Input data is corrupted");
- return QByteArray();
- }
- }
+ QArrayDataPointer<char> d(capacity);
+ return xxflate(ZLibOp::Decompression, std::move(d), {data + HeaderSize, nbytes - HeaderSize},
+ [] (z_stream *zs) { return inflateInit(zs); },
+ [] (z_stream *zs, size_t) { return inflate(zs, Z_NO_FLUSH); },
+ [] (z_stream *zs) { inflateEnd(zs); });
}
#endif
@@ -696,6 +809,14 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
\reentrant
+ \compares strong
+ \compareswith strong {const char *} QByteArrayView
+ \endcompareswith
+ \compareswith strong QChar char16_t QString QStringView QLatin1StringView \
+ QUtf8StringView
+ When comparing with string types, the content is interpreted as utf-8.
+ \endcompareswith
+
QByteArray can be used to store both raw bytes (including '\\0's)
and traditional 8-bit '\\0'-terminated strings. Using QByteArray
is much more convenient than using \c{const char *}. Behind the
@@ -743,7 +864,7 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
at() can be faster than operator[](), because it never causes a
\l{deep copy} to occur.
- To extract many bytes at a time, use left(), right(), or mid().
+ To extract many bytes at a time, use first(), last(), or sliced().
A QByteArray can embed '\\0' bytes. The size() function always
returns the size of the whole array, including embedded '\\0'
@@ -772,16 +893,48 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
\snippet code/src_corelib_text_qbytearray.cpp 3
- The replace() and remove() functions' first two arguments are the
- position from which to start erasing and the number of bytes that
- should be erased.
+ In the above example the replace() function's first two arguments are the
+ position from which to start replacing and the number of bytes that
+ should be replaced.
- When you append() data to a non-empty array, the array will be
- reallocated and the new data copied to it. You can avoid this
- behavior by calling reserve(), which preallocates a certain amount
+ When data-modifying functions increase the size of the array,
+ they may lead to reallocation of memory for the QByteArray object. When
+ this happens, QByteArray expands by more than it immediately needs so as
+ to have space for further expansion without reallocation until the size
+ of the array has greatly increased.
+
+ The insert(), remove() and, when replacing a sub-array with one of
+ different size, replace() functions can be slow (\l{linear time}) for
+ large arrays, because they require moving many bytes in the array by
+ at least one position in memory.
+
+ If you are building a QByteArray gradually and know in advance
+ approximately how many bytes the QByteArray will contain, you
+ can call reserve(), asking QByteArray to preallocate a certain amount
of memory. You can also call capacity() to find out how much
- memory QByteArray actually allocated. Data appended to an empty
- array is not copied.
+ memory the QByteArray actually has allocated.
+
+ Note that using non-const operators and functions can cause
+ QByteArray to do a deep copy of the data, due to \l{implicit sharing}.
+
+ QByteArray provides \l{STL-style iterators} (QByteArray::const_iterator and
+ QByteArray::iterator). In practice, iterators are handy when working with
+ generic algorithms provided by the C++ standard library.
+
+ \note Iterators and references to individual QByteArray elements are subject
+ to stability issues. They are often invalidated when a QByteArray-modifying
+ operation (e.g. insert() or remove()) is called. When stability and
+ iterator-like functionality is required, you should use indexes instead of
+ iterators as they are not tied to QByteArray's internal state and thus do
+ not get invalidated.
+
+ \note Iterators over a QByteArray, and references to individual bytes
+ within one, cannot be relied on to remain valid when any non-const method
+ of the QByteArray is called. Accessing such an iterator or reference after
+ the call to a non-const method leads to undefined behavior. When stability
+ for iterator-like functionality is required, you should use indexes instead
+ of iterators as they are not tied to QByteArray's internal state and thus do
+ not get invalidated.
If you want to find all occurrences of a particular byte or sequence of
bytes in a QByteArray, use indexOf() or lastIndexOf(). The former searches
@@ -823,9 +976,19 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
\section1 Maximum size and out-of-memory conditions
- In case memory allocation fails, QByteArray will throw a \c std::bad_alloc
- exception. Out of memory conditions in the Qt containers are the only case
- where Qt will throw exceptions.
+ The maximum size of QByteArray depends on the architecture. Most 64-bit
+ systems can allocate more than 2 GB of memory, with a typical limit
+ of 2^63 bytes. The actual value also depends on the overhead required for
+ managing the data block. As a result, you can expect the maximum size
+ of 2 GB minus overhead on 32-bit platforms, and 2^63 bytes minus overhead
+ on 64-bit platforms. The number of elements that can be stored in a
+ QByteArray is this maximum size.
+
+ When memory allocation fails, QByteArray throws a \c std::bad_alloc
+ exception if the application is being compiled with exception support.
+ Out of memory conditions in Qt containers are the only case where Qt
+ will throw exceptions. If exceptions are disabled, then running out of
+ memory is undefined behavior.
Note that the operating system may impose further limits on applications
holding a lot of allocated memory, especially large, contiguous blocks.
@@ -848,14 +1011,6 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
such a pointer, without a length, will interpret it as this sequence of
bytes. Such a sequence, by construction, cannot contain a '\\0' byte.
- Take care when passing fixed size C arrays to QByteArray methods that accept
- a QByteArrayView: the length of the data on which the method will operate is
- determined by array size. A \c{char [N]} array will be handled as a view of
- size \c{N-1}, on the expectation that the array is a string literal with a '\\0'
- at index \c{N-1}. For example:
-
- \snippet code/src_corelib_text_qbytearray.cpp 54
-
Other overloads accept a start-pointer and a byte-count; these use the given
number of bytes, following the start address, regardless of whether any of
them happen to be '\\0' bytes. In some cases, where there is no overload
@@ -867,17 +1022,18 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
\section2 Spacing Characters
A frequent requirement is to remove spacing characters from a byte array
- ('\\n', '\\t', ' ', etc.). If you want to remove spacing from both ends of a
- QByteArray, use trimmed(). If you want to also replace each run of spacing
- characters with a single space character within the byte array, use
+ (\c{'\n'}, \c{'\t'}, \c{' '}, etc.). If you want to remove spacing from both
+ ends of a QByteArray, use trimmed(). If you want to also replace each run of
+ spacing characters with a single space character within the byte array, use
simplified(). Only ASCII spacing characters are recognized for these
purposes.
\section2 Number-String Conversions
- Functions that perform conversions between numeric data types and strings
- are performed in the C locale, regardless of the user's locale settings. Use
- QLocale to perform locale-aware conversions between numbers and strings.
+ Functions that perform conversions between numeric data types and string
+ representations are performed in the C locale, regardless of the user's
+ locale settings. Use QLocale to perform locale-aware conversions between
+ numbers and strings.
\section2 Character Case
@@ -885,13 +1041,13 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
comparison is limited to ASCII. Non-ASCII characters are treated as
caseless, since their case depends on encoding. This affects functions that
support a case insensitive option or that change the case of their
- arguments. Functions that this affects include contains(), indexOf(),
- lastIndexOf(), isLower(), isUpper(), toLower() and toUpper().
+ arguments. Functions that this affects include compare(), isLower(),
+ isUpper(), toLower() and toUpper().
This issue does not apply to \l{QString}s since they represent characters
using Unicode.
- \sa QByteArrayView, QString, QBitArray
+ \sa QByteArrayView, QString, QBitArray
*/
/*!
@@ -1003,8 +1159,8 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
/*! \fn QByteArray::reverse_iterator QByteArray::rbegin()
\since 5.6
- Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- byte in the byte-array, in reverse order.
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to
+ the first byte in the byte-array, in reverse order.
\include qbytearray.cpp iterator-invalidation-func-desc
@@ -1019,8 +1175,8 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
/*! \fn QByteArray::const_reverse_iterator QByteArray::crbegin() const
\since 5.6
- Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- byte in the byte-array, in reverse order.
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing
+ to the first byte in the byte-array, in reverse order.
\include qbytearray.cpp iterator-invalidation-func-desc
@@ -1030,8 +1186,8 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
/*! \fn QByteArray::reverse_iterator QByteArray::rend()
\since 5.6
- Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
- the last byte in the byte-array, in reverse order.
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing just
+ after the last byte in the byte-array, in reverse order.
\include qbytearray.cpp iterator-invalidation-func-desc
@@ -1046,8 +1202,8 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
/*! \fn QByteArray::const_reverse_iterator QByteArray::crend() const
\since 5.6
- Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
- past the last byte in the byte-array, in reverse order.
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing
+ just after the last byte in the byte-array, in reverse order.
\include qbytearray.cpp iterator-invalidation-func-desc
@@ -1115,6 +1271,37 @@ QByteArray qUncompress(const uchar* data, qsizetype nbytes)
squeeze().
*/
+/*!
+ \since 6.1
+
+ Removes from the byte array the characters in the half-open range
+ [ \a first , \a last ). Returns an iterator to the character
+ referred to by \a last before the erase.
+*/
+QByteArray::iterator QByteArray::erase(QByteArray::const_iterator first, QByteArray::const_iterator last)
+{
+ const auto start = std::distance(cbegin(), first);
+ const auto len = std::distance(first, last);
+ remove(start, len);
+ return begin() + start;
+}
+
+/*!
+ \fn QByteArray::iterator QByteArray::erase(QByteArray::const_iterator it)
+
+ \overload
+ \since 6.5
+
+ Removes the character denoted by \c it from the byte array.
+ Returns an iterator to the character immediately after the
+ erased character.
+
+ \code
+ QByteArray ba = "abcdefg";
+ auto it = ba.erase(ba.cbegin()); // ba is now "bcdefg" and it points to "b"
+ \endcode
+*/
+
/*! \fn QByteArray::QByteArray(const QByteArray &other)
Constructs a copy of \a other.
@@ -1162,6 +1349,9 @@ QByteArray &QByteArray::operator=(const QByteArray & other) noexcept
\overload
Assigns \a str to this byte array.
+
+ \a str is assumed to point to a null-terminated string, and its length is
+ determined dynamically.
*/
QByteArray &QByteArray::operator=(const char *str)
@@ -1171,13 +1361,7 @@ QByteArray &QByteArray::operator=(const char *str)
} else if (!*str) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- const qsizetype len = qsizetype(strlen(str));
- const auto capacityAtEnd = d->allocatedCapacity() - d.freeSpaceAtBegin();
- if (d->needsDetach() || size_t(len) > capacityAtEnd
- || (len < size() && size_t(len) < (capacityAtEnd >> 1)))
- reallocData(len, d->detachFlags());
- memcpy(d.data(), str, len + 1); // include null terminator
- d.size = len;
+ assign(str);
}
return *this;
}
@@ -1206,7 +1390,7 @@ QByteArray &QByteArray::operator=(const char *str)
you can use the return value of data() and constData() as arguments to
functions that expect '\\0'-terminated strings. If the QByteArray object was
created from a \l{fromRawData()}{raw data} that didn't include the trailing
- '\\0'-termination byte, then QByteArray doesn't add it automaticall unless a
+ '\\0'-termination byte, then QByteArray doesn't add it automatically unless a
\l{deep copy} is created.
Example:
@@ -1215,6 +1399,15 @@ QByteArray &QByteArray::operator=(const char *str)
\sa isEmpty(), resize()
*/
+/*! \fn qsizetype QByteArray::max_size()
+ \since 6.8
+
+ This function is provided for STL compatibility.
+ It returns the maximum number of elements that the byte array can
+ theoretically hold. In practice, the number can be much smaller,
+ limited by the amount of memory available to the system.
+*/
+
/*! \fn bool QByteArray::isEmpty() const
Returns \c true if the byte array has size 0; otherwise returns \c false.
@@ -1247,16 +1440,27 @@ QByteArray &QByteArray::operator=(const char *str)
/*! \fn void QByteArray::reserve(qsizetype size)
- Attempts to allocate memory for at least \a size bytes. If you
- know in advance how large the byte array will be, you can call
+ Attempts to allocate memory for at least \a size bytes.
+
+ If you know in advance how large the byte array will be, you can call
this function, and if you call resize() often you are likely to
- get better performance. If \a size is an underestimate, the worst
- that will happen is that the QByteArray will be a bit slower.
+ get better performance.
+
+ If in doubt about how much space shall be needed, it is usually better to
+ use an upper bound as \a size, or a high estimate of the most likely size,
+ if a strict upper bound would be much bigger than this. If \a size is an
+ underestimate, the array will grow as needed once the reserved size is
+ exceeded, which may lead to a larger allocation than your best overestimate
+ would have and will slow the operation that triggers it.
+
+ \warning reserve() reserves memory but does not change the size of the byte
+ array. Accessing data beyond the end of the byte array is undefined
+ behavior. If you need to access memory beyond the current end of the array,
+ use resize().
The sole purpose of this function is to provide a means of fine
tuning QByteArray's memory usage. In general, you will rarely
- ever need to call this function. If you want to change the size
- of the byte array, call resize().
+ ever need to call this function.
\sa squeeze(), capacity()
*/
@@ -1275,7 +1479,7 @@ QByteArray &QByteArray::operator=(const char *str)
/*! \fn QByteArray::operator const char *() const
\fn QByteArray::operator const void *() const
- \obsolete Use constData() instead.
+ \note Use constData() instead in new code.
Returns a pointer to the data stored in the byte array. The
pointer can be used to access the bytes that compose the array.
@@ -1351,8 +1555,8 @@ QByteArray &QByteArray::operator=(const char *str)
/*! \fn const char *QByteArray::constData() const
- Returns a pointer to the data stored in the byte array. The pointer can be
- used to access the bytes that compose the array. The data is
+ Returns a pointer to the const data stored in the byte array. The pointer
+ can be used to access the bytes that compose the array. The data is
'\\0'-terminated unless the QByteArray object was created from raw data.
\include qbytearray.cpp pointer-invalidation-desc
@@ -1498,7 +1702,7 @@ QByteArray &QByteArray::operator=(const char *str)
Example:
\snippet code/src_corelib_text_qbytearray.cpp 10
- \sa chop(), resize(), left()
+ \sa chop(), resize(), first()
*/
void QByteArray::truncate(qsizetype pos)
{
@@ -1516,7 +1720,7 @@ void QByteArray::truncate(qsizetype pos)
Example:
\snippet code/src_corelib_text_qbytearray.cpp 11
- \sa truncate(), resize(), left()
+ \sa truncate(), resize(), first()
*/
void QByteArray::chop(qsizetype n)
@@ -1617,7 +1821,8 @@ QByteArray::QByteArray(const char *data, qsizetype size)
if (!size) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- d = DataPointer(Data::allocate(size), size);
+ d = DataPointer(size, size);
+ Q_CHECK_PTR(d.data());
memcpy(d.data(), data, size);
d.data()[size] = '\0';
}
@@ -1635,15 +1840,14 @@ QByteArray::QByteArray(qsizetype size, char ch)
if (size <= 0) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- d = DataPointer(Data::allocate(size), size);
+ d = DataPointer(size, size);
+ Q_CHECK_PTR(d.data());
memset(d.data(), ch, size);
d.data()[size] = '\0';
}
}
/*!
- \internal
-
Constructs a byte array of size \a size with uninitialized contents.
*/
@@ -1652,7 +1856,8 @@ QByteArray::QByteArray(qsizetype size, Qt::Initialization)
if (size <= 0) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- d = DataPointer(Data::allocate(size), size);
+ d = DataPointer(size, size);
+ Q_CHECK_PTR(d.data());
d.data()[size] = '\0';
}
}
@@ -1664,10 +1869,13 @@ QByteArray::QByteArray(qsizetype size, Qt::Initialization)
extended to make it \a size bytes with the extra bytes added to
the end. The new bytes are uninitialized.
- If \a size is less than the current size, bytes are removed from
- the end.
+ If \a size is less than the current size, bytes beyond position
+ \a size are excluded from the byte array.
+
+ \note While resize() will grow the capacity if needed, it never shrinks
+ capacity. To shed excess capacity, use squeeze().
- \sa size(), truncate()
+ \sa size(), truncate(), squeeze()
*/
void QByteArray::resize(qsizetype size)
{
@@ -1676,13 +1884,53 @@ void QByteArray::resize(qsizetype size)
const auto capacityAtEnd = capacity() - d.freeSpaceAtBegin();
if (d->needsDetach() || size > capacityAtEnd)
- reallocData(size, d->detachFlags() | Data::GrowsForward);
+ reallocData(size, QArrayData::Grow);
d.size = size;
if (d->allocatedCapacity())
d.data()[size] = 0;
}
/*!
+ \since 6.4
+
+ Sets the size of the byte array to \a newSize bytes.
+
+ If \a newSize is greater than the current size, the byte array is
+ extended to make it \a newSize bytes with the extra bytes added to
+ the end. The new bytes are initialized to \a c.
+
+ If \a newSize is less than the current size, bytes beyond position
+ \a newSize are excluded from the byte array.
+
+ \note While resize() will grow the capacity if needed, it never shrinks
+ capacity. To shed excess capacity, use squeeze().
+
+ \sa size(), truncate(), squeeze()
+*/
+void QByteArray::resize(qsizetype newSize, char c)
+{
+ const auto old = d.size;
+ resize(newSize);
+ if (old < d.size)
+ memset(d.data() + old, c, d.size - old);
+}
+
+/*!
+ \since 6.8
+
+ Resizes the byte array to \a size bytes. If the size of the
+ byte array grows, the new bytes are uninitialized.
+
+ The behavior is identical to \c{resize(size)}.
+
+ \sa resize()
+*/
+void QByteArray::resizeForOverwrite(qsizetype size)
+{
+ resize(size);
+}
+
+/*!
Sets every byte in the byte array to \a ch. If \a size is different from -1
(the default), the byte array is resized to size \a size beforehand.
@@ -1700,42 +1948,42 @@ QByteArray &QByteArray::fill(char ch, qsizetype size)
return *this;
}
-void QByteArray::reallocData(qsizetype alloc, Data::ArrayOptions options)
+void QByteArray::reallocData(qsizetype alloc, QArrayData::AllocationOption option)
{
if (!alloc) {
d = DataPointer::fromRawData(&_empty, 0);
return;
}
- // there's a case of slow reallocate path where we need to memmove the data
- // before a call to ::realloc(), meaning that there's an extra "heavy"
- // operation. just prefer ::malloc() branch in this case
- const bool slowReallocatePath = d.freeSpaceAtBegin() > 0;
+ // don't use reallocate path when reducing capacity and there's free space
+ // at the beginning: might shift data pointer outside of allocated space
+ const bool cannotUseReallocate = d.freeSpaceAtBegin() > 0;
- if (d->needsDetach() || slowReallocatePath) {
- DataPointer dd(Data::allocate(alloc, options), qMin(alloc, d.size));
+ if (d->needsDetach() || cannotUseReallocate) {
+ DataPointer dd(alloc, qMin(alloc, d.size), option);
+ Q_CHECK_PTR(dd.data());
if (dd.size > 0)
::memcpy(dd.data(), d.data(), dd.size);
dd.data()[dd.size] = 0;
d = dd;
} else {
- d->reallocate(alloc, options);
+ d->reallocate(alloc, option);
}
}
-void QByteArray::reallocGrowData(qsizetype alloc, Data::ArrayOptions options)
+void QByteArray::reallocGrowData(qsizetype n)
{
- if (!alloc) // expected to always allocate
- alloc = 1;
+ if (!n) // expected to always allocate
+ n = 1;
if (d->needsDetach()) {
- const auto newSize = qMin(alloc, d.size);
- DataPointer dd(DataPointer::allocateGrow(d, alloc, newSize, options));
- dd->copyAppend(d.data(), d.data() + newSize);
+ DataPointer dd(DataPointer::allocateGrow(d, n, QArrayData::GrowsAtEnd));
+ Q_CHECK_PTR(dd.data());
+ dd->copyAppend(d.data(), d.data() + d.size);
dd.data()[dd.size] = 0;
d = dd;
} else {
- d->reallocate(alloc, options);
+ d->reallocate(d.constAllocatedCapacity() + n, QArrayData::Grow);
}
}
@@ -1745,31 +1993,15 @@ void QByteArray::expand(qsizetype i)
}
/*!
- \internal
- Return a QByteArray that is sure to be '\\0'-terminated.
-
- By default, all QByteArray have an extra NUL at the end,
- guaranteeing that assumption. However, if QByteArray::fromRawData
- is used, then the NUL is there only if the user put it there. We
- can't be sure.
-*/
-QByteArray QByteArray::nulTerminated() const
-{
- // is this fromRawData?
- if (d.isMutable())
- return *this; // no, then we're sure we're zero terminated
-
- QByteArray copy(*this);
- copy.detach();
- return copy;
-}
-
-/*!
\fn QByteArray &QByteArray::prepend(QByteArrayView ba)
Prepends the byte array view \a ba to this byte array and returns a
reference to this byte array.
+ This operation is typically very fast (\l{constant time}), because
+ QByteArray preallocates extra space at the beginning of the data,
+ so it can grow without reallocating the entire array each time.
+
Example:
\snippet code/src_corelib_text_qbytearray.cpp 15
@@ -1784,6 +2016,12 @@ QByteArray QByteArray::nulTerminated() const
Prepends \a ba to this byte array.
*/
+QByteArray &QByteArray::prepend(const QByteArray &ba)
+{
+ if (size() == 0 && ba.size() > d.constAllocatedCapacity() && ba.d.isMutable())
+ return (*this = ba);
+ return prepend(QByteArrayView(ba));
+}
/*!
\fn QByteArray &QByteArray::prepend(const char *str)
@@ -1833,18 +2071,26 @@ QByteArray QByteArray::nulTerminated() const
If the byte array being appended to is not empty, a deep copy of the
data is performed, taking \l{linear time}.
- This operation typically does not suffer from allocation overhead,
- because QByteArray preallocates extra space at the end of the data
- so that it may grow without reallocating for each append operation.
+ The append() function is typically very fast (\l{constant time}),
+ because QByteArray preallocates extra space at the end of the data,
+ so it can grow without reallocating the entire array each time.
\sa operator+=(), prepend(), insert()
*/
QByteArray &QByteArray::append(const QByteArray &ba)
{
- if (size() == 0 && ba.d.isMutable())
- return (*this = ba);
- return append(QByteArrayView(ba));
+ if (!ba.isNull()) {
+ if (isNull()) {
+ if (Q_UNLIKELY(!ba.d.isMutable()))
+ assign(ba); // fromRawData, so we do a deep copy
+ else
+ operator=(ba);
+ } else if (ba.size()) {
+ append(QByteArrayView(ba));
+ }
+ }
+ return *this;
}
/*!
@@ -1896,15 +2142,80 @@ QByteArray &QByteArray::append(const QByteArray &ba)
QByteArray& QByteArray::append(char ch)
{
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.end(), 1);
- if (d->needsDetach() || size() + 1 > capacity() || shouldGrow)
- reallocGrowData(size() + 1, d->detachFlags() | Data::GrowsForward);
+ d.detachAndGrow(QArrayData::GrowsAtEnd, 1, nullptr, nullptr);
d->copyAppend(1, ch);
d.data()[d.size] = '\0';
return *this;
}
/*!
+ \fn QByteArray &QByteArray::assign(QByteArrayView v)
+ \since 6.6
+
+ Replaces the contents of this byte array with a copy of \a v and returns a
+ reference to this byte array.
+
+ The size of this byte array will be equal to the size of \a v.
+
+ This function only allocates memory if the size of \a v exceeds the capacity
+ of this byte array or this byte array is shared.
+*/
+
+/*!
+ \fn QByteArray &QByteArray::assign(qsizetype n, char c)
+ \since 6.6
+
+ Replaces the contents of this byte array with \a n copies of \a c and
+ returns a reference to this byte array.
+
+ The size of this byte array will be equal to \a n, which has to be non-negative.
+
+ This function will only allocate memory if \a n exceeds the capacity of this
+ byte array or this byte array is shared.
+
+ \sa fill()
+*/
+
+/*!
+ \fn template <typename InputIterator, QByteArray::if_input_iterator<InputIterator>> QByteArray &QByteArray::assign(InputIterator first, InputIterator last)
+ \since 6.6
+
+ Replaces the contents of this byte array with a copy of the elements in the
+ iterator range [\a first, \a last) and returns a reference to this
+ byte array.
+
+ The size of this byte array will be equal to the number of elements in the
+ range [\a first, \a last).
+
+ This function will only allocate memory if the number of elements in the
+ range exceeds the capacity of this byte array or this byte array is shared.
+
+ \note This function overload only participates in overload resolution if
+ \c InputIterator meets the requirements of a
+ \l {https://en.cppreference.com/w/cpp/named_req/InputIterator} {LegacyInputIterator}.
+
+ \note The behavior is undefined if either argument is an iterator into *this or
+ [\a first, \a last) is not a valid range.
+*/
+
+QByteArray &QByteArray::assign(QByteArrayView v)
+{
+ const auto len = v.size();
+
+ if (len <= capacity() && isDetached()) {
+ const auto offset = d.freeSpaceAtBegin();
+ if (offset)
+ d.setBegin(d.begin() - offset);
+ std::memcpy(d.begin(), v.data(), len);
+ d.size = len;
+ d.data()[d.size] = '\0';
+ } else {
+ *this = v.toByteArray();
+ }
+ return *this;
+}
+
+/*!
Inserts \a data at index position \a i and returns a
reference to this byte array.
@@ -1912,41 +2223,73 @@ QByteArray& QByteArray::append(char ch)
\snippet code/src_corelib_text_qbytearray.cpp 17
\since 6.0
+ For large byte arrays, this operation can be slow (\l{linear time}),
+ because it requires moving all the bytes at indexes \a i and
+ above by at least one position further in memory.
+
+//! [array-grow-at-insertion]
+ This array grows to accommodate the insertion. If \a i is beyond
+ the end of the array, the array is first extended with space characters
+ to reach this \a i.
+//! [array-grow-at-insertion]
+
\sa append(), prepend(), replace(), remove()
*/
QByteArray &QByteArray::insert(qsizetype i, QByteArrayView data)
{
const char *str = data.data();
- qsizetype len = data.size();
- if (i < 0 || str == nullptr || len <= 0)
+ qsizetype size = data.size();
+ if (i < 0 || size <= 0)
return *this;
- if (points_into_range(str, d.data(), d.data() + d.size)) {
- QVarLengthArray a(str, str + len);
- return insert(i, a);
+ // handle this specially, as QArrayDataOps::insert() doesn't handle out of
+ // bounds positions
+ if (i >= d->size) {
+ // In case when data points into the range or is == *this, we need to
+ // defer a call to free() so that it comes after we copied the data from
+ // the old memory:
+ DataPointer detached{}; // construction is free
+ d.detachAndGrow(Data::GrowsAtEnd, (i - d.size) + size, &str, &detached);
+ Q_CHECK_PTR(d.data());
+ d->copyAppend(i - d->size, ' ');
+ d->copyAppend(str, str + size);
+ d.data()[d.size] = '\0';
+ return *this;
}
- const auto oldSize = size();
- const auto newSize = qMax(i, oldSize) + len;
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + qMin(i, oldSize), len);
-
- // ### optimize me
- if (d->needsDetach() || newSize > capacity() || shouldGrow) {
- auto flags = d->detachFlags() | Data::GrowsForward;
- if (oldSize != 0 && i <= oldSize / 4) // using QList's policy
- flags |= Data::GrowsBackwards;
- reallocGrowData(newSize, flags);
+ if (!d->needsDetach() && QtPrivate::q_points_into_range(str, d)) {
+ QVarLengthArray a(str, str + size);
+ return insert(i, a);
}
- if (i > oldSize) // set spaces in the uninitialized gap
- d->copyAppend(i - oldSize, 0x20);
-
- d->insert(d.begin() + i, str, str + len);
+ d->insert(i, str, size);
d.data()[d.size] = '\0';
return *this;
}
/*!
+ \fn QByteArray &QByteArray::insert(qsizetype i, const QByteArray &data)
+ Inserts \a data at index position \a i and returns a
+ reference to this byte array.
+
+ \include qbytearray.cpp array-grow-at-insertion
+
+ \sa append(), prepend(), replace(), remove()
+*/
+
+/*!
+ \fn QByteArray &QByteArray::insert(qsizetype i, const char *s)
+ Inserts \a s at index position \a i and returns a
+ reference to this byte array.
+
+ \include qbytearray.cpp array-grow-at-insertion
+
+ The function is equivalent to \c{insert(i, QByteArrayView(s))}
+
+ \sa append(), prepend(), replace(), remove()
+*/
+
+/*!
\fn QByteArray &QByteArray::insert(qsizetype i, const char *data, qsizetype len)
\overload
\since 4.6
@@ -1954,16 +2297,16 @@ QByteArray &QByteArray::insert(qsizetype i, QByteArrayView data)
Inserts \a len bytes, starting at \a data, at position \a i in the byte
array.
- If \a i is greater than size(), the array is first extended using
- resize().
+ \include qbytearray.cpp array-grow-at-insertion
*/
/*!
\fn QByteArray &QByteArray::insert(qsizetype i, char ch)
\overload
- Inserts byte \a ch at index position \a i in the byte array. If \a i is
- greater than size(), the array is first extended using resize().
+ Inserts byte \a ch at index position \a i in the byte array.
+
+ \include qbytearray.cpp array-grow-at-insertion
*/
/*! \fn QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)
@@ -1974,7 +2317,7 @@ QByteArray &QByteArray::insert(qsizetype i, QByteArrayView data)
Inserts \a count copies of byte \a ch at index position \a i in the byte
array.
- If \a i is greater than size(), the array is first extended using resize().
+ \include qbytearray.cpp array-grow-at-insertion
*/
QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)
@@ -1982,22 +2325,17 @@ QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)
if (i < 0 || count <= 0)
return *this;
- const auto oldSize = size();
- const auto newSize = qMax(i, oldSize) + count;
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + qMin(i, oldSize), count);
-
- // ### optimize me
- if (d->needsDetach() || newSize > capacity() || shouldGrow) {
- auto flags = d->detachFlags() | Data::GrowsForward;
- if (oldSize != 0 && i <= oldSize / 4) // using QList's policy
- flags |= Data::GrowsBackwards;
- reallocGrowData(newSize, flags);
+ if (i >= d->size) {
+ // handle this specially, as QArrayDataOps::insert() doesn't handle out of bounds positions
+ d.detachAndGrow(Data::GrowsAtEnd, (i - d.size) + count, nullptr, nullptr);
+ Q_CHECK_PTR(d.data());
+ d->copyAppend(i - d->size, ' ');
+ d->copyAppend(count, ch);
+ d.data()[d.size] = '\0';
+ return *this;
}
- if (i > oldSize) // set spaces in the uninitialized gap
- d->copyAppend(i - oldSize, 0x20);
-
- d->insert(d.begin() + i, count, ch);
+ d->insert(i, count, ch);
d.data()[d.size] = '\0';
return *this;
}
@@ -2013,20 +2351,77 @@ QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)
Example:
\snippet code/src_corelib_text_qbytearray.cpp 18
- \sa insert(), replace()
+ Element removal will preserve the array's capacity and not reduce the
+ amount of allocated memory. To shed extra capacity and free as much memory
+ as possible, call squeeze() after the last change to the array's size.
+
+ \sa insert(), replace(), squeeze()
*/
QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)
{
if (len <= 0 || pos < 0 || size_t(pos) >= size_t(size()))
return *this;
- detach();
- d->erase(d.begin() + pos, d.begin() + qMin(pos + len, size()));
- d.data()[d.size] = '\0';
+ if (pos + len > d->size)
+ len = d->size - pos;
+
+ auto begin = d.begin();
+ if (!d->isShared()) {
+ d->erase(begin + pos, len);
+ d.data()[d.size] = '\0';
+ } else {
+ QByteArray copy{size() - len, Qt::Uninitialized};
+ const auto toRemove_start = d.begin() + pos;
+ copy.d->copyRanges({{d.begin(), toRemove_start},
+ {toRemove_start + len, d.end()}});
+ swap(copy);
+ }
return *this;
}
/*!
+ \fn QByteArray &QByteArray::removeAt(qsizetype pos)
+
+ \since 6.5
+
+ Removes the character at index \a pos. If \a pos is out of bounds
+ (i.e. \a pos >= size()) this function does nothing.
+
+ \sa remove()
+*/
+
+/*!
+ \fn QByteArray &QByteArray::removeFirst()
+
+ \since 6.5
+
+ Removes the first character in this byte array. If the byte array is empty,
+ this function does nothing.
+
+ \sa remove()
+*/
+/*!
+ \fn QByteArray &QByteArray::removeLast()
+
+ \since 6.5
+
+ Removes the last character in this byte array. If the byte array is empty,
+ this function does nothing.
+
+ \sa remove()
+*/
+
+/*!
+ \fn template <typename Predicate> QByteArray &QByteArray::removeIf(Predicate pred)
+ \since 6.1
+
+ Removes all bytes for which the predicate \a pred returns true
+ from the byte array. Returns a reference to the byte array.
+
+ \sa remove()
+*/
+
+/*!
Replaces \a len bytes from index position \a pos with the byte
array \a after, and returns a reference to this byte array.
@@ -2038,13 +2433,16 @@ QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)
QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)
{
- if (points_into_range(after.data(), d.data(), d.data() + d.size)) {
+ if (QtPrivate::q_points_into_range(after.data(), d)) {
QVarLengthArray copy(after.data(), after.data() + after.size());
return replace(pos, len, QByteArrayView{copy});
}
if (len == after.size() && (pos + len <= size())) {
- detach();
- memmove(d.data() + pos, after.data(), len*sizeof(char));
+ // same size: in-place replacement possible
+ if (len > 0) {
+ detach();
+ memcpy(d.data() + pos, after.data(), len*sizeof(char));
+ }
return *this;
} else {
// ### optimize me
@@ -2095,11 +2493,11 @@ QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)
return *this;
// protect against before or after being part of this
- if (points_into_range(a, d.data(), d.data() + d.size)) {
+ if (QtPrivate::q_points_into_range(a, d)) {
QVarLengthArray copy(a, a + asize);
return replace(before, QByteArrayView{copy});
}
- if (points_into_range(b, d.data(), d.data() + d.size)) {
+ if (QtPrivate::q_points_into_range(b, d)) {
QVarLengthArray copy(b, b + bsize);
return replace(QByteArrayView{copy}, after);
}
@@ -2191,23 +2589,6 @@ QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)
return *this;
}
-
-/*!
- \fn QByteArray &QByteArray::replace(const QByteArray &before, const char *after)
- \overload
-
- Replaces every occurrence of the byte in \a before with the '\\0'-terminated
- string \a after.
-*/
-
-/*! \fn QByteArray &QByteArray::replace(const char *before, const char *after)
-
- \overload
-
- Replaces every occurrence of the '\\0'-terminated string \a before with the
- '\\0'-terminated string \a after.
-*/
-
/*!
\fn QByteArray &QByteArray::replace(char before, QByteArrayView after)
\overload
@@ -2224,12 +2605,11 @@ QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)
QByteArray &QByteArray::replace(char before, char after)
{
- if (!isEmpty()) {
- char *i = data();
- char *e = i + size();
- for (; i != e; ++i)
- if (*i == before)
- * i = after;
+ if (before != after) {
+ if (const auto pos = indexOf(before); pos >= 0) {
+ const auto detachedData = data();
+ std::replace(detachedData + pos, detachedData + size(), before, after);
+ }
}
return *this;
}
@@ -2302,32 +2682,23 @@ QByteArray QByteArray::repeated(qsizetype times) const
#define REHASH(a) \
if (ol_minus_1 < sizeof(std::size_t) * CHAR_BIT) \
- hashHaystack -= (a) << ol_minus_1; \
+ hashHaystack -= std::size_t(a) << ol_minus_1; \
hashHaystack <<= 1
-static inline qsizetype findCharHelper(QByteArrayView haystack, qsizetype from, char needle) noexcept
-{
- if (from < 0)
- from = qMax(from + haystack.size(), qsizetype(0));
- if (from < haystack.size()) {
- const char *const b = haystack.data();
- if (const auto n = static_cast<const char *>(
- memchr(b + from, needle, static_cast<size_t>(haystack.size() - from)))) {
- return n - b;
- }
- }
- return -1;
-}
-
qsizetype QtPrivate::findByteArray(QByteArrayView haystack, qsizetype from, QByteArrayView needle) noexcept
{
const auto ol = needle.size();
- if (ol == 0)
- return from;
+ const auto l = haystack.size();
+ if (ol == 0) {
+ if (from < 0)
+ return qMax(from + l, 0);
+ else
+ return from > l ? -1 : from;
+ }
+
if (ol == 1)
- return findCharHelper(haystack, from, needle.front());
+ return findByteArray(haystack, from, needle.front());
- const auto l = haystack.size();
if (from > l || ol + from > l)
return -1;
@@ -2348,6 +2719,7 @@ qsizetype QtPrivate::findByteArray(QByteArrayView haystack, qsizetype from, QByt
*/
/*!
+ \fn qsizetype QByteArray::indexOf(char ch, qsizetype from) const
\overload
Returns the index position of the start of the first occurrence of the
@@ -2360,11 +2732,6 @@ qsizetype QtPrivate::findByteArray(QByteArrayView haystack, qsizetype from, QByt
\sa lastIndexOf(), contains()
*/
-qsizetype QByteArray::indexOf(char ch, qsizetype from) const
-{
- return static_cast<int>(findCharHelper(*this, from, ch));
-}
-
static qsizetype lastIndexOfHelper(const char *haystack, qsizetype l, const char *needle,
qsizetype ol, qsizetype from)
{
@@ -2401,6 +2768,8 @@ static qsizetype lastIndexOfHelper(const char *haystack, qsizetype l, const char
static inline qsizetype lastIndexOfCharHelper(QByteArrayView haystack, qsizetype from, char needle) noexcept
{
+ if (haystack.size() == 0)
+ return -1;
if (from < 0)
from += haystack.size();
else if (from > haystack.size())
@@ -2416,10 +2785,18 @@ static inline qsizetype lastIndexOfCharHelper(QByteArrayView haystack, qsizetype
return -1;
}
+qsizetype QtPrivate::lastIndexOf(QByteArrayView haystack, qsizetype from, char needle) noexcept
+{
+ return lastIndexOfCharHelper(haystack, from, needle);
+}
+
qsizetype QtPrivate::lastIndexOf(QByteArrayView haystack, qsizetype from, QByteArrayView needle) noexcept
{
- if (haystack.isEmpty())
- return !needle.size() ? 0 : -1;
+ if (haystack.isEmpty()) {
+ if (needle.isEmpty() && from == 0)
+ return 0;
+ return -1;
+ }
const auto ol = needle.size();
if (ol == 1)
return lastIndexOfCharHelper(haystack, from, needle.front());
@@ -2430,10 +2807,34 @@ qsizetype QtPrivate::lastIndexOf(QByteArrayView haystack, qsizetype from, QByteA
/*! \fn qsizetype QByteArray::lastIndexOf(QByteArrayView bv, qsizetype from) const
\since 6.0
- Returns the index position of the start of the last occurrence of the sequence
- of bytes viewed by \a bv in this byte array, searching backward from index
- position \a from. If \a from is -1 (the default), the search starts from the
- end of the byte array. Returns -1 if no match is found.
+ Returns the index position of the start of the last occurrence of the
+ sequence of bytes viewed by \a bv in this byte array, searching backward
+ from index position \a from.
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if no match is found.
+
+ Example:
+ \snippet code/src_corelib_text_qbytearray.cpp 23
+
+ \note When searching for a 0-length \a bv, the match at the end of
+ the data is excluded from the search by a negative \a from, even
+ though \c{-1} is normally thought of as searching from the end of
+ the byte array: the match at the end is \e after the last character, so
+ it is excluded. To include such a final empty match, either give a
+ positive value for \a from or omit the \a from parameter entirely.
+
+ \sa indexOf(), contains(), count()
+*/
+
+/*! \fn qsizetype QByteArray::lastIndexOf(QByteArrayView bv) const
+ \since 6.2
+ \overload
+
+ Returns the index position of the start of the last occurrence of the
+ sequence of bytes viewed by \a bv in this byte array, searching backward
+ from the end of the byte array. Returns -1 if no match is found.
Example:
\snippet code/src_corelib_text_qbytearray.cpp 23
@@ -2442,12 +2843,13 @@ qsizetype QtPrivate::lastIndexOf(QByteArrayView haystack, qsizetype from, QByteA
*/
/*!
+ \fn qsizetype QByteArray::lastIndexOf(char ch, qsizetype from) const
\overload
- Returns the index position of the start of the last occurrence of byte \a ch in
- this byte array, searching backward from index position \a from. If \a from is -1
- (the default), the search starts at the last byte (at index size() - 1). Returns
- -1 if no match is found.
+ Returns the index position of the start of the last occurrence of byte \a ch
+ in this byte array, searching backward from index position \a from.
+ If \a from is -1 (the default), the search starts at the last byte
+ (at index size() - 1). Returns -1 if no match is found.
Example:
\snippet code/src_corelib_text_qbytearray.cpp 24
@@ -2455,11 +2857,6 @@ qsizetype QtPrivate::lastIndexOf(QByteArrayView haystack, qsizetype from, QByteA
\sa indexOf(), contains()
*/
-qsizetype QByteArray::lastIndexOf(char ch, qsizetype from) const
-{
- return static_cast<int>(lastIndexOfCharHelper(*this, from, ch));
-}
-
static inline qsizetype countCharHelper(QByteArrayView haystack, char needle) noexcept
{
qsizetype num = 0;
@@ -2472,14 +2869,17 @@ static inline qsizetype countCharHelper(QByteArrayView haystack, char needle) no
qsizetype QtPrivate::count(QByteArrayView haystack, QByteArrayView needle) noexcept
{
+ if (needle.size() == 0)
+ return haystack.size() + 1;
+
if (needle.size() == 1)
return countCharHelper(haystack, needle[0]);
qsizetype num = 0;
qsizetype i = -1;
if (haystack.size() > 500 && needle.size() > 5) {
- QByteArrayMatcher matcher(needle.data(), needle.size());
- while ((i = matcher.indexIn(haystack.data(), haystack.size(), i + 1)) != -1)
+ QByteArrayMatcher matcher(needle);
+ while ((i = matcher.indexIn(haystack, i + 1)) != -1)
++num;
} else {
while ((i = haystack.indexOf(needle, i + 1)) != -1)
@@ -2507,15 +2907,17 @@ qsizetype QtPrivate::count(QByteArrayView haystack, QByteArrayView needle) noexc
qsizetype QByteArray::count(char ch) const
{
- return static_cast<int>(countCharHelper(*this, ch));
+ return countCharHelper(*this, ch);
}
+#if QT_DEPRECATED_SINCE(6, 4)
/*! \fn qsizetype QByteArray::count() const
-
+ \deprecated [6.4] Use size() or length() instead.
\overload
Same as size().
*/
+#endif
/*!
\fn int QByteArray::compare(QByteArrayView bv, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
@@ -2523,8 +2925,8 @@ qsizetype QByteArray::count(char ch) const
Returns an integer less than, equal to, or greater than zero depending on
whether this QByteArray sorts before, at the same position as, or after the
- QByteArrayView \a bv. The comparison is performed according to case sensitivity
- \a cs.
+ QByteArrayView \a bv. The comparison is performed according to case
+ sensitivity \a cs.
\sa operator==, {Character Case}
*/
@@ -2547,7 +2949,7 @@ bool QtPrivate::startsWith(QByteArrayView haystack, QByteArrayView needle) noexc
Example:
\snippet code/src_corelib_text_qbytearray.cpp 25
- \sa endsWith(), left()
+ \sa endsWith(), first()
*/
/*!
@@ -2577,7 +2979,7 @@ bool QtPrivate::endsWith(QByteArrayView haystack, QByteArrayView needle) noexcep
Example:
\snippet code/src_corelib_text_qbytearray.cpp 26
- \sa startsWith(), right()
+ \sa startsWith(), last()
*/
/*!
@@ -2596,125 +2998,108 @@ static constexpr inline bool isUpperCaseAscii(char c)
return c >= 'A' && c <= 'Z';
}
+/*
+ Returns true if \a c is an lowercase ASCII letter.
+ */
+static constexpr inline bool isLowerCaseAscii(char c)
+{
+ return c >= 'a' && c <= 'z';
+}
+
/*!
- Returns \c true if this byte array contains only ASCII uppercase letters,
- otherwise returns \c false.
+ Returns \c true if this byte array is uppercase, that is, if
+ it's identical to its toUpper() folding.
+
+ Note that this does \e not mean that the byte array only contains
+ uppercase letters; only that it contains no ASCII lowercase letters.
+
\since 5.12
\sa isLower(), toUpper()
*/
bool QByteArray::isUpper() const
{
- if (isEmpty())
- return false;
-
- const char *d = data();
-
- for (qsizetype i = 0, max = size(); i < max; ++i) {
- if (!isUpperCaseAscii(d[i]))
- return false;
- }
-
- return true;
-}
-
-/*
- Returns true if \a c is an lowercase ASCII letter.
- */
-static constexpr inline bool isLowerCaseAscii(char c)
-{
- return c >= 'a' && c <= 'z';
+ return std::none_of(begin(), end(), isLowerCaseAscii);
}
/*!
- Returns \c true if this byte array contains only lowercase ASCII letters,
- otherwise returns \c false.
+ Returns \c true if this byte array is lowercase, that is, if
+ it's identical to its toLower() folding.
+
+ Note that this does \e not mean that the byte array only contains
+ lowercase letters; only that it contains no ASCII uppercase letters.
+
\since 5.12
\sa isUpper(), toLower()
*/
bool QByteArray::isLower() const
{
- if (isEmpty())
- return false;
+ return std::none_of(begin(), end(), isUpperCaseAscii);
+}
- const char *d = data();
+/*!
+ \fn QByteArray::isValidUtf8() const
- for (qsizetype i = 0, max = size(); i < max; ++i) {
- if (!isLowerCaseAscii(d[i]))
- return false;
- }
+ Returns \c true if this byte array contains valid UTF-8 encoded data,
+ or \c false otherwise.
- return true;
-}
+ \since 6.3
+*/
/*!
+ \fn QByteArray QByteArray::left(qsizetype len) const &
+ \fn QByteArray QByteArray::left(qsizetype len) &&
+
Returns a byte array that contains the first \a len bytes of this byte
array.
- \obsolete Use first() instead in new code.
+ If you know that \a len cannot be out of bounds, use first() instead in new
+ code, because it is faster.
The entire byte array is returned if \a len is greater than
size().
Returns an empty QByteArray if \a len is smaller than 0.
- Example:
- \snippet code/src_corelib_text_qbytearray.cpp 27
-
\sa first(), last(), startsWith(), chopped(), chop(), truncate()
*/
-QByteArray QByteArray::left(qsizetype len) const
-{
- if (len >= size())
- return *this;
- if (len < 0)
- len = 0;
- return QByteArray(data(), len);
-}
-
/*!
+ \fn QByteArray QByteArray::right(qsizetype len) const &
+ \fn QByteArray QByteArray::right(qsizetype len) &&
+
Returns a byte array that contains the last \a len bytes of this byte array.
- \obsolete Use last() instead in new code.
+ If you know that \a len cannot be out of bounds, use last() instead in new
+ code, because it is faster.
The entire byte array is returned if \a len is greater than
size().
Returns an empty QByteArray if \a len is smaller than 0.
- Example:
- \snippet code/src_corelib_text_qbytearray.cpp 28
-
- \sa endsWith(), last(), first(), sliced(), chopped(), chop(), truncate()
+ \sa endsWith(), last(), first(), sliced(), chopped(), chop(), truncate(), slice()
*/
-QByteArray QByteArray::right(qsizetype len) const
-{
- if (len >= size())
- return *this;
- if (len < 0)
- len = 0;
- return QByteArray(end() - len, len);
-}
/*!
+ \fn QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const &
+ \fn QByteArray QByteArray::mid(qsizetype pos, qsizetype len) &&
+
Returns a byte array containing \a len bytes from this byte array,
starting at position \a pos.
- \obsolete Use sliced() instead in new code.
+ If you know that \a pos and \a len cannot be out of bounds, use sliced()
+ instead in new code, because it is faster.
If \a len is -1 (the default), or \a pos + \a len >= size(),
returns a byte array containing all bytes starting at position \a
pos until the end of the byte array.
- Example:
- \snippet code/src_corelib_text_qbytearray.cpp 29
-
- \sa first(), last(), sliced(), chopped(), chop(), truncate()
+ \sa first(), last(), sliced(), chopped(), chop(), truncate(), slice()
*/
-QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
+QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const &
{
qsizetype p = pos;
qsizetype l = len;
@@ -2729,36 +3114,63 @@ QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
case QContainerImplHelper::Full:
return *this;
case QContainerImplHelper::Subset:
- return QByteArray(d.data() + p, l);
+ return sliced(p, l);
}
- Q_UNREACHABLE();
- return QByteArray();
+ Q_UNREACHABLE_RETURN(QByteArray());
+}
+
+QByteArray QByteArray::mid(qsizetype pos, qsizetype len) &&
+{
+ qsizetype p = pos;
+ qsizetype l = len;
+ using namespace QtPrivate;
+ switch (QContainerImplHelper::mid(size(), &p, &l)) {
+ case QContainerImplHelper::Null:
+ return QByteArray();
+ case QContainerImplHelper::Empty:
+ resize(0); // keep capacity if we've reserve()d
+ [[fallthrough]];
+ case QContainerImplHelper::Full:
+ return std::move(*this);
+ case QContainerImplHelper::Subset:
+ return std::move(*this).sliced(p, l);
+ }
+ Q_UNREACHABLE_RETURN(QByteArray());
}
/*!
- \fn QByteArray QByteArray::first(qsizetype n) const
+ \fn QByteArray QByteArray::first(qsizetype n) const &
+ \fn QByteArray QByteArray::first(qsizetype n) &&
\since 6.0
Returns the first \a n bytes of the byte array.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa last(), sliced(), startsWith(), chopped(), chop(), truncate()
+ Example:
+ \snippet code/src_corelib_text_qbytearray.cpp 27
+
+ \sa last(), sliced(), startsWith(), chopped(), chop(), truncate(), slice()
*/
/*!
- \fn QByteArray QByteArray::last(qsizetype n) const
+ \fn QByteArray QByteArray::last(qsizetype n) const &
+ \fn QByteArray QByteArray::last(qsizetype n) &&
\since 6.0
Returns the last \a n bytes of the byte array.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa first(), sliced(), endsWith(), chopped(), chop(), truncate()
+ Example:
+ \snippet code/src_corelib_text_qbytearray.cpp 28
+
+ \sa first(), sliced(), endsWith(), chopped(), chop(), truncate(), slice()
*/
/*!
- \fn QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) const
+ \fn QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) const &
+ \fn QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) &&
\since 6.0
Returns a byte array containing the \a n bytes of this object starting
@@ -2767,11 +3179,23 @@ QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
\note The behavior is undefined when \a pos < 0, \a n < 0,
or \a pos + \a n > size().
- \sa first(), last(), chopped(), chop(), truncate()
+ Example:
+ \snippet code/src_corelib_text_qbytearray.cpp 29
+
+ \sa first(), last(), chopped(), chop(), truncate(), slice()
*/
+QByteArray QByteArray::sliced_helper(QByteArray &a, qsizetype pos, qsizetype n)
+{
+ if (n == 0)
+ return fromRawData(&_empty, 0);
+ DataPointer d = std::move(a.d).sliced(pos, n);
+ d.data()[n] = 0;
+ return QByteArray(std::move(d));
+}
/*!
- \fn QByteArray QByteArray::sliced(qsizetype pos) const
+ \fn QByteArray QByteArray::sliced(qsizetype pos) const &
+ \fn QByteArray QByteArray::sliced(qsizetype pos) &&
\since 6.0
\overload
@@ -2780,11 +3204,41 @@ QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
\note The behavior is undefined when \a pos < 0 or \a pos > size().
- \sa first(), last(), sliced(), chopped(), chop(), truncate()
+ \sa first(), last(), chopped(), chop(), truncate(), slice()
+*/
+
+/*!
+ \fn QByteArray &QByteArray::slice(qsizetype pos, qsizetype n)
+ \since 6.8
+
+ Modifies this byte array to start at position \a pos, extending for \a n
+ bytes, and returns a reference to this byte array.
+
+ \note The behavior is undefined if \a pos < 0, \a n < 0,
+ or \a pos + \a n > size().
+
+ Example:
+ \snippet code/src_corelib_text_qbytearray.cpp 57
+
+ \sa sliced(), first(), last(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QByteArray &QByteArray::slice(qsizetype pos)
+ \since 6.8
+ \overload
+
+ Modifies this byte array to start at position \a pos, extending to its
+ end, and returns a reference to this byte array.
+
+ \note The behavior is undefined if \a pos < 0 or \a pos > size().
+
+ \sa sliced(), first(), last(), chopped(), chop(), truncate()
*/
/*!
- \fn QByteArray::chopped(qsizetype len) const
+ \fn QByteArray QByteArray::chopped(qsizetype len) const &
+ \fn QByteArray QByteArray::chopped(qsizetype len) &&
\since 5.10
Returns a byte array that contains the leftmost size() - \a len bytes of
@@ -2792,7 +3246,7 @@ QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
\note The behavior is undefined if \a len is negative or greater than size().
- \sa endsWith(), left(), right(), mid(), chop(), truncate()
+ \sa endsWith(), first(), last(), sliced(), chop(), truncate(), slice()
*/
/*!
@@ -2807,11 +3261,7 @@ QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
\sa isLower(), toUpper(), {Character Case}
*/
-// prevent the compiler from inlining the function in each of
-// toLower and toUpper when the only difference is the table being used
-// (even with constant propagation, there's no gain in performance).
template <typename T>
-Q_NEVER_INLINE
static QByteArray toCase_template(T &input, uchar (*lookup)(uchar))
{
// find the first bad character in input
@@ -2882,7 +3332,7 @@ void QByteArray::clear()
d.clear();
}
-#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
+#if !defined(QT_NO_DATASTREAM)
/*! \relates QByteArray
@@ -2895,7 +3345,7 @@ void QByteArray::clear()
QDataStream &operator<<(QDataStream &out, const QByteArray &ba)
{
if (ba.isNull() && out.version() >= 6) {
- out << (quint32)0xffffffff;
+ QDataStream::writeQSizeType(out, -1);
return out;
}
return out.writeBytes(ba.constData(), ba.size());
@@ -2912,13 +3362,21 @@ QDataStream &operator<<(QDataStream &out, const QByteArray &ba)
QDataStream &operator>>(QDataStream &in, QByteArray &ba)
{
ba.clear();
- quint32 len;
- in >> len;
- if (len == 0xffffffff)
+
+ qint64 size = QDataStream::readQSizeType(in);
+ qsizetype len = size;
+ if (size != len || size < -1) {
+ ba.clear();
+ in.setStatus(QDataStream::SizeLimitExceeded);
return in;
+ }
+ if (len == -1) { // null byte-array
+ ba = QByteArray();
+ return in;
+ }
- const quint32 Step = 1024 * 1024;
- quint32 allocated = 0;
+ constexpr qsizetype Step = 1024 * 1024;
+ qsizetype allocated = 0;
do {
qsizetype blockSize = qMin(Step, len - allocated);
@@ -2935,289 +3393,169 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
}
#endif // QT_NO_DATASTREAM
-/*! \fn bool QByteArray::operator==(const QString &str) const
-
- Returns \c true if this byte array is equal to the UTF-8 encoding of \a str;
- otherwise returns \c false.
-
- The comparison is case sensitive.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. You
- then need to call QString::fromUtf8(), QString::fromLatin1(),
- or QString::fromLocal8Bit() explicitly if you want to convert the byte
- array to a QString before doing the comparison.
-*/
-
-/*! \fn bool QByteArray::operator!=(const QString &str) const
-
- Returns \c true if this byte array is not equal to the UTF-8 encoding of \a
- str; otherwise returns \c false.
-
- The comparison is case sensitive.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. You
- then need to call QString::fromUtf8(), QString::fromLatin1(),
- or QString::fromLocal8Bit() explicitly if you want to convert the byte
- array to a QString before doing the comparison.
-*/
-
-/*! \fn bool QByteArray::operator<(const QString &str) const
-
- Returns \c true if this byte array is lexically less than the UTF-8 encoding
- of \a str; otherwise returns \c false.
-
- The comparison is case sensitive.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. You
- then need to call QString::fromUtf8(), QString::fromLatin1(),
- or QString::fromLocal8Bit() explicitly if you want to convert the byte
- array to a QString before doing the comparison.
-*/
-
-/*! \fn bool QByteArray::operator>(const QString &str) const
-
- Returns \c true if this byte array is lexically greater than the UTF-8
- encoding of \a str; otherwise returns \c false.
-
- The comparison is case sensitive.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. You
- then need to call QString::fromUtf8(), QString::fromLatin1(),
- or QString::fromLocal8Bit() explicitly if you want to convert the byte
- array to a QString before doing the comparison.
-*/
-
-/*! \fn bool QByteArray::operator<=(const QString &str) const
-
- Returns \c true if this byte array is lexically less than or equal to the
- UTF-8 encoding of \a str; otherwise returns \c false.
-
- The comparison is case sensitive.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. You
- then need to call QString::fromUtf8(), QString::fromLatin1(),
- or QString::fromLocal8Bit() explicitly if you want to convert the byte
- array to a QString before doing the comparison.
-*/
-
-/*! \fn bool QByteArray::operator>=(const QString &str) const
-
- Returns \c true if this byte array is greater than or equal to the UTF-8
- encoding of \a str; otherwise returns \c false.
-
- The comparison is case sensitive.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. You
- then need to call QString::fromUtf8(), QString::fromLatin1(),
- or QString::fromLocal8Bit() explicitly if you want to convert the byte
- array to a QString before doing the comparison.
-*/
-
-/*! \fn bool operator==(const QByteArray &a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator==(const QByteArray &lhs, const QByteArray &rhs)
\overload
- Returns \c true if byte array \a a1 is equal to byte array \a a2;
+ Returns \c true if byte array \a lhs is equal to byte array \a rhs;
otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator==(const QByteArray &a1, const char *a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator==(const QByteArray &lhs, const char * const &rhs)
\overload
- Returns \c true if byte array \a a1 is equal to the '\\0'-terminated string
- \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is equal to the '\\0'-terminated string
+ \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator==(const char *a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator==(const char * const &lhs, const QByteArray &rhs)
\overload
- Returns \c true if '\\0'-terminated string \a a1 is equal to byte array \a
- a2; otherwise returns \c false.
+ Returns \c true if '\\0'-terminated string \a lhs is equal to byte array \a
+ rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator!=(const QByteArray &a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator!=(const QByteArray &lhs, const QByteArray &rhs)
\overload
- Returns \c true if byte array \a a1 is not equal to byte array \a a2;
+ Returns \c true if byte array \a lhs is not equal to byte array \a rhs;
otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator!=(const QByteArray &a1, const char *a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator!=(const QByteArray &lhs, const char * const &rhs)
\overload
- Returns \c true if byte array \a a1 is not equal to the '\\0'-terminated
- string \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is not equal to the '\\0'-terminated
+ string \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator!=(const char *a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator!=(const char * const &lhs, const QByteArray &rhs)
\overload
- Returns \c true if '\\0'-terminated string \a a1 is not equal to byte array
- \a a2; otherwise returns \c false.
+ Returns \c true if '\\0'-terminated string \a lhs is not equal to byte array
+ \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator<(const QByteArray &a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator<(const QByteArray &lhs, const QByteArray &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically less than byte array
- \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically less than byte array
+ \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn inline bool operator<(const QByteArray &a1, const char *a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator<(const QByteArray &lhs, const char * const &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically less than the
- '\\0'-terminated string \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically less than the
+ '\\0'-terminated string \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator<(const char *a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator<(const char * const &lhs, const QByteArray &rhs)
\overload
- Returns \c true if '\\0'-terminated string \a a1 is lexically less than byte
- array \a a2; otherwise returns \c false.
+ Returns \c true if '\\0'-terminated string \a lhs is lexically less than byte
+ array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator<=(const QByteArray &a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator<=(const QByteArray &lhs, const QByteArray &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically less than or equal
- to byte array \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically less than or equal
+ to byte array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator<=(const QByteArray &a1, const char *a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator<=(const QByteArray &lhs, const char * const &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically less than or equal to the
- '\\0'-terminated string \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically less than or equal to the
+ '\\0'-terminated string \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator<=(const char *a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator<=(const char * const &lhs, const QByteArray &rhs)
\overload
- Returns \c true if '\\0'-terminated string \a a1 is lexically less than or
- equal to byte array \a a2; otherwise returns \c false.
+ Returns \c true if '\\0'-terminated string \a lhs is lexically less than or
+ equal to byte array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator>(const QByteArray &a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator>(const QByteArray &lhs, const QByteArray &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically greater than byte
- array \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically greater than byte
+ array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator>(const QByteArray &a1, const char *a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator>(const QByteArray &lhs, const char * const &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically greater than the
- '\\0'-terminated string \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically greater than the
+ '\\0'-terminated string \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator>(const char *a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator>(const char * const &lhs, const QByteArray &rhs)
\overload
- Returns \c true if '\\0'-terminated string \a a1 is lexically greater than
- byte array \a a2; otherwise returns \c false.
+ Returns \c true if '\\0'-terminated string \a lhs is lexically greater than
+ byte array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator>=(const QByteArray &a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator>=(const QByteArray &lhs, const QByteArray &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically greater than or
- equal to byte array \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically greater than or
+ equal to byte array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator>=(const QByteArray &a1, const char *a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator>=(const QByteArray &lhs, const char * const &rhs)
\overload
- Returns \c true if byte array \a a1 is lexically greater than or equal to
- the '\\0'-terminated string \a a2; otherwise returns \c false.
+ Returns \c true if byte array \a lhs is lexically greater than or equal to
+ the '\\0'-terminated string \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn bool operator>=(const char *a1, const QByteArray &a2)
- \relates QByteArray
-
+/*! \fn bool QByteArray::operator>=(const char * const &lhs, const QByteArray &rhs)
\overload
- Returns \c true if '\\0'-terminated string \a a1 is lexically greater than
- or equal to byte array \a a2; otherwise returns \c false.
+ Returns \c true if '\\0'-terminated string \a lhs is lexically greater than
+ or equal to byte array \a rhs; otherwise returns \c false.
\sa QByteArray::compare()
*/
-/*! \fn const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
+/*! \fn QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
\relates QByteArray
Returns a byte array that is the result of concatenating byte
@@ -3226,7 +3564,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
\sa QByteArray::operator+=()
*/
-/*! \fn const QByteArray operator+(const QByteArray &a1, const char *a2)
+/*! \fn QByteArray operator+(const QByteArray &a1, const char *a2)
\relates QByteArray
\overload
@@ -3235,7 +3573,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
and '\\0'-terminated string \a a2.
*/
-/*! \fn const QByteArray operator+(const QByteArray &a1, char a2)
+/*! \fn QByteArray operator+(const QByteArray &a1, char a2)
\relates QByteArray
\overload
@@ -3244,7 +3582,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
array \a a1 and byte \a a2.
*/
-/*! \fn const QByteArray operator+(const char *a1, const QByteArray &a2)
+/*! \fn QByteArray operator+(const char *a1, const QByteArray &a2)
\relates QByteArray
\overload
@@ -3253,7 +3591,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
string \a a1 and byte array \a a2.
*/
-/*! \fn const QByteArray operator+(char a1, const QByteArray &a2)
+/*! \fn QByteArray operator+(char a1, const QByteArray &a2)
\relates QByteArray
\overload
@@ -3318,6 +3656,11 @@ QByteArray QByteArray::trimmed_helper(QByteArray &a)
return QStringAlgorithms<QByteArray>::trimmed_helper(a);
}
+QByteArrayView QtPrivate::trimmed(QByteArrayView view) noexcept
+{
+ const auto [start, stop] = QStringAlgorithms<QByteArrayView>::trimmed_helper_positions(view);
+ return QByteArrayView(start, stop);
+}
/*!
Returns a byte array of size \a width that contains this byte array padded
@@ -3393,46 +3736,38 @@ QByteArray QByteArray::rightJustified(qsizetype width, char fill, bool truncate)
return result;
}
-bool QByteArray::isNull() const
-{
- return d->isNull();
-}
-
-static qlonglong toIntegral_helper(const char *data, bool *ok, int base, qlonglong)
+auto QtPrivate::toSignedInteger(QByteArrayView data, int base) -> ParsedNumber<qlonglong>
{
- return QLocaleData::bytearrayToLongLong(data, base, ok);
-}
+#if defined(QT_CHECK_RANGE)
+ if (base != 0 && (base < 2 || base > 36)) {
+ qWarning("QByteArray::toIntegral: Invalid base %d", base);
+ base = 10;
+ }
+#endif
+ if (data.isEmpty())
+ return {};
-static qulonglong toIntegral_helper(const char *data, bool *ok, int base, qulonglong)
-{
- return QLocaleData::bytearrayToUnsLongLong(data, base, ok);
+ const QSimpleParsedNumber r = QLocaleData::bytearrayToLongLong(data, base);
+ if (r.ok())
+ return ParsedNumber(r.result);
+ return {};
}
-template <typename T> static inline
-T toIntegral_helper(const char *data, bool *ok, int base)
+auto QtPrivate::toUnsignedInteger(QByteArrayView data, int base) -> ParsedNumber<qulonglong>
{
- using Int64 = typename std::conditional<std::is_unsigned<T>::value, qulonglong, qlonglong>::type;
-
#if defined(QT_CHECK_RANGE)
if (base != 0 && (base < 2 || base > 36)) {
qWarning("QByteArray::toIntegral: Invalid base %d", base);
base = 10;
}
#endif
- if (!data) {
- if (ok)
- *ok = false;
- return 0;
- }
+ if (data.isEmpty())
+ return {};
- // we select the right overload by the last, unused parameter
- Int64 val = toIntegral_helper(data, ok, base, Int64());
- if (T(val) != val) {
- if (ok)
- *ok = false;
- val = 0;
- }
- return T(val);
+ const QSimpleParsedNumber r = QLocaleData::bytearrayToUnsLongLong(data, base);
+ if (r.ok())
+ return ParsedNumber(r.result);
+ return {};
}
/*!
@@ -3442,8 +3777,9 @@ T toIntegral_helper(const char *data, bool *ok, int base)
If \a base is 0, the base is determined automatically using the following
rules: If the byte array begins with "0x", it is assumed to be hexadecimal
- (base 16); otherwise, if it begins with "0", it is assumed to be octal (base
- 8); otherwise it is assumed to be decimal.
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3454,12 +3790,14 @@ T toIntegral_helper(const char *data, bool *ok, int base)
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
qlonglong QByteArray::toLongLong(bool *ok, int base) const
{
- return toIntegral_helper<qlonglong>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<qlonglong>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3469,8 +3807,9 @@ qlonglong QByteArray::toLongLong(bool *ok, int base) const
If \a base is 0, the base is determined automatically using the following
rules: If the byte array begins with "0x", it is assumed to be hexadecimal
- (base 16); otherwise, if it begins with "0", it is assumed to be octal (base
- 8); otherwise it is assumed to be decimal.
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3481,12 +3820,14 @@ qlonglong QByteArray::toLongLong(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
qulonglong QByteArray::toULongLong(bool *ok, int base) const
{
- return toIntegral_helper<qulonglong>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<qulonglong>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3496,8 +3837,9 @@ qulonglong QByteArray::toULongLong(bool *ok, int base) const
If \a base is 0, the base is determined automatically using the following
rules: If the byte array begins with "0x", it is assumed to be hexadecimal
- (base 16); otherwise, if it begins with "0", it is assumed to be octal (base
- 8); otherwise it is assumed to be decimal.
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3510,12 +3852,14 @@ qulonglong QByteArray::toULongLong(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
int QByteArray::toInt(bool *ok, int base) const
{
- return toIntegral_helper<int>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<int>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3525,8 +3869,9 @@ int QByteArray::toInt(bool *ok, int base) const
If \a base is 0, the base is determined automatically using the following
rules: If the byte array begins with "0x", it is assumed to be hexadecimal
- (base 16); otherwise, if it begins with "0", it is assumed to be octal (base
- 8); otherwise it is assumed to be decimal.
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3537,12 +3882,14 @@ int QByteArray::toInt(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
uint QByteArray::toUInt(bool *ok, int base) const
{
- return toIntegral_helper<uint>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<uint>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3554,8 +3901,9 @@ uint QByteArray::toUInt(bool *ok, int base) const
If \a base is 0, the base is determined automatically using the following
rules: If the byte array begins with "0x", it is assumed to be hexadecimal
- (base 16); otherwise, if it begins with "0", it is assumed to be octal (base
- 8); otherwise it is assumed to be decimal.
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3568,11 +3916,13 @@ uint QByteArray::toUInt(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
long QByteArray::toLong(bool *ok, int base) const
{
- return toIntegral_helper<long>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<long>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3584,8 +3934,9 @@ long QByteArray::toLong(bool *ok, int base) const
If \a base is 0, the base is determined automatically using the following
rules: If the byte array begins with "0x", it is assumed to be hexadecimal
- (base 16); otherwise, if it begins with "0", it is assumed to be octal (base
- 8); otherwise it is assumed to be decimal.
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3596,11 +3947,13 @@ long QByteArray::toLong(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
ulong QByteArray::toULong(bool *ok, int base) const
{
- return toIntegral_helper<ulong>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<ulong>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3609,9 +3962,10 @@ ulong QByteArray::toULong(bool *ok, int base) const
digits beyond 9; A is ten, B is eleven and so on.
If \a base is 0, the base is determined automatically using the following
- rules: If the byte array begins with "0x", it is assumed to be hexadecimal;
- otherwise, if it begins with "0", it is assumed to be octal; otherwise it is
- assumed to be decimal.
+ rules: If the byte array begins with "0x", it is assumed to be hexadecimal
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3622,12 +3976,14 @@ ulong QByteArray::toULong(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
short QByteArray::toShort(bool *ok, int base) const
{
- return toIntegral_helper<short>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<short>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
/*!
@@ -3636,9 +3992,10 @@ short QByteArray::toShort(bool *ok, int base) const
letters for digits beyond 9; A is ten, B is eleven and so on.
If \a base is 0, the base is determined automatically using the following
- rules: If the byte array begins with "0x", it is assumed to be hexadecimal;
- otherwise, if it begins with "0", it is assumed to be octal; otherwise it is
- assumed to be decimal.
+ rules: If the byte array begins with "0x", it is assumed to be hexadecimal
+ (base 16); otherwise, if it begins with "0b", it is assumed to be binary
+ (base 2); otherwise, if it begins with "0", it is assumed to be octal
+ (base 8); otherwise it is assumed to be decimal.
Returns 0 if the conversion fails.
@@ -3649,15 +4006,16 @@ short QByteArray::toShort(bool *ok, int base) const
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number()
*/
ushort QByteArray::toUShort(bool *ok, int base) const
{
- return toIntegral_helper<ushort>(nulTerminated().constData(), ok, base);
+ return QtPrivate::toIntegral<ushort>(qToByteArrayViewIgnoringNull(*this), ok, base);
}
-
/*!
Returns the byte array converted to a \c double value.
@@ -3685,13 +4043,16 @@ ushort QByteArray::toUShort(bool *ok, int base) const
double QByteArray::toDouble(bool *ok) const
{
- bool nonNullOk = false;
- int processed = 0;
- double d = qt_asciiToDouble(constData(), size(),
- nonNullOk, processed, WhitespacesAllowed);
- if (ok)
- *ok = nonNullOk;
- return d;
+ return QByteArrayView(*this).toDouble(ok);
+}
+
+auto QtPrivate::toDouble(QByteArrayView a) noexcept -> ParsedNumber<double>
+{
+ auto r = qt_asciiToDouble(a.data(), a.size(), WhitespacesAllowed);
+ if (r.ok())
+ return ParsedNumber{r.result};
+ else
+ return {};
}
/*!
@@ -3724,6 +4085,17 @@ float QByteArray::toFloat(bool *ok) const
return QLocaleData::convertDoubleToFloat(toDouble(ok), ok);
}
+auto QtPrivate::toFloat(QByteArrayView a) noexcept -> ParsedNumber<float>
+{
+ if (const auto r = toDouble(a)) {
+ bool ok = true;
+ const auto f = QLocaleData::convertDoubleToFloat(*r, &ok);
+ if (ok)
+ return ParsedNumber(f);
+ }
+ return {};
+}
+
/*!
\since 5.2
@@ -3737,27 +4109,29 @@ float QByteArray::toFloat(bool *ok) const
*/
QByteArray QByteArray::toBase64(Base64Options options) const
{
- const char alphabet_base64[] = "ABCDEFGH" "IJKLMNOP" "QRSTUVWX" "YZabcdef"
- "ghijklmn" "opqrstuv" "wxyz0123" "456789+/";
- const char alphabet_base64url[] = "ABCDEFGH" "IJKLMNOP" "QRSTUVWX" "YZabcdef"
- "ghijklmn" "opqrstuv" "wxyz0123" "456789-_";
+ constexpr char alphabet_base64[] = "ABCDEFGH" "IJKLMNOP" "QRSTUVWX" "YZabcdef"
+ "ghijklmn" "opqrstuv" "wxyz0123" "456789+/";
+ constexpr char alphabet_base64url[] = "ABCDEFGH" "IJKLMNOP" "QRSTUVWX" "YZabcdef"
+ "ghijklmn" "opqrstuv" "wxyz0123" "456789-_";
const char *const alphabet = options & Base64UrlEncoding ? alphabet_base64url : alphabet_base64;
- const char padchar = '=';
+ constexpr char padchar = '=';
qsizetype padlen = 0;
- QByteArray tmp((size() + 2) / 3 * 4, Qt::Uninitialized);
+ const qsizetype sz = size();
+
+ QByteArray tmp((sz + 2) / 3 * 4, Qt::Uninitialized);
qsizetype i = 0;
char *out = tmp.data();
- while (i < size()) {
+ while (i < sz) {
// encode 3 bytes at a time
int chunk = 0;
chunk |= int(uchar(data()[i++])) << 16;
- if (i == size()) {
+ if (i == sz) {
padlen = 2;
} else {
chunk |= int(uchar(data()[i++])) << 8;
- if (i == size())
+ if (i == sz)
padlen = 1;
else
chunk |= int(uchar(data()[i++]));
@@ -3792,10 +4166,12 @@ QByteArray QByteArray::toBase64(Base64Options options) const
/*!
\fn QByteArray &QByteArray::setNum(int n, int base)
- Sets the byte array to the printed value of \a n in base \a base (ten by
- default) and returns a reference to the byte array. Bases 2 through 36 are
+ Represent the whole number \a n as text.
+
+ Sets this byte array to a string representing \a n in base \a base (ten by
+ default) and returns a reference to this byte array. Bases 2 through 36 are
supported, using letters for digits beyond 9; A is ten, B is eleven and so
- on. For bases other than ten, n is treated as an unsigned integer.
+ on.
Example:
\snippet code/src_corelib_text_qbytearray.cpp 40
@@ -3850,7 +4226,7 @@ static char *qulltoa2(char *p, qulonglong n, int base)
base = 10;
}
#endif
- const char b = 'a' - 10;
+ constexpr char b = 'a' - 10;
do {
const int c = n % base;
n /= base;
@@ -3867,11 +4243,12 @@ static char *qulltoa2(char *p, qulonglong n, int base)
*/
QByteArray &QByteArray::setNum(qlonglong n, int base)
{
- const int buffsize = 66; // big enough for MAX_ULLONG in base 2
+ constexpr int buffsize = 66; // big enough for MAX_ULLONG in base 2
char buff[buffsize];
char *p;
- if (n < 0 && base == 10) {
+ if (n < 0) {
+ // Take care to avoid overflow on negating min value:
p = qulltoa2(buff + buffsize, qulonglong(-(1 + n)) + 1, base);
*--p = '-';
} else {
@@ -3891,7 +4268,7 @@ QByteArray &QByteArray::setNum(qlonglong n, int base)
QByteArray &QByteArray::setNum(qulonglong n, int base)
{
- const int buffsize = 66; // big enough for MAX_ULLONG in base 2
+ constexpr int buffsize = 66; // big enough for MAX_ULLONG in base 2
char buff[buffsize];
char *p = qulltoa2(buff + buffsize, n, base);
@@ -3903,82 +4280,39 @@ QByteArray &QByteArray::setNum(qulonglong n, int base)
/*!
\overload
- Sets the byte array to the printed value of \a n, formatted in format
- \a f with precision \a prec, and returns a reference to the
- byte array.
-
- The format \a f can be any of the following:
-
- \table
- \header \li Format \li Meaning
- \row \li \c e \li format as [-]9.9e[+|-]999
- \row \li \c E \li format as [-]9.9E[+|-]999
- \row \li \c f \li format as [-]9.9
- \row \li \c g \li use \c e or \c f format, whichever is the most concise
- \row \li \c G \li use \c E or \c f format, whichever is the most concise
- \endtable
+ Represent the floating-point number \a n as text.
- With 'e', 'E', and 'f', \a prec is the number of digits after the
- decimal point. With 'g' and 'G', \a prec is the maximum number of
- significant digits (trailing zeroes are omitted).
+ Sets this byte array to a string representing \a n, with a given \a format
+ and \a precision (with the same meanings as for \l {QString::number(double,
+ char, int)}), and returns a reference to this byte array.
- \note The format of the number is not localized; the default C locale is
- used regardless of the user's locale. Use QLocale to perform locale-aware
- conversions between numbers and strings.
-
- \sa toDouble()
+ \sa toDouble(), QLocale::FloatingPointPrecisionOption
*/
-QByteArray &QByteArray::setNum(double n, char f, int prec)
+QByteArray &QByteArray::setNum(double n, char format, int precision)
{
- QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- uint flags = QLocaleData::ZeroPadExponent;
-
- char lower = asciiLower(uchar(f));
- if (f != lower)
- flags |= QLocaleData::CapitalEorX;
- f = lower;
-
- switch (f) {
- case 'f':
- form = QLocaleData::DFDecimal;
- break;
- case 'e':
- form = QLocaleData::DFExponent;
- break;
- case 'g':
- form = QLocaleData::DFSignificantDigits;
- break;
- default:
-#if defined(QT_CHECK_RANGE)
- qWarning("QByteArray::setNum: Invalid format char '%c'", f);
-#endif
- break;
- }
-
- *this = QLocaleData::c()->doubleToString(n, prec, form, -1, flags).toUtf8();
- return *this;
+ return *this = QByteArray::number(n, format, precision);
}
/*!
- \fn QByteArray &QByteArray::setNum(float n, char f, int prec)
+ \fn QByteArray &QByteArray::setNum(float n, char format, int precision)
\overload
- Sets the byte array to the printed value of \a n, formatted in format
- \a f with precision \a prec, and returns a reference to the
- byte array.
+ Represent the floating-point number \a n as text.
- \note The format of the number is not localized; the default C locale is
- used regardless of the user's locale. Use QLocale to perform locale-aware
- conversions between numbers and strings.
+ Sets this byte array to a string representing \a n, with a given \a format
+ and \a precision (with the same meanings as for \l {QString::number(double,
+ char, int)}), and returns a reference to this byte array.
\sa toFloat()
*/
/*!
- Returns a byte array containing the printed value of the number \a n to base
- \a base (ten by default). Bases 2 through 36 are supported, using letters
- for digits beyond 9: A is ten, B is eleven and so on.
+ Returns a byte-array representing the whole number \a n as text.
+
+ Returns a byte array containing a string representing \a n, using the
+ specified \a base (ten by default). Bases 2 through 36 are supported, using
+ letters for digits beyond 9: A is ten, B is eleven and so on.
Example:
\snippet code/src_corelib_text_qbytearray.cpp 41
@@ -4058,39 +4392,38 @@ QByteArray QByteArray::number(qulonglong n, int base)
/*!
\overload
+ Returns a byte-array representing the floating-point number \a n as text.
- Returns a byte array that contains the printed value of \a n,
- formatted in format \a f with precision \a prec.
-
- Argument \a n is formatted according to the \a f format specified,
- which is \c g by default, and can be any of the following:
-
- \table
- \header \li Format \li Meaning
- \row \li \c e \li format as [-]9.9e[+|-]999
- \row \li \c E \li format as [-]9.9E[+|-]999
- \row \li \c f \li format as [-]9.9
- \row \li \c g \li use \c e or \c f format, whichever is the most concise
- \row \li \c G \li use \c E or \c f format, whichever is the most concise
- \endtable
-
- With 'e', 'E', and 'f', \a prec is the number of digits after the
- decimal point. With 'g' and 'G', \a prec is the maximum number of
- significant digits (trailing zeroes are omitted).
+ Returns a byte array containing a string representing \a n, with a given \a
+ format and \a precision, with the same meanings as for \l
+ {QString::number(double, char, int)}. For example:
\snippet code/src_corelib_text_qbytearray.cpp 42
- \note The format of the number is not localized; the default C locale is
- used regardless of the user's locale. Use QLocale to perform locale-aware
- conversions between numbers and strings.
-
- \sa toDouble()
+ \sa toDouble(), QLocale::FloatingPointPrecisionOption
*/
-QByteArray QByteArray::number(double n, char f, int prec)
+QByteArray QByteArray::number(double n, char format, int precision)
{
- QByteArray s;
- s.setNum(n, f, prec);
- return s;
+ QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
+
+ switch (QtMiscUtils::toAsciiLower(format)) {
+ case 'f':
+ form = QLocaleData::DFDecimal;
+ break;
+ case 'e':
+ form = QLocaleData::DFExponent;
+ break;
+ case 'g':
+ form = QLocaleData::DFSignificantDigits;
+ break;
+ default:
+#if defined(QT_CHECK_RANGE)
+ qWarning("QByteArray::setNum: Invalid format char '%c'", format);
+#endif
+ break;
+ }
+
+ return qdtoAscii(n, form, precision, isUpperCaseAscii(format));
}
/*!
@@ -4263,7 +4596,7 @@ QByteArray::FromBase64Result QByteArray::fromBase64Encoding(QByteArray &&base64,
base64.size(),
base64.data(), // in-place
options);
- base64.truncate(int(base64result.decodedLength));
+ base64.truncate(base64result.decodedLength);
return { std::move(base64), base64result.status };
}
@@ -4279,7 +4612,7 @@ QByteArray::FromBase64Result QByteArray::fromBase64Encoding(const QByteArray &ba
base64Size,
const_cast<char *>(result.constData()),
options);
- result.truncate(int(base64result.decodedLength));
+ result.truncate(base64result.decodedLength);
return { std::move(result), base64result.status };
}
@@ -4315,9 +4648,9 @@ QByteArray QByteArray::fromBase64(const QByteArray &base64, Base64Options option
}
/*!
- Returns a decoded copy of the hex encoded array \a hexEncoded. Input is not checked
- for validity; invalid characters in the input are skipped, enabling the
- decoding process to continue with subsequent characters.
+ Returns a decoded copy of the hex encoded array \a hexEncoded. Input is not
+ checked for validity; invalid characters in the input are skipped, enabling
+ the decoding process to continue with subsequent characters.
For example:
@@ -4350,10 +4683,13 @@ QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)
return res;
}
-/*! Returns a hex encoded copy of the byte array. The hex encoding uses the numbers 0-9 and
- the letters a-f.
+/*!
+ Returns a hex encoded copy of the byte array.
+
+ The hex encoding uses the numbers 0-9 and the letters a-f.
- If \a separator is not '\0', the separator character is inserted between the hex bytes.
+ If \a separator is not '\0', the separator character is inserted between
+ the hex bytes.
Example:
\snippet code/src_corelib_text_qbytearray.cpp 50
@@ -4389,7 +4725,7 @@ static void q_fromPercentEncoding(QByteArray *ba, char percent)
const char *inputPtr = data;
qsizetype i = 0;
- qsizetype len = ba->count();
+ qsizetype len = ba->size();
qsizetype outlen = 0;
int a, b;
char c;
@@ -4420,20 +4756,17 @@ static void q_fromPercentEncoding(QByteArray *ba, char percent)
ba->truncate(outlen);
}
-void q_fromPercentEncoding(QByteArray *ba)
-{
- q_fromPercentEncoding(ba, '%');
-}
-
/*!
- \since 4.4
+ \since 6.4
- Returns a decoded copy of the URI/URL-style percent-encoded \a input.
- The \a percent parameter allows you to replace the '%' character for
- another (for instance, '_' or '=').
+ Decodes URI/URL-style percent-encoding.
+
+ Returns a byte array containing the decoded text. The \a percent parameter
+ allows use of a different character than '%' (for instance, '_' or '=') as
+ the escape character.
For example:
- \snippet code/src_corelib_text_qbytearray.cpp 51
+ \snippet code/src_corelib_text_qbytearray.cpp 54
\note Given invalid input (such as a string containing the sequence "%G5",
which is not a valid hexadecimal number) the output will be invalid as
@@ -4441,18 +4774,35 @@ void q_fromPercentEncoding(QByteArray *ba)
\sa toPercentEncoding(), QUrl::fromPercentEncoding()
*/
-QByteArray QByteArray::fromPercentEncoding(const QByteArray &input, char percent)
+QByteArray QByteArray::percentDecoded(char percent) const
{
- if (input.isNull())
- return QByteArray(); // preserve null
- if (input.isEmpty())
- return QByteArray(input.data(), 0);
+ if (isEmpty())
+ return *this; // Preserves isNull().
- QByteArray tmp = input;
+ QByteArray tmp = *this;
q_fromPercentEncoding(&tmp, percent);
return tmp;
}
+/*!
+ \since 4.4
+
+ Decodes \a input from URI/URL-style percent-encoding.
+
+ Returns a byte array containing the decoded text. The \a percent parameter
+ allows use of a different character than '%' (for instance, '_' or '=') as
+ the escape character. Equivalent to input.percentDecoded(percent).
+
+ For example:
+ \snippet code/src_corelib_text_qbytearray.cpp 51
+
+ \sa percentDecoded()
+*/
+QByteArray QByteArray::fromPercentEncoding(const QByteArray &input, char percent)
+{
+ return input.percentDecoded(percent);
+}
+
/*! \fn QByteArray QByteArray::fromStdString(const std::string &str)
\since 5.4
@@ -4460,6 +4810,10 @@ QByteArray QByteArray::fromPercentEncoding(const QByteArray &input, char percent
\sa toStdString(), QString::fromStdString()
*/
+QByteArray QByteArray::fromStdString(const std::string &s)
+{
+ return QByteArray(s.data(), qsizetype(s.size()));
+}
/*!
\fn std::string QByteArray::toStdString() const
@@ -4473,68 +4827,9 @@ QByteArray QByteArray::fromPercentEncoding(const QByteArray &input, char percent
\sa fromStdString(), QString::toStdString()
*/
-
-static inline bool q_strchr(const char str[], char chr)
+std::string QByteArray::toStdString() const
{
- if (!str) return false;
-
- const char *ptr = str;
- char c;
- while ((c = *ptr++))
- if (c == chr)
- return true;
- return false;
-}
-
-static void q_toPercentEncoding(QByteArray *ba, const char *dontEncode, const char *alsoEncode, char percent)
-{
- if (ba->isEmpty())
- return;
-
- QByteArray input = *ba;
- qsizetype len = input.count();
- const char *inputData = input.constData();
- char *output = nullptr;
- qsizetype length = 0;
-
- for (qsizetype i = 0; i < len; ++i) {
- unsigned char c = *inputData++;
- if (((c >= 0x61 && c <= 0x7A) // ALPHA
- || (c >= 0x41 && c <= 0x5A) // ALPHA
- || (c >= 0x30 && c <= 0x39) // DIGIT
- || c == 0x2D // -
- || c == 0x2E // .
- || c == 0x5F // _
- || c == 0x7E // ~
- || q_strchr(dontEncode, c))
- && !q_strchr(alsoEncode, c)) {
- if (output)
- output[length] = c;
- ++length;
- } else {
- if (!output) {
- // detach now
- ba->resize(len*3); // worst case
- output = ba->data();
- }
- output[length++] = percent;
- output[length++] = QtMiscUtils::toHexUpper((c & 0xf0) >> 4);
- output[length++] = QtMiscUtils::toHexUpper(c & 0xf);
- }
- }
- if (output)
- ba->truncate(length);
-}
-
-void q_toPercentEncoding(QByteArray *ba, const char *exclude, const char *include)
-{
- q_toPercentEncoding(ba, exclude, include, '%');
-}
-
-void q_normalizePercentEncoding(QByteArray *ba, const char *exclude)
-{
- q_fromPercentEncoding(ba, '%');
- q_toPercentEncoding(ba, exclude, nullptr, '%');
+ return std::string(data(), size_t(size()));
}
/*!
@@ -4569,23 +4864,100 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA
if (isEmpty())
return QByteArray(data(), 0);
- QByteArray include2 = include;
- if (percent != '%') // the default
- if ((percent >= 0x61 && percent <= 0x7A) // ALPHA
- || (percent >= 0x41 && percent <= 0x5A) // ALPHA
- || (percent >= 0x30 && percent <= 0x39) // DIGIT
- || percent == 0x2D // -
- || percent == 0x2E // .
- || percent == 0x5F // _
- || percent == 0x7E) // ~
- include2 += percent;
+ const auto contains = [](const QByteArray &view, char c) {
+ // As view.contains(c), but optimised to bypass a lot of overhead:
+ return view.size() > 0 && memchr(view.data(), c, view.size()) != nullptr;
+ };
QByteArray result = *this;
- q_toPercentEncoding(&result, exclude.nulTerminated().constData(), include2.nulTerminated().constData(), percent);
+ char *output = nullptr;
+ qsizetype length = 0;
+
+ for (unsigned char c : *this) {
+ if (char(c) != percent
+ && ((c >= 0x61 && c <= 0x7A) // ALPHA
+ || (c >= 0x41 && c <= 0x5A) // ALPHA
+ || (c >= 0x30 && c <= 0x39) // DIGIT
+ || c == 0x2D // -
+ || c == 0x2E // .
+ || c == 0x5F // _
+ || c == 0x7E // ~
+ || contains(exclude, c))
+ && !contains(include, c)) {
+ if (output)
+ output[length] = c;
+ ++length;
+ } else {
+ if (!output) {
+ // detach now
+ result.resize(size() * 3); // worst case
+ output = result.data();
+ }
+ output[length++] = percent;
+ output[length++] = QtMiscUtils::toHexUpper((c & 0xf0) >> 4);
+ output[length++] = QtMiscUtils::toHexUpper(c & 0xf);
+ }
+ }
+ if (output)
+ result.truncate(length);
return result;
}
+#if defined(Q_OS_WASM) || defined(Q_QDOC)
+
+/*!
+ Constructs a new QByteArray containing a copy of the Uint8Array \a uint8array.
+
+ This function transfers data from a JavaScript data buffer - which
+ is not addressable from C++ code - to heap memory owned by a QByteArray.
+ The Uint8Array can be released once this function returns and a copy
+ has been made.
+
+ The \a uint8array argument must an emscripten::val referencing an Uint8Array
+ object, e.g. obtained from a global JavaScript variable:
+
+ \snippet code/src_corelib_text_qbytearray.cpp 55
+
+ This function returns a null QByteArray if the size of the Uint8Array
+ exceeds the maximum capacity of QByteArray, or if the \a uint8array
+ argument is not of the Uint8Array type.
+
+ \since 6.5
+ \ingroup platform-type-conversions
+
+ \sa toEcmaUint8Array()
+*/
+
+QByteArray QByteArray::fromEcmaUint8Array(emscripten::val uint8array)
+{
+ return qstdweb::Uint8Array(uint8array).copyToQByteArray();
+}
+
+/*!
+ Creates a Uint8Array from a QByteArray.
+
+ This function transfers data from heap memory owned by a QByteArray
+ to a JavaScript data buffer. The function allocates and copies into an
+ ArrayBuffer, and returns a Uint8Array view to that buffer.
+
+ The JavaScript objects own a copy of the data, and this
+ QByteArray can be safely deleted after the copy has been made.
+
+ \snippet code/src_corelib_text_qbytearray.cpp 56
+
+ \since 6.5
+ \ingroup platform-type-conversions
+
+ \sa toEcmaUint8Array()
+*/
+emscripten::val QByteArray::toEcmaUint8Array()
+{
+ return qstdweb::Uint8Array::copyFrom(*this).val();
+}
+
+#endif
+
/*! \typedef QByteArray::ConstIterator
\internal
*/
@@ -4682,6 +5054,57 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA
\sa QStringLiteral
*/
+#if QT_DEPRECATED_SINCE(6, 8)
+/*!
+ \fn QtLiterals::operator""_qba(const char *str, size_t size)
+
+ \relates QByteArray
+ \since 6.2
+ \deprecated [6.8] Use \c _ba from Qt::StringLiterals namespace instead.
+
+ Literal operator that creates a QByteArray out of the first \a size characters
+ in the char string literal \a str.
+
+ The QByteArray is created at compile time, and the generated string data is stored
+ in the read-only segment of the compiled object file. Duplicate literals may share
+ the same read-only memory. This functionality is interchangeable with
+ QByteArrayLiteral, but saves typing when many string literals are present in the
+ code.
+
+ The following code creates a QByteArray:
+ \code
+ auto str = "hello"_qba;
+ \endcode
+
+ \sa QByteArrayLiteral, QtLiterals::operator""_qs(const char16_t *str, size_t size)
+*/
+#endif // QT_DEPRECATED_SINCE(6, 8)
+
+/*!
+ \fn Qt::Literals::StringLiterals::operator""_ba(const char *str, size_t size)
+
+ \relates QByteArray
+ \since 6.4
+
+ Literal operator that creates a QByteArray out of the first \a size characters
+ in the char string literal \a str.
+
+ The QByteArray is created at compile time, and the generated string data is stored
+ in the read-only segment of the compiled object file. Duplicate literals may share
+ the same read-only memory. This functionality is interchangeable with
+ QByteArrayLiteral, but saves typing when many string literals are present in the
+ code.
+
+ The following code creates a QByteArray:
+ \code
+ using namespace Qt::Literals::StringLiterals;
+
+ auto str = "hello"_ba;
+ \endcode
+
+ \sa Qt::Literals::StringLiterals
+*/
+
/*!
\class QByteArray::FromBase64Result
\inmodule QtCore
@@ -4734,8 +5157,7 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA
*/
/*!
- \fn bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
- \relates QByteArray::FromBase64Result
+ \fn bool QByteArray::FromBase64Result::operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns \c true if \a lhs and \a rhs are equal, otherwise returns \c false.
@@ -4745,10 +5167,10 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA
*/
/*!
- \fn bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
- \relates QByteArray::FromBase64Result
+ \fn bool QByteArray::FromBase64Result::operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
- Returns \c true if \a lhs and \a rhs are different, otherwise returns \c false.
+ Returns \c true if \a lhs and \a rhs are different, otherwise
+ returns \c false.
*/
/*!
@@ -4762,4 +5184,27 @@ size_t qHash(const QByteArray::FromBase64Result &key, size_t seed) noexcept
return qHashMulti(seed, key.decoded, static_cast<int>(key.decodingStatus));
}
+/*! \fn template <typename T> qsizetype erase(QByteArray &ba, const T &t)
+ \relates QByteArray
+ \since 6.1
+
+ Removes all elements that compare equal to \a t from the
+ byte array \a ba. Returns the number of elements removed, if any.
+
+ \sa erase_if
+*/
+
+/*! \fn template <typename Predicate> qsizetype erase_if(QByteArray &ba, Predicate pred)
+ \relates QByteArray
+ \since 6.1
+
+ Removes all elements for which the predicate \a pred returns true
+ from the byte array \a ba. Returns the number of elements removed, if
+ any.
+
+ \sa erase
+*/
+
QT_END_NAMESPACE
+
+#undef REHASH
diff --git a/src/corelib/text/qbytearray.h b/src/corelib/text/qbytearray.h
index 8855f25dac..3c8a3bba45 100644
--- a/src/corelib/text/qbytearray.h
+++ b/src/corelib/text/qbytearray.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QBYTEARRAY_H
#define QBYTEARRAY_H
@@ -45,19 +9,19 @@
#include <QtCore/qnamespace.h>
#include <QtCore/qarraydata.h>
#include <QtCore/qarraydatapointer.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qcontainerfwd.h>
#include <QtCore/qbytearrayalgorithms.h>
#include <QtCore/qbytearrayview.h>
#include <stdlib.h>
#include <string.h>
-#include <stdarg.h>
#include <string>
#include <iterator>
#ifndef QT5_NULL_STRINGS
-// ### Should default to 0 in Qt 6.0
+// Would ideally be off, but in practice breaks too much (Qt 6.0).
#define QT5_NULL_STRINGS 1
#endif
@@ -70,55 +34,15 @@ Q_FORWARD_DECLARE_CF_TYPE(CFData);
Q_FORWARD_DECLARE_OBJC_CLASS(NSData);
#endif
-QT_BEGIN_NAMESPACE
-
-
-/*****************************************************************************
- Safe and portable C string functions; extensions to standard string.h
- *****************************************************************************/
-
-Q_CORE_EXPORT char *qstrdup(const char *);
-
-inline size_t qstrlen(const char *str)
-{ return str ? strlen(str) : 0; }
-
-inline size_t qstrnlen(const char *str, size_t maxlen)
-{
- size_t length = 0;
- if (str) {
- while (length < maxlen && *str++)
- length++;
- }
- return length;
+#if defined(Q_OS_WASM) || defined(Q_QDOC)
+namespace emscripten {
+ class val;
}
+#endif
-Q_CORE_EXPORT char *qstrcpy(char *dst, const char *src);
-Q_CORE_EXPORT char *qstrncpy(char *dst, const char *src, size_t len);
-
-Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2);
+class tst_QByteArray;
-inline int qstrncmp(const char *str1, const char *str2, size_t len)
-{
- return (str1 && str2) ? strncmp(str1, str2, len)
- : (str1 ? 1 : (str2 ? -1 : 0));
-}
-Q_CORE_EXPORT int qstricmp(const char *, const char *);
-Q_CORE_EXPORT int qstrnicmp(const char *, const char *, size_t len);
-Q_CORE_EXPORT int qstrnicmp(const char *, qsizetype, const char *, qsizetype = -1);
-
-// implemented in qvsnprintf.cpp
-Q_CORE_EXPORT int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt, ...);
-
-// qChecksum: Internet checksum
-Q_CORE_EXPORT quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309);
-
-#if QT_DEPRECATED_SINCE(6, 0)
-QT_DEPRECATED_VERSION_X_6_0("Use the QByteArrayView overload.")
-inline quint16 qChecksum(const char *s, qsizetype len,
- Qt::ChecksumType standard = Qt::ChecksumIso3309)
-{ return qChecksum(QByteArrayView(s, len), standard); }
-#endif
+QT_BEGIN_NAMESPACE
class QString;
class QDataStream;
@@ -138,6 +62,11 @@ private:
DataPointer d;
static const char _empty;
+
+ friend class ::tst_QByteArray;
+
+ template <typename InputIterator>
+ using if_input_iterator = QtPrivate::IfIsInputIterator<InputIterator>;
public:
enum Base64Option {
@@ -163,20 +92,22 @@ public:
QByteArray(const char *, qsizetype size = -1);
QByteArray(qsizetype size, char c);
QByteArray(qsizetype size, Qt::Initialization);
+ explicit QByteArray(QByteArrayView v) : QByteArray(v.data(), v.size()) {}
inline QByteArray(const QByteArray &) noexcept;
inline ~QByteArray();
QByteArray &operator=(const QByteArray &) noexcept;
QByteArray &operator=(const char *str);
inline QByteArray(QByteArray && other) noexcept
- { qSwap(d, other.d); }
- inline QByteArray &operator=(QByteArray &&other) noexcept
- { qSwap(d, other.d); return *this; }
+ = default;
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QByteArray)
inline void swap(QByteArray &other) noexcept
- { qSwap(d, other.d); }
+ { d.swap(other.d); }
- inline bool isEmpty() const;
+ bool isEmpty() const noexcept { return size() == 0; }
void resize(qsizetype size);
+ void resize(qsizetype size, char c);
+ void resizeForOverwrite(qsizetype size);
QByteArray &fill(char c, qsizetype size = -1);
@@ -189,28 +120,32 @@ public:
inline operator const void *() const;
#endif
inline char *data();
- inline const char *data() const;
- inline const char *constData() const;
+ inline const char *data() const noexcept;
+ const char *constData() const noexcept { return data(); }
inline void detach();
inline bool isDetached() const;
- inline bool isSharedWith(const QByteArray &other) const
+ inline bool isSharedWith(const QByteArray &other) const noexcept
{ return data() == other.data() && size() == other.size(); }
void clear();
inline char at(qsizetype i) const;
inline char operator[](qsizetype i) const;
- Q_REQUIRED_RESULT inline char &operator[](qsizetype i);
- Q_REQUIRED_RESULT char front() const { return at(0); }
- Q_REQUIRED_RESULT inline char &front();
- Q_REQUIRED_RESULT char back() const { return at(size() - 1); }
- Q_REQUIRED_RESULT inline char &back();
+ [[nodiscard]] inline char &operator[](qsizetype i);
+ [[nodiscard]] char front() const { return at(0); }
+ [[nodiscard]] inline char &front();
+ [[nodiscard]] char back() const { return at(size() - 1); }
+ [[nodiscard]] inline char &back();
+ QT_CORE_INLINE_SINCE(6, 7)
qsizetype indexOf(char c, qsizetype from = 0) const;
qsizetype indexOf(QByteArrayView bv, qsizetype from = 0) const
{ return QtPrivate::findByteArray(qToByteArrayViewIgnoringNull(*this), from, bv); }
+ QT_CORE_INLINE_SINCE(6, 7)
qsizetype lastIndexOf(char c, qsizetype from = -1) const;
- qsizetype lastIndexOf(QByteArrayView bv, qsizetype from = -1) const
+ qsizetype lastIndexOf(QByteArrayView bv) const
+ { return lastIndexOf(bv, size()); }
+ qsizetype lastIndexOf(QByteArrayView bv, qsizetype from) const
{ return QtPrivate::lastIndexOf(qToByteArrayViewIgnoringNull(*this), from, bv); }
inline bool contains(char c) const;
@@ -221,20 +156,69 @@ public:
inline int compare(QByteArrayView a, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT QByteArray left(qsizetype len) const;
- Q_REQUIRED_RESULT QByteArray right(qsizetype len) const;
- Q_REQUIRED_RESULT QByteArray mid(qsizetype index, qsizetype len = -1) const;
-
- Q_REQUIRED_RESULT QByteArray first(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QByteArray(data(), n); }
- Q_REQUIRED_RESULT QByteArray last(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QByteArray(data() + size() - n, n); }
- Q_REQUIRED_RESULT QByteArray sliced(qsizetype pos) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(pos <= size()); return QByteArray(data() + pos, size() - pos); }
- Q_REQUIRED_RESULT QByteArray sliced(qsizetype pos, qsizetype n) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(n >= 0); Q_ASSERT(size_t(pos) + size_t(n) <= size_t(size())); return QByteArray(data() + pos, n); }
- Q_REQUIRED_RESULT QByteArray chopped(qsizetype len) const
- { Q_ASSERT(len >= 0); Q_ASSERT(len <= size()); return first(size() - len); }
+#if QT_CORE_REMOVED_SINCE(6, 7)
+ QByteArray left(qsizetype len) const;
+ QByteArray right(qsizetype len) const;
+ QByteArray mid(qsizetype index, qsizetype len = -1) const;
+ QByteArray first(qsizetype n) const;
+ QByteArray last(qsizetype n) const;
+ QByteArray sliced(qsizetype pos) const;
+ QByteArray sliced(qsizetype pos, qsizetype n) const;
+ QByteArray chopped(qsizetype len) const;
+#else
+ [[nodiscard]] QByteArray left(qsizetype n) const &
+ {
+ if (n >= size())
+ return *this;
+ return first(qMax(n, 0));
+ }
+ [[nodiscard]] QByteArray left(qsizetype n) &&
+ {
+ if (n >= size())
+ return std::move(*this);
+ return std::move(*this).first(qMax(n, 0));
+ }
+ [[nodiscard]] QByteArray right(qsizetype n) const &
+ {
+ if (n >= size())
+ return *this;
+ return last(qMax(n, 0));
+ }
+ [[nodiscard]] QByteArray right(qsizetype n) &&
+ {
+ if (n >= size())
+ return std::move(*this);
+ return std::move(*this).last(qMax(n, 0));
+ }
+ [[nodiscard]] QByteArray mid(qsizetype index, qsizetype len = -1) const &;
+ [[nodiscard]] QByteArray mid(qsizetype index, qsizetype len = -1) &&;
+
+ [[nodiscard]] QByteArray first(qsizetype n) const &
+ { verify(0, n); return sliced(0, n); }
+ [[nodiscard]] QByteArray last(qsizetype n) const &
+ { verify(0, n); return sliced(size() - n, n); }
+ [[nodiscard]] QByteArray sliced(qsizetype pos) const &
+ { verify(pos, 0); return sliced(pos, size() - pos); }
+ [[nodiscard]] QByteArray sliced(qsizetype pos, qsizetype n) const &
+ { verify(pos, n); return QByteArray(d.data() + pos, n); }
+ [[nodiscard]] QByteArray chopped(qsizetype len) const &
+ { verify(0, len); return sliced(0, size() - len); }
+
+ [[nodiscard]] QByteArray first(qsizetype n) &&
+ {
+ verify(0, n);
+ resize(n); // may detach and allocate memory
+ return std::move(*this);
+ }
+ [[nodiscard]] QByteArray last(qsizetype n) &&
+ { verify(0, n); return sliced_helper(*this, size() - n, n); }
+ [[nodiscard]] QByteArray sliced(qsizetype pos) &&
+ { verify(pos, 0); return sliced_helper(*this, pos, size() - pos); }
+ [[nodiscard]] QByteArray sliced(qsizetype pos, qsizetype n) &&
+ { verify(pos, n); return sliced_helper(*this, pos, n); }
+ [[nodiscard]] QByteArray chopped(qsizetype len) &&
+ { verify(0, len); return std::move(*this).first(size() - len); }
+#endif
bool startsWith(QByteArrayView bv) const
{ return QtPrivate::startsWith(qToByteArrayViewIgnoringNull(*this), bv); }
@@ -247,35 +231,51 @@ public:
bool isUpper() const;
bool isLower() const;
+ [[nodiscard]] bool isValidUtf8() const noexcept
+ {
+ return QtPrivate::isValidUtf8(qToByteArrayViewIgnoringNull(*this));
+ }
+
void truncate(qsizetype pos);
void chop(qsizetype n);
-#if !defined(Q_CLANG_QDOC)
- Q_REQUIRED_RESULT QByteArray toLower() const &
+ QByteArray &slice(qsizetype pos)
+ { verify(pos, 0); return remove(0, pos); }
+ QByteArray &slice(qsizetype pos, qsizetype n)
+ {
+ verify(pos, n);
+ if (isNull())
+ return *this;
+ resize(pos + n);
+ return remove(0, pos);
+ }
+
+#if !defined(Q_QDOC)
+ [[nodiscard]] QByteArray toLower() const &
{ return toLower_helper(*this); }
- Q_REQUIRED_RESULT QByteArray toLower() &&
+ [[nodiscard]] QByteArray toLower() &&
{ return toLower_helper(*this); }
- Q_REQUIRED_RESULT QByteArray toUpper() const &
+ [[nodiscard]] QByteArray toUpper() const &
{ return toUpper_helper(*this); }
- Q_REQUIRED_RESULT QByteArray toUpper() &&
+ [[nodiscard]] QByteArray toUpper() &&
{ return toUpper_helper(*this); }
- Q_REQUIRED_RESULT QByteArray trimmed() const &
+ [[nodiscard]] QByteArray trimmed() const &
{ return trimmed_helper(*this); }
- Q_REQUIRED_RESULT QByteArray trimmed() &&
+ [[nodiscard]] QByteArray trimmed() &&
{ return trimmed_helper(*this); }
- Q_REQUIRED_RESULT QByteArray simplified() const &
+ [[nodiscard]] QByteArray simplified() const &
{ return simplified_helper(*this); }
- Q_REQUIRED_RESULT QByteArray simplified() &&
+ [[nodiscard]] QByteArray simplified() &&
{ return simplified_helper(*this); }
#else
- Q_REQUIRED_RESULT QByteArray toLower() const;
- Q_REQUIRED_RESULT QByteArray toUpper() const;
- Q_REQUIRED_RESULT QByteArray trimmed() const;
- Q_REQUIRED_RESULT QByteArray simplified() const;
+ [[nodiscard]] QByteArray toLower() const;
+ [[nodiscard]] QByteArray toUpper() const;
+ [[nodiscard]] QByteArray trimmed() const;
+ [[nodiscard]] QByteArray simplified() const;
#endif
- Q_REQUIRED_RESULT QByteArray leftJustified(qsizetype width, char fill = ' ', bool truncate = false) const;
- Q_REQUIRED_RESULT QByteArray rightJustified(qsizetype width, char fill = ' ', bool truncate = false) const;
+ [[nodiscard]] QByteArray leftJustified(qsizetype width, char fill = ' ', bool truncate = false) const;
+ [[nodiscard]] QByteArray rightJustified(qsizetype width, char fill = ' ', bool truncate = false) const;
QByteArray &prepend(char c)
{ return insert(0, QByteArrayView(&c, 1)); }
@@ -284,22 +284,39 @@ public:
{ return insert(0, QByteArrayView(s, qsizetype(qstrlen(s)))); }
QByteArray &prepend(const char *s, qsizetype len)
{ return insert(0, QByteArrayView(s, len)); }
- QByteArray &prepend(const QByteArray &a)
- { return insert(0, a); }
+ QByteArray &prepend(const QByteArray &a);
QByteArray &prepend(QByteArrayView a)
{ return insert(0, a); }
QByteArray &append(char c);
inline QByteArray &append(qsizetype count, char c);
QByteArray &append(const char *s)
- { return append(QByteArrayView(s, qsizetype(qstrlen(s)))); }
+ { return append(s, -1); }
QByteArray &append(const char *s, qsizetype len)
- { return append(QByteArrayView(s, len)); }
+ { return append(QByteArrayView(s, len < 0 ? qsizetype(qstrlen(s)) : len)); }
QByteArray &append(const QByteArray &a);
QByteArray &append(QByteArrayView a)
{ return insert(size(), a); }
+ QByteArray &assign(QByteArrayView v);
+ QByteArray &assign(qsizetype n, char c)
+ {
+ Q_ASSERT(n >= 0);
+ return fill(c, n);
+ }
+ template <typename InputIterator, if_input_iterator<InputIterator> = true>
+ QByteArray &assign(InputIterator first, InputIterator last)
+ {
+ d.assign(first, last);
+ d.data()[d.size] = '\0';
+ return *this;
+ }
+
QByteArray &insert(qsizetype i, QByteArrayView data);
+ inline QByteArray &insert(qsizetype i, const char *s)
+ { return insert(i, QByteArrayView(s)); }
+ inline QByteArray &insert(qsizetype i, const QByteArray &data)
+ { return insert(i, QByteArrayView(data)); }
QByteArray &insert(qsizetype i, qsizetype count, char c);
QByteArray &insert(qsizetype i, char c)
{ return insert(i, QByteArrayView(&c, 1)); }
@@ -307,6 +324,17 @@ public:
{ return insert(i, QByteArrayView(s, len)); }
QByteArray &remove(qsizetype index, qsizetype len);
+ QByteArray &removeAt(qsizetype pos)
+ { return size_t(pos) < size_t(size()) ? remove(pos, 1) : *this; }
+ QByteArray &removeFirst() { return !isEmpty() ? remove(0, 1) : *this; }
+ QByteArray &removeLast() { return !isEmpty() ? remove(size() - 1, 1) : *this; }
+
+ template <typename Predicate>
+ QByteArray &removeIf(Predicate pred)
+ {
+ removeIf_helper(pred);
+ return *this;
+ }
QByteArray &replace(qsizetype index, qsizetype len, const char *s, qsizetype alen)
{ return replace(index, len, QByteArrayView(s, alen)); }
@@ -329,16 +357,18 @@ public:
QList<QByteArray> split(char sep) const;
- Q_REQUIRED_RESULT QByteArray repeated(qsizetype times) const;
+ [[nodiscard]] QByteArray repeated(qsizetype times) const;
#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
- inline QT_ASCII_CAST_WARN bool operator==(const QString &s2) const;
- inline QT_ASCII_CAST_WARN bool operator!=(const QString &s2) const;
- inline QT_ASCII_CAST_WARN bool operator<(const QString &s2) const;
- inline QT_ASCII_CAST_WARN bool operator>(const QString &s2) const;
- inline QT_ASCII_CAST_WARN bool operator<=(const QString &s2) const;
- inline QT_ASCII_CAST_WARN bool operator>=(const QString &s2) const;
-#endif
+#if QT_CORE_REMOVED_SINCE(6, 8)
+ QT_ASCII_CAST_WARN inline bool operator==(const QString &s2) const;
+ QT_ASCII_CAST_WARN inline bool operator!=(const QString &s2) const;
+ QT_ASCII_CAST_WARN inline bool operator<(const QString &s2) const;
+ QT_ASCII_CAST_WARN inline bool operator>(const QString &s2) const;
+ QT_ASCII_CAST_WARN inline bool operator<=(const QString &s2) const;
+ QT_ASCII_CAST_WARN inline bool operator>=(const QString &s2) const;
+#endif // QT_CORE_REMOVED_SINCE(6, 8)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
short toShort(bool *ok = nullptr, int base = 10) const;
ushort toUShort(bool *ok = nullptr, int base = 10) const;
@@ -355,6 +385,7 @@ public:
QByteArray toPercentEncoding(const QByteArray &exclude = QByteArray(),
const QByteArray &include = QByteArray(),
char percent = '%') const;
+ [[nodiscard]] QByteArray percentDecoded(char percent = '%') const;
inline QByteArray &setNum(short, int base = 10);
inline QByteArray &setNum(ushort, int base = 10);
@@ -364,28 +395,28 @@ public:
inline QByteArray &setNum(ulong, int base = 10);
QByteArray &setNum(qlonglong, int base = 10);
QByteArray &setNum(qulonglong, int base = 10);
- inline QByteArray &setNum(float, char f = 'g', int prec = 6);
- QByteArray &setNum(double, char f = 'g', int prec = 6);
+ inline QByteArray &setNum(float, char format = 'g', int precision = 6);
+ QByteArray &setNum(double, char format = 'g', int precision = 6);
QByteArray &setRawData(const char *a, qsizetype n);
- Q_REQUIRED_RESULT static QByteArray number(int, int base = 10);
- Q_REQUIRED_RESULT static QByteArray number(uint, int base = 10);
- Q_REQUIRED_RESULT static QByteArray number(long, int base = 10);
- Q_REQUIRED_RESULT static QByteArray number(ulong, int base = 10);
- Q_REQUIRED_RESULT static QByteArray number(qlonglong, int base = 10);
- Q_REQUIRED_RESULT static QByteArray number(qulonglong, int base = 10);
- Q_REQUIRED_RESULT static QByteArray number(double, char f = 'g', int prec = 6);
- Q_REQUIRED_RESULT static QByteArray fromRawData(const char *data, qsizetype size)
+ [[nodiscard]] static QByteArray number(int, int base = 10);
+ [[nodiscard]] static QByteArray number(uint, int base = 10);
+ [[nodiscard]] static QByteArray number(long, int base = 10);
+ [[nodiscard]] static QByteArray number(ulong, int base = 10);
+ [[nodiscard]] static QByteArray number(qlonglong, int base = 10);
+ [[nodiscard]] static QByteArray number(qulonglong, int base = 10);
+ [[nodiscard]] static QByteArray number(double, char format = 'g', int precision = 6);
+ [[nodiscard]] static QByteArray fromRawData(const char *data, qsizetype size)
{
return QByteArray(DataPointer(nullptr, const_cast<char *>(data), size));
}
class FromBase64Result;
- Q_REQUIRED_RESULT static FromBase64Result fromBase64Encoding(QByteArray &&base64, Base64Options options = Base64Encoding);
- Q_REQUIRED_RESULT static FromBase64Result fromBase64Encoding(const QByteArray &base64, Base64Options options = Base64Encoding);
- Q_REQUIRED_RESULT static QByteArray fromBase64(const QByteArray &base64, Base64Options options = Base64Encoding);
- Q_REQUIRED_RESULT static QByteArray fromHex(const QByteArray &hexEncoded);
- Q_REQUIRED_RESULT static QByteArray fromPercentEncoding(const QByteArray &pctEncoded, char percent = '%');
+ [[nodiscard]] static FromBase64Result fromBase64Encoding(QByteArray &&base64, Base64Options options = Base64Encoding);
+ [[nodiscard]] static FromBase64Result fromBase64Encoding(const QByteArray &base64, Base64Options options = Base64Encoding);
+ [[nodiscard]] static QByteArray fromBase64(const QByteArray &base64, Base64Options options = Base64Encoding);
+ [[nodiscard]] static QByteArray fromHex(const QByteArray &hexEncoded);
+ [[nodiscard]] static QByteArray fromPercentEncoding(const QByteArray &pctEncoded, char percent = '%');
#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
static QByteArray fromCFData(CFDataRef data);
@@ -398,26 +429,31 @@ public:
NSData *toRawNSData() const Q_DECL_NS_RETURNS_AUTORELEASED;
#endif
+#if defined(Q_OS_WASM) || defined(Q_QDOC)
+ static QByteArray fromEcmaUint8Array(emscripten::val uint8array);
+ emscripten::val toEcmaUint8Array();
+#endif
+
typedef char *iterator;
typedef const char *const_iterator;
typedef iterator Iterator;
typedef const_iterator ConstIterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- inline iterator begin();
- inline const_iterator begin() const;
- inline const_iterator cbegin() const;
- inline const_iterator constBegin() const;
- inline iterator end();
- inline const_iterator end() const;
- inline const_iterator cend() const;
- inline const_iterator constEnd() const;
+ iterator begin() { return data(); }
+ const_iterator begin() const noexcept { return d.data(); }
+ const_iterator cbegin() const noexcept { return begin(); }
+ const_iterator constBegin() const noexcept { return begin(); }
+ iterator end() { return begin() + size(); }
+ const_iterator end() const noexcept { return begin() + size(); }
+ const_iterator cend() const noexcept { return end(); }
+ const_iterator constEnd() const noexcept { return end(); }
reverse_iterator rbegin() { return reverse_iterator(end()); }
reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
- const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
- const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); }
- const_reverse_iterator crend() const { return const_reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const noexcept { return rbegin(); }
+ const_reverse_iterator crend() const noexcept { return rend(); }
// stl compatibility
typedef qsizetype size_type;
@@ -444,27 +480,94 @@ public:
void push_front(QByteArrayView a)
{ prepend(a); }
void shrink_to_fit() { squeeze(); }
+ iterator erase(const_iterator first, const_iterator last);
+ inline iterator erase(const_iterator it) { return erase(it, it + 1); }
+ static constexpr qsizetype max_size() noexcept
+ {
+ // -1 to deal with the NUL terminator
+ return Data::max_size() - 1;
+ }
- static inline QByteArray fromStdString(const std::string &s);
- inline std::string toStdString() const;
+ static QByteArray fromStdString(const std::string &s);
+ std::string toStdString() const;
- inline qsizetype size() const { return d->size; }
- inline qsizetype count() const { return size(); }
- inline qsizetype length() const { return size(); }
- bool isNull() const;
+ inline qsizetype size() const noexcept { return d->size; }
+#if QT_DEPRECATED_SINCE(6, 4)
+ QT_DEPRECATED_VERSION_X_6_4("Use size() or length() instead.")
+ inline qsizetype count() const noexcept { return size(); }
+#endif
+ inline qsizetype length() const noexcept { return size(); }
+ QT_CORE_INLINE_SINCE(6, 4)
+ bool isNull() const noexcept;
+ inline const DataPointer &data_ptr() const { return d; }
inline DataPointer &data_ptr() { return d; }
- explicit inline QByteArray(const DataPointer &dd)
- : d(dd)
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
+ explicit inline QByteArray(const DataPointer &dd) : d(dd) {}
+#endif
+ explicit inline QByteArray(DataPointer &&dd) : d(std::move(dd)) {}
+
+private:
+ friend bool comparesEqual(const QByteArray &lhs, const QByteArrayView &rhs) noexcept
+ { return QByteArrayView(lhs) == rhs; }
+ friend Qt::strong_ordering
+ compareThreeWay(const QByteArray &lhs, const QByteArrayView &rhs) noexcept
{
+ const int res = QtPrivate::compareMemory(QByteArrayView(lhs), rhs);
+ return Qt::compareThreeWay(res, 0);
}
+ Q_DECLARE_STRONGLY_ORDERED(QByteArray)
+ Q_DECLARE_STRONGLY_ORDERED(QByteArray, QByteArrayView)
+ Q_DECLARE_STRONGLY_ORDERED(QByteArray, const char *)
+#if defined(__GLIBCXX__) && defined(__cpp_lib_three_way_comparison)
+ // libstdc++ has a bug [0] when `operator const void *()` is preferred over
+ // `operator<=>()` when calling std::less<> and other similar methods.
+ // Fix it by explicitly providing relational operators in such case.
+ // [0]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114153
+ friend bool operator<(const QByteArray &lhs, const QByteArray &rhs) noexcept
+ { return is_lt(compareThreeWay(lhs, rhs)); }
+ friend bool operator<=(const QByteArray &lhs, const QByteArray &rhs) noexcept
+ { return is_lteq(compareThreeWay(lhs, rhs)); }
+ friend bool operator>(const QByteArray &lhs, const QByteArray &rhs) noexcept
+ { return is_gt(compareThreeWay(lhs, rhs)); }
+ friend bool operator>=(const QByteArray &lhs, const QByteArray &rhs) noexcept
+ { return is_gteq(compareThreeWay(lhs, rhs)); }
+#endif // defined(__GLIBCXX__) && defined(__cpp_lib_three_way_comparison)
+
+ // Check isEmpty() instead of isNull() for backwards compatibility.
+ friend bool comparesEqual(const QByteArray &lhs, std::nullptr_t) noexcept
+ { return lhs.isEmpty(); }
+ friend Qt::strong_ordering compareThreeWay(const QByteArray &lhs, std::nullptr_t) noexcept
+ { return lhs.isEmpty() ? Qt::strong_ordering::equivalent : Qt::strong_ordering::greater; }
+ Q_DECLARE_STRONGLY_ORDERED(QByteArray, std::nullptr_t)
+
+ // defined in qstring.cpp
+ friend Q_CORE_EXPORT bool comparesEqual(const QByteArray &lhs, const QChar &rhs) noexcept;
+ friend Q_CORE_EXPORT Qt::strong_ordering
+ compareThreeWay(const QByteArray &lhs, const QChar &rhs) noexcept;
+ friend Q_CORE_EXPORT bool comparesEqual(const QByteArray &lhs, char16_t rhs) noexcept;
+ friend Q_CORE_EXPORT Qt::strong_ordering
+ compareThreeWay(const QByteArray &lhs, char16_t rhs) noexcept;
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ Q_DECLARE_STRONGLY_ORDERED(QByteArray, QChar, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QByteArray, char16_t, QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
-private:
- void reallocData(qsizetype alloc, Data::ArrayOptions options);
- void reallocGrowData(qsizetype alloc, Data::ArrayOptions options);
+
+ void reallocData(qsizetype alloc, QArrayData::AllocationOption option);
+ void reallocGrowData(qsizetype n);
void expand(qsizetype i);
- QByteArray nulTerminated() const;
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos = 0,
+ [[maybe_unused]] qsizetype n = 1) const
+ {
+ Q_ASSERT(pos >= 0);
+ Q_ASSERT(pos <= d.size);
+ Q_ASSERT(n >= 0);
+ Q_ASSERT(n <= d.size - pos);
+ }
+
+ static QByteArray sliced_helper(QByteArray &a, qsizetype pos, qsizetype n);
static QByteArray toLower_helper(const QByteArray &a);
static QByteArray toLower_helper(QByteArray &a);
static QByteArray toUpper_helper(const QByteArray &a);
@@ -473,9 +576,20 @@ private:
static QByteArray trimmed_helper(QByteArray &a);
static QByteArray simplified_helper(const QByteArray &a);
static QByteArray simplified_helper(QByteArray &a);
+ template <typename Predicate>
+ qsizetype removeIf_helper(Predicate pred)
+ {
+ const qsizetype result = d->eraseIf(pred);
+ if (result > 0)
+ d.data()[d.size] = '\0';
+ return result;
+ }
friend class QString;
friend Q_CORE_EXPORT QByteArray qUncompress(const uchar *data, qsizetype nbytes);
+
+ template <typename T> friend qsizetype erase(QByteArray &ba, const T &t);
+ template <typename Predicate> friend qsizetype erase_if(QByteArray &ba, Predicate pred);
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QByteArray::Base64Options)
@@ -484,12 +598,10 @@ inline constexpr QByteArray::QByteArray() noexcept {}
inline QByteArray::~QByteArray() {}
inline char QByteArray::at(qsizetype i) const
-{ Q_ASSERT(size_t(i) < size_t(size())); return d.data()[i]; }
+{ verify(i, 1); return d.data()[i]; }
inline char QByteArray::operator[](qsizetype i) const
-{ Q_ASSERT(size_t(i) < size_t(size())); return d.data()[i]; }
+{ verify(i, 1); return d.data()[i]; }
-inline bool QByteArray::isEmpty() const
-{ return size() == 0; }
#ifndef QT_NO_CAST_FROM_BYTEARRAY
inline QByteArray::operator const char *() const
{ return data(); }
@@ -502,7 +614,7 @@ inline char *QByteArray::data()
Q_ASSERT(d.data());
return d.data();
}
-inline const char *QByteArray::data() const
+inline const char *QByteArray::data() const noexcept
{
#if QT5_NULL_STRINGS == 1
return d.data() ? d.data() : &_empty;
@@ -510,10 +622,8 @@ inline const char *QByteArray::data() const
return d.data();
#endif
}
-inline const char *QByteArray::constData() const
-{ return data(); }
inline void QByteArray::detach()
-{ if (d->needsDetach()) reallocData(size(), d->detachFlags()); }
+{ if (d->needsDetach()) reallocData(size(), QArrayData::KeepSize); }
inline bool QByteArray::isDetached() const
{ return !d->isShared(); }
inline QByteArray::QByteArray(const QByteArray &a) noexcept : d(a.d)
@@ -523,44 +633,26 @@ inline qsizetype QByteArray::capacity() const { return qsizetype(d->constAllocat
inline void QByteArray::reserve(qsizetype asize)
{
- if (d->needsDetach() || asize > capacity() - d->freeSpaceAtBegin()) {
- reallocData(qMax(size(), asize), d->detachFlags() | Data::CapacityReserved);
- } else {
+ if (d->needsDetach() || asize > capacity() - d->freeSpaceAtBegin())
+ reallocData(qMax(size(), asize), QArrayData::KeepSize);
+ if (d->constAllocatedCapacity())
d->setFlag(Data::CapacityReserved);
- }
}
inline void QByteArray::squeeze()
{
- if ((d->flags() & Data::CapacityReserved) == 0)
+ if (!d.isMutable())
return;
- if (d->needsDetach() || size() < capacity()) {
- reallocData(size(), d->detachFlags() & ~Data::CapacityReserved);
- } else {
+ if (d->needsDetach() || size() < capacity())
+ reallocData(size(), QArrayData::KeepSize);
+ if (d->constAllocatedCapacity())
d->clearFlag(Data::CapacityReserved);
- }
}
inline char &QByteArray::operator[](qsizetype i)
-{ Q_ASSERT(i >= 0 && i < size()); return data()[i]; }
+{ verify(i, 1); return data()[i]; }
inline char &QByteArray::front() { return operator[](0); }
inline char &QByteArray::back() { return operator[](size() - 1); }
-inline QByteArray::iterator QByteArray::begin()
-{ return data(); }
-inline QByteArray::const_iterator QByteArray::begin() const
-{ return data(); }
-inline QByteArray::const_iterator QByteArray::cbegin() const
-{ return data(); }
-inline QByteArray::const_iterator QByteArray::constBegin() const
-{ return data(); }
-inline QByteArray::iterator QByteArray::end()
-{ return data() + size(); }
-inline QByteArray::const_iterator QByteArray::end() const
-{ return data() + size(); }
-inline QByteArray::const_iterator QByteArray::cend() const
-{ return data() + size(); }
-inline QByteArray::const_iterator QByteArray::constEnd() const
-{ return data() + size(); }
inline QByteArray &QByteArray::append(qsizetype n, char ch)
{ return insert(size(), n, ch); }
inline QByteArray &QByteArray::prepend(qsizetype n, char ch)
@@ -574,77 +666,58 @@ inline int QByteArray::compare(QByteArrayView a, Qt::CaseSensitivity cs) const n
return cs == Qt::CaseSensitive ? QtPrivate::compareMemory(*this, a) :
qstrnicmp(data(), size(), a.data(), a.size());
}
-inline bool operator==(const QByteArray &a1, const QByteArray &a2) noexcept
-{ return QByteArrayView(a1) == QByteArrayView(a2); }
-inline bool operator==(const QByteArray &a1, const char *a2) noexcept
-{ return a2 ? QtPrivate::compareMemory(a1, a2) == 0 : a1.isEmpty(); }
-inline bool operator==(const char *a1, const QByteArray &a2) noexcept
-{ return a1 ? QtPrivate::compareMemory(a1, a2) == 0 : a2.isEmpty(); }
-inline bool operator!=(const QByteArray &a1, const QByteArray &a2) noexcept
-{ return !(a1==a2); }
-inline bool operator!=(const QByteArray &a1, const char *a2) noexcept
-{ return a2 ? QtPrivate::compareMemory(a1, a2) != 0 : !a1.isEmpty(); }
-inline bool operator!=(const char *a1, const QByteArray &a2) noexcept
-{ return a1 ? QtPrivate::compareMemory(a1, a2) != 0 : !a2.isEmpty(); }
-inline bool operator<(const QByteArray &a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(QByteArrayView(a1), QByteArrayView(a2)) < 0; }
- inline bool operator<(const QByteArray &a1, const char *a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) < 0; }
-inline bool operator<(const char *a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) < 0; }
-inline bool operator<=(const QByteArray &a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(QByteArrayView(a1), QByteArrayView(a2)) <= 0; }
-inline bool operator<=(const QByteArray &a1, const char *a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) <= 0; }
-inline bool operator<=(const char *a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) <= 0; }
-inline bool operator>(const QByteArray &a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(QByteArrayView(a1), QByteArrayView(a2)) > 0; }
-inline bool operator>(const QByteArray &a1, const char *a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) > 0; }
-inline bool operator>(const char *a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) > 0; }
-inline bool operator>=(const QByteArray &a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(QByteArrayView(a1), QByteArrayView(a2)) >= 0; }
-inline bool operator>=(const QByteArray &a1, const char *a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) >= 0; }
-inline bool operator>=(const char *a1, const QByteArray &a2) noexcept
-{ return QtPrivate::compareMemory(a1, a2) >= 0; }
#if !defined(QT_USE_QSTRINGBUILDER)
-inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
+inline QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
{ return QByteArray(a1) += a2; }
-inline const QByteArray operator+(const QByteArray &a1, const char *a2)
+inline QByteArray operator+(QByteArray &&lhs, const QByteArray &rhs)
+{ return std::move(lhs += rhs); }
+inline QByteArray operator+(const QByteArray &a1, const char *a2)
{ return QByteArray(a1) += a2; }
-inline const QByteArray operator+(const QByteArray &a1, char a2)
+inline QByteArray operator+(QByteArray &&lhs, const char *rhs)
+{ return std::move(lhs += rhs); }
+inline QByteArray operator+(const QByteArray &a1, char a2)
{ return QByteArray(a1) += a2; }
-inline const QByteArray operator+(const char *a1, const QByteArray &a2)
+inline QByteArray operator+(QByteArray &&lhs, char rhs)
+{ return std::move(lhs += rhs); }
+inline QByteArray operator+(const char *a1, const QByteArray &a2)
{ return QByteArray(a1) += a2; }
-inline const QByteArray operator+(char a1, const QByteArray &a2)
+inline QByteArray operator+(char a1, const QByteArray &a2)
{ return QByteArray(&a1, 1) += a2; }
#endif // QT_USE_QSTRINGBUILDER
inline QByteArray &QByteArray::setNum(short n, int base)
-{ return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(ushort(n)), base); }
+{ return setNum(qlonglong(n), base); }
inline QByteArray &QByteArray::setNum(ushort n, int base)
{ return setNum(qulonglong(n), base); }
inline QByteArray &QByteArray::setNum(int n, int base)
-{ return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(uint(n)), base); }
+{ return setNum(qlonglong(n), base); }
inline QByteArray &QByteArray::setNum(uint n, int base)
{ return setNum(qulonglong(n), base); }
inline QByteArray &QByteArray::setNum(long n, int base)
-{ return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(ulong(n)), base); }
+{ return setNum(qlonglong(n), base); }
inline QByteArray &QByteArray::setNum(ulong n, int base)
{ return setNum(qulonglong(n), base); }
-inline QByteArray &QByteArray::setNum(float n, char f, int prec)
-{ return setNum(double(n),f,prec); }
-
-inline std::string QByteArray::toStdString() const
-{ return std::string(constData(), length()); }
+inline QByteArray &QByteArray::setNum(float n, char format, int precision)
+{ return setNum(double(n), format, precision); }
-inline QByteArray QByteArray::fromStdString(const std::string &s)
-{ return QByteArray(s.data(), qsizetype(s.size())); }
+#if QT_CORE_INLINE_IMPL_SINCE(6, 4)
+bool QByteArray::isNull() const noexcept
+{
+ return d->isNull();
+}
+#endif
+#if QT_CORE_INLINE_IMPL_SINCE(6, 7)
+qsizetype QByteArray::indexOf(char ch, qsizetype from) const
+{
+ return qToByteArrayViewIgnoringNull(*this).indexOf(ch, from);
+}
+qsizetype QByteArray::lastIndexOf(char ch, qsizetype from) const
+{
+ return qToByteArrayViewIgnoringNull(*this).lastIndexOf(ch, from);
+}
+#endif
-#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QByteArray &);
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QByteArray &);
#endif
@@ -668,8 +741,8 @@ public:
void swap(QByteArray::FromBase64Result &other) noexcept
{
- qSwap(decoded, other.decoded);
- qSwap(decodingStatus, other.decodingStatus);
+ decoded.swap(other.decoded);
+ std::swap(decodingStatus, other.decodingStatus);
}
explicit operator bool() const noexcept { return decodingStatus == QByteArray::Base64DecodingStatus::Ok; }
@@ -682,36 +755,74 @@ public:
QByteArray &operator*() noexcept { return decoded; }
const QByteArray &operator*() const noexcept { return decoded; }
#endif
+
+ friend inline bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
+ {
+ if (lhs.decodingStatus != rhs.decodingStatus)
+ return false;
+
+ if (lhs.decodingStatus == QByteArray::Base64DecodingStatus::Ok && lhs.decoded != rhs.decoded)
+ return false;
+
+ return true;
+ }
+
+ friend inline bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
+ {
+ return !(lhs == rhs);
+ }
};
Q_DECLARE_SHARED(QByteArray::FromBase64Result)
-inline bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
-{
- if (lhs.decodingStatus != rhs.decodingStatus)
- return false;
- if (lhs.decodingStatus == QByteArray::Base64DecodingStatus::Ok && lhs.decoded != rhs.decoded)
- return false;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray::FromBase64Result &key, size_t seed = 0) noexcept;
- return true;
+template <typename T>
+qsizetype erase(QByteArray &ba, const T &t)
+{
+ return ba.removeIf_helper([&t](const auto &e) { return t == e; });
}
-inline bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
+template <typename Predicate>
+qsizetype erase_if(QByteArray &ba, Predicate pred)
{
- return !operator==(lhs, rhs);
+ return ba.removeIf_helper(pred);
}
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray::FromBase64Result &key, size_t seed = 0) noexcept;
-
//
// QByteArrayView members that require QByteArray:
//
QByteArray QByteArrayView::toByteArray() const
{
- return QByteArray(data(), size());
+ return QByteArray(*this);
+}
+
+namespace Qt {
+inline namespace Literals {
+inline namespace StringLiterals {
+
+inline QByteArray operator""_ba(const char *str, size_t size) noexcept
+{
+ return QByteArray(QByteArrayData(nullptr, const_cast<char *>(str), qsizetype(size)));
}
+} // StringLiterals
+} // Literals
+} // Qt
+
+inline namespace QtLiterals {
+#if QT_DEPRECATED_SINCE(6, 8)
+
+QT_DEPRECATED_VERSION_X_6_8("Use _ba from Qt::StringLiterals namespace instead.")
+inline QByteArray operator""_qba(const char *str, size_t size) noexcept
+{
+ return Qt::StringLiterals::operator""_ba(str, size);
+}
+
+#endif // QT_DEPRECATED_SINCE(6, 8)
+} // QtLiterals
+
QT_END_NAMESPACE
#endif // QBYTEARRAY_H
diff --git a/src/corelib/text/qbytearray_p.h b/src/corelib/text/qbytearray_p.h
deleted file mode 100644
index 90552cb442..0000000000
--- a/src/corelib/text/qbytearray_p.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QBYTEARRAY_P_H
-#define QBYTEARRAY_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of other Qt classes. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qbytearray.h>
-#include "private/qtools_p.h"
-
-QT_BEGIN_NAMESPACE
-
-// -1 because of the terminating NUL
-constexpr qsizetype MaxByteArraySize = MaxAllocSize - sizeof(std::remove_pointer<QByteArray::DataPointer>::type) - 1;
-constexpr qsizetype MaxStringSize = (MaxAllocSize - sizeof(std::remove_pointer<QByteArray::DataPointer>::type)) / 2 - 1;
-
-QT_END_NAMESPACE
-
-#endif // QBYTEARRAY_P_H
diff --git a/src/corelib/text/qbytearrayalgorithms.h b/src/corelib/text/qbytearrayalgorithms.h
index fdcd00a8c1..7060161bb4 100644
--- a/src/corelib/text/qbytearrayalgorithms.h
+++ b/src/corelib/text/qbytearrayalgorithms.h
@@ -1,47 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QBYTEARRAYALGORITHMS_H
#define QBYTEARRAYALGORITHMS_H
#include <QtCore/qnamespace.h>
+#include <string.h>
+#include <stdarg.h>
+
#if 0
#pragma qt_class(QByteArrayAlgorithms)
#endif
@@ -58,10 +25,16 @@ bool startsWith(QByteArrayView haystack, QByteArrayView needle) noexcept;
[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
bool endsWith(QByteArrayView haystack, QByteArrayView needle) noexcept;
+[[nodiscard]] inline
+qsizetype findByteArray(QByteArrayView haystack, qsizetype from, char needle) noexcept;
+
[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
qsizetype findByteArray(QByteArrayView haystack, qsizetype from, QByteArrayView needle) noexcept;
[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
+qsizetype lastIndexOf(QByteArrayView haystack, qsizetype from, char needle) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
qsizetype lastIndexOf(QByteArrayView haystack, qsizetype from, QByteArrayView needle) noexcept;
[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
@@ -69,8 +42,107 @@ qsizetype count(QByteArrayView haystack, QByteArrayView needle) noexcept;
[[nodiscard]] Q_CORE_EXPORT int compareMemory(QByteArrayView lhs, QByteArrayView rhs);
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QByteArrayView trimmed(QByteArrayView s) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isValidUtf8(QByteArrayView s) noexcept;
+
+template <typename T>
+class ParsedNumber
+{
+ T m_value;
+ quint32 m_error : 1;
+ quint32 m_reserved : 31;
+ void *m_reserved2 = nullptr;
+public:
+ constexpr ParsedNumber() noexcept : m_value(), m_error(true), m_reserved(0) {}
+ constexpr explicit ParsedNumber(T v) : m_value(v), m_error(false), m_reserved(0) {}
+
+ // minimal optional-like API:
+ explicit operator bool() const noexcept { return !m_error; }
+ T &operator*() { Q_ASSERT(*this); return m_value; }
+ const T &operator*() const { Q_ASSERT(*this); return m_value; }
+ T *operator->() noexcept { return *this ? &m_value : nullptr; }
+ const T *operator->() const noexcept { return *this ? &m_value : nullptr; }
+ template <typename U> // not = T, as that'd allow calls that are incompatible with std::optional
+ T value_or(U &&u) const { return *this ? m_value : T(std::forward<U>(u)); }
+};
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber<double> toDouble(QByteArrayView a) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber<float> toFloat(QByteArrayView a) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber<qlonglong> toSignedInteger(QByteArrayView data, int base);
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber<qulonglong> toUnsignedInteger(QByteArrayView data, int base);
+
+// QByteArrayView has incomplete type here, and we can't include qbytearrayview.h,
+// since it includes qbytearrayalgorithms.h. Use the ByteArrayView template type as
+// a workaround.
+template <typename T, typename ByteArrayView,
+ typename = std::enable_if_t<std::is_same_v<ByteArrayView, QByteArrayView>>>
+static inline T toIntegral(ByteArrayView data, bool *ok, int base)
+{
+ const auto val = [&] {
+ if constexpr (std::is_unsigned_v<T>)
+ return toUnsignedInteger(data, base);
+ else
+ return toSignedInteger(data, base);
+ }();
+ const bool failed = !val || T(*val) != *val;
+ if (ok)
+ *ok = !failed;
+ if (failed)
+ return 0;
+ return T(*val);
+}
+
} // namespace QtPrivate
+/*****************************************************************************
+ Safe and portable C string functions; extensions to standard string.h
+ *****************************************************************************/
+
+Q_CORE_EXPORT char *qstrdup(const char *);
+
+inline size_t qstrlen(const char *str)
+{
+ QT_WARNING_PUSH
+#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 900 && Q_CC_GNU < 1000
+ // spurious compiler warning (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91490#c6)
+ // when Q_DECLARE_METATYPE_TEMPLATE_1ARG is used
+ QT_WARNING_DISABLE_GCC("-Wstringop-overflow")
+#endif
+ return str ? strlen(str) : 0;
+ QT_WARNING_POP
+}
+
+inline size_t qstrnlen(const char *str, size_t maxlen)
+{
+ if (!str)
+ return 0;
+ auto end = static_cast<const char *>(memchr(str, '\0', maxlen));
+ return end ? end - str : maxlen;
+}
+
+// implemented in qbytearray.cpp
+Q_CORE_EXPORT char *qstrcpy(char *dst, const char *src);
+Q_CORE_EXPORT char *qstrncpy(char *dst, const char *src, size_t len);
+
+Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2);
+
+inline int qstrncmp(const char *str1, const char *str2, size_t len)
+{
+ return (str1 && str2) ? strncmp(str1, str2, len)
+ : (str1 ? 1 : (str2 ? -1 : 0));
+}
+Q_CORE_EXPORT int qstricmp(const char *, const char *);
+Q_CORE_EXPORT int qstrnicmp(const char *, const char *, size_t len);
+Q_CORE_EXPORT int qstrnicmp(const char *, qsizetype, const char *, qsizetype = -1);
+
+// implemented in qvsnprintf.cpp
+Q_CORE_EXPORT int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap);
+Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt, ...);
+
+// qChecksum: Internet checksum
+Q_CORE_EXPORT quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309);
+
QT_END_NAMESPACE
#endif // QBYTEARRAYALGORITHMS_H
diff --git a/src/corelib/text/qbytearraylist.cpp b/src/corelib/text/qbytearraylist.cpp
index 621ee6be7c..81bb54dfe4 100644
--- a/src/corelib/text/qbytearraylist.cpp
+++ b/src/corelib/text/qbytearraylist.cpp
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 by Southwest Research Institute (R)
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2014 by Southwest Research Institute (R)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <qbytearraylist.h>
@@ -103,16 +67,18 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QByteArray QByteArrayList::join() const
+ \fn QByteArray QByteArrayList::join(const QByteArray &separator) const
- Joins all the byte arrays into a single byte array.
+ Joins all the byte arrays into a single byte array with each
+ element separated by the given \a separator.
*/
/*!
- \fn QByteArray QByteArrayList::join(const QByteArray &separator) const
+ \fn QByteArray QByteArrayList::join(QByteArrayView separator) const
+ \since 6.3
Joins all the byte arrays into a single byte array with each
- element separated by the given \a separator.
+ element separated by the given \a separator, if any.
*/
/*!
@@ -122,12 +88,12 @@ QT_BEGIN_NAMESPACE
element separated by the given \a separator.
*/
-static int QByteArrayList_joinedSize(const QByteArrayList *that, int seplen)
+static qsizetype QByteArrayList_joinedSize(const QByteArrayList *that, qsizetype seplen)
{
- int totalLength = 0;
- const int size = that->size();
+ qsizetype totalLength = 0;
+ const qsizetype size = that->size();
- for (int i = 0; i < size; ++i)
+ for (qsizetype i = 0; i < size; ++i)
totalLength += that->at(i).size();
if (size > 0)
@@ -136,13 +102,13 @@ static int QByteArrayList_joinedSize(const QByteArrayList *that, int seplen)
return totalLength;
}
-QByteArray QtPrivate::QByteArrayList_join(const QByteArrayList *that, const char *sep, int seplen)
+QByteArray QtPrivate::QByteArrayList_join(const QByteArrayList *that, const char *sep, qsizetype seplen)
{
QByteArray res;
- if (const int joinedSize = QByteArrayList_joinedSize(that, seplen))
+ if (const qsizetype joinedSize = QByteArrayList_joinedSize(that, seplen))
res.reserve(joinedSize); // don't call reserve(0) - it allocates one byte for the NUL
- const int size = that->size();
- for (int i = 0; i < size; ++i) {
+ const qsizetype size = that->size();
+ for (qsizetype i = 0; i < size; ++i) {
if (i)
res.append(sep, seplen);
res += that->at(i);
@@ -150,10 +116,4 @@ QByteArray QtPrivate::QByteArrayList_join(const QByteArrayList *that, const char
return res;
}
-int QtPrivate::QByteArrayList_indexOf(const QByteArrayList *that, const char *needle, int from)
-{
- const auto it = std::find_if(that->begin() + from, that->end(), [needle](const QByteArray &item) { return item == needle; });
- return it == that->end() ? -1 : int(std::distance(that->begin(), it));
-}
-
QT_END_NAMESPACE
diff --git a/src/corelib/text/qbytearraylist.h b/src/corelib/text/qbytearraylist.h
index 1ce8d21445..f5302884f1 100644
--- a/src/corelib/text/qbytearraylist.h
+++ b/src/corelib/text/qbytearraylist.h
@@ -1,43 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Copyright (C) 2014 by Southwest Research Institute (R)
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// Copyright (C) 2014 by Southwest Research Institute (R)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <QtCore/qlist.h>
@@ -46,6 +10,8 @@
#include <QtCore/qbytearray.h>
+#include <limits>
+
QT_BEGIN_NAMESPACE
#if !defined(QT_NO_JAVA_STYLE_ITERATORS)
@@ -53,43 +19,40 @@ typedef QListIterator<QByteArray> QByteArrayListIterator;
typedef QMutableListIterator<QByteArray> QMutableByteArrayListIterator;
#endif
-#ifndef Q_CLANG_QDOC
+#ifndef Q_QDOC
namespace QtPrivate {
+#if QT_CORE_REMOVED_SINCE(6, 3) && QT_POINTER_SIZE != 4
QByteArray Q_CORE_EXPORT QByteArrayList_join(const QByteArrayList *that, const char *separator, int separatorLength);
- int Q_CORE_EXPORT QByteArrayList_indexOf(const QByteArrayList *that, const char *needle, int from);
+#endif
+ QByteArray Q_CORE_EXPORT QByteArrayList_join(const QByteArrayList *that, const char *sep, qsizetype len);
}
#endif
-#ifdef Q_CLANG_QDOC
+#ifdef Q_QDOC
class QByteArrayList : public QList<QByteArray>
#else
-template <> struct QListSpecialMethods<QByteArray>
+template <> struct QListSpecialMethods<QByteArray> : QListSpecialMethodsBase<QByteArray>
#endif
{
-#ifndef Q_CLANG_QDOC
+#ifndef Q_QDOC
protected:
~QListSpecialMethods() = default;
#endif
public:
- qsizetype indexOf(const QByteArray &ba, qsizetype from = 0) const noexcept
- { return QtPrivate::indexOf(*self(), ba, from); }
- qsizetype lastIndexOf(const QByteArray &ba, qsizetype from = -1) const noexcept
- { return QtPrivate::lastIndexOf(*self(), ba, from); }
- bool contains(const QByteArray &ba) const noexcept
- { return indexOf(ba) != -1; }
-
- inline QByteArray join() const
- { return QtPrivate::QByteArrayList_join(self(), nullptr, 0); }
+ using QListSpecialMethodsBase<QByteArray>::indexOf;
+ using QListSpecialMethodsBase<QByteArray>::lastIndexOf;
+ using QListSpecialMethodsBase<QByteArray>::contains;
+
+ QByteArray join(QByteArrayView sep = {}) const
+ {
+ return QtPrivate::QByteArrayList_join(self(), sep.data(), sep.size());
+ }
+ Q_WEAK_OVERLOAD
inline QByteArray join(const QByteArray &sep) const
- { return QtPrivate::QByteArrayList_join(self(), sep.constData(), sep.size()); }
+ { return join(qToByteArrayViewIgnoringNull(sep)); }
inline QByteArray join(char sep) const
- { return QtPrivate::QByteArrayList_join(self(), &sep, 1); }
-
-private:
- typedef QList<QByteArray> Self;
- Self *self() { return static_cast<Self *>(this); }
- const Self *self() const { return static_cast<const Self *>(this); }
+ { return join({&sep, 1}); }
};
QT_END_NAMESPACE
diff --git a/src/corelib/text/qbytearraymatcher.cpp b/src/corelib/text/qbytearraymatcher.cpp
index 4292064de2..ae38fb584b 100644
--- a/src/corelib/text/qbytearraymatcher.cpp
+++ b/src/corelib/text/qbytearraymatcher.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qbytearraymatcher.h"
@@ -124,14 +88,19 @@ QByteArrayMatcher::QByteArrayMatcher()
}
/*!
- Constructs a byte array matcher from \a pattern. \a pattern
- has the given \a length. \a pattern must remain in scope, but
- the destructor does not delete \a pattern.
- */
+ Constructs a byte array matcher from \a pattern. \a pattern
+ has the given \a length. Call indexIn() to perform a search.
+
+ \note the data that \a pattern is referencing must remain valid while this
+ object is used.
+*/
QByteArrayMatcher::QByteArrayMatcher(const char *pattern, qsizetype length) : d(nullptr)
{
p.p = reinterpret_cast<const uchar *>(pattern);
- p.l = length;
+ if (length < 0)
+ p.l = qstrlen(pattern);
+ else
+ p.l = length;
bm_init_skiptable(p.p, p.l, p.q_skiptable);
}
@@ -148,6 +117,18 @@ QByteArrayMatcher::QByteArrayMatcher(const QByteArray &pattern)
}
/*!
+ \fn QByteArrayMatcher::QByteArrayMatcher(QByteArrayView pattern)
+ \since 6.3
+ \overload
+
+ Constructs a byte array matcher that will search for \a pattern.
+ Call indexIn() to perform a search.
+
+ \note the data that \a pattern is referencing must remain valid while this
+ object is used.
+*/
+
+/*!
Copies the \a other byte array matcher to this byte array matcher.
*/
QByteArrayMatcher::QByteArrayMatcher(const QByteArrayMatcher &other)
@@ -189,32 +170,36 @@ void QByteArrayMatcher::setPattern(const QByteArray &pattern)
}
/*!
- Searches the byte array \a ba, from byte position \a from (default
- 0, i.e. from the first byte), for the byte array pattern() that
- was set in the constructor or in the most recent call to
- setPattern(). Returns the position where the pattern() matched in
- \a ba, or -1 if no match was found.
+ Searches the char string \a str, which has length \a len, from
+ byte position \a from (default 0, i.e. from the first byte), for
+ the byte array pattern() that was set in the constructor or in the
+ most recent call to setPattern(). Returns the position where the
+ pattern() matched in \a str, or -1 if no match was found.
*/
-qsizetype QByteArrayMatcher::indexIn(const QByteArray &ba, qsizetype from) const
+qsizetype QByteArrayMatcher::indexIn(const char *str, qsizetype len, qsizetype from) const
{
if (from < 0)
from = 0;
- return bm_find(reinterpret_cast<const uchar *>(ba.constData()), ba.size(), from,
+ return bm_find(reinterpret_cast<const uchar *>(str), len, from,
p.p, p.l, p.q_skiptable);
}
/*!
- Searches the char string \a str, which has length \a len, from
- byte position \a from (default 0, i.e. from the first byte), for
- the byte array pattern() that was set in the constructor or in the
- most recent call to setPattern(). Returns the position where the
- pattern() matched in \a str, or -1 if no match was found.
+ \fn qsizetype QByteArrayMatcher::indexIn(QByteArrayView data, qsizetype from) const
+ \since 6.3
+ \overload
+
+ Searches the byte array \a data, from byte position \a from (default
+ 0, i.e. from the first byte), for the byte array pattern() that
+ was set in the constructor or in the most recent call to
+ setPattern(). Returns the position where the pattern() matched in
+ \a data, or -1 if no match was found.
*/
-qsizetype QByteArrayMatcher::indexIn(const char *str, qsizetype len, qsizetype from) const
+qsizetype QByteArrayMatcher::indexIn(QByteArrayView data, qsizetype from) const
{
if (from < 0)
from = 0;
- return bm_find(reinterpret_cast<const uchar *>(str), len, from,
+ return bm_find(reinterpret_cast<const uchar *>(data.data()), data.size(), from,
p.p, p.l, p.q_skiptable);
}
@@ -346,8 +331,7 @@ qsizetype qFindByteArray(
QByteArray::indexOf(), in particular if repeated matching takes place.
Unlike QByteArrayMatcher, this class calculates the internal
- representation at \e{compile-time}, if your compiler supports
- C++14-level \c{constexpr} (C++11 is not sufficient), so it can
+ representation at \e{compile-time}, so it can
even benefit if you are doing one-off byte array matches.
Create the QStaticByteArrayMatcher by calling qMakeStaticByteArrayMatcher(),
@@ -363,16 +347,11 @@ qsizetype qFindByteArray(
Since this class is designed to do all the up-front calculations at compile-time,
it does not offer a setPattern() method.
- \note Qt detects the necessary C++14 compiler support by way of the feature
- test recommendations from
- \l{https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations}
- {C++ Committee's Standing Document 6}.
-
\sa QByteArrayMatcher, QStringMatcher
*/
/*!
- \fn template <uint N> int QStaticByteArrayMatcher<N>::indexIn(const char *haystack, int hlen, int from = 0) const
+ \fn template <size_t N> qsizetype QStaticByteArrayMatcher<N>::indexIn(const char *haystack, qsizetype hlen, qsizetype from = 0) const
Searches the char string \a haystack, which has length \a hlen, from
byte position \a from (default 0, i.e. from the first byte), for
@@ -382,7 +361,7 @@ qsizetype qFindByteArray(
*/
/*!
- \fn template <uint N> int QStaticByteArrayMatcher<N>::indexIn(const QByteArray &haystack, int from = 0) const
+ \fn template <size_t N> qsizetype QStaticByteArrayMatcher<N>::indexIn(const QByteArray &haystack, qsizetype from = 0) const
Searches the char string \a haystack, from byte position \a from
(default 0, i.e. from the first byte), for the byte array pattern()
@@ -392,7 +371,7 @@ qsizetype qFindByteArray(
*/
/*!
- \fn template <uint N> QByteArray QStaticByteArrayMatcher<N>::pattern() const
+ \fn template <size_t N> QByteArray QStaticByteArrayMatcher<N>::pattern() const
Returns the byte array pattern that this byte array matcher will
search for.
@@ -403,7 +382,7 @@ qsizetype qFindByteArray(
/*!
\internal
*/
-int QStaticByteArrayMatcherBase::indexOfIn(const char *needle, uint nlen, const char *haystack, int hlen, int from) const noexcept
+qsizetype QStaticByteArrayMatcherBase::indexOfIn(const char *needle, size_t nlen, const char *haystack, qsizetype hlen, qsizetype from) const noexcept
{
if (from < 0)
from = 0;
@@ -412,12 +391,12 @@ int QStaticByteArrayMatcherBase::indexOfIn(const char *needle, uint nlen, const
}
/*!
- \fn template <uint N> QStaticByteArrayMatcher<N>::QStaticByteArrayMatcher(const char (&pattern)[N])
+ \fn template <size_t N> QStaticByteArrayMatcher<N>::QStaticByteArrayMatcher(const char (&pattern)[N])
\internal
*/
/*!
- \fn template <uint N> QStaticByteArrayMatcher qMakeStaticByteArrayMatcher(const char (&pattern)[N])
+ \fn template <size_t N> QStaticByteArrayMatcher qMakeStaticByteArrayMatcher(const char (&pattern)[N])
\since 5.9
\relates QStaticByteArrayMatcher
@@ -432,3 +411,5 @@ int QStaticByteArrayMatcherBase::indexOfIn(const char *needle, uint nlen, const
QT_END_NAMESPACE
+
+#undef REHASH
diff --git a/src/corelib/text/qbytearraymatcher.h b/src/corelib/text/qbytearraymatcher.h
index 876225230b..1de9c23f10 100644
--- a/src/corelib/text/qbytearraymatcher.h
+++ b/src/corelib/text/qbytearraymatcher.h
@@ -1,47 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QBYTEARRAYMATCHER_H
#define QBYTEARRAYMATCHER_H
#include <QtCore/qbytearray.h>
+#include <QtCore/q20algorithm.h>
+#include <iterator>
+#include <limits>
+
QT_BEGIN_NAMESPACE
@@ -52,7 +20,10 @@ class Q_CORE_EXPORT QByteArrayMatcher
public:
QByteArrayMatcher();
explicit QByteArrayMatcher(const QByteArray &pattern);
- explicit QByteArrayMatcher(const char *pattern, qsizetype length);
+ explicit QByteArrayMatcher(QByteArrayView pattern)
+ : QByteArrayMatcher(pattern.data(), pattern.size())
+ {}
+ explicit QByteArrayMatcher(const char *pattern, qsizetype length = -1);
QByteArrayMatcher(const QByteArrayMatcher &other);
~QByteArrayMatcher();
@@ -60,8 +31,15 @@ public:
void setPattern(const QByteArray &pattern);
+#if QT_CORE_REMOVED_SINCE(6, 3)
qsizetype indexIn(const QByteArray &ba, qsizetype from = 0) const;
+#else
+ Q_WEAK_OVERLOAD
+ qsizetype indexIn(const QByteArray &ba, qsizetype from = 0) const
+ { return indexIn(QByteArrayView{ba}, from); }
+#endif
qsizetype indexIn(const char *str, qsizetype len, qsizetype from = 0) const;
+ qsizetype indexIn(QByteArrayView data, qsizetype from = 0) const;
inline QByteArray pattern() const
{
if (q_pattern.isNull())
@@ -90,43 +68,25 @@ class QStaticByteArrayMatcherBase
uchar data[256];
} m_skiptable;
protected:
- explicit constexpr QStaticByteArrayMatcherBase(const char *pattern, uint n) noexcept
+ explicit constexpr QStaticByteArrayMatcherBase(const char *pattern, size_t n) noexcept
: m_skiptable(generate(pattern, n)) {}
// compiler-generated copy/more ctors/assignment operators are ok!
- // compiler-generated dtor is ok!
+ ~QStaticByteArrayMatcherBase() = default;
+#if QT_CORE_REMOVED_SINCE(6, 3) && QT_POINTER_SIZE != 4
Q_CORE_EXPORT int indexOfIn(const char *needle, uint nlen, const char *haystack, int hlen, int from) const noexcept;
+#endif
+ Q_CORE_EXPORT qsizetype indexOfIn(const char *needle, size_t nlen,
+ const char *haystack, qsizetype hlen,
+ qsizetype from) const noexcept;
private:
- static constexpr Skiptable generate(const char *pattern, uint n) noexcept
+ static constexpr Skiptable generate(const char *pattern, size_t n) noexcept
{
const auto uchar_max = (std::numeric_limits<uchar>::max)();
uchar max = n > uchar_max ? uchar_max : uchar(n);
- Skiptable table = {
- // this verbose initialization code aims to avoid some opaque error messages
- // even on powerful compilers such as GCC 5.3. Even though for GCC a loop
- // format can be found that v5.3 groks, it's probably better to go with this
- // for the time being:
- {
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
-
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- max, max, max, max, max, max, max, max, max, max, max, max, max, max, max, max,
- }
- };
+ Skiptable table = {};
+ q20::fill(std::begin(table.data), std::end(table.data), max);
pattern += n - max;
while (max--)
table.data[uchar(*pattern++)] = max;
@@ -134,28 +94,32 @@ private:
}
};
-template <uint N>
+template <size_t N>
class QStaticByteArrayMatcher : QStaticByteArrayMatcherBase
{
char m_pattern[N];
+ // N includes the terminating '\0'!
static_assert(N > 2, "QStaticByteArrayMatcher makes no sense for finding a single-char pattern");
public:
explicit constexpr QStaticByteArrayMatcher(const char (&patternToMatch)[N]) noexcept
: QStaticByteArrayMatcherBase(patternToMatch, N - 1), m_pattern()
{
- for (uint i = 0; i < N; ++i)
+ for (size_t i = 0; i < N; ++i)
m_pattern[i] = patternToMatch[i];
}
- int indexIn(const QByteArray &haystack, int from = 0) const noexcept
+ Q_WEAK_OVERLOAD
+ qsizetype indexIn(const QByteArray &haystack, qsizetype from = 0) const noexcept
{ return this->indexOfIn(m_pattern, N - 1, haystack.data(), haystack.size(), from); }
- int indexIn(const char *haystack, int hlen, int from = 0) const noexcept
+ qsizetype indexIn(const char *haystack, qsizetype hlen, qsizetype from = 0) const noexcept
{ return this->indexOfIn(m_pattern, N - 1, haystack, hlen, from); }
+ qsizetype indexIn(QByteArrayView haystack, qsizetype from = 0) const noexcept
+ { return this->indexOfIn(m_pattern, N - 1, haystack.data(), haystack.size(), from); }
- QByteArray pattern() const { return QByteArray(m_pattern, int(N - 1)); }
+ QByteArray pattern() const { return QByteArray(m_pattern, qsizetype(N - 1)); }
};
-template <uint N>
+template <size_t N>
constexpr QStaticByteArrayMatcher<N> qMakeStaticByteArrayMatcher(const char (&pattern)[N]) noexcept
{ return QStaticByteArrayMatcher<N>(pattern); }
diff --git a/src/corelib/text/qbytearrayview.h b/src/corelib/text/qbytearrayview.h
index 079f888f4b..45ebc812cd 100644
--- a/src/corelib/text/qbytearrayview.h
+++ b/src/corelib/text/qbytearrayview.h
@@ -1,53 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QBYTEARRAYVIEW_H
#define QBYTEARRAYVIEW_H
#include <QtCore/qbytearrayalgorithms.h>
+#include <QtCore/qcompare.h>
+#include <QtCore/qstringfwd.h>
+#include <QtCore/qarraydata.h>
#include <string>
+#include <string_view>
+#include <QtCore/q20type_traits.h>
QT_BEGIN_NAMESPACE
-class QByteArray;
-class QLatin1String;
-
namespace QtPrivate {
template <typename Byte>
@@ -60,8 +26,7 @@ struct IsCompatibleByteTypeHelper
template <typename Byte>
struct IsCompatibleByteType
- : IsCompatibleByteTypeHelper<
- typename std::remove_cv_t<typename std::remove_reference_t<Byte>>> {};
+ : IsCompatibleByteTypeHelper<q20::remove_cvref_t<Byte>> {};
template <typename Pointer>
struct IsCompatibleByteArrayPointerHelper : std::false_type {};
@@ -70,8 +35,7 @@ struct IsCompatibleByteArrayPointerHelper<Byte *>
: IsCompatibleByteType<Byte> {};
template<typename Pointer>
struct IsCompatibleByteArrayPointer
- : IsCompatibleByteArrayPointerHelper<
- typename std::remove_cv_t<typename std::remove_reference_t<Pointer>>> {};
+ : IsCompatibleByteArrayPointerHelper<q20::remove_cvref_t<Pointer>> {};
template <typename T, typename Enable = void>
struct IsContainerCompatibleWithQByteArrayView : std::false_type {};
@@ -100,6 +64,13 @@ struct IsContainerCompatibleWithQByteArrayView<T, std::enable_if_t<
// Don't make an accidental copy constructor
std::negation<std::is_same<std::decay_t<T>, QByteArrayView>>>>> : std::true_type {};
+// Used by QLatin1StringView too
+template <typename Char>
+static constexpr qsizetype lengthHelperPointer(const Char *data) noexcept
+{
+ return qsizetype(std::char_traits<Char>::length(data));
+}
+
} // namespace QtPrivate
class Q_CORE_EXPORT QByteArrayView
@@ -138,12 +109,6 @@ private:
typename std::enable_if_t<QtPrivate::IsContainerCompatibleWithQByteArrayView<T>::value,
bool>;
- template <typename Char>
- static constexpr qsizetype lengthHelperPointer(const Char *data) noexcept
- {
- return qsizetype(std::char_traits<Char>::length(data));
- }
-
template <typename Container>
static constexpr qsizetype lengthHelperContainer(const Container &c) noexcept
{
@@ -185,7 +150,7 @@ public:
template <typename Pointer, if_compatible_pointer<Pointer> = true>
constexpr QByteArrayView(const Pointer &data) noexcept
: QByteArrayView(
- data, data ? lengthHelperPointer(data) : 0) {}
+ data, data ? QtPrivate::lengthHelperPointer(data) : 0) {}
#endif
#ifdef Q_QDOC
@@ -203,10 +168,16 @@ public:
constexpr QByteArrayView(const char (&data)[Size]) noexcept
: QByteArrayView(data, lengthHelperCharArray(data, Size)) {}
+ constexpr QByteArrayView(QLatin1StringView v) noexcept; // defined in qlatin1stringview.h
+ constexpr QByteArrayView(QUtf8StringView v) noexcept; // defined in qutf8stringview.h
+
+#ifdef Q_QDOC
+ template <typename Byte, size_t Size>
+#else
template <typename Byte, size_t Size, if_compatible_byte<Byte> = true>
+#endif
[[nodiscard]] constexpr static QByteArrayView fromArray(const Byte (&data)[Size]) noexcept
{ return QByteArrayView(data, Size); }
-
[[nodiscard]] inline QByteArray toByteArray() const; // defined in qbytearray.h
[[nodiscard]] constexpr qsizetype size() const noexcept { return m_size; }
@@ -214,7 +185,7 @@ public:
[[nodiscard]] constexpr const_pointer constData() const noexcept { return data(); }
[[nodiscard]] constexpr char operator[](qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n < size()); return m_data[n]; }
+ { verify(n, 1); return m_data[n]; }
//
// QByteArray API
@@ -222,51 +193,103 @@ public:
[[nodiscard]] constexpr char at(qsizetype n) const { return (*this)[n]; }
[[nodiscard]] constexpr QByteArrayView first(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QByteArrayView(data(), n); }
+ { verify(0, n); return sliced(0, n); }
[[nodiscard]] constexpr QByteArrayView last(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QByteArrayView(data() + size() - n, n); }
+ { verify(0, n); return sliced(size() - n, n); }
[[nodiscard]] constexpr QByteArrayView sliced(qsizetype pos) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(pos <= size()); return QByteArrayView(data() + pos, size() - pos); }
+ { verify(pos, 0); return QByteArrayView(data() + pos, size() - pos); }
[[nodiscard]] constexpr QByteArrayView sliced(qsizetype pos, qsizetype n) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(n >= 0); Q_ASSERT(size_t(pos) + size_t(n) <= size_t(size())); return QByteArrayView(data() + pos, n); }
+ { verify(pos, n); return QByteArrayView(data() + pos, n); }
[[nodiscard]] constexpr QByteArrayView chopped(qsizetype len) const
- { Q_ASSERT(len >= 0); Q_ASSERT(len <= size()); return first(size() - len); }
+ { verify(0, len); return sliced(0, size() - len); }
+
+ [[nodiscard]] constexpr QByteArrayView left(qsizetype n) const
+ { if (n < 0 || n > size()) n = size(); return QByteArrayView(data(), n); }
+ [[nodiscard]] constexpr QByteArrayView right(qsizetype n) const
+ { if (n < 0 || n > size()) n = size(); if (n < 0) n = 0; return QByteArrayView(data() + size() - n, n); }
+ [[nodiscard]] constexpr QByteArrayView mid(qsizetype pos, qsizetype n = -1) const
+ {
+ using namespace QtPrivate;
+ auto result = QContainerImplHelper::mid(size(), &pos, &n);
+ return result == QContainerImplHelper::Null ? QByteArrayView()
+ : QByteArrayView(m_data + pos, n);
+ }
constexpr void truncate(qsizetype n)
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); m_size = n; }
+ { verify(0, n); m_size = n; }
constexpr void chop(qsizetype n)
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); m_size -= n; }
+ { verify(0, n); m_size -= n; }
+
+ // Defined in qbytearray.cpp:
+ [[nodiscard]] QByteArrayView trimmed() const noexcept
+ { return QtPrivate::trimmed(*this); }
+ [[nodiscard]] short toShort(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<short>(*this, ok, base); }
+ [[nodiscard]] ushort toUShort(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<ushort>(*this, ok, base); }
+ [[nodiscard]] int toInt(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<int>(*this, ok, base); }
+ [[nodiscard]] uint toUInt(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<uint>(*this, ok, base); }
+ [[nodiscard]] long toLong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<long>(*this, ok, base); }
+ [[nodiscard]] ulong toULong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<ulong>(*this, ok, base); }
+ [[nodiscard]] qlonglong toLongLong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<qlonglong>(*this, ok, base); }
+ [[nodiscard]] qulonglong toULongLong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<qulonglong>(*this, ok, base); }
+ [[nodiscard]] float toFloat(bool *ok = nullptr) const
+ {
+ const auto r = QtPrivate::toFloat(*this);
+ if (ok)
+ *ok = bool(r);
+ return r.value_or(0.0f);
+ }
+ [[nodiscard]] double toDouble(bool *ok = nullptr) const
+ {
+ const auto r = QtPrivate::toDouble(*this);
+ if (ok)
+ *ok = bool(r);
+ return r.value_or(0.0);
+ }
[[nodiscard]] bool startsWith(QByteArrayView other) const noexcept
{ return QtPrivate::startsWith(*this, other); }
- [[nodiscard]] bool startsWith(char c) const noexcept
+ [[nodiscard]] constexpr bool startsWith(char c) const noexcept
{ return !empty() && front() == c; }
[[nodiscard]] bool endsWith(QByteArrayView other) const noexcept
{ return QtPrivate::endsWith(*this, other); }
- [[nodiscard]] bool endsWith(char c) const noexcept
+ [[nodiscard]] constexpr bool endsWith(char c) const noexcept
{ return !empty() && back() == c; }
[[nodiscard]] qsizetype indexOf(QByteArrayView a, qsizetype from = 0) const noexcept
{ return QtPrivate::findByteArray(*this, from, a); }
[[nodiscard]] qsizetype indexOf(char ch, qsizetype from = 0) const noexcept
- { return QtPrivate::findByteArray(*this, from, QByteArrayView(&ch, 1)); }
+ { return QtPrivate::findByteArray(*this, from, ch); }
[[nodiscard]] bool contains(QByteArrayView a) const noexcept
{ return indexOf(a) != qsizetype(-1); }
[[nodiscard]] bool contains(char c) const noexcept
{ return indexOf(c) != qsizetype(-1); }
- [[nodiscard]] qsizetype lastIndexOf(QByteArrayView a, qsizetype from = -1) const noexcept
+ [[nodiscard]] qsizetype lastIndexOf(QByteArrayView a) const noexcept
+ { return lastIndexOf(a, size()); }
+ [[nodiscard]] qsizetype lastIndexOf(QByteArrayView a, qsizetype from) const noexcept
{ return QtPrivate::lastIndexOf(*this, from, a); }
[[nodiscard]] qsizetype lastIndexOf(char ch, qsizetype from = -1) const noexcept
- { return QtPrivate::lastIndexOf(*this, from, QByteArrayView(&ch, 1)); }
+ { return QtPrivate::lastIndexOf(*this, from, ch); }
[[nodiscard]] qsizetype count(QByteArrayView a) const noexcept
{ return QtPrivate::count(*this, a); }
[[nodiscard]] qsizetype count(char ch) const noexcept
{ return QtPrivate::count(*this, QByteArrayView(&ch, 1)); }
+ inline int compare(QByteArrayView a, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+
+ [[nodiscard]] inline bool isValidUtf8() const noexcept { return QtPrivate::isValidUtf8(*this); }
+
//
// STL compatibility API:
//
@@ -283,34 +306,64 @@ public:
[[nodiscard]] constexpr char front() const { Q_ASSERT(!empty()); return m_data[0]; }
[[nodiscard]] constexpr char back() const { Q_ASSERT(!empty()); return m_data[m_size - 1]; }
+ [[nodiscard]] constexpr Q_IMPLICIT operator std::string_view() const noexcept
+ { return std::string_view(m_data, size_t(m_size)); }
+
//
// Qt compatibility API:
//
[[nodiscard]] constexpr bool isNull() const noexcept { return !m_data; }
[[nodiscard]] constexpr bool isEmpty() const noexcept { return empty(); }
-#if QT_DEPRECATED_SINCE(6, 0)
- [[nodiscard]]
- Q_DECL_DEPRECATED_X("Use size() and port callers to qsizetype.")
- constexpr int length() const /* not nothrow! */
- { Q_ASSERT(int(size()) == size()); return int(size()); }
-#endif
+ [[nodiscard]] constexpr qsizetype length() const noexcept
+ { return size(); }
[[nodiscard]] constexpr char first() const { return front(); }
[[nodiscard]] constexpr char last() const { return back(); }
- friend inline bool operator==(QByteArrayView lhs, QByteArrayView rhs) noexcept
- { return lhs.size() == rhs.size() && QtPrivate::compareMemory(lhs, rhs) == 0; }
- friend inline bool operator!=(QByteArrayView lhs, QByteArrayView rhs) noexcept
- { return !(lhs == rhs); }
- friend inline bool operator< (QByteArrayView lhs, QByteArrayView rhs) noexcept
- { return QtPrivate::compareMemory(lhs, rhs) < 0; }
- friend inline bool operator<=(QByteArrayView lhs, QByteArrayView rhs) noexcept
- { return QtPrivate::compareMemory(lhs, rhs) <= 0; }
- friend inline bool operator> (QByteArrayView lhs, QByteArrayView rhs) noexcept
- { return !(lhs <= rhs); }
- friend inline bool operator>=(QByteArrayView lhs, QByteArrayView rhs) noexcept
- { return !(lhs < rhs); }
-
private:
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos = 0,
+ [[maybe_unused]] qsizetype n = 1) const
+ {
+ Q_ASSERT(pos >= 0);
+ Q_ASSERT(pos <= size());
+ Q_ASSERT(n >= 0);
+ Q_ASSERT(n <= size() - pos);
+ }
+
+ friend bool
+ comparesEqual(const QByteArrayView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ return lhs.size() == rhs.size()
+ && (!lhs.size() || memcmp(lhs.data(), rhs.data(), lhs.size()) == 0);
+ }
+ friend Qt::strong_ordering
+ compareThreeWay(const QByteArrayView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ const int res = QtPrivate::compareMemory(lhs, rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QByteArrayView)
+
+ friend bool comparesEqual(const QByteArrayView &lhs, const char *rhs) noexcept
+ { return comparesEqual(lhs, QByteArrayView(rhs)); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QByteArrayView &lhs, const char *rhs) noexcept
+ { return compareThreeWay(lhs, QByteArrayView(rhs)); }
+ Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, const char *)
+
+ // defined in qstring.cpp
+ friend Q_CORE_EXPORT bool
+ comparesEqual(const QByteArrayView &lhs, const QChar &rhs) noexcept;
+ friend Q_CORE_EXPORT Qt::strong_ordering
+ compareThreeWay(const QByteArrayView &lhs, const QChar &rhs) noexcept;
+ friend Q_CORE_EXPORT bool
+ comparesEqual(const QByteArrayView &lhs, char16_t rhs) noexcept;
+ friend Q_CORE_EXPORT Qt::strong_ordering
+ compareThreeWay(const QByteArrayView &lhs, char16_t rhs) noexcept;
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, QChar, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, char16_t, QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+
qsizetype m_size;
const storage_type *m_data;
};
@@ -319,7 +372,34 @@ Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE);
template<typename QByteArrayLike,
std::enable_if_t<std::is_same_v<QByteArrayLike, QByteArray>, bool> = true>
[[nodiscard]] inline QByteArrayView qToByteArrayViewIgnoringNull(const QByteArrayLike &b) noexcept
-{ return QByteArrayView(b.data(), b.size()); }
+{ return QByteArrayView(b.begin(), b.size()); }
+
+inline int QByteArrayView::compare(QByteArrayView a, Qt::CaseSensitivity cs) const noexcept
+{
+ return cs == Qt::CaseSensitive ? QtPrivate::compareMemory(*this, a) :
+ qstrnicmp(data(), size(), a.data(), a.size());
+}
+
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_DEPRECATED_VERSION_X_6_0("Use the QByteArrayView overload.")
+inline quint16 qChecksum(const char *s, qsizetype len,
+ Qt::ChecksumType standard = Qt::ChecksumIso3309)
+{ return qChecksum(QByteArrayView(s, len), standard); }
+#endif
+
+qsizetype QtPrivate::findByteArray(QByteArrayView haystack, qsizetype from, char needle) noexcept
+{
+ if (from < 0)
+ from = qMax(from + haystack.size(), qsizetype(0));
+ if (from < haystack.size()) {
+ const char *const b = haystack.data();
+ if (const auto n = static_cast<const char *>(
+ memchr(b + from, needle, static_cast<size_t>(haystack.size() - from)))) {
+ return n - b;
+ }
+ }
+ return -1;
+}
QT_END_NAMESPACE
diff --git a/src/corelib/text/qbytearrayview.qdoc b/src/corelib/text/qbytearrayview.qdoc
index 839a956249..eb890917eb 100644
--- a/src/corelib/text/qbytearrayview.qdoc
+++ b/src/corelib/text/qbytearrayview.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QByteArrayView
@@ -38,6 +14,15 @@
\reentrant
+ \compares strong
+ \compareswith strong QByteArray {const char *}
+ \endcompareswith
+ \compareswith strong QString QStringView QUtf8StringView QLatin1StringView \
+ QChar char16_t
+ When comparing with string and Unicode character types, the content is
+ interpreted as UTF-8.
+ \endcompareswith
+
A QByteArrayView references a contiguous portion of raw bytes it does
not own. It acts as an interface type to all kinds of byte-array-like data,
without the need to construct a QByteArray first.
@@ -80,6 +65,12 @@
If in doubt, obtain a strong reference to the data by calling toByteArray() to convert
the QByteArrayView into a QByteArray.
+ The methods supported by QByteArrayView reflect those of \l QByteArray. In
+ particular, to the limited degree that it ascribes semantics (such as
+ character case, spacing, digits of numbers) to the character data viewed, it
+ uses the C locale and ASCII encoding. See \l {C locale and ASCII functions}
+ for details and the limitations on these methods.
+
\section1 Compatible Byte Types
QByteArrayView can be constructed on any container of bytes, where the byte type
@@ -202,7 +193,7 @@
*/
/*!
- \fn template <typename Byte> QByteArrayView::QByteArrayView(const Byte *data, qsizetype len)
+ \fn template <typename Byte, QByteArrayView::if_compatible_byte<Byte> = true> QByteArrayView::QByteArrayView(const Byte *data, qsizetype len)
Constructs a byte array view on \a data with length \a len.
@@ -220,7 +211,7 @@
*/
/*!
- \fn template <typename Byte> QByteArrayView::QByteArrayView(const Byte *first, const Byte *last)
+ \fn template <typename Byte, QByteArrayView::if_compatible_byte<Byte> = true> QByteArrayView::QByteArrayView(const Byte *first, const Byte *last)
Constructs a byte array view on \a first with length (\a last - \a first).
@@ -256,7 +247,7 @@
*/
/*!
- \fn template <size_t Size> QByteArrayView(const char (&data)[Size])
+ \fn template <size_t Size> QByteArrayView::QByteArrayView(const char (&data)[Size])
Constructs a byte array view on the char array \a data.
The view covers the array until the first \c{'\0'} is encountered,
@@ -288,7 +279,7 @@
*/
/*!
- \fn template <typename Container> QByteArrayView::QByteArrayView(const Container &c)
+ \fn template <typename Container, QByteArrayView::if_compatible_container<Container> = true> QByteArrayView::QByteArrayView(const Container &c)
Constructs a byte array view on the array-like container \a c. The length and data
are set via \c{std::size(c)} and \c{std::data(c)} respectively.
@@ -296,13 +287,13 @@
The container's data must remain valid for the lifetime of this byte array view object.
This constructor participates in overload resolution if \a c is any contiguous
- container container with elements of a compatible byte type.
+ container with elements of a compatible byte type.
\sa {Compatible Byte Types}
*/
/*!
- \fn template <typename Byte, size_t Size> static QByteArrayView QByteArrayView::fromArray(Byte (&data)[Size])
+ \fn template <typename Byte, size_t Size> QByteArrayView QByteArrayView::fromArray(const Byte (&data)[Size])
Constructs a byte array view on the array literal \a data. The view covers the full
array. That includes the trailing null-terminator of \c{char} array literals.
@@ -323,16 +314,12 @@
The return value will be a null QByteArray if and only if this byte array
view is null.
-
- \warning QByteArrayView can store data with more than 2\sup{31} bytes while
- QByteArray cannot. Calling this function on a byte array view for which size()
- returns a value greater than \c{INT_MAX / 2} constitutes undefined behavior.
*/
/*!
\fn const char *QByteArrayView::data() const
- Returns a const \c char pointer to the first byte in the byte array.
+ Returns a const \c char pointer to the first byte in the byte array view.
\note The character array represented by the return value is \e not guaranteed
to be null-terminated. The returned pointer is only safe to use for accessing
@@ -344,7 +331,7 @@
/*!
\fn const char *QByteArrayView::constData() const
- Returns a const \c char pointer to the first byte in the byte array.
+ Returns a const \c char pointer to the first byte in the byte array view.
\note The character array represented by the return value is \e not guaranteed
to be null-terminated. The returned pointer is only safe to use for accessing
@@ -353,11 +340,43 @@
\sa data(), begin(), end()
*/
+/*! //! friend
+ \fn int QByteArrayView::operator==(const QByteArrayView &lhs, const QByteArrayView &rhs)
+ \fn int QByteArrayView::operator!=(const QByteArrayView &lhs, const QByteArrayView &rhs)
+ \fn int QByteArrayView::operator< (const QByteArrayView &lhs, const QByteArrayView &rhs)
+ \fn int QByteArrayView::operator<=(const QByteArrayView &lhs, const QByteArrayView &rhs)
+ \fn int QByteArrayView::operator> (const QByteArrayView &lhs, const QByteArrayView &rhs)
+ \fn int QByteArrayView::operator>=(const QByteArrayView &lhs, const QByteArrayView &rhs)
+
+ Comparison operators for QByteArrayView.
+*/
+
+/*!
+ \fn int QByteArrayView::compare(QByteArrayView bv, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 6.2
+
+ Returns an integer less than, equal to, or greater than zero depending on
+ whether this QByteArrayView sorts before, at the same position as, or after
+ the QByteArrayView \a bv. The comparison is performed according to case
+ sensitivity \a cs.
+
+ \sa operator==()
+*/
+
+/*!
+ \fn QByteArrayView::isValidUtf8() const
+
+ Returns \c true if this byte array view contains valid UTF-8 encoded data,
+ or \c false otherwise.
+
+ \since 6.3
+*/
+
/*!
\fn QByteArrayView::const_iterator QByteArrayView::begin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the
- first byte in the byte array.
+ first byte in the byte array view.
This function is provided for STL compatibility.
@@ -378,7 +397,7 @@
\fn QByteArrayView::const_iterator QByteArrayView::end() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing
- just after the last byte in the byte array.
+ just after the last byte in the byte array view.
This function is provided for STL compatibility.
@@ -398,7 +417,7 @@
\fn QByteArrayView::const_reverse_iterator QByteArrayView::rbegin() const
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing
- to the first byte in the byte array, in reverse order.
+ to the first byte in the byte array view, in reverse order.
This function is provided for STL compatibility.
@@ -419,7 +438,7 @@
\fn QByteArrayView::const_reverse_iterator QByteArrayView::rend() const
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
- the last byte in the byte array, in reverse order.
+ the last byte in the byte array view, in reverse order.
This function is provided for STL compatibility.
@@ -470,23 +489,13 @@
\sa empty(), isEmpty(), isNull()
*/
-#if QT_DEPRECATED_SINCE(6, 0)
/*!
- \fn int QByteArrayView::length() const
- \obsolete
- Use size() and port callers to qsizetype.
-
- Same as size(), but returns the result as an \c int.
+ \fn QByteArrayView::length() const
- This function is provided for compatibility with other Qt containers.
-
- \warning QByteArrayView can represent data with more than 2\sup{31} bytes.
- Calling this function on a byte array view for which size() returns a value greater
- than \c{INT_MAX} constitutes undefined behavior.
+ Same as size().
\sa empty(), isEmpty(), isNull(), size()
*/
-#endif
/*!
\fn char QByteArrayView::operator[](qsizetype n) const
@@ -511,7 +520,7 @@
/*!
\fn char QByteArrayView::front() const
- Returns the first byte in the byte array.
+ Returns the first byte in the byte array view.
This function is provided for STL compatibility.
@@ -524,7 +533,7 @@
/*!
\fn char QByteArrayView::back() const
- Returns the last byte in the byte array.
+ Returns the last byte in the byte array view.
This function is provided for STL compatibility.
@@ -562,8 +571,10 @@
Returns a byte array view that points to \a n bytes of this byte array
view, starting at position \a pos.
+//! [UB-sliced-index-length]
\note The behavior is undefined when \a pos < 0, \a n < 0,
or \a pos + \a n > size().
+//! [UB-sliced-index-length]
\sa first(), last(), chopped(), chop(), truncate()
*/
@@ -574,7 +585,9 @@
Returns a byte array view starting at position \a pos in this object,
and extending to its end.
+//! [UB-sliced-index-only]
\note The behavior is undefined when \a pos < 0 or \a pos > size().
+//! [UB-sliced-index-only]
\sa first(), last(), chopped(), chop(), truncate()
*/
@@ -602,7 +615,7 @@
\note The behavior is undefined when \a length < 0 or \a length > size().
- \sa first(), last(), sliced(), right(), chopped(), chop()
+ \sa first(), last(), sliced(), chopped(), chop()
*/
/*!
@@ -618,6 +631,309 @@
*/
/*!
+ \fn QByteArrayView QByteArrayView::mid(qsizetype start, qsizetype length) const
+ \since 6.5
+
+ \deprecated Use sliced() instead in new code.
+
+ Returns the subarray of length \a length starting at position
+ \a start in this object.
+
+ Returns an empty byte array view if \a start exceeds the
+ length of the byte array view. If there are less than \a length characters
+ available in the byte array view starting at \a start, or if
+ \a length is negative (default), the function returns all characters that
+ are available from \a start.
+
+ \sa first(), last(), sliced(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QByteArrayView QByteArrayView::left(qsizetype length) const
+ \since 6.5
+
+ \deprecated Use first() instead in new code.
+
+ Returns the subarray of length \a length starting at position
+ 0 in this object.
+
+ The entire byte array view is returned if \a length is greater than or equal
+ to size(), or less than zero.
+
+ \sa first(), last(), sliced(), startsWith(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QByteArrayView QByteArrayView::right(qsizetype length) const
+ \since 6.5
+
+ \deprecated Use last() instead in new code.
+
+ Returns the subarray of length \a length starting at position
+ size() - \a length in this object.
+
+ The entire byte array view is returned if \a length is greater than or equal
+ to size(), or less than zero.
+
+ \sa first(), last(), sliced(), endsWith(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QByteArrayView QByteArrayView::trimmed() const noexcept
+ \since 6.3
+
+ Returns a copy of this byte array view with spacing characters
+ removed from the start and end.
+
+ The spacing characters are those for which the standard C++ \c isspace()
+ function returns \c true in the C locale; these are the ASCII characters
+ tabulation '\\t', line feed '\\n', carriage return '\\r', vertical
+ tabulation '\\v', form feed '\\f', and space ' '.
+
+ \sa QChar::SpecialCharacter, {QByteArray#Spacing Characters}{Spacing Characters}
+*/
+
+/*!
+ \fn qlonglong QByteArrayView::toLongLong(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to a \c {long long} using base \a
+ base, which is ten by default. Bases 0 and 2 through 36 are supported, using
+ letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn qulonglong QByteArrayView::toULongLong(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to an \c {unsigned long long} using
+ base \a base, which is ten by default. Bases 0 and 2 through 36 are
+ supported, using letters for digits beyond 9; A is ten, B is eleven and so
+ on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn int QByteArrayView::toInt(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to an \c int using base \a base,
+ which is ten by default. Bases 0 and 2 through 36 are supported, using
+ letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \snippet code/src_corelib_text_qbytearrayview.cpp 2
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn uint QByteArrayView::toUInt(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to an \c {unsigned int} using base \a
+ base, which is ten by default. Bases 0 and 2 through 36 are supported, using
+ letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn long QByteArrayView::toLong(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to a \c long int using base \a base,
+ which is ten by default. Bases 0 and 2 through 36 are supported, using
+ letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \snippet code/src_corelib_text_qbytearrayview.cpp 3
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn ulong QByteArrayView::toULong(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to an \c {unsigned long int} using
+ base \a base, which is ten by default. Bases 0 and 2 through 36 are
+ supported, using letters for digits beyond 9; A is ten, B is eleven and so
+ on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn short QByteArrayView::toShort(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to a \c short using base \a base,
+ which is ten by default. Bases 0 and 2 through 36 are supported, using
+ letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn ushort QByteArrayView::toUShort(bool *ok, int base) const
+ \since 6.3
+
+ Returns this byte array view converted to an \c {unsigned short} using base
+ \a base, which is ten by default. Bases 0 and 2 through 36 are supported,
+ using letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules: if the byte array view begins with "0x", the rest of it is read as
+ hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
+ read as octal (base 8); otherwise it is read as decimal.
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+*/
+
+/*!
+ \fn double QByteArrayView::toDouble(bool *ok) const
+ \since 6.3
+
+ Returns this byte array view converted to a \c double value.
+
+ Returns an infinity if the conversion overflows or 0.0 if the
+ conversion fails for other reasons (e.g. underflow).
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \warning The QByteArrayView content may only contain valid numerical
+ characters which includes the plus/minus sign, the character e used in
+ scientific notation, and the decimal point. Including the unit or additional
+ characters leads to a conversion error.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+
+ This function ignores leading and trailing spacing characters.
+*/
+
+/*!
+ \fn float QByteArrayView::toFloat(bool *ok) const
+ \since 6.3
+
+ Returns this byte array view converted to a \c float value.
+
+ Returns an infinity if the conversion overflows or 0.0 if the
+ conversion fails for other reasons (e.g. underflow).
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \snippet code/src_corelib_text_qbytearrayview.cpp 4
+
+ \warning The QByteArrayView content may only contain valid numerical
+ characters which includes the plus/minus sign, the character e used in
+ scientific notation, and the decimal point. Including the unit or additional
+ characters leads to a conversion error.
+
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+
+ This function ignores leading and trailing whitespace.
+*/
+
+/*!
\fn bool QByteArrayView::startsWith(QByteArrayView bv) const
\fn bool QByteArrayView::startsWith(char ch) const
@@ -646,8 +962,7 @@
respectively, in this byte array view, searching forward from index position
\a from.Returns -1 if no match is found.
- If \a from is -1, the search starts at the last character; if it is
- -2, at the next to last character and so on.
+ \include qstring.qdocinc negative-index-start-search-from-end
\sa lastIndexOf(), contains()
*/
@@ -664,20 +979,43 @@
*/
/*!
- \fn qsizetype QByteArrayView::lastIndexOf(QByteArrayView bv, qsizetype from = -1) const
+ \fn qsizetype QByteArrayView::lastIndexOf(QByteArrayView bv, qsizetype from) const
\fn qsizetype QByteArrayView::lastIndexOf(char ch, qsizetype from = -1) const
Returns the index position of either the start of the last occurrence of
the sequence of bytes viewed by \a bv or the last occurrence of byte \a ch,
- respectively, in this byte array view, searching forward from index position
- \a from. If \a from is -1 (the default), the search starts from the end of the
- byte array view. Returns -1 if no match is found.
+ respectively, in this byte array view, searching backward from index position
+ \a from.
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if no match is found.
+
+ \note When searching for a 0-length \a bv, the match at the end of
+ the data is excluded from the search by a negative \a from, even
+ though \c{-1} is normally thought of as searching from the end of
+ the view: the match at the end is \e after the last character, so
+ it is excluded. To include such a final empty match, either give a
+ positive value for \a from or omit the \a from parameter entirely.
+
+ \sa indexOf(), contains()
+*/
+
+/*!
+ \fn qsizetype QByteArrayView::lastIndexOf(QByteArrayView bv) const
+ \since 6.2
+ \overload
+
+ Returns the index position of the start of the last
+ occurrence of the sequence of bytes viewed by \a bv in this byte
+ array view, searching backward from the end of this byte array
+ view. Returns -1 if no match is found.
\sa indexOf(), contains()
*/
/*!
- \fn qizetype QByteArrayView::count(QByteArrayView bv) const
+ \fn qsizetype QByteArrayView::count(QByteArrayView bv) const
Returns the number of (potentially overlapping) occurrences of the
sequence of bytes viewed by \a bv in this byte array view.
@@ -707,3 +1045,12 @@
\sa QByteArray::isNull(), QByteArrayView
*/
+
+/*!
+ \fn QByteArrayView::operator std::string_view() const
+ \since 6.7
+
+ Converts this QByteArrayView object to a \c{std::string_view} object.
+ The returned view will have the same data pointer and length of
+ this view.
+*/
diff --git a/src/corelib/text/qbytedata_p.h b/src/corelib/text/qbytedata_p.h
index 053e4202d3..fcbf82d6ce 100644
--- a/src/corelib/text/qbytedata_p.h
+++ b/src/corelib/text/qbytedata_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QBYTEDATA_P_H
#define QBYTEDATA_P_H
@@ -55,6 +19,8 @@
#include <qbytearray.h>
#include <QtCore/qlist.h>
+#include <climits>
+
QT_BEGIN_NAMESPACE
// this class handles a list of QByteArrays. It is a variant of QRingBuffer
@@ -139,6 +105,7 @@ public:
// preferably use this function to read data.
inline QByteArray read()
{
+ Q_ASSERT(!isEmpty());
squeezeFirst();
bufferCompleteSize -= buffers.first().size();
return buffers.takeFirst();
@@ -156,8 +123,15 @@ public:
inline QByteArray read(qint64 amount)
{
amount = qMin(byteAmount(), amount);
+ if constexpr (sizeof(qsizetype) == sizeof(int)) { // 32-bit
+ // While we cannot overall have more than INT_MAX memory allocated,
+ // the QByteArrays we hold may be shared copies of each other,
+ // causing byteAmount() to exceed INT_MAX.
+ if (amount > INT_MAX)
+ qBadAlloc(); // what resize() would do if it saw past the truncation
+ }
QByteArray byteData;
- byteData.resize(amount);
+ byteData.resize(qsizetype(amount));
read(byteData.data(), byteData.size());
return byteData;
}
@@ -244,6 +218,8 @@ public:
inline char getChar()
{
+ Q_ASSERT_X(!isEmpty(), "QByteDataBuffer::getChar",
+ "Cannot read a char from an empty buffer!");
char c;
read(&c, 1);
return c;
@@ -263,9 +239,9 @@ public:
}
// the number of QByteArrays
- inline int bufferCount() const
+ qsizetype bufferCount() const
{
- return buffers.length();
+ return buffers.size();
}
inline bool isEmpty() const
@@ -275,13 +251,13 @@ public:
inline qint64 sizeNextBlock() const
{
- if(buffers.isEmpty())
+ if (buffers.isEmpty())
return 0;
else
return buffers.first().size() - firstPos;
}
- inline QByteArray& operator[](int i)
+ QByteArray &operator[](qsizetype i)
{
if (i == 0)
squeezeFirst();
@@ -290,13 +266,13 @@ public:
}
inline bool canReadLine() const {
- int i = 0;
- if (i < buffers.length()) {
+ qsizetype i = 0;
+ if (i < buffers.size()) {
if (buffers.at(i).indexOf('\n', firstPos) != -1)
return true;
++i;
- for (; i < buffers.length(); i++)
+ for (; i < buffers.size(); i++)
if (buffers.at(i).contains('\n'))
return true;
}
diff --git a/src/corelib/text/qchar.cpp b/src/corelib/text/qchar.cpp
index 4d156502ef..63296a92de 100644
--- a/src/corelib/text/qchar.cpp
+++ b/src/corelib/text/qchar.cpp
@@ -1,50 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// Don't define it while compiling this module, or USERS of Qt will
-// not be able to link.
-#ifdef QT_NO_CAST_FROM_ASCII
-# undef QT_NO_CAST_FROM_ASCII
-#endif
-#ifdef QT_NO_CAST_TO_ASCII
-# undef QT_NO_CAST_TO_ASCII
-#endif
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
#include "qchar.h"
#include "qdatastream.h"
@@ -68,7 +24,7 @@ QT_BEGIN_NAMESPACE
This class is only useful to construct a QChar with 8-bit character.
- \sa QChar, QLatin1String, QString
+ \sa QChar, QLatin1StringView, QString
*/
/*!
@@ -99,6 +55,13 @@ QT_BEGIN_NAMESPACE
\ingroup string-processing
\reentrant
+ \compares strong
+ \compareswith strong char16_t QString QStringView QLatin1StringView QUtf8StringView
+ \endcompareswith
+ \compareswith strong {const char *} QByteArray QByteArrayView
+ The contents of the byte array is interpreted as utf-8.
+ \endcompareswith
+
In Qt, Unicode characters are 16-bit entities without any markup
or structure. This class represents such an entity. It is
lightweight, so it can be used everywhere. Most compilers treat
@@ -158,8 +121,14 @@ QT_BEGIN_NAMESPACE
to construct a QChar from an 8-bit \c char, and you will need to
call toLatin1() to get the 8-bit value back.
+ Starting with Qt 6.0, most QChar constructors are \c explicit. This
+ is done to avoid dangerous mistakes when accidentally mixing
+ integral types and strings. You can opt-out (and make these
+ constructors implicit) by defining the macro \c
+ QT_IMPLICIT_QCHAR_CONSTRUCTION.
+
For more information see
- \l{http://www.unicode.org/ucd/}{"About the Unicode Character Database"}.
+ \l{https://www.unicode.org/ucd/}{"About the Unicode Character Database"}.
\sa Unicode, QString, QLatin1Char
*/
@@ -167,8 +136,8 @@ QT_BEGIN_NAMESPACE
/*!
\enum QChar::UnicodeVersion
- Specifies which version of the \l{http://www.unicode.org/}{Unicode standard}
- introduced a certain character.
+ Specifies which version of the \l{Unicode standard} introduced a certain
+ character.
\value Unicode_1_1 Version 1.1
\value Unicode_2_0 Version 2.0
@@ -184,15 +153,18 @@ QT_BEGIN_NAMESPACE
\value Unicode_6_0 Version 6.0
\value Unicode_6_1 Version 6.1
\value Unicode_6_2 Version 6.2
- \value Unicode_6_3 Version 6.3 Since Qt 5.3
- \value Unicode_7_0 Version 7.0 Since Qt 5.5
- \value Unicode_8_0 Version 8.0 Since Qt 5.6
- \value Unicode_9_0 Version 9.0 Since Qt 5.11
- \value Unicode_10_0 Version 10.0 Since Qt 5.11
- \value Unicode_11_0 Version 11.0 Since Qt 5.15
- \value Unicode_12_0 Version 12.0 Since Qt 5.15
- \value Unicode_12_1 Version 12.1 Since Qt 5.15
- \value Unicode_13_0 Version 13.0 Since Qt 5.15
+ \value [since 5.3] Unicode_6_3 Version 6.3
+ \value [since 5.5] Unicode_7_0 Version 7.0
+ \value [since 5.6] Unicode_8_0 Version 8.0
+ \value [since 5.11] Unicode_9_0 Version 9.0
+ \value [since 5.11] Unicode_10_0 Version 10.0
+ \value [since 5.15] Unicode_11_0 Version 11.0
+ \value [since 5.15] Unicode_12_0 Version 12.0
+ \value [since 5.15] Unicode_12_1 Version 12.1
+ \value [since 5.15] Unicode_13_0 Version 13.0
+ \value [since 6.3] Unicode_14_0 Version 14.0
+ \value [since 6.5] Unicode_15_0 Version 15.0
+ \value [since 6.8] Unicode_15_1 Version 15.1
\value Unicode_Unassigned The value is not assigned to any character
in version 8.0 of Unicode.
@@ -279,7 +251,7 @@ QT_BEGIN_NAMESPACE
This enum type defines the Unicode script property values.
For details about the Unicode script property values see
- \l{http://www.unicode.org/reports/tr24/}{Unicode Standard Annex #24}.
+ \l{https://www.unicode.org/reports/tr24/}{Unicode Standard Annex #24}.
In order to conform to C/C++ naming conventions "Script_" is prepended
to the codes used in the Unicode Standard.
@@ -292,18 +264,18 @@ QT_BEGIN_NAMESPACE
\value Script_Common For characters that may be used with multiple scripts
and that do not inherit their script from the preceding characters.
- \value Script_Adlam Since Qt 5.11
- \value Script_Ahom Since Qt 5.6
- \value Script_AnatolianHieroglyphs Since Qt 5.6
+ \value [since 5.11] Script_Adlam
+ \value [since 5.6] Script_Ahom
+ \value [since 5.6] Script_AnatolianHieroglyphs
\value Script_Arabic
\value Script_Armenian
\value Script_Avestan
\value Script_Balinese
\value Script_Bamum
- \value Script_BassaVah Since Qt 5.5
+ \value [since 5.5] Script_BassaVah
\value Script_Batak
\value Script_Bengali
- \value Script_Bhaiksuki Since Qt 5.11
+ \value [since 5.11] Script_Bhaiksuki
\value Script_Bopomofo
\value Script_Brahmi
\value Script_Braille
@@ -311,37 +283,38 @@ QT_BEGIN_NAMESPACE
\value Script_Buhid
\value Script_CanadianAboriginal
\value Script_Carian
- \value Script_CaucasianAlbanian Since Qt 5.5
+ \value [since 5.5] Script_CaucasianAlbanian
\value Script_Chakma
\value Script_Cham
\value Script_Cherokee
- \value Script_Chorasmian Since Qt 5.15
+ \value [since 5.15] Script_Chorasmian
\value Script_Coptic
\value Script_Cuneiform
\value Script_Cypriot
+ \value [since 6.3] Script_CyproMinoan
\value Script_Cyrillic
\value Script_Deseret
\value Script_Devanagari
- \value Script_DivesAkuru Since Qt 5.15
- \value Script_Dogra Since Qt 5.15
- \value Script_Duployan Since Qt 5.5
+ \value [since 5.15] Script_DivesAkuru
+ \value [since 5.15] Script_Dogra
+ \value [since 5.5] Script_Duployan
\value Script_EgyptianHieroglyphs
- \value Script_Elbasan Since Qt 5.5
- \value Script_Elymaic Since Qt 5.15
+ \value [since 5.5] Script_Elbasan
+ \value [since 5.15] Script_Elymaic
\value Script_Ethiopic
\value Script_Georgian
\value Script_Glagolitic
\value Script_Gothic
- \value Script_Grantha Since Qt 5.5
+ \value [since 5.5] Script_Grantha
\value Script_Greek
\value Script_Gujarati
- \value Script_GunjalaGondi Since Qt 5.15
+ \value [since 5.15] Script_GunjalaGondi
\value Script_Gurmukhi
\value Script_Han
\value Script_Hangul
- \value Script_HanifiRohingya Since Qt 5.15
+ \value [since 5.15] Script_HanifiRohingya
\value Script_Hanunoo
- \value Script_Hatran Since Qt 5.6
+ \value [since 5.6] Script_Hatran
\value Script_Hebrew
\value Script_Hiragana
\value Script_ImperialAramaic
@@ -351,77 +324,80 @@ QT_BEGIN_NAMESPACE
\value Script_Kaithi
\value Script_Kannada
\value Script_Katakana
+ \value [since 6.5] Script_Kawi
\value Script_KayahLi
\value Script_Kharoshthi
- \value Script_KhitanSmallScript Since Qt 5.15
+ \value [since 5.15] Script_KhitanSmallScript
\value Script_Khmer
- \value Script_Khojki Since Qt 5.5
- \value Script_Khudawadi Since Qt 5.5
+ \value [since 5.5] Script_Khojki
+ \value [since 5.5] Script_Khudawadi
\value Script_Lao
\value Script_Latin
\value Script_Lepcha
\value Script_Limbu
- \value Script_LinearA Since Qt 5.5
+ \value [since 5.5] Script_LinearA
\value Script_LinearB
\value Script_Lisu
\value Script_Lycian
\value Script_Lydian
- \value Script_Mahajani Since Qt 5.5
- \value Script_Makasar Since Qt 5.15
+ \value [since 5.5] Script_Mahajani
+ \value [since 5.15] Script_Makasar
\value Script_Malayalam
\value Script_Mandaic
- \value Script_Manichaean Since Qt 5.5
- \value Script_Marchen Since Qt 5.11
- \value Script_MasaramGondi Since Qt 5.11
- \value Script_Medefaidrin Since Qt 5.15
+ \value [since 5.5] Script_Manichaean
+ \value [since 5.11] Script_Marchen
+ \value [since 5.11] Script_MasaramGondi
+ \value [since 5.15] Script_Medefaidrin
\value Script_MeeteiMayek
- \value Script_MendeKikakui Since Qt 5.5
+ \value [since 5.5] Script_MendeKikakui
\value Script_MeroiticCursive
\value Script_MeroiticHieroglyphs
\value Script_Miao
- \value Script_Modi Since Qt 5.5
+ \value [since 5.5] Script_Modi
\value Script_Mongolian
- \value Script_Mro Since Qt 5.5
- \value Script_Multani Since Qt 5.6
+ \value [since 5.5] Script_Mro
+ \value [since 5.6] Script_Multani
\value Script_Myanmar
- \value Script_Nabataean Since Qt 5.5
- \value Script_Nandinagari Since Qt 5.15
- \value Script_Newa Since Qt 5.11
+ \value [since 5.5] Script_Nabataean
+ \value [since 6.3] Script_NagMundari
+ \value [since 5.15] Script_Nandinagari
+ \value [since 5.11] Script_Newa
\value Script_NewTaiLue
\value Script_Nko
- \value Script_Nushu Since Qt 5.11
- \value Script_NyiakengPuachueHmong Since Qt 5.15
+ \value [since 5.11] Script_Nushu
+ \value [since 5.15] Script_NyiakengPuachueHmong
\value Script_Ogham
\value Script_OlChiki
- \value Script_OldHungarian Since Qt 5.6
+ \value [since 5.6] Script_OldHungarian
\value Script_OldItalic
- \value Script_OldNorthArabian Since Qt 5.5
- \value Script_OldPermic Since Qt 5.5
+ \value [since 5.5] Script_OldNorthArabian
+ \value [since 5.5] Script_OldPermic
\value Script_OldPersian
- \value Script_OldSogdian Since Qt 5.15
+ \value [since 5.15] Script_OldSogdian
\value Script_OldSouthArabian
\value Script_OldTurkic
+ \value [since 6.3] Script_OldUyghur
\value Script_Oriya
- \value Script_Osage Since Qt 5.11
+ \value [since 5.11] Script_Osage
\value Script_Osmanya
- \value Script_PahawhHmong Since Qt 5.5
- \value Script_Palmyrene Since Qt 5.5
- \value Script_PauCinHau Since Qt 5.5
+ \value [since 5.5] Script_PahawhHmong
+ \value [since 5.5] Script_Palmyrene
+ \value [since 5.5] Script_PauCinHau
\value Script_PhagsPa
\value Script_Phoenician
- \value Script_PsalterPahlavi Since Qt 5.5
+ \value [since 5.5] Script_PsalterPahlavi
\value Script_Rejang
\value Script_Runic
\value Script_Samaritan
\value Script_Saurashtra
\value Script_Sharada
\value Script_Shavian
- \value Script_Siddham Since Qt 5.5
- \value Script_SignWriting Since Qt 5.6
+ \value [since 5.5] Script_Siddham
+ \value [since 5.6] Script_SignWriting
\value Script_Sinhala
- \value Script_Sogdian Since Qt 5.15
+ \value [since 5.15] Script_Sogdian
\value Script_SoraSompeng
- \value Script_Soyombo Since Qt 5.11
+ \value [since 5.11] Script_Soyombo
\value Script_Sundanese
\value Script_SylotiNagri
\value Script_Syriac
@@ -432,20 +408,23 @@ QT_BEGIN_NAMESPACE
\value Script_TaiViet
\value Script_Takri
\value Script_Tamil
- \value Script_Tangut Since Qt 5.11
+ \value [since 5.11] Script_Tangut
+ \value [since 6.3] Script_Tangsa
\value Script_Telugu
\value Script_Thaana
\value Script_Thai
\value Script_Tibetan
\value Script_Tifinagh
- \value Script_Tirhuta Since Qt 5.5
+ \value [since 5.5] Script_Tirhuta
+ \value [since 6.3] Script_Toto
\value Script_Ugaritic
\value Script_Vai
- \value Script_Wancho Since Qt 5.15
- \value Script_WarangCiti Since Qt 5.5
- \value Script_Yezidi Since Qt 5.15
+ \value [since 6.3] Script_Vithkuqi
+ \value [since 5.15] Script_Wancho
+ \value [since 5.5] Script_WarangCiti
+ \value [since 5.15] Script_Yezidi
\value Script_Yi
- \value Script_ZanabazarSquare Since Qt 5.11
+ \value [since 5.11] Script_ZanabazarSquare
\omitvalue ScriptCount
@@ -456,8 +435,8 @@ QT_BEGIN_NAMESPACE
\enum QChar::Direction
This enum type defines the Unicode direction attributes. See the
- \l{http://www.unicode.org/reports/tr9/tr9-35.html#Table_Bidirectional_Character_Types}{Unicode Standard} for a description
- of the values.
+ \l{https://www.unicode.org/reports/tr9/tr9-35.html#Table_Bidirectional_Character_Types}{Unicode
+ Standard} for a description of the values.
In order to conform to C/C++ naming conventions "Dir" is prepended
to the codes used in the Unicode Standard.
@@ -470,18 +449,18 @@ QT_BEGIN_NAMESPACE
\value DirEN
\value DirES
\value DirET
- \value DirFSI Since Qt 5.3
+ \value [since 5.3] DirFSI
\value DirL
\value DirLRE
- \value DirLRI Since Qt 5.3
+ \value [since 5.3] DirLRI
\value DirLRO
\value DirNSM
\value DirON
\value DirPDF
- \value DirPDI Since Qt 5.3
+ \value [since 5.3] DirPDI
\value DirR
\value DirRLE
- \value DirRLI Since Qt 5.3
+ \value [since 5.3] DirRLI
\value DirRLO
\value DirS
\value DirWS
@@ -493,8 +472,7 @@ QT_BEGIN_NAMESPACE
\enum QChar::Decomposition
This enum type defines the Unicode decomposition attributes. See
- the \l{http://www.unicode.org/}{Unicode Standard} for a
- description of the values.
+ the \l{Unicode standard} for a description of the values.
\value NoDecomposition
\value Canonical
@@ -523,7 +501,7 @@ QT_BEGIN_NAMESPACE
since 5.3
This enum type defines the Unicode joining type attributes. See the
- \l{http://www.unicode.org/}{Unicode Standard} for a description of the values.
+ \l{Unicode standard} for a description of the values.
In order to conform to C/C++ naming conventions "Joining_" is prepended
to the codes used in the Unicode Standard.
@@ -544,8 +522,7 @@ QT_BEGIN_NAMESPACE
\internal
This enum type defines names for some of the Unicode combining
- classes. See the \l{http://www.unicode.org/}{Unicode Standard}
- for a description of the values.
+ classes. See the \l{Unicode Standard} for a description of the values.
\value Combining_Above
\value Combining_AboveAttached
@@ -589,6 +566,7 @@ QT_BEGIN_NAMESPACE
\value ByteOrderSwapped
\value ParagraphSeparator
\value LineSeparator
+ \value [since 6.2] VisualTabCharacter Used to represent a tabulation as a horizontal arrow.
\value LastValidCodePoint
*/
@@ -1373,31 +1351,28 @@ char32_t QChar::mirroredChar(char32_t ucs4) noexcept
return ucs4 + qGetProp(ucs4)->mirrorDiff;
}
-
-// constants for Hangul (de)composition, see UAX #15
-enum {
- Hangul_SBase = 0xac00,
- Hangul_LBase = 0x1100,
- Hangul_VBase = 0x1161,
- Hangul_TBase = 0x11a7,
- Hangul_LCount = 19,
- Hangul_VCount = 21,
- Hangul_TCount = 28,
- Hangul_NCount = Hangul_VCount * Hangul_TCount,
- Hangul_SCount = Hangul_LCount * Hangul_NCount
-};
+// Constants for Hangul (de)composition, see UAX #15:
+static constexpr char32_t Hangul_SBase = 0xac00;
+static constexpr char32_t Hangul_LBase = 0x1100;
+static constexpr char32_t Hangul_VBase = 0x1161;
+static constexpr char32_t Hangul_TBase = 0x11a7;
+static constexpr quint32 Hangul_LCount = 19;
+static constexpr quint32 Hangul_VCount = 21;
+static constexpr quint32 Hangul_TCount = 28;
+static constexpr quint32 Hangul_NCount = Hangul_VCount * Hangul_TCount;
+static constexpr quint32 Hangul_SCount = Hangul_LCount * Hangul_NCount;
// buffer has to have a length of 3. It's needed for Hangul decomposition
-static const unsigned short * QT_FASTCALL decompositionHelper
- (uint ucs4, qsizetype *length, int *tag, unsigned short *buffer)
+static const QChar * QT_FASTCALL decompositionHelper(
+ char32_t ucs4, qsizetype *length, QChar::Decomposition *tag, QChar *buffer)
{
if (ucs4 >= Hangul_SBase && ucs4 < Hangul_SBase + Hangul_SCount) {
// compute Hangul syllable decomposition as per UAX #15
- const uint SIndex = ucs4 - Hangul_SBase;
- buffer[0] = Hangul_LBase + SIndex / Hangul_NCount; // L
- buffer[1] = Hangul_VBase + (SIndex % Hangul_NCount) / Hangul_TCount; // V
- buffer[2] = Hangul_TBase + SIndex % Hangul_TCount; // T
- *length = buffer[2] == Hangul_TBase ? 2 : 3;
+ const char32_t SIndex = ucs4 - Hangul_SBase;
+ buffer[0] = QChar(Hangul_LBase + SIndex / Hangul_NCount); // L
+ buffer[1] = QChar(Hangul_VBase + (SIndex % Hangul_NCount) / Hangul_TCount); // V
+ buffer[2] = QChar(Hangul_TBase + SIndex % Hangul_TCount); // T
+ *length = buffer[2].unicode() == Hangul_TBase ? 2 : 3;
*tag = QChar::Canonical;
return buffer;
}
@@ -1410,9 +1385,9 @@ static const unsigned short * QT_FASTCALL decompositionHelper
}
const unsigned short *decomposition = uc_decomposition_map+index;
- *tag = (*decomposition) & 0xff;
+ *tag = QChar::Decomposition((*decomposition) & 0xff);
*length = (*decomposition) >> 8;
- return decomposition+1;
+ return reinterpret_cast<const QChar *>(decomposition + 1);
}
/*!
@@ -1433,11 +1408,11 @@ QString QChar::decomposition() const
*/
QString QChar::decomposition(char32_t ucs4)
{
- unsigned short buffer[3];
+ QChar buffer[3];
qsizetype length;
- int tag;
- const unsigned short *d = decompositionHelper(ucs4, &length, &tag, buffer);
- return QString(reinterpret_cast<const QChar *>(d), length);
+ QChar::Decomposition tag;
+ const QChar *d = decompositionHelper(ucs4, &length, &tag, buffer);
+ return QString(d, length);
}
/*!
@@ -1566,7 +1541,7 @@ static auto fullConvertCase(char32_t uc, QUnicodeTables::Case which) noexcept
while (length--)
*pp++ = *specialCase++;
} else {
- // so far, case convertion never changes planes (guaranteed by the qunicodetables generator)
+ // so far, case conversion never changes planes (guaranteed by the qunicodetables generator)
for (char16_t c : QChar::fromUcs4(uc + caseDiff))
*pp++ = c;
}
@@ -1772,59 +1747,64 @@ QDataStream &operator>>(QDataStream &in, QChar &chr)
*****************************************************************************/
/*!
- \fn bool operator==(QChar c1, QChar c2)
-
- \relates QChar
+ \fn bool QChar::operator==(const QChar &c1, const QChar &c2)
Returns \c true if \a c1 and \a c2 are the same Unicode character;
otherwise returns \c false.
*/
/*!
- \fn int operator!=(QChar c1, QChar c2)
-
- \relates QChar
+ \fn bool QChar::operator!=(const QChar &c1, const QChar &c2)
Returns \c true if \a c1 and \a c2 are not the same Unicode
character; otherwise returns \c false.
*/
/*!
- \fn int operator<=(QChar c1, QChar c2)
-
- \relates QChar
+ \fn bool QChar::operator<=(const QChar &c1, const QChar &c2)
Returns \c true if the numeric Unicode value of \a c1 is less than
or equal to that of \a c2; otherwise returns \c false.
*/
/*!
- \fn int operator>=(QChar c1, QChar c2)
-
- \relates QChar
+ \fn bool QChar::operator>=(const QChar &c1, const QChar &c2)
Returns \c true if the numeric Unicode value of \a c1 is greater than
or equal to that of \a c2; otherwise returns \c false.
*/
/*!
- \fn int operator<(QChar c1, QChar c2)
-
- \relates QChar
+ \fn bool QChar::operator<(const QChar &c1, const QChar &c2)
Returns \c true if the numeric Unicode value of \a c1 is less than
that of \a c2; otherwise returns \c false.
*/
/*!
- \fn int operator>(QChar c1, QChar c2)
-
- \relates QChar
+ \fn bool QChar::operator>(const QChar &c1, const QChar &c2)
Returns \c true if the numeric Unicode value of \a c1 is greater than
that of \a c2; otherwise returns \c false.
*/
+/*!
+ \fn Qt::Literals::StringLiterals::operator""_L1(char ch)
+
+ \relates QLatin1Char
+ \since 6.4
+
+ Literal operator that creates a QLatin1Char out of \a ch.
+
+ The following code creates a QLatin1Char:
+ \code
+ using namespace Qt::Literals::StringLiterals;
+
+ auto ch = 'a'_L1;
+ \endcode
+
+ \sa Qt::Literals::StringLiterals
+*/
// ---------------------------------------------------------------------------
@@ -1832,15 +1812,15 @@ QDataStream &operator>>(QDataStream &in, QChar &chr)
static void decomposeHelper(QString *str, bool canonical, QChar::UnicodeVersion version, qsizetype from)
{
qsizetype length;
- int tag;
- unsigned short buffer[3];
+ QChar::Decomposition tag;
+ QChar buffer[3];
QString &s = *str;
const unsigned short *utf16 = reinterpret_cast<unsigned short *>(s.data());
- const unsigned short *uc = utf16 + s.length();
+ const unsigned short *uc = utf16 + s.size();
while (uc != utf16 + from) {
- uint ucs4 = *(--uc);
+ char32_t ucs4 = *(--uc);
if (QChar(ucs4).isLowSurrogate() && uc != utf16) {
ushort high = *(uc - 1);
if (QChar(high).isHighSurrogate()) {
@@ -1852,12 +1832,12 @@ static void decomposeHelper(QString *str, bool canonical, QChar::UnicodeVersion
if (QChar::unicodeVersion(ucs4) > version)
continue;
- const unsigned short *d = decompositionHelper(ucs4, &length, &tag, buffer);
+ const QChar *d = decompositionHelper(ucs4, &length, &tag, buffer);
if (!d || (canonical && tag != QChar::Canonical))
continue;
qsizetype pos = uc - utf16;
- s.replace(pos, QChar::requiresSurrogates(ucs4) ? 2 : 1, reinterpret_cast<const QChar *>(d), length);
+ s.replace(pos, QChar::requiresSurrogates(ucs4) ? 2 : 1, d, length);
// since the replace invalidates the pointers and we do decomposition recursive
utf16 = reinterpret_cast<unsigned short *>(s.data());
uc = utf16 + pos + length;
@@ -1884,27 +1864,27 @@ struct UCS2SurrogatePair {
inline bool operator<(const UCS2SurrogatePair &ligature1, const UCS2SurrogatePair &ligature2)
{ return QChar::surrogateToUcs4(ligature1.p1.u1, ligature1.p1.u2) < QChar::surrogateToUcs4(ligature2.p1.u1, ligature2.p1.u2); }
-inline bool operator<(uint u1, const UCS2SurrogatePair &ligature)
+inline bool operator<(char32_t u1, const UCS2SurrogatePair &ligature)
{ return u1 < QChar::surrogateToUcs4(ligature.p1.u1, ligature.p1.u2); }
-inline bool operator<(const UCS2SurrogatePair &ligature, uint u1)
+inline bool operator<(const UCS2SurrogatePair &ligature, char32_t u1)
{ return QChar::surrogateToUcs4(ligature.p1.u1, ligature.p1.u2) < u1; }
-static uint inline ligatureHelper(uint u1, uint u2)
+static char32_t inline ligatureHelper(char32_t u1, char32_t u2)
{
- if (u1 >= Hangul_LBase && u1 <= Hangul_SBase + Hangul_SCount) {
+ if (u1 >= Hangul_LBase && u1 < Hangul_SBase + Hangul_SCount) {
// compute Hangul syllable composition as per UAX #15
// hangul L-V pair
- const uint LIndex = u1 - Hangul_LBase;
+ const char32_t LIndex = u1 - Hangul_LBase;
if (LIndex < Hangul_LCount) {
- const uint VIndex = u2 - Hangul_VBase;
+ const char32_t VIndex = u2 - Hangul_VBase;
if (VIndex < Hangul_VCount)
return Hangul_SBase + (LIndex * Hangul_VCount + VIndex) * Hangul_TCount;
}
// hangul LV-T pair
- const uint SIndex = u1 - Hangul_SBase;
+ const char32_t SIndex = u1 - Hangul_SBase;
if (SIndex < Hangul_SCount && (SIndex % Hangul_TCount) == 0) {
- const uint TIndex = u2 - Hangul_TBase;
- if (TIndex <= Hangul_TCount)
+ const char32_t TIndex = u2 - Hangul_TBase;
+ if (TIndex < Hangul_TCount && TIndex)
return u1 + TIndex;
}
}
@@ -1933,19 +1913,19 @@ static void composeHelper(QString *str, QChar::UnicodeVersion version, qsizetype
{
QString &s = *str;
- if (from < 0 || s.length() - from < 2)
+ if (from < 0 || s.size() - from < 2)
return;
- uint stcode = 0; // starter code point
+ char32_t stcode = 0; // starter code point
qsizetype starter = -1; // starter position
qsizetype next = -1; // to prevent i == next
int lastCombining = 255; // to prevent combining > lastCombining
qsizetype pos = from;
- while (pos < s.length()) {
+ while (pos < s.size()) {
qsizetype i = pos;
char32_t uc = s.at(pos).unicode();
- if (QChar(uc).isHighSurrogate() && pos < s.length()-1) {
+ if (QChar(uc).isHighSurrogate() && pos < s.size()-1) {
ushort low = s.at(pos+1).unicode();
if (QChar(low).isLowSurrogate()) {
uc = QChar::surrogateToUcs4(uc, low);
@@ -1965,7 +1945,7 @@ static void composeHelper(QString *str, QChar::UnicodeVersion version, qsizetype
int combining = p->combiningClass;
if ((i == next || combining > lastCombining) && starter >= from) {
// allowed to form ligature with S
- uint ligature = ligatureHelper(stcode, uc);
+ char32_t ligature = ligatureHelper(stcode, uc);
if (ligature) {
stcode = ligature;
QChar *d = s.data();
@@ -1992,7 +1972,7 @@ static void composeHelper(QString *str, QChar::UnicodeVersion version, qsizetype
static void canonicalOrderHelper(QString *str, QChar::UnicodeVersion version, qsizetype from)
{
QString &s = *str;
- const qsizetype l = s.length()-1;
+ const qsizetype l = s.size()-1;
char32_t u1, u2;
char16_t c1, c2;
@@ -2080,8 +2060,8 @@ static bool normalizationQuickCheckHelper(QString *str, QString::NormalizationFo
enum { NFQC_YES = 0, NFQC_NO = 1, NFQC_MAYBE = 3 };
- const ushort *string = reinterpret_cast<const ushort *>(str->constData());
- qsizetype length = str->length();
+ const auto *string = reinterpret_cast<const char16_t *>(str->constData());
+ qsizetype length = str->size();
// this avoids one out of bounds check in the loop
while (length > from && QChar::isHighSurrogate(string[length - 1]))
@@ -2124,10 +2104,57 @@ static bool normalizationQuickCheckHelper(QString *str, QString::NormalizationFo
*lastStable = pos;
}
- if (length != str->length()) // low surrogate parts at the end of text
- *lastStable = str->length() - 1;
+ if (length != str->size()) // low surrogate parts at the end of text
+ *lastStable = str->size() - 1;
return true;
}
+/*!
+ \macro QT_IMPLICIT_QCHAR_CONSTRUCTION
+ \since 6.0
+ \relates QChar
+
+ Defining this macro makes certain QChar constructors implicit
+ rather than explicit. This is done to enforce safe conversions:
+
+ \badcode
+
+ QString str = getString();
+ if (str == 123) {
+ // Oops, meant str == "123". By default does not compile,
+ // *unless* this macro is defined, in which case, it's interpreted
+ // as `if (str == QChar(123))`, that is, `if (str == '{')`.
+ // Likely, not what we meant.
+ }
+
+ \endcode
+
+ This macro is provided to keep existing code working; it is
+ recommended to instead use explicit conversions and/or QLatin1Char.
+ For instance:
+
+ \code
+
+ QChar c1 = 'x'; // OK, unless QT_NO_CAST_FROM_ASCII is defined
+ QChar c2 = u'x'; // always OK, recommended
+ QChar c3 = QLatin1Char('x'); // always OK, recommended
+
+ // from int to 1 UTF-16 code unit: must guarantee that the input is <= 0xFFFF
+ QChar c4 = 120; // compile error, unless QT_IMPLICIT_QCHAR_CONSTRUCTION is defined
+ QChar c5(120); // OK (direct initialization)
+ auto c6 = QChar(120); // ditto
+
+ // from int/char32_t to 1/2 UTF-16 code units:
+ // 𝄞 'MUSICAL SYMBOL G CLEF' (U+1D11E)
+ auto c7 = QChar(0x1D11E); // compiles, but undefined behavior at runtime
+ auto c8 = QChar::fromUcs4(0x1D11E); // always OK
+ auto c9 = QChar::fromUcs4(U'\U0001D11E'); // always OK
+ // => use c8/c9 as QStringView objects
+
+ \endcode
+
+ \sa QLatin1Char, QChar::fromUcs4, QT_NO_CAST_FROM_ASCII
+*/
+
QT_END_NAMESPACE
diff --git a/src/corelib/text/qchar.h b/src/corelib/text/qchar.h
index 5d807d97a3..c0c53664c2 100644
--- a/src/corelib/text/qchar.h
+++ b/src/corelib/text/qchar.h
@@ -1,46 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QCHAR_H
#define QCHAR_H
#include <QtCore/qglobal.h>
+#include <QtCore/qcompare.h>
#include <functional> // for std::hash
@@ -56,25 +21,27 @@ public:
constexpr inline char toLatin1() const noexcept { return ch; }
constexpr inline char16_t unicode() const noexcept { return char16_t(uchar(ch)); }
+ friend constexpr bool
+ comparesEqual(const QLatin1Char &lhs, const QLatin1Char &rhs) noexcept
+ { return lhs.ch == rhs.ch; }
+ friend constexpr Qt::strong_ordering
+ compareThreeWay(const QLatin1Char &lhs, const QLatin1Char &rhs) noexcept
+ { return Qt::compareThreeWay(uchar(lhs.ch), uchar(rhs.ch)); }
+ Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QLatin1Char)
+
+ friend constexpr bool comparesEqual(const QLatin1Char &lhs, char rhs) noexcept
+ { return lhs.toLatin1() == rhs; }
+ friend constexpr Qt::strong_ordering
+ compareThreeWay(const QLatin1Char &lhs, char rhs) noexcept
+ { return Qt::compareThreeWay(uchar(lhs.toLatin1()), uchar(rhs)); }
+ Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QLatin1Char, char)
+
private:
char ch;
};
-constexpr inline bool operator==(char lhs, QLatin1Char rhs) noexcept { return lhs == rhs.toLatin1(); }
-constexpr inline bool operator!=(char lhs, QLatin1Char rhs) noexcept { return lhs != rhs.toLatin1(); }
-constexpr inline bool operator<=(char lhs, QLatin1Char rhs) noexcept { return lhs <= rhs.toLatin1(); }
-constexpr inline bool operator>=(char lhs, QLatin1Char rhs) noexcept { return lhs >= rhs.toLatin1(); }
-constexpr inline bool operator< (char lhs, QLatin1Char rhs) noexcept { return lhs < rhs.toLatin1(); }
-constexpr inline bool operator> (char lhs, QLatin1Char rhs) noexcept { return lhs > rhs.toLatin1(); }
-
-constexpr inline bool operator==(QLatin1Char lhs, char rhs) noexcept { return lhs.toLatin1() == rhs; }
-constexpr inline bool operator!=(QLatin1Char lhs, char rhs) noexcept { return lhs.toLatin1() != rhs; }
-constexpr inline bool operator<=(QLatin1Char lhs, char rhs) noexcept { return lhs.toLatin1() <= rhs; }
-constexpr inline bool operator>=(QLatin1Char lhs, char rhs) noexcept { return lhs.toLatin1() >= rhs; }
-constexpr inline bool operator< (QLatin1Char lhs, char rhs) noexcept { return lhs.toLatin1() < rhs; }
-constexpr inline bool operator> (QLatin1Char lhs, char rhs) noexcept { return lhs.toLatin1() > rhs; }
-
-class Q_CORE_EXPORT QChar {
+#define QT_CHAR_FASTCALL QT7_ONLY(Q_CORE_EXPORT) QT_FASTCALL
+class QT6_ONLY(Q_CORE_EXPORT) QChar {
public:
enum SpecialCharacter {
Null = 0x0000,
@@ -91,34 +58,39 @@ public:
ByteOrderSwapped = 0xfffe,
ParagraphSeparator = 0x2029,
LineSeparator = 0x2028,
+ VisualTabCharacter = 0x2192,
LastValidCodePoint = 0x10ffff
};
- constexpr QChar() noexcept : ucs(0) {}
- constexpr QChar(ushort rc) noexcept : ucs(rc) {}
- constexpr QChar(uchar c, uchar r) noexcept : ucs(char16_t((r << 8) | c)) {}
- constexpr QChar(short rc) noexcept : ucs(char16_t(rc)) {}
- constexpr QChar(uint rc) noexcept : ucs(char16_t(rc & 0xffff)) {}
- constexpr QChar(int rc) noexcept : ucs(char16_t(rc & 0xffff)) {}
- constexpr QChar(SpecialCharacter s) noexcept : ucs(char16_t(s)) {} // implicit
- constexpr QChar(QLatin1Char ch) noexcept : ucs(ch.unicode()) {} // implicit
- constexpr QChar(char16_t ch) noexcept : ucs(ch) {} // implicit
-#if defined(Q_OS_WIN)
- static_assert(sizeof(wchar_t) == sizeof(char16_t));
+#ifdef QT_IMPLICIT_QCHAR_CONSTRUCTION
+#define QCHAR_MAYBE_IMPLICIT Q_IMPLICIT
+#else
+#define QCHAR_MAYBE_IMPLICIT explicit
#endif
-#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
-# if !defined(_WCHAR_T_DEFINED) || defined(_NATIVE_WCHAR_T_DEFINED)
- constexpr QChar(wchar_t ch) noexcept : ucs(char16_t(ch)) {} // implicit
-# endif
+
+ constexpr Q_IMPLICIT QChar() noexcept : ucs(0) {}
+ constexpr Q_IMPLICIT QChar(ushort rc) noexcept : ucs(rc) {}
+ constexpr QCHAR_MAYBE_IMPLICIT QChar(uchar c, uchar r) noexcept : ucs(char16_t((r << 8) | c)) {}
+ constexpr Q_IMPLICIT QChar(short rc) noexcept : ucs(char16_t(rc)) {}
+ constexpr QCHAR_MAYBE_IMPLICIT QChar(uint rc) noexcept : ucs((Q_ASSERT(rc <= 0xffff), char16_t(rc))) {}
+ constexpr QCHAR_MAYBE_IMPLICIT QChar(int rc) noexcept : QChar(uint(rc)) {}
+ constexpr Q_IMPLICIT QChar(SpecialCharacter s) noexcept : ucs(char16_t(s)) {}
+ constexpr Q_IMPLICIT QChar(QLatin1Char ch) noexcept : ucs(ch.unicode()) {}
+ constexpr Q_IMPLICIT QChar(char16_t ch) noexcept : ucs(ch) {}
+#if defined(Q_OS_WIN) || defined(Q_QDOC)
+ constexpr Q_IMPLICIT QChar(wchar_t ch) noexcept : ucs(char16_t(ch)) {}
#endif
#ifndef QT_NO_CAST_FROM_ASCII
- QT_ASCII_CAST_WARN constexpr QChar(char c) noexcept : ucs(uchar(c)) { }
+ // Always implicit -- allow for 'x' => QChar conversions
+ QT_ASCII_CAST_WARN constexpr Q_IMPLICIT QChar(char c) noexcept : ucs(uchar(c)) { }
#ifndef QT_RESTRICTED_CAST_FROM_ASCII
- QT_ASCII_CAST_WARN constexpr QChar(uchar c) noexcept : ucs(c) { }
+ QT_ASCII_CAST_WARN constexpr QCHAR_MAYBE_IMPLICIT QChar(uchar c) noexcept : ucs(c) { }
#endif
#endif
+#undef QCHAR_MAYBE_IMPLICIT
+
static constexpr QChar fromUcs2(char16_t c) noexcept { return QChar{c}; }
static constexpr inline auto fromUcs4(char32_t c) noexcept;
@@ -351,6 +323,17 @@ public:
Script_KhitanSmallScript,
Script_Yezidi,
+ // Unicode 14.0 additions
+ Script_CyproMinoan,
+ Script_OldUyghur,
+ Script_Tangsa,
+ Script_Toto,
+ Script_Vithkuqi,
+
+ // Unicode 15.0 additions
+ Script_Kawi,
+ Script_NagMundari,
+
ScriptCount
};
@@ -441,7 +424,10 @@ public:
Unicode_11_0,
Unicode_12_0,
Unicode_12_1,
- Unicode_13_0
+ Unicode_13_0,
+ Unicode_14_0,
+ Unicode_15_0,
+ Unicode_15_1,
};
inline Category category() const noexcept { return QChar::category(ucs); }
@@ -535,39 +521,39 @@ public:
return char16_t(ucs4%0x400 + 0xdc00);
}
- static Category QT_FASTCALL category(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static Direction QT_FASTCALL direction(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static JoiningType QT_FASTCALL joiningType(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static unsigned char QT_FASTCALL combiningClass(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static Category QT_CHAR_FASTCALL category(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static Direction QT_CHAR_FASTCALL direction(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static JoiningType QT_CHAR_FASTCALL joiningType(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static unsigned char QT_CHAR_FASTCALL combiningClass(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static char32_t QT_FASTCALL mirroredChar(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL hasMirrored(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static char32_t QT_CHAR_FASTCALL mirroredChar(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL hasMirrored(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static QString QT_FASTCALL decomposition(char32_t ucs4);
- static Decomposition QT_FASTCALL decompositionTag(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static QString QT_CHAR_FASTCALL decomposition(char32_t ucs4);
+ static Decomposition QT_CHAR_FASTCALL decompositionTag(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static int QT_FASTCALL digitValue(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static char32_t QT_FASTCALL toLower(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static char32_t QT_FASTCALL toUpper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static char32_t QT_FASTCALL toTitleCase(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static char32_t QT_FASTCALL toCaseFolded(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static int QT_CHAR_FASTCALL digitValue(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static char32_t QT_CHAR_FASTCALL toLower(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static char32_t QT_CHAR_FASTCALL toUpper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static char32_t QT_CHAR_FASTCALL toTitleCase(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static char32_t QT_CHAR_FASTCALL toCaseFolded(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static Script QT_FASTCALL script(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static Script QT_CHAR_FASTCALL script(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static UnicodeVersion QT_FASTCALL unicodeVersion(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static UnicodeVersion QT_CHAR_FASTCALL unicodeVersion(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static UnicodeVersion QT_FASTCALL currentUnicodeVersion() noexcept Q_DECL_CONST_FUNCTION;
+ static UnicodeVersion QT_CHAR_FASTCALL currentUnicodeVersion() noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isPrint(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isPrint(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
static constexpr inline bool isSpace(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION
{
// note that [0x09..0x0d] + 0x85 are exceptional Cc-s and must be handled explicitly
return ucs4 == 0x20 || (ucs4 <= 0x0d && ucs4 >= 0x09)
|| (ucs4 > 127 && (ucs4 == 0x85 || ucs4 == 0xa0 || QChar::isSpace_helper(ucs4)));
}
- static bool QT_FASTCALL isMark(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isPunct(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isSymbol(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isMark(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isPunct(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isSymbol(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
static constexpr inline bool isLetter(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION
{
return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
@@ -590,53 +576,74 @@ public:
static constexpr inline bool isTitleCase(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION
{ return ucs4 > 127 && QChar::category(ucs4) == Letter_Titlecase; }
+ friend constexpr bool comparesEqual(const QChar &lhs, const QChar &rhs) noexcept
+ { return lhs.ucs == rhs.ucs; }
+ friend constexpr Qt::strong_ordering
+ compareThreeWay(const QChar &lhs, const QChar &rhs) noexcept
+ { return Qt::compareThreeWay(lhs.ucs, rhs.ucs); }
+ Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QChar)
+
+ friend constexpr bool comparesEqual(const QChar &lhs, std::nullptr_t) noexcept
+ { return lhs.isNull(); }
+ friend constexpr Qt::strong_ordering
+ compareThreeWay(const QChar &lhs, std::nullptr_t) noexcept
+ { return lhs.isNull() ? Qt::strong_ordering::equivalent : Qt::strong_ordering::greater; }
+ Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QChar, std::nullptr_t)
+
private:
- static bool QT_FASTCALL isSpace_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isLetter_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isNumber_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isLetterOrNumber_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isSpace_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isLetter_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isNumber_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+ static bool QT_CHAR_FASTCALL isLetterOrNumber_helper(char32_t ucs4) noexcept Q_DECL_CONST_FUNCTION;
+
+ // defined in qstring.cpp, because we need to go via QUtf8StringView
+ static bool QT_CHAR_FASTCALL
+ equal_helper(QChar lhs, const char *rhs) noexcept Q_DECL_CONST_FUNCTION;
+ static int QT_CHAR_FASTCALL
+ compare_helper(QChar lhs, const char *rhs) noexcept Q_DECL_CONST_FUNCTION;
+
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ Q_WEAK_OVERLOAD
+ friend bool comparesEqual(const QChar &lhs, const char *rhs) noexcept
+ { return equal_helper(lhs, rhs); }
+ Q_WEAK_OVERLOAD
+ friend Qt::strong_ordering compareThreeWay(const QChar &lhs, const char *rhs) noexcept
+ {
+ const int res = compare_helper(lhs, rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QChar, const char *, Q_WEAK_OVERLOAD QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
#ifdef QT_NO_CAST_FROM_ASCII
- QChar(char c) noexcept;
- QChar(uchar c) noexcept;
+ QChar(char c) = delete;
+ QChar(uchar c) = delete;
#endif
- friend constexpr bool operator==(QChar, QChar) noexcept;
- friend constexpr bool operator< (QChar, QChar) noexcept;
char16_t ucs;
};
+#undef QT_CHAR_FASTCALL
-Q_DECLARE_TYPEINFO(QChar, Q_MOVABLE_TYPE);
-
-constexpr inline bool operator==(QChar c1, QChar c2) noexcept { return c1.ucs == c2.ucs; }
-constexpr inline bool operator< (QChar c1, QChar c2) noexcept { return c1.ucs < c2.ucs; }
-
-constexpr inline bool operator!=(QChar c1, QChar c2) noexcept { return !operator==(c1, c2); }
-constexpr inline bool operator>=(QChar c1, QChar c2) noexcept { return !operator< (c1, c2); }
-constexpr inline bool operator> (QChar c1, QChar c2) noexcept { return operator< (c2, c1); }
-constexpr inline bool operator<=(QChar c1, QChar c2) noexcept { return !operator< (c2, c1); }
-
-
-constexpr inline bool operator==(QChar lhs, std::nullptr_t) noexcept { return lhs.isNull(); }
-constexpr inline bool operator< (QChar, std::nullptr_t) noexcept { return false; }
-constexpr inline bool operator==(std::nullptr_t, QChar rhs) noexcept { return rhs.isNull(); }
-constexpr inline bool operator< (std::nullptr_t, QChar rhs) noexcept { return !rhs.isNull(); }
-
-constexpr inline bool operator!=(QChar lhs, std::nullptr_t) noexcept { return !operator==(lhs, nullptr); }
-constexpr inline bool operator>=(QChar lhs, std::nullptr_t) noexcept { return !operator< (lhs, nullptr); }
-constexpr inline bool operator> (QChar lhs, std::nullptr_t) noexcept { return operator< (nullptr, lhs); }
-constexpr inline bool operator<=(QChar lhs, std::nullptr_t) noexcept { return !operator< (nullptr, lhs); }
-
-constexpr inline bool operator!=(std::nullptr_t, QChar rhs) noexcept { return !operator==(nullptr, rhs); }
-constexpr inline bool operator>=(std::nullptr_t, QChar rhs) noexcept { return !operator< (nullptr, rhs); }
-constexpr inline bool operator> (std::nullptr_t, QChar rhs) noexcept { return operator< (rhs, nullptr); }
-constexpr inline bool operator<=(std::nullptr_t, QChar rhs) noexcept { return !operator< (rhs, nullptr); }
+Q_DECLARE_TYPEINFO(QChar, Q_PRIMITIVE_TYPE);
#ifndef QT_NO_DATASTREAM
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QChar);
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QChar &);
#endif
+namespace Qt {
+inline namespace Literals {
+inline namespace StringLiterals {
+
+constexpr inline QLatin1Char operator""_L1(char ch) noexcept
+{
+ return QLatin1Char(ch);
+}
+
+} // StringLiterals
+} // Literals
+} // Qt
+
QT_END_NAMESPACE
namespace std {
diff --git a/src/corelib/text/qcollator.cpp b/src/corelib/text/qcollator.cpp
index 4bef356044..1f7e7459e7 100644
--- a/src/corelib/text/qcollator.cpp
+++ b/src/corelib/text/qcollator.cpp
@@ -1,50 +1,39 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qcollator_p.h"
#include "qstringlist.h"
#include "qstring.h"
#include "qdebug.h"
+#include "qlocale_p.h"
+#include "qthreadstorage.h"
QT_BEGIN_NAMESPACE
+QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QCollatorSortKeyPrivate)
+
+namespace {
+struct GenerationalCollator
+{
+ QCollator theCollator;
+ int generation = QLocalePrivate::s_generation.loadRelaxed();
+public:
+ GenerationalCollator() = default;
+ GenerationalCollator(const QCollator &copy) : theCollator(copy) {}
+ QCollator &collator()
+ {
+ int currentGeneration = QLocalePrivate::s_generation.loadRelaxed();
+ if (Q_UNLIKELY(generation != currentGeneration)) {
+ // reinitialize the collator
+ generation = currentGeneration;
+ theCollator = QCollator();
+ }
+ return theCollator;
+ }
+};
+}
+Q_GLOBAL_STATIC(QThreadStorage<GenerationalCollator>, defaultCollator)
/*!
\class QCollator
@@ -58,35 +47,60 @@ QT_BEGIN_NAMESPACE
\ingroup string-processing
\ingroup shared
- QCollator is initialized with a QLocale and an optional collation strategy.
- It tries to initialize the collator with the specified values. The collator
- can then be used to compare and sort strings in a locale dependent fashion.
+ QCollator is initialized with a QLocale. It can then be used to compare and
+ sort strings by using the ordering appropriate for that locale.
+
+ A QCollator object can be used together with template-based sorting
+ algorithms, such as std::sort(), to sort a list with QString entries.
+
+ \snippet code/src_corelib_text_qcollator.cpp 0
+
+ In addition to the locale, several optional flags can be set that influence
+ the result of the collation.
+
+ \section1 POSIX fallback implementation
+
+ On Unix systems, Qt is normally compiled to use ICU (except for \macos,
+ where Qt defaults to using an equivalent Apple API). However, if ICU was
+ not available at compile time or explicitly disabled, Qt will use a
+ fallback backend that uses the POSIX API only. This backend has several
+ limitations:
- A QCollator object can be used together with template based sorting
- algorithms such as std::sort to sort a list of QStrings.
+ \list
+ \li Only the QLocale::c() and QLocale::system() locales are supported.
+ Consult the POSIX and C Standard Library manuals for the
+ \c{<locale.h>} header for more information on the system locale.
+ \li caseSensitivity() is not supported: only case-sensitive collation
+ can be performed.
+ \li numericMode() and ignorePunctuation() are not supported.
+ \endlist
- In addition to the locale and collation strategy, several optional flags can
- be set that influence the result of the collation.
+ The use of any of the unsupported options will cause a warning to be
+ printed to the application's output.
*/
/*!
\since 5.13
- Constructs a QCollator using the system's default collation locale.
+ Constructs a QCollator using the default locale's collation locale.
- \sa setLocale(), QLocale::collation()
+ The system locale, when used as default locale, may have a collation locale
+ other than itself (e.g. on Unix, if LC_COLLATE is set differently to LANG in
+ the environment). All other locales are their own collation locales.
+
+ \sa setLocale(), QLocale::collation(), QLocale::setDefault()
*/
QCollator::QCollator()
- : d(new QCollatorPrivate(QLocale::system().collation()))
+ : d(new QCollatorPrivate(QLocale().collation()))
{
d->init();
}
/*!
- Constructs a QCollator from \a locale.
+ Constructs a QCollator using the given \a locale.
\sa setLocale()
- */
+*/
QCollator::QCollator(const QLocale &locale)
: d(new QCollatorPrivate(locale))
{
@@ -94,21 +108,20 @@ QCollator::QCollator(const QLocale &locale)
/*!
Creates a copy of \a other.
- */
+*/
QCollator::QCollator(const QCollator &other)
: d(other.d)
{
if (d) {
// Ensure clean, lest both copies try to init() at the same time:
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
d->ref.ref();
}
}
/*!
- Destroys the collator.
- */
+ Destroys this collator.
+*/
QCollator::~QCollator()
{
if (d && !d->ref.deref())
@@ -117,7 +130,7 @@ QCollator::~QCollator()
/*!
Assigns \a other to this collator.
- */
+*/
QCollator &QCollator::operator=(const QCollator &other)
{
if (this != &other) {
@@ -126,8 +139,7 @@ QCollator &QCollator::operator=(const QCollator &other)
d = other.d;
if (d) {
// Ensure clean, lest both copies try to init() at the same time:
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
d->ref.ref();
}
}
@@ -139,19 +151,19 @@ QCollator &QCollator::operator=(const QCollator &other)
Move constructor. Moves from \a other into this collator.
- Note that a moved-from QCollator can only be destroyed or assigned to.
- The effect of calling other functions than the destructor or one of the
- assignment operators is undefined.
+//! [partially-formed]
+ \note The moved-from object \a other is placed in a partially-formed state,
+ in which the only valid operations are destruction and assignment of a new
+ value.
+//! [partially-formed]
*/
/*!
\fn QCollator & QCollator::operator=(QCollator && other)
- Move-assigns from \a other to this collator.
+ Move-assigns \a other to this QCollator instance.
- Note that a moved-from QCollator can only be destroyed or assigned to.
- The effect of calling other functions than the destructor or one of the
- assignment operators is undefined.
+ \include qcollator.cpp partially-formed
*/
/*!
@@ -163,7 +175,7 @@ QCollator &QCollator::operator=(const QCollator &other)
/*!
\internal
- */
+*/
void QCollator::detach()
{
if (d->ref.loadRelaxed() != 1) {
@@ -178,7 +190,9 @@ void QCollator::detach()
/*!
Sets the locale of the collator to \a locale.
- */
+
+ \sa locale()
+*/
void QCollator::setLocale(const QLocale &locale)
{
if (locale == d->locale)
@@ -190,19 +204,22 @@ void QCollator::setLocale(const QLocale &locale)
/*!
Returns the locale of the collator.
- */
+
+ Unless supplied to the constructor or by calling setLocale(), the system's
+ default collation locale is used.
+
+ \sa setLocale(), QLocale::collation()
+*/
QLocale QCollator::locale() const
{
return d->locale;
}
/*!
- \fn void QCollator::setCaseSensitivity(Qt::CaseSensitivity sensitivity)
-
- Sets the case \a sensitivity of the collator.
+ Sets the case-sensitivity of the collator to \a cs.
\sa caseSensitivity()
- */
+*/
void QCollator::setCaseSensitivity(Qt::CaseSensitivity cs)
{
if (d->caseSensitivity == cs)
@@ -213,29 +230,27 @@ void QCollator::setCaseSensitivity(Qt::CaseSensitivity cs)
}
/*!
- \fn Qt::CaseSensitivity QCollator::caseSensitivity() const
-
Returns case sensitivity of the collator.
+ This defaults to case-sensitive until set.
+
+ \note In the C locale, when case-sensitive, all lower-case letters sort
+ after all upper-case letters, where most locales sort each lower-case letter
+ either immediately before or immediately after its upper-case partner. Thus
+ "Zap" sorts before "ape" in the C locale but after in most others.
+
\sa setCaseSensitivity()
- */
+*/
Qt::CaseSensitivity QCollator::caseSensitivity() const
{
return d->caseSensitivity;
}
/*!
- \fn void QCollator::setNumericMode(bool on)
-
- Enables numeric sorting mode when \a on is set to true.
-
- This will enable proper sorting of numeric digits, so that e.g. 100 sorts
- after 99.
-
- By default this mode is off.
+ Enables numeric sorting mode when \a on is \c true.
\sa numericMode()
- */
+*/
void QCollator::setNumericMode(bool on)
{
if (d->numericMode == on)
@@ -246,30 +261,25 @@ void QCollator::setNumericMode(bool on)
}
/*!
- \fn bool QCollator::numericMode() const
+ Returns \c true if numeric sorting is enabled, \c false otherwise.
- Returns \c true if numeric sorting is enabled, false otherwise.
+ When \c true, numerals are recognized as numbers and sorted in arithmetic
+ order; for example, 100 sortes after 99. When \c false, numbers are sorted
+ in lexical order, so that 100 sorts before 99 (because 1 is before 9). By
+ default, this option is disabled.
\sa setNumericMode()
- */
+*/
bool QCollator::numericMode() const
{
return d->numericMode;
}
/*!
- \fn void QCollator::setIgnorePunctuation(bool on)
-
- If \a on is set to true, punctuation characters and symbols are ignored when
- determining sort order.
-
- The default is locale dependent.
-
- \note This method is not currently supported if Qt is configured to not use
- ICU on Linux.
+ Ignores punctuation and symbols if \a on is \c true, attends to them if \c false.
\sa ignorePunctuation()
- */
+*/
void QCollator::setIgnorePunctuation(bool on)
{
if (d->ignorePunctuation == on)
@@ -280,13 +290,13 @@ void QCollator::setIgnorePunctuation(bool on)
}
/*!
- \fn bool QCollator::ignorePunctuation() const
+ Returns whether punctuation and symbols are ignored when collating.
- Returns \c true if punctuation characters and symbols are ignored when
- determining sort order.
+ When \c true, strings are compared as if all punctuation and symbols were
+ removed from each string.
\sa setIgnorePunctuation()
- */
+*/
bool QCollator::ignorePunctuation() const
{
return d->ignorePunctuation;
@@ -295,7 +305,11 @@ bool QCollator::ignorePunctuation() const
/*!
\since 5.13
\fn bool QCollator::operator()(QStringView s1, QStringView s2) const
- \internal
+
+ A QCollator can be used as the comparison function of a sorting algorithm.
+ It returns \c true if \a s1 sorts before \a s2, otherwise \c false.
+
+ \sa compare()
*/
/*!
@@ -304,42 +318,64 @@ bool QCollator::ignorePunctuation() const
Compares \a s1 with \a s2.
- Returns an integer less than, equal to, or greater than zero depending on
- whether \a s1 sorts before, with or after \a s2.
+ Returns a negative integer if \a s1 is less than \a s2, a positive integer
+ if it is greater than \a s2, and zero if they are equal.
*/
-#if QT_STRINGVIEW_LEVEL < 2
+
/*!
\fn bool QCollator::operator()(const QString &s1, const QString &s2) const
- \internal
+ \overload
+ \since 5.2
*/
/*!
+ \fn int QCollator::compare(const QString &s1, const QString &s2) const
\overload
+ \since 5.2
+*/
- Compares \a s1 with \a s2.
+/*!
+ \fn int QCollator::compare(const QChar *s1, qsizetype len1, const QChar *s2, qsizetype len2) const
+ \overload
+ \since 5.2
- Returns an integer less than, equal to, or greater than zero depending on
- whether \a s1 sorts before, with or after \a s2.
+ Compares \a s1 with \a s2. \a len1 and \a len2 specify the lengths of the
+ QChar arrays pointed to by \a s1 and \a s2.
+
+ Returns a negative integer if \a s1 is less than \a s2, a positive integer
+ if it is greater than \a s2, and zero if they are equal.
+
+
+ \note In Qt versions prior to 6.4, the length arguments were of type
+ \c{int}, not \c{qsizetype}.
*/
-int QCollator::compare(const QString &s1, const QString &s2) const
+
+/*!
+ \since 6.3
+
+ Compares the strings \a s1 and \a s2, returning their sorting order. This
+ function performs the same operation as compare() on a default-constructed
+ QCollator object.
+
+ \sa compare(), defaultSortKey()
+*/
+int QCollator::defaultCompare(QStringView s1, QStringView s2)
{
- return compare(QStringView(s1), QStringView(s2));
+ return defaultCollator->localData().collator().compare(s1, s2);
}
/*!
- \overload
+ \since 6.3
- Compares \a s1 with \a s2. \a len1 and \a len2 specify the lengths of the
- QChar arrays pointed to by \a s1 and \a s2.
+ Returns the sort key for the string \a key. This function performs the same
+ operation as sortKey() on a default-constructed QCollator object.
- Returns an integer less than, equal to, or greater than zero depending on
- whether \a s1 sorts before, with or after \a s2.
+ \sa sortKey(), defaultCompare()
*/
-int QCollator::compare(const QChar *s1, int len1, const QChar *s2, int len2) const
+QCollatorSortKey QCollator::defaultSortKey(QStringView key)
{
- return compare(QStringView(s1, len1), QStringView(s2, len2));
+ return defaultCollator->localData().collator().sortKey(key.toString());
}
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\fn QCollatorSortKey QCollator::sortKey(const QString &string) const
@@ -352,7 +388,7 @@ int QCollator::compare(const QChar *s1, int len1, const QChar *s2, int len2) con
keys for each string and then sort using the keys.
\note Not supported with the C (a.k.a. POSIX) locale on Darwin.
- */
+*/
/*!
\class QCollatorSortKey
@@ -369,12 +405,12 @@ int QCollator::compare(const QChar *s1, int len1, const QChar *s2, int len2) con
\ingroup string-processing
\ingroup shared
- \sa QCollator, QCollator::sortKey()
+ \sa QCollator, QCollator::sortKey(), compare()
*/
/*!
\internal
- */
+*/
QCollatorSortKey::QCollatorSortKey(QCollatorSortKeyPrivate *d)
: d(d)
{
@@ -389,15 +425,23 @@ QCollatorSortKey::QCollatorSortKey(const QCollatorSortKey &other)
}
/*!
+ \since 6.8
+ \fn QCollatorSortKey::QCollatorSortKey(QCollatorSortKey &&other)
+ Move-constructs a new QCollatorSortKey from \a other.
+
+ \include qcollator.cpp partially-formed
+*/
+
+/*!
Destroys the collator key.
- */
+*/
QCollatorSortKey::~QCollatorSortKey()
{
}
/*!
Assigns \a other to this collator key.
- */
+*/
QCollatorSortKey& QCollatorSortKey::operator=(const QCollatorSortKey &other)
{
if (this != &other) {
@@ -409,18 +453,20 @@ QCollatorSortKey& QCollatorSortKey::operator=(const QCollatorSortKey &other)
/*!
\fn QCollatorSortKey &QCollatorSortKey::operator=(QCollatorSortKey && other)
- Move-assigns \a other to this collator key.
+ Move-assigns \a other to this QCollatorSortKey instance.
+
+ \include qcollator.cpp partially-formed
*/
/*!
- \fn bool operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs)
- \relates QCollatorSortKey
+ \fn bool QCollatorSortKey::operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs)
- According to the QCollator that created the keys, returns \c true if \a lhs
- should be sorted before \a rhs; otherwise returns \c false.
+ Both keys must have been created by the same QCollator's sortKey(). Returns
+ \c true if \a lhs should be sorted before \a rhs, according to the QCollator
+ that created them; otherwise returns \c false.
\sa QCollatorSortKey::compare()
- */
+*/
/*!
\fn void QCollatorSortKey::swap(QCollatorSortKey & other)
@@ -431,13 +477,14 @@ QCollatorSortKey& QCollatorSortKey::operator=(const QCollatorSortKey &other)
/*!
\fn int QCollatorSortKey::compare(const QCollatorSortKey &otherKey) const
- Compares this key to \a otherKey.
+ Compares this key to \a otherKey, which must have been created by the same
+ QCollator's sortKey() as this key. The comparison is performed in accordance
+ with that QCollator's sort order.
- Returns a negative value if the key is less than \a otherKey, 0 if the key
- is equal to \a otherKey or a positive value if the key is greater than \a
- otherKey.
+ Returns a negative value if this key sorts before \a otherKey, 0 if the two
+ keys are equal or a positive value if this key sorts after \a otherKey.
\sa operator<()
- */
+*/
QT_END_NAMESPACE
diff --git a/src/corelib/text/qcollator.h b/src/corelib/text/qcollator.h
index de8c8b7e3c..9f61cfc22a 100644
--- a/src/corelib/text/qcollator.h
+++ b/src/corelib/text/qcollator.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QCOLLATOR_H
#define QCOLLATOR_H
@@ -49,20 +13,23 @@ QT_BEGIN_NAMESPACE
class QCollatorPrivate;
class QCollatorSortKeyPrivate;
+QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QCollatorSortKeyPrivate, Q_CORE_EXPORT)
class Q_CORE_EXPORT QCollatorSortKey
{
friend class QCollator;
public:
QCollatorSortKey(const QCollatorSortKey &other);
+ QCollatorSortKey(QCollatorSortKey &&other) noexcept = default;
~QCollatorSortKey();
QCollatorSortKey &operator=(const QCollatorSortKey &other);
- inline QCollatorSortKey &operator=(QCollatorSortKey &&other) noexcept
- { swap(other); return *this; }
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCollatorSortKey)
void swap(QCollatorSortKey &other) noexcept
{ d.swap(other.d); }
int compare(const QCollatorSortKey &key) const;
+ friend bool operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs)
+ { return lhs.compare(rhs) < 0; }
protected:
QCollatorSortKey(QCollatorSortKeyPrivate*);
@@ -73,11 +40,6 @@ private:
QCollatorSortKey();
};
-inline bool operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs)
-{
- return lhs.compare(rhs) < 0;
-}
-
class Q_CORE_EXPORT QCollator
{
public:
@@ -88,11 +50,10 @@ public:
QCollator &operator=(const QCollator &);
QCollator(QCollator &&other) noexcept
: d(other.d) { other.d = nullptr; }
- QCollator &operator=(QCollator &&other) noexcept
- { swap(other); return *this; }
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QCollator)
void swap(QCollator &other) noexcept
- { qSwap(d, other.d); }
+ { qt_ptr_swap(d, other.d); }
void setLocale(const QLocale &locale);
QLocale locale() const;
@@ -106,13 +67,17 @@ public:
void setIgnorePunctuation(bool on);
bool ignorePunctuation() const;
-#if QT_STRINGVIEW_LEVEL < 2
- int compare(const QString &s1, const QString &s2) const;
- int compare(const QChar *s1, int len1, const QChar *s2, int len2) const;
+ int compare(const QString &s1, const QString &s2) const
+ { return compare(QStringView(s1), QStringView(s2)); }
+#if QT_CORE_REMOVED_SINCE(6, 4) && QT_POINTER_SIZE != 4
+ int compare(const QChar *s1, int len1, const QChar *s2, int len2) const
+ { return compare(QStringView(s1, len1), QStringView(s2, len2)); }
+#endif
+ int compare(const QChar *s1, qsizetype len1, const QChar *s2, qsizetype len2) const
+ { return compare(QStringView(s1, len1), QStringView(s2, len2)); }
bool operator()(const QString &s1, const QString &s2) const
{ return compare(s1, s2) < 0; }
-#endif
int compare(QStringView s1, QStringView s2) const;
bool operator()(QStringView s1, QStringView s2) const
@@ -120,6 +85,9 @@ public:
QCollatorSortKey sortKey(const QString &string) const;
+ static int defaultCompare(QStringView s1, QStringView s2);
+ static QCollatorSortKey defaultSortKey(QStringView key);
+
private:
QCollatorPrivate *d;
diff --git a/src/corelib/text/qcollator_icu.cpp b/src/corelib/text/qcollator_icu.cpp
index 0dca1ee9c9..84f9c51537 100644
--- a/src/corelib/text/qcollator_icu.cpp
+++ b/src/corelib/text/qcollator_icu.cpp
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qcollator_p.h"
#include "qlocale_p.h"
@@ -114,29 +78,28 @@ int QCollator::compare(QStringView s1, QStringView s2) const
if (!s2.size())
return +1;
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
if (d->collator) {
+ // truncating sizes (QTBUG-105038)
return ucol_strcoll(d->collator,
reinterpret_cast<const UChar *>(s1.data()), s1.size(),
reinterpret_cast<const UChar *>(s2.data()), s2.size());
}
- return QString::compare_helper(s1.data(), s1.size(),
- s2.data(), s2.size(),
- d->caseSensitivity);
+ return QtPrivate::compareStrings(s1, s2, d->caseSensitivity);
}
QCollatorSortKey QCollator::sortKey(const QString &string) const
{
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
+
if (d->isC())
return QCollatorSortKey(new QCollatorSortKeyPrivate(string.toUtf8()));
if (d->collator) {
QByteArray result(16 + string.size() + (string.size() >> 2), Qt::Uninitialized);
+ // truncating sizes (QTBUG-105038)
int size = ucol_getSortKey(d->collator, (const UChar *)string.constData(),
string.size(), (uint8_t *)result.data(), result.size());
if (size > result.size()) {
diff --git a/src/corelib/text/qcollator_macx.cpp b/src/corelib/text/qcollator_macx.cpp
index 62b3a904a0..23c23bd53a 100644
--- a/src/corelib/text/qcollator_macx.cpp
+++ b/src/corelib/text/qcollator_macx.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qcollator_p.h"
#include "qlocale_p.h"
@@ -99,8 +63,8 @@ int QCollator::compare(QStringView s1, QStringView s2) const
if (!s2.size())
return +1;
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
+
if (!d->collator)
return s1.compare(s2, caseSensitivity());
@@ -118,25 +82,27 @@ int QCollator::compare(QStringView s1, QStringView s2) const
QCollatorSortKey QCollator::sortKey(const QString &string) const
{
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
+
if (!d->collator) {
// What should (or even *can*) we do here ? (See init()'s comment.)
qWarning("QCollator doesn't support sort keys for the C locale on Darwin");
return QCollatorSortKey(nullptr);
}
- //Documentation recommends having it 5 times as big as the input
+ auto text = reinterpret_cast<const UniChar *>(string.constData());
+ // Documentation recommends having it 5 times as big as the input
QList<UCCollationValue> ret(string.size() * 5);
ItemCount actualSize;
- int status = UCGetCollationKey(d->collator,
- reinterpret_cast<const UniChar *>(string.constData()),
- string.count(), ret.size(), &actualSize, ret.data());
+ int status = UCGetCollationKey(d->collator, text, string.size(),
+ ret.size(), &actualSize, ret.data());
ret.resize(actualSize + 1);
if (status == kUCOutputBufferTooSmall) {
- UCGetCollationKey(d->collator, reinterpret_cast<const UniChar *>(string.constData()),
- string.count(), ret.size(), &actualSize, ret.data());
+ status = UCGetCollationKey(d->collator, text, string.size(),
+ ret.size(), &actualSize, ret.data());
+ Q_ASSERT(status != kUCOutputBufferTooSmall);
+ Q_ASSERT(ret.size() == qsizetype(actualSize + 1));
}
ret[actualSize] = 0;
return QCollatorSortKey(new QCollatorSortKeyPrivate(std::move(ret)));
@@ -150,7 +116,7 @@ int QCollatorSortKey::compare(const QCollatorSortKey &key) const
SInt32 order;
UCCompareCollationKeys(d->m_key.data(), d->m_key.size(),
key.d->m_key.data(), key.d->m_key.size(),
- 0, &order);
+ nullptr, &order);
return order;
}
diff --git a/src/corelib/text/qcollator_p.h b/src/corelib/text/qcollator_p.h
index b1a483c4e2..b96cdbaa32 100644
--- a/src/corelib/text/qcollator_p.h
+++ b/src/corelib/text/qcollator_p.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QCOLLATOR_P_H
#define QCOLLATOR_P_H
@@ -92,12 +56,8 @@ public:
QAtomicInt ref = 1;
QLocale locale;
#if defined(Q_OS_WIN) && !QT_CONFIG(icu)
-#ifdef USE_COMPARESTRINGEX
- QString localeName;
-#else
LCID localeID;
#endif
-#endif
Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive;
bool numericMode = false;
bool ignorePunctuation = false;
@@ -114,6 +74,12 @@ public:
collator = NoCollator;
}
+ void ensureInitialized()
+ {
+ if (dirty)
+ init();
+ }
+
// Implemented by each back-end, in its own way:
void init();
void cleanup();
diff --git a/src/corelib/text/qcollator_posix.cpp b/src/corelib/text/qcollator_posix.cpp
index 92148fa315..5ed80c1b8e 100644
--- a/src/corelib/text/qcollator_posix.cpp
+++ b/src/corelib/text/qcollator_posix.cpp
@@ -1,45 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2013 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qcollator_p.h"
#include "qstringlist.h"
#include "qstring.h"
+#include "qvarlengtharray.h"
#include <cstring>
#include <cwchar>
@@ -49,8 +15,10 @@ QT_BEGIN_NAMESPACE
void QCollatorPrivate::init()
{
if (!isC()) {
- if (locale != QLocale())
- qWarning("Only C and default locale supported with the posix collation implementation");
+ if (locale != QLocale::system().collation()) {
+ qWarning("Only the C and system collation locales are supported "
+ "with the POSIX collation implementation");
+ }
if (caseSensitivity != Qt::CaseSensitive)
qWarning("Case insensitive sorting unsupported in the posix collation implementation");
}
@@ -68,7 +36,7 @@ void QCollatorPrivate::cleanup()
static void stringToWCharArray(QVarLengthArray<wchar_t> &ret, QStringView string)
{
ret.resize(string.length());
- int len = string.toWCharArray(ret.data());
+ qsizetype len = string.toWCharArray(ret.data());
ret.resize(len+1);
ret[len] = 0;
}
@@ -82,8 +50,8 @@ int QCollator::compare(QStringView s1, QStringView s2) const
if (d->isC())
return s1.compare(s2, caseSensitivity());
- if (d->dirty)
- d->init();
+
+ d->ensureInitialized();
QVarLengthArray<wchar_t> array1, array2;
stringToWCharArray(array1, s1);
@@ -93,8 +61,7 @@ int QCollator::compare(QStringView s1, QStringView s2) const
QCollatorSortKey QCollator::sortKey(const QString &string) const
{
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
QVarLengthArray<wchar_t> original;
stringToWCharArray(original, string);
@@ -102,13 +69,19 @@ QCollatorSortKey QCollator::sortKey(const QString &string) const
if (d->isC()) {
std::copy(original.cbegin(), original.cend(), result.begin());
} else {
- size_t size = std::wcsxfrm(result.data(), original.constData(), string.size());
- if (size > uint(result.size())) {
- result.resize(size+1);
- size = std::wcsxfrm(result.data(), original.constData(), string.size());
+ auto availableSizeIncludingNullTerminator = result.size();
+ size_t neededSizeExcludingNullTerminator = std::wcsxfrm(
+ result.data(), original.constData(), availableSizeIncludingNullTerminator);
+ if (neededSizeExcludingNullTerminator > size_t(availableSizeIncludingNullTerminator - 1)) {
+ result.resize(neededSizeExcludingNullTerminator + 1);
+ availableSizeIncludingNullTerminator = result.size();
+ neededSizeExcludingNullTerminator = std::wcsxfrm(result.data(), original.constData(),
+ availableSizeIncludingNullTerminator);
+ Q_ASSERT(neededSizeExcludingNullTerminator
+ == size_t(availableSizeIncludingNullTerminator - 1));
}
- result.resize(size+1);
- result[size] = 0;
+ result.resize(neededSizeExcludingNullTerminator + 1);
+ result[neededSizeExcludingNullTerminator] = 0;
}
return QCollatorSortKey(new QCollatorSortKeyPrivate(std::move(result)));
}
diff --git a/src/corelib/text/qcollator_win.cpp b/src/corelib/text/qcollator_win.cpp
index 54f57f1d24..b588f5ff46 100644
--- a/src/corelib/text/qcollator_win.cpp
+++ b/src/corelib/text/qcollator_win.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qcollator_p.h"
#include "qlocale_p.h"
@@ -63,11 +27,7 @@ void QCollatorPrivate::init()
if (isC())
return;
-#ifndef USE_COMPARESTRINGEX
localeID = qt_inIsoNametoLCID(QLocalePrivate::get(locale)->bcp47Name().constData());
-#else
- localeName = locale.bcp47Name();
-#endif
if (caseSensitivity == Qt::CaseInsensitive)
collator |= NORM_IGNORECASE;
@@ -97,8 +57,7 @@ int QCollator::compare(QStringView s1, QStringView s2) const
if (d->isC())
return s1.compare(s2, d->caseSensitivity);
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
//* from Windows documentation *
// Returns one of the following values if successful. To maintain the C
@@ -108,16 +67,9 @@ int QCollator::compare(QStringView s1, QStringView s2) const
// [...] The function returns 0 if it does not succeed.
// https://docs.microsoft.com/en-us/windows/desktop/api/stringapiset/nf-stringapiset-comparestringex#return-value
-#ifndef USE_COMPARESTRINGEX
const int ret = CompareString(d->localeID, d->collator,
reinterpret_cast<const wchar_t *>(s1.data()), s1.size(),
reinterpret_cast<const wchar_t *>(s2.data()), s2.size());
-#else
- const int ret = CompareStringEx(LPCWSTR(d->localeName.utf16()), d->collator,
- reinterpret_cast<LPCWSTR>(s1.data()), s1.size(),
- reinterpret_cast<LPCWSTR>(s2.data()), s2.size(),
- nullptr, nullptr, 0);
-#endif
if (Q_LIKELY(ret))
return ret - 2;
@@ -139,31 +91,20 @@ int QCollator::compare(QStringView s1, QStringView s2) const
QCollatorSortKey QCollator::sortKey(const QString &string) const
{
- if (d->dirty)
- d->init();
+ d->ensureInitialized();
+
if (d->isC())
return QCollatorSortKey(new QCollatorSortKeyPrivate(string));
-#ifndef USE_COMPARESTRINGEX
+ // truncating sizes (QTBUG-105038)
int size = LCMapStringW(d->localeID, LCMAP_SORTKEY | d->collator,
reinterpret_cast<const wchar_t*>(string.constData()), string.size(),
0, 0);
-#else
- int size = LCMapStringEx(LPCWSTR(d->localeName.utf16()), LCMAP_SORTKEY | d->collator,
- reinterpret_cast<LPCWSTR>(string.constData()), string.size(),
- 0, 0, NULL, NULL, 0);
-#endif
+
QString ret(size, Qt::Uninitialized);
-#ifndef USE_COMPARESTRINGEX
int finalSize = LCMapStringW(d->localeID, LCMAP_SORTKEY | d->collator,
reinterpret_cast<const wchar_t*>(string.constData()), string.size(),
reinterpret_cast<wchar_t*>(ret.data()), ret.size());
-#else
- int finalSize = LCMapStringEx(LPCWSTR(d->localeName.utf16()), LCMAP_SORTKEY | d->collator,
- reinterpret_cast<LPCWSTR>(string.constData()), string.size(),
- reinterpret_cast<LPWSTR>(ret.data()), ret.size(),
- NULL, NULL, 0);
-#endif
if (finalSize == 0) {
qWarning()
<< "there were problems when generating the ::sortKey by LCMapStringW with error:"
diff --git a/src/corelib/text/qdoublescanprint_p.h b/src/corelib/text/qdoublescanprint_p.h
index 3865c69a99..b098cc4082 100644
--- a/src/corelib/text/qdoublescanprint_p.h
+++ b/src/corelib/text/qdoublescanprint_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QDOUBLESCANPRINT_P_H
#define QDOUBLESCANPRINT_P_H
@@ -51,7 +15,7 @@
// We mean it.
//
-#include <qglobal.h>
+#include <private/qglobal_p.h>
#if defined(Q_CC_MSVC) && (defined(QT_BOOTSTRAPPED) || defined(QT_NO_DOUBLECONVERSION))
# include <stdio.h>
diff --git a/src/corelib/text/qlatin1stringmatcher.cpp b/src/corelib/text/qlatin1stringmatcher.cpp
new file mode 100644
index 0000000000..68bf97db5c
--- /dev/null
+++ b/src/corelib/text/qlatin1stringmatcher.cpp
@@ -0,0 +1,201 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qlatin1stringmatcher.h"
+#include <limits.h>
+
+QT_BEGIN_NAMESPACE
+
+/*! \class QLatin1StringMatcher
+ \inmodule QtCore
+ \brief Optimized search for substring in Latin-1 text.
+
+ A QLatin1StringMatcher can search for one QLatin1StringView
+ as a substring of another, either ignoring case or taking it into
+ account.
+
+ \since 6.5
+ \ingroup tools
+ \ingroup string-processing
+
+ This class is useful when you have a Latin-1 encoded string that
+ you want to repeatedly search for in some QLatin1StringViews
+ (perhaps in a loop), or when you want to search for all
+ instances of it in a given QLatin1StringView. Using a matcher
+ object and indexIn() is faster than matching a plain
+ QLatin1StringView with QLatin1StringView::indexOf() if repeated
+ matching takes place. This class offers no benefit if you are
+ doing one-off matches. The string to be searched for must not
+ be destroyed or changed before the matcher object is destroyed,
+ as the matcher accesses the string when searching for it.
+
+ Create a QLatin1StringMatcher for the QLatin1StringView
+ you want to search for and the case sensitivity. Then call
+ indexIn() with the QLatin1StringView that you want to search
+ within.
+
+ \sa QLatin1StringView, QStringMatcher, QByteArrayMatcher
+*/
+
+/*!
+ Construct an empty Latin-1 string matcher.
+ This will match at each position in any string.
+ \sa setPattern(), setCaseSensitivity(), indexIn()
+*/
+QLatin1StringMatcher::QLatin1StringMatcher() noexcept
+ : m_pattern(),
+ m_cs(Qt::CaseSensitive),
+ m_caseSensitiveSearcher(m_pattern.data(), m_pattern.data())
+{
+}
+
+/*!
+ Constructs a Latin-1 string matcher that searches for the given \a pattern
+ with given case sensitivity \a cs. The \a pattern argument must
+ not be destroyed before this matcher object. Call indexIn()
+ to find the \a pattern in the given QLatin1StringView.
+*/
+QLatin1StringMatcher::QLatin1StringMatcher(QLatin1StringView pattern,
+ Qt::CaseSensitivity cs) noexcept
+ : m_pattern(pattern), m_cs(cs)
+{
+ setSearcher();
+}
+
+/*!
+ Destroys the Latin-1 string matcher.
+*/
+QLatin1StringMatcher::~QLatin1StringMatcher() noexcept
+{
+ freeSearcher();
+}
+
+/*!
+ \internal
+*/
+void QLatin1StringMatcher::setSearcher() noexcept
+{
+ if (m_cs == Qt::CaseSensitive) {
+ new (&m_caseSensitiveSearcher) CaseSensitiveSearcher(m_pattern.data(), m_pattern.end());
+ } else {
+ QtPrivate::QCaseInsensitiveLatin1Hash foldCase;
+ qsizetype bufferSize = std::min(m_pattern.size(), qsizetype(sizeof m_foldBuffer));
+ for (qsizetype i = 0; i < bufferSize; ++i)
+ m_foldBuffer[i] = static_cast<char>(foldCase(m_pattern[i].toLatin1()));
+
+ new (&m_caseInsensitiveSearcher)
+ CaseInsensitiveSearcher(m_foldBuffer, &m_foldBuffer[bufferSize]);
+ }
+}
+
+/*!
+ \internal
+*/
+void QLatin1StringMatcher::freeSearcher() noexcept
+{
+ if (m_cs == Qt::CaseSensitive)
+ m_caseSensitiveSearcher.~CaseSensitiveSearcher();
+ else
+ m_caseInsensitiveSearcher.~CaseInsensitiveSearcher();
+}
+
+/*!
+ Sets the \a pattern to search for. The string pointed to by the
+ QLatin1StringView must not be destroyed before the matcher is
+ destroyed, unless it is set to point to a different \a pattern
+ with longer lifetime first.
+
+ \sa pattern(), indexIn()
+*/
+void QLatin1StringMatcher::setPattern(QLatin1StringView pattern) noexcept
+{
+ if (m_pattern.latin1() == pattern.latin1() && m_pattern.size() == pattern.size())
+ return; // Same address and size
+
+ freeSearcher();
+ m_pattern = pattern;
+ setSearcher();
+}
+
+/*!
+ Returns the Latin-1 pattern that the matcher searches for.
+
+ \sa setPattern(), indexIn()
+*/
+QLatin1StringView QLatin1StringMatcher::pattern() const noexcept
+{
+ return m_pattern;
+}
+
+/*!
+ Sets the case sensitivity to \a cs.
+
+ \sa caseSensitivity(), indexIn()
+*/
+void QLatin1StringMatcher::setCaseSensitivity(Qt::CaseSensitivity cs) noexcept
+{
+ if (m_cs == cs)
+ return;
+
+ freeSearcher();
+ m_cs = cs;
+ setSearcher();
+}
+
+/*!
+ Returns the case sensitivity the matcher uses.
+
+ \sa setCaseSensitivity(), indexIn()
+*/
+Qt::CaseSensitivity QLatin1StringMatcher::caseSensitivity() const noexcept
+{
+ return m_cs;
+}
+
+/*!
+ Searches for the pattern in the given \a haystack starting from
+ \a from.
+
+ \sa caseSensitivity(), pattern()
+*/
+qsizetype QLatin1StringMatcher::indexIn(QLatin1StringView haystack, qsizetype from) const noexcept
+{
+ if (m_pattern.isEmpty() && from == haystack.size())
+ return from;
+ if (from < 0) // Historical behavior (see QString::indexOf and co.)
+ from += haystack.size();
+ if (from >= haystack.size())
+ return -1;
+
+ auto begin = haystack.begin() + from;
+ auto end = haystack.end();
+ auto found = begin;
+ if (m_cs == Qt::CaseSensitive) {
+ found = m_caseSensitiveSearcher(begin, end, m_pattern.begin(), m_pattern.end()).begin;
+ if (found == end)
+ return -1;
+ } else {
+ const qsizetype bufferSize = std::min(m_pattern.size(), qsizetype(sizeof m_foldBuffer));
+ const QLatin1StringView restNeedle = m_pattern.sliced(bufferSize);
+ const bool needleLongerThanBuffer = restNeedle.size() > 0;
+ QLatin1StringView restHaystack = haystack;
+ do {
+ found = m_caseInsensitiveSearcher(found, end, m_foldBuffer, &m_foldBuffer[bufferSize])
+ .begin;
+ if (found == end) {
+ return -1;
+ } else if (!needleLongerThanBuffer) {
+ break;
+ }
+ restHaystack = haystack.sliced(
+ qMin(haystack.size(),
+ bufferSize + qsizetype(std::distance(haystack.begin(), found))));
+ if (restHaystack.startsWith(restNeedle, Qt::CaseInsensitive))
+ break;
+ ++found;
+ } while (true);
+ }
+ return std::distance(haystack.begin(), found);
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/text/qlatin1stringmatcher.h b/src/corelib/text/qlatin1stringmatcher.h
new file mode 100644
index 0000000000..3b8c24fc92
--- /dev/null
+++ b/src/corelib/text/qlatin1stringmatcher.h
@@ -0,0 +1,172 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QLATIN1STRINGMATCHER_H
+#define QLATIN1STRINGMATCHER_H
+
+#include <functional>
+#include <iterator>
+#include <limits>
+
+#include <QtCore/q20algorithm.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QtPrivate {
+template<class RandomIt1,
+ class Hash = std::hash<typename std::iterator_traits<RandomIt1>::value_type>,
+ class BinaryPredicate = std::equal_to<>>
+class q_boyer_moore_searcher_hashed_needle
+{
+public:
+ constexpr q_boyer_moore_searcher_hashed_needle(RandomIt1 pat_first, RandomIt1 pat_last)
+ : m_skiptable{}
+ {
+ const size_t n = std::distance(pat_first, pat_last);
+ constexpr auto uchar_max = (std::numeric_limits<uchar>::max)();
+ uchar max = n > uchar_max ? uchar_max : uchar(n);
+ q20::fill(std::begin(m_skiptable), std::end(m_skiptable), max);
+
+ RandomIt1 pattern = pat_first;
+ pattern += n - max;
+ while (max--)
+ m_skiptable[uchar(*pattern++)] = max;
+ }
+
+ template<class RandomIt2>
+ constexpr auto operator()(RandomIt2 first, RandomIt2 last, RandomIt1 pat_first,
+ RandomIt1 pat_last) const
+ {
+ struct R
+ {
+ RandomIt2 begin, end;
+ };
+ Hash hf;
+ BinaryPredicate pred;
+ auto pat_length = std::distance(pat_first, pat_last);
+ if (pat_length == 0)
+ return R{ first, first };
+
+ const qsizetype pl_minus_one = qsizetype(pat_length - 1);
+ RandomIt2 current = first + pl_minus_one;
+
+ while (current < last) {
+ qsizetype skip = m_skiptable[hf(*current)];
+ if (!skip) {
+ // possible match
+ while (skip < pat_length) {
+ if (!pred(hf(*(current - skip)), uchar(pat_first[pl_minus_one - skip])))
+ break;
+ skip++;
+ }
+ if (skip > pl_minus_one) { // we have a match
+ auto match = current - skip + 1;
+ return R{ match, match + pat_length };
+ }
+
+ // If we don't have a match we are a bit inefficient as we only skip by one
+ // when we have the non matching char in the string.
+ if (m_skiptable[hf(*(current - skip))] == pat_length)
+ skip = pat_length - skip;
+ else
+ skip = 1;
+ }
+ current += skip;
+ }
+
+ return R{ last, last };
+ }
+
+private:
+ alignas(16) uchar m_skiptable[256];
+};
+
+struct QCaseSensitiveLatin1Hash
+{
+ constexpr QCaseSensitiveLatin1Hash() = default;
+
+ constexpr std::size_t operator()(char c) const noexcept { return std::size_t(uchar(c)); }
+};
+
+struct QCaseInsensitiveLatin1Hash
+{
+ constexpr QCaseInsensitiveLatin1Hash() = default;
+
+ constexpr std::size_t operator()(char c) const noexcept
+ {
+ return std::size_t(latin1Lower[uchar(c)]);
+ }
+
+ static int difference(char lhs, char rhs)
+ {
+ return int(latin1Lower[uchar(lhs)]) - int(latin1Lower[uchar(rhs)]);
+ }
+
+ static auto matcher(char ch)
+ {
+ return [sought = latin1Lower[uchar(ch)]](char other) {
+ return latin1Lower[uchar(other)] == sought;
+ };
+ }
+
+private:
+ static constexpr uchar latin1Lower[256] = {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
+ 0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x5b,0x5c,0x5d,0x5e,0x5f,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
+ 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
+ // 0xd7 (multiplication sign) and 0xdf (sz ligature) complicate life
+ 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
+ 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xd7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xdf,
+ 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
+ 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
+ };
+};
+}
+
+class QLatin1StringMatcher
+{
+public:
+ Q_CORE_EXPORT QLatin1StringMatcher() noexcept;
+ Q_CORE_EXPORT explicit QLatin1StringMatcher(
+ QLatin1StringView pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+ Q_CORE_EXPORT ~QLatin1StringMatcher() noexcept;
+
+ Q_CORE_EXPORT void setPattern(QLatin1StringView pattern) noexcept;
+ Q_CORE_EXPORT QLatin1StringView pattern() const noexcept;
+ Q_CORE_EXPORT void setCaseSensitivity(Qt::CaseSensitivity cs) noexcept;
+ Q_CORE_EXPORT Qt::CaseSensitivity caseSensitivity() const noexcept;
+
+ Q_CORE_EXPORT qsizetype indexIn(QLatin1StringView haystack, qsizetype from = 0) const noexcept;
+
+private:
+ void setSearcher() noexcept;
+ void freeSearcher() noexcept;
+
+ QLatin1StringView m_pattern;
+ Qt::CaseSensitivity m_cs;
+ typedef QtPrivate::q_boyer_moore_searcher_hashed_needle<const char *,
+ QtPrivate::QCaseSensitiveLatin1Hash>
+ CaseSensitiveSearcher;
+ typedef QtPrivate::q_boyer_moore_searcher_hashed_needle<const char *,
+ QtPrivate::QCaseInsensitiveLatin1Hash>
+ CaseInsensitiveSearcher;
+ union {
+ CaseSensitiveSearcher m_caseSensitiveSearcher;
+ CaseInsensitiveSearcher m_caseInsensitiveSearcher;
+ };
+ char m_foldBuffer[256];
+};
+
+QT_END_NAMESPACE
+
+#endif // QLATIN1MATCHER_H
diff --git a/src/corelib/text/qlatin1stringview.h b/src/corelib/text/qlatin1stringview.h
new file mode 100644
index 0000000000..91392d9540
--- /dev/null
+++ b/src/corelib/text/qlatin1stringview.h
@@ -0,0 +1,375 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2019 Intel Corporation.
+// Copyright (C) 2019 Mail.ru Group.
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QLATIN1STRINGVIEW_H
+#define QLATIN1STRINGVIEW_H
+
+#include <QtCore/qchar.h>
+#include <QtCore/qcompare.h>
+#include <QtCore/qnamespace.h>
+#include <QtCore/qtversionchecks.h>
+#include <QtCore/qstringview.h>
+
+#if 0
+// Workaround for generating forward headers
+#pragma qt_class(QLatin1String)
+#pragma qt_class(QLatin1StringView)
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QString;
+
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED) || defined(Q_QDOC)
+# define Q_L1S_VIEW_IS_PRIMARY
+class QLatin1StringView
+#else
+class QLatin1String
+#endif
+{
+public:
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+ constexpr QLatin1StringView() noexcept {}
+ constexpr QLatin1StringView(std::nullptr_t) noexcept : QLatin1StringView() {}
+ constexpr explicit QLatin1StringView(const char *s) noexcept
+ : QLatin1StringView(s, s ? qsizetype(QtPrivate::lengthHelperPointer(s)) : 0) {}
+ constexpr QLatin1StringView(const char *f, const char *l)
+ : QLatin1StringView(f, qsizetype(l - f)) {}
+ constexpr QLatin1StringView(const char *s, qsizetype sz) noexcept : m_data(s), m_size(sz) {}
+ explicit QLatin1StringView(const QByteArray &s) noexcept
+ : QLatin1StringView(s.constData(), s.size()) {}
+ constexpr explicit QLatin1StringView(QByteArrayView s) noexcept
+ : QLatin1StringView(s.constData(), s.size()) {}
+#else
+ constexpr QLatin1String() noexcept : m_size(0), m_data(nullptr) {}
+ Q_WEAK_OVERLOAD
+ constexpr QLatin1String(std::nullptr_t) noexcept : QLatin1String() {}
+ constexpr explicit QLatin1String(const char *s) noexcept
+ : m_size(s ? qsizetype(QtPrivate::lengthHelperPointer(s)) : 0), m_data(s) {}
+ constexpr QLatin1String(const char *f, const char *l)
+ : QLatin1String(f, qsizetype(l - f)) {}
+ constexpr QLatin1String(const char *s, qsizetype sz) noexcept : m_size(sz), m_data(s) {}
+ explicit QLatin1String(const QByteArray &s) noexcept : m_size(s.size()), m_data(s.constData()) {}
+ constexpr explicit QLatin1String(QByteArrayView s) noexcept : m_size(s.size()), m_data(s.data()) {}
+#endif // !Q_L1S_VIEW_IS_PRIMARY
+
+ inline QString toString() const;
+
+ constexpr const char *latin1() const noexcept { return m_data; }
+ constexpr qsizetype size() const noexcept { return m_size; }
+ constexpr const char *data() const noexcept { return m_data; }
+ [[nodiscard]] constexpr const char *constData() const noexcept { return data(); }
+ [[nodiscard]] constexpr const char *constBegin() const noexcept { return begin(); }
+ [[nodiscard]] constexpr const char *constEnd() const noexcept { return end(); }
+
+ [[nodiscard]] constexpr QLatin1Char first() const { return front(); }
+ [[nodiscard]] constexpr QLatin1Char last() const { return back(); }
+
+ [[nodiscard]] constexpr qsizetype length() const noexcept { return size(); }
+
+ constexpr bool isNull() const noexcept { return !data(); }
+ constexpr bool isEmpty() const noexcept { return !size(); }
+
+ [[nodiscard]] constexpr bool empty() const noexcept { return size() == 0; }
+
+ template <typename...Args>
+ [[nodiscard]] inline QString arg(Args &&...args) const;
+
+ [[nodiscard]] constexpr QLatin1Char at(qsizetype i) const
+ {
+ Q_ASSERT(i >= 0);
+ Q_ASSERT(i < size());
+ return QLatin1Char(m_data[i]);
+ }
+ [[nodiscard]] constexpr QLatin1Char operator[](qsizetype i) const { return at(i); }
+
+ [[nodiscard]] constexpr QLatin1Char front() const { return at(0); }
+ [[nodiscard]] constexpr QLatin1Char back() const { return at(size() - 1); }
+
+ [[nodiscard]] int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::compareStrings(*this, other, cs); }
+ [[nodiscard]] int compare(QLatin1StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::compareStrings(*this, other, cs); }
+ [[nodiscard]] inline int compare(QUtf8StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] constexpr int compare(QChar c) const noexcept
+ { return isEmpty() ? -1 : front() == c ? int(size() > 1) : uchar(m_data[0]) - c.unicode(); }
+ [[nodiscard]] int compare(QChar c, Qt::CaseSensitivity cs) const noexcept
+ { return QtPrivate::compareStrings(*this, QStringView(&c, 1), cs); }
+
+ [[nodiscard]] bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::startsWith(*this, s, cs); }
+ [[nodiscard]] bool startsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::startsWith(*this, s, cs); }
+ [[nodiscard]] constexpr bool startsWith(QChar c) const noexcept
+ { return !isEmpty() && front() == c; }
+ [[nodiscard]] bool startsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
+ { return QtPrivate::startsWith(*this, QStringView(&c, 1), cs); }
+
+ [[nodiscard]] bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::endsWith(*this, s, cs); }
+ [[nodiscard]] bool endsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::endsWith(*this, s, cs); }
+ [[nodiscard]] constexpr bool endsWith(QChar c) const noexcept
+ { return !isEmpty() && back() == c; }
+ [[nodiscard]] bool endsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
+ { return QtPrivate::endsWith(*this, QStringView(&c, 1), cs); }
+
+ [[nodiscard]] qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::findString(*this, from, s, cs); }
+ [[nodiscard]] qsizetype indexOf(QLatin1StringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::findString(*this, from, s, cs); }
+ [[nodiscard]] qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::findString(*this, from, QStringView(&c, 1), cs); }
+
+ [[nodiscard]] bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return indexOf(s, 0, cs) != -1; }
+ [[nodiscard]] bool contains(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return indexOf(s, 0, cs) != -1; }
+ [[nodiscard]] bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return indexOf(QStringView(&c, 1), 0, cs) != -1; }
+
+ [[nodiscard]] qsizetype lastIndexOf(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(s, size(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QStringView s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::lastIndexOf(*this, from, s, cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(s, size(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QLatin1StringView s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::lastIndexOf(*this, from, s, cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(c, -1, cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::lastIndexOf(*this, from, QStringView(&c, 1), cs); }
+
+ [[nodiscard]] qsizetype count(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return QtPrivate::count(*this, str, cs); }
+ [[nodiscard]] qsizetype count(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return QtPrivate::count(*this, str, cs); }
+ [[nodiscard]] qsizetype count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::count(*this, ch, cs); }
+
+ [[nodiscard]] short toShort(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<short>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] ushort toUShort(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<ushort>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] int toInt(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<int>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] uint toUInt(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<uint>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] long toLong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<long>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] ulong toULong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<ulong>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] qlonglong toLongLong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<qlonglong>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] qulonglong toULongLong(bool *ok = nullptr, int base = 10) const
+ { return QtPrivate::toIntegral<qulonglong>(QByteArrayView(*this), ok, base); }
+ [[nodiscard]] float toFloat(bool *ok = nullptr) const
+ {
+ const auto r = QtPrivate::toFloat(*this);
+ if (ok)
+ *ok = bool(r);
+ return r.value_or(0.0f);
+ }
+ [[nodiscard]] double toDouble(bool *ok = nullptr) const
+ {
+ const auto r = QtPrivate::toDouble(*this);
+ if (ok)
+ *ok = bool(r);
+ return r.value_or(0.0);
+ }
+
+ using value_type = const char;
+ using pointer = value_type*;
+ using const_pointer = pointer;
+ using reference = value_type&;
+ using const_reference = reference;
+ using iterator = value_type*;
+ using const_iterator = iterator;
+ using difference_type = qsizetype; // violates Container concept requirements
+ using size_type = qsizetype; // violates Container concept requirements
+
+ constexpr const_iterator begin() const noexcept { return data(); }
+ constexpr const_iterator cbegin() const noexcept { return data(); }
+ constexpr const_iterator end() const noexcept { return data() + size(); }
+ constexpr const_iterator cend() const noexcept { return data() + size(); }
+
+ using reverse_iterator = std::reverse_iterator<iterator>;
+ using const_reverse_iterator = reverse_iterator;
+
+ const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
+ const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); }
+
+ [[nodiscard]] constexpr QLatin1StringView mid(qsizetype pos, qsizetype n = -1) const
+ {
+ using namespace QtPrivate;
+ auto result = QContainerImplHelper::mid(size(), &pos, &n);
+ return result == QContainerImplHelper::Null ? QLatin1StringView()
+ : QLatin1StringView(m_data + pos, n);
+ }
+ [[nodiscard]] constexpr QLatin1StringView left(qsizetype n) const
+ {
+ if (size_t(n) >= size_t(size()))
+ n = size();
+ return {m_data, n};
+ }
+ [[nodiscard]] constexpr QLatin1StringView right(qsizetype n) const
+ {
+ if (size_t(n) >= size_t(size()))
+ n = size();
+ return {m_data + m_size - n, n};
+ }
+
+ [[nodiscard]] constexpr QLatin1StringView sliced(qsizetype pos) const
+ { verify(pos, 0); return {m_data + pos, m_size - pos}; }
+ [[nodiscard]] constexpr QLatin1StringView sliced(qsizetype pos, qsizetype n) const
+ { verify(pos, n); return {m_data + pos, n}; }
+ [[nodiscard]] constexpr QLatin1StringView first(qsizetype n) const
+ { verify(0, n); return sliced(0, n); }
+ [[nodiscard]] constexpr QLatin1StringView last(qsizetype n) const
+ { verify(0, n); return sliced(size() - n, n); }
+ [[nodiscard]] constexpr QLatin1StringView chopped(qsizetype n) const
+ { verify(0, n); return sliced(0, size() - n); }
+
+ constexpr void chop(qsizetype n)
+ { verify(0, n); m_size -= n; }
+ constexpr void truncate(qsizetype n)
+ { verify(0, n); m_size = n; }
+
+ [[nodiscard]] QLatin1StringView trimmed() const noexcept { return QtPrivate::trimmed(*this); }
+
+ template <typename Needle, typename...Flags>
+ [[nodiscard]] constexpr auto tokenize(Needle &&needle, Flags...flags) const
+ noexcept(noexcept(qTokenize(std::declval<const QLatin1StringView &>(),
+ std::forward<Needle>(needle), flags...)))
+ -> decltype(qTokenize(*this, std::forward<Needle>(needle), flags...))
+ { return qTokenize(*this, std::forward<Needle>(needle), flags...); }
+
+ friend bool comparesEqual(const QLatin1StringView &s1, const QLatin1StringView &s2) noexcept
+ { return s1.size() == s2.size() && QtPrivate::equalStrings(s1, s2); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QLatin1StringView &s1, const QLatin1StringView &s2) noexcept
+ {
+ const int res = QtPrivate::compareStrings(s1, s2);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QLatin1StringView)
+
+ // QChar <> QLatin1StringView
+ friend bool comparesEqual(const QLatin1StringView &lhs, QChar rhs) noexcept
+ { return lhs.size() == 1 && rhs == lhs.front(); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QLatin1StringView &lhs, QChar rhs) noexcept
+ {
+ // negate, as the helper function expects QChar as lhs
+ const int res = -compare_helper(&rhs, 1, lhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QLatin1StringView, QChar)
+
+ // QStringView <> QLatin1StringView
+ friend bool comparesEqual(const QLatin1StringView &lhs, const QStringView &rhs) noexcept
+ { return lhs.size() == rhs.size() && QtPrivate::equalStrings(lhs, rhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QLatin1StringView &lhs, const QStringView &rhs) noexcept
+ {
+ const int res = QtPrivate::compareStrings(lhs, rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QLatin1StringView, QStringView)
+
+ // Reversed helper methods for QStringView <> QLatin1StringView comparison.
+ // If we do not provide them explicitly, QStringView <> QByteArrayView
+ // overloads will be selected, which will provide wrong results, because
+ // they will convert from utf-8
+ friend bool comparesEqual(const QStringView &lhs, const QLatin1StringView &rhs) noexcept
+ { return comparesEqual(rhs, lhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QStringView &lhs, const QLatin1StringView &rhs) noexcept
+ { return QtOrderingPrivate::reversed(compareThreeWay(rhs, lhs)); }
+
+private:
+ friend bool comparesEqual(const QLatin1StringView &lhs, const QByteArrayView &rhs) noexcept
+ { return equal_helper(lhs, rhs.data(), rhs.size()); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QLatin1StringView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ const int res = compare_helper(lhs, rhs.data(), rhs.size());
+ return Qt::compareThreeWay(res, 0);
+ }
+
+ // Reversed helper methods for QByteArrayView <> QLatin1StringView comparison.
+ // If we do not provide them explicitly, QByteArrayView <> QByteArrayView
+ // overloads will be selected, which will provide wrong results
+ friend bool comparesEqual(const QByteArrayView &lhs, const QLatin1StringView &rhs) noexcept
+ { return comparesEqual(rhs, lhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QByteArrayView &lhs, const QLatin1StringView &rhs) noexcept
+ { return QtOrderingPrivate::reversed(compareThreeWay(rhs, lhs)); }
+
+public:
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ Q_DECLARE_STRONGLY_ORDERED(QLatin1StringView, QByteArrayView, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QLatin1StringView, QByteArray, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QLatin1StringView, const char *, QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+
+private:
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos,
+ [[maybe_unused]] qsizetype n = 1) const
+ {
+ Q_ASSERT(pos >= 0);
+ Q_ASSERT(pos <= size());
+ Q_ASSERT(n >= 0);
+ Q_ASSERT(n <= size() - pos);
+ }
+ static int compare_helper(const QLatin1StringView &s1, const char *s2) noexcept
+ { return compare_helper(s1, s2, qstrlen(s2)); }
+ Q_CORE_EXPORT static bool equal_helper(QLatin1StringView s1, const char *s2, qsizetype len) noexcept;
+ Q_CORE_EXPORT static int compare_helper(const QLatin1StringView &s1, const char *s2, qsizetype len) noexcept;
+ Q_CORE_EXPORT static int compare_helper(const QChar *data1, qsizetype length1,
+ QLatin1StringView s2,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED)
+ const char *m_data = nullptr;
+ qsizetype m_size = 0;
+#else
+ qsizetype m_size;
+ const char *m_data;
+#endif
+};
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+Q_DECLARE_TYPEINFO(QLatin1StringView, Q_RELOCATABLE_TYPE);
+#else
+Q_DECLARE_TYPEINFO(QLatin1String, Q_RELOCATABLE_TYPE);
+#endif
+
+constexpr QByteArrayView::QByteArrayView(QLatin1StringView v) noexcept
+ : QByteArrayView(v.data(), v.size())
+{}
+
+namespace Qt {
+inline namespace Literals {
+inline namespace StringLiterals {
+
+constexpr inline QLatin1StringView operator""_L1(const char *str, size_t size) noexcept
+{
+ return {str, qsizetype(size)};
+}
+
+} // StringLiterals
+} // Literals
+} // Qt
+
+QT_END_NAMESPACE
+
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+# undef Q_L1S_VIEW_IS_PRIMARY
+#endif
+
+#endif // QLATIN1STRINGVIEW_H
diff --git a/src/corelib/text/qlatin1stringview.qdoc b/src/corelib/text/qlatin1stringview.qdoc
new file mode 100644
index 0000000000..711057767b
--- /dev/null
+++ b/src/corelib/text/qlatin1stringview.qdoc
@@ -0,0 +1,1295 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// Copyright (C) 2019 Mail.ru Group.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*! \class QLatin1StringView
+ \inmodule QtCore
+ \brief The QLatin1StringView class provides a thin wrapper around
+ a US-ASCII/Latin-1 encoded string literal.
+
+ \ingroup string-processing
+ \reentrant
+
+ \compares strong
+ \compareswith strong char16_t QChar QStringView QUtf8StringView QString \
+ {const char16_t *}
+ \endcompareswith
+ \compareswith strong {const char *} QByteArray QByteArrayView
+ The byte array data is interpreted as utf-8.
+ \endcompareswith
+
+ Many of QString's member functions are overloaded to accept
+ \c{const char *} instead of QString. This includes the copy
+ constructor, the assignment operator, the comparison operators,
+ and various other functions such as \l{QString::insert()}{insert()},
+ \l{QString::append()}{append()}, and \l{QString::prepend()}{prepend()}.
+ Some of these functions are optimized to avoid constructing a
+ QString object for the \c{const char *} data. For example,
+ assuming \c str is a QString,
+
+ \snippet code/src_corelib_text_qstring.cpp 3
+
+ is much faster than
+
+ \snippet code/src_corelib_text_qstring.cpp 4
+
+ because it doesn't construct four temporary QString objects and
+ make a deep copy of the character data.
+
+ However, that is not true for all QString member functions that take
+ \c{const char *} and therefore applications should assume a temporary will
+ be created, such as in
+
+ \snippet code/src_corelib_text_qstring.cpp 4bis
+
+ Applications that define \l QT_NO_CAST_FROM_ASCII (as explained
+ in the QString documentation) don't have access to QString's
+ \c{const char *} API. To provide an efficient way of specifying
+ constant Latin-1 strings, Qt provides the QLatin1StringView, which is
+ just a very thin wrapper around a \c{const char *}. Using
+ QLatin1StringView, the example code above becomes
+
+ \snippet code/src_corelib_text_qstring.cpp 5
+
+ This is a bit longer to type, but it provides exactly the same
+ benefits as the first version of the code, and is faster than
+ converting the Latin-1 strings using QString::fromLatin1().
+
+ Thanks to the QString(QLatin1StringView) constructor,
+ QLatin1StringView can be used everywhere a QString is expected. For
+ example:
+
+ \snippet code/src_corelib_text_qstring.cpp 6
+
+ \note If the function you're calling with a QLatin1StringView
+ argument isn't actually overloaded to take QLatin1StringView, the
+ implicit conversion to QString will trigger a memory allocation,
+ which is usually what you want to avoid by using QLatin1StringView
+ in the first place. In those cases, using QStringLiteral may be
+ the better option.
+
+ \sa QString, QLatin1Char, {QStringLiteral()}{QStringLiteral},
+ QT_NO_CAST_FROM_ASCII
+*/
+
+/*!
+ \class QLatin1String
+ \inmodule QtCore
+ \brief QLatin1String is the same as QLatin1StringView.
+
+ QLatin1String is a view to a Latin-1 string. It's the same as
+ QLatin1StringView and is kept for compatibility reasons. It is
+ recommended to use QLatin1StringView instead.
+
+ Please see the QLatin1StringView documentation for details.
+*/
+
+/*!
+ \typedef QLatin1StringView::value_type
+ \since 5.10
+
+ Alias for \c{const char}. Provided for compatibility with the STL.
+*/
+
+/*!
+ \typedef QLatin1StringView::difference_type
+ \since 5.10
+
+ Alias for \c{qsizetype}. Provided for compatibility with the STL.
+*/
+
+/*!
+ \typedef QLatin1StringView::size_type
+ \since 5.10
+
+ Alias for \c{qsizetype}. Provided for compatibility with the STL.
+
+ \note In version prior to Qt 6, this was an alias for \c{int},
+ restricting the amount of data that could be held in a QLatin1StringView
+ on 64-bit architectures.
+*/
+
+/*!
+ \typedef QLatin1StringView::pointer
+ \typedef QLatin1StringView::const_pointer
+ \since 6.7
+
+ Alias for \c{value_type *}. Provided for compatibility with the STL.
+*/
+
+/*!
+ \typedef QLatin1StringView::reference
+ \since 5.10
+
+ Alias for \c{value_type &}. Provided for compatibility with the STL.
+*/
+
+/*!
+ \typedef QLatin1StringView::const_reference
+ \since 5.11
+
+ Alias for \c{reference}. Provided for compatibility with the STL.
+*/
+
+/*!
+ \typedef QLatin1StringView::iterator
+ \since 5.10
+
+ QLatin1StringView does not support mutable iterators, so this is the same
+ as const_iterator.
+
+ \sa const_iterator, reverse_iterator
+*/
+
+/*!
+ \typedef QLatin1StringView::const_iterator
+ \since 5.10
+
+ \sa iterator, const_reverse_iterator
+*/
+
+/*!
+ \typedef QLatin1StringView::reverse_iterator
+ \since 5.10
+
+ QLatin1StringView does not support mutable reverse iterators, so this is the
+ same as const_reverse_iterator.
+
+ \sa const_reverse_iterator, iterator
+*/
+
+/*!
+ \typedef QLatin1StringView::const_reverse_iterator
+ \since 5.10
+
+ \sa reverse_iterator, const_iterator
+*/
+
+/*! \fn QLatin1StringView::QLatin1StringView()
+ \since 5.6
+
+ Constructs a QLatin1StringView object that stores a \nullptr.
+
+ \sa data(), isEmpty(), isNull(), {Distinction Between Null and Empty Strings}
+*/
+
+/*! \fn QLatin1StringView::QLatin1StringView(std::nullptr_t)
+ \since 6.4
+
+ Constructs a QLatin1StringView object that stores a \nullptr.
+
+ \sa data(), isEmpty(), isNull(), {Distinction Between Null and Empty Strings}
+*/
+
+/*! \fn QLatin1StringView::QLatin1StringView(const char *str)
+
+ Constructs a QLatin1StringView object that stores \a str.
+
+ The string data is \e not copied. The caller must be able to
+ guarantee that \a str will not be deleted or modified as long as
+ the QLatin1StringView object exists.
+
+ \sa latin1()
+*/
+
+/*! \fn QLatin1StringView::QLatin1StringView(const char *str, qsizetype size)
+
+ Constructs a QLatin1StringView object that stores \a str with \a size.
+
+ The string data is \e not copied. The caller must be able to
+ guarantee that \a str will not be deleted or modified as long as
+ the QLatin1StringView object exists.
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, which will be converted to Unicode null characters (U+0000) if this
+ string is used by QString. This behavior is different from Qt 5.x.
+
+ \sa latin1()
+*/
+
+/*!
+ \fn QLatin1StringView::QLatin1StringView(const char *first, const char *last)
+ \since 5.10
+
+ Constructs a QLatin1StringView object that stores \a first with length
+ (\a last - \a first).
+
+ The range \c{[first,last)} must remain valid for the lifetime of
+ this Latin-1 string object.
+
+ Passing \nullptr as \a first is safe if \a last is \nullptr,
+ too, and results in a null Latin-1 string.
+
+ The behavior is undefined if \a last precedes \a first, \a first
+ is \nullptr and \a last is not, or if \c{last - first >
+ INT_MAX}.
+*/
+
+/*! \fn QLatin1StringView::QLatin1StringView(const QByteArray &str)
+
+ Constructs a QLatin1StringView object as a view on \a str.
+
+ The string data is \e not copied. The caller must be able to
+ guarantee that \a str will not be deleted or modified as long as
+ the QLatin1StringView object exists.
+
+ \sa latin1()
+*/
+
+/*! \fn QLatin1StringView::QLatin1StringView(QByteArrayView str)
+ \since 6.3
+
+ Constructs a QLatin1StringView object as a view on \a str.
+
+ The string data is \e not copied. The caller must be able to
+ guarantee that the data which \a str is pointing to will not
+ be deleted or modified as long as the QLatin1StringView object
+ exists. The size is obtained from \a str as-is, without checking
+ for a null-terminator.
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, which will be converted to Unicode null characters (U+0000) if this
+ string is used by QString.
+
+ \sa latin1()
+*/
+
+/*!
+ \fn QString QLatin1StringView::toString() const
+ \since 6.0
+
+ Converts this Latin-1 string into a QString. Equivalent to
+ \code
+ return QString(*this);
+ \endcode
+*/
+
+/*! \fn const char *QLatin1StringView::latin1() const
+
+ Returns the start of the Latin-1 string referenced by this object.
+*/
+
+/*! \fn const char *QLatin1StringView::data() const
+
+ Returns the start of the Latin-1 string referenced by this object.
+*/
+
+/*! \fn const char *QLatin1StringView::constData() const
+ \since 6.4
+
+ Returns the start of the Latin-1 string referenced by this object.
+
+ This function is provided for compatibility with other Qt containers.
+
+ \sa data()
+*/
+
+/*! \fn qsizetype QLatin1StringView::size() const
+
+ Returns the size of the Latin-1 string referenced by this object.
+
+ \note In version prior to Qt 6, this function returned \c{int},
+ restricting the amount of data that could be held in a QLatin1StringView
+ on 64-bit architectures.
+*/
+
+/*! \fn qsizetype QLatin1StringView::length() const
+ \since 6.4
+
+ Same as size().
+
+ This function is provided for compatibility with other Qt containers.
+*/
+
+/*! \fn bool QLatin1StringView::isNull() const
+ \since 5.10
+
+ Returns whether the Latin-1 string referenced by this object is null
+ (\c{data() == nullptr}) or not.
+
+ \sa isEmpty(), data()
+*/
+
+/*! \fn bool QLatin1StringView::isEmpty() const
+ \since 5.10
+
+ Returns whether the Latin-1 string referenced by this object is empty
+ (\c{size() == 0}) or not.
+
+ \sa isNull(), size()
+*/
+
+/*! \fn bool QLatin1StringView::empty() const
+ \since 6.4
+
+ Returns whether the Latin-1 string referenced by this object is empty
+ (\c{size() == 0}) or not.
+
+ This function is provided for STL compatibility.
+
+ \sa isEmpty(), isNull(), size()
+*/
+
+/*! \fn QLatin1Char QLatin1StringView::at(qsizetype pos) const
+ \since 5.8
+
+ Returns the character at position \a pos in this object.
+
+ \note This function performs no error checking.
+ The behavior is undefined when \a pos < 0 or \a pos >= size().
+
+ \sa operator[]()
+*/
+
+/*! \fn QLatin1Char QLatin1StringView::operator[](qsizetype pos) const
+ \since 5.8
+
+ Returns the character at position \a pos in this object.
+
+ \note This function performs no error checking.
+ The behavior is undefined when \a pos < 0 or \a pos >= size().
+
+ \sa at()
+*/
+
+/*!
+ \fn QLatin1Char QLatin1StringView::front() const
+ \since 5.10
+
+ Returns the first character in the string.
+ Same as \c{at(0)}.
+
+ This function is provided for STL compatibility.
+
+ \warning Calling this function on an empty string constitutes
+ undefined behavior.
+
+ \sa back(), at(), operator[]()
+*/
+
+/*!
+ \fn QLatin1Char QLatin1StringView::first() const
+ \since 6.4
+
+ Returns the first character in the string.
+ Same as \c{at(0)} or front().
+
+ This function is provided for compatibility with other Qt containers.
+
+ \warning Calling this function on an empty string constitutes
+ undefined behavior.
+
+ \sa last(), front(), back()
+*/
+
+/*!
+ \fn QLatin1Char QLatin1StringView::back() const
+ \since 5.10
+
+ Returns the last character in the string.
+ Same as \c{at(size() - 1)}.
+
+ This function is provided for STL compatibility.
+
+ \warning Calling this function on an empty string constitutes
+ undefined behavior.
+
+ \sa front(), at(), operator[]()
+*/
+
+/*!
+ \fn QLatin1Char QLatin1StringView::last() const
+ \since 6.4
+
+ Returns the last character in the string.
+ Same as \c{at(size() - 1)} or back().
+
+ This function is provided for compatibility with other Qt containers.
+
+ \warning Calling this function on an empty string constitutes
+ undefined behavior.
+
+ \sa first(), back(), front()
+*/
+
+/*!
+ \fn int QLatin1StringView::compare(QStringView str, Qt::CaseSensitivity cs) const
+ \fn int QLatin1StringView::compare(QLatin1StringView l1, Qt::CaseSensitivity cs) const
+ \fn int QLatin1StringView::compare(QChar ch) const
+ \fn int QLatin1StringView::compare(QChar ch, Qt::CaseSensitivity cs) const
+ \since 5.14
+
+ Compares this string view with UTF-16 string view \a str, Latin-1 string view \a l1,
+ or the character \a ch, respectively. Returns a negative integer if this
+ string is less than \a str, \a l1 or \a ch, returns a positive integer if it
+ is greater than \a str, \a l1 or \a ch, and zero if they are equal.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa operator==(), operator<(), operator>()
+*/
+
+/*!
+ \fn int QLatin1StringView::compare(QUtf8StringView str, Qt::CaseSensitivity cs) const
+ \since 6.5
+
+ Compares this string view with \a str and returns a negative integer if
+ this string view is less than \a str, a positive integer if it is greater than
+ \a str, and zero if they are equal.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
+
+ \sa operator==(), operator<(), operator>()
+*/
+
+
+/*!
+ \fn bool QLatin1StringView::startsWith(QStringView str, Qt::CaseSensitivity cs) const
+ \since 5.10
+ \fn bool QLatin1StringView::startsWith(QLatin1StringView l1, Qt::CaseSensitivity cs) const
+ \since 5.10
+ \fn bool QLatin1StringView::startsWith(QChar ch) const
+ \since 5.10
+ \fn bool QLatin1StringView::startsWith(QChar ch, Qt::CaseSensitivity cs) const
+ \since 5.10
+
+ Returns \c true if this Latin-1 string view starts with the UTF-16
+ string viewed by \a str, the Latin-1 string viewed by \a l1, or the
+ character \a ch, respectively; otherwise returns \c false.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa endsWith()
+*/
+
+/*!
+ \fn bool QLatin1StringView::endsWith(QStringView str, Qt::CaseSensitivity cs) const
+ \since 5.10
+ \fn bool QLatin1StringView::endsWith(QLatin1StringView l1, Qt::CaseSensitivity cs) const
+ \since 5.10
+ \fn bool QLatin1StringView::endsWith(QChar ch) const
+ \since 5.10
+ \fn bool QLatin1StringView::endsWith(QChar ch, Qt::CaseSensitivity cs) const
+ \since 5.10
+
+ Returns \c true if this Latin-1 string view ends with the UTF-16 string
+ viewed \a str, the Latin-1 string viewed by \a l1, or the character \a ch,
+ respectively; otherwise returns \c false.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa startsWith()
+*/
+
+/*!
+ \fn qsizetype QLatin1StringView::indexOf(QStringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \fn qsizetype QLatin1StringView::indexOf(QLatin1StringView l1, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \fn qsizetype QLatin1StringView::indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 5.14
+
+ Returns the index position in this Latin-1 string view of the first
+ occurrence of the UTF-16 string viewed by \a str, the Latin-1 string
+ viewed by \a l1, or the character \a ch, respectively, searching forward
+ from index position \a from. Returns -1 if \a str, \a l1 or \a c is not
+ found, respectively.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ \sa QString::indexOf()
+*/
+
+/*!
+ \fn bool QLatin1StringView::contains(QStringView str, Qt::CaseSensitivity cs) const
+ \fn bool QLatin1StringView::contains(QLatin1StringView l1, Qt::CaseSensitivity cs) const
+ \fn bool QLatin1StringView::contains(QChar c, Qt::CaseSensitivity cs) const
+ \since 5.14
+
+ Returns \c true if this Latin-1 string view contains an occurrence of the
+ UTF-16 string viewed by \a str, the Latin-1 string viewed by \a l1, or the
+ character \a ch, respectively; otherwise returns \c false.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa indexOf(), QStringView::contains(), QStringView::indexOf(),
+ QString::indexOf()
+*/
+
+/*!
+ \fn qsizetype QLatin1StringView::lastIndexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QLatin1StringView::lastIndexOf(QLatin1StringView l1, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QLatin1StringView::lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs) const
+ \since 5.14
+
+ Returns the index position in this Latin-1 string view of the last
+ occurrence of the UTF-16 string viewed by \a str, the Latin-1 string
+ viewed by \a l1, or the character \a ch, respectively, searching backward
+ from index position \a from; returns -1 if \a str, \a l1 or \a ch is not
+ found, respectively.
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \note When searching for a 0-length \a str or \a l1, the match at
+ the end of the data is excluded from the search by a negative \a
+ from, even though \c{-1} is normally thought of as searching from
+ the end of the string: the match at the end is \e after the last
+ character, so it is excluded. To include such a final empty match,
+ either give a positive value for \a from or omit the \a from
+ parameter entirely.
+
+ \sa indexOf(), QStringView::lastIndexOf(), QStringView::indexOf(),
+ QString::indexOf()
+*/
+
+/*!
+ \fn qsizetype QLatin1StringView::lastIndexOf(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \fn qsizetype QLatin1StringView::lastIndexOf(QLatin1StringView l1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 6.2
+ \overload lastIndexOf()
+
+ Returns the index position in this Latin-1 string view of the last
+ occurrence of the UTF-16 string viewed by \a str or the Latin-1 string
+ viewed by \a l1, respectively. Returns -1 if \a str or \a l1 is not found,
+ respectively.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+*/
+
+/*!
+ \fn qsizetype QLatin1StringView::lastIndexOf(QChar ch, Qt::CaseSensitivity cs) const
+ \since 6.3
+ \overload
+*/
+
+/*!
+ \fn qsizetype QLatin1StringView::count(QStringView str, Qt::CaseSensitivity cs) const
+ \fn qsizetype QLatin1StringView::count(QLatin1StringView l1, Qt::CaseSensitivity cs) const
+ \fn qsizetype QLatin1StringView::count(QChar ch, Qt::CaseSensitivity cs) const
+ \since 6.4
+
+ Returns the number of (potentially overlapping) occurrences of the
+ UTF-16 string viewed by \a str, the Latin-1 string viewed by \a l1,
+ or the character \a ch, respectively, in this string view.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa contains(), indexOf()
+*/
+
+/*!
+ \fn QLatin1StringView::const_iterator QLatin1StringView::begin() const
+ \since 5.10
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the
+ first character in the string.
+
+ This function is provided for STL compatibility.
+
+ \sa end(), cbegin(), rbegin(), data()
+*/
+
+/*!
+ \fn QLatin1StringView::const_iterator QLatin1StringView::cbegin() const
+ \since 5.10
+
+ Same as begin().
+
+ This function is provided for STL compatibility.
+
+ \sa cend(), begin(), crbegin(), data()
+*/
+
+/*!
+ \fn QLatin1StringView::const_iterator QLatin1StringView::constBegin() const
+ \since 6.4
+
+ Same as begin().
+
+ This function is provided for compatibility with other Qt containers.
+
+ \sa constEnd(), begin(), cbegin(), data()
+*/
+
+/*!
+ \fn QLatin1StringView::const_iterator QLatin1StringView::end() const
+ \since 5.10
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing just
+ after the last character in the string.
+
+ This function is provided for STL compatibility.
+
+ \sa begin(), cend(), rend()
+*/
+
+/*! \fn QLatin1StringView::const_iterator QLatin1StringView::cend() const
+ \since 5.10
+
+ Same as end().
+
+ This function is provided for STL compatibility.
+
+ \sa cbegin(), end(), crend()
+*/
+
+/*! \fn QLatin1StringView::const_iterator QLatin1StringView::constEnd() const
+ \since 6.4
+
+ Same as end().
+
+ This function is provided for compatibility with other Qt containers.
+
+ \sa constBegin(), end(), cend(), crend()
+*/
+
+/*!
+ \fn QLatin1StringView::const_reverse_iterator QLatin1StringView::rbegin() const
+ \since 5.10
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing
+ to the first character in the string, in reverse order.
+
+ This function is provided for STL compatibility.
+
+ \sa rend(), crbegin(), begin()
+*/
+
+/*!
+ \fn QLatin1StringView::const_reverse_iterator QLatin1StringView::crbegin() const
+ \since 5.10
+
+ Same as rbegin().
+
+ This function is provided for STL compatibility.
+
+ \sa crend(), rbegin(), cbegin()
+*/
+
+/*!
+ \fn QLatin1StringView::const_reverse_iterator QLatin1StringView::rend() const
+ \since 5.10
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing just
+ after the last character in the string, in reverse order.
+
+ This function is provided for STL compatibility.
+
+ \sa rbegin(), crend(), end()
+*/
+
+/*!
+ \fn QLatin1StringView::const_reverse_iterator QLatin1StringView::crend() const
+ \since 5.10
+
+ Same as rend().
+
+ This function is provided for STL compatibility.
+
+ \sa crbegin(), rend(), cend()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::mid(qsizetype start, qsizetype length) const
+ \since 5.8
+
+ Returns the substring of length \a length starting at position
+ \a start in this Latin-1 string view.
+
+ If you know that \a start and \a length cannot be out of bounds, use
+ sliced() instead in new code, because it is faster.
+
+ Returns an empty Latin-1 string view if \a start exceeds the length
+ of this string view. If there are less than \a length characters available
+ in this string view starting at \a start, or if \a length is negative
+ (default), the function returns all characters that are available from
+ \a start.
+
+ \sa first(), last(), sliced(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::left(qsizetype length) const
+ \since 5.8
+
+ If you know that \a length cannot be out of bounds, use first() instead in
+ new code, because it is faster.
+
+ Returns the substring of length \a length starting at position
+ 0 in this Latin-1 string view.
+
+ The entire Latin-1 string view is returned if \a length is greater
+ than or equal to size(), or less than zero.
+
+ \sa first(), last(), sliced(), startsWith(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::right(qsizetype length) const
+ \since 5.8
+
+ If you know that \a length cannot be out of bounds, use last() instead in
+ new code, because it is faster.
+
+ Returns the substring of length \a length starting at position
+ size() - \a length in this Latin-1 string view.
+
+ The entire Latin-1 string view is returned if \a length is greater
+ than or equal to size(), or less than zero.
+
+ \sa first(), last(), sliced(), endsWith(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::first(qsizetype n) const
+ \since 6.0
+
+ Returns a Latin-1 string view that contains the first \a n characters
+ of this string view.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa last(), startsWith(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::last(qsizetype n) const
+ \since 6.0
+
+ Returns a Latin-1 string view that contains the last \a n characters
+ of this string view.
+
+ \note The behavior is undefined when \a n < 0 or \a n > size().
+
+ \sa first(), endsWith(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::sliced(qsizetype pos, qsizetype n) const
+ \since 6.0
+
+ Returns a Latin-1 string view that points to \a n characters of this
+ string view, starting at position \a pos.
+
+//! [UB-sliced-index-length]
+ \note The behavior is undefined when \a pos < 0, \a n < 0,
+ or \c{pos + n > size()}.
+//! [UB-sliced-index-length]
+
+ \sa first(), last(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::sliced(qsizetype pos) const
+ \since 6.0
+
+ Returns a Latin-1 string view starting at position \a pos in this
+ string view, and extending to its end.
+
+//! [UB-sliced-index-only]
+ \note The behavior is undefined when \a pos < 0 or \a pos > size().
+//! [UB-sliced-index-only]
+
+ \sa first(), last(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::chopped(qsizetype length) const
+ \since 5.10
+
+ Returns the substring of length size() - \a length starting at the
+ beginning of this object.
+
+ Same as \c{left(size() - length)}.
+
+ \note The behavior is undefined when \a length < 0 or \a length > size().
+
+ \sa sliced(), first(), last(), chop(), truncate()
+*/
+
+/*!
+ \fn void QLatin1StringView::truncate(qsizetype length)
+ \since 5.10
+
+ Truncates this string to length \a length.
+
+ Same as \c{*this = left(length)}.
+
+ \note The behavior is undefined when \a length < 0 or \a length > size().
+
+ \sa sliced(), first(), last(), chopped(), chop()
+*/
+
+/*!
+ \fn void QLatin1StringView::chop(qsizetype length)
+ \since 5.10
+
+ Truncates this string by \a length characters.
+
+ Same as \c{*this = left(size() - length)}.
+
+ \note The behavior is undefined when \a length < 0 or \a length > size().
+
+ \sa sliced(), first(), last(), chopped(), truncate()
+*/
+
+/*!
+ \fn QLatin1StringView QLatin1StringView::trimmed() const
+ \since 5.10
+
+ Strips leading and trailing whitespace and returns the result.
+
+ Whitespace means any character for which QChar::isSpace() returns
+ \c true. This includes the ASCII characters '\\t', '\\n', '\\v',
+ '\\f', '\\r', and ' '.
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator==(const QLatin1StringView &lhs, const char * const &rhs)
+ \since 4.3
+
+ Returns \c true if the string \a lhs is equal to const char pointer \a rhs;
+ otherwise returns \c false.
+
+ The \a rhs const char pointer is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+
+ \sa {Comparing Strings}
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator==(const QLatin1StringView &lhs, const QByteArray &rhs)
+ \since 5.0
+ \overload
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator!=(const QLatin1StringView &lhs, const char * const &rhs)
+ \since 4.3
+
+ Returns \c true if the string \a lhs is not equal to const char pointer \a rhs;
+ otherwise returns \c false.
+
+ The \a rhs const char pointer is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+
+ \sa {Comparing Strings}
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator!=(const QLatin1StringView &lhs, const QByteArray &rhs)
+ \since 5.0
+ \overload operator!=()
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator>(const QLatin1StringView &lhs, const char * const &rhs)
+ \since 4.3
+
+ Returns \c true if the string \a lhs is lexically greater than const char pointer
+ \a rhs; otherwise returns \c false.
+
+ The \a rhs const char pointer is converted to a QUtf8StringView.
+
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
+ when you compile your applications. This can be useful if you want
+ to ensure that all user-visible strings go through QObject::tr(),
+ for example.
+
+ \sa {Comparing Strings}
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator>(const QLatin1StringView &lhs, const QByteArray &rhs)
+ \since 5.0
+ \overload
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
+ when you compile your applications. This can be useful if you want
+ to ensure that all user-visible strings go through QObject::tr(),
+ for example.
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator<(const QLatin1StringView &lhs, const char * const &rhs)
+ \since 4.3
+
+ Returns \c true if the string \a lhs is lexically less than const char pointer
+ \a rhs; otherwise returns \c false.
+
+ The \a rhs const char pointer is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+
+ \sa {Comparing Strings}
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator<(const QLatin1StringView &lhs, const QByteArray &rhs)
+ \since 5.0
+ \overload
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator>=(const QLatin1StringView &lhs, const char * const &rhs)
+ \since 4.3
+
+ Returns \c true if the string \a lhs is lexically greater than or equal to
+ const char pointer \a rhs; otherwise returns \c false.
+
+ The \a rhs const char pointer is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+
+ \sa {Comparing Strings}
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator>=(const QLatin1StringView &lhs, const QByteArray &rhs)
+ \since 5.0
+ \overload
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator<=(const QLatin1StringView &lhs, const char * const &rhs)
+ \since 4.3
+
+ Returns \c true if the string \a lhs is lexically less than or equal to
+ const char pointer \a rhs; otherwise returns \c false.
+
+ The \a rhs const char pointer is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+
+ \sa {Comparing Strings}
+*/
+
+/*!
+ \fn bool QLatin1StringView::operator<=(const QLatin1StringView &lhs, const QByteArray &rhs)
+ \since 5.0
+ \overload
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ can be useful if you want to ensure that all user-visible strings
+ go through QObject::tr(), for example.
+*/
+
+/*! \fn bool QLatin1StringView::operator==(const QLatin1StringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string \a lhs is lexically equal to string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator!=(const QLatin1StringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string \a lhs is lexically not equal to string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<(const QLatin1StringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string \a lhs is lexically less than string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<=(const QLatin1StringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string \a lhs is lexically less than or equal to
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>(const QLatin1StringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string \a lhs is lexically greater than string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>=(const QLatin1StringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string \a lhs is lexically greater than or equal
+ to string \a rhs; otherwise returns \c false.
+*/
+
+/*! \fn bool QLatin1StringView::operator==(const QChar &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if char \a lhs is lexically equal to string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<(const QChar &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if char \a lhs is lexically less than string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>(const QChar &lhs, const QLatin1StringView &rhs)
+ Returns \c true if char \a lhs is lexically greater than string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator!=(const QChar &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if char \a lhs is lexically not equal to string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<=(const QChar &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if char \a lhs is lexically less than or equal to
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>=(const QChar &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if char \a lhs is lexically greater than or equal to
+ string \a rhs; otherwise returns \c false.
+*/
+
+/*! \fn bool QLatin1StringView::operator==(const QLatin1StringView &lhs, const QChar &rhs)
+
+ Returns \c true if string \a lhs is lexically equal to char \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<(const QLatin1StringView &lhs, const QChar &rhs)
+
+ Returns \c true if string \a lhs is lexically less than char \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>(const QLatin1StringView &lhs, const QChar &rhs)
+
+ Returns \c true if string \a lhs is lexically greater than char \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator!=(const QLatin1StringView &lhs, const QChar &rhs)
+
+ Returns \c true if string \a lhs is lexically not equal to char \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<=(const QLatin1StringView &lhs, const QChar &rhs)
+
+ Returns \c true if string \a lhs is lexically less than or equal to
+ char \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>=(const QLatin1StringView &lhs, const QChar &rhs)
+
+ Returns \c true if string \a lhs is lexically greater than or equal to
+ char \a rhs; otherwise returns \c false.
+*/
+
+/*! \fn bool QLatin1StringView::operator==(const QStringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string view \a lhs is lexically equal to string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<(const QStringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string view \a lhs is lexically less than string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>(const QStringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string view \a lhs is lexically greater than string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator!=(const QStringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string view \a lhs is lexically not equal to string \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<=(const QStringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string view \a lhs is lexically less than or equal to
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>=(const QStringView &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if string view \a lhs is lexically greater than or equal to
+ string \a rhs; otherwise returns \c false.
+*/
+
+/*! \fn bool QLatin1StringView::operator==(const QLatin1StringView &lhs, const QStringView &rhs)
+
+ Returns \c true if string \a lhs is lexically equal to string view \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<(const QLatin1StringView &lhs, const QStringView &rhs)
+
+ Returns \c true if string \a lhs is lexically less than string view \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>(const QLatin1StringView &lhs, const QStringView &rhs)
+
+ Returns \c true if string \a lhs is lexically greater than string view \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator!=(const QLatin1StringView &lhs, const QStringView &rhs)
+
+ Returns \c true if string \a lhs is lexically not equal to string view \a rhs;
+ otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<=(const QLatin1StringView &lhs, const QStringView &rhs)
+
+ Returns \c true if string \a lhs is lexically less than or equal to
+ string view \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>=(const QLatin1StringView &lhs, const QStringView &rhs)
+
+ Returns \c true if string \a lhs is lexically greater than or equal to
+ string view \a rhs; otherwise returns \c false.
+*/
+
+/*! \fn bool QLatin1StringView::operator==(const char * const &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if const char pointer \a lhs is lexically equal to
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<(const char * const &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if const char pointer \a lhs is lexically less than
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>(const char * const &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if const char pointer \a lhs is lexically greater than
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator!=(const char * const &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if const char pointer \a lhs is lexically not equal to
+ string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator<=(const char * const &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if const char pointer \a lhs is lexically less than or
+ equal to string \a rhs; otherwise returns \c false.
+*/
+/*! \fn bool QLatin1StringView::operator>=(const char * const &lhs, const QLatin1StringView &rhs)
+
+ Returns \c true if const char pointer \a lhs is lexically greater than or
+ equal to string \a rhs; otherwise returns \c false.
+*/
+
+/*!
+ \fn qlonglong QLatin1StringView::toLongLong(bool *ok, int base) const
+ \fn qulonglong QLatin1StringView::toULongLong(bool *ok, int base) const
+ \fn int QLatin1StringView::toInt(bool *ok, int base) const
+ \fn uint QLatin1StringView::toUInt(bool *ok, int base) const
+ \fn long QLatin1StringView::toLong(bool *ok, int base) const
+ \fn ulong QLatin1StringView::toULong(bool *ok, int base) const
+ \fn short QLatin1StringView::toShort(bool *ok, int base) const
+ \fn ushort QLatin1StringView::toUShort(bool *ok, int base) const
+
+ \since 6.4
+
+ Returns this QLatin1StringView converted to a corresponding numeric value using
+ base \a base, which is ten by default. Bases 0 and 2 through 36 are supported,
+ using letters for digits beyond 9; A is ten, B is eleven and so on.
+
+ If \a base is 0, the base is determined automatically using the following
+ rules (in this order), if the Latin-1 string view begins with:
+
+ \list
+ \li \c "0x", the rest of it is read as hexadecimal (base 16)
+ \li \c "0b", the rest of it is read as binary (base 2)
+ \li \c "0", the rest of it is read as octal (base 8)
+ \li otherwise it is read as decimal
+ \endlist
+
+ Returns 0 if the conversion fails.
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+//! [latin1-numeric-conversion-note]
+ \note The conversion of the number is performed in the default C locale,
+ regardless of the user's locale. Use QLocale to perform locale-aware
+ conversions between numbers and strings.
+
+ This function ignores leading and trailing spacing characters.
+//! [latin1-numeric-conversion-note]
+
+ \note Support for the "0b" prefix was added in Qt 6.4.
+*/
+
+/*!
+ \fn double QLatin1StringView::toDouble(bool *ok) const
+ \fn float QLatin1StringView::toFloat(bool *ok) const
+ \since 6.4
+
+ Returns this QLatin1StringView converted to a corresponding floating-point value.
+
+ Returns an infinity if the conversion overflows or 0.0 if the
+ conversion fails for other reasons (e.g. underflow).
+
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+
+ \warning The QLatin1StringView content may only contain valid numerical
+ characters which includes the plus/minus sign, the character e used in
+ scientific notation, and the decimal point. Including the unit or additional
+ characters leads to a conversion error.
+
+ \include qlatin1stringview.qdoc latin1-numeric-conversion-note
+*/
+
+/*!
+ \fn Qt::Literals::StringLiterals::operator""_L1(const char *str, size_t size)
+
+ \relates QLatin1StringView
+ \since 6.4
+
+ Literal operator that creates a QLatin1StringView out of the first \a size
+ characters in the char string literal \a str.
+
+ The following code creates a QLatin1StringView:
+ \code
+ using namespace Qt::Literals::StringLiterals;
+
+ auto str = "hello"_L1;
+ \endcode
+
+ \sa Qt::Literals::StringLiterals
+*/
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index c20e117778..ab95b300eb 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -1,46 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2019 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qglobal.h"
-#if !defined(QWS) && defined(Q_OS_MAC)
+#if (defined(QT_STATIC) || defined(QT_BOOTSTRAPPED)) && defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1000
+QT_WARNING_DISABLE_GCC("-Wfree-nonheap-object") // false positive tracking
+#endif
+
+#if defined(Q_OS_MACOS)
# include "private/qcore_mac_p.h"
# include <CoreFoundation/CoreFoundation.h>
#endif
@@ -54,6 +22,7 @@
#include "qlocale.h"
#include "qlocale_p.h"
#include "qlocale_tools_p.h"
+#include <private/qtools_p.h>
#if QT_CONFIG(datetimeparser)
#include "private/qdatetimeparser_p.h"
#endif
@@ -61,8 +30,13 @@
#include "qdatetime.h"
#include "qstringlist.h"
#include "qvariant.h"
+#include "qvarlengtharray.h"
#include "qstringbuilder.h"
+#if QT_CONFIG(timezone)
+# include "qtimezone.h"
+#endif
#include "private/qnumeric_p.h"
+#include "private/qtools_p.h"
#include <cmath>
#ifndef QT_NO_SYSTEMLOCALE
# include "qmutex.h"
@@ -76,20 +50,40 @@
#include "private/qgregoriancalendar_p.h"
#include "qcalendar.h"
+#include <q20iterator.h>
+
QT_BEGIN_NAMESPACE
+constexpr int QLocale::DefaultTwoDigitBaseYear;
+
+QT_IMPL_METATYPE_EXTERN_TAGGED(QList<Qt::DayOfWeek>, QList_Qt__DayOfWeek)
#ifndef QT_NO_SYSTEMLOCALE
-static QSystemLocale *_systemLocale = nullptr;
-class QSystemLocaleSingleton: public QSystemLocale
-{
-public:
- QSystemLocaleSingleton() : QSystemLocale(true) {}
-};
+QT_IMPL_METATYPE_EXTERN_TAGGED(QSystemLocale::CurrencyToStringArgument,
+ QSystemLocale__CurrencyToStringArgument)
+#endif
+
+using namespace Qt::StringLiterals;
+using namespace QtMiscUtils;
-Q_GLOBAL_STATIC(QSystemLocaleSingleton, QSystemLocale_globalSystemLocale)
-static QLocaleData globalLocaleData;
+#ifndef QT_NO_SYSTEMLOCALE
+Q_CONSTINIT static QSystemLocale *_systemLocale = nullptr;
+Q_CONSTINIT static QLocaleData systemLocaleData = {};
#endif
+static_assert(ascii_isspace(' '));
+static_assert(ascii_isspace('\t'));
+static_assert(ascii_isspace('\n'));
+static_assert(ascii_isspace('\v'));
+static_assert(ascii_isspace('\f'));
+static_assert(ascii_isspace('\r'));
+static_assert(!ascii_isspace('\0'));
+static_assert(!ascii_isspace('\a'));
+static_assert(!ascii_isspace('a'));
+static_assert(!ascii_isspace('\177'));
+static_assert(!ascii_isspace(uchar('\200')));
+static_assert(!ascii_isspace(uchar('\xA0'))); // NBSP (is a space but Latin 1, not ASCII)
+static_assert(!ascii_isspace(uchar('\377')));
+
/******************************************************************************
** Helpers for accessing Qt locale database
*/
@@ -98,39 +92,67 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include "qlocale_data_p.h"
QT_END_INCLUDE_NAMESPACE
-QLocale::Language QLocalePrivate::codeToLanguage(QStringView code) noexcept
+QLocale::Language QLocalePrivate::codeToLanguage(QStringView code,
+ QLocale::LanguageCodeTypes codeTypes) noexcept
{
const auto len = code.size();
if (len != 2 && len != 3)
- return QLocale::C;
- char16_t uc1 = code[0].toLower().unicode();
- char16_t uc2 = code[1].toLower().unicode();
- char16_t uc3 = len > 2 ? code[2].toLower().unicode() : 0;
+ return QLocale::AnyLanguage;
- const unsigned char *c = language_code_list;
- for (; *c != 0; c += 3) {
- if (uc1 == c[0] && uc2 == c[1] && uc3 == c[2])
- return QLocale::Language((c - language_code_list)/3);
+ const char16_t uc1 = code[0].toLower().unicode();
+ const char16_t uc2 = code[1].toLower().unicode();
+ const char16_t uc3 = len > 2 ? code[2].toLower().unicode() : 0;
+
+ // All language codes are ASCII.
+ if (uc1 > 0x7F || uc2 > 0x7F || uc3 > 0x7F)
+ return QLocale::AnyLanguage;
+
+ const AlphaCode codeBuf = { char(uc1), char(uc2), char(uc3) };
+
+ auto searchCode = [codeBuf](auto f) {
+ return std::find_if(languageCodeList.begin(), languageCodeList.end(),
+ [=](LanguageCodeEntry i) { return f(i) == codeBuf; });
+ };
+
+ if (codeTypes.testFlag(QLocale::ISO639Part1) && uc3 == 0) {
+ auto i = searchCode([](LanguageCodeEntry i) { return i.part1; });
+ if (i != languageCodeList.end())
+ return QLocale::Language(std::distance(languageCodeList.begin(), i));
}
- if (uc3 == 0) {
- // legacy codes
- if (uc1 == 'n' && uc2 == 'o') { // no -> nb
- static_assert(QLocale::Norwegian == QLocale::NorwegianBokmal);
- return QLocale::Norwegian;
+ if (uc3 != 0) {
+ if (codeTypes.testFlag(QLocale::ISO639Part2B)) {
+ auto i = searchCode([](LanguageCodeEntry i) { return i.part2B; });
+ if (i != languageCodeList.end())
+ return QLocale::Language(std::distance(languageCodeList.begin(), i));
}
- if (uc1 == 't' && uc2 == 'l') { // tl -> fil
- static_assert(QLocale::Tagalog == QLocale::Filipino);
- return QLocale::Tagalog;
- }
- if (uc1 == 's' && uc2 == 'h') { // sh -> sr[_Latn]
- static_assert(QLocale::SerboCroatian == QLocale::Serbian);
- return QLocale::SerboCroatian;
+
+ // Optimization: Part 2T code if present is always the same as Part 3 code.
+ // This is asserted in iso639_3.LanguageCodeData.
+ if (codeTypes.testFlag(QLocale::ISO639Part2T)
+ && !codeTypes.testFlag(QLocale::ISO639Part3)) {
+ auto i = searchCode([](LanguageCodeEntry i) { return i.part2T; });
+ if (i != languageCodeList.end())
+ return QLocale::Language(std::distance(languageCodeList.begin(), i));
}
- if (uc1 == 'm' && uc2 == 'o') { // mo -> ro
- static_assert(QLocale::Moldavian == QLocale::Romanian);
- return QLocale::Moldavian;
+
+ if (codeTypes.testFlag(QLocale::ISO639Part3)) {
+ auto i = searchCode([](LanguageCodeEntry i) { return i.part3; });
+ if (i != languageCodeList.end())
+ return QLocale::Language(std::distance(languageCodeList.begin(), i));
}
+ }
+
+ if (codeTypes.testFlag(QLocale::LegacyLanguageCode) && uc3 == 0) {
+ // legacy codes
+ if (uc1 == 'n' && uc2 == 'o') // no -> nb
+ return QLocale::NorwegianBokmal;
+ if (uc1 == 't' && uc2 == 'l') // tl -> fil
+ return QLocale::Filipino;
+ if (uc1 == 's' && uc2 == 'h') // sh -> sr[_Latn]
+ return QLocale::Serbian;
+ if (uc1 == 'm' && uc2 == 'o') // mo -> ro
+ return QLocale::Romanian;
// Android uses the following deprecated codes
if (uc1 == 'i' && uc2 == 'w') // iw -> he
return QLocale::Hebrew;
@@ -139,7 +161,7 @@ QLocale::Language QLocalePrivate::codeToLanguage(QStringView code) noexcept
if (uc1 == 'j' && uc2 == 'i') // ji -> yi
return QLocale::Yiddish;
}
- return QLocale::C;
+ return QLocale::AnyLanguage;
}
QLocale::Script QLocalePrivate::codeToScript(QStringView code) noexcept
@@ -155,118 +177,203 @@ QLocale::Script QLocalePrivate::codeToScript(QStringView code) noexcept
unsigned char c3 = code[3].toLower().toLatin1();
const unsigned char *c = script_code_list;
- for (int i = 0; i < QLocale::LastScript; ++i, c += 4) {
+ for (qsizetype i = 0; i < QLocale::LastScript; ++i, c += 4) {
if (c0 == c[0] && c1 == c[1] && c2 == c[2] && c3 == c[3])
return QLocale::Script(i);
}
return QLocale::AnyScript;
}
-QLocale::Country QLocalePrivate::codeToCountry(QStringView code) noexcept
+QLocale::Territory QLocalePrivate::codeToTerritory(QStringView code) noexcept
{
const auto len = code.size();
if (len != 2 && len != 3)
- return QLocale::AnyCountry;
+ return QLocale::AnyTerritory;
char16_t uc1 = code[0].toUpper().unicode();
char16_t uc2 = code[1].toUpper().unicode();
char16_t uc3 = len > 2 ? code[2].toUpper().unicode() : 0;
- const unsigned char *c = country_code_list;
+ const unsigned char *c = territory_code_list;
for (; *c != 0; c += 3) {
if (uc1 == c[0] && uc2 == c[1] && uc3 == c[2])
- return QLocale::Country((c - country_code_list)/3);
+ return QLocale::Territory((c - territory_code_list)/3);
}
- return QLocale::AnyCountry;
+ return QLocale::AnyTerritory;
}
-QLatin1String QLocalePrivate::languageToCode(QLocale::Language language)
+std::array<char, 4> QLocalePrivate::languageToCode(QLocale::Language language,
+ QLocale::LanguageCodeTypes codeTypes)
{
- if (language == QLocale::AnyLanguage)
- return QLatin1String();
+ if (language == QLocale::AnyLanguage || language > QLocale::LastLanguage)
+ return {};
if (language == QLocale::C)
- return QLatin1String("C");
+ return {'C'};
+
+ const LanguageCodeEntry &i = languageCodeList[language];
+
+ if (codeTypes.testFlag(QLocale::ISO639Part1) && i.part1.isValid())
+ return i.part1.decode();
+
+ if (codeTypes.testFlag(QLocale::ISO639Part2B) && i.part2B.isValid())
+ return i.part2B.decode();
- const unsigned char *c = language_code_list + 3*(uint(language));
+ if (codeTypes.testFlag(QLocale::ISO639Part2T) && i.part2T.isValid())
+ return i.part2T.decode();
- return QLatin1String(reinterpret_cast<const char*>(c), c[2] == 0 ? 2 : 3);
+ if (codeTypes.testFlag(QLocale::ISO639Part3))
+ return i.part3.decode();
+ return {};
}
-QLatin1String QLocalePrivate::scriptToCode(QLocale::Script script)
+QLatin1StringView QLocalePrivate::scriptToCode(QLocale::Script script)
{
if (script == QLocale::AnyScript || script > QLocale::LastScript)
- return QLatin1String();
- const unsigned char *c = script_code_list + 4*(uint(script));
- return QLatin1String(reinterpret_cast<const char *>(c), 4);
+ return {};
+ const unsigned char *c = script_code_list + 4 * script;
+ return {reinterpret_cast<const char *>(c), 4};
}
-QLatin1String QLocalePrivate::countryToCode(QLocale::Country country)
+QLatin1StringView QLocalePrivate::territoryToCode(QLocale::Territory territory)
{
- if (country == QLocale::AnyCountry)
- return QLatin1String();
-
- const unsigned char *c = country_code_list + 3*(uint(country));
+ if (territory == QLocale::AnyTerritory || territory > QLocale::LastTerritory)
+ return {};
- return QLatin1String(reinterpret_cast<const char*>(c), c[2] == 0 ? 2 : 3);
+ const unsigned char *c = territory_code_list + 3 * territory;
+ return {reinterpret_cast<const char*>(c), c[2] == 0 ? 2 : 3};
}
-// http://www.unicode.org/reports/tr35/#Likely_Subtags
-static bool addLikelySubtags(QLocaleId &localeId)
+namespace {
+struct LikelyPair
{
- // ### optimize with bsearch
- const int likely_subtags_count = sizeof(likely_subtags) / sizeof(likely_subtags[0]);
- const QLocaleId *p = likely_subtags;
- const QLocaleId *const e = p + likely_subtags_count;
- for ( ; p < e; p += 2) {
- if (localeId == p[0]) {
- localeId = p[1];
- return true;
- }
- }
- return false;
+ QLocaleId key; // Search key.
+ QLocaleId value = QLocaleId { 0, 0, 0 };
+};
+
+bool operator<(LikelyPair lhs, LikelyPair rhs)
+{
+ // Must match the comparison LocaleDataWriter.likelySubtags() uses when
+ // sorting, see qtbase/util/locale_database.qlocalexml2cpp.py
+ const auto compare = [](int lhs, int rhs) {
+ // 0 sorts after all other values; lhs and rhs are passed ushort values.
+ const int huge = 0x10000;
+ return (lhs ? lhs : huge) - (rhs ? rhs : huge);
+ };
+ const auto &left = lhs.key;
+ const auto &right = rhs.key;
+ // Comparison order: language, region, script:
+ if (int cmp = compare(left.language_id, right.language_id))
+ return cmp < 0;
+ if (int cmp = compare(left.territory_id, right.territory_id))
+ return cmp < 0;
+ return compare(left.script_id, right.script_id) < 0;
}
+} // anonymous namespace
+/*!
+ Fill in blank fields of a locale ID.
+
+ An ID in which some fields are zero stands for any locale that agrees with
+ it in its non-zero fields. CLDR's likely-subtag data is meant to help us
+ chose which candidate to prefer. (Note, however, that CLDR does have some
+ cases where it maps an ID to a "best match" for which CLDR does not provide
+ data, even though there are locales for which CLDR does provide data that do
+ match the given ID. It's telling us, unhelpfully but truthfully, what
+ locale would (most likely) be meant by (someone using) the combination
+ requested, even when that locale isn't yet supported.) It may also map an
+ obsolete or generic tag to a modern or more specific replacement, possibly
+ filling in some of the other fields in the process (presently only for
+ countries). Note that some fields of the result may remain blank, but there
+ is no more specific recommendation available.
+
+ For the formal specification, see
+ https://www.unicode.org/reports/tr35/#Likely_Subtags
+
+ \note We also search und_script_region and und_region; they're not mentioned
+ in the spec, but the examples clearly presume them and CLDR does provide
+ such likely matches.
+*/
QLocaleId QLocaleId::withLikelySubtagsAdded() const
{
- // language_script_region
- if (language_id || script_id || country_id) {
- QLocaleId id = QLocaleId::fromIds(language_id, script_id, country_id);
- if (addLikelySubtags(id))
- return id;
- }
- // language_region
- if (script_id) {
- QLocaleId id = QLocaleId::fromIds(language_id, 0, country_id);
- if (addLikelySubtags(id)) {
- id.script_id = script_id;
- return id;
+ /* Each pattern that appears in a comments below, language_script_region and
+ similar, indicates which of this's fields (even if blank) are being
+ attended to in a given search; for fields left out of the pattern, the
+ search uses 0 regardless of whether this has specified the field.
+
+ If a key matches what we're searching for (possibly with a wildcard in
+ the key matching a non-wildcard in our search), the tags from this that
+ are specified in the key are replaced by the match (even if different);
+ but the other tags of this replace what's in the match (even when the
+ match does specify a value).
+ */
+ static_assert(std::size(likely_subtags) % 2 == 0);
+ auto *pairs = reinterpret_cast<const LikelyPair *>(likely_subtags);
+ auto *const afterPairs = pairs + std::size(likely_subtags) / 2;
+ LikelyPair sought { *this };
+ // Our array is sorted in the order that puts all candidate matches in the
+ // order we would want them; ones we should prefer appear before the others.
+ if (language_id) {
+ // language_script_region, language_region, language_script, language:
+ pairs = std::lower_bound(pairs, afterPairs, sought);
+ // Single language's block isn't long enough to warrant more binary
+ // chopping within it - just traverse it all:
+ for (; pairs < afterPairs && pairs->key.language_id == language_id; ++pairs) {
+ const QLocaleId &key = pairs->key;
+ if (key.territory_id && key.territory_id != territory_id)
+ continue;
+ if (key.script_id && key.script_id != script_id)
+ continue;
+ QLocaleId value = pairs->value;
+ if (territory_id && !key.territory_id)
+ value.territory_id = territory_id;
+ if (script_id && !key.script_id)
+ value.script_id = script_id;
+ return value;
}
}
- // language_script
- if (country_id) {
- QLocaleId id = QLocaleId::fromIds(language_id, script_id, 0);
- if (addLikelySubtags(id)) {
- id.country_id = country_id;
- return id;
+ // und_script_region or und_region (in that order):
+ if (territory_id) {
+ sought.key = QLocaleId { 0, script_id, territory_id };
+ pairs = std::lower_bound(pairs, afterPairs, sought);
+ // Again, individual und_?_region block isn't long enough to make binary
+ // chop a win:
+ for (; pairs < afterPairs && pairs->key.territory_id == territory_id; ++pairs) {
+ const QLocaleId &key = pairs->key;
+ Q_ASSERT(!key.language_id);
+ if (key.script_id && key.script_id != script_id)
+ continue;
+ QLocaleId value = pairs->value;
+ if (language_id)
+ value.language_id = language_id;
+ if (script_id && !key.script_id)
+ value.script_id = script_id;
+ return value;
}
}
- // language
- if (script_id && country_id) {
- QLocaleId id = QLocaleId::fromIds(language_id, 0, 0);
- if (addLikelySubtags(id)) {
- id.script_id = script_id;
- id.country_id = country_id;
- return id;
+ // und_script:
+ if (script_id) {
+ sought.key = QLocaleId { 0, script_id, 0 };
+ pairs = std::lower_bound(pairs, afterPairs, sought);
+ if (pairs < afterPairs && pairs->key.script_id == script_id) {
+ Q_ASSERT(!pairs->key.language_id && !pairs->key.territory_id);
+ QLocaleId value = pairs->value;
+ if (language_id)
+ value.language_id = language_id;
+ if (territory_id)
+ value.territory_id = territory_id;
+ return value;
}
}
- // und_script
- if (language_id) {
- QLocaleId id = QLocaleId::fromIds(0, script_id, 0);
- if (addLikelySubtags(id)) {
- id.language_id = language_id;
- return id;
+ if (matchesAll()) { // Skipped all of the above.
+ // CLDR has no match-all at v37, but might get one some day ...
+ pairs = std::lower_bound(pairs, afterPairs, sought);
+ if (pairs < afterPairs) {
+ // All other keys are < match-all.
+ Q_ASSERT(pairs + 1 == afterPairs);
+ Q_ASSERT(pairs->key.matchesAll());
+ return pairs->value;
}
}
return *this;
@@ -277,19 +384,19 @@ QLocaleId QLocaleId::withLikelySubtagsRemoved() const
QLocaleId max = withLikelySubtagsAdded();
// language
{
- QLocaleId id = QLocaleId::fromIds(language_id, 0, 0);
+ QLocaleId id { language_id, 0, 0 };
if (id.withLikelySubtagsAdded() == max)
return id;
}
// language_region
- if (country_id) {
- QLocaleId id = QLocaleId::fromIds(language_id, 0, country_id);
+ if (territory_id) {
+ QLocaleId id { language_id, 0, territory_id };
if (id.withLikelySubtagsAdded() == max)
return id;
}
// language_script
if (script_id) {
- QLocaleId id = QLocaleId::fromIds(language_id, script_id, 0);
+ QLocaleId id { language_id, script_id, 0 };
if (id.withLikelySubtagsAdded() == max)
return id;
}
@@ -303,19 +410,34 @@ QByteArray QLocaleId::name(char separator) const
if (language_id == QLocale::C)
return QByteArrayLiteral("C");
- const unsigned char *lang = language_code_list + 3 * language_id;
+ const LanguageCodeEntry &language = languageCodeList[language_id];
+ AlphaCode lang;
+ qsizetype langLen;
+
+ if (language.part1.isValid()) {
+ lang = language.part1;
+ langLen = 2;
+ } else {
+ lang = language.part2B.isValid() ? language.part2B : language.part3;
+ langLen = 3;
+ }
+
const unsigned char *script =
(script_id != QLocale::AnyScript ? script_code_list + 4 * script_id : nullptr);
const unsigned char *country =
- (country_id != QLocale::AnyCountry ? country_code_list + 3 * country_id : nullptr);
- char len = (lang[2] != 0 ? 3 : 2) + (script ? 4 + 1 : 0)
- + (country ? (country[2] != 0 ? 3 : 2) + 1 : 0);
+ (territory_id != QLocale::AnyTerritory
+ ? territory_code_list + 3 * territory_id : nullptr);
+ qsizetype len = langLen + (script ? 4 + 1 : 0) + (country ? (country[2] != 0 ? 3 : 2) + 1 : 0);
QByteArray name(len, Qt::Uninitialized);
char *uc = name.data();
- *uc++ = lang[0];
- *uc++ = lang[1];
- if (lang[2] != 0)
- *uc++ = lang[2];
+
+ auto langArray = lang.decode();
+
+ *uc++ = langArray[0];
+ *uc++ = langArray[1];
+ if (langLen > 2)
+ *uc++ = langArray[2];
+
if (script) {
*uc++ = separator;
*uc++ = script[0];
@@ -340,275 +462,186 @@ QByteArray QLocalePrivate::bcp47Name(char separator) const
if (m_data->m_language_id == QLocale::C)
return QByteArrayLiteral("en");
- QLocaleId localeId = QLocaleId::fromIds(m_data->m_language_id, m_data->m_script_id,
- m_data->m_country_id);
- return localeId.withLikelySubtagsRemoved().name(separator);
+ return m_data->id().withLikelySubtagsRemoved().name(separator);
}
-/*!
- \internal
- */
-QByteArray QLocalePrivate::rawName(char separator) const
+static qsizetype findLocaleIndexById(QLocaleId localeId)
{
- QByteArrayList parts;
- if (m_data->m_language_id != QLocale::AnyLanguage)
- parts.append(languageCode().latin1());
- if (m_data->m_script_id != QLocale::AnyScript)
- parts.append(scriptCode().latin1());
- if (m_data->m_country_id != QLocale::AnyCountry)
- parts.append(countryCode().latin1());
-
- return parts.join(separator);
-}
-
-
-static const QLocaleData *findLocaleDataById(const QLocaleId &lid)
-{
- QLocaleId localeId = lid.withLikelySubtagsAdded();
-
- const uint idx = locale_index[localeId.language_id];
+ qsizetype idx = locale_index[localeId.language_id];
+ // If there are no locales for specified language (so we we've got the
+ // default language, which has no associated script or country), give up:
+ if (localeId.language_id && idx == 0)
+ return idx;
- const QLocaleData *data = locale_data + idx;
+ Q_ASSERT(localeId.acceptLanguage(locale_data[idx].m_language_id));
- if (idx == 0) // default language has no associated script or country
- return data;
+ do {
+ if (localeId.acceptScriptTerritory(locale_data[idx].id()))
+ return idx;
+ ++idx;
+ } while (localeId.acceptLanguage(locale_data[idx].m_language_id));
- Q_ASSERT(data->m_language_id == localeId.language_id);
-
- if (localeId.script_id == QLocale::AnyScript && localeId.country_id == QLocale::AnyCountry)
- return data;
-
- if (localeId.script_id == QLocale::AnyScript) {
- do {
- if (data->m_country_id == localeId.country_id)
- return data;
- ++data;
- } while (data->m_language_id && data->m_language_id == localeId.language_id);
- } else if (localeId.country_id == QLocale::AnyCountry) {
- do {
- if (data->m_script_id == localeId.script_id)
- return data;
- ++data;
- } while (data->m_language_id && data->m_language_id == localeId.language_id);
- } else {
- do {
- if (data->m_script_id == localeId.script_id
- && data->m_country_id == localeId.country_id) {
- return data;
- }
- ++data;
- } while (data->m_language_id && data->m_language_id == localeId.language_id);
- }
-
- return nullptr;
+ return -1;
}
-const QLocaleData *QLocaleData::findLocaleData(QLocale::Language language, QLocale::Script script,
- QLocale::Country country)
+qsizetype QLocaleData::findLocaleIndex(QLocaleId lid)
{
- QLocaleId localeId = QLocaleId::fromIds(language, script, country);
+ QLocaleId localeId = lid;
QLocaleId likelyId = localeId.withLikelySubtagsAdded();
-
- const uint idx = locale_index[likelyId.language_id];
+ const ushort fallback = likelyId.language_id;
// Try a straight match with the likely data:
- if (const QLocaleData *const data = findLocaleDataById(likelyId))
- return data;
- QList<QLocaleId> tried;
+ qsizetype index = findLocaleIndexById(likelyId);
+ if (index >= 0)
+ return index;
+ QVarLengthArray<QLocaleId, 6> tried;
tried.push_back(likelyId);
+#define CheckCandidate(id) do { \
+ if (!tried.contains(id)) { \
+ index = findLocaleIndexById(id); \
+ if (index >= 0) \
+ return index; \
+ tried.push_back(id); \
+ } \
+ } while (false) // end CheckCandidate
+
// No match; try again with raw data:
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
- }
+ CheckCandidate(localeId);
- // No match; try again with likely country
- if (country != QLocale::AnyCountry
- && (language != QLocale::AnyLanguage || script != QLocale::AnyScript)) {
- localeId = QLocaleId::fromIds(language, script, QLocale::AnyCountry);
+ // No match; try again with likely country for language_script
+ if (lid.territory_id && (lid.language_id || lid.script_id)) {
+ localeId.territory_id = 0;
likelyId = localeId.withLikelySubtagsAdded();
- if (!tried.contains(likelyId)) {
- if (const QLocaleData *const data = findLocaleDataById(likelyId))
- return data;
- tried.push_back(likelyId);
- }
+ CheckCandidate(likelyId);
// No match; try again with any country
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
- }
+ CheckCandidate(localeId);
}
- // No match; try again with likely script
- if (script != QLocale::AnyScript
- && (language != QLocale::AnyLanguage || country != QLocale::AnyCountry)) {
- localeId = QLocaleId::fromIds(language, QLocale::AnyScript, country);
+ // No match; try again with likely script for language_region
+ if (lid.script_id && (lid.language_id || lid.territory_id)) {
+ localeId = QLocaleId { lid.language_id, 0, lid.territory_id };
likelyId = localeId.withLikelySubtagsAdded();
- if (!tried.contains(likelyId)) {
- if (const QLocaleData *const data = findLocaleDataById(likelyId))
- return data;
- tried.push_back(likelyId);
- }
+ CheckCandidate(likelyId);
// No match; try again with any script
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
- }
+ CheckCandidate(localeId);
}
+#undef CheckCandidate
- // No match; return data at original index
- return locale_data + idx;
+ // No match; return base index for initial likely language:
+ return locale_index[fallback];
}
-uint QLocaleData::findLocaleOffset(QLocale::Language language, QLocale::Script script,
- QLocale::Country country)
+static QStringView findTag(QStringView name) noexcept
{
- return findLocaleData(language, script, country) - locale_data;
+ const std::u16string_view v(name.utf16(), size_t(name.size()));
+ const auto i = v.find_first_of(u"_-.@");
+ if (i == std::string_view::npos)
+ return name;
+ return name.first(qsizetype(i));
}
-static bool parse_locale_tag(const QString &input, int &i, QString *result,
- const QString &separators)
+static bool validTag(QStringView tag)
{
- *result = QString(8, Qt::Uninitialized); // worst case according to BCP47
- QChar *pch = result->data();
- const QChar *uc = input.data() + i;
- const int l = input.length();
- int size = 0;
- for (; i < l && size < 8; ++i, ++size) {
- if (separators.contains(*uc))
- break;
- if (! ((uc->unicode() >= 'a' && uc->unicode() <= 'z') ||
- (uc->unicode() >= 'A' && uc->unicode() <= 'Z') ||
- (uc->unicode() >= '0' && uc->unicode() <= '9')) ) // latin only
+ // Is tag is a non-empty sequence of ASCII letters and/or digits ?
+ for (QChar uc : tag) {
+ const char16_t ch = uc.unicode();
+ if (!isAsciiLetterOrNumber(ch))
return false;
- *pch++ = *uc++;
}
- result->truncate(size);
- return true;
+ return tag.size() > 0;
}
-bool qt_splitLocaleName(const QString &name, QString &lang, QString &script, QString &cntry)
+static bool isScript(QStringView tag)
{
- const int length = name.length();
-
- lang = script = cntry = QString();
+ // Every script name is 4 characters, a capital followed by three lower-case;
+ // so a search for tag in allScripts *can* only match if it's aligned.
+ static const QString allScripts =
+ QString::fromLatin1(reinterpret_cast<const char *>(script_code_list),
+ sizeof(script_code_list) - 1);
+ return tag.size() == 4 && allScripts.indexOf(tag) % 4 == 0;
+}
- const QString separators = QStringLiteral("_-.@");
+bool qt_splitLocaleName(QStringView name, QStringView *lang, QStringView *script, QStringView *land)
+{
+ // Assume each of lang, script and land is nullptr or points to an empty QStringView.
enum ParserState { NoState, LangState, ScriptState, CountryState };
ParserState state = LangState;
- for (int i = 0; i < length && state != NoState; ) {
- QString value;
- if (!parse_locale_tag(name, i, &value, separators) ||value.isEmpty())
+ while (name.size() && state != NoState) {
+ const QStringView tag = findTag(name);
+ if (!validTag(tag))
break;
- QChar sep = i < length ? name.at(i) : QChar();
+ name = name.sliced(tag.size());
+ const bool sep = name.size() > 0;
+ if (sep) // tag wasn't all that remained; there was a separator
+ name = name.sliced(1);
+
switch (state) {
case LangState:
- if (!sep.isNull() && !separators.contains(sep)) {
- state = NoState;
- break;
- }
- lang = value;
- if (i == length) {
- // just language was specified
- state = NoState;
- break;
- }
- state = ScriptState;
+ if (tag.size() != 2 && tag.size() != 3)
+ return false;
+ if (lang)
+ *lang = tag;
+ state = sep ? ScriptState : NoState;
break;
- case ScriptState: {
- QString scripts = QString::fromLatin1((const char *)script_code_list,
- sizeof(script_code_list) - 1);
- if (value.length() == 4 && scripts.indexOf(value) % 4 == 0) {
- // script name is always 4 characters
- script = value;
- state = CountryState;
- } else {
- // it wasn't a script, maybe it is a country then?
- cntry = value;
- state = NoState;
+ case ScriptState:
+ if (isScript(tag)) {
+ if (script)
+ *script = tag;
+ state = sep ? CountryState : NoState;
+ break;
}
- break;
- }
+ // It wasn't a script, assume it's a country.
+ Q_FALLTHROUGH();
case CountryState:
- cntry = value;
+ if (land)
+ *land = tag;
state = NoState;
break;
- case NoState:
- // shouldn't happen
- qWarning("QLocale: This should never happen");
+ case NoState: // Precluded by loop condition !
+ Q_UNREACHABLE();
break;
}
- ++i;
}
- return lang.length() == 2 || lang.length() == 3;
+ return state != LangState;
}
-void QLocalePrivate::getLangAndCountry(const QString &name, QLocale::Language &lang,
- QLocale::Script &script, QLocale::Country &cntry)
+QLocaleId QLocaleId::fromName(QStringView name)
{
- lang = QLocale::C;
- script = QLocale::AnyScript;
- cntry = QLocale::AnyCountry;
-
- QString lang_code;
- QString script_code;
- QString cntry_code;
- if (!qt_splitLocaleName(name, lang_code, script_code, cntry_code))
- return;
+ QStringView lang;
+ QStringView script;
+ QStringView land;
+ if (!qt_splitLocaleName(name, &lang, &script, &land))
+ return { QLocale::C, 0, 0 };
- lang = QLocalePrivate::codeToLanguage(lang_code);
- if (lang == QLocale::C)
- return;
- script = QLocalePrivate::codeToScript(script_code);
- cntry = QLocalePrivate::codeToCountry(cntry_code);
+ QLocale::Language langId = QLocalePrivate::codeToLanguage(lang);
+ if (langId == QLocale::AnyLanguage)
+ return { QLocale::C, 0, 0 };
+ return { langId, QLocalePrivate::codeToScript(script), QLocalePrivate::codeToTerritory(land) };
}
-static const QLocaleData *findLocaleData(const QString &name)
+QString qt_readEscapedFormatString(QStringView format, qsizetype *idx)
{
- QLocale::Language lang;
- QLocale::Script script;
- QLocale::Country cntry;
- QLocalePrivate::getLangAndCountry(name, lang, script, cntry);
+ qsizetype &i = *idx;
- return QLocaleData::findLocaleData(lang, script, cntry);
-}
-
-static uint findLocaleOffset(const QString &name)
-{
- QLocale::Language lang;
- QLocale::Script script;
- QLocale::Country cntry;
- QLocalePrivate::getLangAndCountry(name, lang, script, cntry);
-
- return QLocaleData::findLocaleOffset(lang, script, cntry);
-}
-
-QString qt_readEscapedFormatString(QStringView format, int *idx)
-{
- int &i = *idx;
-
- Q_ASSERT(format.at(i) == QLatin1Char('\''));
+ Q_ASSERT(format.at(i) == u'\'');
++i;
if (i == format.size())
return QString();
- if (format.at(i).unicode() == '\'') { // "''" outside of a quoted stirng
+ if (format.at(i).unicode() == '\'') { // "''" outside of a quoted string
++i;
- return QLatin1String("'");
+ return "'"_L1;
}
QString result;
while (i < format.size()) {
if (format.at(i).unicode() == '\'') {
- if (format.mid(i + 1).startsWith(QLatin1Char('\''))) {
+ if (format.mid(i + 1).startsWith(u'\'')) {
// "''" inside a quoted string
- result.append(QLatin1Char('\''));
+ result.append(u'\'');
i += 2;
} else {
break;
@@ -639,7 +672,7 @@ QString qt_readEscapedFormatString(QStringView format, int *idx)
qt_repeatCount(u"aab"); // == 2
\endcode
*/
-int qt_repeatCount(QStringView s)
+qsizetype qt_repeatCount(QStringView s)
{
if (s.isEmpty())
return 0;
@@ -647,60 +680,66 @@ int qt_repeatCount(QStringView s)
qsizetype j = 1;
while (j < s.size() && s.at(j) == c)
++j;
- return int(j);
+ return j;
}
-static const QLocaleData *default_data = nullptr;
+Q_CONSTINIT static const QLocaleData *default_data = nullptr;
+Q_CONSTINIT QBasicAtomicInt QLocalePrivate::s_generation = Q_BASIC_ATOMIC_INITIALIZER(0);
-static const QLocaleData *const c_data = locale_data;
static QLocalePrivate *c_private()
{
- static QLocalePrivate c_locale{
- c_data, Q_BASIC_ATOMIC_INITIALIZER(1), 0, QLocale::OmitGroupSeparator };
+ static QLocalePrivate c_locale(locale_data, 0, QLocale::OmitGroupSeparator, 1);
return &c_locale;
}
-static const QLocaleData *systemData();
-Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer<QLocalePrivate>, systemLocalePrivate,
- (QLocalePrivate::create(systemData())))
-
#ifndef QT_NO_SYSTEMLOCALE
/******************************************************************************
** Default system locale behavior
*/
/*!
- Constructs a QSystemLocale object.
-
- The constructor will automatically install this object as the system locale,
- if there's not one active. It also resets the flag that'll prompt
- QLocale::system() to re-initialize its data, so that instantiating a
- QSystemLocale transiently (doesn't install the transient as system locale if
- there was one already and) triggers an update to the system locale's data.
+ \internal
+ Constructs a QSystemLocale object.
+
+ The constructor will automatically install this object as the system locale.
+ It and the destructor maintain a stack of system locales, with the
+ most-recently-created instance (that hasn't yet been deleted) used as the
+ system locale. This is only intended as a way to let a platform plugin
+ install its own system locale, overriding what might otherwise be provided
+ for its class of platform (as Android does, differing from Linux), and to
+ let tests transiently override the system or plugin-supplied one. As such,
+ there should not be diverse threads creating and destroying QSystemLocale
+ instances concurrently, so no attempt is made at thread-safety in managing
+ the stack.
+
+ This constructor also resets the flag that'll prompt QLocale::system() to
+ re-initialize its data, so that instantiating a QSystemLocale (even
+ transiently) triggers a refresh of the system locale's data. This is
+ exploited by some test code.
*/
-QSystemLocale::QSystemLocale()
+QSystemLocale::QSystemLocale() : next(_systemLocale)
{
- if (!_systemLocale)
- _systemLocale = this;
+ _systemLocale = this;
- globalLocaleData.m_language_id = 0;
+ systemLocaleData.m_language_id = 0;
}
/*!
\internal
-*/
-QSystemLocale::QSystemLocale(bool)
-{ }
-
-/*!
- Deletes the object.
+ Deletes the object.
*/
QSystemLocale::~QSystemLocale()
{
if (_systemLocale == this) {
- _systemLocale = nullptr;
+ _systemLocale = next;
- globalLocaleData.m_language_id = 0;
+ // Change to system locale => force refresh.
+ systemLocaleData.m_language_id = 0;
+ } else {
+ for (QSystemLocale *p = _systemLocale; p; p = p->next) {
+ if (p->next == this)
+ p->next = next;
+ }
}
}
@@ -708,7 +747,12 @@ static const QSystemLocale *systemLocale()
{
if (_systemLocale)
return _systemLocale;
- return QSystemLocale_globalSystemLocale();
+
+ // As this is only ever instantiated with _systemLocale null, it is
+ // necessarily the ->next-most in any chain that may subsequently develop;
+ // and it won't be destructed until exit()-time.
+ static QSystemLocale globalInstance;
+ return &globalInstance;
}
static void updateSystemPrivate()
@@ -721,46 +765,67 @@ static void updateSystemPrivate()
// tell the object that the system locale has changed.
sys_locale->query(QSystemLocale::LocaleChanged);
- // Populate global with fallback as basis:
- globalLocaleData = *sys_locale->fallbackUiLocaleData();
+ // Populate system locale with fallback as basis
+ systemLocaleData = locale_data[sys_locale->fallbackLocaleIndex()];
QVariant res = sys_locale->query(QSystemLocale::LanguageId);
if (!res.isNull()) {
- globalLocaleData.m_language_id = res.toInt();
- globalLocaleData.m_script_id = QLocale::AnyScript; // default for compatibility
+ systemLocaleData.m_language_id = res.toInt();
+ systemLocaleData.m_script_id = QLocale::AnyScript; // default for compatibility
}
- res = sys_locale->query(QSystemLocale::CountryId);
+ res = sys_locale->query(QSystemLocale::TerritoryId);
if (!res.isNull()) {
- globalLocaleData.m_country_id = res.toInt();
- globalLocaleData.m_script_id = QLocale::AnyScript; // default for compatibility
+ systemLocaleData.m_territory_id = res.toInt();
+ systemLocaleData.m_script_id = QLocale::AnyScript; // default for compatibility
}
res = sys_locale->query(QSystemLocale::ScriptId);
if (!res.isNull())
- globalLocaleData.m_script_id = res.toInt();
+ systemLocaleData.m_script_id = res.toInt();
// Should we replace Any values based on likely sub-tags ?
+
+ // If system locale is default locale, update the default collator's generation:
+ if (default_data == &systemLocaleData)
+ QLocalePrivate::s_generation.fetchAndAddRelaxed(1);
}
#endif // !QT_NO_SYSTEMLOCALE
-static const QLocaleData *systemData()
+static const QLocaleData *systemData(qsizetype *sysIndex = nullptr)
{
#ifndef QT_NO_SYSTEMLOCALE
/*
Copy over the information from the fallback locale and modify.
- This modifies (cross-thread) global state, so take care to only call it in
- one thread.
+ If sysIndex is passed, it should be the m_index of the system locale's
+ QLocalePrivate, which we'll update if it needs it.
+
+ This modifies (cross-thread) global state, so is mutex-protected.
*/
{
- static QBasicMutex systemDataMutex;
+ Q_CONSTINIT static QLocaleId sysId;
+ bool updated = false;
+
+ Q_CONSTINIT static QBasicMutex systemDataMutex;
systemDataMutex.lock();
- if (globalLocaleData.m_language_id == 0)
+ if (systemLocaleData.m_language_id == 0) {
updateSystemPrivate();
+ updated = true;
+ }
+ // Initialization of system private has *sysIndex == -1 to hit this.
+ if (sysIndex && (updated || *sysIndex < 0)) {
+ const QLocaleId nowId = systemLocaleData.id();
+ if (sysId != nowId || *sysIndex < 0) {
+ // This look-up may be expensive:
+ *sysIndex = QLocaleData::findLocaleIndex(nowId);
+ sysId = nowId;
+ }
+ }
systemDataMutex.unlock();
}
- return &globalLocaleData;
+ return &systemLocaleData;
#else
+ Q_UNUSED(sysIndex);
return locale_data;
#endif
}
@@ -772,10 +837,26 @@ static const QLocaleData *defaultData()
return default_data;
}
+static qsizetype defaultIndex()
+{
+ const QLocaleData *const data = defaultData();
+#ifndef QT_NO_SYSTEMLOCALE
+ if (data == &systemLocaleData) {
+ // Work out a suitable index matching the system data, for use when
+ // accessing calendar data, when not fetched from system.
+ return QLocaleData::findLocaleIndex(data->id());
+ }
+#endif
+
+ using QtPrivate::q_points_into_range;
+ Q_ASSERT(q_points_into_range(data, locale_data));
+ return data - locale_data;
+}
+
const QLocaleData *QLocaleData::c()
{
Q_ASSERT(locale_index[QLocale::C] == 0);
- return c_data;
+ return locale_data;
}
#ifndef QT_NO_DATASTREAM
@@ -794,67 +875,79 @@ QDataStream &operator>>(QDataStream &ds, QLocale &l)
}
#endif // QT_NO_DATASTREAM
+static constexpr qsizetype locale_data_size = q20::ssize(locale_data) - 1; // trailing guard
-static const int locale_data_size = sizeof(locale_data)/sizeof(QLocaleData) - 1;
-
-Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate,
- (QLocalePrivate::create(defaultData())))
+Q_GLOBAL_STATIC(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate,
+ new QLocalePrivate(defaultData(), defaultIndex()))
-static QLocalePrivate *localePrivateByName(const QString &name)
+static QLocalePrivate *localePrivateByName(QStringView name)
{
- if (name == QLatin1String("C"))
+ if (name == u"C")
return c_private();
- // TODO: Remove this version, and use offset everywhere
- const QLocaleData *data = findLocaleData(name);
- return QLocalePrivate::create(data, findLocaleOffset(name),
- data->m_language_id == QLocale::C
- ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions);
+ const qsizetype index = QLocaleData::findLocaleIndex(QLocaleId::fromName(name));
+ Q_ASSERT(index >= 0 && index < locale_data_size);
+ return new QLocalePrivate(locale_data + index, index,
+ locale_data[index].m_language_id == QLocale::C
+ ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions);
}
static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script,
- QLocale::Country country)
+ QLocale::Territory territory)
{
if (language == QLocale::C)
return c_private();
- // TODO: Remove pointer, use index instead
- const QLocaleData *data = QLocaleData::findLocaleData(language, script, country);
- const uint offset = QLocaleData::findLocaleOffset(language, script, country);
+ qsizetype index = QLocaleData::findLocaleIndex(QLocaleId { language, script, territory });
+ Q_ASSERT(index >= 0 && index < locale_data_size);
+ const QLocaleData *data = locale_data + index;
QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions;
- // If not found, should default to system
+ // If not found, should use default locale:
if (data->m_language_id == QLocale::C) {
if (defaultLocalePrivate.exists())
numberOptions = defaultLocalePrivate->data()->m_numberOptions;
data = defaultData();
+ index = defaultIndex();
}
- return QLocalePrivate::create(data, offset, numberOptions);
+ return new QLocalePrivate(data, index, numberOptions);
}
-QString QLocaleData::decimalPoint() const
+static std::optional<QString>
+systemLocaleString(const QLocaleData *that, QSystemLocale::QueryType type)
{
#ifndef QT_NO_SYSTEMLOCALE
- if (this == systemData()) {
- auto res = systemLocale()->query(QSystemLocale::DecimalPoint).toString();
- if (!res.isEmpty())
- return res;
- }
+ if (that != &systemLocaleData)
+ return std::nullopt;
+
+ QVariant v = systemLocale()->query(type);
+ if (v.metaType() != QMetaType::fromType<QString>())
+ return std::nullopt;
+
+ return v.toString();
+#else
+ Q_UNUSED(that)
+ Q_UNUSED(type)
+ return std::nullopt;
#endif
- return decimalSeparator().getData(single_character_data);
+}
+
+static QString localeString(const QLocaleData *that, QSystemLocale::QueryType type,
+ QLocaleData::DataRange range)
+{
+ if (auto opt = systemLocaleString(that, type))
+ return *opt;
+ return range.getData(single_character_data);
+}
+
+QString QLocaleData::decimalPoint() const
+{
+ return localeString(this, QSystemLocale::DecimalPoint, decimalSeparator());
}
QString QLocaleData::groupSeparator() const
{
- // Empty => don't do grouping
-#ifndef QT_NO_SYSTEMLOCALE
- if (this == systemData()) {
- QVariant res = systemLocale()->query(QSystemLocale::GroupSeparator);
- if (!res.isNull())
- return res.toString();
- }
-#endif
- return groupDelim().getData(single_character_data);
+ return localeString(this, QSystemLocale::GroupSeparator, groupDelim());
}
QString QLocaleData::percentSign() const
@@ -869,20 +962,13 @@ QString QLocaleData::listSeparator() const
QString QLocaleData::zeroDigit() const
{
-#ifndef QT_NO_SYSTEMLOCALE
- if (this == systemData()) {
- auto res = systemLocale()->query(QSystemLocale::ZeroDigit).toString();
- if (!res.isEmpty())
- return res;
- }
-#endif
- return zero().getData(single_character_data);
+ return localeString(this, QSystemLocale::ZeroDigit, zero());
}
char32_t QLocaleData::zeroUcs() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (this == systemData()) {
+ if (this == &systemLocaleData) {
const auto text = systemLocale()->query(QSystemLocale::ZeroDigit).toString();
if (!text.isEmpty()) {
if (text.size() == 1 && !text.at(0).isSurrogate())
@@ -897,26 +983,12 @@ char32_t QLocaleData::zeroUcs() const
QString QLocaleData::negativeSign() const
{
-#ifndef QT_NO_SYSTEMLOCALE
- if (this == systemData()) {
- auto res = systemLocale()->query(QSystemLocale::NegativeSign).toString();
- if (!res.isEmpty())
- return res;
- }
-#endif
- return minus().getData(single_character_data);
+ return localeString(this, QSystemLocale::NegativeSign, minus());
}
QString QLocaleData::positiveSign() const
{
-#ifndef QT_NO_SYSTEMLOCALE
- if (this == systemData()) {
- auto res = systemLocale()->query(QSystemLocale::PositiveSign).toString();
- if (!res.isEmpty())
- return res;
- }
-#endif
- return plus().getData(single_character_data);
+ return localeString(this, QSystemLocale::PositiveSign, plus());
}
QString QLocaleData::exponentSeparator() const
@@ -931,108 +1003,115 @@ QLocale::QLocale(QLocalePrivate &dd)
: d(&dd)
{}
+/*!
+ \variable QLocale::DefaultTwoDigitBaseYear
+ \since 6.7
+
+ \brief The default start year of the century within which a format taking
+ a two-digit year will select. The value of the constant is \c {1900}.
+
+ Some locales use, particularly for ShortFormat, only the last two digits of
+ the year. Proir to 6.7 the year 1900 was always used as a base year for
+ such cases. Now various QLocale and QDate functions have the overloads that
+ allow callers to specify the base year, and this constant is used as its
+ default value.
+
+ \sa toDate(), toDateTime(), QDate::fromString(), QDateTime::fromString()
+*/
/*!
- Constructs a QLocale object with the specified \a name,
- which has the format
- "language[_script][_country][.codeset][@modifier]" or "C", where:
+ \since 6.3
- \list
- \li language is a lowercase, two-letter, ISO 639 language code (also some
- three-letter codes),
- \li script is a titlecase, four-letter, ISO 15924 script code,
- \li country is an uppercase, two-letter, ISO 3166 country code
- (also "419" as defined by United Nations),
- \li and codeset and modifier are ignored.
- \endlist
+ Constructs a QLocale object with the specified \a name.
- The separator can be either underscore or a minus sign.
+ The name has the format "language[_script][_territory][.codeset][@modifier]"
+ or "C", where:
- If the string violates the locale format, or language is not
- a valid ISO 639 code, the "C" locale is used instead. If country
- is not present, or is not a valid ISO 3166 code, the most
- appropriate country is chosen for the specified language.
+ \list
+ \li language is a lowercase, two-letter, ISO 639 language code (some
+ three-letter codes are also recognized),
+ \li script is a capitalized, four-letter, ISO 15924 script code,
+ \li territory is an uppercase, two-letter, ISO 3166 territory code
+ (some numeric codes are also recognized), and
+ \li codeset and modifier are ignored.
+ \endlist
- The language, script and country codes are converted to their respective
- \c Language, \c Script and \c Country enums. After this conversion is
- performed, the constructor behaves exactly like QLocale(Country, Script,
- Language).
+ The separator can be either underscore \c{'_'} (U+005F, "low line") or a
+ dash \c{'-'} (U+002D, "hyphen-minus"). If QLocale has no data for the
+ specified combination of language, script, and territory, then it uses the
+ most suitable match it can find instead. If the string violates the locale
+ format, or no suitable data can be found for the specified keys, the "C"
+ locale is used instead.
- This constructor is much slower than QLocale(Country, Script, Language).
+ This constructor is much slower than QLocale(Language, Script, Territory) or
+ QLocale(Language, Territory).
- \sa bcp47Name()
+ \sa bcp47Name(), {Matching combinations of language, script and territory}
*/
-
-QLocale::QLocale(const QString &name)
+QLocale::QLocale(QStringView name)
: d(localePrivateByName(name))
{
}
/*!
- Constructs a QLocale object initialized with the default locale. If
- no default locale was set using setDefault(), this locale will
- be the same as the one returned by system().
+ \fn QLocale::QLocale(const QString &name)
+ \overload
+*/
+
+/*!
+ Constructs a QLocale object initialized with the default locale.
+
+ If no default locale was set using setDefault(), this locale will be the
+ same as the one returned by system().
- \sa setDefault()
+ \sa setDefault(), system()
*/
QLocale::QLocale()
: d(*defaultLocalePrivate)
{
- // Make sure system data is up to date
+ // Make sure system data is up to date:
systemData();
}
/*!
- Constructs a QLocale object with the specified \a language and \a
- country.
+ Constructs a QLocale object for the specified \a language and \a territory.
- \list
- \li If the language/country pair is found in the database, it is used.
- \li If the language is found but the country is not, or if the country
- is \c AnyCountry, the language is used with the most
- appropriate available country (for example, Germany for German),
- \li If neither the language nor the country are found, QLocale
- defaults to the default locale (see setDefault()).
- \endlist
-
- The language and country that are actually used can be queried
- using language() and country().
+ If there is more than one script in use for this combination, a likely
+ script will be selected. If QLocale has no data for the specified \a
+ language, the default locale is used. If QLocale has no data for the
+ specified combination of \a language and \a territory, an alternative
+ territory may be used instead.
- \sa setDefault(), language(), country()
+ \sa setDefault(), {Matching combinations of language, script and territory}
*/
-QLocale::QLocale(Language language, Country country)
- : d(findLocalePrivate(language, QLocale::AnyScript, country))
+QLocale::QLocale(Language language, Territory territory)
+ : d(findLocalePrivate(language, AnyScript, territory))
{
}
/*!
\since 4.8
- Constructs a QLocale object with the specified \a language, \a script and
- \a country.
+ Constructs a QLocale object for the specified \a language, \a script and \a
+ territory.
+
+ If QLocale does not have data for the given combination, it will find data
+ for as good a match as it can. It falls back on the default locale if
\list
- \li If the language/script/country is found in the database, it is used.
- \li If both \a script is AnyScript and \a country is AnyCountry, the
- language is used with the most appropriate available script and country
- (for example, Germany for German),
- \li If either \a script is AnyScript or \a country is AnyCountry, the
- language is used with the first locale that matches the given \a script
- and \a country.
- \li If neither the language nor the country are found, QLocale
- defaults to the default locale (see setDefault()).
+ \li \a language is \c AnyLanguage and no language can be inferred from \a
+ script and \a territory
+ \li QLocale has no data for the language, either given as \a language or
+ inferred as above.
\endlist
- The language, script and country that are actually used can be queried
- using language(), script() and country().
-
- \sa setDefault(), language(), script(), country()
+ \sa setDefault(), {Matching combinations of language, script and territory}
*/
-QLocale::QLocale(Language language, Script script, Country country)
- : d(findLocalePrivate(language, script, country))
+QLocale::QLocale(Language language, Script script, Territory territory)
+ : d(findLocalePrivate(language, script, territory))
{
}
@@ -1040,10 +1119,7 @@ QLocale::QLocale(Language language, Script script, Country country)
Constructs a QLocale object as a copy of \a other.
*/
-QLocale::QLocale(const QLocale &other)
-{
- d = other.d;
-}
+QLocale::QLocale(const QLocale &other) noexcept = default;
/*!
Destructor
@@ -1058,20 +1134,16 @@ QLocale::~QLocale()
to this QLocale object.
*/
-QLocale &QLocale::operator=(const QLocale &other)
-{
- d = other.d;
- return *this;
-}
+QLocale &QLocale::operator=(const QLocale &other) noexcept = default;
-bool QLocale::operator==(const QLocale &other) const
-{
- return d->m_data == other.d->m_data && d->m_numberOptions == other.d->m_numberOptions;
-}
+/*!
+ \internal
+ Equality comparison.
+*/
-bool QLocale::operator!=(const QLocale &other) const
+bool QLocale::equals(const QLocale &other) const
{
- return d->m_data != other.d->m_data || d->m_numberOptions != other.d->m_numberOptions;
+ return d->m_data == other.d->m_data && d->m_numberOptions == other.d->m_numberOptions;
}
/*!
@@ -1100,7 +1172,7 @@ size_t qHash(const QLocale &key, size_t seed) noexcept
Sets the \a options related to number conversions for this
QLocale instance.
- \sa numberOptions()
+ \sa numberOptions(), FloatingPointPrecisionOption
*/
void QLocale::setNumberOptions(NumberOptions options)
{
@@ -1116,7 +1188,7 @@ void QLocale::setNumberOptions(NumberOptions options)
By default, no options are set for the standard locales, except
for the "C" locale, which has OmitGroupSeparator set by default.
- \sa setNumberOptions(), toString(), groupSeparator()
+ \sa setNumberOptions(), toString(), groupSeparator(), FloatingPointPrecisionOption
*/
QLocale::NumberOptions QLocale::numberOptions() const
{
@@ -1140,12 +1212,12 @@ QLocale::NumberOptions QLocale::numberOptions() const
QString QLocale::quoteString(QStringView str, QuotationStyle style) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res;
- if (style == QLocale::AlternateQuotation)
+ if (style == AlternateQuotation)
res = systemLocale()->query(QSystemLocale::StringToAlternateQuotation,
QVariant::fromValue(str));
- if (res.isNull() || style == QLocale::StandardQuotation)
+ if (res.isNull() || style == StandardQuotation)
res = systemLocale()->query(QSystemLocale::StringToStandardQuotation,
QVariant::fromValue(str));
if (!res.isNull())
@@ -1154,7 +1226,7 @@ QString QLocale::quoteString(QStringView str, QuotationStyle style) const
#endif
QLocaleData::DataRange start, end;
- if (style == QLocale::StandardQuotation) {
+ if (style == StandardQuotation) {
start = d->m_data->quoteStart();
end = d->m_data->quoteEnd();
} else {
@@ -1175,7 +1247,7 @@ QString QLocale::createSeparatedList(const QStringList &list) const
{
// May be empty if list is empty or sole entry is empty.
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res =
systemLocale()->query(QSystemLocale::ListToSeparatedString, QVariant::fromValue(list));
@@ -1184,7 +1256,7 @@ QString QLocale::createSeparatedList(const QStringList &list) const
}
#endif
- const int size = list.size();
+ const qsizetype size = list.size();
if (size < 1)
return QString();
@@ -1199,7 +1271,7 @@ QString QLocale::createSeparatedList(const QStringList &list) const
QStringView formatMid = d->m_data->midListPattern().viewData(list_pattern_part_data);
QStringView formatEnd = d->m_data->endListPattern().viewData(list_pattern_part_data);
QString result = formatStart.arg(list.at(0), list.at(1));
- for (int i = 2; i < size - 1; ++i)
+ for (qsizetype i = 2; i < size - 1; ++i)
result = formatMid.arg(result, list.at(i));
result = formatEnd.arg(result, list.at(size - 1));
return result;
@@ -1234,12 +1306,13 @@ void QLocale::setDefault(const QLocale &locale)
// update the cached private
*defaultLocalePrivate = locale.d;
+ QLocalePrivate::s_generation.fetchAndAddRelaxed(1);
}
/*!
Returns the language of this locale.
- \sa script(), country(), languageToString(), bcp47Name()
+ \sa script(), territory(), languageToString(), bcp47Name()
*/
QLocale::Language QLocale::language() const
{
@@ -1251,7 +1324,7 @@ QLocale::Language QLocale::language() const
Returns the script of this locale.
- \sa language(), country(), languageToString(), scriptToString(), bcp47Name()
+ \sa language(), territory(), languageToString(), scriptToString(), bcp47Name()
*/
QLocale::Script QLocale::script() const
{
@@ -1259,61 +1332,120 @@ QLocale::Script QLocale::script() const
}
/*!
- Returns the country of this locale.
+ \since 6.2
+
+ Returns the territory of this locale.
- \sa language(), script(), countryToString(), bcp47Name()
+ \sa language(), script(), territoryToString(), bcp47Name()
*/
-QLocale::Country QLocale::country() const
+QLocale::Territory QLocale::territory() const
{
- return Country(d->countryId());
+ return Territory(d->territoryId());
}
+#if QT_DEPRECATED_SINCE(6, 6)
/*!
- Returns the language and country of this locale as a
- string of the form "language_country", where
- language is a lowercase, two-letter ISO 639 language code,
- and country is an uppercase, two- or three-letter ISO 3166 country code.
+ \deprecated [6.6] Use \l territory() instead.
- Note that even if QLocale object was constructed with an explicit script,
- name() will not contain it for compatibility reasons. Use bcp47Name() instead
- if you need a full locale name.
+ Returns the territory of this locale.
- \sa QLocale(), language(), script(), country(), bcp47Name()
+ \sa language(), script(), territoryToString(), bcp47Name()
*/
-
-QString QLocale::name() const
+QLocale::Country QLocale::country() const
{
- Language l = language();
- if (l == C)
- return d->languageCode();
-
- Country c = country();
- if (c == AnyCountry)
- return d->languageCode();
-
- return d->languageCode() + QLatin1Char('_') + d->countryCode();
+ return territory();
}
+#endif
-static qlonglong toIntegral_helper(const QLocaleData *d, QStringView str, bool *ok,
- QLocale::NumberOptions mode, qlonglong)
+/*!
+ \since 6.7
+ \enum QLocale::TagSeparator
+
+ Indicate how to combine the parts that make up a locale identifier.
+
+ A locale identifier may be made up of several tags, indicating language,
+ script and territory (plus, potentially, other details), joined together to
+ form the identifier. Various standards and conventional forms use either a
+ dash (the Unicode HYPHEN-MINUS, U+002D) or an underscore (LOW LINE, U+005F).
+ Different clients of QLocale may thus need one or the other.
+
+ \value Dash Use \c{'-'}, the dash or hyphen character.
+ \value Underscore Use \c{'_'}, the underscore character.
+
+ \note Although dash and underscore are the only separators used in public
+ standards (as at 2023), it is possible to cast any \l
+ {https://en.cppreference.com/w/cpp/language/ascii} {ASCII} character to this
+ type if a non-standard ASCII separator is needed. Casting a non-ASCII
+ character (with decimal value above 127) is not supported: such values are
+ reserved for future use as enum members if some public standard ever uses a
+ non-ASCII separator. It is, of course, possible to use QString::replace() to
+ replace the separator used by a function taking a parameter of this type
+ with an arbitrary Unicode character or string.
+*/
+
+Q_DECL_COLD_FUNCTION static void badSeparatorWarning(const char *method, char sep)
{
- return d->stringToLongLong(str, 10, ok, mode);
+ qWarning("QLocale::%s(): Using non-ASCII separator '%c' (%02x) is unsupported",
+ method, sep, uint(uchar(sep)));
}
-static qulonglong toIntegral_helper(const QLocaleData *d, QStringView str, bool *ok,
- QLocale::NumberOptions mode, qulonglong)
+/*!
+ \brief The short name of this locale.
+
+ Returns the language and territory of this locale as a string of the form
+ "language_territory", where language is a lowercase, two-letter ISO 639
+ language code, and territory is an uppercase, two- or three-letter ISO 3166
+ territory code. If the locale has no specified territory, only the language
+ name is returned. Since Qt 6.7 an optional \a separator parameter can be
+ supplied to override the default underscore character separating the two
+ tags.
+
+ Even if the QLocale object was constructed with an explicit script, name()
+ will not contain it for compatibility reasons. Use \l bcp47Name() instead if
+ you need a full locale name, or construct the string you want to identify a
+ locale by from those returned by passing its \l language() to \l
+ languageToCode() and similar for the script and territory.
+
+ \sa QLocale(), language(), script(), territory(), bcp47Name(), uiLanguages()
+*/
+
+QString QLocale::name(TagSeparator separator) const
{
- return d->stringToUnsLongLong(str, 10, ok, mode);
+ const char sep = char(separator);
+ if (uchar(sep) > 0x7f) {
+ badSeparatorWarning("name", sep);
+ return {};
+ }
+ const auto code = d->languageCode();
+ QLatin1StringView view{code.data()};
+
+ Language l = language();
+ if (l == C)
+ return view;
+
+ Territory c = territory();
+ if (c == AnyTerritory)
+ return view;
+
+ return view + QLatin1Char(sep) + d->territoryCode();
}
template <typename T> static inline
T toIntegral_helper(const QLocalePrivate *d, QStringView str, bool *ok)
{
- using Int64 =
- typename std::conditional<std::is_unsigned<T>::value, qulonglong, qlonglong>::type;
+ constexpr bool isUnsigned = std::is_unsigned_v<T>;
+ using Int64 = typename std::conditional_t<isUnsigned, quint64, qint64>;
- // we select the right overload by the last, unused parameter
- Int64 val = toIntegral_helper(d->m_data, str, ok, d->m_numberOptions, Int64());
+ QSimpleParsedNumber<Int64> r{};
+ if constexpr (isUnsigned)
+ r = d->m_data->stringToUnsLongLong(str, 10, d->m_numberOptions);
+ else
+ r = d->m_data->stringToLongLong(str, 10, d->m_numberOptions);
+
+ if (ok)
+ *ok = r.ok();
+
+ Int64 val = r.result;
if (T(val) != val) {
if (ok != nullptr)
*ok = false;
@@ -1326,64 +1458,229 @@ T toIntegral_helper(const QLocalePrivate *d, QStringView str, bool *ok)
/*!
\since 4.8
- Returns the dash-separated language, script and country (and possibly other
- BCP47 fields) of this locale as a string.
+ \brief Returns the BCP47 field names joined with dashes.
+
+ This combines as many of language, script and territory (and possibly other
+ BCP47 fields) for this locale as are needed to uniquely specify it. Note
+ that fields may be omitted if the Unicode consortium's \l {Matching
+ combinations of language, script and territory}{Likely Subtag Rules} imply
+ the omitted fields when given those retained. See \l name() for how to
+ construct a string from individual fields, if some other format is needed.
+
+ Unlike uiLanguages(), the value returned by bcp47Name() represents the
+ locale name of the QLocale data; this need not be the language the
+ user-interface should be in.
+
+ This function tries to conform the locale name to the IETF Best Common
+ Practice 47, defined by RFC 5646. Since Qt 6.7, it supports an optional \a
+ separator parameter which can be used to override the BCP47-specified use of
+ a hyphen to separate the tags. For use in IETF-defined protocols, however,
+ the default, QLocale::TagSeparator::Dash, should be retained.
+
+ \sa name(), language(), territory(), script(), uiLanguages()
+*/
+QString QLocale::bcp47Name(TagSeparator separator) const
+{
+ const char sep = char(separator);
+ if (uchar(sep) > 0x7f) {
+ badSeparatorWarning("bcp47Name", sep);
+ return {};
+ }
+ return QString::fromLatin1(d->bcp47Name(sep));
+}
+
+/*!
+ Returns the two- or three-letter language code for \a language, as defined
+ in the ISO 639 standards.
+
+ If specified, \a codeTypes selects which set of codes to consider. The first
+ code from the set that is defined for \a language is returned. Otherwise,
+ all ISO-639 codes are considered. The codes are considered in the following
+ order: \c ISO639Part1, \c ISO639Part2B, \c ISO639Part2T, \c ISO639Part3.
+ \c LegacyLanguageCode is ignored by this function.
+
+ \note For \c{QLocale::C} the function returns \c{"C"}.
+ For \c QLocale::AnyLanguage an empty string is returned.
+ If the language has no code in any selected code set, an empty string
+ is returned.
+
+ \since 6.3
+ \sa codeToLanguage(), language(), name(), bcp47Name(), territoryToCode(), scriptToCode()
+*/
+QString QLocale::languageToCode(Language language, LanguageCodeTypes codeTypes)
+{
+ const auto code = QLocalePrivate::languageToCode(language, codeTypes);
+ return QLatin1StringView{code.data()};
+}
+
+/*!
+ Returns the QLocale::Language enum corresponding to the two- or three-letter
+ \a languageCode, as defined in the ISO 639 standards.
+
+ If specified, \a codeTypes selects which set of codes to consider for
+ conversion. By default all codes known to Qt are considered. The codes are
+ matched in the following order: \c ISO639Part1, \c ISO639Part2B,
+ \c ISO639Part2T, \c ISO639Part3, \c LegacyLanguageCode.
+
+ If the code is invalid or not known \c QLocale::AnyLanguage is returned.
+
+ \since 6.3
+ \sa languageToCode(), codeToTerritory(), codeToScript()
+*/
+QLocale::Language QLocale::codeToLanguage(QStringView languageCode,
+ LanguageCodeTypes codeTypes) noexcept
+{
+ return QLocalePrivate::codeToLanguage(languageCode, codeTypes);
+}
+
+/*!
+ \since 6.2
+
+ Returns the two-letter territory code for \a territory, as defined
+ in the ISO 3166 standard.
+
+ \note For \c{QLocale::AnyTerritory} an empty string is returned.
+
+ \sa codeToTerritory(), territory(), name(), bcp47Name(), languageToCode(), scriptToCode()
+*/
+QString QLocale::territoryToCode(QLocale::Territory territory)
+{
+ return QLocalePrivate::territoryToCode(territory);
+}
+
+/*!
+ \since 6.2
+
+ Returns the QLocale::Territory enum corresponding to the two-letter or
+ three-digit \a territoryCode, as defined in the ISO 3166 standard.
+
+ If the code is invalid or not known QLocale::AnyTerritory is returned.
+
+ \sa territoryToCode(), codeToLanguage(), codeToScript()
+*/
+QLocale::Territory QLocale::codeToTerritory(QStringView territoryCode) noexcept
+{
+ return QLocalePrivate::codeToTerritory(territoryCode);
+}
+
+#if QT_DEPRECATED_SINCE(6, 6)
+/*!
+ \deprecated [6.6] Use \l territoryToCode() instead.
+
+ Returns the two-letter territory code for \a country, as defined
+ in the ISO 3166 standard.
+
+ \note For \c{QLocale::AnyTerritory} or \c{QLocale::AnyCountry} an empty string is returned.
+
+ \sa codeToTerritory(), territory(), name(), bcp47Name(), languageToCode(), scriptToCode()
+*/
+QString QLocale::countryToCode(Country country)
+{
+ return territoryToCode(country);
+}
+
+/*!
+ Returns the QLocale::Territory enum corresponding to the two-letter or
+ three-digit \a countryCode, as defined in the ISO 3166 standard.
+
+ If the code is invalid or not known QLocale::AnyTerritory is returned.
+
+ \deprecated [6.6] Use codeToTerritory(QStringView) instead.
+ \since 6.1
+ \sa territoryToCode(), codeToLanguage(), codeToScript()
+*/
+QLocale::Country QLocale::codeToCountry(QStringView countryCode) noexcept
+{
+ return QLocalePrivate::codeToTerritory(countryCode);
+}
+#endif
+
+/*!
+ Returns the four-letter script code for \a script, as defined in the
+ ISO 15924 standard.
- Unlike the uiLanguages() the returned value of the bcp47Name() represents
- the locale name of the QLocale data but not the language the user-interface
- should be in.
+ \note For \c{QLocale::AnyScript} an empty string is returned.
- This function tries to conform the locale name to BCP47.
+ \since 6.1
+ \sa script(), name(), bcp47Name(), languageToCode(), territoryToCode()
+*/
+QString QLocale::scriptToCode(Script script)
+{
+ return QLocalePrivate::scriptToCode(script);
+}
+
+/*!
+ Returns the QLocale::Script enum corresponding to the four-letter script
+ \a scriptCode, as defined in the ISO 15924 standard.
- \sa language(), country(), script(), uiLanguages()
+ If the code is invalid or not known QLocale::AnyScript is returned.
+
+ \since 6.1
+ \sa scriptToCode(), codeToLanguage(), codeToTerritory()
*/
-QString QLocale::bcp47Name() const
+QLocale::Script QLocale::codeToScript(QStringView scriptCode) noexcept
{
- return QString::fromLatin1(d->bcp47Name());
+ return QLocalePrivate::codeToScript(scriptCode);
}
/*!
Returns a QString containing the name of \a language.
- \sa countryToString(), scriptToString(), bcp47Name()
+ \sa territoryToString(), scriptToString(), bcp47Name()
*/
QString QLocale::languageToString(Language language)
{
- if (uint(language) > uint(QLocale::LastLanguage))
- return QLatin1String("Unknown");
- return QLatin1String(language_name_list + language_name_index[language]);
+ if (language > LastLanguage)
+ return "Unknown"_L1;
+ return QString::fromUtf8(language_name_list + language_name_index[language]);
}
/*!
- Returns a QString containing the name of \a country.
+ \since 6.2
+
+ Returns a QString containing the name of \a territory.
- \sa languageToString(), scriptToString(), country(), bcp47Name()
+ \sa languageToString(), scriptToString(), territory(), bcp47Name()
*/
+QString QLocale::territoryToString(Territory territory)
+{
+ if (territory > LastTerritory)
+ return "Unknown"_L1;
+ return QString::fromUtf8(territory_name_list + territory_name_index[territory]);
+}
+
+#if QT_DEPRECATED_SINCE(6, 6)
+/*!
+ \deprecated [6.6] Use \l territoryToString() instead.
+
+ Returns a QString containing the name of \a country.
+ \sa languageToString(), scriptToString(), territory(), bcp47Name()
+*/
QString QLocale::countryToString(Country country)
{
- if (uint(country) > uint(QLocale::LastCountry))
- return QLatin1String("Unknown");
- return QLatin1String(country_name_list + country_name_index[country]);
+ return territoryToString(country);
}
+#endif
/*!
\since 4.8
Returns a QString containing the name of \a script.
- \sa languageToString(), countryToString(), script(), bcp47Name()
+ \sa languageToString(), territoryToString(), script(), bcp47Name()
*/
-QString QLocale::scriptToString(QLocale::Script script)
+QString QLocale::scriptToString(Script script)
{
- if (uint(script) > uint(QLocale::LastScript))
- return QLatin1String("Unknown");
- return QLatin1String(script_name_list + script_name_index[script]);
+ if (script > LastScript)
+ return "Unknown"_L1;
+ return QString::fromUtf8(script_name_list + script_name_index[script]);
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
+ \fn short QLocale::toShort(const QString &s, bool *ok) const
+
Returns the short int represented by the localized string \a s.
If the conversion fails the function returns 0.
@@ -1396,12 +1693,9 @@ QString QLocale::scriptToString(QLocale::Script script)
\sa toUShort(), toString()
*/
-short QLocale::toShort(const QString &s, bool *ok) const
-{
- return toIntegral_helper<short>(d, s, ok);
-}
-
/*!
+ \fn ushort QLocale::toUShort(const QString &s, bool *ok) const
+
Returns the unsigned short int represented by the localized string \a s.
If the conversion fails the function returns 0.
@@ -1414,12 +1708,8 @@ short QLocale::toShort(const QString &s, bool *ok) const
\sa toShort(), toString()
*/
-ushort QLocale::toUShort(const QString &s, bool *ok) const
-{
- return toIntegral_helper<ushort>(d, s, ok);
-}
-
/*!
+ \fn int QLocale::toInt(const QString &s, bool *ok) const
Returns the int represented by the localized string \a s.
If the conversion fails the function returns 0.
@@ -1432,12 +1722,8 @@ ushort QLocale::toUShort(const QString &s, bool *ok) const
\sa toUInt(), toString()
*/
-int QLocale::toInt(const QString &s, bool *ok) const
-{
- return toIntegral_helper<int>(d, s, ok);
-}
-
/*!
+ \fn uint QLocale::toUInt(const QString &s, bool *ok) const
Returns the unsigned int represented by the localized string \a s.
If the conversion fails the function returns 0.
@@ -1450,54 +1736,41 @@ int QLocale::toInt(const QString &s, bool *ok) const
\sa toInt(), toString()
*/
-uint QLocale::toUInt(const QString &s, bool *ok) const
-{
- return toIntegral_helper<uint>(d, s, ok);
-}
-
/*!
- Returns the long int represented by the localized string \a s.
+ \since 5.13
+ \fn long QLocale::toLong(const QString &s, bool *ok) const
- If the conversion fails the function returns 0.
+ Returns the long int represented by the localized string \a s.
- If \a ok is not \nullptr, failure is reported by setting *\a{ok}
- to \c false, and success by setting *\a{ok} to \c true.
-
- This function ignores leading and trailing whitespace.
-
- \sa toInt(), toULong(), toDouble(), toString()
+ If the conversion fails the function returns 0.
- \since 5.13
- */
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
+ This function ignores leading and trailing whitespace.
-long QLocale::toLong(const QString &s, bool *ok) const
-{
- return toIntegral_helper<long>(d, s, ok);
-}
+ \sa toInt(), toULong(), toDouble(), toString()
+*/
/*!
- Returns the unsigned long int represented by the localized
- string \a s.
+ \since 5.13
+ \fn ulong QLocale::toULong(const QString &s, bool *ok) const
- If the conversion fails the function returns 0.
+ Returns the unsigned long int represented by the localized
+ string \a s.
- If \a ok is not \nullptr, failure is reported by setting *\a{ok}
- to \c false, and success by setting *\a{ok} to \c true.
+ If the conversion fails the function returns 0.
- This function ignores leading and trailing whitespace.
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
- \sa toLong(), toInt(), toDouble(), toString()
+ This function ignores leading and trailing whitespace.
- \since 5.13
+ \sa toLong(), toInt(), toDouble(), toString()
*/
-ulong QLocale::toULong(const QString &s, bool *ok) const
-{
- return toIntegral_helper<ulong>(d, s, ok);
-}
-
/*!
+ \fn qlonglong QLocale::toLongLong(const QString &s, bool *ok) const
Returns the long long int represented by the localized string \a s.
If the conversion fails the function returns 0.
@@ -1510,13 +1783,9 @@ ulong QLocale::toULong(const QString &s, bool *ok) const
\sa toInt(), toULongLong(), toDouble(), toString()
*/
-
-qlonglong QLocale::toLongLong(const QString &s, bool *ok) const
-{
- return toIntegral_helper<qlonglong>(d, s, ok);
-}
-
/*!
+ \fn qulonglong QLocale::toULongLong(const QString &s, bool *ok) const
+
Returns the unsigned long long int represented by the localized
string \a s.
@@ -1530,12 +1799,9 @@ qlonglong QLocale::toLongLong(const QString &s, bool *ok) const
\sa toLongLong(), toInt(), toDouble(), toString()
*/
-qulonglong QLocale::toULongLong(const QString &s, bool *ok) const
-{
- return toIntegral_helper<qulonglong>(d, s, ok);
-}
-
/*!
+ \fn float QLocale::toFloat(const QString &s, bool *ok) const
+
Returns the float represented by the localized string \a s.
Returns an infinity if the conversion overflows or 0.0 if the
@@ -1544,20 +1810,13 @@ qulonglong QLocale::toULongLong(const QString &s, bool *ok) const
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- This function does not fall back to the 'C' locale if the string
- cannot be interpreted in this locale.
-
This function ignores leading and trailing whitespace.
\sa toDouble(), toInt(), toString()
*/
-float QLocale::toFloat(const QString &s, bool *ok) const
-{
- return QLocaleData::convertDoubleToFloat(toDouble(s, ok), ok);
-}
-
/*!
+ \fn double QLocale::toDouble(const QString &s, bool *ok) const
Returns the double represented by the localized string \a s.
Returns an infinity if the conversion overflows or 0.0 if the
@@ -1566,9 +1825,6 @@ float QLocale::toFloat(const QString &s, bool *ok) const
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- This function does not fall back to the 'C' locale if the string
- cannot be interpreted in this locale.
-
\snippet code/src_corelib_text_qlocale.cpp 3
Notice that the last conversion returns 1234.0, because '.' is the
@@ -1579,12 +1835,6 @@ float QLocale::toFloat(const QString &s, bool *ok) const
\sa toFloat(), toInt(), toString()
*/
-double QLocale::toDouble(const QString &s, bool *ok) const
-{
- return d->m_data->stringToDouble(s, ok, d->m_numberOptions);
-}
-#endif // QT_STRINGVIEW_LEVEL < 2
-
/*!
Returns the short int represented by the localized string \a s.
@@ -1666,20 +1916,18 @@ uint QLocale::toUInt(QStringView s, bool *ok) const
}
/*!
- Returns the long int represented by the localized string \a s.
-
- If the conversion fails the function returns 0.
+ \since 5.13
+ Returns the long int represented by the localized string \a s.
- If \a ok is not \nullptr, failure is reported by setting *\a{ok}
- to \c false, and success by setting *\a{ok} to \c true.
-
- This function ignores leading and trailing whitespace.
+ If the conversion fails the function returns 0.
- \sa toInt(), toULong(), toDouble(), toString()
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
- \since 5.13
- */
+ This function ignores leading and trailing whitespace.
+ \sa toInt(), toULong(), toDouble(), toString()
+*/
long QLocale::toLong(QStringView s, bool *ok) const
{
@@ -1687,20 +1935,19 @@ long QLocale::toLong(QStringView s, bool *ok) const
}
/*!
- Returns the unsigned long int represented by the localized
- string \a s.
-
- If the conversion fails the function returns 0.
+ \since 5.13
+ Returns the unsigned long int represented by the localized
+ string \a s.
- If \a ok is not \nullptr, failure is reported by setting *\a{ok}
- to \c false, and success by setting *\a{ok} to \c true.
+ If the conversion fails the function returns 0.
- This function ignores leading and trailing whitespace.
+ If \a ok is not \nullptr, failure is reported by setting *\a{ok}
+ to \c false, and success by setting *\a{ok} to \c true.
- \sa toLong(), toInt(), toDouble(), toString()
+ This function ignores leading and trailing whitespace.
- \since 5.13
- */
+ \sa toLong(), toInt(), toDouble(), toString()
+*/
ulong QLocale::toULong(QStringView s, bool *ok) const
{
@@ -1779,10 +2026,6 @@ float QLocale::toFloat(QStringView s, bool *ok) const
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- Unlike QString::toDouble(), this function does not fall back to
- the "C" locale if the string cannot be interpreted in this
- locale.
-
\snippet code/src_corelib_text_qlocale.cpp 3-qstringview
Notice that the last conversion returns 1234.0, because '.' is the
@@ -1828,7 +2071,6 @@ QString QLocale::toString(qulonglong i) const
return d->m_data->unsLongLongToString(i, -1, 10, -1, flags);
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
Returns a localized string representation of the given \a date in the
specified \a format.
@@ -1839,39 +2081,97 @@ QString QLocale::toString(qulonglong i) const
QString QLocale::toString(QDate date, const QString &format) const
{
- return QCalendar().dateTimeToString(format, QDateTime(), date, QTime(), *this);
+ return toString(date, qToStringViewIgnoringNull(format));
}
-#endif
/*!
- \since 5.10
+ Returns a localized string representation of the given \a time according
+ to the specified \a format.
+ If \a format is an empty string, an empty string is returned.
+
+ \sa QTime::toString()
+*/
+
+QString QLocale::toString(QTime time, const QString &format) const
+{
+ return toString(time, qToStringViewIgnoringNull(format));
+}
+
+/*!
+ \since 4.4
+ \fn QString QLocale::toString(const QDateTime &dateTime, const QString &format) const
+
+ Returns a localized string representation of the given \a dateTime according
+ to the specified \a format.
+ If \a format is an empty string, an empty string is returned.
+
+ \sa QDateTime::toString(), QDate::toString(), QTime::toString()
+*/
+
+/*!
+ \since 5.14
Returns a localized string representation of the given \a date in the
- specified \a format.
+ specified \a format, optionally for a specified calendar \a cal.
If \a format is an empty string, an empty string is returned.
\sa QDate::toString()
*/
+QString QLocale::toString(QDate date, QStringView format, QCalendar cal) const
+{
+ return cal.dateTimeToString(format, QDateTime(), date, QTime(), *this);
+}
+
+/*!
+ \since 5.10
+ \overload
+*/
QString QLocale::toString(QDate date, QStringView format) const
{
return QCalendar().dateTimeToString(format, QDateTime(), date, QTime(), *this);
}
/*!
+ \since 5.14
+
Returns a localized string representation of the given \a date according
- to the specified \a format (see dateFormat()).
+ to the specified \a format (see dateFormat()), optionally for a specified
+ calendar \a cal.
\note Some locales may use formats that limit the range of years they can
represent.
*/
+QString QLocale::toString(QDate date, FormatType format, QCalendar cal) const
+{
+ if (!date.isValid())
+ return QString();
+
+#ifndef QT_NO_SYSTEMLOCALE
+ if (cal.isGregorian() && d->m_data == &systemLocaleData) {
+ QVariant res = systemLocale()->query(format == LongFormat
+ ? QSystemLocale::DateToStringLong
+ : QSystemLocale::DateToStringShort,
+ date);
+ if (!res.isNull())
+ return res.toString();
+ }
+#endif
+ QString format_str = dateFormat(format);
+ return toString(date, format_str, cal);
+}
+
+/*!
+ \since 4.5
+ \overload
+*/
QString QLocale::toString(QDate date, FormatType format) const
{
if (!date.isValid())
return QString();
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::DateToStringLong
: QSystemLocale::DateToStringShort,
@@ -1887,7 +2187,7 @@ QString QLocale::toString(QDate date, FormatType format) const
static bool timeFormatContainsAP(QStringView format)
{
- int i = 0;
+ qsizetype i = 0;
while (i < format.size()) {
if (format.at(i).unicode() == '\'') {
qt_readEscapedFormatString(format, &i);
@@ -1902,22 +2202,8 @@ static bool timeFormatContainsAP(QStringView format)
return false;
}
-#if QT_STRINGVIEW_LEVEL < 2
-/*!
- Returns a localized string representation of the given \a time according
- to the specified \a format.
- If \a format is an empty string, an empty string is returned.
-
- \sa QTime::toString()
-*/
-QString QLocale::toString(QTime time, const QString &format) const
-{
- return QCalendar().dateTimeToString(format, QDateTime(), QDate(), time, *this);
-}
-#endif
-
/*!
- \since 5.10
+ \since 4.5
Returns a localized string representation of the given \a time according
to the specified \a format.
@@ -1930,70 +2216,46 @@ QString QLocale::toString(QTime time, QStringView format) const
return QCalendar().dateTimeToString(format, QDateTime(), QDate(), time, *this);
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
- \since 4.4
+ \since 5.14
Returns a localized string representation of the given \a dateTime according
- to the specified \a format.
+ to the specified \a format, optionally for a specified calendar \a cal.
If \a format is an empty string, an empty string is returned.
\sa QDateTime::toString(), QDate::toString(), QTime::toString()
*/
-
-QString QLocale::toString(const QDateTime &dateTime, const QString &format) const
+QString QLocale::toString(const QDateTime &dateTime, QStringView format, QCalendar cal) const
{
- return QCalendar().dateTimeToString(format, dateTime, QDate(), QTime(), *this);
+ return cal.dateTimeToString(format, dateTime, QDate(), QTime(), *this);
}
-#endif
/*!
\since 5.10
-
- Returns a localized string representation of the given \a dateTime according
- to the specified \a format.
- If \a format is an empty string, an empty string is returned.
-
- \sa QDateTime::toString(), QDate::toString(), QTime::toString()
+ \overload
*/
QString QLocale::toString(const QDateTime &dateTime, QStringView format) const
{
return QCalendar().dateTimeToString(format, dateTime, QDate(), QTime(), *this);
}
-QString QLocale::toString(QDate date, QStringView format, QCalendar cal) const
-{
- return cal.dateTimeToString(format, QDateTime(), date, QTime(), *this);
-}
-
-QString QLocale::toString(QDate date, QLocale::FormatType format, QCalendar cal) const
-{
- if (!date.isValid())
- return QString();
-
-#ifndef QT_NO_SYSTEMLOCALE
- if (cal.isGregorian() && d->m_data == systemData()) {
- QVariant res = systemLocale()->query(format == LongFormat
- ? QSystemLocale::DateToStringLong
- : QSystemLocale::DateToStringShort,
- date);
- if (!res.isNull())
- return res.toString();
- }
-#endif
+/*!
+ \since 5.14
- QString format_str = dateFormat(format);
- return toString(date, format_str, cal);
-}
+ Returns a localized string representation of the given \a dateTime according
+ to the specified \a format (see dateTimeFormat()), optionally for a
+ specified calendar \a cal.
-QString QLocale::toString(const QDateTime &dateTime, QLocale::FormatType format,
- QCalendar cal) const
+ \note Some locales may use formats that limit the range of years they can
+ represent.
+*/
+QString QLocale::toString(const QDateTime &dateTime, FormatType format, QCalendar cal) const
{
if (!dateTime.isValid())
return QString();
#ifndef QT_NO_SYSTEMLOCALE
- if (cal.isGregorian() && d->m_data == systemData()) {
+ if (cal.isGregorian() && d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::DateTimeToStringLong
: QSystemLocale::DateTimeToStringShort,
@@ -2007,28 +2269,17 @@ QString QLocale::toString(const QDateTime &dateTime, QLocale::FormatType format,
return toString(dateTime, format_str, cal);
}
-QString QLocale::toString(const QDateTime &dateTime, QStringView format, QCalendar cal) const
-{
- return cal.dateTimeToString(format, dateTime, QDate(), QTime(), *this);
-}
-
/*!
\since 4.4
-
- Returns a localized string representation of the given \a dateTime according
- to the specified \a format (see dateTimeFormat()).
-
- \note Some locales may use formats that limit the range of years they can
- represent.
+ \overload
*/
-
QString QLocale::toString(const QDateTime &dateTime, FormatType format) const
{
if (!dateTime.isValid())
return QString();
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::DateTimeToStringLong
: QSystemLocale::DateTimeToStringShort,
@@ -2054,7 +2305,7 @@ QString QLocale::toString(QTime time, FormatType format) const
return QString();
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::TimeToStringLong
: QSystemLocale::TimeToStringShort,
@@ -2083,7 +2334,7 @@ QString QLocale::toString(QTime time, FormatType format) const
QString QLocale::dateFormat(FormatType format) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::DateFormatLong
: QSystemLocale::DateFormatShort,
@@ -2114,7 +2365,7 @@ QString QLocale::dateFormat(FormatType format) const
QString QLocale::timeFormat(FormatType format) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::TimeFormatLong
: QSystemLocale::TimeFormatShort,
@@ -2145,7 +2396,7 @@ QString QLocale::timeFormat(FormatType format) const
QString QLocale::dateTimeFormat(FormatType format) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QVariant res = systemLocale()->query(format == LongFormat
? QSystemLocale::DateTimeFormatLong
: QSystemLocale::DateTimeFormatShort,
@@ -2155,16 +2406,20 @@ QString QLocale::dateTimeFormat(FormatType format) const
}
}
#endif
- return dateFormat(format) + QLatin1Char(' ') + timeFormat(format);
+ return dateFormat(format) + u' ' + timeFormat(format);
}
#if QT_CONFIG(datestring)
/*!
\since 4.4
- Parses the time string given in \a string and returns the
- time. The format of the time string is chosen according to the
- \a format parameter (see timeFormat()).
+ Reads \a string as a time in a locale-specific \a format.
+
+ Parses \a string and returns the time it represents. The format of the time
+ string is chosen according to the \a format parameter (see timeFormat()).
+
+ \note Any am/pm indicators used must match \l amText() or \l pmText(),
+ ignoring case.
If the time could not be parsed, returns an invalid time.
@@ -2178,59 +2433,86 @@ QTime QLocale::toTime(const QString &string, FormatType format) const
/*!
\since 4.4
- Parses the date string given in \a string and returns the
- date. The format of the date string is chosen according to the
- \a format parameter (see dateFormat()).
+ Reads \a string as a date in a locale-specific \a format.
+
+ Parses \a string and returns the date it represents. The format of the date
+ string is chosen according to the \a format parameter (see dateFormat()).
+
+//! [base-year-for-short]
+ Some locales use, particularly for ShortFormat, only the last two digits of
+ the year. In such a case, the 100 years starting at \a baseYear are the
+ candidates first considered. Prior to 6.7 there was no \a baseYear parameter
+ and 1900 was always used. This is the default for \a baseYear, selecting a
+ year from then to 1999. In some cases, other fields may lead to the next or
+ previous century being selected, to get a result consistent with all fields
+ given. See \l QDate::fromString() for details.
+//! [base-year-for-short]
+
+ \note Month and day names, where used, must be given in the locale's
+ language.
If the date could not be parsed, returns an invalid date.
\sa dateFormat(), toTime(), toDateTime(), QDate::fromString()
*/
-QDate QLocale::toDate(const QString &string, FormatType format) const
+QDate QLocale::toDate(const QString &string, FormatType format, int baseYear) const
{
- return toDate(string, dateFormat(format));
+ return toDate(string, dateFormat(format), baseYear);
}
/*!
\since 5.14
\overload
*/
-QDate QLocale::toDate(const QString &string, FormatType format, QCalendar cal) const
+QDate QLocale::toDate(const QString &string, FormatType format, QCalendar cal, int baseYear) const
{
- return toDate(string, dateFormat(format), cal);
+ return toDate(string, dateFormat(format), cal, baseYear);
}
/*!
\since 4.4
- Parses the date/time string given in \a string and returns the
- time. The format of the date/time string is chosen according to the
- \a format parameter (see dateTimeFormat()).
+ Reads \a string as a date-time in a locale-specific \a format.
+
+ Parses \a string and returns the date-time it represents. The format of the
+ date string is chosen according to the \a format parameter (see
+ dateFormat()).
+
+ \include qlocale.cpp base-year-for-short
+
+ \note Month and day names, where used, must be given in the locale's
+ language. Any am/pm indicators used must match \l amText() or \l pmText(),
+ ignoring case.
If the string could not be parsed, returns an invalid QDateTime.
\sa dateTimeFormat(), toTime(), toDate(), QDateTime::fromString()
*/
-QDateTime QLocale::toDateTime(const QString &string, FormatType format) const
+QDateTime QLocale::toDateTime(const QString &string, FormatType format, int baseYear) const
{
- return toDateTime(string, dateTimeFormat(format));
+ return toDateTime(string, dateTimeFormat(format), baseYear);
}
/*!
\since 5.14
\overload
*/
-QDateTime QLocale::toDateTime(const QString &string, FormatType format, QCalendar cal) const
+QDateTime QLocale::toDateTime(const QString &string, FormatType format, QCalendar cal,
+ int baseYear) const
{
- return toDateTime(string, dateTimeFormat(format), cal);
+ return toDateTime(string, dateTimeFormat(format), cal, baseYear);
}
/*!
\since 4.4
- Parses the time string given in \a string and returns the
- time. See QTime::fromString() for information on what is a valid
- format string.
+ Reads \a string as a time in the given \a format.
+
+ Parses \a string and returns the time it represents. See QTime::fromString()
+ for the interpretation of \a format.
+
+ \note Any am/pm indicators used must match \l amText() or \l pmText(),
+ ignoring case.
If the time could not be parsed, returns an invalid time.
@@ -2254,37 +2536,49 @@ QTime QLocale::toTime(const QString &string, const QString &format) const
/*!
\since 4.4
- Parses the date string given in \a string and returns the
- date. See QDate::fromString() for information on the expressions
- that can be used with this function.
+ Reads \a string as a date in the given \a format.
+
+ Parses \a string and returns the date it represents. See QDate::fromString()
+ for the interpretation of \a format.
- This function searches month names and the names of the days of
- the week in the current locale.
+//! [base-year-for-two-digit]
+ When \a format only specifies the last two digits of a year, the 100 years
+ starting at \a baseYear are the candidates first considered. Prior to 6.7
+ there was no \a baseYear parameter and 1900 was always used. This is the
+ default for \a baseYear, selecting a year from then to 1999. In some cases,
+ other fields may lead to the next or previous century being selected, to get
+ a result consistent with all fields given. See \l QDate::fromString() for
+ details.
+//! [base-year-for-two-digit]
+
+ \note Month and day names, where used, must be given in the locale's
+ language.
If the date could not be parsed, returns an invalid date.
\sa dateFormat(), toTime(), toDateTime(), QDate::fromString()
*/
-QDate QLocale::toDate(const QString &string, const QString &format) const
+QDate QLocale::toDate(const QString &string, const QString &format, int baseYear) const
{
- return toDate(string, format, QCalendar());
+ return toDate(string, format, QCalendar(), baseYear);
}
/*!
\since 5.14
\overload
*/
-QDate QLocale::toDate(const QString &string, const QString &format, QCalendar cal) const
+QDate QLocale::toDate(const QString &string, const QString &format, QCalendar cal, int baseYear) const
{
QDate date;
#if QT_CONFIG(datetimeparser)
QDateTimeParser dt(QMetaType::QDate, QDateTimeParser::FromString, cal);
dt.setDefaultLocale(*this);
if (dt.parseFormat(format))
- dt.fromString(string, &date, nullptr);
+ dt.fromString(string, &date, nullptr, baseYear);
#else
Q_UNUSED(string);
Q_UNUSED(format);
+ Q_UNUSED(baseYear);
Q_UNUSED(cal);
#endif
return date;
@@ -2293,38 +2587,51 @@ QDate QLocale::toDate(const QString &string, const QString &format, QCalendar ca
/*!
\since 4.4
- Parses the date/time string given in \a string and returns the
- time. See QDateTime::fromString() for information on the expressions
- that can be used with this function.
+ Reads \a string as a date-time in the given \a format.
- \note The month and day names used must be given in the user's local
- language.
+ Parses \a string and returns the date-time it represents. See
+ QDateTime::fromString() for the interpretation of \a format.
- If the string could not be parsed, returns an invalid QDateTime.
+ \include qlocale.cpp base-year-for-two-digit
+
+ \note Month and day names, where used, must be given in the locale's
+ language. Any am/pm indicators used must match \l amText() or \l pmText(),
+ ignoring case.
+
+ If the string could not be parsed, returns an invalid QDateTime. If the
+ string can be parsed and represents an invalid date-time (e.g. in a gap
+ skipped by a time-zone transition), an invalid QDateTime is returned, whose
+ toMSecsSinceEpoch() represents a near-by date-time that is valid. Passing
+ that to fromMSecsSinceEpoch() will produce a valid date-time that isn't
+ faithfully represented by the string parsed.
\sa dateTimeFormat(), toTime(), toDate(), QDateTime::fromString()
*/
-QDateTime QLocale::toDateTime(const QString &string, const QString &format) const
+QDateTime QLocale::toDateTime(const QString &string, const QString &format, int baseYear) const
{
- return toDateTime(string, format, QCalendar());
+ return toDateTime(string, format, QCalendar(), baseYear);
}
/*!
\since 5.14
\overload
*/
-QDateTime QLocale::toDateTime(const QString &string, const QString &format, QCalendar cal) const
+QDateTime QLocale::toDateTime(const QString &string, const QString &format, QCalendar cal,
+ int baseYear) const
{
#if QT_CONFIG(datetimeparser)
QDateTime datetime;
QDateTimeParser dt(QMetaType::QDateTime, QDateTimeParser::FromString, cal);
dt.setDefaultLocale(*this);
- if (dt.parseFormat(format) && dt.fromString(string, &datetime))
+ if (dt.parseFormat(format) && (dt.fromString(string, &datetime, baseYear)
+ || !datetime.isValid())) {
return datetime;
+ }
#else
Q_UNUSED(string);
Q_UNUSED(format);
+ Q_UNUSED(baseYear);
Q_UNUSED(cal);
#endif
return QDateTime();
@@ -2334,7 +2641,14 @@ QDateTime QLocale::toDateTime(const QString &string, const QString &format, QCal
/*!
\since 4.1
- Returns the decimal point character of this locale.
+ Returns the fractional part separator for this locale.
+
+ This is the token that separates the whole number part from the fracional
+ part in the representation of a number which has a fractional part. This is
+ commonly called the "decimal point character" - even though, in many
+ locales, it is not a "point" (or similar dot). It is (since Qt 6.0) returned
+ as a string in case some locale needs more than one UTF-16 code-point to
+ represent its separator.
\sa groupSeparator(), toString()
*/
@@ -2346,7 +2660,14 @@ QString QLocale::decimalPoint() const
/*!
\since 4.1
- Returns the group separator character of this locale.
+ Returns the digit-grouping separator for this locale.
+
+ This is a token used to break up long sequences of digits, in the
+ representation of a number, to make it easier to read. In some locales it
+ may be empty, indicating that digits should not be broken up into groups in
+ this way. In others it may be a spacing character. It is (since Qt 6.0)
+ returned as a string in case some locale needs more than one UTF-16
+ code-point to represent its separator.
\sa decimalPoint(), toString()
*/
@@ -2358,7 +2679,12 @@ QString QLocale::groupSeparator() const
/*!
\since 4.1
- Returns the percent character of this locale.
+ Returns the percent marker of this locale.
+
+ This is a token presumed to be appended to a number to indicate a
+ percentage. It is (since Qt 6.0) returned as a string because, in some
+ locales, it is not a single character - for example, because it includes a
+ text-direction-control character.
\sa toString()
*/
@@ -2372,6 +2698,13 @@ QString QLocale::percent() const
Returns the zero digit character of this locale.
+ This is a single Unicode character but may be encoded as a surrogate pair,
+ so is (since Qt 6.0) returned as a string. In most locales, other digits
+ follow it in Unicode ordering - however, some number systems, notably those
+ using U+3007 as zero, do not have contiguous digits. Use toString() to
+ obtain suitable representations of numbers, rather than trying to construct
+ them from this zero digit.
+
\sa toString()
*/
QString QLocale::zeroDigit() const
@@ -2382,7 +2715,12 @@ QString QLocale::zeroDigit() const
/*!
\since 4.1
- Returns the negative sign character of this locale.
+ Returns the negative sign indicator of this locale.
+
+ This is a token presumed to be used as a prefix to a number to indicate that
+ it is negative. It is (since Qt 6.0) returned as a string because, in some
+ locales, it is not a single character - for example, because it includes a
+ text-direction-control character.
\sa positiveSign(), toString()
*/
@@ -2394,7 +2732,12 @@ QString QLocale::negativeSign() const
/*!
\since 4.5
- Returns the positive sign character of this locale.
+ Returns the positive sign indicator of this locale.
+
+ This is a token presumed to be used as a prefix to a number to indicate that
+ it is positive. It is (since Qt 6.0) returned as a string because, in some
+ locales, it is not a single character - for example, because it includes a
+ text-direction-control character.
\sa negativeSign(), toString()
*/
@@ -2406,8 +2749,13 @@ QString QLocale::positiveSign() const
/*!
\since 4.1
- Returns the exponential character of this locale, used to separate exponent
- from mantissa in some floating-point numeric representations.
+ Returns the exponent separator for this locale.
+
+ This is a token used to separate mantissa from exponent in some
+ floating-point numeric representations. It is (since Qt 6.0) returned as a
+ string because, in some locales, it is not a single character - for example,
+ it may consist of a multiplication sign and a representation of the "ten to
+ the power" operator.
\sa toString(double, char, int)
*/
@@ -2416,44 +2764,57 @@ QString QLocale::exponential() const
return d->m_data->exponentSeparator();
}
-static bool qIsUpper(char c)
-{
- return c >= 'A' && c <= 'Z';
-}
-
-static char qToLower(char c)
-{
- if (c >= 'A' && c <= 'Z')
- return c - 'A' + 'a';
- else
- return c;
-}
-
/*!
\overload
-
- \a f and \a prec have the same meaning as in QString::number(double, char, int).
-
- \sa toDouble(), numberOptions(), exponential(), decimalPoint(), zeroDigit(), positiveSign(), percent()
+ Returns a string representing the floating-point number \a f.
+
+ The form of the representation is controlled by the \a format and \a
+ precision parameters.
+
+ The \a format defaults to \c{'g'}. It can be any of the following:
+
+ \table
+ \header \li Format \li Meaning \li Meaning of \a precision
+ \row \li \c 'e' \li format as [-]9.9e[+|-]999 \li number of digits \e after the decimal point
+ \row \li \c 'E' \li format as [-]9.9E[+|-]999 \li "
+ \row \li \c 'f' \li format as [-]9.9 \li "
+ \row \li \c 'F' \li same as \c 'f' except for INF and NAN (see below) \li "
+ \row \li \c 'g' \li use \c 'e' or \c 'f' format, whichever is more concise \li maximum number of significant digits (trailing zeroes are omitted)
+ \row \li \c 'G' \li use \c 'E' or \c 'F' format, whichever is more concise \li "
+ \endtable
+
+ The special \a precision value QLocale::FloatingPointShortest selects the
+ shortest representation that, when read as a number, gets back the original floating-point
+ value. Aside from that, any negative \a precision is ignored in favor of the
+ default, 6.
+
+ For the \c 'e', \c 'f' and \c 'g' formats, positive infinity is represented
+ as "inf", negative infinity as "-inf" and floating-point NaN (not-a-number)
+ values are represented as "nan". For the \c 'E', \c 'F' and \c 'G' formats,
+ "INF" and "NAN" are used instead. This does not vary with locale.
+
+ \sa toDouble(), numberOptions(), exponential(), decimalPoint(), zeroDigit(),
+ positiveSign(), percent(), toCurrencyString(), formattedDataSize(),
+ QLocale::FloatingPointPrecisionOption
*/
-QString QLocale::toString(double i, char f, int prec) const
+QString QLocale::toString(double f, char format, int precision) const
{
QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- uint flags = qIsUpper(f) ? QLocaleData::CapitalEorX : 0;
+ uint flags = isAsciiUpper(format) ? QLocaleData::CapitalEorX : 0;
- switch (qToLower(f)) {
- case 'f':
- form = QLocaleData::DFDecimal;
- break;
- case 'e':
- form = QLocaleData::DFExponent;
- break;
- case 'g':
- form = QLocaleData::DFSignificantDigits;
- break;
- default:
- break;
+ switch (QtMiscUtils::toAsciiLower(format)) {
+ case 'f':
+ form = QLocaleData::DFDecimal;
+ break;
+ case 'e':
+ form = QLocaleData::DFExponent;
+ break;
+ case 'g':
+ form = QLocaleData::DFSignificantDigits;
+ break;
+ default:
+ break;
}
if (!(d->m_numberOptions & OmitGroupSeparator))
@@ -2462,7 +2823,7 @@ QString QLocale::toString(double i, char f, int prec) const
flags |= QLocaleData::ZeroPadExponent;
if (d->m_numberOptions & IncludeTrailingZeroesAfterDot)
flags |= QLocaleData::AddTrailingZeroes;
- return d->m_data->doubleToString(i, prec, form, -1, flags);
+ return d->m_data->doubleToString(f, precision, form, -1, flags);
}
/*!
@@ -2487,66 +2848,87 @@ QString QLocale::toString(double i, char f, int prec) const
/*!
Returns a QLocale object initialized to the system locale.
- On Windows and Mac, this locale will use the decimal/grouping characters and
- date/time formats specified in the system configuration panel.
+ The system locale may use system-specific sources for locale data, where
+ available, otherwise falling back on QLocale's built-in database entry for
+ the language, script and territory the system reports.
+
+ For example, on Windows and Mac, this locale will use the decimal/grouping
+ characters and date/time formats specified in the system configuration
+ panel.
\sa c()
*/
QLocale QLocale::system()
{
- QT_PREPEND_NAMESPACE(systemData)(); // trigger updating of the system data if necessary
- if (systemLocalePrivate.isDestroyed())
- return QLocale(QLocale::C);
- return QLocale(*systemLocalePrivate->data());
-}
+ constexpr auto sysData = []() {
+ // Same return as systemData(), but leave the setup to the actual call to it.
+#ifdef QT_NO_SYSTEMLOCALE
+ return locale_data;
+#else
+ return &systemLocaleData;
+#endif
+ };
+ Q_CONSTINIT static QLocalePrivate locale(sysData(), -1, DefaultNumberOptions, 1);
+ // Calling systemData() ensures system data is up to date; we also need it
+ // to ensure that locale's index stays up to date:
+ systemData(&locale.m_index);
+ Q_ASSERT(locale.m_index >= 0 && locale.m_index < locale_data_size);
+ return QLocale(locale);
+}
/*!
- \since 4.8
-
Returns a list of valid locale objects that match the given \a language, \a
- script and \a country.
+ script and \a territory.
Getting a list of all locales:
QList<QLocale> allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript,
- QLocale::AnyCountry);
+ QLocale::AnyTerritory);
Getting a list of locales suitable for Russia:
QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript,
QLocale::Russia);
*/
-QList<QLocale> QLocale::matchingLocales(QLocale::Language language,
- QLocale::Script script,
- QLocale::Country country)
+QList<QLocale> QLocale::matchingLocales(Language language, Script script, Territory territory)
{
- if (uint(language) > QLocale::LastLanguage || uint(script) > QLocale::LastScript ||
- uint(country) > QLocale::LastCountry)
+ const QLocaleId filter { language, script, territory };
+ if (!filter.isValid())
return QList<QLocale>();
- if (language == QLocale::C)
- return QList<QLocale>() << QLocale(QLocale::C);
+ if (language == C)
+ return QList<QLocale>{QLocale(C)};
QList<QLocale> result;
- if (language == QLocale::AnyLanguage && script == QLocale::AnyScript
- && country == QLocale::AnyCountry) {
+ if (filter.matchesAll())
result.reserve(locale_data_size);
- }
- const QLocaleData *data = locale_data + locale_index[language];
- while ( (data != locale_data + locale_data_size)
- && (language == QLocale::AnyLanguage || data->m_language_id == uint(language))) {
- if ((script == QLocale::AnyScript || data->m_script_id == uint(script))
- && (country == QLocale::AnyCountry || data->m_country_id == uint(country))) {
- result.append(QLocale(*(data->m_language_id == C ? c_private()
- : QLocalePrivate::create(data))));
+
+ quint16 index = locale_index[language];
+ // There may be no matches, for some languages (e.g. Abkhazian at CLDR v39).
+ while (filter.acceptLanguage(locale_data[index].m_language_id)) {
+ const QLocaleId id = locale_data[index].id();
+ if (filter.acceptScriptTerritory(id)) {
+ result.append(QLocale(*(id.language_id == C ? c_private()
+ : new QLocalePrivate(locale_data + index, index))));
}
- ++data;
+ ++index;
+ }
+
+ // Add current system locale, if it matches
+ const auto syslocaledata = systemData();
+
+ if (filter.acceptLanguage(syslocaledata->m_language_id)) {
+ const QLocaleId id = syslocaledata->id();
+ if (filter.acceptScriptTerritory(id))
+ result.append(system());
}
+
return result;
}
+#if QT_DEPRECATED_SINCE(6, 6)
/*!
- \obsolete
+ \deprecated [6.6] Use \l matchingLocales() instead and consult the \l territory() of each.
\since 4.3
Returns the list of countries that have entries for \a language in Qt's locale
@@ -2557,23 +2939,14 @@ QList<QLocale> QLocale::matchingLocales(QLocale::Language language,
*/
QList<QLocale::Country> QLocale::countriesForLanguage(Language language)
{
+ const auto locales = matchingLocales(language, AnyScript, AnyCountry);
QList<Country> result;
- if (language == C) {
- result << AnyCountry;
- return result;
- }
-
- unsigned language_id = language;
- const QLocaleData *data = locale_data + locale_index[language_id];
- while (data->m_language_id == language_id) {
- const QLocale::Country country = static_cast<Country>(data->m_country_id);
- if (!result.contains(country))
- result.append(country);
- ++data;
- }
-
+ result.reserve(locales.size());
+ for (const auto &locale : locales)
+ result.append(locale.territory());
return result;
}
+#endif
/*!
\since 4.2
@@ -2645,6 +3018,14 @@ QString QLocale::standaloneDayName(int day, FormatType type) const
// Calendar look-up of month and day names:
+// Only used in assertions
+[[maybe_unused]] static bool sameLocale(const QLocaleData *locale, const QCalendarLocale &calendar)
+{
+ return locale->m_language_id == calendar.m_language_id
+ && locale->m_script_id == calendar.m_script_id
+ && locale->m_territory_id == calendar.m_territory_id;
+}
+
/*!
\internal
*/
@@ -2753,20 +3134,30 @@ QString QCalendarBackend::monthName(const QLocale &locale, int month, int,
QLocale::FormatType format) const
{
Q_ASSERT(month >= 1 && month <= maximumMonthsInYear());
- return rawMonthName(localeMonthIndexData()[locale.d->m_data_offset],
- localeMonthData(), month, format);
+ const QCalendarLocale &monthly = localeMonthIndexData()[locale.d->m_index];
+ Q_ASSERT(sameLocale(locale.d->m_data, monthly));
+ return rawMonthName(monthly, localeMonthData(), month, format);
}
-QString QGregorianCalendar::monthName(const QLocale &locale, int month, int year,
- QLocale::FormatType format) const
+QString QRomanCalendar::monthName(const QLocale &locale, int month, int year,
+ QLocale::FormatType format) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (locale.d->m_data == systemData()) {
+ if (locale.d->m_data == &systemLocaleData) {
Q_ASSERT(month >= 1 && month <= 12);
- QVariant res = systemLocale()->query(format == QLocale::LongFormat
- ? QSystemLocale::MonthNameLong
- : QSystemLocale::MonthNameShort,
- month);
+ QSystemLocale::QueryType queryType = QSystemLocale::MonthNameLong;
+ switch (format) {
+ case QLocale::LongFormat:
+ queryType = QSystemLocale::MonthNameLong;
+ break;
+ case QLocale::ShortFormat:
+ queryType = QSystemLocale::MonthNameShort;
+ break;
+ case QLocale::NarrowFormat:
+ queryType = QSystemLocale::MonthNameNarrow;
+ break;
+ }
+ QVariant res = systemLocale()->query(queryType, month);
if (!res.isNull())
return res.toString();
}
@@ -2779,20 +3170,30 @@ QString QCalendarBackend::standaloneMonthName(const QLocale &locale, int month,
QLocale::FormatType format) const
{
Q_ASSERT(month >= 1 && month <= maximumMonthsInYear());
- return rawStandaloneMonthName(localeMonthIndexData()[locale.d->m_data_offset],
- localeMonthData(), month, format);
+ const QCalendarLocale &monthly = localeMonthIndexData()[locale.d->m_index];
+ Q_ASSERT(sameLocale(locale.d->m_data, monthly));
+ return rawStandaloneMonthName(monthly, localeMonthData(), month, format);
}
-QString QGregorianCalendar::standaloneMonthName(const QLocale &locale, int month, int year,
- QLocale::FormatType format) const
+QString QRomanCalendar::standaloneMonthName(const QLocale &locale, int month, int year,
+ QLocale::FormatType format) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (locale.d->m_data == systemData()) {
+ if (locale.d->m_data == &systemLocaleData) {
Q_ASSERT(month >= 1 && month <= 12);
- QVariant res = systemLocale()->query(format == QLocale::LongFormat
- ? QSystemLocale::StandaloneMonthNameLong
- : QSystemLocale::StandaloneMonthNameShort,
- month);
+ QSystemLocale::QueryType queryType = QSystemLocale::StandaloneMonthNameLong;
+ switch (format) {
+ case QLocale::LongFormat:
+ queryType = QSystemLocale::StandaloneMonthNameLong;
+ break;
+ case QLocale::ShortFormat:
+ queryType = QSystemLocale::StandaloneMonthNameShort;
+ break;
+ case QLocale::NarrowFormat:
+ queryType = QSystemLocale::StandaloneMonthNameNarrow;
+ break;
+ }
+ QVariant res = systemLocale()->query(queryType, month);
if (!res.isNull())
return res.toString();
}
@@ -2810,11 +3211,20 @@ QString QCalendarBackend::weekDayName(const QLocale &locale, int day,
return QString();
#ifndef QT_NO_SYSTEMLOCALE
- if (locale.d->m_data == systemData()) {
- QVariant res = systemLocale()->query(format == QLocale::LongFormat
- ? QSystemLocale::DayNameLong
- : QSystemLocale::DayNameShort,
- day);
+ if (locale.d->m_data == &systemLocaleData) {
+ QSystemLocale::QueryType queryType = QSystemLocale::DayNameLong;
+ switch (format) {
+ case QLocale::LongFormat:
+ queryType = QSystemLocale::DayNameLong;
+ break;
+ case QLocale::ShortFormat:
+ queryType = QSystemLocale::DayNameShort;
+ break;
+ case QLocale::NarrowFormat:
+ queryType = QSystemLocale::DayNameNarrow;
+ break;
+ }
+ QVariant res = systemLocale()->query(queryType, day);
if (!res.isNull())
return res.toString();
}
@@ -2830,11 +3240,20 @@ QString QCalendarBackend::standaloneWeekDayName(const QLocale &locale, int day,
return QString();
#ifndef QT_NO_SYSTEMLOCALE
- if (locale.d->m_data == systemData()) {
- QVariant res = systemLocale()->query(format == QLocale::LongFormat
- ? QSystemLocale::DayNameLong
- : QSystemLocale::DayNameShort,
- day);
+ if (locale.d->m_data == &systemLocaleData) {
+ QSystemLocale::QueryType queryType = QSystemLocale::StandaloneDayNameLong;
+ switch (format) {
+ case QLocale::LongFormat:
+ queryType = QSystemLocale::StandaloneDayNameLong;
+ break;
+ case QLocale::ShortFormat:
+ queryType = QSystemLocale::StandaloneDayNameShort;
+ break;
+ case QLocale::NarrowFormat:
+ queryType = QSystemLocale::StandaloneDayNameNarrow;
+ break;
+ }
+ QVariant res = systemLocale()->query(queryType, day);
if (!res.isNull())
return res.toString();
}
@@ -2853,7 +3272,7 @@ QString QCalendarBackend::standaloneWeekDayName(const QLocale &locale, int day,
Qt::DayOfWeek QLocale::firstDayOfWeek() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
const auto res = systemLocale()->query(QSystemLocale::FirstDayOfWeek);
if (!res.isNull())
return static_cast<Qt::DayOfWeek>(res.toUInt());
@@ -2864,10 +3283,10 @@ Qt::DayOfWeek QLocale::firstDayOfWeek() const
QLocale::MeasurementSystem QLocalePrivate::measurementSystem() const
{
- for (int i = 0; i < ImperialMeasurementSystemsCount; ++i) {
- if (ImperialMeasurementSystems[i].languageId == m_data->m_language_id
- && ImperialMeasurementSystems[i].countryId == m_data->m_country_id) {
- return ImperialMeasurementSystems[i].system;
+ for (const auto &system : ImperialMeasurementSystems) {
+ if (system.languageId == m_data->m_language_id
+ && system.territoryId == m_data->m_territory_id) {
+ return system.system;
}
}
return QLocale::MetricSystem;
@@ -2881,7 +3300,7 @@ QLocale::MeasurementSystem QLocalePrivate::measurementSystem() const
QList<Qt::DayOfWeek> QLocale::weekdays() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
auto res
= qvariant_cast<QList<Qt::DayOfWeek> >(systemLocale()->query(QSystemLocale::Weekdays));
if (!res.isEmpty())
@@ -2907,7 +3326,7 @@ QList<Qt::DayOfWeek> QLocale::weekdays() const
QLocale::MeasurementSystem QLocale::measurementSystem() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
const auto res = systemLocale()->query(QSystemLocale::MeasurementSystem);
if (!res.isNull())
return MeasurementSystem(res.toInt());
@@ -2925,34 +3344,34 @@ QLocale::MeasurementSystem QLocale::measurementSystem() const
Qt::LayoutDirection QLocale::textDirection() const
{
switch (script()) {
- case QLocale::AdlamScript:
- case QLocale::ArabicScript:
- case QLocale::AvestanScript:
- case QLocale::CypriotScript:
- case QLocale::HatranScript:
- case QLocale::HebrewScript:
- case QLocale::ImperialAramaicScript:
- case QLocale::InscriptionalPahlaviScript:
- case QLocale::InscriptionalParthianScript:
- case QLocale::KharoshthiScript:
- case QLocale::LydianScript:
- case QLocale::MandaeanScript:
- case QLocale::ManichaeanScript:
- case QLocale::MendeKikakuiScript:
- case QLocale::MeroiticCursiveScript:
- case QLocale::MeroiticScript:
- case QLocale::NabataeanScript:
- case QLocale::NkoScript:
- case QLocale::OldHungarianScript:
- case QLocale::OldNorthArabianScript:
- case QLocale::OldSouthArabianScript:
- case QLocale::OrkhonScript:
- case QLocale::PalmyreneScript:
- case QLocale::PhoenicianScript:
- case QLocale::PsalterPahlaviScript:
- case QLocale::SamaritanScript:
- case QLocale::SyriacScript:
- case QLocale::ThaanaScript:
+ case AdlamScript:
+ case ArabicScript:
+ case AvestanScript:
+ case CypriotScript:
+ case HatranScript:
+ case HebrewScript:
+ case ImperialAramaicScript:
+ case InscriptionalPahlaviScript:
+ case InscriptionalParthianScript:
+ case KharoshthiScript:
+ case LydianScript:
+ case MandaeanScript:
+ case ManichaeanScript:
+ case MendeKikakuiScript:
+ case MeroiticCursiveScript:
+ case MeroiticScript:
+ case NabataeanScript:
+ case NkoScript:
+ case OldHungarianScript:
+ case OldNorthArabianScript:
+ case OldSouthArabianScript:
+ case OrkhonScript:
+ case PalmyreneScript:
+ case PhoenicianScript:
+ case PsalterPahlaviScript:
+ case SamaritanScript:
+ case SyriacScript:
+ case ThaanaScript:
return Qt::RightToLeft;
default:
break;
@@ -3020,7 +3439,7 @@ QString QLocale::toLower(const QString &str) const
QString QLocale::amText() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
auto res = systemLocale()->query(QSystemLocale::AMText).toString();
if (!res.isEmpty())
return res;
@@ -3040,7 +3459,7 @@ QString QLocale::amText() const
QString QLocale::pmText() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
auto res = systemLocale()->query(QSystemLocale::PMText).toString();
if (!res.isEmpty())
return res;
@@ -3085,7 +3504,19 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
day = parts.day;
}
- int i = 0;
+ auto appendToResult = [&](int t, int repeat) {
+ auto data = locale.d->m_data;
+ if (repeat > 1)
+ result.append(data->longLongToString(t, -1, 10, repeat, QLocaleData::ZeroPadded));
+ else
+ result.append(data->longLongToString(t));
+ };
+
+ auto formatType = [](int repeat) {
+ return repeat == 3 ? QLocale::ShortFormat : QLocale::LongFormat;
+ };
+
+ qsizetype i = 0;
while (i < format.size()) {
if (format.at(i).unicode() == '\'') {
result.append(qt_readEscapedFormatString(format, &i));
@@ -3093,7 +3524,9 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
}
const QChar c = format.at(i);
- int repeat = qt_repeatCount(format.mid(i));
+ qsizetype rep = qt_repeatCount(format.mid(i));
+ Q_ASSERT(rep < std::numeric_limits<int>::max());
+ int repeat = int(rep);
bool used = false;
if (formatDate) {
switch (c.unicode()) {
@@ -3105,15 +3538,11 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
repeat = 2;
switch (repeat) {
- case 4: {
- const int len = (year < 0) ? 5 : 4;
- result.append(locale.d->m_data->longLongToString(year, -1, 10, len,
- QLocaleData::ZeroPadded));
+ case 4:
+ appendToResult(year, (year < 0) ? 5 : 4);
break;
- }
case 2:
- result.append(locale.d->m_data->longLongToString(year % 100, -1, 10, 2,
- QLocaleData::ZeroPadded));
+ appendToResult(year % 100, 2);
break;
default:
repeat = 1;
@@ -3125,43 +3554,20 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
case 'M':
used = true;
repeat = qMin(repeat, 4);
- switch (repeat) {
- case 1:
- result.append(locale.d->m_data->longLongToString(month));
- break;
- case 2:
- result.append(locale.d->m_data->longLongToString(month, -1, 10, 2,
- QLocaleData::ZeroPadded));
- break;
- case 3:
- result.append(monthName(locale, month, year, QLocale::ShortFormat));
- break;
- case 4:
- result.append(monthName(locale, month, year, QLocale::LongFormat));
- break;
- }
+ if (repeat <= 2)
+ appendToResult(month, repeat);
+ else
+ result.append(monthName(locale, month, year, formatType(repeat)));
break;
case 'd':
used = true;
repeat = qMin(repeat, 4);
- switch (repeat) {
- case 1:
- result.append(locale.d->m_data->longLongToString(day));
- break;
- case 2:
- result.append(locale.d->m_data->longLongToString(day, -1, 10, 2,
- QLocaleData::ZeroPadded));
- break;
- case 3:
- result.append(locale.dayName(
- dayOfWeek(date.toJulianDay()), QLocale::ShortFormat));
- break;
- case 4:
- result.append(locale.dayName(
- dayOfWeek(date.toJulianDay()), QLocale::LongFormat));
- break;
- }
+ if (repeat <= 2)
+ appendToResult(day, repeat);
+ else
+ result.append(
+ locale.dayName(dayOfWeek(date.toJulianDay()), formatType(repeat)));
break;
default:
@@ -3180,83 +3586,51 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
else if (hour == 0)
hour = 12;
}
-
- switch (repeat) {
- case 1:
- result.append(locale.d->m_data->longLongToString(hour));
- break;
- case 2:
- result.append(locale.d->m_data->longLongToString(hour, -1, 10, 2,
- QLocaleData::ZeroPadded));
- break;
- }
+ appendToResult(hour, repeat);
break;
}
case 'H':
used = true;
repeat = qMin(repeat, 2);
- switch (repeat) {
- case 1:
- result.append(locale.d->m_data->longLongToString(time.hour()));
- break;
- case 2:
- result.append(locale.d->m_data->longLongToString(time.hour(), -1, 10, 2,
- QLocaleData::ZeroPadded));
- break;
- }
+ appendToResult(time.hour(), repeat);
break;
case 'm':
used = true;
repeat = qMin(repeat, 2);
- switch (repeat) {
- case 1:
- result.append(locale.d->m_data->longLongToString(time.minute()));
- break;
- case 2:
- result.append(locale.d->m_data->longLongToString(time.minute(), -1, 10, 2,
- QLocaleData::ZeroPadded));
- break;
- }
+ appendToResult(time.minute(), repeat);
break;
case 's':
used = true;
repeat = qMin(repeat, 2);
- switch (repeat) {
- case 1:
- result.append(locale.d->m_data->longLongToString(time.second()));
- break;
- case 2:
- result.append(locale.d->m_data->longLongToString(time.second(), -1, 10, 2,
- QLocaleData::ZeroPadded));
- break;
- }
- break;
-
- case 'a':
- used = true;
- repeat = format.mid(i + 1).startsWith(QLatin1Char('p')) ? 2 : 1;
- result.append(time.hour() < 12 ? locale.amText().toLower()
- : locale.pmText().toLower());
+ appendToResult(time.second(), repeat);
break;
case 'A':
+ case 'a': {
+ QString text = time.hour() < 12 ? locale.amText() : locale.pmText();
used = true;
- repeat = format.mid(i + 1).startsWith(QLatin1Char('P')) ? 2 : 1;
- result.append(time.hour() < 12 ? locale.amText().toUpper()
- : locale.pmText().toUpper());
+ repeat = 1;
+ if (format.mid(i + 1).startsWith(u'p', Qt::CaseInsensitive))
+ ++repeat;
+ if (c.unicode() == 'A' && (repeat == 1 || format.at(i + 1).unicode() == 'P'))
+ text = std::move(text).toUpper();
+ else if (c.unicode() == 'a' && (repeat == 1 || format.at(i + 1).unicode() == 'p'))
+ text = std::move(text).toLower();
+ // else 'Ap' or 'aP' => use CLDR text verbatim, preserving case
+ result.append(text);
break;
+ }
case 'z':
used = true;
- repeat = (repeat >= 3) ? 3 : 1;
+ repeat = qMin(repeat, 3);
// note: the millisecond component is treated like the decimal part of the seconds
// so ms == 2 is always printed as "002", but ms == 200 can be either "2" or "200"
- result.append(locale.d->m_data->longLongToString(time.msec(), -1, 10, 3,
- QLocaleData::ZeroPadded));
- if (repeat == 1) {
+ appendToResult(time.msec(), 3);
+ if (repeat != 3) {
if (result.endsWith(locale.zeroDigit()))
result.chop(1);
if (result.endsWith(locale.zeroDigit()))
@@ -3264,20 +3638,63 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
}
break;
- case 't':
+ case 't': {
+ enum AbbrType { Long, Offset, Short };
+ const auto tzAbbr = [locale](const QDateTime &when, AbbrType type) {
+#if QT_CONFIG(timezone)
+ if (type != Short || locale != QLocale::system()) {
+ QTimeZone::NameType mode =
+ type == Short ? QTimeZone::ShortName
+ : type == Long ? QTimeZone::LongName : QTimeZone::OffsetName;
+ return when.timeRepresentation().displayName(when, mode, locale);
+ } // else: prefer QDateTime's abbreviation, for backwards-compatibility.
+#endif // else, make do with non-localized abbreviation:
+ if (type != Offset)
+ return when.timeZoneAbbreviation();
+ // For Offset, we can coerce to a UTC-based zone's abbreviation:
+ return when.toOffsetFromUtc(when.offsetFromUtc()).timeZoneAbbreviation();
+ };
used = true;
- repeat = 1;
- // If we have a QDateTime use the time spec otherwise use the current system tzname
- result.append(formatDate ? datetime.timeZoneAbbreviation()
- : QDateTime::currentDateTime().timeZoneAbbreviation());
+ repeat = qMin(repeat, 4);
+ // If we don't have a date-time, use the current system time:
+ const QDateTime when = formatDate ? datetime : QDateTime::currentDateTime();
+ QString text;
+ switch (repeat) {
+ case 4:
+ text = tzAbbr(when, Long);
+ break;
+ case 3: // ±hh:mm
+ case 2: // ±hhmm (we'll remove the ':' at the end)
+ text = tzAbbr(when, Offset);
+ Q_ASSERT(text.startsWith("UTC"_L1)); // Need to strip this.
+ // The Qt::UTC case omits the zero offset:
+ text = (text.size() == 3
+ ? u"+00:00"_s
+ : (text.size() <= 6
+ // Whole-hour offsets may lack the zero minutes:
+ ? QStringView{text}.sliced(3) + ":00"_L1
+ : std::move(text).sliced(3)));
+ if (repeat == 2)
+ text = text.remove(u':');
+ break;
+ default:
+ text = tzAbbr(when, Short);
+ // UTC-offset zones only include minutes if non-zero.
+ if (text.startsWith("UTC"_L1) && text.size() == 6)
+ text += ":00"_L1;
+ break;
+ }
+ if (!text.isEmpty())
+ result.append(text);
break;
+ }
default:
break;
}
}
if (!used)
- result.append(QString(repeat, c));
+ result.resize(result.size() + repeat, c);
i += repeat;
}
@@ -3289,21 +3706,24 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
QString QLocaleData::doubleToString(double d, int precision, DoubleForm form,
int width, unsigned flags) const
{
- // Undocumented: aside from F.P.Shortest, precision < 0 is treated as
- // default, 6 - same as printf().
+ // Although the special handling of F.P.Shortest below is limited to
+ // DFSignificantDigits, the double-conversion library does treat it
+ // specially for the other forms, shedding trailing zeros for DFDecimal and
+ // using the shortest mantissa that faithfully represents the value for
+ // DFExponent.
if (precision != QLocale::FloatingPointShortest && precision < 0)
precision = 6;
if (width < 0)
width = 0;
int decpt;
- int bufSize = 1;
+ qsizetype bufSize = 1;
if (precision == QLocale::FloatingPointShortest)
bufSize += std::numeric_limits<double>::max_digits10;
- else if (form == DFDecimal)
+ else if (form == DFDecimal && qt_is_finite(d))
bufSize += wholePartSpace(qAbs(d)) + precision;
- else // Add extra digit due to different interpretations of precision. Also, "nan" has to fit.
- bufSize += qMax(2, precision) + 1;
+ else // Add extra digit due to different interpretations of precision.
+ bufSize += qMax(2, precision) + 1; // Must also be big enough for "nan" or "inf"
QVarLengthArray<char> buf(bufSize);
int length;
@@ -3313,7 +3733,8 @@ QString QLocaleData::doubleToString(double d, int precision, DoubleForm form,
const QString prefix = signPrefix(negative && !isZero(d), flags);
QString numStr;
- if (qstrncmp(buf.data(), "inf", 3) == 0 || qstrncmp(buf.data(), "nan", 3) == 0) {
+ if (length == 3
+ && (qstrncmp(buf.data(), "inf", 3) == 0 || qstrncmp(buf.data(), "nan", 3) == 0)) {
numStr = QString::fromLatin1(buf.data(), length);
} else { // Handle finite values
const QString zero = zeroDigit();
@@ -3321,12 +3742,14 @@ QString QLocaleData::doubleToString(double d, int precision, DoubleForm form,
if (zero == u"0") {
// No need to convert digits.
+ Q_ASSERT(std::all_of(buf.cbegin(), buf.cbegin() + length, isAsciiDigit));
+ // That check is taken care of in unicodeForDigits, below.
} else if (zero.size() == 2 && zero.at(0).isHighSurrogate()) {
- const uint zeroUcs4 = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
+ const char32_t zeroUcs4 = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
QString converted;
converted.reserve(2 * digits.size());
- for (int i = 0; i < digits.length(); ++i) {
- const char32_t digit = unicodeForDigit(digits.at(i).unicode() - '0', zeroUcs4);
+ for (QChar ch : std::as_const(digits)) {
+ const char32_t digit = unicodeForDigit(ch.unicode() - '0', zeroUcs4);
Q_ASSERT(QChar::requiresSurrogates(digit));
converted.append(QChar::highSurrogate(digit));
converted.append(QChar::lowSurrogate(digit));
@@ -3337,7 +3760,7 @@ QString QLocaleData::doubleToString(double d, int precision, DoubleForm form,
Q_ASSERT(!zero.at(0).isSurrogate());
char16_t z = zero.at(0).unicode();
char16_t *const value = reinterpret_cast<char16_t *>(digits.data());
- for (int i = 0; i < digits.length(); ++i)
+ for (qsizetype i = 0; i < digits.size(); ++i)
value[i] = unicodeForDigit(value[i] - '0', z);
}
@@ -3345,81 +3768,78 @@ QString QLocaleData::doubleToString(double d, int precision, DoubleForm form,
const bool groupDigits = flags & GroupDigits;
const int minExponentDigits = flags & ZeroPadExponent ? 2 : 1;
switch (form) {
- case DFExponent:
- numStr = exponentForm(std::move(digits), decpt, precision, PMDecimalDigits,
- mustMarkDecimal, minExponentDigits);
- break;
- case DFDecimal:
- numStr = decimalForm(std::move(digits), decpt, precision, PMDecimalDigits,
- mustMarkDecimal, groupDigits);
- break;
- case DFSignificantDigits: {
- PrecisionMode mode = (flags & AddTrailingZeroes) ?
- PMSignificantDigits : PMChopTrailingZeros;
-
- /* POSIX specifies sprintf() to follow fprintf(), whose 'g/G'
- format says; with P = 6 if precision unspecified else 1 if
- precision is 0 else precision; when 'e/E' would have exponent
- X, use:
- * 'f/F' if P > X >= -4, with precision P-1-X
- * 'e/E' otherwise, with precision P-1
- Helpfully, we already have mapped precision < 0 to 6 - except
- for F.P.Shortest mode, which is its own story - and those of
- our callers with unspecified precision either used 6 or -1
- for it.
- */
- bool useDecimal;
- if (precision == QLocale::FloatingPointShortest) {
- // Find out which representation is shorter.
- // Set bias to everything added to exponent form but not
- // decimal, minus the converse.
-
- // Exponent adds separator, sign and digits:
- int bias = 2 + minExponentDigits;
- // Decimal form may get grouping separators inserted:
- if (groupDigits && decpt >= m_grouping_top + m_grouping_least)
- bias -= (decpt - m_grouping_top - m_grouping_least) / m_grouping_higher + 1;
- // X = decpt - 1 needs two digits if decpt > 10:
- if (decpt > 10 && minExponentDigits == 1)
- ++bias;
- // Assume digitCount < 95, so we can ignore the 3-digit
- // exponent case (we'll set useDecimal false anyway).
-
- const int digitCount = digits.length() / zero.size();
- if (!mustMarkDecimal) {
- // Decimal separator is skipped if at end; adjust if
- // that happens for only one form:
- if (digitCount <= decpt && digitCount > 1)
- ++bias; // decimal but not exponent
- else if (digitCount == 1 && decpt <= 0)
- --bias; // exponent but not decimal
- }
- // When 0 < decpt <= digitCount, the forms have equal digit
- // counts, plus things bias has taken into account;
- // otherwise decimal form's digit count is right-padded with
- // zeros to decpt, when decpt is positive, otherwise it's
- // left-padded with 1 - decpt zeros.
- useDecimal = (decpt <= 0 ? 1 - decpt <= bias
- : decpt <= digitCount ? 0 <= bias
- : decpt <= digitCount + bias);
- } else {
- // X == decpt - 1, POSIX's P; -4 <= X < P iff -4 < decpt <= P
- Q_ASSERT(precision >= 0);
- useDecimal = decpt > -4 && decpt <= (precision ? precision : 1);
+ case DFExponent:
+ numStr = exponentForm(std::move(digits), decpt, precision, PMDecimalDigits,
+ mustMarkDecimal, minExponentDigits);
+ break;
+ case DFDecimal:
+ numStr = decimalForm(std::move(digits), decpt, precision, PMDecimalDigits,
+ mustMarkDecimal, groupDigits);
+ break;
+ case DFSignificantDigits: {
+ PrecisionMode mode
+ = (flags & AddTrailingZeroes) ? PMSignificantDigits : PMChopTrailingZeros;
+
+ /* POSIX specifies sprintf() to follow fprintf(), whose 'g/G' format
+ says; with P = 6 if precision unspecified else 1 if precision is
+ 0 else precision; when 'e/E' would have exponent X, use:
+ * 'f/F' if P > X >= -4, with precision P-1-X
+ * 'e/E' otherwise, with precision P-1
+ Helpfully, we already have mapped precision < 0 to 6 - except for
+ F.P.Shortest mode, which is its own story - and those of our
+ callers with unspecified precision either used 6 or -1 for it.
+ */
+ bool useDecimal;
+ if (precision == QLocale::FloatingPointShortest) {
+ // Find out which representation is shorter.
+ // Set bias to everything added to exponent form but not
+ // decimal, minus the converse.
+
+ // Exponent adds separator, sign and digits:
+ int bias = 2 + minExponentDigits;
+ // Decimal form may get grouping separators inserted:
+ if (groupDigits && decpt >= m_grouping_top + m_grouping_least)
+ bias -= (decpt - m_grouping_least) / m_grouping_higher + 1;
+ // X = decpt - 1 needs two digits if decpt > 10:
+ if (decpt > 10 && minExponentDigits == 1)
+ ++bias;
+ // Assume digitCount < 95, so we can ignore the 3-digit
+ // exponent case (we'll set useDecimal false anyway).
+
+ const qsizetype digitCount = digits.size() / zero.size();
+ if (!mustMarkDecimal) {
+ // Decimal separator is skipped if at end; adjust if
+ // that happens for only one form:
+ if (digitCount <= decpt && digitCount > 1)
+ ++bias; // decimal but not exponent
+ else if (digitCount == 1 && decpt <= 0)
+ --bias; // exponent but not decimal
}
-
- numStr = useDecimal
- ? decimalForm(std::move(digits), decpt, precision, mode,
- mustMarkDecimal, groupDigits)
- : exponentForm(std::move(digits), decpt, precision, mode,
- mustMarkDecimal, minExponentDigits);
- break;
+ // When 0 < decpt <= digitCount, the forms have equal digit
+ // counts, plus things bias has taken into account; otherwise
+ // decimal form's digit count is right-padded with zeros to
+ // decpt, when decpt is positive, otherwise it's left-padded
+ // with 1 - decpt zeros.
+ useDecimal = (decpt <= 0 ? 1 - decpt <= bias
+ : decpt <= digitCount ? 0 <= bias : decpt <= digitCount + bias);
+ } else {
+ // X == decpt - 1, POSIX's P; -4 <= X < P iff -4 < decpt <= P
+ Q_ASSERT(precision >= 0);
+ useDecimal = decpt > -4 && decpt <= (precision ? precision : 1);
}
+
+ numStr = useDecimal
+ ? decimalForm(std::move(digits), decpt, precision, mode,
+ mustMarkDecimal, groupDigits)
+ : exponentForm(std::move(digits), decpt, precision, mode,
+ mustMarkDecimal, minExponentDigits);
+ break;
+ }
}
// Pad with zeros. LeftAdjusted overrides ZeroPadded.
if (flags & ZeroPadded && !(flags & LeftAdjusted)) {
- for (int i = numStr.length() / zero.length() + prefix.size(); i < width; ++i)
+ for (qsizetype i = numStr.size() / zero.size() + prefix.size(); i < width; ++i)
numStr.prepend(zero);
}
}
@@ -3442,33 +3862,33 @@ QString QLocaleData::decimalForm(QString &&digits, int decpt, int precision,
for (; decpt < 0; ++decpt)
digits.prepend(zero);
} else {
- for (int i = digits.length() / digitWidth; i < decpt; ++i)
+ for (qsizetype i = digits.size() / digitWidth; i < decpt; ++i)
digits.append(zero);
}
switch (pm) {
case PMDecimalDigits:
- for (int i = digits.length() / digitWidth - decpt; i < precision; ++i)
+ for (qsizetype i = digits.size() / digitWidth - decpt; i < precision; ++i)
digits.append(zero);
break;
case PMSignificantDigits:
- for (int i = digits.length() / digitWidth; i < precision; ++i)
+ for (qsizetype i = digits.size() / digitWidth; i < precision; ++i)
digits.append(zero);
break;
case PMChopTrailingZeros:
- Q_ASSERT(digits.length() / digitWidth <= qMax(decpt, 1) || !digits.endsWith(zero));
+ Q_ASSERT(digits.size() / digitWidth <= qMax(decpt, 1) || !digits.endsWith(zero));
break;
}
- if (mustMarkDecimal || decpt < digits.length() / digitWidth)
+ if (mustMarkDecimal || decpt < digits.size() / digitWidth)
digits.insert(decpt * digitWidth, decimalPoint());
if (groupDigits) {
const QString group = groupSeparator();
- int i = decpt - m_grouping_least;
+ qsizetype i = decpt - m_grouping_least;
if (i >= m_grouping_top) {
digits.insert(i * digitWidth, group);
- while ((i -= m_grouping_higher) >= m_grouping_top)
+ while ((i -= m_grouping_higher) > 0)
digits.insert(i * digitWidth, group);
}
}
@@ -3490,19 +3910,19 @@ QString QLocaleData::exponentForm(QString &&digits, int decpt, int precision,
switch (pm) {
case PMDecimalDigits:
- for (int i = digits.length() / digitWidth; i < precision + 1; ++i)
+ for (qsizetype i = digits.size() / digitWidth; i < precision + 1; ++i)
digits.append(zero);
break;
case PMSignificantDigits:
- for (int i = digits.length() / digitWidth; i < precision; ++i)
+ for (qsizetype i = digits.size() / digitWidth; i < precision; ++i)
digits.append(zero);
break;
case PMChopTrailingZeros:
- Q_ASSERT(digits.length() / digitWidth <= 1 || !digits.endsWith(zero));
+ Q_ASSERT(digits.size() / digitWidth <= 1 || !digits.endsWith(zero));
break;
}
- if (mustMarkDecimal || digits.length() > digitWidth)
+ if (mustMarkDecimal || digits.size() > digitWidth)
digits.insert(digitWidth, decimalPoint());
digits.append(exponentSeparator());
@@ -3522,26 +3942,17 @@ QString QLocaleData::signPrefix(bool negative, unsigned flags) const
return {};
}
-QString QLocaleData::longLongToString(qlonglong l, int precision,
+QString QLocaleData::longLongToString(qlonglong n, int precision,
int base, int width, unsigned flags) const
{
- bool negative = l < 0;
- if (base != 10) {
- // these are not supported by sprintf for octal and hex
- flags &= ~AlwaysShowSign;
- flags &= ~BlankBeforePositive;
- negative = false; // neither are negative numbers
- }
+ bool negative = n < 0;
-QT_WARNING_PUSH
- /* "unary minus operator applied to unsigned type, result still unsigned" */
-QT_WARNING_DISABLE_MSVC(4146)
/*
Negating std::numeric_limits<qlonglong>::min() hits undefined behavior, so
- taking an absolute value has to cast to unsigned to change sign.
+ taking an absolute value has to take a slight detour.
*/
- QString numStr = qulltoa(negative ? -qulonglong(l) : qulonglong(l), base, zeroDigit());
-QT_WARNING_POP
+ QString numStr = qulltoa(negative ? 1u + qulonglong(-(n + 1)) : qulonglong(n),
+ base, zeroDigit());
return applyIntegerFormatting(std::move(numStr), negative, precision, base, width, flags);
}
@@ -3560,9 +3971,9 @@ QString QLocaleData::applyIntegerFormatting(QString &&numStr, bool negative, int
{
const QString zero = base == 10 ? zeroDigit() : QStringLiteral("0");
const auto digitWidth = zero.size();
- const auto digitCount = numStr.length() / digitWidth;
+ const auto digitCount = numStr.size() / digitWidth;
- const auto basePrefix = [numStr, zero, base, flags] () -> QStringView {
+ const auto basePrefix = [&] () -> QStringView {
if (flags & ShowBase) {
const bool upper = flags & UppercaseBase;
if (base == 16)
@@ -3573,19 +3984,19 @@ QString QLocaleData::applyIntegerFormatting(QString &&numStr, bool negative, int
return zero;
}
return {};
- };
+ }();
- const QString prefix = signPrefix(negative, flags) + basePrefix();
+ const QString prefix = signPrefix(negative, flags) + basePrefix;
// Count how much of width we've used up. Each digit counts as one
- int usedWidth = digitCount + prefix.size();
+ qsizetype usedWidth = digitCount + prefix.size();
if (base == 10 && flags & GroupDigits) {
const QString group = groupSeparator();
- int i = digitCount - m_grouping_least;
+ qsizetype i = digitCount - m_grouping_least;
if (i >= m_grouping_top) {
numStr.insert(i * digitWidth, group);
++usedWidth;
- while ((i -= m_grouping_higher) >= m_grouping_top) {
+ while ((i -= m_grouping_higher) > 0) {
numStr.insert(i * digitWidth, group);
++usedWidth;
}
@@ -3597,7 +4008,7 @@ QString QLocaleData::applyIntegerFormatting(QString &&numStr, bool negative, int
if (noPrecision)
precision = 1;
- for (int i = numStr.length(); i < precision; ++i) {
+ for (qsizetype i = numStr.size(); i < precision; ++i) {
numStr.prepend(zero);
usedWidth++;
}
@@ -3605,57 +4016,269 @@ QString QLocaleData::applyIntegerFormatting(QString &&numStr, bool negative, int
// LeftAdjusted overrides ZeroPadded; and sprintf() only pads when
// precision is not specified in the format string.
if (noPrecision && flags & ZeroPadded && !(flags & LeftAdjusted)) {
- for (int i = usedWidth; i < width; ++i)
+ for (qsizetype i = usedWidth; i < width; ++i)
numStr.prepend(zero);
}
- return prefix + (flags & CapitalEorX ? std::move(numStr).toUpper() : numStr);
+ QString result(flags & CapitalEorX ? std::move(numStr).toUpper() : std::move(numStr));
+ if (prefix.size())
+ result.prepend(prefix);
+ return result;
+}
+
+inline QLocaleData::NumericData QLocaleData::numericData(QLocaleData::NumberMode mode) const
+{
+ NumericData result;
+ if (this == c()) {
+ result.isC = true;
+ return result;
+ }
+ result.setZero(zero().viewData(single_character_data));
+ result.group = groupDelim().viewData(single_character_data);
+ // Note: minus, plus and exponent might not actually be single characters.
+ result.minus = minus().viewData(single_character_data);
+ result.plus = plus().viewData(single_character_data);
+ if (mode != IntegerMode)
+ result.decimal = decimalSeparator().viewData(single_character_data);
+ if (mode == DoubleScientificMode) {
+ result.exponent = exponential().viewData(single_character_data);
+ // exponentCyrillic means "apply the Cyrrilic-specific exponent hack"
+ result.exponentCyrillic = m_script_id == QLocale::CyrillicScript;
+ }
+#ifndef QT_NO_SYSTEMLOCALE
+ if (this == &systemLocaleData) {
+ const auto getString = [sys = systemLocale()](QSystemLocale::QueryType query) {
+ return sys->query(query).toString();
+ };
+ if (mode != IntegerMode) {
+ result.sysDecimal = getString(QSystemLocale::DecimalPoint);
+ if (result.sysDecimal.size())
+ result.decimal = QStringView{result.sysDecimal};
+ }
+ result.sysGroup = getString(QSystemLocale::GroupSeparator);
+ if (result.sysGroup.size())
+ result.group = QStringView{result.sysGroup};
+ result.sysMinus = getString(QSystemLocale::NegativeSign);
+ if (result.sysMinus.size())
+ result.minus = QStringView{result.sysMinus};
+ result.sysPlus = getString(QSystemLocale::PositiveSign);
+ if (result.sysPlus.size())
+ result.plus = QStringView{result.sysPlus};
+ result.setZero(getString(QSystemLocale::ZeroDigit));
+ }
+#endif
+
+ return result;
+}
+
+namespace {
+// A bit like QStringIterator but rather specialized ... and some of the tokens
+// it recognizes aren't single Unicode code-points (but it does map each to a
+// single character).
+class NumericTokenizer
+{
+ // TODO: use deterministic finite-state-automata.
+ // TODO QTBUG-95460: CLDR has Inf/NaN representations per locale.
+ static constexpr char lettersInfNaN[] = "afin"; // Letters of Inf, NaN
+ static constexpr auto matchInfNaN = QtPrivate::makeCharacterSetMatch<lettersInfNaN>();
+ const QStringView m_text;
+ const QLocaleData::NumericData m_guide;
+ qsizetype m_index = 0;
+ const QLocaleData::NumberMode m_mode;
+ static_assert('+' + 1 == ',' && ',' + 1 == '-' && '-' + 1 == '.');
+ char lastMark; // C locale accepts '+' through lastMark.
+public:
+ NumericTokenizer(QStringView text, QLocaleData::NumericData &&guide,
+ QLocaleData::NumberMode mode)
+ : m_text(text), m_guide(guide), m_mode(mode),
+ lastMark(mode == QLocaleData::IntegerMode ? '-' : '.')
+ {
+ Q_ASSERT(m_guide.isValid(mode));
+ }
+ bool done() const { return !(m_index < m_text.size()); }
+ qsizetype index() const { return m_index; }
+ inline int asBmpDigit(char16_t digit) const;
+ char nextToken();
+};
+
+int NumericTokenizer::asBmpDigit(char16_t digit) const
+{
+ // If digit *is* a digit, result will be in range 0 through 9; otherwise not.
+ // Must match qlocale_tools.h's unicodeForDigit()
+ if (m_guide.zeroUcs != u'\u3007' || digit == m_guide.zeroUcs)
+ return digit - m_guide.zeroUcs;
+
+ // QTBUG-85409: Suzhou's digits aren't contiguous !
+ if (digit == u'\u3020') // U+3020 POSTAL MARK FACE is not a digit.
+ return -1;
+ // ... but is followed by digits 1 through 9.
+ return digit - u'\u3020';
+}
+
+char NumericTokenizer::nextToken()
+{
+ // As long as caller stops iterating on a zero return, those don't need to
+ // keep m_index correctly updated.
+ Q_ASSERT(!done());
+ // Mauls non-letters above 'Z' but we don't care:
+ const auto asciiLower = [](unsigned char c) { return c >= 'A' ? c | 0x20 : c; };
+ const QStringView tail = m_text.sliced(m_index);
+ const QChar ch = tail.front();
+ if (ch == u'\u2212') {
+ // Special case: match the "proper" minus sign, for all locales.
+ ++m_index;
+ return '-';
+ }
+ if (m_guide.isC) {
+ // "Conversion" to C locale is just a filter:
+ ++m_index;
+ if (Q_LIKELY(ch.unicode() < 256)) {
+ unsigned char ascii = asciiLower(ch.toLatin1());
+ if (Q_LIKELY(isAsciiDigit(ascii) || ('+' <= ascii && ascii <= lastMark)
+ // No caller presently (6.5) passes DoubleStandardMode,
+ // so !IntegerMode implies scientific, for now.
+ || (m_mode != QLocaleData::IntegerMode
+ && matchInfNaN.matches(ascii))
+ || (m_mode == QLocaleData::DoubleScientificMode
+ && ascii == 'e'))) {
+ return ascii;
+ }
+ }
+ return 0;
+ }
+ if (ch.unicode() < 256) {
+ // Accept the C locale's digits and signs in all locales:
+ char ascii = asciiLower(ch.toLatin1());
+ if (isAsciiDigit(ascii) || ascii == '-' || ascii == '+'
+ // Also its Inf and NaN letters:
+ || (m_mode != QLocaleData::IntegerMode && matchInfNaN.matches(ascii))) {
+ ++m_index;
+ return ascii;
+ }
+ }
+
+ // Other locales may be trickier:
+ if (tail.startsWith(m_guide.minus)) {
+ m_index += m_guide.minus.size();
+ return '-';
+ }
+ if (tail.startsWith(m_guide.plus)) {
+ m_index += m_guide.plus.size();
+ return '+';
+ }
+ if (!m_guide.group.isEmpty() && tail.startsWith(m_guide.group)) {
+ m_index += m_guide.group.size();
+ return ',';
+ }
+ if (m_mode != QLocaleData::IntegerMode && tail.startsWith(m_guide.decimal)) {
+ m_index += m_guide.decimal.size();
+ return '.';
+ }
+ if (m_mode == QLocaleData::DoubleScientificMode
+ && tail.startsWith(m_guide.exponent, Qt::CaseInsensitive)) {
+ m_index += m_guide.exponent.size();
+ return 'e';
+ }
+
+ // Must match qlocale_tools.h's unicodeForDigit()
+ if (m_guide.zeroLen == 1) {
+ if (!ch.isSurrogate()) {
+ const uint gap = asBmpDigit(ch.unicode());
+ if (gap < 10u) {
+ ++m_index;
+ return '0' + gap;
+ }
+ } else if (ch.isHighSurrogate() && tail.size() > 1 && tail.at(1).isLowSurrogate()) {
+ return 0;
+ }
+ } else if (ch.isHighSurrogate()) {
+ // None of the corner cases below matches a surrogate, so (update
+ // already and) return early if we don't have a digit.
+ if (tail.size() > 1) {
+ QChar low = tail.at(1);
+ if (low.isLowSurrogate()) {
+ m_index += 2;
+ const uint gap = QChar::surrogateToUcs4(ch, low) - m_guide.zeroUcs;
+ return gap < 10u ? '0' + gap : 0;
+ }
+ }
+ return 0;
+ }
+
+ // All cases where tail starts with properly-matched surrogate pair
+ // have been handled by this point.
+ Q_ASSERT(!(ch.isHighSurrogate() && tail.size() > 1 && tail.at(1).isLowSurrogate()));
+
+ // Weird corner cases follow (code above assumes these match no surrogates).
+
+ // Some locales use a non-breaking space (U+00A0) or its thin version
+ // (U+202f) for grouping. These look like spaces, so people (and thus some
+ // of our tests) use a regular space instead and complain if it doesn't
+ // work.
+ // Should this be extended generally to any case where group is a space ?
+ if ((m_guide.group == u"\u00a0" || m_guide.group == u"\u202f") && tail.startsWith(u' ')) {
+ ++m_index;
+ return ',';
+ }
+
+ // Cyrillic has its own E, used by Ukrainian as exponent; but others
+ // writing Cyrillic may well use that; and Ukrainians might well use E.
+ // All other Cyrillic locales (officially) use plain ASCII E.
+ if (m_guide.exponentCyrillic // Only true in scientific float mode.
+ && (tail.startsWith(u"\u0415", Qt::CaseInsensitive)
+ || tail.startsWith(u"E", Qt::CaseInsensitive))) {
+ ++m_index;
+ return 'e';
+ }
+
+ return 0;
}
+} // namespace with no name
/*
- Converts a number in locale to its representation in the C locale.
- Only has to guarantee that a string that is a correct representation of
- a number will be converted. If junk is passed in, junk will be passed
- out and the error will be detected during the actual conversion to a
- number. We can't detect junk here, since we don't even know the base
- of the number.
+ Converts a number in locale representation to the C locale equivalent.
+
+ Only has to guarantee that a string that is a correct representation of a
+ number will be converted. Checks signs, separators and digits appear in all
+ the places they should, and nowhere else.
+
+ Returns true precisely if the number appears to be well-formed, modulo
+ things a parser for C Locale strings (without digit-grouping separators;
+ they're stripped) will catch. When it returns true, it records (and
+ '\0'-terminates) the C locale representation in *result.
+
+ Note: only QString integer-parsing methods have a base parameter (hence need
+ to cope with letters as possible digits); but these are now all routed via
+ byteArrayToU?LongLong(), so no longer come via here. The QLocale
+ number-parsers only work in decimal, so don't have to cope with any digits
+ other than 0 through 9.
*/
bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_options,
- CharBuff *result) const
+ NumberMode mode, CharBuff *result) const
{
s = s.trimmed();
if (s.size() < 1)
return false;
+ NumericTokenizer tokens(s, numericData(mode), mode);
+
+ // Digit-grouping details (all modes):
+ qsizetype digitsInGroup = 0;
+ qsizetype last_separator_idx = -1;
+ qsizetype start_of_digits_idx = -1;
+
+ // Floating-point details (non-integer modes):
+ qsizetype decpt_idx = -1;
+ qsizetype exponent_idx = -1;
+
+ char last = '\0';
+ while (!tokens.done()) {
+ qsizetype idx = tokens.index(); // before nextToken() advances
+ char out = tokens.nextToken();
+ if (out == 0)
+ return false;
+ Q_ASSERT(tokens.index() > idx); // it always *should* advance (except on zero return)
- const QChar *uc = s.data();
- auto length = s.size();
- decltype(length) idx = 0;
-
- int digitsInGroup = 0;
- int group_cnt = 0; // counts number of group chars
- int decpt_idx = -1;
- int last_separator_idx = -1;
- int start_of_digits_idx = -1;
- int exponent_idx = -1;
-
- while (idx < length) {
- const QStringView in = QStringView(uc + idx, uc[idx].isHighSurrogate() ? 2 : 1);
-
- char out = numericToCLocale(in);
- if (out == 0) {
- const QChar simple = in.size() == 1 ? in.front() : QChar::Null;
- if (in == listSeparator())
- out = ';';
- else if (in == percentSign())
- out = '%';
- // for handling base-x numbers
- else if (simple.toLatin1() >= 'A' && simple.toLatin1() <= 'Z')
- out = simple.toLower().toLatin1();
- else if (simple.toLatin1() >= 'a' && simple.toLatin1() <= 'z')
- out = simple.toLatin1();
- else
- break;
- } else if (out == '.') {
+ if (out == '.') {
// Fail if more than one decimal point or point after e
if (decpt_idx != -1 || exponent_idx != -1)
return false;
@@ -3664,26 +4287,26 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
exponent_idx = idx;
}
- if (number_options & QLocale::RejectLeadingZeroInExponent) {
- if (exponent_idx != -1 && out == '0' && idx < length - 1) {
- // After the exponent there can only be '+', '-' or digits.
- // If we find a '0' directly after some non-digit, then that is a leading zero.
- if (result->last() < '0' || result->last() > '9')
- return false;
- }
+ if (number_options.testFlag(QLocale::RejectLeadingZeroInExponent)
+ && exponent_idx != -1 && out == '0') {
+ // After the exponent there can only be '+', '-' or digits.
+ // If we find a '0' directly after some non-digit, then that is a
+ // leading zero, acceptable only if it is the whole exponent.
+ if (!tokens.done() && !isAsciiDigit(last))
+ return false;
}
- if (number_options & QLocale::RejectTrailingZeroesAfterDot) {
- // If we've seen a decimal point and the last character after the exponent is 0, then
- // that is a trailing zero.
- if (decpt_idx >= 0 && idx == exponent_idx && result->last() == '0')
- return false;
+ if (number_options.testFlag(QLocale::RejectTrailingZeroesAfterDot) && decpt_idx >= 0) {
+ // In a fractional part, a 0 just before the exponent is trailing:
+ if (idx == exponent_idx && last == '0')
+ return false;
}
- if (!(number_options & QLocale::RejectGroupSeparator)) {
- if (start_of_digits_idx == -1 && out >= '0' && out <= '9') {
- start_of_digits_idx = idx;
- digitsInGroup++;
+ if (!number_options.testFlag(QLocale::RejectGroupSeparator)) {
+ if (isAsciiDigit(out)) {
+ if (start_of_digits_idx == -1)
+ start_of_digits_idx = idx;
+ ++digitsInGroup;
} else if (out == ',') {
// Don't allow group chars after the decimal point or exponent
if (decpt_idx != -1 || exponent_idx != -1)
@@ -3692,7 +4315,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
if (last_separator_idx == -1) {
// Check distance from the beginning of the digits:
if (start_of_digits_idx == -1 || m_grouping_top > digitsInGroup
- || digitsInGroup >= m_grouping_higher + m_grouping_top) {
+ || digitsInGroup >= m_grouping_least + m_grouping_top) {
return false;
}
} else {
@@ -3702,262 +4325,208 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
}
last_separator_idx = idx;
- ++group_cnt;
digitsInGroup = 0;
-
- // don't add the group separator
- idx += in.size();
- continue;
- } else if (out == '.' || idx == exponent_idx) {
- // Were there enough digits since the last separator?
- if (last_separator_idx != -1 && digitsInGroup != m_grouping_least)
+ } else if (mode != IntegerMode && (out == '.' || idx == exponent_idx)
+ && last_separator_idx != -1) {
+ // Were there enough digits since the last group separator?
+ if (digitsInGroup != m_grouping_least)
return false;
- // If we saw no separator, should we fail if
- // digitsInGroup > m_grouping_top + m_grouping_least ?
// stop processing separators
last_separator_idx = -1;
- } else if (out >= '0' && out <= '9') {
- digitsInGroup++;
}
+ } else if (out == ',') {
+ return false;
}
- result->append(out);
- idx += in.size();
+ last = out;
+ if (out != ',') // Leave group separators out of the result.
+ result->append(out);
}
- if (!(number_options & QLocale::RejectGroupSeparator)) {
- // group separator post-processing
- // did we end in a separator?
- if (last_separator_idx + 1 == idx)
- return false;
- // Were there enough digits since the last separator?
- if (last_separator_idx != -1 && digitsInGroup != m_grouping_least)
+ if (!number_options.testFlag(QLocale::RejectGroupSeparator) && last_separator_idx != -1) {
+ // Were there enough digits since the last group separator?
+ if (digitsInGroup != m_grouping_least)
return false;
- // If we saw no separator, and no decimal point, should we fail if
- // digitsInGroup > m_grouping_top + m_grouping_least ?
}
- if (number_options & QLocale::RejectTrailingZeroesAfterDot) {
- // In decimal form, the last character can be a trailing zero if we've seen a decpt.
- if (decpt_idx != -1 && exponent_idx == -1 && result->last() == '0')
+ if (number_options.testFlag(QLocale::RejectTrailingZeroesAfterDot)
+ && decpt_idx != -1 && exponent_idx == -1) {
+ // In the fractional part, a final zero is trailing:
+ if (last == '0')
return false;
}
result->append('\0');
- return idx == length;
+ return true;
}
-bool QLocaleData::validateChars(QStringView str, NumberMode numMode, QByteArray *buff,
- int decDigits, QLocale::NumberOptions number_options) const
+ParsingResult
+QLocaleData::validateChars(QStringView str, NumberMode numMode, int decDigits,
+ QLocale::NumberOptions number_options) const
{
- buff->clear();
- buff->reserve(str.length());
+ ParsingResult result;
+ result.buff.reserve(str.size());
+ enum { Whole, Fractional, Exponent } state = Whole;
const bool scientific = numMode == DoubleScientificMode;
- bool lastWasE = false;
- bool lastWasDigit = false;
- int eCnt = 0;
- int decPointCnt = 0;
- bool dec = false;
- int decDigitCnt = 0;
-
- for (qsizetype i = 0; i < str.size();) {
- const QStringView in = str.mid(i, str.at(i).isHighSurrogate() ? 2 : 1);
- char c = numericToCLocale(in);
-
- if (c >= '0' && c <= '9') {
- if (numMode != IntegerMode) {
- // If a double has too many digits after decpt, it shall be Invalid.
- if (dec && decDigits != -1 && decDigits < ++decDigitCnt)
- return false;
- }
+ NumericTokenizer tokens(str, numericData(numMode), numMode);
+ char last = '\0';
- // The only non-digit character after the 'e' can be '+' or '-'.
- // If a zero is directly after that, then the exponent is zero-padded.
- if ((number_options & QLocale::RejectLeadingZeroInExponent)
- && c == '0' && eCnt > 0 && !lastWasDigit) {
- return false;
+ while (!tokens.done()) {
+ char c = tokens.nextToken();
+
+ if (isAsciiDigit(c)) {
+ switch (state) {
+ case Whole:
+ // Nothing special to do (unless we want to check grouping sizes).
+ break;
+ case Fractional:
+ // If a double has too many digits in its fractional part it is Invalid.
+ if (decDigits-- == 0)
+ return {};
+ break;
+ case Exponent:
+ if (!isAsciiDigit(last)) {
+ // This is the first digit in the exponent (there may have beena '+'
+ // or '-' in before). If it's a zero, the exponent is zero-padded.
+ if (c == '0' && (number_options & QLocale::RejectLeadingZeroInExponent))
+ return {};
+ }
+ break;
}
- lastWasDigit = true;
} else {
switch (c) {
- case '.':
- if (numMode == IntegerMode) {
- // If an integer has a decimal point, it shall be Invalid.
- return false;
- } else {
- // If a double has more than one decimal point, it shall be Invalid.
- if (++decPointCnt > 1)
- return false;
-#if 0
- // If a double with no decimal digits has a decimal point, it shall be
- // Invalid.
- if (decDigits == 0)
- return false;
-#endif // On second thoughts, it shall be Valid.
-
- dec = true;
- }
- break;
+ case '.':
+ // If an integer has a decimal point, it is Invalid.
+ // A double can only have one, at the end of its whole-number part.
+ if (numMode == IntegerMode || state != Whole)
+ return {};
+ // Even when decDigits is 0, we do allow the decimal point to be
+ // present - just as long as no digits follow it.
+
+ state = Fractional;
+ break;
- case '+':
- case '-':
- if (scientific) {
- // If a scientific has a sign that's not at the beginning or after
- // an 'e', it shall be Invalid.
- if (i != 0 && !lastWasE)
- return false;
- } else {
- // If a non-scientific has a sign that's not at the beginning,
- // it shall be Invalid.
- if (i != 0)
- return false;
- }
- break;
+ case '+':
+ case '-':
+ // A sign can only appear at the start or after the e of scientific:
+ if (last != '\0' && !(scientific && last == 'e'))
+ return {};
+ break;
- case ',':
- //it can only be placed after a digit which is before the decimal point
- if ((number_options & QLocale::RejectGroupSeparator) || !lastWasDigit ||
- decPointCnt > 0)
- return false;
- break;
+ case ',':
+ // Grouping is only allowed after a digit in the whole-number portion:
+ if ((number_options & QLocale::RejectGroupSeparator) || state != Whole
+ || !isAsciiDigit(last)) {
+ return {};
+ }
+ // We could check grouping sizes are correct, but fixup()s are
+ // probably better off correcting any misplacement instead.
+ break;
- case 'e':
- if (scientific) {
- // If a scientific has more than one 'e', it shall be Invalid.
- if (++eCnt > 1)
- return false;
- dec = false;
- } else {
- // If a non-scientific has an 'e', it shall be Invalid.
- return false;
- }
- break;
+ case 'e':
+ // Only one e is allowed and only in scientific:
+ if (!scientific || state == Exponent)
+ return {};
+ state = Exponent;
+ break;
- default:
- // If it's not a valid digit, it shall be Invalid.
- return false;
+ default:
+ // Nothing else can validly appear in a number.
+ // NumericTokenizer allows letters of "inf" and "nan", but
+ // validators don't accept those values.
+ // For anything else, tokens.nextToken() must have returned 0.
+ Q_ASSERT(!c || c == 'a' || c == 'f' || c == 'i' || c == 'n');
+ return {};
}
- lastWasDigit = false;
}
- lastWasE = c == 'e';
- if (c != ',')
- buff->append(c);
-
- i += in.size();
+ last = c;
+ if (c != ',') // Skip grouping
+ result.buff.append(c);
}
- return true;
+ result.state = ParsingResult::Acceptable;
+
+ // Intermediate if it ends with any character that requires a digit after
+ // it to be valid e.g. group separator, sign, or exponent
+ if (last == ',' || last == '-' || last == '+' || last == 'e')
+ result.state = ParsingResult::Intermediate;
+
+ return result;
}
double QLocaleData::stringToDouble(QStringView str, bool *ok,
QLocale::NumberOptions number_options) const
{
CharBuff buff;
- if (!numberToCLocale(str, number_options, &buff)) {
+ if (!numberToCLocale(str, number_options, DoubleScientificMode, &buff)) {
if (ok != nullptr)
*ok = false;
return 0.0;
}
- int processed = 0;
- bool nonNullOk = false;
- double d = qt_asciiToDouble(buff.constData(), buff.length() - 1, nonNullOk, processed);
+ auto r = qt_asciiToDouble(buff.constData(), buff.size() - 1);
if (ok != nullptr)
- *ok = nonNullOk;
- return d;
+ *ok = r.ok();
+ return r.result;
}
-qlonglong QLocaleData::stringToLongLong(QStringView str, int base, bool *ok,
- QLocale::NumberOptions number_options) const
+QSimpleParsedNumber<qint64>
+QLocaleData::stringToLongLong(QStringView str, int base,
+ QLocale::NumberOptions number_options) const
{
CharBuff buff;
- if (!numberToCLocale(str, number_options, &buff)) {
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
+ if (!numberToCLocale(str, number_options, IntegerMode, &buff))
+ return {};
- return bytearrayToLongLong(buff.constData(), base, ok);
+ return bytearrayToLongLong(QByteArrayView(buff), base);
}
-qulonglong QLocaleData::stringToUnsLongLong(QStringView str, int base, bool *ok,
- QLocale::NumberOptions number_options) const
+QSimpleParsedNumber<quint64>
+QLocaleData::stringToUnsLongLong(QStringView str, int base,
+ QLocale::NumberOptions number_options) const
{
CharBuff buff;
- if (!numberToCLocale(str, number_options, &buff)) {
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
+ if (!numberToCLocale(str, number_options, IntegerMode, &buff))
+ return {};
- return bytearrayToUnsLongLong(buff.constData(), base, ok);
+ return bytearrayToUnsLongLong(QByteArrayView(buff), base);
}
-qlonglong QLocaleData::bytearrayToLongLong(const char *num, int base, bool *ok)
+static bool checkParsed(QByteArrayView num, qsizetype used)
{
- bool _ok;
- const char *endptr;
-
- if (*num == '\0') {
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
-
- qlonglong l = qstrtoll(num, &endptr, base, &_ok);
-
- if (!_ok) {
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
+ if (used <= 0)
+ return false;
- if (*endptr != '\0') {
- while (ascii_isspace(*endptr))
- ++endptr;
+ const qsizetype len = num.size();
+ if (used < len && num[used] != '\0') {
+ while (used < len && ascii_isspace(num[used]))
+ ++used;
}
- if (*endptr != '\0') {
+ if (used < len && num[used] != '\0')
// we stopped at a non-digit character after converting some digits
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
+ return false;
- if (ok != nullptr)
- *ok = true;
- return l;
+ return true;
}
-qulonglong QLocaleData::bytearrayToUnsLongLong(const char *num, int base, bool *ok)
+QSimpleParsedNumber<qint64> QLocaleData::bytearrayToLongLong(QByteArrayView num, int base)
{
- bool _ok;
- const char *endptr;
- qulonglong l = qstrtoull(num, &endptr, base, &_ok);
-
- if (!_ok) {
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
-
- if (*endptr != '\0') {
- while (ascii_isspace(*endptr))
- ++endptr;
- }
-
- if (*endptr != '\0') {
- if (ok != nullptr)
- *ok = false;
- return 0;
- }
+ auto r = qstrntoll(num.data(), num.size(), base);
+ if (!checkParsed(num, r.used))
+ return {};
+ return r;
+}
- if (ok != nullptr)
- *ok = true;
- return l;
+QSimpleParsedNumber<quint64> QLocaleData::bytearrayToUnsLongLong(QByteArrayView num, int base)
+{
+ auto r = qstrntoull(num.data(), num.size(), base);
+ if (!checkParsed(num, r.used))
+ return {};
+ return r;
}
/*!
@@ -3976,10 +4545,10 @@ qulonglong QLocaleData::bytearrayToUnsLongLong(const char *num, int base, bool *
\since 4.8
Returns a currency symbol according to the \a format.
*/
-QString QLocale::currencySymbol(QLocale::CurrencySymbolFormat format) const
+QString QLocale::currencySymbol(CurrencySymbolFormat format) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
auto res = systemLocale()->query(QSystemLocale::CurrencySymbol, format).toString();
if (!res.isEmpty())
return res;
@@ -3989,11 +4558,11 @@ QString QLocale::currencySymbol(QLocale::CurrencySymbolFormat format) const
case CurrencySymbol:
return d->m_data->currencySymbol().getData(currency_symbol_data);
case CurrencyDisplayName:
- return d->m_data->currencyDisplayName().getListEntry(currency_display_name_data, 0);
+ return d->m_data->currencyDisplayName().getData(currency_display_name_data);
case CurrencyIsoCode: {
const char *code = d->m_data->m_currency_iso_code;
if (auto len = qstrnlen(code, 3))
- return QString::fromLatin1(code, int(len));
+ return QString::fromLatin1(code, qsizetype(len));
break;
}
}
@@ -4011,7 +4580,7 @@ QString QLocale::currencySymbol(QLocale::CurrencySymbolFormat format) const
QString QLocale::toCurrencyString(qlonglong value, const QString &symbol) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QSystemLocale::CurrencyToStringArgument arg(value, symbol);
auto res = systemLocale()->query(QSystemLocale::CurrencyToString,
QVariant::fromValue(arg)).toString();
@@ -4027,8 +4596,8 @@ QString QLocale::toCurrencyString(qlonglong value, const QString &symbol) const
QString str = toString(value);
QString sym = symbol.isNull() ? currencySymbol() : symbol;
if (sym.isEmpty())
- sym = currencySymbol(QLocale::CurrencyIsoCode);
- return range.getData(currency_format_data).arg(str, sym);
+ sym = currencySymbol(CurrencyIsoCode);
+ return range.viewData(currency_format_data).arg(str, sym);
}
/*!
@@ -4038,7 +4607,7 @@ QString QLocale::toCurrencyString(qlonglong value, const QString &symbol) const
QString QLocale::toCurrencyString(qulonglong value, const QString &symbol) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QSystemLocale::CurrencyToStringArgument arg(value, symbol);
auto res = systemLocale()->query(QSystemLocale::CurrencyToString,
QVariant::fromValue(arg)).toString();
@@ -4049,7 +4618,7 @@ QString QLocale::toCurrencyString(qulonglong value, const QString &symbol) const
QString str = toString(value);
QString sym = symbol.isNull() ? currencySymbol() : symbol;
if (sym.isEmpty())
- sym = currencySymbol(QLocale::CurrencyIsoCode);
+ sym = currencySymbol(CurrencyIsoCode);
return d->m_data->currencyFormat().getData(currency_format_data).arg(str, sym);
}
@@ -4066,7 +4635,7 @@ QString QLocale::toCurrencyString(qulonglong value, const QString &symbol) const
QString QLocale::toCurrencyString(double value, const QString &symbol, int precision) const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
QSystemLocale::CurrencyToStringArgument arg(value, symbol);
auto res = systemLocale()->query(QSystemLocale::CurrencyToString,
QVariant::fromValue(arg)).toString();
@@ -4082,8 +4651,8 @@ QString QLocale::toCurrencyString(double value, const QString &symbol, int preci
QString str = toString(value, 'f', precision == -1 ? d->m_data->m_currency_digits : precision);
QString sym = symbol.isNull() ? currencySymbol() : symbol;
if (sym.isEmpty())
- sym = currencySymbol(QLocale::CurrencyIsoCode);
- return range.getData(currency_format_data).arg(str, sym);
+ sym = currencySymbol(CurrencyIsoCode);
+ return range.viewData(currency_format_data).arg(str, sym);
}
/*!
@@ -4142,91 +4711,139 @@ QString QLocale::formattedDataSize(qint64 bytes, int precision, DataSizeFormats
// We don't support sizes in units larger than exbibytes because
// the number of bytes would not fit into qint64.
Q_ASSERT(power <= 6 && power >= 0);
- QString unit;
+ QStringView unit;
if (power > 0) {
QLocaleData::DataRange range = (format & DataSizeSIQuantifiers)
? d->m_data->byteAmountSI() : d->m_data->byteAmountIEC();
- unit = range.getListEntry(byte_unit_data, power - 1);
+ unit = range.viewListEntry(byte_unit_data, power - 1);
} else {
- unit = d->m_data->byteCount().getData(byte_unit_data);
+ unit = d->m_data->byteCount().viewData(byte_unit_data);
}
- return number + QLatin1Char(' ') + unit;
+ return number + u' ' + unit;
}
/*!
\since 4.8
-
- Returns an ordered list of locale names for translation purposes in
- preference order (like "en-Latn-US", "en-US", "en").
-
- The return value represents locale names that the user expects to see the
- UI translation in.
-
- Most like you do not need to use this function directly, but just pass the
+ \brief List of locale names for use in selecting translations
+
+ Each entry in the returned list is the name of a locale suitable to the
+ user's preferences for what to translate the UI into. Where a name in the
+ list is composed of several tags, they are joined as indicated by \a
+ separator. Prior to Qt 6.7 a dash was used as separator.
+
+ For example, using the default separator QLocale::TagSeparator::Dash, if the
+ user has configured their system to use English as used in the USA, the list
+ would be "en-Latn-US", "en-US", "en". The order of entries is the order in
+ which to check for translations; earlier items in the list are to be
+ preferred over later ones. If your translation files use underscores, rather
+ than dashes, to separate locale tags, pass QLocale::TagSeparator::Underscore
+ as \a separator.
+
+ Most likely you do not need to use this function directly, but just pass the
QLocale object to the QTranslator::load() function.
- The first item in the list is the most preferred one.
-
\sa QTranslator, bcp47Name()
*/
-QStringList QLocale::uiLanguages() const
+QStringList QLocale::uiLanguages(TagSeparator separator) const
{
+ const char sep = char(separator);
QStringList uiLanguages;
- QList<QLocale> locales;
-#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
- const auto uiLanguages = systemLocale()->query(QSystemLocale::UILanguages).toStringList();
- // ... but we need to include likely-adjusted forms of each of those, too:
- for (const auto &entry : uiLanguages)
- locales.append(QLocale(entry));
- if (locales.isEmpty())
- locales.append(systemLocale()->fallbackUiLocale());
+ if (uchar(sep) > 0x7f) {
+ badSeparatorWarning("uiLanguages", sep);
+ return uiLanguages;
+ }
+ QList<QLocaleId> localeIds;
+#ifdef QT_NO_SYSTEMLOCALE
+ constexpr bool isSystem = false;
+#else
+ const bool isSystem = d->m_data == &systemLocaleData;
+ if (isSystem) {
+ uiLanguages = systemLocale()->query(QSystemLocale::UILanguages).toStringList();
+ // ... but we need to include likely-adjusted forms of each of those, too.
+ // For now, collect up locale Ids representing the entries, for later processing:
+ for (const auto &entry : std::as_const(uiLanguages))
+ localeIds.append(QLocaleId::fromName(entry));
+ if (localeIds.isEmpty())
+ localeIds.append(systemLocale()->fallbackLocale().d->m_data->id());
+ // If the system locale (isn't C and) didn't include itself in the list,
+ // or as fallback, presume to know better than it and put its name
+ // first. (Known issue, QTBUG-104930, on some macOS versions when in
+ // locale en_DE.) Our translation system might have a translation for a
+ // locale the platform doesn't believe in.
+ const QString name = bcp47Name(separator);
+ if (!name.isEmpty() && language() != C && !uiLanguages.contains(name)) {
+ // That uses contains(name) as a cheap pre-test, but there may be an
+ // entry that matches this on purging likely subtags.
+ const QLocaleId mine = d->m_data->id().withLikelySubtagsRemoved();
+ const auto isMine = [mine](const QString &entry) {
+ return QLocaleId::fromName(entry).withLikelySubtagsRemoved() == mine;
+ };
+ if (std::none_of(uiLanguages.constBegin(), uiLanguages.constEnd(), isMine)) {
+ localeIds.prepend(d->m_data->id());
+ uiLanguages.prepend(name);
+ }
+ }
} else
#endif
{
- locales.append(*this);
+ localeIds.append(d->m_data->id());
}
- for (int i = locales.size(); i-- > 0; ) {
- const QLocale &locale = locales.at(i);
- int j;
+ for (qsizetype i = localeIds.size(); i-- > 0; ) {
+ QLocaleId id = localeIds.at(i);
+ qsizetype j;
QByteArray prior;
- if (i < uiLanguages.size()) {
+ if (isSystem && i < uiLanguages.size()) {
// Adding likely-adjusted forms to system locale's list.
// Name the locale is derived from:
- const QString &name = uiLanguages.at(i);
- prior = name.toLatin1();
- // Don't try to likely-adjust if construction's likely-adjustments
- // were so drastic the result doesn't match the prior name:
- if (locale.name() != name && locale.d->rawName() != prior)
- continue;
- // Insert just after prior:
+ prior = uiLanguages.at(i).toLatin1();
+ // Insert just after the entry we're supplementing:
j = i + 1;
+ } else if (id.language_id == C) {
+ // Attempt no likely sub-tag amendments to C:
+ uiLanguages.append(QString::fromLatin1(id.name(sep)));
+ continue;
} else {
- // Plain locale, not system locale; just append.
+ // Plain locale or empty system uiLanguages; just append.
+ prior = id.name(sep);
+ uiLanguages.append(QString::fromLatin1(prior));
j = uiLanguages.size();
}
- const auto data = locale.d->m_data;
- QLocaleId id
- = QLocaleId::fromIds(data->m_language_id, data->m_script_id, data->m_country_id);
const QLocaleId max = id.withLikelySubtagsAdded();
const QLocaleId min = max.withLikelySubtagsRemoved();
- id.script_id = 0; // For re-use as script-less variant.
- // Include version with all likely sub-tags (last) if distinct from the rest:
- if (max != min && max != id && max.name() != prior)
- uiLanguages.insert(j, QString::fromLatin1(max.name()));
+ // Include minimal version (last) unless it's what our locale is derived from:
+ if (auto name = min.name(sep); name != prior)
+ uiLanguages.insert(j, QString::fromLatin1(name));
+ else if (!isSystem)
+ --j; // bcp47Name() matches min(): put more specific forms *before* it.
+
+ if (id.script_id) {
+ // Include scriptless version if likely-equivalent and distinct:
+ id.script_id = 0;
+ if (id != min && id.withLikelySubtagsAdded() == max) {
+ if (auto name = id.name(sep); name != prior)
+ uiLanguages.insert(j, QString::fromLatin1(name));
+ }
+ }
- // Include scriptless version if likely-equivalent and distinct:
- if (data->m_script_id && id != min && id.name() != prior
- && id.withLikelySubtagsAdded() == max) {
- uiLanguages.insert(j, QString::fromLatin1(id.name()));
+ if (!id.territory_id) {
+ Q_ASSERT(!min.territory_id);
+ Q_ASSERT(!id.script_id); // because we just cleared it.
+ // Include version with territory if it likely-equivalent and distinct:
+ id.territory_id = max.territory_id;
+ if (id != max && id.withLikelySubtagsAdded() == max) {
+ if (auto name = id.name(sep); name != prior)
+ uiLanguages.insert(j, QString::fromLatin1(name));
+ }
}
- // Include minimal version (first) unless it's what our locale is derived from:
- if (min.name() != prior)
- uiLanguages.insert(j, QString::fromLatin1(min.name()));
+ // Include version with all likely sub-tags (first) if distinct from the rest:
+ if (max != min && max != id) {
+ if (auto name = max.name(sep); name != prior)
+ uiLanguages.insert(j, QString::fromLatin1(name));
+ }
}
return uiLanguages;
}
@@ -4245,7 +4862,7 @@ QStringList QLocale::uiLanguages() const
QLocale QLocale::collation() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
const auto res = systemLocale()->query(QSystemLocale::Collation).toString();
if (!res.isEmpty())
return QLocale(res);
@@ -4258,14 +4875,14 @@ QLocale QLocale::collation() const
\since 4.8
Returns a native name of the language for the locale. For example
- "Schwiizertüütsch" for Swiss-German locale.
+ "Schweizer Hochdeutsch" for the Swiss-German locale.
- \sa nativeCountryName(), languageToString()
+ \sa nativeTerritoryName(), languageToString()
*/
QString QLocale::nativeLanguageName() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
+ if (d->m_data == &systemLocaleData) {
auto res = systemLocale()->query(QSystemLocale::NativeLanguageName).toString();
if (!res.isEmpty())
return res;
@@ -4275,24 +4892,40 @@ QString QLocale::nativeLanguageName() const
}
/*!
- \since 4.8
+ \since 6.2
- Returns a native name of the country for the locale. For example
+ Returns a native name of the territory for the locale. For example
"España" for Spanish/Spain locale.
- \sa nativeLanguageName(), countryToString()
+ \sa nativeLanguageName(), territoryToString()
*/
-QString QLocale::nativeCountryName() const
+QString QLocale::nativeTerritoryName() const
{
#ifndef QT_NO_SYSTEMLOCALE
- if (d->m_data == systemData()) {
- auto res = systemLocale()->query(QSystemLocale::NativeCountryName).toString();
+ if (d->m_data == &systemLocaleData) {
+ auto res = systemLocale()->query(QSystemLocale::NativeTerritoryName).toString();
if (!res.isEmpty())
return res;
}
#endif
- return d->m_data->endonymCountry().getData(endonyms_data);
+ return d->m_data->endonymTerritory().getData(endonyms_data);
+}
+
+#if QT_DEPRECATED_SINCE(6, 6)
+/*!
+ \deprecated [6.6] Use \l nativeTerritoryName() instead.
+ \since 4.8
+
+ Returns a native name of the territory for the locale. For example
+ "España" for Spanish/Spain locale.
+
+ \sa nativeLanguageName(), territoryToString()
+*/
+QString QLocale::nativeCountryName() const
+{
+ return nativeTerritoryName();
}
+#endif
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug dbg, const QLocale &l)
@@ -4301,7 +4934,7 @@ QDebug operator<<(QDebug dbg, const QLocale &l)
dbg.nospace().noquote()
<< "QLocale(" << QLocale::languageToString(l.language())
<< ", " << QLocale::scriptToString(l.script())
- << ", " << QLocale::countryToString(l.country()) << ')';
+ << ", " << QLocale::territoryToString(l.territory()) << ')';
return dbg;
}
#endif
diff --git a/src/corelib/text/qlocale.h b/src/corelib/text/qlocale.h
index 0ff2e4d469..cb3eb64193 100644
--- a/src/corelib/text/qlocale.h
+++ b/src/corelib/text/qlocale.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QLOCALE_H
#define QLOCALE_H
@@ -72,826 +36,830 @@ class Q_CORE_EXPORT QLocale
friend class QTextStreamPrivate;
public:
+ static constexpr int DefaultTwoDigitBaseYear = 1900;
+
// see qlocale_data_p.h for more info on generated data
// GENERATED PART STARTS HERE
- enum Language {
+ enum Language : ushort {
AnyLanguage = 0,
C = 1,
Abkhazian = 2,
- Oromo = 3,
- Afar = 4,
- Afrikaans = 5,
- Albanian = 6,
- Amharic = 7,
- Arabic = 8,
- Armenian = 9,
- Assamese = 10,
- Aymara = 11,
- Azerbaijani = 12,
- Bashkir = 13,
- Basque = 14,
- Bengali = 15,
- Dzongkha = 16,
- Bihari = 17,
- Bislama = 18,
- Breton = 19,
- Bulgarian = 20,
- Burmese = 21,
- Belarusian = 22,
- Khmer = 23,
- Catalan = 24,
- Chinese = 25,
- Corsican = 26,
- Croatian = 27,
- Czech = 28,
- Danish = 29,
- Dutch = 30,
- English = 31,
- Esperanto = 32,
- Estonian = 33,
- Faroese = 34,
- Fijian = 35,
- Finnish = 36,
- French = 37,
- WesternFrisian = 38,
- Gaelic = 39,
- Galician = 40,
- Georgian = 41,
- German = 42,
- Greek = 43,
- Greenlandic = 44,
- Guarani = 45,
- Gujarati = 46,
- Hausa = 47,
- Hebrew = 48,
- Hindi = 49,
- Hungarian = 50,
- Icelandic = 51,
- Indonesian = 52,
- Interlingua = 53,
- Interlingue = 54,
- Inuktitut = 55,
- Inupiak = 56,
- Irish = 57,
- Italian = 58,
- Japanese = 59,
- Javanese = 60,
- Kannada = 61,
- Kashmiri = 62,
- Kazakh = 63,
- Kinyarwanda = 64,
- Kirghiz = 65,
- Korean = 66,
- Kurdish = 67,
- Rundi = 68,
- Lao = 69,
- Latin = 70,
- Latvian = 71,
- Lingala = 72,
- Lithuanian = 73,
- Macedonian = 74,
- Malagasy = 75,
- Malay = 76,
- Malayalam = 77,
- Maltese = 78,
- Maori = 79,
- Marathi = 80,
- Marshallese = 81,
- Mongolian = 82,
- NauruLanguage = 83,
- Nepali = 84,
- NorwegianBokmal = 85,
- Occitan = 86,
- Oriya = 87,
- Pashto = 88,
- Persian = 89,
- Polish = 90,
- Portuguese = 91,
- Punjabi = 92,
- Quechua = 93,
- Romansh = 94,
- Romanian = 95,
- Russian = 96,
- Samoan = 97,
- Sango = 98,
- Sanskrit = 99,
- Serbian = 100,
- Ossetic = 101,
- SouthernSotho = 102,
- Tswana = 103,
- Shona = 104,
- Sindhi = 105,
- Sinhala = 106,
- Swati = 107,
- Slovak = 108,
- Slovenian = 109,
- Somali = 110,
- Spanish = 111,
- Sundanese = 112,
- Swahili = 113,
- Swedish = 114,
- Sardinian = 115,
- Tajik = 116,
- Tamil = 117,
- Tatar = 118,
- Telugu = 119,
- Thai = 120,
- Tibetan = 121,
- Tigrinya = 122,
- Tongan = 123,
- Tsonga = 124,
- Turkish = 125,
- Turkmen = 126,
- Tahitian = 127,
- Uighur = 128,
- Ukrainian = 129,
- Urdu = 130,
- Uzbek = 131,
- Vietnamese = 132,
- Volapuk = 133,
- Welsh = 134,
- Wolof = 135,
- Xhosa = 136,
- Yiddish = 137,
- Yoruba = 138,
- Zhuang = 139,
- Zulu = 140,
- NorwegianNynorsk = 141,
- Bosnian = 142,
- Divehi = 143,
- Manx = 144,
- Cornish = 145,
- Akan = 146,
- Konkani = 147,
- Ga = 148,
- Igbo = 149,
- Kamba = 150,
- Syriac = 151,
- Blin = 152,
- Geez = 153,
- Koro = 154,
- Sidamo = 155,
- Atsam = 156,
- Tigre = 157,
- Jju = 158,
- Friulian = 159,
- Venda = 160,
- Ewe = 161,
- Walamo = 162,
- Hawaiian = 163,
- Tyap = 164,
- Nyanja = 165,
- Filipino = 166,
- SwissGerman = 167,
- SichuanYi = 168,
- Kpelle = 169,
- LowGerman = 170,
- SouthNdebele = 171,
- NorthernSotho = 172,
- NorthernSami = 173,
- Taroko = 174,
- Gusii = 175,
- Taita = 176,
- Fulah = 177,
- Kikuyu = 178,
- Samburu = 179,
- Sena = 180,
- NorthNdebele = 181,
- Rombo = 182,
- Tachelhit = 183,
- Kabyle = 184,
- Nyankole = 185,
- Bena = 186,
- Vunjo = 187,
- Bambara = 188,
- Embu = 189,
- Cherokee = 190,
- Morisyen = 191,
- Makonde = 192,
- Langi = 193,
- Ganda = 194,
- Bemba = 195,
- Kabuverdianu = 196,
- Meru = 197,
- Kalenjin = 198,
- Nama = 199,
- Machame = 200,
- Colognian = 201,
- Masai = 202,
- Soga = 203,
- Luyia = 204,
- Asu = 205,
- Teso = 206,
- Saho = 207,
- KoyraChiini = 208,
- Rwa = 209,
- Luo = 210,
- Chiga = 211,
- CentralMoroccoTamazight = 212,
- KoyraboroSenni = 213,
- Shambala = 214,
- Bodo = 215,
- Avaric = 216,
- Chamorro = 217,
- Chechen = 218,
- Church = 219,
- Chuvash = 220,
- Cree = 221,
- Haitian = 222,
- Herero = 223,
- HiriMotu = 224,
- Kanuri = 225,
- Komi = 226,
- Kongo = 227,
- Kwanyama = 228,
- Limburgish = 229,
- LubaKatanga = 230,
- Luxembourgish = 231,
- Navaho = 232,
- Ndonga = 233,
- Ojibwa = 234,
- Pali = 235,
- Walloon = 236,
- Aghem = 237,
- Basaa = 238,
- Zarma = 239,
- Duala = 240,
- JolaFonyi = 241,
- Ewondo = 242,
- Bafia = 243,
- MakhuwaMeetto = 244,
- Mundang = 245,
- Kwasio = 246,
- Nuer = 247,
- Sakha = 248,
- Sangu = 249,
- CongoSwahili = 250,
- Tasawaq = 251,
- Vai = 252,
- Walser = 253,
- Yangben = 254,
- Avestan = 255,
- Asturian = 256,
- Ngomba = 257,
- Kako = 258,
- Meta = 259,
- Ngiemboon = 260,
- Aragonese = 261,
- Akkadian = 262,
- AncientEgyptian = 263,
- AncientGreek = 264,
- Aramaic = 265,
- Balinese = 266,
- Bamun = 267,
- BatakToba = 268,
- Buginese = 269,
- Buhid = 270,
- Carian = 271,
- Chakma = 272,
- ClassicalMandaic = 273,
- Coptic = 274,
- Dogri = 275,
- EasternCham = 276,
- EasternKayah = 277,
- Etruscan = 278,
- Gothic = 279,
- Hanunoo = 280,
- Ingush = 281,
- LargeFloweryMiao = 282,
- Lepcha = 283,
- Limbu = 284,
- Lisu = 285,
- Lu = 286,
- Lycian = 287,
- Lydian = 288,
- Mandingo = 289,
- Manipuri = 290,
- Meroitic = 291,
- NorthernThai = 292,
- OldIrish = 293,
- OldNorse = 294,
- OldPersian = 295,
- OldTurkish = 296,
- Pahlavi = 297,
- Parthian = 298,
- Phoenician = 299,
- PrakritLanguage = 300,
- Rejang = 301,
- Sabaean = 302,
- Samaritan = 303,
- Santali = 304,
- Saurashtra = 305,
- Sora = 306,
- Sylheti = 307,
- Tagbanwa = 308,
- TaiDam = 309,
- TaiNua = 310,
- Ugaritic = 311,
- Akoose = 312,
- Lakota = 313,
- StandardMoroccanTamazight = 314,
- Mapuche = 315,
- CentralKurdish = 316,
- LowerSorbian = 317,
- UpperSorbian = 318,
- Kenyang = 319,
- Mohawk = 320,
- Nko = 321,
- Prussian = 322,
- Kiche = 323,
- SouthernSami = 324,
- LuleSami = 325,
- InariSami = 326,
- SkoltSami = 327,
- Warlpiri = 328,
- ManichaeanMiddlePersian = 329,
- Mende = 330,
- AncientNorthArabian = 331,
- LinearA = 332,
- HmongNjua = 333,
- Ho = 334,
- Lezghian = 335,
- Bassa = 336,
- Mono = 337,
- TedimChin = 338,
- Maithili = 339,
- Ahom = 340,
- AmericanSignLanguage = 341,
- ArdhamagadhiPrakrit = 342,
- Bhojpuri = 343,
- HieroglyphicLuwian = 344,
- LiteraryChinese = 345,
- Mazanderani = 346,
- Mru = 347,
- Newari = 348,
- NorthernLuri = 349,
- Palauan = 350,
- Papiamento = 351,
- Saraiki = 352,
- TokelauLanguage = 353,
- TokPisin = 354,
- TuvaluLanguage = 355,
- UncodedLanguages = 356,
- Cantonese = 357,
- Osage = 358,
- Tangut = 359,
- Ido = 360,
- Lojban = 361,
- Sicilian = 362,
- SouthernKurdish = 363,
- WesternBalochi = 364,
- Cebuano = 365,
- Erzya = 366,
- Chickasaw = 367,
- Muscogee = 368,
- Silesian = 369,
+ Afar = 3,
+ Afrikaans = 4,
+ Aghem = 5,
+ Akan = 6,
+ Akkadian = 7,
+ Akoose = 8,
+ Albanian = 9,
+ AmericanSignLanguage = 10,
+ Amharic = 11,
+ AncientEgyptian = 12,
+ AncientGreek = 13,
+ Arabic = 14,
+ Aragonese = 15,
+ Aramaic = 16,
+ Armenian = 17,
+ Assamese = 18,
+ Asturian = 19,
+ Asu = 20,
+ Atsam = 21,
+ Avaric = 22,
+ Avestan = 23,
+ Aymara = 24,
+ Azerbaijani = 25,
+ Bafia = 26,
+ Balinese = 27,
+ Bambara = 28,
+ Bamun = 29,
+ Bangla = 30,
+ Basaa = 31,
+ Bashkir = 32,
+ Basque = 33,
+ BatakToba = 34,
+ Belarusian = 35,
+ Bemba = 36,
+ Bena = 37,
+ Bhojpuri = 38,
+ Bislama = 39,
+ Blin = 40,
+ Bodo = 41,
+ Bosnian = 42,
+ Breton = 43,
+ Buginese = 44,
+ Bulgarian = 45,
+ Burmese = 46,
+ Cantonese = 47,
+ Catalan = 48,
+ Cebuano = 49,
+ CentralAtlasTamazight = 50,
+ CentralKurdish = 51,
+ Chakma = 52,
+ Chamorro = 53,
+ Chechen = 54,
+ Cherokee = 55,
+ Chickasaw = 56,
+ Chiga = 57,
+ Chinese = 58,
+ Church = 59,
+ Chuvash = 60,
+ Colognian = 61,
+ Coptic = 62,
+ Cornish = 63,
+ Corsican = 64,
+ Cree = 65,
+ Croatian = 66,
+ Czech = 67,
+ Danish = 68,
+ Divehi = 69,
+ Dogri = 70,
+ Duala = 71,
+ Dutch = 72,
+ Dzongkha = 73,
+ Embu = 74,
+ English = 75,
+ Erzya = 76,
+ Esperanto = 77,
+ Estonian = 78,
+ Ewe = 79,
+ Ewondo = 80,
+ Faroese = 81,
+ Fijian = 82,
+ Filipino = 83,
+ Finnish = 84,
+ French = 85,
+ Friulian = 86,
+ Fulah = 87,
+ Gaelic = 88,
+ Ga = 89,
+ Galician = 90,
+ Ganda = 91,
+ Geez = 92,
+ Georgian = 93,
+ German = 94,
+ Gothic = 95,
+ Greek = 96,
+ Guarani = 97,
+ Gujarati = 98,
+ Gusii = 99,
+ Haitian = 100,
+ Hausa = 101,
+ Hawaiian = 102,
+ Hebrew = 103,
+ Herero = 104,
+ Hindi = 105,
+ HiriMotu = 106,
+ Hungarian = 107,
+ Icelandic = 108,
+ Ido = 109,
+ Igbo = 110,
+ InariSami = 111,
+ Indonesian = 112,
+ Ingush = 113,
+ Interlingua = 114,
+ Interlingue = 115,
+ Inuktitut = 116,
+ Inupiaq = 117,
+ Irish = 118,
+ Italian = 119,
+ Japanese = 120,
+ Javanese = 121,
+ Jju = 122,
+ JolaFonyi = 123,
+ Kabuverdianu = 124,
+ Kabyle = 125,
+ Kako = 126,
+ Kalaallisut = 127,
+ Kalenjin = 128,
+ Kamba = 129,
+ Kannada = 130,
+ Kanuri = 131,
+ Kashmiri = 132,
+ Kazakh = 133,
+ Kenyang = 134,
+ Khmer = 135,
+ Kiche = 136,
+ Kikuyu = 137,
+ Kinyarwanda = 138,
+ Komi = 139,
+ Kongo = 140,
+ Konkani = 141,
+ Korean = 142,
+ Koro = 143,
+ KoyraboroSenni = 144,
+ KoyraChiini = 145,
+ Kpelle = 146,
+ Kuanyama = 147,
+ Kurdish = 148,
+ Kwasio = 149,
+ Kyrgyz = 150,
+ Lakota = 151,
+ Langi = 152,
+ Lao = 153,
+ Latin = 154,
+ Latvian = 155,
+ Lezghian = 156,
+ Limburgish = 157,
+ Lingala = 158,
+ LiteraryChinese = 159,
+ Lithuanian = 160,
+ Lojban = 161,
+ LowerSorbian = 162,
+ LowGerman = 163,
+ LubaKatanga = 164,
+ LuleSami = 165,
+ Luo = 166,
+ Luxembourgish = 167,
+ Luyia = 168,
+ Macedonian = 169,
+ Machame = 170,
+ Maithili = 171,
+ MakhuwaMeetto = 172,
+ Makonde = 173,
+ Malagasy = 174,
+ Malayalam = 175,
+ Malay = 176,
+ Maltese = 177,
+ Mandingo = 178,
+ Manipuri = 179,
+ Manx = 180,
+ Maori = 181,
+ Mapuche = 182,
+ Marathi = 183,
+ Marshallese = 184,
+ Masai = 185,
+ Mazanderani = 186,
+ Mende = 187,
+ Meru = 188,
+ Meta = 189,
+ Mohawk = 190,
+ Mongolian = 191,
+ Morisyen = 192,
+ Mundang = 193,
+ Muscogee = 194,
+ Nama = 195,
+ NauruLanguage = 196,
+ Navajo = 197,
+ Ndonga = 198,
+ Nepali = 199,
+ Newari = 200,
+ Ngiemboon = 201,
+ Ngomba = 202,
+ NigerianPidgin = 203,
+ Nko = 204,
+ NorthernLuri = 205,
+ NorthernSami = 206,
+ NorthernSotho = 207,
+ NorthNdebele = 208,
+ NorwegianBokmal = 209,
+ NorwegianNynorsk = 210,
+ Nuer = 211,
+ Nyanja = 212,
+ Nyankole = 213,
+ Occitan = 214,
+ Odia = 215,
+ Ojibwa = 216,
+ OldIrish = 217,
+ OldNorse = 218,
+ OldPersian = 219,
+ Oromo = 220,
+ Osage = 221,
+ Ossetic = 222,
+ Pahlavi = 223,
+ Palauan = 224,
+ Pali = 225,
+ Papiamento = 226,
+ Pashto = 227,
+ Persian = 228,
+ Phoenician = 229,
+ Polish = 230,
+ Portuguese = 231,
+ Prussian = 232,
+ Punjabi = 233,
+ Quechua = 234,
+ Romanian = 235,
+ Romansh = 236,
+ Rombo = 237,
+ Rundi = 238,
+ Russian = 239,
+ Rwa = 240,
+ Saho = 241,
+ Sakha = 242,
+ Samburu = 243,
+ Samoan = 244,
+ Sango = 245,
+ Sangu = 246,
+ Sanskrit = 247,
+ Santali = 248,
+ Sardinian = 249,
+ Saurashtra = 250,
+ Sena = 251,
+ Serbian = 252,
+ Shambala = 253,
+ Shona = 254,
+ SichuanYi = 255,
+ Sicilian = 256,
+ Sidamo = 257,
+ Silesian = 258,
+ Sindhi = 259,
+ Sinhala = 260,
+ SkoltSami = 261,
+ Slovak = 262,
+ Slovenian = 263,
+ Soga = 264,
+ Somali = 265,
+ SouthernKurdish = 266,
+ SouthernSami = 267,
+ SouthernSotho = 268,
+ SouthNdebele = 269,
+ Spanish = 270,
+ StandardMoroccanTamazight = 271,
+ Sundanese = 272,
+ Swahili = 273,
+ Swati = 274,
+ Swedish = 275,
+ SwissGerman = 276,
+ Syriac = 277,
+ Tachelhit = 278,
+ Tahitian = 279,
+ TaiDam = 280,
+ Taita = 281,
+ Tajik = 282,
+ Tamil = 283,
+ Taroko = 284,
+ Tasawaq = 285,
+ Tatar = 286,
+ Telugu = 287,
+ Teso = 288,
+ Thai = 289,
+ Tibetan = 290,
+ Tigre = 291,
+ Tigrinya = 292,
+ TokelauLanguage = 293,
+ TokPisin = 294,
+ Tongan = 295,
+ Tsonga = 296,
+ Tswana = 297,
+ Turkish = 298,
+ Turkmen = 299,
+ TuvaluLanguage = 300,
+ Tyap = 301,
+ Ugaritic = 302,
+ Ukrainian = 303,
+ UpperSorbian = 304,
+ Urdu = 305,
+ Uyghur = 306,
+ Uzbek = 307,
+ Vai = 308,
+ Venda = 309,
+ Vietnamese = 310,
+ Volapuk = 311,
+ Vunjo = 312,
+ Walloon = 313,
+ Walser = 314,
+ Warlpiri = 315,
+ Welsh = 316,
+ WesternBalochi = 317,
+ WesternFrisian = 318,
+ Wolaytta = 319,
+ Wolof = 320,
+ Xhosa = 321,
+ Yangben = 322,
+ Yiddish = 323,
+ Yoruba = 324,
+ Zarma = 325,
+ Zhuang = 326,
+ Zulu = 327,
+ Kaingang = 328,
+ Nheengatu = 329,
+ Haryanvi = 330,
+ NorthernFrisian = 331,
+ Rajasthani = 332,
+ Moksha = 333,
+ TokiPona = 334,
+ Pijin = 335,
+ Obolo = 336,
+ Baluchi = 337,
+ Ligurian = 338,
+ Rohingya = 339,
+ Torwali = 340,
+ Anii = 341,
+ Kangri = 342,
+ Venetian = 343,
Afan = Oromo,
+ Bengali = Bangla,
Bhutani = Dzongkha,
Byelorussian = Belarusian,
Cambodian = Khmer,
+ CentralMoroccoTamazight = CentralAtlasTamazight,
Chewa = Nyanja,
Frisian = WesternFrisian,
+ Greenlandic = Kalaallisut,
+ Inupiak = Inupiaq,
+ Kirghiz = Kyrgyz,
Kurundi = Rundi,
- Moldavian = Romanian,
- Norwegian = NorwegianBokmal,
+ Kwanyama = Kuanyama,
+ Navaho = Navajo,
+ Oriya = Odia,
RhaetoRomance = Romansh,
- SerboCroatian = Serbian,
- Tagalog = Filipino,
- Twi = Akan,
- Uigur = Uighur,
+ Uighur = Uyghur,
+ Uigur = Uyghur,
+ Walamo = Wolaytta,
- LastLanguage = Silesian
+ LastLanguage = Venetian
};
- enum Script {
+ enum Script : ushort {
AnyScript = 0,
- ArabicScript = 1,
- CyrillicScript = 2,
- DeseretScript = 3,
- GurmukhiScript = 4,
- SimplifiedHanScript = 5,
- TraditionalHanScript = 6,
- LatinScript = 7,
- MongolianScript = 8,
- TifinaghScript = 9,
- ArmenianScript = 10,
- BengaliScript = 11,
- CherokeeScript = 12,
- DevanagariScript = 13,
- EthiopicScript = 14,
- GeorgianScript = 15,
- GreekScript = 16,
- GujaratiScript = 17,
- HebrewScript = 18,
- JapaneseScript = 19,
- KhmerScript = 20,
- KannadaScript = 21,
- KoreanScript = 22,
- LaoScript = 23,
- MalayalamScript = 24,
- MyanmarScript = 25,
- OriyaScript = 26,
- TamilScript = 27,
- TeluguScript = 28,
- ThaanaScript = 29,
- ThaiScript = 30,
- TibetanScript = 31,
- SinhalaScript = 32,
- SyriacScript = 33,
- YiScript = 34,
- VaiScript = 35,
- AvestanScript = 36,
- BalineseScript = 37,
- BamumScript = 38,
- BatakScript = 39,
- BopomofoScript = 40,
- BrahmiScript = 41,
- BugineseScript = 42,
- BuhidScript = 43,
- CanadianAboriginalScript = 44,
- CarianScript = 45,
- ChakmaScript = 46,
- ChamScript = 47,
- CopticScript = 48,
- CypriotScript = 49,
- EgyptianHieroglyphsScript = 50,
- FraserScript = 51,
- GlagoliticScript = 52,
- GothicScript = 53,
- HanScript = 54,
- HangulScript = 55,
- HanunooScript = 56,
- ImperialAramaicScript = 57,
- InscriptionalPahlaviScript = 58,
- InscriptionalParthianScript = 59,
- JavaneseScript = 60,
- KaithiScript = 61,
- KatakanaScript = 62,
- KayahLiScript = 63,
- KharoshthiScript = 64,
- LannaScript = 65,
- LepchaScript = 66,
- LimbuScript = 67,
- LinearBScript = 68,
- LycianScript = 69,
- LydianScript = 70,
- MandaeanScript = 71,
- MeiteiMayekScript = 72,
- MeroiticScript = 73,
- MeroiticCursiveScript = 74,
- NkoScript = 75,
- NewTaiLueScript = 76,
- OghamScript = 77,
- OlChikiScript = 78,
- OldItalicScript = 79,
- OldPersianScript = 80,
- OldSouthArabianScript = 81,
- OrkhonScript = 82,
- OsmanyaScript = 83,
- PhagsPaScript = 84,
- PhoenicianScript = 85,
- PollardPhoneticScript = 86,
- RejangScript = 87,
- RunicScript = 88,
- SamaritanScript = 89,
- SaurashtraScript = 90,
- SharadaScript = 91,
- ShavianScript = 92,
- SoraSompengScript = 93,
- CuneiformScript = 94,
- SundaneseScript = 95,
- SylotiNagriScript = 96,
- TagalogScript = 97,
- TagbanwaScript = 98,
- TaiLeScript = 99,
- TaiVietScript = 100,
- TakriScript = 101,
- UgariticScript = 102,
- BrailleScript = 103,
- HiraganaScript = 104,
- CaucasianAlbanianScript = 105,
- BassaVahScript = 106,
- DuployanScript = 107,
- ElbasanScript = 108,
- GranthaScript = 109,
- PahawhHmongScript = 110,
- KhojkiScript = 111,
- LinearAScript = 112,
- MahajaniScript = 113,
- ManichaeanScript = 114,
- MendeKikakuiScript = 115,
- ModiScript = 116,
- MroScript = 117,
- OldNorthArabianScript = 118,
- NabataeanScript = 119,
- PalmyreneScript = 120,
- PauCinHauScript = 121,
- OldPermicScript = 122,
- PsalterPahlaviScript = 123,
- SiddhamScript = 124,
- KhudawadiScript = 125,
- TirhutaScript = 126,
- VarangKshitiScript = 127,
- AhomScript = 128,
- AnatolianHieroglyphsScript = 129,
- HatranScript = 130,
- MultaniScript = 131,
- OldHungarianScript = 132,
- SignWritingScript = 133,
- AdlamScript = 134,
- BhaiksukiScript = 135,
- MarchenScript = 136,
- NewaScript = 137,
- OsageScript = 138,
- TangutScript = 139,
- HanWithBopomofoScript = 140,
- JamoScript = 141,
+ AdlamScript = 1,
+ AhomScript = 2,
+ AnatolianHieroglyphsScript = 3,
+ ArabicScript = 4,
+ ArmenianScript = 5,
+ AvestanScript = 6,
+ BalineseScript = 7,
+ BamumScript = 8,
+ BanglaScript = 9,
+ BassaVahScript = 10,
+ BatakScript = 11,
+ BhaiksukiScript = 12,
+ BopomofoScript = 13,
+ BrahmiScript = 14,
+ BrailleScript = 15,
+ BugineseScript = 16,
+ BuhidScript = 17,
+ CanadianAboriginalScript = 18,
+ CarianScript = 19,
+ CaucasianAlbanianScript = 20,
+ ChakmaScript = 21,
+ ChamScript = 22,
+ CherokeeScript = 23,
+ CopticScript = 24,
+ CuneiformScript = 25,
+ CypriotScript = 26,
+ CyrillicScript = 27,
+ DeseretScript = 28,
+ DevanagariScript = 29,
+ DuployanScript = 30,
+ EgyptianHieroglyphsScript = 31,
+ ElbasanScript = 32,
+ EthiopicScript = 33,
+ FraserScript = 34,
+ GeorgianScript = 35,
+ GlagoliticScript = 36,
+ GothicScript = 37,
+ GranthaScript = 38,
+ GreekScript = 39,
+ GujaratiScript = 40,
+ GurmukhiScript = 41,
+ HangulScript = 42,
+ HanScript = 43,
+ HanunooScript = 44,
+ HanWithBopomofoScript = 45,
+ HatranScript = 46,
+ HebrewScript = 47,
+ HiraganaScript = 48,
+ ImperialAramaicScript = 49,
+ InscriptionalPahlaviScript = 50,
+ InscriptionalParthianScript = 51,
+ JamoScript = 52,
+ JapaneseScript = 53,
+ JavaneseScript = 54,
+ KaithiScript = 55,
+ KannadaScript = 56,
+ KatakanaScript = 57,
+ KayahLiScript = 58,
+ KharoshthiScript = 59,
+ KhmerScript = 60,
+ KhojkiScript = 61,
+ KhudawadiScript = 62,
+ KoreanScript = 63,
+ LannaScript = 64,
+ LaoScript = 65,
+ LatinScript = 66,
+ LepchaScript = 67,
+ LimbuScript = 68,
+ LinearAScript = 69,
+ LinearBScript = 70,
+ LycianScript = 71,
+ LydianScript = 72,
+ MahajaniScript = 73,
+ MalayalamScript = 74,
+ MandaeanScript = 75,
+ ManichaeanScript = 76,
+ MarchenScript = 77,
+ MeiteiMayekScript = 78,
+ MendeScript = 79,
+ MeroiticCursiveScript = 80,
+ MeroiticScript = 81,
+ ModiScript = 82,
+ MongolianScript = 83,
+ MroScript = 84,
+ MultaniScript = 85,
+ MyanmarScript = 86,
+ NabataeanScript = 87,
+ NewaScript = 88,
+ NewTaiLueScript = 89,
+ NkoScript = 90,
+ OdiaScript = 91,
+ OghamScript = 92,
+ OlChikiScript = 93,
+ OldHungarianScript = 94,
+ OldItalicScript = 95,
+ OldNorthArabianScript = 96,
+ OldPermicScript = 97,
+ OldPersianScript = 98,
+ OldSouthArabianScript = 99,
+ OrkhonScript = 100,
+ OsageScript = 101,
+ OsmanyaScript = 102,
+ PahawhHmongScript = 103,
+ PalmyreneScript = 104,
+ PauCinHauScript = 105,
+ PhagsPaScript = 106,
+ PhoenicianScript = 107,
+ PollardPhoneticScript = 108,
+ PsalterPahlaviScript = 109,
+ RejangScript = 110,
+ RunicScript = 111,
+ SamaritanScript = 112,
+ SaurashtraScript = 113,
+ SharadaScript = 114,
+ ShavianScript = 115,
+ SiddhamScript = 116,
+ SignWritingScript = 117,
+ SimplifiedHanScript = 118,
+ SinhalaScript = 119,
+ SoraSompengScript = 120,
+ SundaneseScript = 121,
+ SylotiNagriScript = 122,
+ SyriacScript = 123,
+ TagalogScript = 124,
+ TagbanwaScript = 125,
+ TaiLeScript = 126,
+ TaiVietScript = 127,
+ TakriScript = 128,
+ TamilScript = 129,
+ TangutScript = 130,
+ TeluguScript = 131,
+ ThaanaScript = 132,
+ ThaiScript = 133,
+ TibetanScript = 134,
+ TifinaghScript = 135,
+ TirhutaScript = 136,
+ TraditionalHanScript = 137,
+ UgariticScript = 138,
+ VaiScript = 139,
+ VarangKshitiScript = 140,
+ YiScript = 141,
+ HanifiScript = 142,
+ BengaliScript = BanglaScript,
+ MendeKikakuiScript = MendeScript,
+ OriyaScript = OdiaScript,
SimplifiedChineseScript = SimplifiedHanScript,
TraditionalChineseScript = TraditionalHanScript,
- LastScript = JamoScript
+ LastScript = HanifiScript
};
- enum Country {
- AnyCountry = 0,
+ // ### Qt 7: Rename to Territory
+ enum Country : ushort {
+ AnyTerritory = 0,
Afghanistan = 1,
- Albania = 2,
- Algeria = 3,
- AmericanSamoa = 4,
- Andorra = 5,
- Angola = 6,
- Anguilla = 7,
- Antarctica = 8,
- AntiguaAndBarbuda = 9,
- Argentina = 10,
- Armenia = 11,
- Aruba = 12,
- Australia = 13,
- Austria = 14,
- Azerbaijan = 15,
- Bahamas = 16,
- Bahrain = 17,
- Bangladesh = 18,
- Barbados = 19,
- Belarus = 20,
- Belgium = 21,
- Belize = 22,
- Benin = 23,
- Bermuda = 24,
- Bhutan = 25,
- Bolivia = 26,
- BosniaAndHerzegowina = 27,
- Botswana = 28,
- BouvetIsland = 29,
- Brazil = 30,
- BritishIndianOceanTerritory = 31,
- Brunei = 32,
- Bulgaria = 33,
- BurkinaFaso = 34,
- Burundi = 35,
- Cambodia = 36,
- Cameroon = 37,
- Canada = 38,
- CapeVerde = 39,
- CaymanIslands = 40,
- CentralAfricanRepublic = 41,
- Chad = 42,
- Chile = 43,
- China = 44,
- ChristmasIsland = 45,
- CocosIslands = 46,
- Colombia = 47,
- Comoros = 48,
- CongoKinshasa = 49,
- CongoBrazzaville = 50,
- CookIslands = 51,
- CostaRica = 52,
- IvoryCoast = 53,
- Croatia = 54,
- Cuba = 55,
- Cyprus = 56,
- CzechRepublic = 57,
- Denmark = 58,
- Djibouti = 59,
- Dominica = 60,
- DominicanRepublic = 61,
- EastTimor = 62,
- Ecuador = 63,
- Egypt = 64,
- ElSalvador = 65,
- EquatorialGuinea = 66,
- Eritrea = 67,
- Estonia = 68,
- Ethiopia = 69,
- FalklandIslands = 70,
- FaroeIslands = 71,
- Fiji = 72,
- Finland = 73,
- France = 74,
- Guernsey = 75,
- FrenchGuiana = 76,
- FrenchPolynesia = 77,
- FrenchSouthernTerritories = 78,
- Gabon = 79,
- Gambia = 80,
- Georgia = 81,
- Germany = 82,
- Ghana = 83,
- Gibraltar = 84,
- Greece = 85,
- Greenland = 86,
- Grenada = 87,
- Guadeloupe = 88,
- Guam = 89,
- Guatemala = 90,
- Guinea = 91,
- GuineaBissau = 92,
- Guyana = 93,
- Haiti = 94,
- HeardAndMcDonaldIslands = 95,
- Honduras = 96,
- HongKong = 97,
- Hungary = 98,
- Iceland = 99,
- India = 100,
- Indonesia = 101,
- Iran = 102,
- Iraq = 103,
- Ireland = 104,
- Israel = 105,
- Italy = 106,
- Jamaica = 107,
- Japan = 108,
- Jordan = 109,
- Kazakhstan = 110,
- Kenya = 111,
- Kiribati = 112,
- NorthKorea = 113,
- SouthKorea = 114,
- Kuwait = 115,
- Kyrgyzstan = 116,
- Laos = 117,
- Latvia = 118,
- Lebanon = 119,
- Lesotho = 120,
- Liberia = 121,
- Libya = 122,
- Liechtenstein = 123,
- Lithuania = 124,
- Luxembourg = 125,
- Macau = 126,
- Macedonia = 127,
- Madagascar = 128,
- Malawi = 129,
- Malaysia = 130,
- Maldives = 131,
- Mali = 132,
- Malta = 133,
- MarshallIslands = 134,
- Martinique = 135,
- Mauritania = 136,
- Mauritius = 137,
- Mayotte = 138,
- Mexico = 139,
- Micronesia = 140,
- Moldova = 141,
- Monaco = 142,
- Mongolia = 143,
- Montserrat = 144,
- Morocco = 145,
- Mozambique = 146,
- Myanmar = 147,
- Namibia = 148,
- NauruCountry = 149,
- Nepal = 150,
- Netherlands = 151,
- CuraSao = 152,
- NewCaledonia = 153,
- NewZealand = 154,
- Nicaragua = 155,
- Niger = 156,
- Nigeria = 157,
- Niue = 158,
- NorfolkIsland = 159,
- NorthernMarianaIslands = 160,
- Norway = 161,
- Oman = 162,
- Pakistan = 163,
- Palau = 164,
- PalestinianTerritories = 165,
- Panama = 166,
- PapuaNewGuinea = 167,
- Paraguay = 168,
- Peru = 169,
- Philippines = 170,
- Pitcairn = 171,
- Poland = 172,
- Portugal = 173,
- PuertoRico = 174,
- Qatar = 175,
- Reunion = 176,
- Romania = 177,
- Russia = 178,
- Rwanda = 179,
- SaintKittsAndNevis = 180,
- SaintLucia = 181,
- SaintVincentAndTheGrenadines = 182,
- Samoa = 183,
- SanMarino = 184,
- SaoTomeAndPrincipe = 185,
- SaudiArabia = 186,
- Senegal = 187,
- Seychelles = 188,
- SierraLeone = 189,
- Singapore = 190,
- Slovakia = 191,
- Slovenia = 192,
- SolomonIslands = 193,
- Somalia = 194,
- SouthAfrica = 195,
- SouthGeorgiaAndTheSouthSandwichIslands = 196,
- Spain = 197,
- SriLanka = 198,
- SaintHelena = 199,
+ AlandIslands = 2,
+ Albania = 3,
+ Algeria = 4,
+ AmericanSamoa = 5,
+ Andorra = 6,
+ Angola = 7,
+ Anguilla = 8,
+ Antarctica = 9,
+ AntiguaAndBarbuda = 10,
+ Argentina = 11,
+ Armenia = 12,
+ Aruba = 13,
+ AscensionIsland = 14,
+ Australia = 15,
+ Austria = 16,
+ Azerbaijan = 17,
+ Bahamas = 18,
+ Bahrain = 19,
+ Bangladesh = 20,
+ Barbados = 21,
+ Belarus = 22,
+ Belgium = 23,
+ Belize = 24,
+ Benin = 25,
+ Bermuda = 26,
+ Bhutan = 27,
+ Bolivia = 28,
+ BosniaAndHerzegovina = 29,
+ Botswana = 30,
+ BouvetIsland = 31,
+ Brazil = 32,
+ BritishIndianOceanTerritory = 33,
+ BritishVirginIslands = 34,
+ Brunei = 35,
+ Bulgaria = 36,
+ BurkinaFaso = 37,
+ Burundi = 38,
+ Cambodia = 39,
+ Cameroon = 40,
+ Canada = 41,
+ CanaryIslands = 42,
+ CapeVerde = 43,
+ CaribbeanNetherlands = 44,
+ CaymanIslands = 45,
+ CentralAfricanRepublic = 46,
+ CeutaAndMelilla = 47,
+ Chad = 48,
+ Chile = 49,
+ China = 50,
+ ChristmasIsland = 51,
+ ClippertonIsland = 52,
+ CocosIslands = 53,
+ Colombia = 54,
+ Comoros = 55,
+ CongoBrazzaville = 56,
+ CongoKinshasa = 57,
+ CookIslands = 58,
+ CostaRica = 59,
+ Croatia = 60,
+ Cuba = 61,
+ Curacao = 62,
+ Cyprus = 63,
+ Czechia = 64,
+ Denmark = 65,
+ DiegoGarcia = 66,
+ Djibouti = 67,
+ Dominica = 68,
+ DominicanRepublic = 69,
+ Ecuador = 70,
+ Egypt = 71,
+ ElSalvador = 72,
+ EquatorialGuinea = 73,
+ Eritrea = 74,
+ Estonia = 75,
+ Eswatini = 76,
+ Ethiopia = 77,
+ Europe = 78,
+ EuropeanUnion = 79,
+ FalklandIslands = 80,
+ FaroeIslands = 81,
+ Fiji = 82,
+ Finland = 83,
+ France = 84,
+ FrenchGuiana = 85,
+ FrenchPolynesia = 86,
+ FrenchSouthernTerritories = 87,
+ Gabon = 88,
+ Gambia = 89,
+ Georgia = 90,
+ Germany = 91,
+ Ghana = 92,
+ Gibraltar = 93,
+ Greece = 94,
+ Greenland = 95,
+ Grenada = 96,
+ Guadeloupe = 97,
+ Guam = 98,
+ Guatemala = 99,
+ Guernsey = 100,
+ GuineaBissau = 101,
+ Guinea = 102,
+ Guyana = 103,
+ Haiti = 104,
+ HeardAndMcDonaldIslands = 105,
+ Honduras = 106,
+ HongKong = 107,
+ Hungary = 108,
+ Iceland = 109,
+ India = 110,
+ Indonesia = 111,
+ Iran = 112,
+ Iraq = 113,
+ Ireland = 114,
+ IsleOfMan = 115,
+ Israel = 116,
+ Italy = 117,
+ IvoryCoast = 118,
+ Jamaica = 119,
+ Japan = 120,
+ Jersey = 121,
+ Jordan = 122,
+ Kazakhstan = 123,
+ Kenya = 124,
+ Kiribati = 125,
+ Kosovo = 126,
+ Kuwait = 127,
+ Kyrgyzstan = 128,
+ Laos = 129,
+ LatinAmerica = 130,
+ Latvia = 131,
+ Lebanon = 132,
+ Lesotho = 133,
+ Liberia = 134,
+ Libya = 135,
+ Liechtenstein = 136,
+ Lithuania = 137,
+ Luxembourg = 138,
+ Macao = 139,
+ Macedonia = 140,
+ Madagascar = 141,
+ Malawi = 142,
+ Malaysia = 143,
+ Maldives = 144,
+ Mali = 145,
+ Malta = 146,
+ MarshallIslands = 147,
+ Martinique = 148,
+ Mauritania = 149,
+ Mauritius = 150,
+ Mayotte = 151,
+ Mexico = 152,
+ Micronesia = 153,
+ Moldova = 154,
+ Monaco = 155,
+ Mongolia = 156,
+ Montenegro = 157,
+ Montserrat = 158,
+ Morocco = 159,
+ Mozambique = 160,
+ Myanmar = 161,
+ Namibia = 162,
+ NauruTerritory = 163,
+ Nepal = 164,
+ Netherlands = 165,
+ NewCaledonia = 166,
+ NewZealand = 167,
+ Nicaragua = 168,
+ Nigeria = 169,
+ Niger = 170,
+ Niue = 171,
+ NorfolkIsland = 172,
+ NorthernMarianaIslands = 173,
+ NorthKorea = 174,
+ Norway = 175,
+ Oman = 176,
+ OutlyingOceania = 177,
+ Pakistan = 178,
+ Palau = 179,
+ PalestinianTerritories = 180,
+ Panama = 181,
+ PapuaNewGuinea = 182,
+ Paraguay = 183,
+ Peru = 184,
+ Philippines = 185,
+ Pitcairn = 186,
+ Poland = 187,
+ Portugal = 188,
+ PuertoRico = 189,
+ Qatar = 190,
+ Reunion = 191,
+ Romania = 192,
+ Russia = 193,
+ Rwanda = 194,
+ SaintBarthelemy = 195,
+ SaintHelena = 196,
+ SaintKittsAndNevis = 197,
+ SaintLucia = 198,
+ SaintMartin = 199,
SaintPierreAndMiquelon = 200,
- Sudan = 201,
- Suriname = 202,
- SvalbardAndJanMayenIslands = 203,
- Swaziland = 204,
- Sweden = 205,
- Switzerland = 206,
- Syria = 207,
- Taiwan = 208,
- Tajikistan = 209,
- Tanzania = 210,
- Thailand = 211,
- Togo = 212,
- TokelauCountry = 213,
- Tonga = 214,
- TrinidadAndTobago = 215,
- Tunisia = 216,
- Turkey = 217,
- Turkmenistan = 218,
- TurksAndCaicosIslands = 219,
- TuvaluCountry = 220,
- Uganda = 221,
- Ukraine = 222,
- UnitedArabEmirates = 223,
- UnitedKingdom = 224,
- UnitedStates = 225,
- UnitedStatesMinorOutlyingIslands = 226,
- Uruguay = 227,
- Uzbekistan = 228,
- Vanuatu = 229,
- VaticanCityState = 230,
- Venezuela = 231,
- Vietnam = 232,
- BritishVirginIslands = 233,
- UnitedStatesVirginIslands = 234,
- WallisAndFutunaIslands = 235,
- WesternSahara = 236,
- Yemen = 237,
- CanaryIslands = 238,
- Zambia = 239,
- Zimbabwe = 240,
- ClippertonIsland = 241,
- Montenegro = 242,
- Serbia = 243,
- SaintBarthelemy = 244,
- SaintMartin = 245,
- LatinAmerica = 246,
- AscensionIsland = 247,
- AlandIslands = 248,
- DiegoGarcia = 249,
- CeutaAndMelilla = 250,
- IsleOfMan = 251,
- Jersey = 252,
- TristanDaCunha = 253,
- SouthSudan = 254,
- Bonaire = 255,
- SintMaarten = 256,
- Kosovo = 257,
- EuropeanUnion = 258,
- OutlyingOceania = 259,
- World = 260,
- Europe = 261,
+ SaintVincentAndGrenadines = 201,
+ Samoa = 202,
+ SanMarino = 203,
+ SaoTomeAndPrincipe = 204,
+ SaudiArabia = 205,
+ Senegal = 206,
+ Serbia = 207,
+ Seychelles = 208,
+ SierraLeone = 209,
+ Singapore = 210,
+ SintMaarten = 211,
+ Slovakia = 212,
+ Slovenia = 213,
+ SolomonIslands = 214,
+ Somalia = 215,
+ SouthAfrica = 216,
+ SouthGeorgiaAndSouthSandwichIslands = 217,
+ SouthKorea = 218,
+ SouthSudan = 219,
+ Spain = 220,
+ SriLanka = 221,
+ Sudan = 222,
+ Suriname = 223,
+ SvalbardAndJanMayen = 224,
+ Sweden = 225,
+ Switzerland = 226,
+ Syria = 227,
+ Taiwan = 228,
+ Tajikistan = 229,
+ Tanzania = 230,
+ Thailand = 231,
+ TimorLeste = 232,
+ Togo = 233,
+ TokelauTerritory = 234,
+ Tonga = 235,
+ TrinidadAndTobago = 236,
+ TristanDaCunha = 237,
+ Tunisia = 238,
+ Turkey = 239,
+ Turkmenistan = 240,
+ TurksAndCaicosIslands = 241,
+ TuvaluTerritory = 242,
+ Uganda = 243,
+ Ukraine = 244,
+ UnitedArabEmirates = 245,
+ UnitedKingdom = 246,
+ UnitedStatesOutlyingIslands = 247,
+ UnitedStates = 248,
+ UnitedStatesVirginIslands = 249,
+ Uruguay = 250,
+ Uzbekistan = 251,
+ Vanuatu = 252,
+ VaticanCity = 253,
+ Venezuela = 254,
+ Vietnam = 255,
+ WallisAndFutuna = 256,
+ WesternSahara = 257,
+ World = 258,
+ Yemen = 259,
+ Zambia = 260,
+ Zimbabwe = 261,
+ AnyCountry = AnyTerritory,
+ Bonaire = CaribbeanNetherlands,
+ BosniaAndHerzegowina = BosniaAndHerzegovina,
+ CuraSao = Curacao,
+ CzechRepublic = Czechia,
DemocraticRepublicOfCongo = CongoKinshasa,
DemocraticRepublicOfKorea = NorthKorea,
+ EastTimor = TimorLeste,
LatinAmericaAndTheCaribbean = LatinAmerica,
+ Macau = Macao,
+ NauruCountry = NauruTerritory,
PeoplesRepublicOfCongo = CongoBrazzaville,
RepublicOfKorea = SouthKorea,
RussianFederation = Russia,
+ SaintVincentAndTheGrenadines = SaintVincentAndGrenadines,
+ SouthGeorgiaAndTheSouthSandwichIslands = SouthGeorgiaAndSouthSandwichIslands,
+ SvalbardAndJanMayenIslands = SvalbardAndJanMayen,
+ Swaziland = Eswatini,
SyrianArabRepublic = Syria,
- Tokelau = TokelauCountry,
- Tuvalu = TuvaluCountry,
+ TokelauCountry = TokelauTerritory,
+ TuvaluCountry = TuvaluTerritory,
+ UnitedStatesMinorOutlyingIslands = UnitedStatesOutlyingIslands,
+ VaticanCityState = VaticanCity,
+ WallisAndFutunaIslands = WallisAndFutuna,
- LastCountry = Europe
+ LastTerritory = Zimbabwe,
+ LastCountry = LastTerritory
};
// GENERATED PART ENDS HERE
+ using Territory = Country; // ### Qt 7: reverse
+
Q_ENUM(Language)
Q_ENUM(Country)
Q_ENUM(Script)
@@ -905,6 +873,7 @@ public:
Q_ENUM(MeasurementSystem)
enum FormatType { LongFormat, ShortFormat, NarrowFormat };
+ Q_ENUM(FormatType)
enum NumberOption {
DefaultNumberOptions = 0x0,
OmitGroupSeparator = 0x01,
@@ -915,16 +884,21 @@ public:
RejectTrailingZeroesAfterDot = 0x20
};
Q_DECLARE_FLAGS(NumberOptions, NumberOption)
+ Q_FLAG(NumberOptions)
enum FloatingPointPrecisionOption {
FloatingPointShortest = -128
};
+ enum class TagSeparator : char { Dash = '-', Underscore = '_' };
+ Q_ENUM(TagSeparator)
+
enum CurrencySymbolFormat {
CurrencyIsoCode,
CurrencySymbol,
CurrencyDisplayName
};
+ Q_ENUM(CurrencySymbolFormat)
enum DataSizeFormat {
// Single-bit values, for internal use.
@@ -940,38 +914,61 @@ public:
Q_FLAG(DataSizeFormats)
QLocale();
+ QT_CORE_INLINE_SINCE(6, 4)
explicit QLocale(const QString &name);
- QLocale(Language language, Country country = AnyCountry);
- QLocale(Language language, Script script, Country country);
- QLocale(const QLocale &other);
- QLocale &operator=(QLocale &&other) noexcept { swap(other); return *this; }
- QLocale &operator=(const QLocale &other);
+ explicit QLocale(QStringView name);
+ QLocale(Language language, Territory territory);
+ QLocale(Language language, Script script = AnyScript, Territory territory = AnyTerritory);
+ QLocale(const QLocale &other) noexcept;
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QLocale)
+ QLocale &operator=(const QLocale &other) noexcept;
~QLocale();
- void swap(QLocale &other) noexcept { qSwap(d, other.d); }
+ void swap(QLocale &other) noexcept { d.swap(other.d); }
Language language() const;
Script script() const;
+ Territory territory() const;
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_DEPRECATED_VERSION_X_6_6("Use territory() instead")
Country country() const;
- QString name() const;
+#endif
+#if QT_CORE_REMOVED_SINCE(6, 7)
+ QString name() const;
QString bcp47Name() const;
+#endif
+ QString name(TagSeparator separator = TagSeparator::Underscore) const;
+ QString bcp47Name(TagSeparator separator = TagSeparator::Dash) const;
+
QString nativeLanguageName() const;
+ QString nativeTerritoryName() const;
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_DEPRECATED_VERSION_X_6_6("Use nativeTerritoryName() instead")
QString nativeCountryName() const;
-
-#if QT_STRINGVIEW_LEVEL < 2
- short toShort(const QString &s, bool *ok = nullptr) const;
- ushort toUShort(const QString &s, bool *ok = nullptr) const;
- int toInt(const QString &s, bool *ok = nullptr) const;
- uint toUInt(const QString &s, bool *ok = nullptr) const;
- long toLong(const QString &s, bool *ok = nullptr) const;
- ulong toULong(const QString &s, bool *ok = nullptr) const;
- qlonglong toLongLong(const QString &s, bool *ok = nullptr) const;
- qulonglong toULongLong(const QString &s, bool *ok = nullptr) const;
- float toFloat(const QString &s, bool *ok = nullptr) const;
- double toDouble(const QString &s, bool *ok = nullptr) const;
#endif
+ short toShort(const QString &s, bool *ok = nullptr) const
+ { return toShort(qToStringViewIgnoringNull(s), ok); }
+ ushort toUShort(const QString &s, bool *ok = nullptr) const
+ { return toUShort(qToStringViewIgnoringNull(s), ok); }
+ int toInt(const QString &s, bool *ok = nullptr) const
+ { return toInt(qToStringViewIgnoringNull(s), ok); }
+ uint toUInt(const QString &s, bool *ok = nullptr) const
+ { return toUInt(qToStringViewIgnoringNull(s), ok); }
+ long toLong(const QString &s, bool *ok = nullptr) const
+ { return toLong(qToStringViewIgnoringNull(s), ok); }
+ ulong toULong(const QString &s, bool *ok = nullptr) const
+ { return toULong(qToStringViewIgnoringNull(s), ok); }
+ qlonglong toLongLong(const QString &s, bool *ok = nullptr) const
+ { return toLongLong(qToStringViewIgnoringNull(s), ok); }
+ qulonglong toULongLong(const QString &s, bool *ok = nullptr) const
+ { return toULongLong(qToStringViewIgnoringNull(s), ok); }
+ float toFloat(const QString &s, bool *ok = nullptr) const
+ { return toFloat(qToStringViewIgnoringNull(s), ok); }
+ double toDouble(const QString &s, bool *ok = nullptr) const
+ { return toDouble(qToStringViewIgnoringNull(s), ok); }
+
short toShort(QStringView s, bool *ok = nullptr) const;
ushort toUShort(QStringView s, bool *ok = nullptr) const;
int toInt(QStringView s, bool *ok = nullptr) const;
@@ -985,50 +982,73 @@ public:
QString toString(qlonglong i) const;
QString toString(qulonglong i) const;
- inline QString toString(long i) const;
- inline QString toString(ulong i) const;
- inline QString toString(short i) const;
- inline QString toString(ushort i) const;
- inline QString toString(int i) const;
- inline QString toString(uint i) const;
- QString toString(double i, char f = 'g', int prec = 6) const;
- inline QString toString(float i, char f = 'g', int prec = 6) const;
+ QString toString(long i) const { return toString(qlonglong(i)); }
+ QString toString(ulong i) const { return toString(qulonglong(i)); }
+ QString toString(short i) const { return toString(qlonglong(i)); }
+ QString toString(ushort i) const { return toString(qulonglong(i)); }
+ QString toString(int i) const { return toString(qlonglong(i)); }
+ QString toString(uint i) const { return toString(qulonglong(i)); }
+ QString toString(double f, char format = 'g', int precision = 6) const;
+ QString toString(float f, char format = 'g', int precision = 6) const
+ { return toString(double(f), format, precision); }
-#if QT_STRINGVIEW_LEVEL < 2
- QString toString(QDate date, const QString &formatStr) const;
- QString toString(QTime time, const QString &formatStr) const;
- QString toString(const QDateTime &dateTime, const QString &format) const;
-#endif
- QString toString(QDate date, QStringView formatStr) const;
- QString toString(QTime time, QStringView formatStr) const;
+ // (Can't inline first two: passing by value doesn't work when only forward-declared.)
+ QString toString(QDate date, const QString &format) const;
+ QString toString(QTime time, const QString &format) const;
+ QString toString(const QDateTime &dateTime, const QString &format) const
+ { return toString(dateTime, qToStringViewIgnoringNull(format)); }
+ QString toString(QDate date, QStringView format) const;
+ QString toString(QTime time, QStringView format) const;
QString toString(const QDateTime &dateTime, QStringView format) const;
QString toString(QDate date, FormatType format = LongFormat) const;
QString toString(QTime time, FormatType format = LongFormat) const;
QString toString(const QDateTime &dateTime, FormatType format = LongFormat) const;
- /* Removing default value for `format' is done intentionally,
- * after all tests we will remove non-calendar-aware version of these functions,
- * and add a default value for both calendar instance, and format
+ /* We can't pass a default for QCalendar (its declaration mentions
+ * QLocale::FormatType, so it has to #include this header, which thus can't
+ * #include its, so we can't instantiate QCalendar() as default). This
+ * precludes any default for format, too.
*/
- QString toString(QDate date, QStringView formatStr, QCalendar cal) const;
+ QString toString(QDate date, QStringView format, QCalendar cal) const;
QString toString(QDate date, FormatType format, QCalendar cal) const;
QString toString(const QDateTime &dateTime, FormatType format, QCalendar cal) const;
- QString toString(const QDateTime &dateTime, QStringView formatStr, QCalendar cal) const;
+ QString toString(const QDateTime &dateTime, QStringView format, QCalendar cal) const;
QString dateFormat(FormatType format = LongFormat) const;
QString timeFormat(FormatType format = LongFormat) const;
QString dateTimeFormat(FormatType format = LongFormat) const;
+ // QCalendar's header has to #include QLocale's, preventing the reverse, so
+ // QCalendar parameters can't have defaults here.
#if QT_CONFIG(datestring)
- QDate toDate(const QString &string, FormatType = LongFormat) const;
QTime toTime(const QString &string, FormatType = LongFormat) const;
- QDateTime toDateTime(const QString &string, FormatType format = LongFormat) const;
- QDate toDate(const QString &string, const QString &format) const;
QTime toTime(const QString &string, const QString &format) const;
+# if QT_CORE_REMOVED_SINCE(6, 7)
+ QDate toDate(const QString &string, FormatType = LongFormat) const;
+ QDate toDate(const QString &string, const QString &format) const;
+ QDateTime toDateTime(const QString &string, FormatType format = LongFormat) const;
QDateTime toDateTime(const QString &string, const QString &format) const;
// Calendar-aware API
QDate toDate(const QString &string, FormatType format, QCalendar cal) const;
- QDateTime toDateTime(const QString &string, FormatType format, QCalendar cal) const;
QDate toDate(const QString &string, const QString &format, QCalendar cal) const;
+ QDateTime toDateTime(const QString &string, FormatType format, QCalendar cal) const;
QDateTime toDateTime(const QString &string, const QString &format, QCalendar cal) const;
+# endif
+ QDate toDate(const QString &string, FormatType = LongFormat,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ QDate toDate(const QString &string, const QString &format,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ QDateTime toDateTime(const QString &string, FormatType format = LongFormat,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ QDateTime toDateTime(const QString &string, const QString &format,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ // Calendar-aware API
+ QDate toDate(const QString &string, FormatType format, QCalendar cal,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ QDate toDate(const QString &string, const QString &format, QCalendar cal,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ QDateTime toDateTime(const QString &string, FormatType format, QCalendar cal,
+ int baseYear = DefaultTwoDigitBaseYear) const;
+ QDateTime toDateTime(const QString &string, const QString &format, QCalendar cal,
+ int baseYear = DefaultTwoDigitBaseYear) const;
#endif
QString decimalPoint() const;
@@ -1060,36 +1080,84 @@ public:
QString currencySymbol(CurrencySymbolFormat = CurrencySymbol) const;
QString toCurrencyString(qlonglong, const QString &symbol = QString()) const;
QString toCurrencyString(qulonglong, const QString &symbol = QString()) const;
- inline QString toCurrencyString(short, const QString &symbol = QString()) const;
- inline QString toCurrencyString(ushort, const QString &symbol = QString()) const;
- inline QString toCurrencyString(int, const QString &symbol = QString()) const;
- inline QString toCurrencyString(uint, const QString &symbol = QString()) const;
+ QString toCurrencyString(short i, const QString &symbol = QString()) const
+ { return toCurrencyString(qlonglong(i), symbol); }
+ QString toCurrencyString(ushort i, const QString &symbol = QString()) const
+ { return toCurrencyString(qulonglong(i), symbol); }
+ QString toCurrencyString(int i, const QString &symbol = QString()) const
+ { return toCurrencyString(qlonglong(i), symbol); }
+ QString toCurrencyString(uint i, const QString &symbol = QString()) const
+ { return toCurrencyString(qulonglong(i), symbol); }
QString toCurrencyString(double, const QString &symbol = QString(), int precision = -1) const;
- inline QString toCurrencyString(float i, const QString &symbol = QString(), int precision = -1) const
+ QString toCurrencyString(float i, const QString &symbol = QString(), int precision = -1) const
{ return toCurrencyString(double(i), symbol, precision); }
QString formattedDataSize(qint64 bytes, int precision = 2, DataSizeFormats format = DataSizeIecFormat) const;
+#if QT_CORE_REMOVED_SINCE(6, 7)
QStringList uiLanguages() const;
+#endif
+ QStringList uiLanguages(TagSeparator separator = TagSeparator::Dash) const;
+
+ enum LanguageCodeType {
+ ISO639Part1 = 1 << 0,
+ ISO639Part2B = 1 << 1,
+ ISO639Part2T = 1 << 2,
+ ISO639Part3 = 1 << 3,
+ LegacyLanguageCode = 1 << 15,
- bool operator==(const QLocale &other) const;
- bool operator!=(const QLocale &other) const;
+ ISO639Part2 = ISO639Part2B | ISO639Part2T,
+ ISO639Alpha2 = ISO639Part1,
+ ISO639Alpha3 = ISO639Part2 | ISO639Part3,
+ ISO639 = ISO639Alpha2 | ISO639Alpha3,
+
+ AnyLanguageCode = -1
+ };
+ Q_DECLARE_FLAGS(LanguageCodeTypes, LanguageCodeType)
+ Q_FLAG(LanguageCodeTypes)
+
+#if QT_CORE_REMOVED_SINCE(6, 3)
+ static QString languageToCode(Language language);
+ static Language codeToLanguage(QStringView languageCode) noexcept;
+#endif
+ static QString languageToCode(Language language, LanguageCodeTypes codeTypes = AnyLanguageCode);
+ static Language codeToLanguage(QStringView languageCode,
+ LanguageCodeTypes codeTypes = AnyLanguageCode) noexcept;
+ static QString territoryToCode(Territory territory);
+ static Territory codeToTerritory(QStringView territoryCode) noexcept;
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_DEPRECATED_VERSION_X_6_6("Use territoryToCode(Territory) instead")
+ static QString countryToCode(Country country);
+ QT_DEPRECATED_VERSION_X_6_6("Use codeToTerritory(QStringView) instead")
+ static Country codeToCountry(QStringView countryCode) noexcept;
+#endif
+ static QString scriptToCode(Script script);
+ static Script codeToScript(QStringView scriptCode) noexcept;
static QString languageToString(Language language);
+ static QString territoryToString(Territory territory);
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_DEPRECATED_VERSION_X_6_6("Use territoryToString(Territory) instead")
static QString countryToString(Country country);
+#endif
static QString scriptToString(Script script);
static void setDefault(const QLocale &locale);
static QLocale c() { return QLocale(C); }
static QLocale system();
- static QList<QLocale> matchingLocales(QLocale::Language language, QLocale::Script script, QLocale::Country country);
+ static QList<QLocale> matchingLocales(QLocale::Language language, QLocale::Script script,
+ QLocale::Territory territory);
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_DEPRECATED_VERSION_X_6_6("Query territory() on each entry from matchingLocales() instead")
static QList<Country> countriesForLanguage(Language lang);
+#endif
void setNumberOptions(NumberOptions options);
NumberOptions numberOptions() const;
enum QuotationStyle { StandardQuotation, AlternateQuotation };
+ Q_ENUM(QuotationStyle)
QString quoteString(const QString &str, QuotationStyle style = StandardQuotation) const
{ return quoteString(QStringView(str), style); }
QString quoteString(QStringView str, QuotationStyle style = StandardQuotation) const;
@@ -1098,40 +1166,26 @@ public:
private:
QLocale(QLocalePrivate &dd);
+ bool equals(const QLocale &other) const;
friend class QLocalePrivate;
friend class QSystemLocale;
friend class QCalendarBackend;
- friend class QGregorianCalendar;
+ friend class QRomanCalendar;
friend Q_CORE_EXPORT size_t qHash(const QLocale &key, size_t seed) noexcept;
+ friend bool operator==(const QLocale &lhs, const QLocale &rhs) { return lhs.equals(rhs); }
+ friend bool operator!=(const QLocale &lhs, const QLocale &rhs) { return !lhs.equals(rhs); }
+
QSharedDataPointer<QLocalePrivate> d;
};
Q_DECLARE_SHARED(QLocale)
Q_DECLARE_OPERATORS_FOR_FLAGS(QLocale::NumberOptions)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QLocale::LanguageCodeTypes)
-inline QString QLocale::toString(long i) const
- { return toString(qlonglong(i)); }
-inline QString QLocale::toString(ulong i) const
- { return toString(qulonglong(i)); }
-inline QString QLocale::toString(short i) const
- { return toString(qlonglong(i)); }
-inline QString QLocale::toString(ushort i) const
- { return toString(qulonglong(i)); }
-inline QString QLocale::toString(int i) const
- { return toString(qlonglong(i)); }
-inline QString QLocale::toString(uint i) const
- { return toString(qulonglong(i)); }
-inline QString QLocale::toString(float i, char f, int prec) const
- { return toString(double(i), f, prec); }
-
-inline QString QLocale::toCurrencyString(short i, const QString &symbol) const
- { return toCurrencyString(qlonglong(i), symbol); }
-inline QString QLocale::toCurrencyString(ushort i, const QString &symbol) const
- { return toCurrencyString(qulonglong(i), symbol); }
-inline QString QLocale::toCurrencyString(int i, const QString &symbol) const
-{ return toCurrencyString(qlonglong(i), symbol); }
-inline QString QLocale::toCurrencyString(uint i, const QString &symbol) const
-{ return toCurrencyString(qulonglong(i), symbol); }
+#if QT_CORE_INLINE_IMPL_SINCE(6, 4)
+QLocale::QLocale(const QString &name)
+ : QLocale(qToStringViewIgnoringNull(name)) {}
+#endif
#ifndef QT_NO_DATASTREAM
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QLocale &);
diff --git a/src/corelib/text/qlocale.qdoc b/src/corelib/text/qlocale.qdoc
index c9c62d0878..f3f0a5cc2d 100644
--- a/src/corelib/text/qlocale.qdoc
+++ b/src/corelib/text/qlocale.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QLocale
@@ -36,10 +12,9 @@
\ingroup string-processing
\ingroup shared
-
- QLocale is initialized with a language/country pair in its
- constructor and offers number-to-string and string-to-number
- conversion functions similar to those in QString.
+ QLocale is constructed for a specified language, optional script and
+ territory. It offers various facilities for formatting data as text,
+ localized appropriately, and for reading data out of localized text.
Example:
@@ -54,9 +29,6 @@
\list
\li If a QLocale object is constructed with the default constructor,
it will use the default locale's settings.
- \li QString::toInt(), QString::toDouble(), etc., interpret the
- string according to the default locale. If this fails, it
- falls back on the "C" locale.
\li QString::arg() uses the default locale to format a number when
its position specifier in the format string contains an 'L',
e.g. "%L1".
@@ -66,36 +38,47 @@
\snippet code/src_corelib_text_qlocale.cpp 1
- When a language/country pair is specified in the constructor, one
- of three things can happen:
-
- \list
- \li If the language/country pair is found in the database, it is used.
- \li If the language is found but the country is not, or if the country
- is \c AnyCountry, the language is used with the most
- appropriate available country (for example, Germany for German),
- \li If neither the language nor the country are found, QLocale
- defaults to the default locale (see setDefault()).
- \endlist
-
- Use language() and country() to determine the actual language and
- country values used.
-
An alternative method for constructing a QLocale object is by
specifying the locale name.
\snippet code/src_corelib_text_qlocale.cpp 2
- This constructor converts the locale name to a language/country
- pair; it does not use the system locale database.
+ This constructor reads the language, script and/or territory from the given
+ name, accepting either uderscore or dash as separator (and ignoring any
+ trailing \c{.codeset} or \c{@variant} suffix).
\note For the current keyboard input locale take a look at
QInputMethod::locale().
- QLocale's data is based on Common Locale Data Repository v36.
+ QLocale's data is based on Common Locale Data Repository v44.1.
+
+ \section1 Matching combinations of language, script and territory
+
+ QLocale has data, derived from CLDR, for many combinations of language,
+ script and territory, but not all. If it is constructed with all three of
+ these key values specified (treating \c AnyLanguage, \c AnyScript or \c
+ AnyTerritory as unspecified) and QLocale has data for the given combination,
+ this data is used. Otherwise, QLocale does its best to find a sensible
+ combination of language, script and territory, for which it does have data,
+ that matches those that were specified.
+
+ The CLDR provides tables of likely combinations, which are used to fill in
+ any unspecified key or keys; if QLocale has data for the result of such a
+ likely combination, that is used. If no language is specified, and none can
+ be determined from script and territory, or if QLocale has no data for the
+ language, the "C" locale (when reading the keys from a string) or default
+ locale (otherwise) is used.
+
+ When QLocale has no data for the keys specified, with likely keys filled in
+ where unspecified, but does have data for the resulting language, a
+ fall-back is sought, based on ignoring either territory, script or both (in
+ that order). This results in a QLocale which may not match what was asked
+ for, but provides localization that's as suitable as the available data
+ permits, for the keys specified.
- \sa QString::arg(), QString::toInt(), QString::toDouble(),
- QInputMethod::locale()
+ Use language(), script() and territory() to determine the actual keys used.
+
+ \sa QString::arg(), QInputMethod::locale()
*/
/*!
@@ -111,20 +94,18 @@
\value Afar
\value Afrikaans
\value Aghem
- \value Ahom Since Qt 5.7
\value Akan
- \value Akkadian Since Qt 5.1
- \value Akoose Since Qt 5.3
+ \value [since 5.1] Akkadian
+ \value [since 5.3] Akoose
\value Albanian
- \value AmericanSignLanguage Since Qt 5.7
+ \value [since 5.7] AmericanSignLanguage
\value Amharic
- \value AncientEgyptian Since Qt 5.1
- \value AncientGreek Since Qt 5.1
- \value AncientNorthArabian Since Qt 5.5
+ \value [since 5.1] AncientEgyptian
+ \value [since 5.1] AncientGreek
+ \value [since 6.7] Anii
\value Arabic
- \value Aragonese Since Qt 5.1
- \value Aramaic Since Qt 5.1
- \value ArdhamagadhiPrakrit Since Qt 5.7
+ \value [since 5.1] Aragonese
+ \value [since 5.1] Aramaic
\value Armenian
\value Assamese
\value Asturian
@@ -135,52 +116,49 @@
\value Aymara
\value Azerbaijani
\value Bafia
- \value Balinese Since Qt 5.1
+ \value [since 5.1] Balinese
+ \value [since 6.6] Baluchi
\value Bambara
- \value Bamun Since Qt 5.1
+ \value [since 5.1] Bamun
+ \value [since 6.0] Bangla
\value Basaa
\value Bashkir
\value Basque
- \value Bassa Since Qt 5.5
- \value BatakToba Since Qt 5.1
+ \value [since 5.1] BatakToba
\value Belarusian
\value Bemba
\value Bena
- \value Bengali
- \value Bhojpuri Since Qt 5.7
+ \value Bengali Obsolete, please use Bangla
+ \value [since 5.7] Bhojpuri
\value Bhutani Obsolete, please use Dzongkha
- \value Bihari
\value Bislama
\value Blin
\value Bodo
\value Bosnian
\value Breton
- \value Buginese Since Qt 5.1
- \value Buhid Since Qt 5.1
+ \value [since 5.1] Buginese
\value Bulgarian
\value Burmese
\value Byelorussian Obsolete, please use Belarusian
\value Cambodian Obsolete, please use Khmer
- \value Cantonese Since Qt 5.7
- \value Carian Since Qt 5.1
+ \value [since 5.7] Cantonese
\value Catalan
- \value Cebuano Since Qt 5.14
- \value CentralKurdish Since Qt 5.5
- \value CentralMoroccoTamazight
- \value Chakma Since Qt 5.1
+ \value [since 5.14] Cebuano
+ \value [since 6.0] CentralAtlasTamazight
+ \value [since 5.5] CentralKurdish
+ \value CentralMoroccoTamazight Obsolete, please use CentralAtlasTamazight
+ \value [since 5.1] Chakma
\value Chamorro
\value Chechen
\value Cherokee
\value Chewa Obsolete, please use Nyanja
- \value Chickasaw Since Qt 5.14
+ \value [since 5.14] Chickasaw
\value Chiga
\value Chinese (Mandarin)
\value Church
\value Chuvash
- \value ClassicalMandaic Since Qt 5.1
\value Colognian
- \value CongoSwahili
- \value Coptic Since Qt 5.1
+ \value [since 5.1] Coptic
\value Cornish
\value Corsican
\value Cree
@@ -188,18 +166,15 @@
\value Czech
\value Danish
\value Divehi
- \value Dogri Since Qt 5.1
+ \value [since 5.1] Dogri
\value Duala
\value Dutch
\value Dzongkha
- \value EasternCham Since Qt 5.1
- \value EasternKayah Since Qt 5.1
\value Embu
\value English
- \value Erzya Since Qt 5.14
+ \value [since 5.14] Erzya
\value Esperanto
\value Estonian
- \value Etruscan Since Qt 5.1
\value Ewe
\value Ewondo
\value Faroese
@@ -217,34 +192,32 @@
\value Geez
\value Georgian
\value German
- \value Gothic Since Qt 5.1
+ \value [since 5.1] Gothic
\value Greek
- \value Greenlandic
+ \value Greenlandic Obsolete, please use Kalaallisut
\value Guarani
\value Gujarati
\value Gusii
\value Haitian
- \value Hanunoo Since Qt 5.1
+ \value [since 6.5] Haryanvi
\value Hausa
\value Hawaiian
\value Hebrew
\value Herero
- \value HieroglyphicLuwian Since Qt 5.7
\value Hindi
\value HiriMotu
- \value HmongNjua Since Qt 5.5
- \value Ho Since Qt 5.5
\value Hungarian
\value Icelandic
- \value Ido Since Qt 5.12
+ \value [since 5.12] Ido
\value Igbo
- \value InariSami Since Qt 5.5
+ \value [since 5.5] InariSami
\value Indonesian
- \value Ingush Since Qt 5.1
+ \value [since 5.1] Ingush
\value Interlingua
\value Interlingue
\value Inuktitut
- \value Inupiak
+ \value Inupiak Obsolete, please use Inupiaq
+ \value [since 6.0] Inupiaq
\value Irish
\value Italian
\value Japanese
@@ -253,19 +226,22 @@
\value JolaFonyi
\value Kabuverdianu
\value Kabyle
+ \value [since 6.3] Kaingang
\value Kako
+ \value [since 6.0] Kalaallisut
\value Kalenjin
\value Kamba
+ \value [since 6.7] Kangri
\value Kannada
\value Kanuri
\value Kashmiri
\value Kazakh
- \value Kenyang Since Qt 5.5
+ \value [since 5.5] Kenyang
\value Khmer
- \value Kiche Since Qt 5.5
+ \value [since 5.5] Kiche
\value Kikuyu
\value Kinyarwanda
- \value Kirghiz
+ \value Kirghiz Obsolete, please use Kyrgyz
\value Komi
\value Kongo
\value Konkani
@@ -274,212 +250,198 @@
\value KoyraboroSenni
\value KoyraChiini
\value Kpelle
+ \value [since 6.0] Kuanyama
\value Kurdish
\value Kurundi Obsolete, please use Rundi
- \value Kwanyama
+ \value Kwanyama Obsolete, please use Kuanyama
\value Kwasio
- \value Lakota Since Qt 5.3
+ \value [since 6.0] Kyrgyz
+ \value [since 5.3] Lakota
\value Langi
\value Lao
- \value LargeFloweryMiao Since Qt 5.1
\value Latin
\value Latvian
- \value Lepcha Since Qt 5.1
- \value Lezghian Since Qt 5.5
+ \value [since 5.5] Lezghian
\value Limburgish
- \value Limbu Since Qt 5.1
- \value LinearA Since Qt 5.5
\value Lingala
- \value Lisu Since Qt 5.1
- \value LiteraryChinese Since Qt 5.7
+ \value [since 6.6] Ligurian
+ \value [since 5.7] LiteraryChinese
\value Lithuanian
- \value Lojban Since Qt 5.12
- \value LowerSorbian Since Qt 5.5
+ \value [since 5.12] Lojban
+ \value [since 5.5] LowerSorbian
\value LowGerman
\value LubaKatanga
- \value LuleSami Since Qt 5.5
+ \value [since 5.5] LuleSami
\value Luo
- \value Lu Since Qt 5.1
\value Luxembourgish
\value Luyia
- \value Lycian Since Qt 5.1
- \value Lydian Since Qt 5.1
\value Macedonian
\value Machame
- \value Maithili Since Qt 5.5
+ \value [since 5.5] Maithili
\value MakhuwaMeetto
\value Makonde
\value Malagasy
\value Malay
\value Malayalam
\value Maltese
- \value Mandingo Since Qt 5.1
- \value ManichaeanMiddlePersian Since Qt 5.5
- \value Manipuri Since Qt 5.1
+ \value [since 5.1] Mandingo
+ \value [since 5.1] Manipuri
\value Manx
\value Maori
- \value Mapuche Since Qt 5.5
+ \value [since 5.5] Mapuche
\value Marathi
\value Marshallese
\value Masai
- \value Mazanderani Since Qt 5.7
- \value Mende Since Qt 5.5
- \value Meroitic Since Qt 5.1
+ \value [since 5.7] Mazanderani
+ \value [since 5.5] Mende
\value Meru
\value Meta
- \value Mohawk Since Qt 5.5
- \value Moldavian Obsolete, please use Romanian
+ \value [since 5.5] Mohawk
+ \value [since 6.5] Moksha
\value Mongolian
- \value Mono Since Qt 5.5
\value Morisyen
- \value Mru Since Qt 5.7
\value Mundang
- \value Muscogee Since Qt 5.14
+ \value [since 5.14] Muscogee
\value Nama
\value NauruLanguage
- \value Navaho
+ \value Navaho Obsolete, please use Navajo
+ \value [since 6.0] Navajo
\value Ndonga
\value Nepali
- \value Newari Since Qt 5.7
+ \value [since 5.7] Newari
\value Ngiemboon
+ \value [since 6.3] Nheengatu
+ \value [since 6.0] NigerianPidgin
\value Ngomba
- \value Nko Since Qt 5.5
- \value NorthernLuri Since Qt 5.7
+ \value [since 5.5] Nko
+ \value [since 6.5] NorthernFrisian
+ \value [since 5.7] NorthernLuri
\value NorthernSami
\value NorthernSotho
- \value NorthernThai Since Qt 5.1
\value NorthNdebele
- \value NorwegianBokmal same as Norwegian
+ \value NorwegianBokmal
\value NorwegianNynorsk
- \value Norwegian same as NorwegianBokmal
\value Nuer
\value Nyanja
\value Nyankole
+ \value [since 6.5] Obolo
\value Occitan
+ \value [since 6.0] Odia
\value Ojibwa
- \value OldIrish Since Qt 5.1
- \value OldNorse Since Qt 5.1
- \value OldPersian Since Qt 5.1
- \value OldTurkish Since Qt 5.1
- \value Oriya
+ \value [since 5.1] OldIrish
+ \value [since 5.1] OldNorse
+ \value [since 5.1] OldPersian
+ \value Oriya Obsolete, please use Odia
\value Oromo
- \value Osage Since Qt 5.7
+ \value [since 5.7] Osage
\value Ossetic
- \value Pahlavi Since Qt 5.1
- \value Palauan Since Qt 5.7
+ \value [since 5.1] Pahlavi
+ \value [since 5.7] Palauan
\value Pali
- \value Papiamento Since Qt 5.7
- \value Parthian Since Qt 5.1
+ \value [since 5.7] Papiamento
\value Pashto
\value Persian
- \value Phoenician Since Qt 5.1
+ \value [since 5.1] Phoenician
+ \value [since 6.5] Pijin
\value Polish
\value Portuguese
- \value PrakritLanguage Since Qt 5.1
- \value Prussian Since Qt 5.5
+ \value [since 5.5] Prussian
\value Punjabi
\value Quechua
- \value Rejang Since Qt 5.1
+ \value [since 6.5] Rajasthani
\value RhaetoRomance Obsolete, please use Romansh
+ \value [since 6.6] Rohingya
\value Romanian
\value Romansh
\value Rombo
\value Rundi
\value Russian
\value Rwa
- \value Sabaean Since Qt 5.1
\value Saho
\value Sakha
- \value Samaritan Since Qt 5.1
\value Samburu
\value Samoan
\value Sango
\value Sangu
\value Sanskrit
- \value Santali Since Qt 5.1
- \value Saraiki Since Qt 5.7
+ \value [since 5.1] Santali
\value Sardinian
- \value Saurashtra Since Qt 5.1
+ \value [since 5.1] Saurashtra
\value Sena
\value Serbian
- \value SerboCroatian Obsolete, please use Serbian
\value Shambala
\value Shona
\value SichuanYi
- \value Sicilian Since Qt 5.12
+ \value [since 5.12] Sicilian
\value Sidamo
- \value Silesian Since Qt 5.14
+ \value [since 5.14] Silesian
\value Sindhi
\value Sinhala
- \value SkoltSami Since Qt 5.5
+ \value [since 5.5] SkoltSami
\value Slovak
\value Slovenian
\value Soga
\value Somali
- \value Sora Since Qt 5.1
- \value SouthernKurdish Since Qt 5.12
- \value SouthernSami Since Qt 5.5
+ \value [since 5.12] SouthernKurdish
+ \value [since 5.5] SouthernSami
\value SouthernSotho
\value SouthNdebele
\value Spanish
- \value StandardMoroccanTamazight Since Qt 5.3
+ \value [since 5.3] StandardMoroccanTamazight
\value Sundanese
\value Swahili
\value Swati
\value Swedish
\value SwissGerman
- \value Sylheti Since Qt 5.1
\value Syriac
\value Tachelhit
- \value Tagalog Obsolete, please use Filipino
- \value Tagbanwa Since Qt 5.1
\value Tahitian
- \value TaiDam Since Qt 5.1
- \value TaiNua Since Qt 5.1
+ \value [since 5.1] TaiDam
\value Taita
\value Tajik
\value Tamil
- \value Tangut Since Qt 5.7
\value Taroko
\value Tasawaq
\value Tatar
- \value TedimChin Since Qt 5.5
\value Telugu
\value Teso
\value Thai
\value Tibetan
\value Tigre
\value Tigrinya
- \value TokelauLanguage Since Qt 5.7
- \value TokPisin Since Qt 5.7
+ \value [since 5.7] TokelauLanguage
+ \value [since 6.5] TokiPona
+ \value [since 5.7] TokPisin
\value Tongan
+ \value [since 6.6] Torwali
\value Tsonga
\value Tswana
\value Turkish
\value Turkmen
- \value TuvaluLanguage Since Qt 5.7
- \value Twi Obsolete, please use Akan
+ \value [since 5.7] TuvaluLanguage
\value Tyap
- \value Ugaritic Since Qt 5.1
- \value Uighur
- \value Uigur Obsolete, please use Uighur
+ \value [since 5.1] Ugaritic
+ \value Uighur Obsolete, please use Uyghur
+ \value Uigur Obsolete, please use Uyghur
\value Ukrainian
- \value UncodedLanguages Since Qt 5.7
- \value UpperSorbian Since Qt 5.5
+ \value [since 5.5] UpperSorbian
\value Urdu
+ \value [since 6.0] Uyghur
\value Uzbek
\value Vai
\value Venda
+ \value [since 6.7] Venetian
\value Vietnamese
\value Volapuk
\value Vunjo
- \value Walamo
+ \value Walamo Obsolete, please use Wolaytta
\value Walloon
\value Walser
- \value Warlpiri Since Qt 5.5
+ \value [since 5.5] Warlpiri
\value Welsh
- \value WesternBalochi Since Qt 5.12
+ \value [since 5.12] WesternBalochi
\value WesternFrisian same as Frisian
+ \value [since 6.0] Wolaytta
\value Wolof
\value Xhosa
\value Yangben
@@ -495,11 +457,25 @@
*/
/*!
+ \typealias QLocale::Territory
+
+ This enumeration type is an alias for \l Country,
+ which shall be renamed to Territory at a future release.
+
+ \sa territory(), territoryToString()
+*/
+
+/*!
\enum QLocale::Country
- This enumerated type is used to specify a country.
+ This enumerated type is used to identify a territory.
+
+ An individual territory may be a province of a country, a country (by far the
+ most common case) or a larger geographic entity, to which some localization
+ details are specific.
- \value AnyCountry
+ \value AnyCountry Osbolete alias for \c AnyTerritory
+ \value [since 6.2] AnyTerritory
\value Afghanistan
\value AlandIslands
@@ -530,7 +506,8 @@
\value Bhutan
\value Bolivia
\value Bonaire
- \value BosniaAndHerzegowina
+ \value BosniaAndHerzegowina Obsolete, use \c BosniaAndHerzegovina instead
+ \value [since 6.0] BosniaAndHerzegovina
\value Botswana
\value BouvetIsland
\value Brazil
@@ -544,6 +521,7 @@
\value Cameroon
\value Canada
\value CanaryIslands
+ \value CaribbeanNetherlands
\value CapeVerde
\value CaymanIslands
\value CentralAfricanRepublic
@@ -562,11 +540,13 @@
\value CostaRica
\value Croatia
\value Cuba
- \value CuraSao
+ \value [since 6.0] Curacao
+ \value CuraSao Obsolete, use \c Curacao instead
\value Cyprus
- \value CzechRepublic
- \value DemocraticRepublicOfCongo Obsolete, please use CongoKinshasa
- \value DemocraticRepublicOfKorea Obsolete, please use NorthKorea
+ \value [since 6.0] Czechia
+ \value CzechRepublic Obsolete, use \c Czechia instead
+ \value DemocraticRepublicOfCongo Obsolete, use \c CongoKinshasa instead
+ \value DemocraticRepublicOfKorea Obsolete, use \c NorthKorea instead
\value Denmark
\value DiegoGarcia
\value Djibouti
@@ -579,9 +559,10 @@
\value EquatorialGuinea
\value Eritrea
\value Estonia
+ \value Eswatini
\value Ethiopia
- \value EuropeanUnion Since Qt 5.7
- \value Europe Since Qt 5.12
+ \value [since 5.7] EuropeanUnion
+ \value [since 5.12] Europe
\value FalklandIslands
\value FaroeIslands
\value Fiji
@@ -628,12 +609,12 @@
\value Kazakhstan
\value Kenya
\value Kiribati
- \value Kosovo Since Qt 5.2
+ \value [since 5.2] Kosovo
\value Kuwait
\value Kyrgyzstan
\value Laos
\value LatinAmerica
- \value LatinAmericaAndTheCaribbean Obsolete, please use LatinAmerica
+ \value LatinAmericaAndTheCaribbean Obsolete, use \c LatinAmerica instead
\value Latvia
\value Lebanon
\value Lesotho
@@ -642,6 +623,7 @@
\value Liechtenstein
\value Lithuania
\value Luxembourg
+ \value Macao
\value Macau
\value Macedonia
\value Madagascar
@@ -666,7 +648,8 @@
\value Mozambique
\value Myanmar
\value Namibia
- \value NauruCountry
+ \value NauruCountry Osbolete alias for \c NauruTerritory
+ \value [since 6.2] NauruTerritory
\value Nepal
\value Netherlands
\value NewCaledonia
@@ -680,14 +663,14 @@
\value NorthKorea
\value Norway
\value Oman
- \value OutlyingOceania Since Qt 5.7
+ \value [since 5.7] OutlyingOceania
\value Pakistan
\value Palau
\value PalestinianTerritories
\value Panama
\value PapuaNewGuinea
\value Paraguay
- \value PeoplesRepublicOfCongo Obsolete, please use CongoBrazzaville
+ \value PeoplesRepublicOfCongo Obsolete, use \c CongoBrazzaville instead
\value Peru
\value Philippines
\value Pitcairn
@@ -695,11 +678,11 @@
\value Portugal
\value PuertoRico
\value Qatar
- \value RepublicOfKorea Obsolete, please use SouthKorea
+ \value RepublicOfKorea Obsolete, use \c SouthKorea instead
\value Reunion
\value Romania
- \value RussianFederation same as Russia
- \value Russia same as RussianFederation
+ \value RussianFederation
+ \value Russia
\value Rwanda
\value SaintBarthelemy
\value SaintHelena
@@ -707,6 +690,7 @@
\value SaintLucia
\value SaintMartin
\value SaintPierreAndMiquelon
+ \value SaintVincentAndGrenadines
\value SaintVincentAndTheGrenadines
\value Samoa
\value SanMarino
@@ -723,6 +707,7 @@
\value SolomonIslands
\value Somalia
\value SouthAfrica
+ \value SouthGeorgiaAndSouthSandwichIslands
\value SouthGeorgiaAndTheSouthSandwichIslands
\value SouthKorea
\value SouthSudan
@@ -730,19 +715,21 @@
\value SriLanka
\value Sudan
\value Suriname
+ \value SvalbardAndJanMayen
\value SvalbardAndJanMayenIslands
\value Swaziland
\value Sweden
\value Switzerland
\value Syria
- \value SyrianArabRepublic Obsolete, please use Syria
+ \value SyrianArabRepublic Obsolete, use \c Syria instead
\value Taiwan
\value Tajikistan
\value Tanzania
\value Thailand
+ \value TimorLeste
\value Togo
- \value TokelauCountry
- \value Tokelau Obsolete, please use TokelauCountry
+ \value TokelauCountry Osbolete alias for \c TokelauTerritory
+ \value [since 6.2] TokelauTerritory
\value Tonga
\value TrinidadAndTobago
\value TristanDaCunha
@@ -750,31 +737,38 @@
\value Turkey
\value Turkmenistan
\value TurksAndCaicosIslands
- \value TuvaluCountry
- \value Tuvalu Obsolete, please use TuvaluCountry
+ \value TuvaluCountry Osbolete alias for \c TuvaluTerritory
+ \value [since 6.2] TuvaluTerritory
\value Uganda
\value Ukraine
\value UnitedArabEmirates
\value UnitedKingdom
\value UnitedStates
+ \value UnitedStatesOutlyingIslands
\value UnitedStatesMinorOutlyingIslands
\value UnitedStatesVirginIslands
\value Uruguay
\value Uzbekistan
\value Vanuatu
+ \value VaticanCity
\value VaticanCityState
\value Venezuela
\value Vietnam
+ \value WallisAndFutuna
\value WallisAndFutunaIslands
\value WesternSahara
- \value World Since Qt 5.12
+ \value [since 5.12] World
\value Yemen
\value Zambia
\value Zimbabwe
- \omitvalue LastCountry
+ \omitvalue LastCountry Osbolete alias for \c LastTerritory
+ \omitvalue LastTerritory
+
+ \note Use the Territory alias for this enumeration where possible.
+ The Country enum shall be renamed to Territory at a later release.
- \sa country(), countryToString()
+ \sa territory(), territoryToString(), codeToTerritory(), territoryToCode()
*/
/*!
@@ -784,148 +778,152 @@
\value AnyScript
- \value AdlamScript Since Qt 5.7
- \value AhomScript Since Qt 5.7
- \value AnatolianHieroglyphsScript Since Qt 5.7
+ \value [since 5.7] AdlamScript
+ \value [since 5.7] AhomScript
+ \value [since 5.7] AnatolianHieroglyphsScript
\value ArabicScript
\value ArmenianScript
- \value AvestanScript Since Qt 5.1
- \value BalineseScript Since Qt 5.1
- \value BamumScript Since Qt 5.1
- \value BassaVahScript Since Qt 5.5
- \value BatakScript Since Qt 5.1
- \value BengaliScript
- \value BhaiksukiScript Since Qt 5.7
- \value BopomofoScript Since Qt 5.1
- \value BrahmiScript Since Qt 5.1
- \value BrailleScript Since Qt 5.1
- \value BugineseScript Since Qt 5.1
- \value BuhidScript Since Qt 5.1
- \value CanadianAboriginalScript Since Qt 5.1
- \value CarianScript Since Qt 5.1
- \value CaucasianAlbanianScript Since Qt 5.5
- \value ChakmaScript Since Qt 5.1
- \value ChamScript Since Qt 5.1
+ \value [since 5.1] AvestanScript
+ \value [since 5.1] BalineseScript
+ \value [since 5.1] BamumScript
+ \value [since 6.0] BanglaScript
+ \value [since 5.5] BassaVahScript
+ \value [since 5.1] BatakScript
+ \value BengaliScript Obsolete, please use BanglaScript
+ \value [since 5.7] BhaiksukiScript
+ \value [since 5.1] BopomofoScript
+ \value [since 5.1] BrahmiScript
+ \value [since 5.1] BrailleScript
+ \value [since 5.1] BugineseScript
+ \value [since 5.1] BuhidScript
+ \value [since 5.1] CanadianAboriginalScript
+ \value [since 5.1] CarianScript
+ \value [since 5.5] CaucasianAlbanianScript
+ \value [since 5.1] ChakmaScript
+ \value [since 5.1] ChamScript
\value CherokeeScript
- \value CopticScript Since Qt 5.1
- \value CuneiformScript Since Qt 5.1
- \value CypriotScript Since Qt 5.1
+ \value [since 5.1] CopticScript
+ \value [since 5.1] CuneiformScript
+ \value [since 5.1] CypriotScript
\value CyrillicScript
- \value DeseretScript Since Qt 5.1
+ \value [since 5.1] DeseretScript
\value DevanagariScript
- \value DuployanScript Since Qt 5.5
- \value EgyptianHieroglyphsScript Since Qt 5.1
- \value ElbasanScript Since Qt 5.5
+ \value [since 5.5] DuployanScript
+ \value [since 5.1] EgyptianHieroglyphsScript
+ \value [since 5.5] ElbasanScript
\value EthiopicScript
- \value FraserScript Since Qt 5.1
+ \value [since 5.1] FraserScript
\value GeorgianScript
- \value GlagoliticScript Since Qt 5.1
- \value GothicScript Since Qt 5.1
- \value GranthaScript Since Qt 5.5
+ \value [since 5.1] GlagoliticScript
+ \value [since 5.1] GothicScript
+ \value [since 5.5] GranthaScript
\value GreekScript
\value GujaratiScript
\value GurmukhiScript
- \value HangulScript Since Qt 5.1
- \value HanScript Since Qt 5.1
- \value HanunooScript Since Qt 5.1
- \value HanWithBopomofoScript Since Qt 5.7
- \value HatranScript Since Qt 5.7
+ \value [since 5.1] HangulScript
+ \value [since 6.6] HanifiScript
+ \value [since 5.1] HanScript
+ \value [since 5.1] HanunooScript
+ \value [since 5.7] HanWithBopomofoScript
+ \value [since 5.7] HatranScript
\value HebrewScript
- \value HiraganaScript Since Qt 5.1
- \value ImperialAramaicScript Since Qt 5.1
- \value InscriptionalPahlaviScript Since Qt 5.1
- \value InscriptionalParthianScript Since Qt 5.1
- \value JamoScript Since Qt 5.7
+ \value [since 5.1] HiraganaScript
+ \value [since 5.1] ImperialAramaicScript
+ \value [since 5.1] InscriptionalPahlaviScript
+ \value [since 5.1] InscriptionalParthianScript
+ \value [since 5.7] JamoScript
\value JapaneseScript
- \value JavaneseScript Since Qt 5.1
- \value KaithiScript Since Qt 5.1
+ \value [since 5.1] JavaneseScript
+ \value [since 5.1] KaithiScript
\value KannadaScript
- \value KatakanaScript Since Qt 5.1
- \value KayahLiScript Since Qt 5.1
- \value KharoshthiScript Since Qt 5.1
- \value KhmerScript Since Qt 5.1
- \value KhojkiScript Since Qt 5.5
- \value KhudawadiScript Since Qt 5.5
+ \value [since 5.1] KatakanaScript
+ \value [since 5.1] KayahLiScript
+ \value [since 5.1] KharoshthiScript
+ \value [since 5.1] KhmerScript
+ \value [since 5.5] KhojkiScript
+ \value [since 5.5] KhudawadiScript
\value KoreanScript
- \value LannaScript Since Qt 5.1
+ \value [since 5.1] LannaScript
\value LaoScript
\value LatinScript
- \value LepchaScript Since Qt 5.1
- \value LimbuScript Since Qt 5.1
- \value LinearAScript Since Qt 5.5
- \value LinearBScript Since Qt 5.1
- \value LycianScript Since Qt 5.1
- \value LydianScript Since Qt 5.1
- \value MahajaniScript Since Qt 5.5
+ \value [since 5.1] LepchaScript
+ \value [since 5.1] LimbuScript
+ \value [since 5.5] LinearAScript
+ \value [since 5.1] LinearBScript
+ \value [since 5.1] LycianScript
+ \value [since 5.1] LydianScript
+ \value [since 5.5] MahajaniScript
\value MalayalamScript
- \value MandaeanScript Since Qt 5.1
- \value ManichaeanScript Since Qt 5.5
- \value MarchenScript Since Qt 5.7
- \value MeiteiMayekScript Since Qt 5.1
- \value MendeKikakuiScript Since Qt 5.5
- \value MeroiticCursiveScript Since Qt 5.1
- \value MeroiticScript Since Qt 5.1
- \value ModiScript Since Qt 5.5
+ \value [since 5.1] MandaeanScript
+ \value [since 5.5] ManichaeanScript
+ \value [since 5.7] MarchenScript
+ \value [since 5.1] MeiteiMayekScript
+ \value [since 6.0] MendeScript
+ \value MendeKikakuiScript Obsolete, please use MendeScript
+ \value [since 5.1] MeroiticCursiveScript
+ \value [since 5.1] MeroiticScript
+ \value [since 5.5] ModiScript
\value MongolianScript
- \value MroScript Since Qt 5.5
- \value MultaniScript Since Qt 5.7
+ \value [since 5.5] MroScript
+ \value [since 5.7] MultaniScript
\value MyanmarScript
- \value NabataeanScript Since Qt 5.5
- \value NewaScript Since Qt 5.7
- \value NewTaiLueScript Since Qt 5.1
- \value NkoScript Since Qt 5.1
- \value OghamScript Since Qt 5.1
- \value OlChikiScript Since Qt 5.1
- \value OldHungarianScript Since Qt 5.7
- \value OldItalicScript Since Qt 5.1
- \value OldNorthArabianScript Since Qt 5.5
- \value OldPermicScript Since Qt 5.5
- \value OldPersianScript Since Qt 5.1
- \value OldSouthArabianScript Since Qt 5.1
- \value OriyaScript
- \value OrkhonScript Since Qt 5.1
- \value OsageScript Since Qt 5.7
- \value OsmanyaScript Since Qt 5.1
- \value PahawhHmongScript Since Qt 5.5
- \value PalmyreneScript Since Qt 5.5
- \value PauCinHauScript Since Qt 5.5
- \value PhagsPaScript Since Qt 5.1
- \value PhoenicianScript Since Qt 5.1
- \value PollardPhoneticScript Since Qt 5.1
- \value PsalterPahlaviScript Since Qt 5.5
- \value RejangScript Since Qt 5.1
- \value RunicScript Since Qt 5.1
- \value SamaritanScript Since Qt 5.1
- \value SaurashtraScript Since Qt 5.1
- \value SharadaScript Since Qt 5.1
- \value ShavianScript Since Qt 5.1
- \value SiddhamScript Since Qt 5.5
- \value SignWritingScript Since Qt 5.7
+ \value [since 5.5] NabataeanScript
+ \value [since 5.7] NewaScript
+ \value [since 5.1] NewTaiLueScript
+ \value [since 5.1] NkoScript
+ \value [since 5.1] OghamScript
+ \value [since 5.1] OlChikiScript
+ \value [since 5.7] OldHungarianScript
+ \value [since 5.1] OldItalicScript
+ \value [since 5.5] OldNorthArabianScript
+ \value [since 5.5] OldPermicScript
+ \value [since 5.1] OldPersianScript
+ \value [since 5.1] OldSouthArabianScript
+ \value [since 6.0] OdiaScript
+ \value OriyaScript Obsolete, please use OdiaScript
+ \value [since 5.1] OrkhonScript
+ \value [since 5.7] OsageScript
+ \value [since 5.1] OsmanyaScript
+ \value [since 5.5] PahawhHmongScript
+ \value [since 5.5] PalmyreneScript
+ \value [since 5.5] PauCinHauScript
+ \value [since 5.1] PhagsPaScript
+ \value [since 5.1] PhoenicianScript
+ \value [since 5.1] PollardPhoneticScript
+ \value [since 5.5] PsalterPahlaviScript
+ \value [since 5.1] RejangScript
+ \value [since 5.1] RunicScript
+ \value [since 5.1] SamaritanScript
+ \value [since 5.1] SaurashtraScript
+ \value [since 5.1] SharadaScript
+ \value [since 5.1] ShavianScript
+ \value [since 5.5] SiddhamScript
+ \value [since 5.7] SignWritingScript
\value SimplifiedChineseScript same as SimplifiedHanScript
\value SimplifiedHanScript same as SimplifiedChineseScript
\value SinhalaScript
- \value SoraSompengScript Since Qt 5.1
- \value SundaneseScript Since Qt 5.1
- \value SylotiNagriScript Since Qt 5.1
+ \value [since 5.1] SoraSompengScript
+ \value [since 5.1] SundaneseScript
+ \value [since 5.1] SylotiNagriScript
\value SyriacScript
- \value TagalogScript Since Qt 5.1
- \value TagbanwaScript Since Qt 5.1
- \value TaiLeScript Since Qt 5.1
- \value TaiVietScript Since Qt 5.1
- \value TakriScript Since Qt 5.1
+ \value [since 5.1] TagalogScript
+ \value [since 5.1] TagbanwaScript
+ \value [since 5.1] TaiLeScript
+ \value [since 5.1] TaiVietScript
+ \value [since 5.1] TakriScript
\value TamilScript
- \value TangutScript Since Qt 5.7
+ \value [since 5.7] TangutScript
\value TeluguScript
\value ThaanaScript
\value ThaiScript
\value TibetanScript
\value TifinaghScript
- \value TirhutaScript Since Qt 5.5
+ \value [since 5.5] TirhutaScript
\value TraditionalChineseScript same as TraditionalHanScript
\value TraditionalHanScript same as TraditionalChineseScript
- \value UgariticScript Since Qt 5.1
+ \value [since 5.1] UgariticScript
\value VaiScript
- \value VarangKshitiScript Since Qt 5.5
+ \value [since 5.5] VarangKshitiScript
\value YiScript
\omitvalue LastScript
@@ -990,23 +988,23 @@
dot when parsing a number in scientific or decimal representation. The
default is to accept trailing zeroes.
- \sa setNumberOptions(), numberOptions()
+ \sa setNumberOptions(), numberOptions(), FloatingPointPrecisionOption
*/
/*!
\enum QLocale::FloatingPointPrecisionOption
- This enum defines constants that can be given as precision to QString::number(),
+ This enum defines a constant that can be given as precision to QString::number(),
QByteArray::number(), and QLocale::toString() when converting floats or doubles,
in order to express a variable number of digits as precision.
\value FloatingPointShortest The conversion algorithm will try to find the
- shortest accurate representation for the given number. "Accurate" means
- that you get the exact same number back from an inverse conversion on
- the generated string representation.
-
- \sa toString(), QString, QByteArray
+ shortest accurate representation for the given number. "Accurate" means
+ that you get the exact same number back from an inverse conversion on
+ the generated string representation. In particular, trailing zeros are
+ omitted (from the mantissa, in exponent formats).
+ \sa toString(), QString::number(), QByteArray::number()
\since 5.7
*/
@@ -1026,19 +1024,50 @@
\since 4.4
*/
+/*!
+ \enum QLocale::LanguageCodeType
+
+ This enum defines language code types that can be used to restrict set
+ of language codes considered by \c codeToLanguage and \c languageToCode.
+
+ \value ISO639Part1 ISO 639 Part 1 Alpha 2 code.
+ \value ISO639Part2B ISO 639 Part 2 bibliographic Alpha 3 code.
+ \value ISO639Part2T ISO 639 Part 2 terminological Alpha 3 code.
+ \value ISO639Part3 ISO 639 Part 3 Alpha 3 code.
+ \value LegacyLanguageCode Codes that are not part of the above set, but that
+ were supported by Qt in the past. This value can only be used by
+ codeToLanguage(). It is ignored when passed to languageToCode().
+ \value ISO639Part2 Any ISO 639 Part 2 code.
+ \value ISO639Alpha2 Any ISO-639 2-letter code.
+ \value ISO639Alpha3 Any ISO-639 3-letter code.
+ \value ISO639 Any ISO 639 code.
+ \value AnyLanguageCode Specifies that any code can be used.
+*/
/*!
- \fn bool QLocale::operator==(const QLocale &other) const
+ \fn bool QLocale::operator==(const QLocale &lhs, const QLocale &rhs)
+
+ Returns \c true if the two QLocale objects, \a lhs and \a rhs, are the same;
+ otherwise returns \c false.
+
+ \note The system locale is not equal to the QLocale object constructed from
+ its language(), script() and territory(), even if the two agree in all data
+ fields. Nor are two locales with different number options equal.
- Returns \c true if the QLocale object is the same as the \a other
- locale specified; otherwise returns \c false.
+ \sa operator!=(), setNumberOptions()
*/
/*!
- \fn bool QLocale::operator!=(const QLocale &other) const
+ \fn bool QLocale::operator!=(const QLocale &lhs, const QLocale &rhs)
+
+ Returns \c true if the two QLocale objects, \a lhs and \a rhs, differ;
+ otherwise returns \c false.
+
+ \note The system locale is not equal to the QLocale object constructed from
+ its language(), script() and territory(), even if the two agree in all data
+ fields. Nor are two locales with different number options equal.
- Returns \c true if the QLocale object is not the same as the \a other
- locale specified; otherwise returns \c false.
+ \sa operator==(), setNumberOptions()
*/
/*!
@@ -1083,7 +1112,7 @@
\value LanguageId a uint specifying the language.
\value ScriptId a uint specifying the script.
- \value CountryId a uint specifying the country.
+ \value TerritoryId a uint specifying the territory.
\value DecimalPoint a QString specifying the decimal point.
\value GroupSeparator a QString specifying the group separator.
\value ZeroDigit a QString specifying the zero digit.
@@ -1108,7 +1137,7 @@
\value MeasurementSystem a QLocale::MeasurementSystem enum specifying the measurement system
\value AMText a string that represents the system AM designator associated with a 12-hour clock.
\value PMText a string that represents the system PM designator associated with a 12-hour clock.
- \value FirstDayOfWeek a Qt::DayOfWeek enum specifiying the first day of the week
+ \value FirstDayOfWeek a Qt::DayOfWeek enum specifying the first day of the week
\value CurrencySymbol a string that represents a currency in a format QLocale::CurrencyFormat.
\value CurrencyToString a localized string representation of a number with a currency symbol. Converts a QSystemLocale::CurrencyToStringArgument stored in the in variant to a QString.
\value UILanguages a list of strings representing locale names that could be used for UI translation.
@@ -1118,20 +1147,13 @@
\value LocaleChanged this type is queried whenever the system locale is changed.
\value ListToSeparatedString a string that represents a join of a given QStringList with a locale-defined separator.
\value NativeLanguageName a string that represents the name of the native language.
- \value NativeCountryName a string that represents the name of the native country.
+ \value NativeTerritoryName a string that represents the name of the native territory.
\sa FormatType
*/
/*!
- \fn QLocale QSystemLocale::fallbackUiLocale() const
-
- \since 4.6
- Returns the fallback locale obtained from the system.
-*/
-
-/*!
- \fn QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
+ \fn QVariant QSystemLocale::query(QueryType type, QVariant &&in = QVariant()) const
Generic query method for locale data. Provides indirection.
Denotes the \a type of the query
@@ -1141,6 +1163,17 @@
*/
/*!
+ \fn QLocale QSystemLocale::fallbackLocale() const
+
+ \since 4.6
+
+ Returns the locale used if the system locale is not able to answer a query.
+
+ Must be a QLocale instance based on the built-in CLDR data, and should
+ match what the system locale is using as closely as that data supports.
+*/
+
+/*!
\class QSystemLocale::CurrencyToStringArgument
\inmodule QtCore
@@ -1159,7 +1192,7 @@
\variable QSystemLocale::CurrencyToStringArgument::value
An input value that should be converted to its string representation.
- Contains one of QVariant::LongLong, QVariant::ULongLong or QVariant::Double
+ Contains one of QMetaType::LongLong, QMetaType::ULongLong or QMetaType::Double
types.
*/
/*!
@@ -1235,13 +1268,17 @@
*/
/*!
-\fn QString QLocale::toString(float i, char f = 'g', int prec = 6) const
-
+\fn QString QLocale::toString(float f, char format = 'g', int precision = 6) const
\overload
-\a f and \a prec have the same meaning as in QString::number(double, char, int).
+Returns a string representing the floating-point number \a f.
+
+The \a format and \a precision have the same meanings as described in \l
+{toString(double, char, int)}.
-\sa toDouble()
+\sa toFloat(), toDouble(), numberOptions(), exponential(), decimalPoint(), zeroDigit(),
+ positiveSign(), percent(), toCurrencyString(), formattedDataSize(),
+ QLocale::FloatingPointPrecisionOption
*/
/*!
diff --git a/src/corelib/text/qlocale_data_p.h b/src/corelib/text/qlocale_data_p.h
index c6f72ab416..6175398dd9 100644
--- a/src/corelib/text/qlocale_data_p.h
+++ b/src/corelib/text/qlocale_data_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: Unicode-3.0
#ifndef QLOCALE_DATA_P_H
#define QLOCALE_DATA_P_H
@@ -51,34 +15,71 @@
// We mean it.
//
-#include <QtCore/private/qglobal_p.h>
+#include <QtCore/qendian.h>
+#include <QtCore/private/qlocale_p.h>
+
+#include <array>
+#include <cstring> // std::memcmp
QT_BEGIN_NAMESPACE
-/* This part of the file isn't generated, but written by hand since
- * Unicode CLDR doesn't contain measurement system information.
- */
-struct CountryLanguage
+/* This part of the file isn't generated, but written by hand. Unicode CLDR's
+ information about measurement systems doesn't say which to use by default in
+ each locale. Even if it did, adding another entry in every locale's row of
+ locale_data[] would take up much more memory than the small table below.
+*/
+struct TerritoryLanguage
{
quint16 languageId;
- quint16 countryId;
+ quint16 territoryId;
QLocale::MeasurementSystem system;
};
-static const CountryLanguage ImperialMeasurementSystems[] = {
+static constexpr TerritoryLanguage ImperialMeasurementSystems[] = {
{ QLocale::English, QLocale::UnitedStates, QLocale::ImperialUSSystem },
{ QLocale::English, QLocale::UnitedStatesMinorOutlyingIslands, QLocale::ImperialUSSystem },
{ QLocale::Spanish, QLocale::UnitedStates, QLocale::ImperialUSSystem },
{ QLocale::Hawaiian, QLocale::UnitedStates, QLocale::ImperialUSSystem },
{ QLocale::English, QLocale::UnitedKingdom, QLocale::ImperialUKSystem }
};
-static const int ImperialMeasurementSystemsCount =
- sizeof(ImperialMeasurementSystems)/sizeof(ImperialMeasurementSystems[0]);
+
+/*
+ Storage for alpha codes with length of up to 4 allowing efficient comparison.
+*/
+struct AlphaCode {
+ constexpr AlphaCode(char c1 = 0, char c2 = 0, char c3 = 0)
+ : c1(c2m(c1)), c2(c2m(c2)), c3(c2m(c3)), reserved(0) { }
+
+ uint16_t c1: 5, c2:5, c3: 5, reserved:1;
+
+ bool isValid() const noexcept { return c1 != 0; }
+
+ std::array<char, 4> decode() const { return {m2c(c1), m2c(c2), m2c(c3), 0}; }
+
+private:
+ static constexpr uint16_t c2m(char c) { return c ? c - 'a' + 1 : 0; }
+ static constexpr char m2c (uint16_t c) { return c ? c + 'a' - 1 : 0; }
+
+ friend bool operator==(AlphaCode lhs, AlphaCode rhs) noexcept
+ {
+ static_assert(std::has_unique_object_representations_v<AlphaCode>,
+ "memcmp() cannot be used to implement equality on "
+ "types that don't have unique object representations");
+ return std::memcmp(&lhs, &rhs, sizeof(lhs)) == 0;
+ }
+};
+
+struct LanguageCodeEntry {
+ AlphaCode part1;
+ AlphaCode part2B;
+ AlphaCode part2T;
+ AlphaCode part3;
+};
// GENERATED PART STARTS HERE
/*
- This part of the file was generated on 2020-04-09 from the
- Common Locale Data Repository v36
+ This part of the file was generated on 2024-04-04 from the
+ Common Locale Data Repository v44.1
http://www.unicode.org/cldr/
@@ -87,5412 +88,7101 @@ static const int ImperialMeasurementSystemsCount =
edited) CLDR data; see qtbase/util/locale_database/.
*/
-static const QLocaleId likely_subtags[] = {
- { 4, 0, 0 }, { 4, 7, 69 }, // aa -> aa_Latn_ET
- { 2, 0, 0 }, { 2, 2, 81 }, // ab -> ab_Cyrl_GE
- { 255, 0, 0 }, { 255, 36, 102 }, // ae -> ae_Avst_IR
- { 5, 0, 0 }, { 5, 7, 195 }, // af -> af_Latn_ZA
- { 237, 0, 0 }, { 237, 7, 37 }, // agq -> agq_Latn_CM
- { 340, 0, 0 }, { 340, 128, 100 }, // aho -> aho_Ahom_IN
- { 146, 0, 0 }, { 146, 7, 83 }, // ak -> ak_Latn_GH
- { 262, 0, 0 }, { 262, 94, 103 }, // akk -> akk_Xsux_IQ
- { 7, 0, 0 }, { 7, 14, 69 }, // am -> am_Ethi_ET
- { 261, 0, 0 }, { 261, 7, 197 }, // an -> an_Latn_ES
- { 8, 0, 0 }, { 8, 1, 64 }, // ar -> ar_Arab_EG
- { 265, 0, 0 }, { 265, 57, 102 }, // arc -> arc_Armi_IR
- { 265, 119, 0 }, { 265, 119, 109 }, // arc_Nbat -> arc_Nbat_JO
- { 265, 120, 0 }, { 265, 120, 207 }, // arc_Palm -> arc_Palm_SY
- { 315, 0, 0 }, { 315, 7, 43 }, // arn -> arn_Latn_CL
- { 10, 0, 0 }, { 10, 11, 100 }, // as -> as_Beng_IN
- { 205, 0, 0 }, { 205, 7, 210 }, // asa -> asa_Latn_TZ
- { 341, 0, 0 }, { 341, 133, 225 }, // ase -> ase_Sgnw_US
- { 256, 0, 0 }, { 256, 7, 197 }, // ast -> ast_Latn_ES
- { 216, 0, 0 }, { 216, 2, 178 }, // av -> av_Cyrl_RU
- { 11, 0, 0 }, { 11, 7, 26 }, // ay -> ay_Latn_BO
- { 12, 0, 0 }, { 12, 7, 15 }, // az -> az_Latn_AZ
- { 12, 0, 103 }, { 12, 1, 103 }, // az_IQ -> az_Arab_IQ
- { 12, 0, 102 }, { 12, 1, 102 }, // az_IR -> az_Arab_IR
- { 12, 0, 178 }, { 12, 2, 178 }, // az_RU -> az_Cyrl_RU
- { 12, 1, 0 }, { 12, 1, 102 }, // az_Arab -> az_Arab_IR
- { 13, 0, 0 }, { 13, 2, 178 }, // ba -> ba_Cyrl_RU
- { 266, 0, 0 }, { 266, 7, 101 }, // ban -> ban_Latn_ID
- { 238, 0, 0 }, { 238, 7, 37 }, // bas -> bas_Latn_CM
- { 267, 0, 0 }, { 267, 38, 37 }, // bax -> bax_Bamu_CM
- { 268, 0, 0 }, { 268, 7, 101 }, // bbc -> bbc_Latn_ID
- { 22, 0, 0 }, { 22, 2, 20 }, // be -> be_Cyrl_BY
- { 195, 0, 0 }, { 195, 7, 239 }, // bem -> bem_Latn_ZM
- { 186, 0, 0 }, { 186, 7, 210 }, // bez -> bez_Latn_TZ
- { 20, 0, 0 }, { 20, 2, 33 }, // bg -> bg_Cyrl_BG
- { 364, 0, 0 }, { 364, 1, 163 }, // bgn -> bgn_Arab_PK
- { 343, 0, 0 }, { 343, 13, 100 }, // bho -> bho_Deva_IN
- { 18, 0, 0 }, { 18, 7, 229 }, // bi -> bi_Latn_VU
- { 270, 0, 0 }, { 270, 7, 170 }, // bku -> bku_Latn_PH
- { 309, 0, 0 }, { 309, 100, 232 }, // blt -> blt_Tavt_VN
- { 188, 0, 0 }, { 188, 7, 132 }, // bm -> bm_Latn_ML
- { 15, 0, 0 }, { 15, 11, 18 }, // bn -> bn_Beng_BD
- { 121, 0, 0 }, { 121, 31, 44 }, // bo -> bo_Tibt_CN
- { 19, 0, 0 }, { 19, 7, 74 }, // br -> br_Latn_FR
- { 215, 0, 0 }, { 215, 13, 100 }, // brx -> brx_Deva_IN
- { 142, 0, 0 }, { 142, 7, 27 }, // bs -> bs_Latn_BA
- { 336, 0, 0 }, { 336, 106, 121 }, // bsq -> bsq_Bass_LR
- { 312, 0, 0 }, { 312, 7, 37 }, // bss -> bss_Latn_CM
- { 269, 0, 0 }, { 269, 7, 101 }, // bug -> bug_Latn_ID
- { 152, 0, 0 }, { 152, 14, 67 }, // byn -> byn_Ethi_ER
- { 24, 0, 0 }, { 24, 7, 197 }, // ca -> ca_Latn_ES
- { 156, 0, 0 }, { 156, 7, 157 }, // cch -> cch_Latn_NG
- { 272, 0, 0 }, { 272, 46, 18 }, // ccp -> ccp_Cakm_BD
- { 218, 0, 0 }, { 218, 2, 178 }, // ce -> ce_Cyrl_RU
- { 365, 0, 0 }, { 365, 7, 170 }, // ceb -> ceb_Latn_PH
- { 211, 0, 0 }, { 211, 7, 221 }, // cgg -> cgg_Latn_UG
- { 217, 0, 0 }, { 217, 7, 89 }, // ch -> ch_Latn_GU
- { 190, 0, 0 }, { 190, 12, 225 }, // chr -> chr_Cher_US
- { 367, 0, 0 }, { 367, 7, 225 }, // cic -> cic_Latn_US
- { 276, 0, 0 }, { 276, 47, 232 }, // cjm -> cjm_Cham_VN
- { 316, 0, 0 }, { 316, 1, 103 }, // ckb -> ckb_Arab_IQ
- { 26, 0, 0 }, { 26, 7, 74 }, // co -> co_Latn_FR
- { 274, 0, 0 }, { 274, 48, 64 }, // cop -> cop_Copt_EG
- { 221, 0, 0 }, { 221, 44, 38 }, // cr -> cr_Cans_CA
- { 28, 0, 0 }, { 28, 7, 57 }, // cs -> cs_Latn_CZ
- { 338, 0, 0 }, { 338, 121, 147 }, // ctd -> ctd_Pauc_MM
- { 219, 0, 0 }, { 219, 2, 178 }, // cu -> cu_Cyrl_RU
- { 219, 52, 0 }, { 219, 52, 33 }, // cu_Glag -> cu_Glag_BG
- { 220, 0, 0 }, { 220, 2, 178 }, // cv -> cv_Cyrl_RU
- { 134, 0, 0 }, { 134, 7, 224 }, // cy -> cy_Latn_GB
- { 29, 0, 0 }, { 29, 7, 58 }, // da -> da_Latn_DK
- { 176, 0, 0 }, { 176, 7, 111 }, // dav -> dav_Latn_KE
- { 42, 0, 0 }, { 42, 7, 82 }, // de -> de_Latn_DE
- { 239, 0, 0 }, { 239, 7, 156 }, // dje -> dje_Latn_NE
- { 275, 0, 0 }, { 275, 1, 100 }, // doi -> doi_Arab_IN
- { 317, 0, 0 }, { 317, 7, 82 }, // dsb -> dsb_Latn_DE
- { 240, 0, 0 }, { 240, 7, 37 }, // dua -> dua_Latn_CM
- { 143, 0, 0 }, { 143, 29, 131 }, // dv -> dv_Thaa_MV
- { 241, 0, 0 }, { 241, 7, 187 }, // dyo -> dyo_Latn_SN
- { 16, 0, 0 }, { 16, 31, 25 }, // dz -> dz_Tibt_BT
- { 189, 0, 0 }, { 189, 7, 111 }, // ebu -> ebu_Latn_KE
- { 161, 0, 0 }, { 161, 7, 83 }, // ee -> ee_Latn_GH
- { 263, 0, 0 }, { 263, 50, 64 }, // egy -> egy_Egyp_EG
- { 277, 0, 0 }, { 277, 63, 147 }, // eky -> eky_Kali_MM
- { 43, 0, 0 }, { 43, 16, 85 }, // el -> el_Grek_GR
- { 31, 0, 0 }, { 31, 7, 225 }, // en -> en_Latn_US
- { 31, 92, 0 }, { 31, 92, 224 }, // en_Shaw -> en_Shaw_GB
- { 32, 0, 0 }, { 32, 7, 260 }, // eo -> eo_Latn_001
- { 111, 0, 0 }, { 111, 7, 197 }, // es -> es_Latn_ES
- { 33, 0, 0 }, { 33, 7, 68 }, // et -> et_Latn_EE
- { 278, 0, 0 }, { 278, 79, 106 }, // ett -> ett_Ital_IT
- { 14, 0, 0 }, { 14, 7, 197 }, // eu -> eu_Latn_ES
- { 242, 0, 0 }, { 242, 7, 37 }, // ewo -> ewo_Latn_CM
- { 89, 0, 0 }, { 89, 1, 102 }, // fa -> fa_Arab_IR
- { 177, 0, 0 }, { 177, 7, 187 }, // ff -> ff_Latn_SN
- { 177, 134, 0 }, { 177, 134, 91 }, // ff_Adlm -> ff_Adlm_GN
- { 36, 0, 0 }, { 36, 7, 73 }, // fi -> fi_Latn_FI
- { 166, 0, 0 }, { 166, 7, 170 }, // fil -> fil_Latn_PH
- { 35, 0, 0 }, { 35, 7, 72 }, // fj -> fj_Latn_FJ
- { 34, 0, 0 }, { 34, 7, 71 }, // fo -> fo_Latn_FO
- { 37, 0, 0 }, { 37, 7, 74 }, // fr -> fr_Latn_FR
- { 159, 0, 0 }, { 159, 7, 106 }, // fur -> fur_Latn_IT
- { 38, 0, 0 }, { 38, 7, 151 }, // fy -> fy_Latn_NL
- { 57, 0, 0 }, { 57, 7, 104 }, // ga -> ga_Latn_IE
- { 148, 0, 0 }, { 148, 7, 83 }, // gaa -> gaa_Latn_GH
- { 39, 0, 0 }, { 39, 7, 224 }, // gd -> gd_Latn_GB
- { 153, 0, 0 }, { 153, 14, 69 }, // gez -> gez_Ethi_ET
- { 40, 0, 0 }, { 40, 7, 197 }, // gl -> gl_Latn_ES
- { 45, 0, 0 }, { 45, 7, 168 }, // gn -> gn_Latn_PY
- { 279, 0, 0 }, { 279, 53, 222 }, // got -> got_Goth_UA
- { 264, 0, 0 }, { 264, 49, 56 }, // grc -> grc_Cprt_CY
- { 264, 68, 0 }, { 264, 68, 85 }, // grc_Linb -> grc_Linb_GR
- { 167, 0, 0 }, { 167, 7, 206 }, // gsw -> gsw_Latn_CH
- { 46, 0, 0 }, { 46, 17, 100 }, // gu -> gu_Gujr_IN
- { 175, 0, 0 }, { 175, 7, 111 }, // guz -> guz_Latn_KE
- { 144, 0, 0 }, { 144, 7, 251 }, // gv -> gv_Latn_IM
- { 47, 0, 0 }, { 47, 7, 157 }, // ha -> ha_Latn_NG
- { 47, 0, 37 }, { 47, 1, 37 }, // ha_CM -> ha_Arab_CM
- { 47, 0, 201 }, { 47, 1, 201 }, // ha_SD -> ha_Arab_SD
- { 163, 0, 0 }, { 163, 7, 225 }, // haw -> haw_Latn_US
- { 48, 0, 0 }, { 48, 18, 105 }, // he -> he_Hebr_IL
- { 49, 0, 0 }, { 49, 13, 100 }, // hi -> hi_Deva_IN
- { 344, 0, 0 }, { 344, 129, 217 }, // hlu -> hlu_Hluw_TR
- { 282, 0, 0 }, { 282, 86, 44 }, // hmd -> hmd_Plrd_CN
- { 333, 0, 0 }, { 333, 110, 117 }, // hnj -> hnj_Hmng_LA
- { 280, 0, 0 }, { 280, 7, 170 }, // hnn -> hnn_Latn_PH
- { 224, 0, 0 }, { 224, 7, 167 }, // ho -> ho_Latn_PG
- { 334, 0, 0 }, { 334, 13, 100 }, // hoc -> hoc_Deva_IN
- { 27, 0, 0 }, { 27, 7, 54 }, // hr -> hr_Latn_HR
- { 318, 0, 0 }, { 318, 7, 82 }, // hsb -> hsb_Latn_DE
- { 222, 0, 0 }, { 222, 7, 94 }, // ht -> ht_Latn_HT
- { 50, 0, 0 }, { 50, 7, 98 }, // hu -> hu_Latn_HU
- { 9, 0, 0 }, { 9, 10, 11 }, // hy -> hy_Armn_AM
- { 223, 0, 0 }, { 223, 7, 148 }, // hz -> hz_Latn_NA
- { 53, 0, 0 }, { 53, 7, 260 }, // ia -> ia_Latn_001
- { 52, 0, 0 }, { 52, 7, 101 }, // id -> id_Latn_ID
- { 149, 0, 0 }, { 149, 7, 157 }, // ig -> ig_Latn_NG
- { 168, 0, 0 }, { 168, 34, 44 }, // ii -> ii_Yiii_CN
- { 56, 0, 0 }, { 56, 7, 225 }, // ik -> ik_Latn_US
- { 281, 0, 0 }, { 281, 2, 178 }, // inh -> inh_Cyrl_RU
- { 360, 0, 0 }, { 360, 7, 260 }, // io -> io_Latn_001
- { 51, 0, 0 }, { 51, 7, 99 }, // is -> is_Latn_IS
- { 58, 0, 0 }, { 58, 7, 106 }, // it -> it_Latn_IT
- { 55, 0, 0 }, { 55, 44, 38 }, // iu -> iu_Cans_CA
- { 59, 0, 0 }, { 59, 19, 108 }, // ja -> ja_Jpan_JP
- { 361, 0, 0 }, { 361, 7, 260 }, // jbo -> jbo_Latn_001
- { 257, 0, 0 }, { 257, 7, 37 }, // jgo -> jgo_Latn_CM
- { 200, 0, 0 }, { 200, 7, 210 }, // jmc -> jmc_Latn_TZ
- { 60, 0, 0 }, { 60, 7, 101 }, // jv -> jv_Latn_ID
- { 41, 0, 0 }, { 41, 15, 81 }, // ka -> ka_Geor_GE
- { 184, 0, 0 }, { 184, 7, 3 }, // kab -> kab_Latn_DZ
- { 158, 0, 0 }, { 158, 7, 157 }, // kaj -> kaj_Latn_NG
- { 150, 0, 0 }, { 150, 7, 111 }, // kam -> kam_Latn_KE
- { 164, 0, 0 }, { 164, 7, 157 }, // kcg -> kcg_Latn_NG
- { 192, 0, 0 }, { 192, 7, 210 }, // kde -> kde_Latn_TZ
- { 196, 0, 0 }, { 196, 7, 39 }, // kea -> kea_Latn_CV
- { 319, 0, 0 }, { 319, 7, 37 }, // ken -> ken_Latn_CM
- { 154, 0, 0 }, { 154, 7, 53 }, // kfo -> kfo_Latn_CI
- { 227, 0, 0 }, { 227, 7, 49 }, // kg -> kg_Latn_CD
- { 286, 0, 0 }, { 286, 76, 44 }, // khb -> khb_Talu_CN
- { 208, 0, 0 }, { 208, 7, 132 }, // khq -> khq_Latn_ML
- { 178, 0, 0 }, { 178, 7, 111 }, // ki -> ki_Latn_KE
- { 228, 0, 0 }, { 228, 7, 148 }, // kj -> kj_Latn_NA
- { 63, 0, 0 }, { 63, 2, 110 }, // kk -> kk_Cyrl_KZ
- { 63, 0, 1 }, { 63, 1, 1 }, // kk_AF -> kk_Arab_AF
- { 63, 0, 44 }, { 63, 1, 44 }, // kk_CN -> kk_Arab_CN
- { 63, 0, 102 }, { 63, 1, 102 }, // kk_IR -> kk_Arab_IR
- { 63, 0, 143 }, { 63, 1, 143 }, // kk_MN -> kk_Arab_MN
- { 63, 1, 0 }, { 63, 1, 44 }, // kk_Arab -> kk_Arab_CN
- { 258, 0, 0 }, { 258, 7, 37 }, // kkj -> kkj_Latn_CM
- { 44, 0, 0 }, { 44, 7, 86 }, // kl -> kl_Latn_GL
- { 198, 0, 0 }, { 198, 7, 111 }, // kln -> kln_Latn_KE
- { 23, 0, 0 }, { 23, 20, 36 }, // km -> km_Khmr_KH
- { 61, 0, 0 }, { 61, 21, 100 }, // kn -> kn_Knda_IN
- { 66, 0, 0 }, { 66, 22, 114 }, // ko -> ko_Kore_KR
- { 147, 0, 0 }, { 147, 13, 100 }, // kok -> kok_Deva_IN
- { 169, 0, 0 }, { 169, 7, 121 }, // kpe -> kpe_Latn_LR
- { 225, 0, 0 }, { 225, 7, 0 }, // kr -> kr_Latn
- { 62, 0, 0 }, { 62, 1, 100 }, // ks -> ks_Arab_IN
- { 214, 0, 0 }, { 214, 7, 210 }, // ksb -> ksb_Latn_TZ
- { 243, 0, 0 }, { 243, 7, 37 }, // ksf -> ksf_Latn_CM
- { 201, 0, 0 }, { 201, 7, 82 }, // ksh -> ksh_Latn_DE
- { 67, 0, 0 }, { 67, 7, 217 }, // ku -> ku_Latn_TR
- { 67, 0, 119 }, { 67, 1, 119 }, // ku_LB -> ku_Arab_LB
- { 67, 1, 0 }, { 67, 1, 103 }, // ku_Arab -> ku_Arab_IQ
- { 226, 0, 0 }, { 226, 2, 178 }, // kv -> kv_Cyrl_RU
- { 145, 0, 0 }, { 145, 7, 224 }, // kw -> kw_Latn_GB
- { 65, 0, 0 }, { 65, 2, 116 }, // ky -> ky_Cyrl_KG
- { 65, 0, 44 }, { 65, 1, 44 }, // ky_CN -> ky_Arab_CN
- { 65, 0, 217 }, { 65, 7, 217 }, // ky_TR -> ky_Latn_TR
- { 65, 1, 0 }, { 65, 1, 44 }, // ky_Arab -> ky_Arab_CN
- { 65, 7, 0 }, { 65, 7, 217 }, // ky_Latn -> ky_Latn_TR
- { 70, 0, 0 }, { 70, 7, 230 }, // la -> la_Latn_VA
- { 332, 0, 0 }, { 332, 112, 85 }, // lab -> lab_Lina_GR
- { 193, 0, 0 }, { 193, 7, 210 }, // lag -> lag_Latn_TZ
- { 231, 0, 0 }, { 231, 7, 125 }, // lb -> lb_Latn_LU
- { 283, 0, 0 }, { 283, 66, 100 }, // lep -> lep_Lepc_IN
- { 335, 0, 0 }, { 335, 2, 178 }, // lez -> lez_Cyrl_RU
- { 194, 0, 0 }, { 194, 7, 221 }, // lg -> lg_Latn_UG
- { 229, 0, 0 }, { 229, 7, 151 }, // li -> li_Latn_NL
- { 284, 0, 0 }, { 284, 13, 150 }, // lif -> lif_Deva_NP
- { 284, 67, 0 }, { 284, 67, 100 }, // lif_Limb -> lif_Limb_IN
- { 285, 0, 0 }, { 285, 51, 44 }, // lis -> lis_Lisu_CN
- { 313, 0, 0 }, { 313, 7, 225 }, // lkt -> lkt_Latn_US
- { 72, 0, 0 }, { 72, 7, 49 }, // ln -> ln_Latn_CD
- { 69, 0, 0 }, { 69, 23, 117 }, // lo -> lo_Laoo_LA
- { 349, 0, 0 }, { 349, 1, 102 }, // lrc -> lrc_Arab_IR
- { 73, 0, 0 }, { 73, 7, 124 }, // lt -> lt_Latn_LT
- { 230, 0, 0 }, { 230, 7, 49 }, // lu -> lu_Latn_CD
- { 210, 0, 0 }, { 210, 7, 111 }, // luo -> luo_Latn_KE
- { 204, 0, 0 }, { 204, 7, 111 }, // luy -> luy_Latn_KE
- { 71, 0, 0 }, { 71, 7, 118 }, // lv -> lv_Latn_LV
- { 345, 0, 0 }, { 345, 5, 44 }, // lzh -> lzh_Hans_CN
- { 339, 0, 0 }, { 339, 13, 100 }, // mai -> mai_Deva_IN
- { 289, 0, 0 }, { 289, 7, 80 }, // man -> man_Latn_GM
- { 289, 0, 91 }, { 289, 75, 91 }, // man_GN -> man_Nkoo_GN
- { 289, 75, 0 }, { 289, 75, 91 }, // man_Nkoo -> man_Nkoo_GN
- { 202, 0, 0 }, { 202, 7, 111 }, // mas -> mas_Latn_KE
- { 330, 0, 0 }, { 330, 7, 189 }, // men -> men_Latn_SL
- { 197, 0, 0 }, { 197, 7, 111 }, // mer -> mer_Latn_KE
- { 191, 0, 0 }, { 191, 7, 137 }, // mfe -> mfe_Latn_MU
- { 75, 0, 0 }, { 75, 7, 128 }, // mg -> mg_Latn_MG
- { 244, 0, 0 }, { 244, 7, 146 }, // mgh -> mgh_Latn_MZ
- { 259, 0, 0 }, { 259, 7, 37 }, // mgo -> mgo_Latn_CM
- { 81, 0, 0 }, { 81, 7, 134 }, // mh -> mh_Latn_MH
- { 79, 0, 0 }, { 79, 7, 154 }, // mi -> mi_Latn_NZ
- { 356, 0, 0 }, { 356, 130, 103 }, // mis -> mis_Hatr_IQ
- { 74, 0, 0 }, { 74, 2, 127 }, // mk -> mk_Cyrl_MK
- { 77, 0, 0 }, { 77, 24, 100 }, // ml -> ml_Mlym_IN
- { 82, 0, 0 }, { 82, 2, 143 }, // mn -> mn_Cyrl_MN
- { 82, 0, 44 }, { 82, 8, 44 }, // mn_CN -> mn_Mong_CN
- { 82, 8, 0 }, { 82, 8, 44 }, // mn_Mong -> mn_Mong_CN
- { 290, 0, 0 }, { 290, 11, 100 }, // mni -> mni_Beng_IN
- { 320, 0, 0 }, { 320, 7, 38 }, // moh -> moh_Latn_CA
- { 80, 0, 0 }, { 80, 13, 100 }, // mr -> mr_Deva_IN
- { 347, 0, 0 }, { 347, 117, 18 }, // mro -> mro_Mroo_BD
- { 76, 0, 0 }, { 76, 7, 130 }, // ms -> ms_Latn_MY
- { 76, 0, 46 }, { 76, 1, 46 }, // ms_CC -> ms_Arab_CC
- { 76, 0, 101 }, { 76, 1, 101 }, // ms_ID -> ms_Arab_ID
- { 78, 0, 0 }, { 78, 7, 133 }, // mt -> mt_Latn_MT
- { 245, 0, 0 }, { 245, 7, 37 }, // mua -> mua_Latn_CM
- { 368, 0, 0 }, { 368, 7, 225 }, // mus -> mus_Latn_US
- { 21, 0, 0 }, { 21, 25, 147 }, // my -> my_Mymr_MM
- { 366, 0, 0 }, { 366, 2, 178 }, // myv -> myv_Cyrl_RU
- { 273, 0, 0 }, { 273, 71, 102 }, // myz -> myz_Mand_IR
- { 346, 0, 0 }, { 346, 1, 102 }, // mzn -> mzn_Arab_IR
- { 83, 0, 0 }, { 83, 7, 149 }, // na -> na_Latn_NR
- { 199, 0, 0 }, { 199, 7, 148 }, // naq -> naq_Latn_NA
- { 85, 0, 0 }, { 85, 7, 161 }, // nb -> nb_Latn_NO
- { 181, 0, 0 }, { 181, 7, 240 }, // nd -> nd_Latn_ZW
- { 170, 0, 0 }, { 170, 7, 82 }, // nds -> nds_Latn_DE
- { 84, 0, 0 }, { 84, 13, 150 }, // ne -> ne_Deva_NP
- { 348, 0, 0 }, { 348, 13, 150 }, // new -> new_Deva_NP
- { 233, 0, 0 }, { 233, 7, 148 }, // ng -> ng_Latn_NA
- { 30, 0, 0 }, { 30, 7, 151 }, // nl -> nl_Latn_NL
- { 246, 0, 0 }, { 246, 7, 37 }, // nmg -> nmg_Latn_CM
- { 141, 0, 0 }, { 141, 7, 161 }, // nn -> nn_Latn_NO
- { 260, 0, 0 }, { 260, 7, 37 }, // nnh -> nnh_Latn_CM
- { 292, 0, 0 }, { 292, 65, 211 }, // nod -> nod_Lana_TH
- { 294, 0, 0 }, { 294, 88, 205 }, // non -> non_Runr_SE
- { 321, 0, 0 }, { 321, 75, 91 }, // nqo -> nqo_Nkoo_GN
- { 171, 0, 0 }, { 171, 7, 195 }, // nr -> nr_Latn_ZA
- { 172, 0, 0 }, { 172, 7, 195 }, // nso -> nso_Latn_ZA
- { 247, 0, 0 }, { 247, 7, 254 }, // nus -> nus_Latn_SS
- { 232, 0, 0 }, { 232, 7, 225 }, // nv -> nv_Latn_US
- { 165, 0, 0 }, { 165, 7, 129 }, // ny -> ny_Latn_MW
- { 185, 0, 0 }, { 185, 7, 221 }, // nyn -> nyn_Latn_UG
- { 86, 0, 0 }, { 86, 7, 74 }, // oc -> oc_Latn_FR
- { 3, 0, 0 }, { 3, 7, 69 }, // om -> om_Latn_ET
- { 87, 0, 0 }, { 87, 26, 100 }, // or -> or_Orya_IN
- { 101, 0, 0 }, { 101, 2, 81 }, // os -> os_Cyrl_GE
- { 358, 0, 0 }, { 358, 138, 225 }, // osa -> osa_Osge_US
- { 296, 0, 0 }, { 296, 82, 143 }, // otk -> otk_Orkh_MN
- { 92, 0, 0 }, { 92, 4, 100 }, // pa -> pa_Guru_IN
- { 92, 0, 163 }, { 92, 1, 163 }, // pa_PK -> pa_Arab_PK
- { 92, 1, 0 }, { 92, 1, 163 }, // pa_Arab -> pa_Arab_PK
- { 297, 0, 0 }, { 297, 58, 102 }, // pal -> pal_Phli_IR
- { 297, 123, 0 }, { 297, 123, 44 }, // pal_Phlp -> pal_Phlp_CN
- { 351, 0, 0 }, { 351, 7, 12 }, // pap -> pap_Latn_AW
- { 350, 0, 0 }, { 350, 7, 164 }, // pau -> pau_Latn_PW
- { 295, 0, 0 }, { 295, 80, 102 }, // peo -> peo_Xpeo_IR
- { 299, 0, 0 }, { 299, 85, 119 }, // phn -> phn_Phnx_LB
- { 342, 0, 0 }, { 342, 41, 100 }, // pka -> pka_Brah_IN
- { 90, 0, 0 }, { 90, 7, 172 }, // pl -> pl_Latn_PL
- { 300, 0, 0 }, { 300, 64, 163 }, // pra -> pra_Khar_PK
- { 322, 0, 0 }, { 322, 7, 260 }, // prg -> prg_Latn_001
- { 88, 0, 0 }, { 88, 1, 1 }, // ps -> ps_Arab_AF
- { 91, 0, 0 }, { 91, 7, 30 }, // pt -> pt_Latn_BR
- { 93, 0, 0 }, { 93, 7, 169 }, // qu -> qu_Latn_PE
- { 323, 0, 0 }, { 323, 7, 90 }, // quc -> quc_Latn_GT
- { 301, 0, 0 }, { 301, 7, 101 }, // rej -> rej_Latn_ID
- { 94, 0, 0 }, { 94, 7, 206 }, // rm -> rm_Latn_CH
- { 68, 0, 0 }, { 68, 7, 35 }, // rn -> rn_Latn_BI
- { 95, 0, 0 }, { 95, 7, 177 }, // ro -> ro_Latn_RO
- { 182, 0, 0 }, { 182, 7, 210 }, // rof -> rof_Latn_TZ
- { 96, 0, 0 }, { 96, 2, 178 }, // ru -> ru_Cyrl_RU
- { 64, 0, 0 }, { 64, 7, 179 }, // rw -> rw_Latn_RW
- { 209, 0, 0 }, { 209, 7, 210 }, // rwk -> rwk_Latn_TZ
- { 99, 0, 0 }, { 99, 13, 100 }, // sa -> sa_Deva_IN
- { 248, 0, 0 }, { 248, 2, 178 }, // sah -> sah_Cyrl_RU
- { 179, 0, 0 }, { 179, 7, 111 }, // saq -> saq_Latn_KE
- { 304, 0, 0 }, { 304, 7, 100 }, // sat -> sat_Latn_IN
- { 305, 0, 0 }, { 305, 90, 100 }, // saz -> saz_Saur_IN
- { 249, 0, 0 }, { 249, 7, 210 }, // sbp -> sbp_Latn_TZ
- { 115, 0, 0 }, { 115, 7, 106 }, // sc -> sc_Latn_IT
- { 362, 0, 0 }, { 362, 7, 106 }, // scn -> scn_Latn_IT
- { 105, 0, 0 }, { 105, 1, 163 }, // sd -> sd_Arab_PK
- { 105, 13, 0 }, { 105, 13, 100 }, // sd_Deva -> sd_Deva_IN
- { 105, 111, 0 }, { 105, 111, 100 }, // sd_Khoj -> sd_Khoj_IN
- { 105, 125, 0 }, { 105, 125, 100 }, // sd_Sind -> sd_Sind_IN
- { 363, 0, 0 }, { 363, 1, 102 }, // sdh -> sdh_Arab_IR
- { 173, 0, 0 }, { 173, 7, 161 }, // se -> se_Latn_NO
- { 180, 0, 0 }, { 180, 7, 146 }, // seh -> seh_Latn_MZ
- { 213, 0, 0 }, { 213, 7, 132 }, // ses -> ses_Latn_ML
- { 98, 0, 0 }, { 98, 7, 41 }, // sg -> sg_Latn_CF
- { 293, 0, 0 }, { 293, 77, 104 }, // sga -> sga_Ogam_IE
- { 183, 0, 0 }, { 183, 9, 145 }, // shi -> shi_Tfng_MA
- { 106, 0, 0 }, { 106, 32, 198 }, // si -> si_Sinh_LK
- { 155, 0, 0 }, { 155, 7, 69 }, // sid -> sid_Latn_ET
- { 108, 0, 0 }, { 108, 7, 191 }, // sk -> sk_Latn_SK
- { 352, 0, 0 }, { 352, 1, 163 }, // skr -> skr_Arab_PK
- { 109, 0, 0 }, { 109, 7, 192 }, // sl -> sl_Latn_SI
- { 97, 0, 0 }, { 97, 7, 183 }, // sm -> sm_Latn_WS
- { 324, 0, 0 }, { 324, 7, 205 }, // sma -> sma_Latn_SE
- { 325, 0, 0 }, { 325, 7, 205 }, // smj -> smj_Latn_SE
- { 326, 0, 0 }, { 326, 7, 73 }, // smn -> smn_Latn_FI
- { 303, 0, 0 }, { 303, 89, 105 }, // smp -> smp_Samr_IL
- { 327, 0, 0 }, { 327, 7, 73 }, // sms -> sms_Latn_FI
- { 104, 0, 0 }, { 104, 7, 240 }, // sn -> sn_Latn_ZW
- { 110, 0, 0 }, { 110, 7, 194 }, // so -> so_Latn_SO
- { 6, 0, 0 }, { 6, 7, 2 }, // sq -> sq_Latn_AL
- { 100, 0, 0 }, { 100, 2, 243 }, // sr -> sr_Cyrl_RS
- { 100, 0, 242 }, { 100, 7, 242 }, // sr_ME -> sr_Latn_ME
- { 100, 0, 177 }, { 100, 7, 177 }, // sr_RO -> sr_Latn_RO
- { 100, 0, 178 }, { 100, 7, 178 }, // sr_RU -> sr_Latn_RU
- { 100, 0, 217 }, { 100, 7, 217 }, // sr_TR -> sr_Latn_TR
- { 306, 0, 0 }, { 306, 93, 100 }, // srb -> srb_Sora_IN
- { 107, 0, 0 }, { 107, 7, 195 }, // ss -> ss_Latn_ZA
- { 207, 0, 0 }, { 207, 7, 67 }, // ssy -> ssy_Latn_ER
- { 102, 0, 0 }, { 102, 7, 195 }, // st -> st_Latn_ZA
- { 112, 0, 0 }, { 112, 7, 101 }, // su -> su_Latn_ID
- { 114, 0, 0 }, { 114, 7, 205 }, // sv -> sv_Latn_SE
- { 113, 0, 0 }, { 113, 7, 210 }, // sw -> sw_Latn_TZ
- { 250, 0, 0 }, { 250, 7, 49 }, // swc -> swc_Latn_CD
- { 307, 0, 0 }, { 307, 11, 18 }, // syl -> syl_Beng_BD
- { 151, 0, 0 }, { 151, 33, 103 }, // syr -> syr_Syrc_IQ
- { 369, 0, 0 }, { 369, 7, 172 }, // szl -> szl_Latn_PL
- { 117, 0, 0 }, { 117, 27, 100 }, // ta -> ta_Taml_IN
- { 308, 0, 0 }, { 308, 7, 170 }, // tbw -> tbw_Latn_PH
- { 310, 0, 0 }, { 310, 99, 44 }, // tdd -> tdd_Tale_CN
- { 119, 0, 0 }, { 119, 28, 100 }, // te -> te_Telu_IN
- { 206, 0, 0 }, { 206, 7, 221 }, // teo -> teo_Latn_UG
- { 116, 0, 0 }, { 116, 2, 209 }, // tg -> tg_Cyrl_TJ
- { 116, 0, 163 }, { 116, 1, 163 }, // tg_PK -> tg_Arab_PK
- { 116, 1, 0 }, { 116, 1, 163 }, // tg_Arab -> tg_Arab_PK
- { 120, 0, 0 }, { 120, 30, 211 }, // th -> th_Thai_TH
- { 122, 0, 0 }, { 122, 14, 69 }, // ti -> ti_Ethi_ET
- { 157, 0, 0 }, { 157, 14, 67 }, // tig -> tig_Ethi_ER
- { 126, 0, 0 }, { 126, 7, 218 }, // tk -> tk_Latn_TM
- { 353, 0, 0 }, { 353, 7, 213 }, // tkl -> tkl_Latn_TK
- { 103, 0, 0 }, { 103, 7, 195 }, // tn -> tn_Latn_ZA
- { 123, 0, 0 }, { 123, 7, 214 }, // to -> to_Latn_TO
- { 354, 0, 0 }, { 354, 7, 167 }, // tpi -> tpi_Latn_PG
- { 125, 0, 0 }, { 125, 7, 217 }, // tr -> tr_Latn_TR
- { 174, 0, 0 }, { 174, 7, 208 }, // trv -> trv_Latn_TW
- { 124, 0, 0 }, { 124, 7, 195 }, // ts -> ts_Latn_ZA
- { 118, 0, 0 }, { 118, 2, 178 }, // tt -> tt_Cyrl_RU
- { 355, 0, 0 }, { 355, 7, 220 }, // tvl -> tvl_Latn_TV
- { 251, 0, 0 }, { 251, 7, 156 }, // twq -> twq_Latn_NE
- { 359, 0, 0 }, { 359, 139, 44 }, // txg -> txg_Tang_CN
- { 127, 0, 0 }, { 127, 7, 77 }, // ty -> ty_Latn_PF
- { 212, 0, 0 }, { 212, 7, 145 }, // tzm -> tzm_Latn_MA
- { 128, 0, 0 }, { 128, 1, 44 }, // ug -> ug_Arab_CN
- { 128, 0, 110 }, { 128, 2, 110 }, // ug_KZ -> ug_Cyrl_KZ
- { 128, 0, 143 }, { 128, 2, 143 }, // ug_MN -> ug_Cyrl_MN
- { 128, 2, 0 }, { 128, 2, 110 }, // ug_Cyrl -> ug_Cyrl_KZ
- { 311, 0, 0 }, { 311, 102, 207 }, // uga -> uga_Ugar_SY
- { 129, 0, 0 }, { 129, 2, 222 }, // uk -> uk_Cyrl_UA
- { 130, 0, 0 }, { 130, 1, 163 }, // ur -> ur_Arab_PK
- { 131, 0, 0 }, { 131, 7, 228 }, // uz -> uz_Latn_UZ
- { 131, 0, 1 }, { 131, 1, 1 }, // uz_AF -> uz_Arab_AF
- { 131, 0, 44 }, { 131, 2, 44 }, // uz_CN -> uz_Cyrl_CN
- { 131, 1, 0 }, { 131, 1, 1 }, // uz_Arab -> uz_Arab_AF
- { 252, 0, 0 }, { 252, 35, 121 }, // vai -> vai_Vaii_LR
- { 160, 0, 0 }, { 160, 7, 195 }, // ve -> ve_Latn_ZA
- { 132, 0, 0 }, { 132, 7, 232 }, // vi -> vi_Latn_VN
- { 133, 0, 0 }, { 133, 7, 260 }, // vo -> vo_Latn_001
- { 187, 0, 0 }, { 187, 7, 210 }, // vun -> vun_Latn_TZ
- { 236, 0, 0 }, { 236, 7, 21 }, // wa -> wa_Latn_BE
- { 253, 0, 0 }, { 253, 7, 206 }, // wae -> wae_Latn_CH
- { 162, 0, 0 }, { 162, 14, 69 }, // wal -> wal_Ethi_ET
- { 328, 0, 0 }, { 328, 7, 13 }, // wbp -> wbp_Latn_AU
- { 135, 0, 0 }, { 135, 7, 187 }, // wo -> wo_Latn_SN
- { 271, 0, 0 }, { 271, 45, 217 }, // xcr -> xcr_Cari_TR
- { 136, 0, 0 }, { 136, 7, 195 }, // xh -> xh_Latn_ZA
- { 287, 0, 0 }, { 287, 69, 217 }, // xlc -> xlc_Lyci_TR
- { 288, 0, 0 }, { 288, 70, 217 }, // xld -> xld_Lydi_TR
- { 329, 0, 0 }, { 329, 114, 44 }, // xmn -> xmn_Mani_CN
- { 291, 0, 0 }, { 291, 74, 201 }, // xmr -> xmr_Merc_SD
- { 331, 0, 0 }, { 331, 118, 186 }, // xna -> xna_Narb_SA
- { 203, 0, 0 }, { 203, 7, 221 }, // xog -> xog_Latn_UG
- { 298, 0, 0 }, { 298, 59, 102 }, // xpr -> xpr_Prti_IR
- { 302, 0, 0 }, { 302, 81, 237 }, // xsa -> xsa_Sarb_YE
- { 254, 0, 0 }, { 254, 7, 37 }, // yav -> yav_Latn_CM
- { 137, 0, 0 }, { 137, 18, 260 }, // yi -> yi_Hebr_001
- { 138, 0, 0 }, { 138, 7, 157 }, // yo -> yo_Latn_NG
- { 357, 0, 0 }, { 357, 6, 97 }, // yue -> yue_Hant_HK
- { 357, 0, 44 }, { 357, 5, 44 }, // yue_CN -> yue_Hans_CN
- { 357, 5, 0 }, { 357, 5, 44 }, // yue_Hans -> yue_Hans_CN
- { 139, 0, 0 }, { 139, 7, 44 }, // za -> za_Latn_CN
- { 314, 0, 0 }, { 314, 9, 145 }, // zgh -> zgh_Tfng_MA
- { 25, 0, 0 }, { 25, 5, 44 }, // zh -> zh_Hans_CN
- { 25, 0, 13 }, { 25, 6, 13 }, // zh_AU -> zh_Hant_AU
- { 25, 0, 32 }, { 25, 6, 32 }, // zh_BN -> zh_Hant_BN
- { 25, 0, 224 }, { 25, 6, 224 }, // zh_GB -> zh_Hant_GB
- { 25, 0, 76 }, { 25, 6, 76 }, // zh_GF -> zh_Hant_GF
- { 25, 0, 97 }, { 25, 6, 97 }, // zh_HK -> zh_Hant_HK
- { 25, 0, 101 }, { 25, 6, 101 }, // zh_ID -> zh_Hant_ID
- { 25, 0, 126 }, { 25, 6, 126 }, // zh_MO -> zh_Hant_MO
- { 25, 0, 130 }, { 25, 6, 130 }, // zh_MY -> zh_Hant_MY
- { 25, 0, 166 }, { 25, 6, 166 }, // zh_PA -> zh_Hant_PA
- { 25, 0, 77 }, { 25, 6, 77 }, // zh_PF -> zh_Hant_PF
- { 25, 0, 170 }, { 25, 6, 170 }, // zh_PH -> zh_Hant_PH
- { 25, 0, 202 }, { 25, 6, 202 }, // zh_SR -> zh_Hant_SR
- { 25, 0, 211 }, { 25, 6, 211 }, // zh_TH -> zh_Hant_TH
- { 25, 0, 208 }, { 25, 6, 208 }, // zh_TW -> zh_Hant_TW
- { 25, 0, 225 }, { 25, 6, 225 }, // zh_US -> zh_Hant_US
- { 25, 0, 232 }, { 25, 6, 232 }, // zh_VN -> zh_Hant_VN
- { 25, 40, 0 }, { 25, 40, 208 }, // zh_Bopo -> zh_Bopo_TW
- { 25, 140, 0 }, { 25, 140, 208 }, // zh_Hanb -> zh_Hanb_TW
- { 25, 6, 0 }, { 25, 6, 208 }, // zh_Hant -> zh_Hant_TW
- { 140, 0, 0 }, { 140, 7, 195 }, // zu -> zu_Latn_ZA
- { 0, 0, 261 }, { 96, 2, 178 }, // und_150 -> ru_Cyrl_RU
- { 0, 0, 246 }, { 111, 7, 246 }, // und_419 -> es_Latn_419
- { 0, 0, 5 }, { 24, 7, 5 }, // und_AD -> ca_Latn_AD
- { 0, 0, 223 }, { 8, 1, 223 }, // und_AE -> ar_Arab_AE
- { 0, 0, 1 }, { 89, 1, 1 }, // und_AF -> fa_Arab_AF
- { 0, 0, 2 }, { 6, 7, 2 }, // und_AL -> sq_Latn_AL
- { 0, 0, 11 }, { 9, 10, 11 }, // und_AM -> hy_Armn_AM
- { 0, 0, 6 }, { 91, 7, 6 }, // und_AO -> pt_Latn_AO
- { 0, 0, 8 }, { 0, 7, 8 }, // und_AQ -> und_Latn_AQ
- { 0, 0, 10 }, { 111, 7, 10 }, // und_AR -> es_Latn_AR
- { 0, 0, 4 }, { 97, 7, 4 }, // und_AS -> sm_Latn_AS
- { 0, 0, 14 }, { 42, 7, 14 }, // und_AT -> de_Latn_AT
- { 0, 0, 12 }, { 30, 7, 12 }, // und_AW -> nl_Latn_AW
- { 0, 0, 248 }, { 114, 7, 248 }, // und_AX -> sv_Latn_AX
- { 0, 0, 15 }, { 12, 7, 15 }, // und_AZ -> az_Latn_AZ
- { 0, 0, 27 }, { 142, 7, 27 }, // und_BA -> bs_Latn_BA
- { 0, 0, 18 }, { 15, 11, 18 }, // und_BD -> bn_Beng_BD
- { 0, 0, 21 }, { 30, 7, 21 }, // und_BE -> nl_Latn_BE
- { 0, 0, 34 }, { 37, 7, 34 }, // und_BF -> fr_Latn_BF
- { 0, 0, 33 }, { 20, 2, 33 }, // und_BG -> bg_Cyrl_BG
- { 0, 0, 17 }, { 8, 1, 17 }, // und_BH -> ar_Arab_BH
- { 0, 0, 35 }, { 68, 7, 35 }, // und_BI -> rn_Latn_BI
- { 0, 0, 23 }, { 37, 7, 23 }, // und_BJ -> fr_Latn_BJ
- { 0, 0, 244 }, { 37, 7, 244 }, // und_BL -> fr_Latn_BL
- { 0, 0, 32 }, { 76, 7, 32 }, // und_BN -> ms_Latn_BN
- { 0, 0, 26 }, { 111, 7, 26 }, // und_BO -> es_Latn_BO
- { 0, 0, 255 }, { 351, 7, 255 }, // und_BQ -> pap_Latn_BQ
- { 0, 0, 30 }, { 91, 7, 30 }, // und_BR -> pt_Latn_BR
- { 0, 0, 25 }, { 16, 31, 25 }, // und_BT -> dz_Tibt_BT
- { 0, 0, 29 }, { 0, 7, 29 }, // und_BV -> und_Latn_BV
- { 0, 0, 20 }, { 22, 2, 20 }, // und_BY -> be_Cyrl_BY
- { 0, 0, 49 }, { 113, 7, 49 }, // und_CD -> sw_Latn_CD
- { 0, 0, 41 }, { 37, 7, 41 }, // und_CF -> fr_Latn_CF
- { 0, 0, 50 }, { 37, 7, 50 }, // und_CG -> fr_Latn_CG
- { 0, 0, 206 }, { 42, 7, 206 }, // und_CH -> de_Latn_CH
- { 0, 0, 53 }, { 37, 7, 53 }, // und_CI -> fr_Latn_CI
- { 0, 0, 43 }, { 111, 7, 43 }, // und_CL -> es_Latn_CL
- { 0, 0, 37 }, { 37, 7, 37 }, // und_CM -> fr_Latn_CM
- { 0, 0, 44 }, { 25, 5, 44 }, // und_CN -> zh_Hans_CN
- { 0, 0, 47 }, { 111, 7, 47 }, // und_CO -> es_Latn_CO
- { 0, 0, 241 }, { 0, 7, 241 }, // und_CP -> und_Latn_CP
- { 0, 0, 52 }, { 111, 7, 52 }, // und_CR -> es_Latn_CR
- { 0, 0, 55 }, { 111, 7, 55 }, // und_CU -> es_Latn_CU
- { 0, 0, 39 }, { 91, 7, 39 }, // und_CV -> pt_Latn_CV
- { 0, 0, 152 }, { 351, 7, 152 }, // und_CW -> pap_Latn_CW
- { 0, 0, 56 }, { 43, 16, 56 }, // und_CY -> el_Grek_CY
- { 0, 0, 57 }, { 28, 7, 57 }, // und_CZ -> cs_Latn_CZ
- { 0, 0, 82 }, { 42, 7, 82 }, // und_DE -> de_Latn_DE
- { 0, 0, 59 }, { 4, 7, 59 }, // und_DJ -> aa_Latn_DJ
- { 0, 0, 58 }, { 29, 7, 58 }, // und_DK -> da_Latn_DK
- { 0, 0, 61 }, { 111, 7, 61 }, // und_DO -> es_Latn_DO
- { 0, 0, 3 }, { 8, 1, 3 }, // und_DZ -> ar_Arab_DZ
- { 0, 0, 250 }, { 111, 7, 250 }, // und_EA -> es_Latn_EA
- { 0, 0, 63 }, { 111, 7, 63 }, // und_EC -> es_Latn_EC
- { 0, 0, 68 }, { 33, 7, 68 }, // und_EE -> et_Latn_EE
- { 0, 0, 64 }, { 8, 1, 64 }, // und_EG -> ar_Arab_EG
- { 0, 0, 236 }, { 8, 1, 236 }, // und_EH -> ar_Arab_EH
- { 0, 0, 67 }, { 122, 14, 67 }, // und_ER -> ti_Ethi_ER
- { 0, 0, 197 }, { 111, 7, 197 }, // und_ES -> es_Latn_ES
- { 0, 0, 69 }, { 7, 14, 69 }, // und_ET -> am_Ethi_ET
- { 0, 0, 258 }, { 31, 7, 224 }, // und_EU -> en_Latn_GB
- { 0, 0, 73 }, { 36, 7, 73 }, // und_FI -> fi_Latn_FI
- { 0, 0, 71 }, { 34, 7, 71 }, // und_FO -> fo_Latn_FO
- { 0, 0, 74 }, { 37, 7, 74 }, // und_FR -> fr_Latn_FR
- { 0, 0, 79 }, { 37, 7, 79 }, // und_GA -> fr_Latn_GA
- { 0, 0, 81 }, { 41, 15, 81 }, // und_GE -> ka_Geor_GE
- { 0, 0, 76 }, { 37, 7, 76 }, // und_GF -> fr_Latn_GF
- { 0, 0, 83 }, { 146, 7, 83 }, // und_GH -> ak_Latn_GH
- { 0, 0, 86 }, { 44, 7, 86 }, // und_GL -> kl_Latn_GL
- { 0, 0, 91 }, { 37, 7, 91 }, // und_GN -> fr_Latn_GN
- { 0, 0, 88 }, { 37, 7, 88 }, // und_GP -> fr_Latn_GP
- { 0, 0, 66 }, { 111, 7, 66 }, // und_GQ -> es_Latn_GQ
- { 0, 0, 85 }, { 43, 16, 85 }, // und_GR -> el_Grek_GR
- { 0, 0, 196 }, { 0, 7, 196 }, // und_GS -> und_Latn_GS
- { 0, 0, 90 }, { 111, 7, 90 }, // und_GT -> es_Latn_GT
- { 0, 0, 92 }, { 91, 7, 92 }, // und_GW -> pt_Latn_GW
- { 0, 0, 97 }, { 25, 6, 97 }, // und_HK -> zh_Hant_HK
- { 0, 0, 95 }, { 0, 7, 95 }, // und_HM -> und_Latn_HM
- { 0, 0, 96 }, { 111, 7, 96 }, // und_HN -> es_Latn_HN
- { 0, 0, 54 }, { 27, 7, 54 }, // und_HR -> hr_Latn_HR
- { 0, 0, 94 }, { 222, 7, 94 }, // und_HT -> ht_Latn_HT
- { 0, 0, 98 }, { 50, 7, 98 }, // und_HU -> hu_Latn_HU
- { 0, 0, 238 }, { 111, 7, 238 }, // und_IC -> es_Latn_IC
- { 0, 0, 101 }, { 52, 7, 101 }, // und_ID -> id_Latn_ID
- { 0, 0, 105 }, { 48, 18, 105 }, // und_IL -> he_Hebr_IL
- { 0, 0, 100 }, { 49, 13, 100 }, // und_IN -> hi_Deva_IN
- { 0, 0, 103 }, { 8, 1, 103 }, // und_IQ -> ar_Arab_IQ
- { 0, 0, 102 }, { 89, 1, 102 }, // und_IR -> fa_Arab_IR
- { 0, 0, 99 }, { 51, 7, 99 }, // und_IS -> is_Latn_IS
- { 0, 0, 106 }, { 58, 7, 106 }, // und_IT -> it_Latn_IT
- { 0, 0, 109 }, { 8, 1, 109 }, // und_JO -> ar_Arab_JO
- { 0, 0, 108 }, { 59, 19, 108 }, // und_JP -> ja_Jpan_JP
- { 0, 0, 111 }, { 113, 7, 111 }, // und_KE -> sw_Latn_KE
- { 0, 0, 116 }, { 65, 2, 116 }, // und_KG -> ky_Cyrl_KG
- { 0, 0, 36 }, { 23, 20, 36 }, // und_KH -> km_Khmr_KH
- { 0, 0, 48 }, { 8, 1, 48 }, // und_KM -> ar_Arab_KM
- { 0, 0, 113 }, { 66, 22, 113 }, // und_KP -> ko_Kore_KP
- { 0, 0, 114 }, { 66, 22, 114 }, // und_KR -> ko_Kore_KR
- { 0, 0, 115 }, { 8, 1, 115 }, // und_KW -> ar_Arab_KW
- { 0, 0, 110 }, { 96, 2, 110 }, // und_KZ -> ru_Cyrl_KZ
- { 0, 0, 117 }, { 69, 23, 117 }, // und_LA -> lo_Laoo_LA
- { 0, 0, 119 }, { 8, 1, 119 }, // und_LB -> ar_Arab_LB
- { 0, 0, 123 }, { 42, 7, 123 }, // und_LI -> de_Latn_LI
- { 0, 0, 198 }, { 106, 32, 198 }, // und_LK -> si_Sinh_LK
- { 0, 0, 120 }, { 102, 7, 120 }, // und_LS -> st_Latn_LS
- { 0, 0, 124 }, { 73, 7, 124 }, // und_LT -> lt_Latn_LT
- { 0, 0, 125 }, { 37, 7, 125 }, // und_LU -> fr_Latn_LU
- { 0, 0, 118 }, { 71, 7, 118 }, // und_LV -> lv_Latn_LV
- { 0, 0, 122 }, { 8, 1, 122 }, // und_LY -> ar_Arab_LY
- { 0, 0, 145 }, { 8, 1, 145 }, // und_MA -> ar_Arab_MA
- { 0, 0, 142 }, { 37, 7, 142 }, // und_MC -> fr_Latn_MC
- { 0, 0, 141 }, { 95, 7, 141 }, // und_MD -> ro_Latn_MD
- { 0, 0, 242 }, { 100, 7, 242 }, // und_ME -> sr_Latn_ME
- { 0, 0, 245 }, { 37, 7, 245 }, // und_MF -> fr_Latn_MF
- { 0, 0, 128 }, { 75, 7, 128 }, // und_MG -> mg_Latn_MG
- { 0, 0, 127 }, { 74, 2, 127 }, // und_MK -> mk_Cyrl_MK
- { 0, 0, 132 }, { 188, 7, 132 }, // und_ML -> bm_Latn_ML
- { 0, 0, 147 }, { 21, 25, 147 }, // und_MM -> my_Mymr_MM
- { 0, 0, 143 }, { 82, 2, 143 }, // und_MN -> mn_Cyrl_MN
- { 0, 0, 126 }, { 25, 6, 126 }, // und_MO -> zh_Hant_MO
- { 0, 0, 135 }, { 37, 7, 135 }, // und_MQ -> fr_Latn_MQ
- { 0, 0, 136 }, { 8, 1, 136 }, // und_MR -> ar_Arab_MR
- { 0, 0, 133 }, { 78, 7, 133 }, // und_MT -> mt_Latn_MT
- { 0, 0, 137 }, { 191, 7, 137 }, // und_MU -> mfe_Latn_MU
- { 0, 0, 131 }, { 143, 29, 131 }, // und_MV -> dv_Thaa_MV
- { 0, 0, 139 }, { 111, 7, 139 }, // und_MX -> es_Latn_MX
- { 0, 0, 130 }, { 76, 7, 130 }, // und_MY -> ms_Latn_MY
- { 0, 0, 146 }, { 91, 7, 146 }, // und_MZ -> pt_Latn_MZ
- { 0, 0, 148 }, { 5, 7, 148 }, // und_NA -> af_Latn_NA
- { 0, 0, 153 }, { 37, 7, 153 }, // und_NC -> fr_Latn_NC
- { 0, 0, 156 }, { 47, 7, 156 }, // und_NE -> ha_Latn_NE
- { 0, 0, 155 }, { 111, 7, 155 }, // und_NI -> es_Latn_NI
- { 0, 0, 151 }, { 30, 7, 151 }, // und_NL -> nl_Latn_NL
- { 0, 0, 161 }, { 85, 7, 161 }, // und_NO -> nb_Latn_NO
- { 0, 0, 150 }, { 84, 13, 150 }, // und_NP -> ne_Deva_NP
- { 0, 0, 162 }, { 8, 1, 162 }, // und_OM -> ar_Arab_OM
- { 0, 0, 166 }, { 111, 7, 166 }, // und_PA -> es_Latn_PA
- { 0, 0, 169 }, { 111, 7, 169 }, // und_PE -> es_Latn_PE
- { 0, 0, 77 }, { 37, 7, 77 }, // und_PF -> fr_Latn_PF
- { 0, 0, 167 }, { 354, 7, 167 }, // und_PG -> tpi_Latn_PG
- { 0, 0, 170 }, { 166, 7, 170 }, // und_PH -> fil_Latn_PH
- { 0, 0, 163 }, { 130, 1, 163 }, // und_PK -> ur_Arab_PK
- { 0, 0, 172 }, { 90, 7, 172 }, // und_PL -> pl_Latn_PL
- { 0, 0, 200 }, { 37, 7, 200 }, // und_PM -> fr_Latn_PM
- { 0, 0, 174 }, { 111, 7, 174 }, // und_PR -> es_Latn_PR
- { 0, 0, 165 }, { 8, 1, 165 }, // und_PS -> ar_Arab_PS
- { 0, 0, 173 }, { 91, 7, 173 }, // und_PT -> pt_Latn_PT
- { 0, 0, 164 }, { 350, 7, 164 }, // und_PW -> pau_Latn_PW
- { 0, 0, 168 }, { 45, 7, 168 }, // und_PY -> gn_Latn_PY
- { 0, 0, 175 }, { 8, 1, 175 }, // und_QA -> ar_Arab_QA
- { 0, 0, 259 }, { 31, 7, 249 }, // und_QO -> en_Latn_DG
- { 0, 0, 176 }, { 37, 7, 176 }, // und_RE -> fr_Latn_RE
- { 0, 0, 177 }, { 95, 7, 177 }, // und_RO -> ro_Latn_RO
- { 0, 0, 243 }, { 100, 2, 243 }, // und_RS -> sr_Cyrl_RS
- { 0, 0, 178 }, { 96, 2, 178 }, // und_RU -> ru_Cyrl_RU
- { 0, 0, 179 }, { 64, 7, 179 }, // und_RW -> rw_Latn_RW
- { 0, 0, 186 }, { 8, 1, 186 }, // und_SA -> ar_Arab_SA
- { 0, 0, 188 }, { 37, 7, 188 }, // und_SC -> fr_Latn_SC
- { 0, 0, 201 }, { 8, 1, 201 }, // und_SD -> ar_Arab_SD
- { 0, 0, 205 }, { 114, 7, 205 }, // und_SE -> sv_Latn_SE
- { 0, 0, 192 }, { 109, 7, 192 }, // und_SI -> sl_Latn_SI
- { 0, 0, 203 }, { 85, 7, 203 }, // und_SJ -> nb_Latn_SJ
- { 0, 0, 191 }, { 108, 7, 191 }, // und_SK -> sk_Latn_SK
- { 0, 0, 184 }, { 58, 7, 184 }, // und_SM -> it_Latn_SM
- { 0, 0, 187 }, { 37, 7, 187 }, // und_SN -> fr_Latn_SN
- { 0, 0, 194 }, { 110, 7, 194 }, // und_SO -> so_Latn_SO
- { 0, 0, 202 }, { 30, 7, 202 }, // und_SR -> nl_Latn_SR
- { 0, 0, 185 }, { 91, 7, 185 }, // und_ST -> pt_Latn_ST
- { 0, 0, 65 }, { 111, 7, 65 }, // und_SV -> es_Latn_SV
- { 0, 0, 207 }, { 8, 1, 207 }, // und_SY -> ar_Arab_SY
- { 0, 0, 42 }, { 37, 7, 42 }, // und_TD -> fr_Latn_TD
- { 0, 0, 78 }, { 37, 7, 78 }, // und_TF -> fr_Latn_TF
- { 0, 0, 212 }, { 37, 7, 212 }, // und_TG -> fr_Latn_TG
- { 0, 0, 211 }, { 120, 30, 211 }, // und_TH -> th_Thai_TH
- { 0, 0, 209 }, { 116, 2, 209 }, // und_TJ -> tg_Cyrl_TJ
- { 0, 0, 213 }, { 353, 7, 213 }, // und_TK -> tkl_Latn_TK
- { 0, 0, 62 }, { 91, 7, 62 }, // und_TL -> pt_Latn_TL
- { 0, 0, 218 }, { 126, 7, 218 }, // und_TM -> tk_Latn_TM
- { 0, 0, 216 }, { 8, 1, 216 }, // und_TN -> ar_Arab_TN
- { 0, 0, 214 }, { 123, 7, 214 }, // und_TO -> to_Latn_TO
- { 0, 0, 217 }, { 125, 7, 217 }, // und_TR -> tr_Latn_TR
- { 0, 0, 220 }, { 355, 7, 220 }, // und_TV -> tvl_Latn_TV
- { 0, 0, 208 }, { 25, 6, 208 }, // und_TW -> zh_Hant_TW
- { 0, 0, 210 }, { 113, 7, 210 }, // und_TZ -> sw_Latn_TZ
- { 0, 0, 222 }, { 129, 2, 222 }, // und_UA -> uk_Cyrl_UA
- { 0, 0, 221 }, { 113, 7, 221 }, // und_UG -> sw_Latn_UG
- { 0, 0, 227 }, { 111, 7, 227 }, // und_UY -> es_Latn_UY
- { 0, 0, 228 }, { 131, 7, 228 }, // und_UZ -> uz_Latn_UZ
- { 0, 0, 230 }, { 58, 7, 230 }, // und_VA -> it_Latn_VA
- { 0, 0, 231 }, { 111, 7, 231 }, // und_VE -> es_Latn_VE
- { 0, 0, 232 }, { 132, 7, 232 }, // und_VN -> vi_Latn_VN
- { 0, 0, 229 }, { 18, 7, 229 }, // und_VU -> bi_Latn_VU
- { 0, 0, 235 }, { 37, 7, 235 }, // und_WF -> fr_Latn_WF
- { 0, 0, 183 }, { 97, 7, 183 }, // und_WS -> sm_Latn_WS
- { 0, 0, 257 }, { 6, 7, 257 }, // und_XK -> sq_Latn_XK
- { 0, 0, 237 }, { 8, 1, 237 }, // und_YE -> ar_Arab_YE
- { 0, 0, 138 }, { 37, 7, 138 }, // und_YT -> fr_Latn_YT
- { 0, 0, 240 }, { 104, 7, 240 }, // und_ZW -> sn_Latn_ZW
- { 0, 134, 0 }, { 177, 134, 91 }, // und_Adlm -> ff_Adlm_GN
- { 0, 105, 0 }, { 335, 105, 178 }, // und_Aghb -> lez_Aghb_RU
- { 0, 128, 0 }, { 340, 128, 100 }, // und_Ahom -> aho_Ahom_IN
- { 0, 1, 0 }, { 8, 1, 64 }, // und_Arab -> ar_Arab_EG
- { 0, 1, 46 }, { 76, 1, 46 }, // und_Arab_CC -> ms_Arab_CC
- { 0, 1, 44 }, { 128, 1, 44 }, // und_Arab_CN -> ug_Arab_CN
- { 0, 1, 224 }, { 62, 1, 224 }, // und_Arab_GB -> ks_Arab_GB
- { 0, 1, 101 }, { 76, 1, 101 }, // und_Arab_ID -> ms_Arab_ID
- { 0, 1, 100 }, { 130, 1, 100 }, // und_Arab_IN -> ur_Arab_IN
- { 0, 1, 143 }, { 63, 1, 143 }, // und_Arab_MN -> kk_Arab_MN
- { 0, 1, 137 }, { 130, 1, 137 }, // und_Arab_MU -> ur_Arab_MU
- { 0, 1, 157 }, { 47, 1, 157 }, // und_Arab_NG -> ha_Arab_NG
- { 0, 1, 163 }, { 130, 1, 163 }, // und_Arab_PK -> ur_Arab_PK
- { 0, 1, 209 }, { 89, 1, 209 }, // und_Arab_TJ -> fa_Arab_TJ
- { 0, 1, 217 }, { 12, 1, 217 }, // und_Arab_TR -> az_Arab_TR
- { 0, 57, 0 }, { 265, 57, 102 }, // und_Armi -> arc_Armi_IR
- { 0, 10, 0 }, { 9, 10, 11 }, // und_Armn -> hy_Armn_AM
- { 0, 36, 0 }, { 255, 36, 102 }, // und_Avst -> ae_Avst_IR
- { 0, 37, 0 }, { 266, 37, 101 }, // und_Bali -> ban_Bali_ID
- { 0, 38, 0 }, { 267, 38, 37 }, // und_Bamu -> bax_Bamu_CM
- { 0, 106, 0 }, { 336, 106, 121 }, // und_Bass -> bsq_Bass_LR
- { 0, 39, 0 }, { 268, 39, 101 }, // und_Batk -> bbc_Batk_ID
- { 0, 11, 0 }, { 15, 11, 18 }, // und_Beng -> bn_Beng_BD
- { 0, 135, 0 }, { 99, 135, 100 }, // und_Bhks -> sa_Bhks_IN
- { 0, 40, 0 }, { 25, 40, 208 }, // und_Bopo -> zh_Bopo_TW
- { 0, 41, 0 }, { 342, 41, 100 }, // und_Brah -> pka_Brah_IN
- { 0, 103, 0 }, { 37, 103, 74 }, // und_Brai -> fr_Brai_FR
- { 0, 42, 0 }, { 269, 42, 101 }, // und_Bugi -> bug_Bugi_ID
- { 0, 43, 0 }, { 270, 43, 170 }, // und_Buhd -> bku_Buhd_PH
- { 0, 46, 0 }, { 272, 46, 18 }, // und_Cakm -> ccp_Cakm_BD
- { 0, 44, 0 }, { 221, 44, 38 }, // und_Cans -> cr_Cans_CA
- { 0, 45, 0 }, { 271, 45, 217 }, // und_Cari -> xcr_Cari_TR
- { 0, 47, 0 }, { 276, 47, 232 }, // und_Cham -> cjm_Cham_VN
- { 0, 12, 0 }, { 190, 12, 225 }, // und_Cher -> chr_Cher_US
- { 0, 48, 0 }, { 274, 48, 64 }, // und_Copt -> cop_Copt_EG
- { 0, 49, 0 }, { 264, 49, 56 }, // und_Cprt -> grc_Cprt_CY
- { 0, 2, 0 }, { 96, 2, 178 }, // und_Cyrl -> ru_Cyrl_RU
- { 0, 2, 2 }, { 74, 2, 2 }, // und_Cyrl_AL -> mk_Cyrl_AL
- { 0, 2, 27 }, { 100, 2, 27 }, // und_Cyrl_BA -> sr_Cyrl_BA
- { 0, 2, 81 }, { 2, 2, 81 }, // und_Cyrl_GE -> ab_Cyrl_GE
- { 0, 2, 85 }, { 74, 2, 85 }, // und_Cyrl_GR -> mk_Cyrl_GR
- { 0, 2, 141 }, { 129, 2, 141 }, // und_Cyrl_MD -> uk_Cyrl_MD
- { 0, 2, 177 }, { 20, 2, 177 }, // und_Cyrl_RO -> bg_Cyrl_RO
- { 0, 2, 191 }, { 129, 2, 191 }, // und_Cyrl_SK -> uk_Cyrl_SK
- { 0, 2, 257 }, { 100, 2, 257 }, // und_Cyrl_XK -> sr_Cyrl_XK
- { 0, 13, 0 }, { 49, 13, 100 }, // und_Deva -> hi_Deva_IN
- { 0, 13, 25 }, { 84, 13, 25 }, // und_Deva_BT -> ne_Deva_BT
- { 0, 13, 137 }, { 343, 13, 137 }, // und_Deva_MU -> bho_Deva_MU
- { 0, 107, 0 }, { 37, 107, 74 }, // und_Dupl -> fr_Dupl_FR
- { 0, 50, 0 }, { 263, 50, 64 }, // und_Egyp -> egy_Egyp_EG
- { 0, 108, 0 }, { 6, 108, 2 }, // und_Elba -> sq_Elba_AL
- { 0, 14, 0 }, { 7, 14, 69 }, // und_Ethi -> am_Ethi_ET
- { 0, 15, 0 }, { 41, 15, 81 }, // und_Geor -> ka_Geor_GE
- { 0, 52, 0 }, { 219, 52, 33 }, // und_Glag -> cu_Glag_BG
- { 0, 53, 0 }, { 279, 53, 222 }, // und_Goth -> got_Goth_UA
- { 0, 109, 0 }, { 99, 109, 100 }, // und_Gran -> sa_Gran_IN
- { 0, 16, 0 }, { 43, 16, 85 }, // und_Grek -> el_Grek_GR
- { 0, 17, 0 }, { 46, 17, 100 }, // und_Gujr -> gu_Gujr_IN
- { 0, 4, 0 }, { 92, 4, 100 }, // und_Guru -> pa_Guru_IN
- { 0, 140, 0 }, { 25, 140, 208 }, // und_Hanb -> zh_Hanb_TW
- { 0, 55, 0 }, { 66, 55, 114 }, // und_Hang -> ko_Hang_KR
- { 0, 54, 0 }, { 25, 54, 44 }, // und_Hani -> zh_Hani_CN
- { 0, 56, 0 }, { 280, 56, 170 }, // und_Hano -> hnn_Hano_PH
- { 0, 5, 0 }, { 25, 5, 44 }, // und_Hans -> zh_Hans_CN
- { 0, 6, 0 }, { 25, 6, 208 }, // und_Hant -> zh_Hant_TW
- { 0, 130, 0 }, { 356, 130, 103 }, // und_Hatr -> mis_Hatr_IQ
- { 0, 18, 0 }, { 48, 18, 105 }, // und_Hebr -> he_Hebr_IL
- { 0, 18, 38 }, { 137, 18, 38 }, // und_Hebr_CA -> yi_Hebr_CA
- { 0, 18, 224 }, { 137, 18, 224 }, // und_Hebr_GB -> yi_Hebr_GB
- { 0, 18, 205 }, { 137, 18, 205 }, // und_Hebr_SE -> yi_Hebr_SE
- { 0, 18, 222 }, { 137, 18, 222 }, // und_Hebr_UA -> yi_Hebr_UA
- { 0, 18, 225 }, { 137, 18, 225 }, // und_Hebr_US -> yi_Hebr_US
- { 0, 104, 0 }, { 59, 104, 108 }, // und_Hira -> ja_Hira_JP
- { 0, 129, 0 }, { 344, 129, 217 }, // und_Hluw -> hlu_Hluw_TR
- { 0, 110, 0 }, { 333, 110, 117 }, // und_Hmng -> hnj_Hmng_LA
- { 0, 132, 0 }, { 50, 132, 98 }, // und_Hung -> hu_Hung_HU
- { 0, 79, 0 }, { 278, 79, 106 }, // und_Ital -> ett_Ital_IT
- { 0, 141, 0 }, { 66, 141, 114 }, // und_Jamo -> ko_Jamo_KR
- { 0, 60, 0 }, { 60, 60, 101 }, // und_Java -> jv_Java_ID
- { 0, 19, 0 }, { 59, 19, 108 }, // und_Jpan -> ja_Jpan_JP
- { 0, 63, 0 }, { 277, 63, 147 }, // und_Kali -> eky_Kali_MM
- { 0, 62, 0 }, { 59, 62, 108 }, // und_Kana -> ja_Kana_JP
- { 0, 64, 0 }, { 300, 64, 163 }, // und_Khar -> pra_Khar_PK
- { 0, 20, 0 }, { 23, 20, 36 }, // und_Khmr -> km_Khmr_KH
- { 0, 111, 0 }, { 105, 111, 100 }, // und_Khoj -> sd_Khoj_IN
- { 0, 21, 0 }, { 61, 21, 100 }, // und_Knda -> kn_Knda_IN
- { 0, 22, 0 }, { 66, 22, 114 }, // und_Kore -> ko_Kore_KR
- { 0, 61, 0 }, { 343, 61, 100 }, // und_Kthi -> bho_Kthi_IN
- { 0, 65, 0 }, { 292, 65, 211 }, // und_Lana -> nod_Lana_TH
- { 0, 23, 0 }, { 69, 23, 117 }, // und_Laoo -> lo_Laoo_LA
- { 0, 7, 1 }, { 126, 7, 1 }, // und_Latn_AF -> tk_Latn_AF
- { 0, 7, 11 }, { 67, 7, 11 }, // und_Latn_AM -> ku_Latn_AM
- { 0, 7, 44 }, { 139, 7, 44 }, // und_Latn_CN -> za_Latn_CN
- { 0, 7, 56 }, { 125, 7, 56 }, // und_Latn_CY -> tr_Latn_CY
- { 0, 7, 3 }, { 37, 7, 3 }, // und_Latn_DZ -> fr_Latn_DZ
- { 0, 7, 69 }, { 31, 7, 69 }, // und_Latn_ET -> en_Latn_ET
- { 0, 7, 81 }, { 67, 7, 81 }, // und_Latn_GE -> ku_Latn_GE
- { 0, 7, 102 }, { 126, 7, 102 }, // und_Latn_IR -> tk_Latn_IR
- { 0, 7, 48 }, { 37, 7, 48 }, // und_Latn_KM -> fr_Latn_KM
- { 0, 7, 145 }, { 37, 7, 145 }, // und_Latn_MA -> fr_Latn_MA
- { 0, 7, 127 }, { 6, 7, 127 }, // und_Latn_MK -> sq_Latn_MK
- { 0, 7, 126 }, { 91, 7, 126 }, // und_Latn_MO -> pt_Latn_MO
- { 0, 7, 136 }, { 37, 7, 136 }, // und_Latn_MR -> fr_Latn_MR
- { 0, 7, 207 }, { 37, 7, 207 }, // und_Latn_SY -> fr_Latn_SY
- { 0, 7, 216 }, { 37, 7, 216 }, // und_Latn_TN -> fr_Latn_TN
- { 0, 7, 208 }, { 174, 7, 208 }, // und_Latn_TW -> trv_Latn_TW
- { 0, 7, 222 }, { 90, 7, 222 }, // und_Latn_UA -> pl_Latn_UA
- { 0, 66, 0 }, { 283, 66, 100 }, // und_Lepc -> lep_Lepc_IN
- { 0, 67, 0 }, { 284, 67, 100 }, // und_Limb -> lif_Limb_IN
- { 0, 112, 0 }, { 332, 112, 85 }, // und_Lina -> lab_Lina_GR
- { 0, 68, 0 }, { 264, 68, 85 }, // und_Linb -> grc_Linb_GR
- { 0, 51, 0 }, { 285, 51, 44 }, // und_Lisu -> lis_Lisu_CN
- { 0, 69, 0 }, { 287, 69, 217 }, // und_Lyci -> xlc_Lyci_TR
- { 0, 70, 0 }, { 288, 70, 217 }, // und_Lydi -> xld_Lydi_TR
- { 0, 113, 0 }, { 49, 113, 100 }, // und_Mahj -> hi_Mahj_IN
- { 0, 71, 0 }, { 273, 71, 102 }, // und_Mand -> myz_Mand_IR
- { 0, 114, 0 }, { 329, 114, 44 }, // und_Mani -> xmn_Mani_CN
- { 0, 136, 0 }, { 121, 136, 44 }, // und_Marc -> bo_Marc_CN
- { 0, 115, 0 }, { 330, 115, 189 }, // und_Mend -> men_Mend_SL
- { 0, 74, 0 }, { 291, 74, 201 }, // und_Merc -> xmr_Merc_SD
- { 0, 73, 0 }, { 291, 73, 201 }, // und_Mero -> xmr_Mero_SD
- { 0, 24, 0 }, { 77, 24, 100 }, // und_Mlym -> ml_Mlym_IN
- { 0, 116, 0 }, { 80, 116, 100 }, // und_Modi -> mr_Modi_IN
- { 0, 8, 0 }, { 82, 8, 44 }, // und_Mong -> mn_Mong_CN
- { 0, 117, 0 }, { 347, 117, 18 }, // und_Mroo -> mro_Mroo_BD
- { 0, 72, 0 }, { 290, 72, 100 }, // und_Mtei -> mni_Mtei_IN
- { 0, 131, 0 }, { 352, 131, 163 }, // und_Mult -> skr_Mult_PK
- { 0, 25, 0 }, { 21, 25, 147 }, // und_Mymr -> my_Mymr_MM
- { 0, 118, 0 }, { 331, 118, 186 }, // und_Narb -> xna_Narb_SA
- { 0, 119, 0 }, { 265, 119, 109 }, // und_Nbat -> arc_Nbat_JO
- { 0, 137, 0 }, { 348, 137, 150 }, // und_Newa -> new_Newa_NP
- { 0, 75, 0 }, { 289, 75, 91 }, // und_Nkoo -> man_Nkoo_GN
- { 0, 77, 0 }, { 293, 77, 104 }, // und_Ogam -> sga_Ogam_IE
- { 0, 78, 0 }, { 304, 78, 100 }, // und_Olck -> sat_Olck_IN
- { 0, 82, 0 }, { 296, 82, 143 }, // und_Orkh -> otk_Orkh_MN
- { 0, 26, 0 }, { 87, 26, 100 }, // und_Orya -> or_Orya_IN
- { 0, 138, 0 }, { 358, 138, 225 }, // und_Osge -> osa_Osge_US
- { 0, 83, 0 }, { 110, 83, 194 }, // und_Osma -> so_Osma_SO
- { 0, 120, 0 }, { 265, 120, 207 }, // und_Palm -> arc_Palm_SY
- { 0, 121, 0 }, { 338, 121, 147 }, // und_Pauc -> ctd_Pauc_MM
- { 0, 122, 0 }, { 226, 122, 178 }, // und_Perm -> kv_Perm_RU
- { 0, 84, 0 }, { 345, 84, 44 }, // und_Phag -> lzh_Phag_CN
- { 0, 58, 0 }, { 297, 58, 102 }, // und_Phli -> pal_Phli_IR
- { 0, 123, 0 }, { 297, 123, 44 }, // und_Phlp -> pal_Phlp_CN
- { 0, 85, 0 }, { 299, 85, 119 }, // und_Phnx -> phn_Phnx_LB
- { 0, 86, 0 }, { 282, 86, 44 }, // und_Plrd -> hmd_Plrd_CN
- { 0, 59, 0 }, { 298, 59, 102 }, // und_Prti -> xpr_Prti_IR
- { 0, 87, 0 }, { 301, 87, 101 }, // und_Rjng -> rej_Rjng_ID
- { 0, 88, 0 }, { 294, 88, 205 }, // und_Runr -> non_Runr_SE
- { 0, 89, 0 }, { 303, 89, 105 }, // und_Samr -> smp_Samr_IL
- { 0, 81, 0 }, { 302, 81, 237 }, // und_Sarb -> xsa_Sarb_YE
- { 0, 90, 0 }, { 305, 90, 100 }, // und_Saur -> saz_Saur_IN
- { 0, 133, 0 }, { 341, 133, 225 }, // und_Sgnw -> ase_Sgnw_US
- { 0, 92, 0 }, { 31, 92, 224 }, // und_Shaw -> en_Shaw_GB
- { 0, 91, 0 }, { 99, 91, 100 }, // und_Shrd -> sa_Shrd_IN
- { 0, 124, 0 }, { 99, 124, 100 }, // und_Sidd -> sa_Sidd_IN
- { 0, 125, 0 }, { 105, 125, 100 }, // und_Sind -> sd_Sind_IN
- { 0, 32, 0 }, { 106, 32, 198 }, // und_Sinh -> si_Sinh_LK
- { 0, 93, 0 }, { 306, 93, 100 }, // und_Sora -> srb_Sora_IN
- { 0, 95, 0 }, { 112, 95, 101 }, // und_Sund -> su_Sund_ID
- { 0, 96, 0 }, { 307, 96, 18 }, // und_Sylo -> syl_Sylo_BD
- { 0, 33, 0 }, { 151, 33, 103 }, // und_Syrc -> syr_Syrc_IQ
- { 0, 98, 0 }, { 308, 98, 170 }, // und_Tagb -> tbw_Tagb_PH
- { 0, 101, 0 }, { 275, 101, 100 }, // und_Takr -> doi_Takr_IN
- { 0, 99, 0 }, { 310, 99, 44 }, // und_Tale -> tdd_Tale_CN
- { 0, 76, 0 }, { 286, 76, 44 }, // und_Talu -> khb_Talu_CN
- { 0, 27, 0 }, { 117, 27, 100 }, // und_Taml -> ta_Taml_IN
- { 0, 139, 0 }, { 359, 139, 44 }, // und_Tang -> txg_Tang_CN
- { 0, 100, 0 }, { 309, 100, 232 }, // und_Tavt -> blt_Tavt_VN
- { 0, 28, 0 }, { 119, 28, 100 }, // und_Telu -> te_Telu_IN
- { 0, 9, 0 }, { 314, 9, 145 }, // und_Tfng -> zgh_Tfng_MA
- { 0, 97, 0 }, { 166, 97, 170 }, // und_Tglg -> fil_Tglg_PH
- { 0, 29, 0 }, { 143, 29, 131 }, // und_Thaa -> dv_Thaa_MV
- { 0, 30, 0 }, { 120, 30, 211 }, // und_Thai -> th_Thai_TH
- { 0, 31, 0 }, { 121, 31, 44 }, // und_Tibt -> bo_Tibt_CN
- { 0, 126, 0 }, { 339, 126, 100 }, // und_Tirh -> mai_Tirh_IN
- { 0, 102, 0 }, { 311, 102, 207 }, // und_Ugar -> uga_Ugar_SY
- { 0, 35, 0 }, { 252, 35, 121 }, // und_Vaii -> vai_Vaii_LR
- { 0, 127, 0 }, { 334, 127, 100 }, // und_Wara -> hoc_Wara_IN
- { 0, 80, 0 }, { 295, 80, 102 }, // und_Xpeo -> peo_Xpeo_IR
- { 0, 94, 0 }, { 262, 94, 103 }, // und_Xsux -> akk_Xsux_IQ
- { 0, 34, 0 }, { 168, 34, 44 } // und_Yiii -> ii_Yiii_CN
+static constexpr QLocaleId likely_subtags[] = {
+ { 2, 0, 0 }, { 2, 27, 90 }, // ab -> ab_Cyrl_GE
+ { 3, 0, 0 }, { 3, 66, 77 }, // aa -> aa_Latn_ET
+ { 4, 0, 0 }, { 4, 66, 216 }, // af -> af_Latn_ZA
+ { 5, 0, 0 }, { 5, 66, 40 }, // agq -> agq_Latn_CM
+ { 6, 0, 0 }, { 6, 66, 92 }, // ak -> ak_Latn_GH
+ { 7, 0, 0 }, { 7, 25, 113 }, // akk -> akk_Xsux_IQ
+ { 8, 0, 0 }, { 8, 66, 40 }, // bss -> bss_Latn_CM
+ { 9, 0, 0 }, { 9, 66, 3 }, // sq -> sq_Latn_AL
+ { 10, 0, 0 }, { 10, 117, 248 }, // ase -> ase_Sgnw_US
+ { 11, 0, 0 }, { 11, 33, 77 }, // am -> am_Ethi_ET
+ { 12, 0, 0 }, { 12, 31, 71 }, // egy -> egy_Egyp_EG
+ { 13, 70, 0 }, { 13, 70, 94 }, // grc_Linb -> grc_Linb_GR
+ { 13, 0, 0 }, { 13, 26, 63 }, // grc -> grc_Cprt_CY
+ { 14, 0, 0 }, { 14, 4, 71 }, // ar -> ar_Arab_EG
+ { 15, 0, 0 }, { 15, 66, 220 }, // an -> an_Latn_ES
+ { 16, 87, 0 }, { 16, 87, 122 }, // arc_Nbat -> arc_Nbat_JO
+ { 16, 104, 0 }, { 16, 104, 227 }, // arc_Palm -> arc_Palm_SY
+ { 16, 0, 0 }, { 16, 49, 112 }, // arc -> arc_Armi_IR
+ { 17, 0, 0 }, { 17, 5, 12 }, // hy -> hy_Armn_AM
+ { 18, 0, 0 }, { 18, 9, 110 }, // as -> as_Beng_IN
+ { 19, 0, 0 }, { 19, 66, 220 }, // ast -> ast_Latn_ES
+ { 20, 0, 0 }, { 20, 66, 230 }, // asa -> asa_Latn_TZ
+ { 21, 0, 0 }, { 21, 66, 169 }, // cch -> cch_Latn_NG
+ { 22, 0, 0 }, { 22, 27, 193 }, // av -> av_Cyrl_RU
+ { 23, 0, 0 }, { 23, 6, 112 }, // ae -> ae_Avst_IR
+ { 24, 0, 0 }, { 24, 66, 28 }, // ay -> ay_Latn_BO
+ { 25, 0, 112 }, { 25, 4, 112 }, // az_IR -> az_Arab_IR
+ { 25, 0, 113 }, { 25, 4, 113 }, // az_IQ -> az_Arab_IQ
+ { 25, 0, 193 }, { 25, 27, 193 }, // az_RU -> az_Cyrl_RU
+ { 25, 4, 0 }, { 25, 4, 112 }, // az_Arab -> az_Arab_IR
+ { 25, 0, 0 }, { 25, 66, 17 }, // az -> az_Latn_AZ
+ { 26, 0, 0 }, { 26, 66, 40 }, // ksf -> ksf_Latn_CM
+ { 27, 0, 0 }, { 27, 66, 111 }, // ban -> ban_Latn_ID
+ { 28, 0, 0 }, { 28, 66, 145 }, // bm -> bm_Latn_ML
+ { 29, 0, 0 }, { 29, 8, 40 }, // bax -> bax_Bamu_CM
+ { 30, 0, 0 }, { 30, 9, 20 }, // bn -> bn_Beng_BD
+ { 31, 0, 0 }, { 31, 66, 40 }, // bas -> bas_Latn_CM
+ { 32, 0, 0 }, { 32, 27, 193 }, // ba -> ba_Cyrl_RU
+ { 33, 0, 0 }, { 33, 66, 220 }, // eu -> eu_Latn_ES
+ { 34, 0, 0 }, { 34, 66, 111 }, // bbc -> bbc_Latn_ID
+ { 35, 0, 0 }, { 35, 27, 22 }, // be -> be_Cyrl_BY
+ { 36, 0, 0 }, { 36, 66, 260 }, // bem -> bem_Latn_ZM
+ { 37, 0, 0 }, { 37, 66, 230 }, // bez -> bez_Latn_TZ
+ { 38, 0, 0 }, { 38, 29, 110 }, // bho -> bho_Deva_IN
+ { 39, 0, 0 }, { 39, 66, 252 }, // bi -> bi_Latn_VU
+ { 40, 0, 0 }, { 40, 33, 74 }, // byn -> byn_Ethi_ER
+ { 41, 0, 0 }, { 41, 29, 110 }, // brx -> brx_Deva_IN
+ { 42, 0, 0 }, { 42, 66, 29 }, // bs -> bs_Latn_BA
+ { 43, 0, 0 }, { 43, 66, 84 }, // br -> br_Latn_FR
+ { 44, 0, 0 }, { 44, 66, 111 }, // bug -> bug_Latn_ID
+ { 45, 0, 0 }, { 45, 27, 36 }, // bg -> bg_Cyrl_BG
+ { 46, 0, 0 }, { 46, 86, 161 }, // my -> my_Mymr_MM
+ { 47, 0, 50 }, { 47, 118, 50 }, // yue_CN -> yue_Hans_CN
+ { 47, 118, 0 }, { 47, 118, 50 }, // yue_Hans -> yue_Hans_CN
+ { 47, 0, 0 }, { 47, 137, 107 }, // yue -> yue_Hant_HK
+ { 48, 0, 0 }, { 48, 66, 220 }, // ca -> ca_Latn_ES
+ { 49, 0, 0 }, { 49, 66, 185 }, // ceb -> ceb_Latn_PH
+ { 50, 0, 0 }, { 50, 66, 159 }, // tzm -> tzm_Latn_MA
+ { 51, 0, 0 }, { 51, 4, 113 }, // ckb -> ckb_Arab_IQ
+ { 52, 0, 0 }, { 52, 21, 20 }, // ccp -> ccp_Cakm_BD
+ { 53, 0, 0 }, { 53, 66, 98 }, // ch -> ch_Latn_GU
+ { 54, 0, 0 }, { 54, 27, 193 }, // ce -> ce_Cyrl_RU
+ { 55, 0, 0 }, { 55, 23, 248 }, // chr -> chr_Cher_US
+ { 56, 0, 0 }, { 56, 66, 248 }, // cic -> cic_Latn_US
+ { 57, 0, 0 }, { 57, 66, 243 }, // cgg -> cgg_Latn_UG
+ { 58, 0, 15 }, { 58, 137, 15 }, // zh_AU -> zh_Hant_AU
+ { 58, 0, 35 }, { 58, 137, 35 }, // zh_BN -> zh_Hant_BN
+ { 58, 0, 85 }, { 58, 137, 85 }, // zh_GF -> zh_Hant_GF
+ { 58, 0, 86 }, { 58, 137, 86 }, // zh_PF -> zh_Hant_PF
+ { 58, 0, 107 }, { 58, 137, 107 }, // zh_HK -> zh_Hant_HK
+ { 58, 0, 111 }, { 58, 137, 111 }, // zh_ID -> zh_Hant_ID
+ { 58, 0, 139 }, { 58, 137, 139 }, // zh_MO -> zh_Hant_MO
+ { 58, 0, 181 }, { 58, 137, 181 }, // zh_PA -> zh_Hant_PA
+ { 58, 0, 185 }, { 58, 137, 185 }, // zh_PH -> zh_Hant_PH
+ { 58, 0, 223 }, { 58, 137, 223 }, // zh_SR -> zh_Hant_SR
+ { 58, 0, 228 }, { 58, 137, 228 }, // zh_TW -> zh_Hant_TW
+ { 58, 0, 231 }, { 58, 137, 231 }, // zh_TH -> zh_Hant_TH
+ { 58, 0, 246 }, { 58, 137, 246 }, // zh_GB -> zh_Hant_GB
+ { 58, 0, 248 }, { 58, 137, 248 }, // zh_US -> zh_Hant_US
+ { 58, 0, 255 }, { 58, 137, 255 }, // zh_VN -> zh_Hant_VN
+ { 58, 13, 0 }, { 58, 13, 228 }, // zh_Bopo -> zh_Bopo_TW
+ { 58, 45, 0 }, { 58, 45, 228 }, // zh_Hanb -> zh_Hanb_TW
+ { 58, 137, 0 }, { 58, 137, 228 }, // zh_Hant -> zh_Hant_TW
+ { 58, 0, 0 }, { 58, 118, 50 }, // zh -> zh_Hans_CN
+ { 59, 36, 0 }, { 59, 36, 36 }, // cu_Glag -> cu_Glag_BG
+ { 59, 0, 0 }, { 59, 27, 193 }, // cu -> cu_Cyrl_RU
+ { 60, 0, 0 }, { 60, 27, 193 }, // cv -> cv_Cyrl_RU
+ { 61, 0, 0 }, { 61, 66, 91 }, // ksh -> ksh_Latn_DE
+ { 62, 0, 0 }, { 62, 24, 71 }, // cop -> cop_Copt_EG
+ { 63, 0, 0 }, { 63, 66, 246 }, // kw -> kw_Latn_GB
+ { 64, 0, 0 }, { 64, 66, 84 }, // co -> co_Latn_FR
+ { 65, 0, 0 }, { 65, 18, 41 }, // cr -> cr_Cans_CA
+ { 66, 0, 0 }, { 66, 66, 60 }, // hr -> hr_Latn_HR
+ { 67, 0, 0 }, { 67, 66, 64 }, // cs -> cs_Latn_CZ
+ { 68, 0, 0 }, { 68, 66, 65 }, // da -> da_Latn_DK
+ { 69, 0, 0 }, { 69, 132, 144 }, // dv -> dv_Thaa_MV
+ { 70, 0, 0 }, { 70, 29, 110 }, // doi -> doi_Deva_IN
+ { 71, 0, 0 }, { 71, 66, 40 }, // dua -> dua_Latn_CM
+ { 72, 0, 0 }, { 72, 66, 165 }, // nl -> nl_Latn_NL
+ { 73, 0, 0 }, { 73, 134, 27 }, // dz -> dz_Tibt_BT
+ { 74, 0, 0 }, { 74, 66, 124 }, // ebu -> ebu_Latn_KE
+ { 75, 115, 0 }, { 75, 115, 246 }, // en_Shaw -> en_Shaw_GB
+ { 75, 0, 0 }, { 75, 66, 248 }, // en -> en_Latn_US
+ { 76, 0, 0 }, { 76, 27, 193 }, // myv -> myv_Cyrl_RU
+ { 77, 0, 0 }, { 77, 66, 258 }, // eo -> eo_Latn_001
+ { 78, 0, 0 }, { 78, 66, 75 }, // et -> et_Latn_EE
+ { 79, 0, 0 }, { 79, 66, 92 }, // ee -> ee_Latn_GH
+ { 80, 0, 0 }, { 80, 66, 40 }, // ewo -> ewo_Latn_CM
+ { 81, 0, 0 }, { 81, 66, 81 }, // fo -> fo_Latn_FO
+ { 82, 0, 0 }, { 82, 66, 82 }, // fj -> fj_Latn_FJ
+ { 83, 0, 0 }, { 83, 66, 185 }, // fil -> fil_Latn_PH
+ { 84, 0, 0 }, { 84, 66, 83 }, // fi -> fi_Latn_FI
+ { 85, 0, 0 }, { 85, 66, 84 }, // fr -> fr_Latn_FR
+ { 86, 0, 0 }, { 86, 66, 117 }, // fur -> fur_Latn_IT
+ { 87, 1, 0 }, { 87, 1, 102 }, // ff_Adlm -> ff_Adlm_GN
+ { 87, 0, 0 }, { 87, 66, 206 }, // ff -> ff_Latn_SN
+ { 88, 0, 0 }, { 88, 66, 246 }, // gd -> gd_Latn_GB
+ { 89, 0, 0 }, { 89, 66, 92 }, // gaa -> gaa_Latn_GH
+ { 90, 0, 0 }, { 90, 66, 220 }, // gl -> gl_Latn_ES
+ { 91, 0, 0 }, { 91, 66, 243 }, // lg -> lg_Latn_UG
+ { 92, 0, 0 }, { 92, 33, 77 }, // gez -> gez_Ethi_ET
+ { 93, 0, 0 }, { 93, 35, 90 }, // ka -> ka_Geor_GE
+ { 94, 0, 0 }, { 94, 66, 91 }, // de -> de_Latn_DE
+ { 95, 0, 0 }, { 95, 37, 244 }, // got -> got_Goth_UA
+ { 96, 0, 0 }, { 96, 39, 94 }, // el -> el_Grek_GR
+ { 97, 0, 0 }, { 97, 66, 183 }, // gn -> gn_Latn_PY
+ { 98, 0, 0 }, { 98, 40, 110 }, // gu -> gu_Gujr_IN
+ { 99, 0, 0 }, { 99, 66, 124 }, // guz -> guz_Latn_KE
+ { 100, 0, 0 }, { 100, 66, 104 }, // ht -> ht_Latn_HT
+ { 101, 0, 40 }, { 101, 4, 40 }, // ha_CM -> ha_Arab_CM
+ { 101, 0, 222 }, { 101, 4, 222 }, // ha_SD -> ha_Arab_SD
+ { 101, 0, 0 }, { 101, 66, 169 }, // ha -> ha_Latn_NG
+ { 102, 0, 0 }, { 102, 66, 248 }, // haw -> haw_Latn_US
+ { 103, 0, 0 }, { 103, 47, 116 }, // he -> he_Hebr_IL
+ { 104, 0, 0 }, { 104, 66, 162 }, // hz -> hz_Latn_NA
+ { 105, 0, 0 }, { 105, 29, 110 }, // hi -> hi_Deva_IN
+ { 106, 0, 0 }, { 106, 66, 182 }, // ho -> ho_Latn_PG
+ { 107, 0, 0 }, { 107, 66, 108 }, // hu -> hu_Latn_HU
+ { 108, 0, 0 }, { 108, 66, 109 }, // is -> is_Latn_IS
+ { 109, 0, 0 }, { 109, 66, 258 }, // io -> io_Latn_001
+ { 110, 0, 0 }, { 110, 66, 169 }, // ig -> ig_Latn_NG
+ { 111, 0, 0 }, { 111, 66, 83 }, // smn -> smn_Latn_FI
+ { 112, 0, 0 }, { 112, 66, 111 }, // id -> id_Latn_ID
+ { 113, 0, 0 }, { 113, 27, 193 }, // inh -> inh_Cyrl_RU
+ { 114, 0, 0 }, { 114, 66, 258 }, // ia -> ia_Latn_001
+ { 115, 0, 0 }, { 115, 66, 75 }, // ie -> ie_Latn_EE
+ { 116, 0, 0 }, { 116, 18, 41 }, // iu -> iu_Cans_CA
+ { 117, 0, 0 }, { 117, 66, 248 }, // ik -> ik_Latn_US
+ { 118, 0, 0 }, { 118, 66, 114 }, // ga -> ga_Latn_IE
+ { 119, 0, 0 }, { 119, 66, 117 }, // it -> it_Latn_IT
+ { 120, 0, 0 }, { 120, 53, 120 }, // ja -> ja_Jpan_JP
+ { 121, 0, 0 }, { 121, 66, 111 }, // jv -> jv_Latn_ID
+ { 122, 0, 0 }, { 122, 66, 169 }, // kaj -> kaj_Latn_NG
+ { 123, 0, 0 }, { 123, 66, 206 }, // dyo -> dyo_Latn_SN
+ { 124, 0, 0 }, { 124, 66, 43 }, // kea -> kea_Latn_CV
+ { 125, 0, 0 }, { 125, 66, 4 }, // kab -> kab_Latn_DZ
+ { 126, 0, 0 }, { 126, 66, 40 }, // kkj -> kkj_Latn_CM
+ { 127, 0, 0 }, { 127, 66, 95 }, // kl -> kl_Latn_GL
+ { 128, 0, 0 }, { 128, 66, 124 }, // kln -> kln_Latn_KE
+ { 129, 0, 0 }, { 129, 66, 124 }, // kam -> kam_Latn_KE
+ { 130, 0, 0 }, { 130, 56, 110 }, // kn -> kn_Knda_IN
+ { 131, 4, 0 }, { 131, 4, 169 }, // kr_Arab -> kr_Arab_NG
+ { 131, 0, 0 }, { 131, 66, 169 }, // kr -> kr_Latn_NG
+ { 132, 0, 0 }, { 132, 4, 110 }, // ks -> ks_Arab_IN
+ { 133, 0, 1 }, { 133, 4, 1 }, // kk_AF -> kk_Arab_AF
+ { 133, 0, 50 }, { 133, 4, 50 }, // kk_CN -> kk_Arab_CN
+ { 133, 0, 112 }, { 133, 4, 112 }, // kk_IR -> kk_Arab_IR
+ { 133, 0, 156 }, { 133, 4, 156 }, // kk_MN -> kk_Arab_MN
+ { 133, 4, 0 }, { 133, 4, 50 }, // kk_Arab -> kk_Arab_CN
+ { 133, 0, 0 }, { 133, 27, 123 }, // kk -> kk_Cyrl_KZ
+ { 134, 0, 0 }, { 134, 66, 40 }, // ken -> ken_Latn_CM
+ { 135, 0, 0 }, { 135, 60, 39 }, // km -> km_Khmr_KH
+ { 136, 0, 0 }, { 136, 66, 99 }, // quc -> quc_Latn_GT
+ { 137, 0, 0 }, { 137, 66, 124 }, // ki -> ki_Latn_KE
+ { 138, 0, 0 }, { 138, 66, 194 }, // rw -> rw_Latn_RW
+ { 139, 0, 0 }, { 139, 27, 193 }, // kv -> kv_Cyrl_RU
+ { 140, 0, 0 }, { 140, 66, 57 }, // kg -> kg_Latn_CD
+ { 141, 0, 0 }, { 141, 29, 110 }, // kok -> kok_Deva_IN
+ { 142, 0, 0 }, { 142, 63, 218 }, // ko -> ko_Kore_KR
+ { 143, 0, 0 }, { 143, 66, 118 }, // kfo -> kfo_Latn_CI
+ { 144, 0, 0 }, { 144, 66, 145 }, // ses -> ses_Latn_ML
+ { 145, 0, 0 }, { 145, 66, 145 }, // khq -> khq_Latn_ML
+ { 146, 0, 0 }, { 146, 66, 134 }, // kpe -> kpe_Latn_LR
+ { 147, 0, 0 }, { 147, 66, 162 }, // kj -> kj_Latn_NA
+ { 148, 0, 132 }, { 148, 4, 132 }, // ku_LB -> ku_Arab_LB
+ { 148, 4, 0 }, { 148, 4, 113 }, // ku_Arab -> ku_Arab_IQ
+ { 148, 0, 0 }, { 148, 66, 239 }, // ku -> ku_Latn_TR
+ { 149, 0, 0 }, { 149, 66, 40 }, // nmg -> nmg_Latn_CM
+ { 150, 0, 50 }, { 150, 4, 50 }, // ky_CN -> ky_Arab_CN
+ { 150, 0, 239 }, { 150, 66, 239 }, // ky_TR -> ky_Latn_TR
+ { 150, 4, 0 }, { 150, 4, 50 }, // ky_Arab -> ky_Arab_CN
+ { 150, 66, 0 }, { 150, 66, 239 }, // ky_Latn -> ky_Latn_TR
+ { 150, 0, 0 }, { 150, 27, 128 }, // ky -> ky_Cyrl_KG
+ { 151, 0, 0 }, { 151, 66, 248 }, // lkt -> lkt_Latn_US
+ { 152, 0, 0 }, { 152, 66, 230 }, // lag -> lag_Latn_TZ
+ { 153, 0, 0 }, { 153, 65, 129 }, // lo -> lo_Laoo_LA
+ { 154, 0, 0 }, { 154, 66, 253 }, // la -> la_Latn_VA
+ { 155, 0, 0 }, { 155, 66, 131 }, // lv -> lv_Latn_LV
+ { 156, 0, 0 }, { 156, 27, 193 }, // lez -> lez_Cyrl_RU
+ { 157, 0, 0 }, { 157, 66, 165 }, // li -> li_Latn_NL
+ { 158, 0, 0 }, { 158, 66, 57 }, // ln -> ln_Latn_CD
+ { 159, 0, 0 }, { 159, 118, 50 }, // lzh -> lzh_Hans_CN
+ { 160, 0, 0 }, { 160, 66, 137 }, // lt -> lt_Latn_LT
+ { 161, 0, 0 }, { 161, 66, 258 }, // jbo -> jbo_Latn_001
+ { 162, 0, 0 }, { 162, 66, 91 }, // dsb -> dsb_Latn_DE
+ { 163, 0, 0 }, { 163, 66, 91 }, // nds -> nds_Latn_DE
+ { 164, 0, 0 }, { 164, 66, 57 }, // lu -> lu_Latn_CD
+ { 165, 0, 0 }, { 165, 66, 225 }, // smj -> smj_Latn_SE
+ { 166, 0, 0 }, { 166, 66, 124 }, // luo -> luo_Latn_KE
+ { 167, 0, 0 }, { 167, 66, 138 }, // lb -> lb_Latn_LU
+ { 168, 0, 0 }, { 168, 66, 124 }, // luy -> luy_Latn_KE
+ { 169, 0, 0 }, { 169, 27, 140 }, // mk -> mk_Cyrl_MK
+ { 170, 0, 0 }, { 170, 66, 230 }, // jmc -> jmc_Latn_TZ
+ { 171, 0, 0 }, { 171, 29, 110 }, // mai -> mai_Deva_IN
+ { 172, 0, 0 }, { 172, 66, 160 }, // mgh -> mgh_Latn_MZ
+ { 173, 0, 0 }, { 173, 66, 230 }, // kde -> kde_Latn_TZ
+ { 174, 0, 0 }, { 174, 66, 141 }, // mg -> mg_Latn_MG
+ { 175, 0, 0 }, { 175, 74, 110 }, // ml -> ml_Mlym_IN
+ { 176, 0, 53 }, { 176, 4, 53 }, // ms_CC -> ms_Arab_CC
+ { 176, 0, 0 }, { 176, 66, 143 }, // ms -> ms_Latn_MY
+ { 177, 0, 0 }, { 177, 66, 146 }, // mt -> mt_Latn_MT
+ { 178, 0, 102 }, { 178, 90, 102 }, // man_GN -> man_Nkoo_GN
+ { 178, 90, 0 }, { 178, 90, 102 }, // man_Nkoo -> man_Nkoo_GN
+ { 178, 0, 0 }, { 178, 66, 89 }, // man -> man_Latn_GM
+ { 179, 0, 0 }, { 179, 9, 110 }, // mni -> mni_Beng_IN
+ { 180, 0, 0 }, { 180, 66, 115 }, // gv -> gv_Latn_IM
+ { 181, 0, 0 }, { 181, 66, 167 }, // mi -> mi_Latn_NZ
+ { 182, 0, 0 }, { 182, 66, 49 }, // arn -> arn_Latn_CL
+ { 183, 0, 0 }, { 183, 29, 110 }, // mr -> mr_Deva_IN
+ { 184, 0, 0 }, { 184, 66, 147 }, // mh -> mh_Latn_MH
+ { 185, 0, 0 }, { 185, 66, 124 }, // mas -> mas_Latn_KE
+ { 186, 0, 0 }, { 186, 4, 112 }, // mzn -> mzn_Arab_IR
+ { 187, 0, 0 }, { 187, 66, 209 }, // men -> men_Latn_SL
+ { 188, 0, 0 }, { 188, 66, 124 }, // mer -> mer_Latn_KE
+ { 189, 0, 0 }, { 189, 66, 40 }, // mgo -> mgo_Latn_CM
+ { 190, 0, 0 }, { 190, 66, 41 }, // moh -> moh_Latn_CA
+ { 191, 0, 50 }, { 191, 83, 50 }, // mn_CN -> mn_Mong_CN
+ { 191, 83, 0 }, { 191, 83, 50 }, // mn_Mong -> mn_Mong_CN
+ { 191, 0, 0 }, { 191, 27, 156 }, // mn -> mn_Cyrl_MN
+ { 192, 0, 0 }, { 192, 66, 150 }, // mfe -> mfe_Latn_MU
+ { 193, 0, 0 }, { 193, 66, 40 }, // mua -> mua_Latn_CM
+ { 194, 0, 0 }, { 194, 66, 248 }, // mus -> mus_Latn_US
+ { 195, 0, 0 }, { 195, 66, 162 }, // naq -> naq_Latn_NA
+ { 196, 0, 0 }, { 196, 66, 163 }, // na -> na_Latn_NR
+ { 197, 0, 0 }, { 197, 66, 248 }, // nv -> nv_Latn_US
+ { 198, 0, 0 }, { 198, 66, 162 }, // ng -> ng_Latn_NA
+ { 199, 0, 0 }, { 199, 29, 164 }, // ne -> ne_Deva_NP
+ { 200, 0, 0 }, { 200, 29, 164 }, // new -> new_Deva_NP
+ { 201, 0, 0 }, { 201, 66, 40 }, // nnh -> nnh_Latn_CM
+ { 202, 0, 0 }, { 202, 66, 40 }, // jgo -> jgo_Latn_CM
+ { 203, 0, 0 }, { 203, 66, 169 }, // pcm -> pcm_Latn_NG
+ { 204, 0, 0 }, { 204, 90, 102 }, // nqo -> nqo_Nkoo_GN
+ { 205, 0, 0 }, { 205, 4, 112 }, // lrc -> lrc_Arab_IR
+ { 206, 0, 0 }, { 206, 66, 175 }, // se -> se_Latn_NO
+ { 207, 0, 0 }, { 207, 66, 216 }, // nso -> nso_Latn_ZA
+ { 208, 0, 0 }, { 208, 66, 261 }, // nd -> nd_Latn_ZW
+ { 209, 0, 0 }, { 209, 66, 175 }, // nb -> nb_Latn_NO
+ { 210, 0, 0 }, { 210, 66, 175 }, // nn -> nn_Latn_NO
+ { 211, 0, 0 }, { 211, 66, 219 }, // nus -> nus_Latn_SS
+ { 212, 0, 0 }, { 212, 66, 142 }, // ny -> ny_Latn_MW
+ { 213, 0, 0 }, { 213, 66, 243 }, // nyn -> nyn_Latn_UG
+ { 214, 0, 0 }, { 214, 66, 84 }, // oc -> oc_Latn_FR
+ { 215, 0, 0 }, { 215, 91, 110 }, // or -> or_Orya_IN
+ { 216, 0, 0 }, { 216, 18, 41 }, // oj -> oj_Cans_CA
+ { 217, 0, 0 }, { 217, 92, 114 }, // sga -> sga_Ogam_IE
+ { 218, 0, 0 }, { 218, 111, 225 }, // non -> non_Runr_SE
+ { 219, 0, 0 }, { 219, 98, 112 }, // peo -> peo_Xpeo_IR
+ { 220, 0, 0 }, { 220, 66, 77 }, // om -> om_Latn_ET
+ { 221, 0, 0 }, { 221, 101, 248 }, // osa -> osa_Osge_US
+ { 222, 0, 0 }, { 222, 27, 90 }, // os -> os_Cyrl_GE
+ { 223, 109, 0 }, { 223, 109, 50 }, // pal_Phlp -> pal_Phlp_CN
+ { 223, 0, 0 }, { 223, 50, 112 }, // pal -> pal_Phli_IR
+ { 224, 0, 0 }, { 224, 66, 179 }, // pau -> pau_Latn_PW
+ { 225, 14, 0 }, { 225, 14, 110 }, // pi_Brah -> pi_Brah_IN
+ { 225, 29, 0 }, { 225, 29, 110 }, // pi_Deva -> pi_Deva_IN
+ { 225, 59, 0 }, { 225, 59, 110 }, // pi_Khar -> pi_Khar_IN
+ { 225, 60, 0 }, { 225, 60, 110 }, // pi_Khmr -> pi_Khmr_IN
+ { 225, 86, 0 }, { 225, 86, 110 }, // pi_Mymr -> pi_Mymr_IN
+ { 225, 133, 0 }, { 225, 133, 110 }, // pi_Thai -> pi_Thai_IN
+ { 225, 0, 0 }, { 225, 119, 110 }, // pi -> pi_Sinh_IN
+ { 226, 0, 0 }, { 226, 66, 62 }, // pap -> pap_Latn_CW
+ { 227, 0, 0 }, { 227, 4, 1 }, // ps -> ps_Arab_AF
+ { 228, 0, 0 }, { 228, 4, 112 }, // fa -> fa_Arab_IR
+ { 229, 0, 0 }, { 229, 107, 132 }, // phn -> phn_Phnx_LB
+ { 230, 0, 0 }, { 230, 66, 187 }, // pl -> pl_Latn_PL
+ { 231, 0, 0 }, { 231, 66, 32 }, // pt -> pt_Latn_BR
+ { 232, 0, 0 }, { 232, 66, 187 }, // prg -> prg_Latn_PL
+ { 233, 0, 178 }, { 233, 4, 178 }, // pa_PK -> pa_Arab_PK
+ { 233, 4, 0 }, { 233, 4, 178 }, // pa_Arab -> pa_Arab_PK
+ { 233, 0, 0 }, { 233, 41, 110 }, // pa -> pa_Guru_IN
+ { 234, 0, 0 }, { 234, 66, 184 }, // qu -> qu_Latn_PE
+ { 235, 0, 0 }, { 235, 66, 192 }, // ro -> ro_Latn_RO
+ { 236, 0, 0 }, { 236, 66, 226 }, // rm -> rm_Latn_CH
+ { 237, 0, 0 }, { 237, 66, 230 }, // rof -> rof_Latn_TZ
+ { 238, 0, 0 }, { 238, 66, 38 }, // rn -> rn_Latn_BI
+ { 239, 0, 0 }, { 239, 27, 193 }, // ru -> ru_Cyrl_RU
+ { 240, 0, 0 }, { 240, 66, 230 }, // rwk -> rwk_Latn_TZ
+ { 241, 0, 0 }, { 241, 66, 74 }, // ssy -> ssy_Latn_ER
+ { 242, 0, 0 }, { 242, 27, 193 }, // sah -> sah_Cyrl_RU
+ { 243, 0, 0 }, { 243, 66, 124 }, // saq -> saq_Latn_KE
+ { 244, 0, 0 }, { 244, 66, 202 }, // sm -> sm_Latn_WS
+ { 245, 0, 0 }, { 245, 66, 46 }, // sg -> sg_Latn_CF
+ { 246, 0, 0 }, { 246, 66, 230 }, // sbp -> sbp_Latn_TZ
+ { 247, 0, 0 }, { 247, 29, 110 }, // sa -> sa_Deva_IN
+ { 248, 0, 0 }, { 248, 93, 110 }, // sat -> sat_Olck_IN
+ { 249, 0, 0 }, { 249, 66, 117 }, // sc -> sc_Latn_IT
+ { 250, 0, 0 }, { 250, 113, 110 }, // saz -> saz_Saur_IN
+ { 251, 0, 0 }, { 251, 66, 160 }, // seh -> seh_Latn_MZ
+ { 252, 0, 157 }, { 252, 66, 157 }, // sr_ME -> sr_Latn_ME
+ { 252, 0, 192 }, { 252, 66, 192 }, // sr_RO -> sr_Latn_RO
+ { 252, 0, 193 }, { 252, 66, 193 }, // sr_RU -> sr_Latn_RU
+ { 252, 0, 239 }, { 252, 66, 239 }, // sr_TR -> sr_Latn_TR
+ { 252, 0, 0 }, { 252, 27, 207 }, // sr -> sr_Cyrl_RS
+ { 253, 0, 0 }, { 253, 66, 230 }, // ksb -> ksb_Latn_TZ
+ { 254, 0, 0 }, { 254, 66, 261 }, // sn -> sn_Latn_ZW
+ { 255, 0, 0 }, { 255, 141, 50 }, // ii -> ii_Yiii_CN
+ { 256, 0, 0 }, { 256, 66, 117 }, // scn -> scn_Latn_IT
+ { 257, 0, 0 }, { 257, 66, 77 }, // sid -> sid_Latn_ET
+ { 258, 0, 0 }, { 258, 66, 187 }, // szl -> szl_Latn_PL
+ { 259, 0, 110 }, { 259, 29, 110 }, // sd_IN -> sd_Deva_IN
+ { 259, 29, 0 }, { 259, 29, 110 }, // sd_Deva -> sd_Deva_IN
+ { 259, 61, 0 }, { 259, 61, 110 }, // sd_Khoj -> sd_Khoj_IN
+ { 259, 62, 0 }, { 259, 62, 110 }, // sd_Sind -> sd_Sind_IN
+ { 259, 0, 0 }, { 259, 4, 178 }, // sd -> sd_Arab_PK
+ { 260, 0, 0 }, { 260, 119, 221 }, // si -> si_Sinh_LK
+ { 261, 0, 0 }, { 261, 66, 83 }, // sms -> sms_Latn_FI
+ { 262, 0, 0 }, { 262, 66, 212 }, // sk -> sk_Latn_SK
+ { 263, 0, 0 }, { 263, 66, 213 }, // sl -> sl_Latn_SI
+ { 264, 0, 0 }, { 264, 66, 243 }, // xog -> xog_Latn_UG
+ { 265, 0, 0 }, { 265, 66, 215 }, // so -> so_Latn_SO
+ { 266, 0, 0 }, { 266, 4, 112 }, // sdh -> sdh_Arab_IR
+ { 267, 0, 0 }, { 267, 66, 225 }, // sma -> sma_Latn_SE
+ { 268, 0, 0 }, { 268, 66, 216 }, // st -> st_Latn_ZA
+ { 269, 0, 0 }, { 269, 66, 216 }, // nr -> nr_Latn_ZA
+ { 270, 0, 0 }, { 270, 66, 220 }, // es -> es_Latn_ES
+ { 271, 0, 0 }, { 271, 135, 159 }, // zgh -> zgh_Tfng_MA
+ { 272, 0, 0 }, { 272, 66, 111 }, // su -> su_Latn_ID
+ { 273, 0, 0 }, { 273, 66, 230 }, // sw -> sw_Latn_TZ
+ { 274, 0, 0 }, { 274, 66, 216 }, // ss -> ss_Latn_ZA
+ { 275, 0, 0 }, { 275, 66, 225 }, // sv -> sv_Latn_SE
+ { 276, 0, 0 }, { 276, 66, 226 }, // gsw -> gsw_Latn_CH
+ { 277, 0, 0 }, { 277, 123, 113 }, // syr -> syr_Syrc_IQ
+ { 278, 0, 0 }, { 278, 135, 159 }, // shi -> shi_Tfng_MA
+ { 279, 0, 0 }, { 279, 66, 86 }, // ty -> ty_Latn_PF
+ { 280, 0, 0 }, { 280, 127, 255 }, // blt -> blt_Tavt_VN
+ { 281, 0, 0 }, { 281, 66, 124 }, // dav -> dav_Latn_KE
+ { 282, 0, 178 }, { 282, 4, 178 }, // tg_PK -> tg_Arab_PK
+ { 282, 4, 0 }, { 282, 4, 178 }, // tg_Arab -> tg_Arab_PK
+ { 282, 0, 0 }, { 282, 27, 229 }, // tg -> tg_Cyrl_TJ
+ { 283, 0, 0 }, { 283, 129, 110 }, // ta -> ta_Taml_IN
+ { 284, 0, 0 }, { 284, 66, 228 }, // trv -> trv_Latn_TW
+ { 285, 0, 0 }, { 285, 66, 170 }, // twq -> twq_Latn_NE
+ { 286, 0, 0 }, { 286, 27, 193 }, // tt -> tt_Cyrl_RU
+ { 287, 0, 0 }, { 287, 131, 110 }, // te -> te_Telu_IN
+ { 288, 0, 0 }, { 288, 66, 243 }, // teo -> teo_Latn_UG
+ { 289, 0, 0 }, { 289, 133, 231 }, // th -> th_Thai_TH
+ { 290, 0, 0 }, { 290, 134, 50 }, // bo -> bo_Tibt_CN
+ { 291, 0, 0 }, { 291, 33, 74 }, // tig -> tig_Ethi_ER
+ { 292, 0, 0 }, { 292, 33, 77 }, // ti -> ti_Ethi_ET
+ { 293, 0, 0 }, { 293, 66, 234 }, // tkl -> tkl_Latn_TK
+ { 294, 0, 0 }, { 294, 66, 182 }, // tpi -> tpi_Latn_PG
+ { 295, 0, 0 }, { 295, 66, 235 }, // to -> to_Latn_TO
+ { 296, 0, 0 }, { 296, 66, 216 }, // ts -> ts_Latn_ZA
+ { 297, 0, 0 }, { 297, 66, 216 }, // tn -> tn_Latn_ZA
+ { 298, 0, 0 }, { 298, 66, 239 }, // tr -> tr_Latn_TR
+ { 299, 0, 0 }, { 299, 66, 240 }, // tk -> tk_Latn_TM
+ { 300, 0, 0 }, { 300, 66, 242 }, // tvl -> tvl_Latn_TV
+ { 301, 0, 0 }, { 301, 66, 169 }, // kcg -> kcg_Latn_NG
+ { 302, 0, 0 }, { 302, 138, 227 }, // uga -> uga_Ugar_SY
+ { 303, 0, 0 }, { 303, 27, 244 }, // uk -> uk_Cyrl_UA
+ { 304, 0, 0 }, { 304, 66, 91 }, // hsb -> hsb_Latn_DE
+ { 305, 0, 0 }, { 305, 4, 178 }, // ur -> ur_Arab_PK
+ { 306, 0, 123 }, { 306, 27, 123 }, // ug_KZ -> ug_Cyrl_KZ
+ { 306, 0, 156 }, { 306, 27, 156 }, // ug_MN -> ug_Cyrl_MN
+ { 306, 27, 0 }, { 306, 27, 123 }, // ug_Cyrl -> ug_Cyrl_KZ
+ { 306, 0, 0 }, { 306, 4, 50 }, // ug -> ug_Arab_CN
+ { 307, 0, 1 }, { 307, 4, 1 }, // uz_AF -> uz_Arab_AF
+ { 307, 0, 50 }, { 307, 27, 50 }, // uz_CN -> uz_Cyrl_CN
+ { 307, 4, 0 }, { 307, 4, 1 }, // uz_Arab -> uz_Arab_AF
+ { 307, 0, 0 }, { 307, 66, 251 }, // uz -> uz_Latn_UZ
+ { 308, 0, 0 }, { 308, 139, 134 }, // vai -> vai_Vaii_LR
+ { 309, 0, 0 }, { 309, 66, 216 }, // ve -> ve_Latn_ZA
+ { 310, 0, 0 }, { 310, 66, 255 }, // vi -> vi_Latn_VN
+ { 311, 0, 0 }, { 311, 66, 258 }, // vo -> vo_Latn_001
+ { 312, 0, 0 }, { 312, 66, 230 }, // vun -> vun_Latn_TZ
+ { 313, 0, 0 }, { 313, 66, 23 }, // wa -> wa_Latn_BE
+ { 314, 0, 0 }, { 314, 66, 226 }, // wae -> wae_Latn_CH
+ { 315, 0, 0 }, { 315, 66, 15 }, // wbp -> wbp_Latn_AU
+ { 316, 0, 0 }, { 316, 66, 246 }, // cy -> cy_Latn_GB
+ { 317, 0, 0 }, { 317, 4, 178 }, // bgn -> bgn_Arab_PK
+ { 318, 0, 0 }, { 318, 66, 165 }, // fy -> fy_Latn_NL
+ { 319, 0, 0 }, { 319, 33, 77 }, // wal -> wal_Ethi_ET
+ { 320, 0, 0 }, { 320, 66, 206 }, // wo -> wo_Latn_SN
+ { 321, 0, 0 }, { 321, 66, 216 }, // xh -> xh_Latn_ZA
+ { 322, 0, 0 }, { 322, 66, 40 }, // yav -> yav_Latn_CM
+ { 323, 0, 0 }, { 323, 47, 244 }, // yi -> yi_Hebr_UA
+ { 324, 0, 0 }, { 324, 66, 169 }, // yo -> yo_Latn_NG
+ { 325, 0, 0 }, { 325, 66, 170 }, // dje -> dje_Latn_NE
+ { 326, 0, 0 }, { 326, 66, 50 }, // za -> za_Latn_CN
+ { 327, 0, 0 }, { 327, 66, 216 }, // zu -> zu_Latn_ZA
+ { 328, 0, 0 }, { 328, 66, 32 }, // kgp -> kgp_Latn_BR
+ { 329, 0, 0 }, { 329, 66, 32 }, // yrl -> yrl_Latn_BR
+ { 330, 0, 0 }, { 330, 29, 110 }, // bgc -> bgc_Deva_IN
+ { 331, 0, 0 }, { 331, 66, 91 }, // frr -> frr_Latn_DE
+ { 332, 0, 0 }, { 332, 29, 110 }, // raj -> raj_Deva_IN
+ { 333, 0, 0 }, { 333, 27, 193 }, // mdf -> mdf_Cyrl_RU
+ { 334, 0, 0 }, { 334, 66, 258 }, // tok -> tok_Latn_001
+ { 335, 0, 0 }, { 335, 66, 214 }, // pis -> pis_Latn_SB
+ { 336, 0, 0 }, { 336, 66, 169 }, // ann -> ann_Latn_NG
+ { 337, 0, 0 }, { 337, 4, 178 }, // bal -> bal_Arab_PK
+ { 338, 0, 0 }, { 338, 66, 117 }, // lij -> lij_Latn_IT
+ { 339, 0, 0 }, { 339, 142, 161 }, // rhg -> rhg_Rohg_MM
+ { 340, 0, 0 }, { 340, 4, 178 }, // trw -> trw_Arab_PK
+ { 341, 0, 0 }, { 341, 66, 25 }, // blo -> blo_Latn_BJ
+ { 342, 0, 0 }, { 342, 29, 110 }, // xnr -> xnr_Deva_IN
+ { 343, 0, 0 }, { 343, 66, 117 }, // vec -> vec_Latn_IT
+ { 0, 4, 1 }, { 228, 4, 1 }, // und_Arab_AF -> fa_Arab_AF
+ { 0, 66, 1 }, { 299, 66, 1 }, // und_Latn_AF -> tk_Latn_AF
+ { 0, 0, 1 }, { 228, 4, 1 }, // und_AF -> fa_Arab_AF
+ { 0, 66, 2 }, { 275, 66, 2 }, // und_Latn_AX -> sv_Latn_AX
+ { 0, 0, 2 }, { 275, 66, 2 }, // und_AX -> sv_Latn_AX
+ { 0, 27, 3 }, { 169, 27, 3 }, // und_Cyrl_AL -> mk_Cyrl_AL
+ { 0, 66, 3 }, { 9, 66, 3 }, // und_Latn_AL -> sq_Latn_AL
+ { 0, 0, 3 }, { 9, 66, 3 }, // und_AL -> sq_Latn_AL
+ { 0, 66, 4 }, { 85, 66, 4 }, // und_Latn_DZ -> fr_Latn_DZ
+ { 0, 0, 4 }, { 14, 4, 4 }, // und_DZ -> ar_Arab_DZ
+ { 0, 66, 5 }, { 244, 66, 5 }, // und_Latn_AS -> sm_Latn_AS
+ { 0, 0, 5 }, { 244, 66, 5 }, // und_AS -> sm_Latn_AS
+ { 0, 66, 6 }, { 48, 66, 6 }, // und_Latn_AD -> ca_Latn_AD
+ { 0, 0, 6 }, { 48, 66, 6 }, // und_AD -> ca_Latn_AD
+ { 0, 66, 7 }, { 231, 66, 7 }, // und_Latn_AO -> pt_Latn_AO
+ { 0, 0, 7 }, { 231, 66, 7 }, // und_AO -> pt_Latn_AO
+ { 0, 0, 8 }, { 75, 66, 8 }, // und_AI -> en_Latn_AI
+ { 0, 0, 9 }, { 75, 66, 9 }, // und_AQ -> en_Latn_AQ
+ { 0, 0, 10 }, { 75, 66, 10 }, // und_AG -> en_Latn_AG
+ { 0, 66, 11 }, { 270, 66, 11 }, // und_Latn_AR -> es_Latn_AR
+ { 0, 0, 11 }, { 270, 66, 11 }, // und_AR -> es_Latn_AR
+ { 0, 66, 12 }, { 148, 66, 12 }, // und_Latn_AM -> ku_Latn_AM
+ { 0, 0, 12 }, { 17, 5, 12 }, // und_AM -> hy_Armn_AM
+ { 0, 66, 13 }, { 72, 66, 13 }, // und_Latn_AW -> nl_Latn_AW
+ { 0, 0, 13 }, { 72, 66, 13 }, // und_AW -> nl_Latn_AW
+ { 0, 0, 14 }, { 75, 66, 14 }, // und_AC -> en_Latn_AC
+ { 0, 0, 15 }, { 75, 66, 15 }, // und_AU -> en_Latn_AU
+ { 0, 66, 16 }, { 94, 66, 16 }, // und_Latn_AT -> de_Latn_AT
+ { 0, 0, 16 }, { 94, 66, 16 }, // und_AT -> de_Latn_AT
+ { 0, 66, 17 }, { 25, 66, 17 }, // und_Latn_AZ -> az_Latn_AZ
+ { 0, 0, 17 }, { 25, 66, 17 }, // und_AZ -> az_Latn_AZ
+ { 0, 0, 18 }, { 75, 66, 18 }, // und_BS -> en_Latn_BS
+ { 0, 0, 19 }, { 14, 4, 19 }, // und_BH -> ar_Arab_BH
+ { 0, 0, 20 }, { 30, 9, 20 }, // und_BD -> bn_Beng_BD
+ { 0, 0, 21 }, { 75, 66, 21 }, // und_BB -> en_Latn_BB
+ { 0, 27, 22 }, { 35, 27, 22 }, // und_Cyrl_BY -> be_Cyrl_BY
+ { 0, 0, 22 }, { 35, 27, 22 }, // und_BY -> be_Cyrl_BY
+ { 0, 66, 23 }, { 72, 66, 23 }, // und_Latn_BE -> nl_Latn_BE
+ { 0, 0, 23 }, { 72, 66, 23 }, // und_BE -> nl_Latn_BE
+ { 0, 0, 24 }, { 75, 66, 24 }, // und_BZ -> en_Latn_BZ
+ { 0, 66, 25 }, { 85, 66, 25 }, // und_Latn_BJ -> fr_Latn_BJ
+ { 0, 0, 25 }, { 85, 66, 25 }, // und_BJ -> fr_Latn_BJ
+ { 0, 0, 26 }, { 75, 66, 26 }, // und_BM -> en_Latn_BM
+ { 0, 29, 27 }, { 199, 29, 27 }, // und_Deva_BT -> ne_Deva_BT
+ { 0, 134, 27 }, { 73, 134, 27 }, // und_Tibt_BT -> dz_Tibt_BT
+ { 0, 0, 27 }, { 73, 134, 27 }, // und_BT -> dz_Tibt_BT
+ { 0, 66, 28 }, { 270, 66, 28 }, // und_Latn_BO -> es_Latn_BO
+ { 0, 0, 28 }, { 270, 66, 28 }, // und_BO -> es_Latn_BO
+ { 0, 27, 29 }, { 252, 27, 29 }, // und_Cyrl_BA -> sr_Cyrl_BA
+ { 0, 66, 29 }, { 42, 66, 29 }, // und_Latn_BA -> bs_Latn_BA
+ { 0, 0, 29 }, { 42, 66, 29 }, // und_BA -> bs_Latn_BA
+ { 0, 0, 30 }, { 75, 66, 30 }, // und_BW -> en_Latn_BW
+ { 0, 0, 31 }, { 75, 66, 31 }, // und_BV -> en_Latn_BV
+ { 0, 66, 32 }, { 231, 66, 32 }, // und_Latn_BR -> pt_Latn_BR
+ { 0, 0, 32 }, { 231, 66, 32 }, // und_BR -> pt_Latn_BR
+ { 0, 0, 33 }, { 75, 66, 33 }, // und_IO -> en_Latn_IO
+ { 0, 0, 34 }, { 75, 66, 34 }, // und_VG -> en_Latn_VG
+ { 0, 66, 35 }, { 176, 66, 35 }, // und_Latn_BN -> ms_Latn_BN
+ { 0, 0, 35 }, { 176, 66, 35 }, // und_BN -> ms_Latn_BN
+ { 0, 27, 36 }, { 45, 27, 36 }, // und_Cyrl_BG -> bg_Cyrl_BG
+ { 0, 0, 36 }, { 45, 27, 36 }, // und_BG -> bg_Cyrl_BG
+ { 0, 66, 37 }, { 85, 66, 37 }, // und_Latn_BF -> fr_Latn_BF
+ { 0, 0, 37 }, { 85, 66, 37 }, // und_BF -> fr_Latn_BF
+ { 0, 66, 38 }, { 238, 66, 38 }, // und_Latn_BI -> rn_Latn_BI
+ { 0, 0, 38 }, { 238, 66, 38 }, // und_BI -> rn_Latn_BI
+ { 0, 0, 39 }, { 135, 60, 39 }, // und_KH -> km_Khmr_KH
+ { 0, 66, 40 }, { 85, 66, 40 }, // und_Latn_CM -> fr_Latn_CM
+ { 0, 0, 40 }, { 85, 66, 40 }, // und_CM -> fr_Latn_CM
+ { 0, 137, 41 }, { 47, 137, 41 }, // und_Hant_CA -> yue_Hant_CA
+ { 0, 0, 41 }, { 75, 66, 41 }, // und_CA -> en_Latn_CA
+ { 0, 66, 42 }, { 270, 66, 42 }, // und_Latn_IC -> es_Latn_IC
+ { 0, 0, 42 }, { 270, 66, 42 }, // und_IC -> es_Latn_IC
+ { 0, 66, 43 }, { 231, 66, 43 }, // und_Latn_CV -> pt_Latn_CV
+ { 0, 0, 43 }, { 231, 66, 43 }, // und_CV -> pt_Latn_CV
+ { 0, 66, 44 }, { 226, 66, 44 }, // und_Latn_BQ -> pap_Latn_BQ
+ { 0, 0, 44 }, { 226, 66, 44 }, // und_BQ -> pap_Latn_BQ
+ { 0, 0, 45 }, { 75, 66, 45 }, // und_KY -> en_Latn_KY
+ { 0, 66, 46 }, { 85, 66, 46 }, // und_Latn_CF -> fr_Latn_CF
+ { 0, 0, 46 }, { 85, 66, 46 }, // und_CF -> fr_Latn_CF
+ { 0, 66, 47 }, { 270, 66, 47 }, // und_Latn_EA -> es_Latn_EA
+ { 0, 0, 47 }, { 270, 66, 47 }, // und_EA -> es_Latn_EA
+ { 0, 66, 48 }, { 85, 66, 48 }, // und_Latn_TD -> fr_Latn_TD
+ { 0, 0, 48 }, { 85, 66, 48 }, // und_TD -> fr_Latn_TD
+ { 0, 66, 49 }, { 270, 66, 49 }, // und_Latn_CL -> es_Latn_CL
+ { 0, 0, 49 }, { 270, 66, 49 }, // und_CL -> es_Latn_CL
+ { 0, 4, 50 }, { 306, 4, 50 }, // und_Arab_CN -> ug_Arab_CN
+ { 0, 66, 50 }, { 326, 66, 50 }, // und_Latn_CN -> za_Latn_CN
+ { 0, 0, 50 }, { 58, 118, 50 }, // und_CN -> zh_Hans_CN
+ { 0, 0, 51 }, { 75, 66, 51 }, // und_CX -> en_Latn_CX
+ { 0, 0, 52 }, { 75, 66, 52 }, // und_CP -> en_Latn_CP
+ { 0, 4, 53 }, { 176, 4, 53 }, // und_Arab_CC -> ms_Arab_CC
+ { 0, 0, 53 }, { 176, 4, 53 }, // und_CC -> ms_Arab_CC
+ { 0, 66, 54 }, { 270, 66, 54 }, // und_Latn_CO -> es_Latn_CO
+ { 0, 0, 54 }, { 270, 66, 54 }, // und_CO -> es_Latn_CO
+ { 0, 66, 55 }, { 85, 66, 55 }, // und_Latn_KM -> fr_Latn_KM
+ { 0, 0, 55 }, { 14, 4, 55 }, // und_KM -> ar_Arab_KM
+ { 0, 66, 56 }, { 85, 66, 56 }, // und_Latn_CG -> fr_Latn_CG
+ { 0, 0, 56 }, { 85, 66, 56 }, // und_CG -> fr_Latn_CG
+ { 0, 66, 57 }, { 273, 66, 57 }, // und_Latn_CD -> sw_Latn_CD
+ { 0, 0, 57 }, { 273, 66, 57 }, // und_CD -> sw_Latn_CD
+ { 0, 0, 58 }, { 75, 66, 58 }, // und_CK -> en_Latn_CK
+ { 0, 66, 59 }, { 270, 66, 59 }, // und_Latn_CR -> es_Latn_CR
+ { 0, 0, 59 }, { 270, 66, 59 }, // und_CR -> es_Latn_CR
+ { 0, 66, 60 }, { 66, 66, 60 }, // und_Latn_HR -> hr_Latn_HR
+ { 0, 0, 60 }, { 66, 66, 60 }, // und_HR -> hr_Latn_HR
+ { 0, 66, 61 }, { 270, 66, 61 }, // und_Latn_CU -> es_Latn_CU
+ { 0, 0, 61 }, { 270, 66, 61 }, // und_CU -> es_Latn_CU
+ { 0, 66, 62 }, { 226, 66, 62 }, // und_Latn_CW -> pap_Latn_CW
+ { 0, 0, 62 }, { 226, 66, 62 }, // und_CW -> pap_Latn_CW
+ { 0, 66, 63 }, { 298, 66, 63 }, // und_Latn_CY -> tr_Latn_CY
+ { 0, 0, 63 }, { 96, 39, 63 }, // und_CY -> el_Grek_CY
+ { 0, 66, 64 }, { 67, 66, 64 }, // und_Latn_CZ -> cs_Latn_CZ
+ { 0, 0, 64 }, { 67, 66, 64 }, // und_CZ -> cs_Latn_CZ
+ { 0, 66, 65 }, { 68, 66, 65 }, // und_Latn_DK -> da_Latn_DK
+ { 0, 0, 65 }, { 68, 66, 65 }, // und_DK -> da_Latn_DK
+ { 0, 0, 66 }, { 75, 66, 66 }, // und_DG -> en_Latn_DG
+ { 0, 66, 67 }, { 3, 66, 67 }, // und_Latn_DJ -> aa_Latn_DJ
+ { 0, 0, 67 }, { 3, 66, 67 }, // und_DJ -> aa_Latn_DJ
+ { 0, 0, 68 }, { 75, 66, 68 }, // und_DM -> en_Latn_DM
+ { 0, 66, 69 }, { 270, 66, 69 }, // und_Latn_DO -> es_Latn_DO
+ { 0, 0, 69 }, { 270, 66, 69 }, // und_DO -> es_Latn_DO
+ { 0, 66, 70 }, { 270, 66, 70 }, // und_Latn_EC -> es_Latn_EC
+ { 0, 0, 70 }, { 270, 66, 70 }, // und_EC -> es_Latn_EC
+ { 0, 0, 71 }, { 14, 4, 71 }, // und_EG -> ar_Arab_EG
+ { 0, 66, 72 }, { 270, 66, 72 }, // und_Latn_SV -> es_Latn_SV
+ { 0, 0, 72 }, { 270, 66, 72 }, // und_SV -> es_Latn_SV
+ { 0, 66, 73 }, { 270, 66, 73 }, // und_Latn_GQ -> es_Latn_GQ
+ { 0, 0, 73 }, { 270, 66, 73 }, // und_GQ -> es_Latn_GQ
+ { 0, 33, 74 }, { 292, 33, 74 }, // und_Ethi_ER -> ti_Ethi_ER
+ { 0, 0, 74 }, { 292, 33, 74 }, // und_ER -> ti_Ethi_ER
+ { 0, 66, 75 }, { 78, 66, 75 }, // und_Latn_EE -> et_Latn_EE
+ { 0, 0, 75 }, { 78, 66, 75 }, // und_EE -> et_Latn_EE
+ { 0, 0, 76 }, { 75, 66, 76 }, // und_SZ -> en_Latn_SZ
+ { 0, 66, 77 }, { 75, 66, 77 }, // und_Latn_ET -> en_Latn_ET
+ { 0, 0, 77 }, { 11, 33, 77 }, // und_ET -> am_Ethi_ET
+ { 0, 0, 80 }, { 75, 66, 80 }, // und_FK -> en_Latn_FK
+ { 0, 66, 81 }, { 81, 66, 81 }, // und_Latn_FO -> fo_Latn_FO
+ { 0, 0, 81 }, { 81, 66, 81 }, // und_FO -> fo_Latn_FO
+ { 0, 0, 82 }, { 75, 66, 82 }, // und_FJ -> en_Latn_FJ
+ { 0, 66, 83 }, { 84, 66, 83 }, // und_Latn_FI -> fi_Latn_FI
+ { 0, 0, 83 }, { 84, 66, 83 }, // und_FI -> fi_Latn_FI
+ { 0, 66, 84 }, { 85, 66, 84 }, // und_Latn_FR -> fr_Latn_FR
+ { 0, 0, 84 }, { 85, 66, 84 }, // und_FR -> fr_Latn_FR
+ { 0, 66, 85 }, { 85, 66, 85 }, // und_Latn_GF -> fr_Latn_GF
+ { 0, 0, 85 }, { 85, 66, 85 }, // und_GF -> fr_Latn_GF
+ { 0, 66, 86 }, { 85, 66, 86 }, // und_Latn_PF -> fr_Latn_PF
+ { 0, 0, 86 }, { 85, 66, 86 }, // und_PF -> fr_Latn_PF
+ { 0, 66, 87 }, { 85, 66, 87 }, // und_Latn_TF -> fr_Latn_TF
+ { 0, 0, 87 }, { 85, 66, 87 }, // und_TF -> fr_Latn_TF
+ { 0, 66, 88 }, { 85, 66, 88 }, // und_Latn_GA -> fr_Latn_GA
+ { 0, 0, 88 }, { 85, 66, 88 }, // und_GA -> fr_Latn_GA
+ { 0, 0, 89 }, { 75, 66, 89 }, // und_GM -> en_Latn_GM
+ { 0, 27, 90 }, { 2, 27, 90 }, // und_Cyrl_GE -> ab_Cyrl_GE
+ { 0, 66, 90 }, { 148, 66, 90 }, // und_Latn_GE -> ku_Latn_GE
+ { 0, 0, 90 }, { 93, 35, 90 }, // und_GE -> ka_Geor_GE
+ { 0, 66, 91 }, { 94, 66, 91 }, // und_Latn_DE -> de_Latn_DE
+ { 0, 0, 91 }, { 94, 66, 91 }, // und_DE -> de_Latn_DE
+ { 0, 66, 92 }, { 6, 66, 92 }, // und_Latn_GH -> ak_Latn_GH
+ { 0, 0, 92 }, { 6, 66, 92 }, // und_GH -> ak_Latn_GH
+ { 0, 0, 93 }, { 75, 66, 93 }, // und_GI -> en_Latn_GI
+ { 0, 27, 94 }, { 169, 27, 94 }, // und_Cyrl_GR -> mk_Cyrl_GR
+ { 0, 0, 94 }, { 96, 39, 94 }, // und_GR -> el_Grek_GR
+ { 0, 66, 95 }, { 127, 66, 95 }, // und_Latn_GL -> kl_Latn_GL
+ { 0, 0, 95 }, { 127, 66, 95 }, // und_GL -> kl_Latn_GL
+ { 0, 0, 96 }, { 75, 66, 96 }, // und_GD -> en_Latn_GD
+ { 0, 66, 97 }, { 85, 66, 97 }, // und_Latn_GP -> fr_Latn_GP
+ { 0, 0, 97 }, { 85, 66, 97 }, // und_GP -> fr_Latn_GP
+ { 0, 0, 98 }, { 75, 66, 98 }, // und_GU -> en_Latn_GU
+ { 0, 66, 99 }, { 270, 66, 99 }, // und_Latn_GT -> es_Latn_GT
+ { 0, 0, 99 }, { 270, 66, 99 }, // und_GT -> es_Latn_GT
+ { 0, 0, 100 }, { 75, 66, 100 }, // und_GG -> en_Latn_GG
+ { 0, 66, 101 }, { 231, 66, 101 }, // und_Latn_GW -> pt_Latn_GW
+ { 0, 0, 101 }, { 231, 66, 101 }, // und_GW -> pt_Latn_GW
+ { 0, 66, 102 }, { 85, 66, 102 }, // und_Latn_GN -> fr_Latn_GN
+ { 0, 0, 102 }, { 85, 66, 102 }, // und_GN -> fr_Latn_GN
+ { 0, 0, 103 }, { 75, 66, 103 }, // und_GY -> en_Latn_GY
+ { 0, 66, 104 }, { 100, 66, 104 }, // und_Latn_HT -> ht_Latn_HT
+ { 0, 0, 104 }, { 100, 66, 104 }, // und_HT -> ht_Latn_HT
+ { 0, 0, 105 }, { 75, 66, 105 }, // und_HM -> en_Latn_HM
+ { 0, 66, 106 }, { 270, 66, 106 }, // und_Latn_HN -> es_Latn_HN
+ { 0, 0, 106 }, { 270, 66, 106 }, // und_HN -> es_Latn_HN
+ { 0, 0, 107 }, { 58, 137, 107 }, // und_HK -> zh_Hant_HK
+ { 0, 66, 108 }, { 107, 66, 108 }, // und_Latn_HU -> hu_Latn_HU
+ { 0, 0, 108 }, { 107, 66, 108 }, // und_HU -> hu_Latn_HU
+ { 0, 66, 109 }, { 108, 66, 109 }, // und_Latn_IS -> is_Latn_IS
+ { 0, 0, 109 }, { 108, 66, 109 }, // und_IS -> is_Latn_IS
+ { 0, 4, 110 }, { 305, 4, 110 }, // und_Arab_IN -> ur_Arab_IN
+ { 0, 0, 110 }, { 105, 29, 110 }, // und_IN -> hi_Deva_IN
+ { 0, 4, 111 }, { 176, 4, 111 }, // und_Arab_ID -> ms_Arab_ID
+ { 0, 66, 111 }, { 112, 66, 111 }, // und_Latn_ID -> id_Latn_ID
+ { 0, 0, 111 }, { 112, 66, 111 }, // und_ID -> id_Latn_ID
+ { 0, 4, 112 }, { 228, 4, 112 }, // und_Arab_IR -> fa_Arab_IR
+ { 0, 66, 112 }, { 299, 66, 112 }, // und_Latn_IR -> tk_Latn_IR
+ { 0, 0, 112 }, { 228, 4, 112 }, // und_IR -> fa_Arab_IR
+ { 0, 0, 113 }, { 14, 4, 113 }, // und_IQ -> ar_Arab_IQ
+ { 0, 0, 114 }, { 75, 66, 114 }, // und_IE -> en_Latn_IE
+ { 0, 0, 115 }, { 75, 66, 115 }, // und_IM -> en_Latn_IM
+ { 0, 0, 116 }, { 103, 47, 116 }, // und_IL -> he_Hebr_IL
+ { 0, 66, 117 }, { 119, 66, 117 }, // und_Latn_IT -> it_Latn_IT
+ { 0, 0, 117 }, { 119, 66, 117 }, // und_IT -> it_Latn_IT
+ { 0, 66, 118 }, { 85, 66, 118 }, // und_Latn_CI -> fr_Latn_CI
+ { 0, 0, 118 }, { 85, 66, 118 }, // und_CI -> fr_Latn_CI
+ { 0, 0, 119 }, { 75, 66, 119 }, // und_JM -> en_Latn_JM
+ { 0, 0, 120 }, { 120, 53, 120 }, // und_JP -> ja_Jpan_JP
+ { 0, 0, 121 }, { 75, 66, 121 }, // und_JE -> en_Latn_JE
+ { 0, 0, 122 }, { 14, 4, 122 }, // und_JO -> ar_Arab_JO
+ { 0, 0, 123 }, { 239, 27, 123 }, // und_KZ -> ru_Cyrl_KZ
+ { 0, 66, 124 }, { 273, 66, 124 }, // und_Latn_KE -> sw_Latn_KE
+ { 0, 0, 124 }, { 273, 66, 124 }, // und_KE -> sw_Latn_KE
+ { 0, 0, 125 }, { 75, 66, 125 }, // und_KI -> en_Latn_KI
+ { 0, 27, 126 }, { 252, 27, 126 }, // und_Cyrl_XK -> sr_Cyrl_XK
+ { 0, 66, 126 }, { 9, 66, 126 }, // und_Latn_XK -> sq_Latn_XK
+ { 0, 0, 126 }, { 9, 66, 126 }, // und_XK -> sq_Latn_XK
+ { 0, 0, 127 }, { 14, 4, 127 }, // und_KW -> ar_Arab_KW
+ { 0, 27, 128 }, { 150, 27, 128 }, // und_Cyrl_KG -> ky_Cyrl_KG
+ { 0, 0, 128 }, { 150, 27, 128 }, // und_KG -> ky_Cyrl_KG
+ { 0, 0, 129 }, { 153, 65, 129 }, // und_LA -> lo_Laoo_LA
+ { 0, 66, 130 }, { 270, 66, 130 }, // und_Latn_419 -> es_Latn_419
+ { 0, 0, 130 }, { 270, 66, 130 }, // und_419 -> es_Latn_419
+ { 0, 66, 131 }, { 155, 66, 131 }, // und_Latn_LV -> lv_Latn_LV
+ { 0, 0, 131 }, { 155, 66, 131 }, // und_LV -> lv_Latn_LV
+ { 0, 0, 132 }, { 14, 4, 132 }, // und_LB -> ar_Arab_LB
+ { 0, 66, 133 }, { 268, 66, 133 }, // und_Latn_LS -> st_Latn_LS
+ { 0, 0, 133 }, { 268, 66, 133 }, // und_LS -> st_Latn_LS
+ { 0, 0, 134 }, { 75, 66, 134 }, // und_LR -> en_Latn_LR
+ { 0, 0, 135 }, { 14, 4, 135 }, // und_LY -> ar_Arab_LY
+ { 0, 66, 136 }, { 94, 66, 136 }, // und_Latn_LI -> de_Latn_LI
+ { 0, 0, 136 }, { 94, 66, 136 }, // und_LI -> de_Latn_LI
+ { 0, 66, 137 }, { 160, 66, 137 }, // und_Latn_LT -> lt_Latn_LT
+ { 0, 0, 137 }, { 160, 66, 137 }, // und_LT -> lt_Latn_LT
+ { 0, 66, 138 }, { 85, 66, 138 }, // und_Latn_LU -> fr_Latn_LU
+ { 0, 0, 138 }, { 85, 66, 138 }, // und_LU -> fr_Latn_LU
+ { 0, 66, 139 }, { 231, 66, 139 }, // und_Latn_MO -> pt_Latn_MO
+ { 0, 0, 139 }, { 58, 137, 139 }, // und_MO -> zh_Hant_MO
+ { 0, 27, 140 }, { 169, 27, 140 }, // und_Cyrl_MK -> mk_Cyrl_MK
+ { 0, 66, 140 }, { 9, 66, 140 }, // und_Latn_MK -> sq_Latn_MK
+ { 0, 0, 140 }, { 169, 27, 140 }, // und_MK -> mk_Cyrl_MK
+ { 0, 66, 141 }, { 174, 66, 141 }, // und_Latn_MG -> mg_Latn_MG
+ { 0, 0, 141 }, { 174, 66, 141 }, // und_MG -> mg_Latn_MG
+ { 0, 0, 142 }, { 75, 66, 142 }, // und_MW -> en_Latn_MW
+ { 0, 66, 143 }, { 176, 66, 143 }, // und_Latn_MY -> ms_Latn_MY
+ { 0, 0, 143 }, { 176, 66, 143 }, // und_MY -> ms_Latn_MY
+ { 0, 0, 144 }, { 69, 132, 144 }, // und_MV -> dv_Thaa_MV
+ { 0, 66, 145 }, { 28, 66, 145 }, // und_Latn_ML -> bm_Latn_ML
+ { 0, 0, 145 }, { 28, 66, 145 }, // und_ML -> bm_Latn_ML
+ { 0, 66, 146 }, { 177, 66, 146 }, // und_Latn_MT -> mt_Latn_MT
+ { 0, 0, 146 }, { 177, 66, 146 }, // und_MT -> mt_Latn_MT
+ { 0, 0, 147 }, { 75, 66, 147 }, // und_MH -> en_Latn_MH
+ { 0, 66, 148 }, { 85, 66, 148 }, // und_Latn_MQ -> fr_Latn_MQ
+ { 0, 0, 148 }, { 85, 66, 148 }, // und_MQ -> fr_Latn_MQ
+ { 0, 66, 149 }, { 85, 66, 149 }, // und_Latn_MR -> fr_Latn_MR
+ { 0, 0, 149 }, { 14, 4, 149 }, // und_MR -> ar_Arab_MR
+ { 0, 4, 150 }, { 305, 4, 150 }, // und_Arab_MU -> ur_Arab_MU
+ { 0, 29, 150 }, { 38, 29, 150 }, // und_Deva_MU -> bho_Deva_MU
+ { 0, 66, 150 }, { 192, 66, 150 }, // und_Latn_MU -> mfe_Latn_MU
+ { 0, 0, 150 }, { 192, 66, 150 }, // und_MU -> mfe_Latn_MU
+ { 0, 66, 151 }, { 85, 66, 151 }, // und_Latn_YT -> fr_Latn_YT
+ { 0, 0, 151 }, { 85, 66, 151 }, // und_YT -> fr_Latn_YT
+ { 0, 66, 152 }, { 270, 66, 152 }, // und_Latn_MX -> es_Latn_MX
+ { 0, 0, 152 }, { 270, 66, 152 }, // und_MX -> es_Latn_MX
+ { 0, 0, 153 }, { 75, 66, 153 }, // und_FM -> en_Latn_FM
+ { 0, 27, 154 }, { 303, 27, 154 }, // und_Cyrl_MD -> uk_Cyrl_MD
+ { 0, 66, 154 }, { 235, 66, 154 }, // und_Latn_MD -> ro_Latn_MD
+ { 0, 0, 154 }, { 235, 66, 154 }, // und_MD -> ro_Latn_MD
+ { 0, 66, 155 }, { 85, 66, 155 }, // und_Latn_MC -> fr_Latn_MC
+ { 0, 0, 155 }, { 85, 66, 155 }, // und_MC -> fr_Latn_MC
+ { 0, 4, 156 }, { 133, 4, 156 }, // und_Arab_MN -> kk_Arab_MN
+ { 0, 27, 156 }, { 191, 27, 156 }, // und_Cyrl_MN -> mn_Cyrl_MN
+ { 0, 0, 156 }, { 191, 27, 156 }, // und_MN -> mn_Cyrl_MN
+ { 0, 66, 157 }, { 252, 66, 157 }, // und_Latn_ME -> sr_Latn_ME
+ { 0, 0, 157 }, { 252, 66, 157 }, // und_ME -> sr_Latn_ME
+ { 0, 0, 158 }, { 75, 66, 158 }, // und_MS -> en_Latn_MS
+ { 0, 66, 159 }, { 85, 66, 159 }, // und_Latn_MA -> fr_Latn_MA
+ { 0, 0, 159 }, { 14, 4, 159 }, // und_MA -> ar_Arab_MA
+ { 0, 66, 160 }, { 231, 66, 160 }, // und_Latn_MZ -> pt_Latn_MZ
+ { 0, 0, 160 }, { 231, 66, 160 }, // und_MZ -> pt_Latn_MZ
+ { 0, 4, 161 }, { 339, 4, 161 }, // und_Arab_MM -> rhg_Arab_MM
+ { 0, 0, 161 }, { 46, 86, 161 }, // und_MM -> my_Mymr_MM
+ { 0, 66, 162 }, { 4, 66, 162 }, // und_Latn_NA -> af_Latn_NA
+ { 0, 0, 162 }, { 4, 66, 162 }, // und_NA -> af_Latn_NA
+ { 0, 0, 163 }, { 75, 66, 163 }, // und_NR -> en_Latn_NR
+ { 0, 29, 164 }, { 199, 29, 164 }, // und_Deva_NP -> ne_Deva_NP
+ { 0, 0, 164 }, { 199, 29, 164 }, // und_NP -> ne_Deva_NP
+ { 0, 66, 165 }, { 72, 66, 165 }, // und_Latn_NL -> nl_Latn_NL
+ { 0, 0, 165 }, { 72, 66, 165 }, // und_NL -> nl_Latn_NL
+ { 0, 66, 166 }, { 85, 66, 166 }, // und_Latn_NC -> fr_Latn_NC
+ { 0, 0, 166 }, { 85, 66, 166 }, // und_NC -> fr_Latn_NC
+ { 0, 0, 167 }, { 75, 66, 167 }, // und_NZ -> en_Latn_NZ
+ { 0, 66, 168 }, { 270, 66, 168 }, // und_Latn_NI -> es_Latn_NI
+ { 0, 0, 168 }, { 270, 66, 168 }, // und_NI -> es_Latn_NI
+ { 0, 4, 169 }, { 101, 4, 169 }, // und_Arab_NG -> ha_Arab_NG
+ { 0, 0, 169 }, { 75, 66, 169 }, // und_NG -> en_Latn_NG
+ { 0, 66, 170 }, { 101, 66, 170 }, // und_Latn_NE -> ha_Latn_NE
+ { 0, 0, 170 }, { 101, 66, 170 }, // und_NE -> ha_Latn_NE
+ { 0, 0, 171 }, { 75, 66, 171 }, // und_NU -> en_Latn_NU
+ { 0, 0, 172 }, { 75, 66, 172 }, // und_NF -> en_Latn_NF
+ { 0, 0, 173 }, { 75, 66, 173 }, // und_MP -> en_Latn_MP
+ { 0, 0, 174 }, { 142, 63, 174 }, // und_KP -> ko_Kore_KP
+ { 0, 66, 175 }, { 209, 66, 175 }, // und_Latn_NO -> nb_Latn_NO
+ { 0, 0, 175 }, { 209, 66, 175 }, // und_NO -> nb_Latn_NO
+ { 0, 0, 176 }, { 14, 4, 176 }, // und_OM -> ar_Arab_OM
+ { 0, 4, 178 }, { 305, 4, 178 }, // und_Arab_PK -> ur_Arab_PK
+ { 0, 0, 178 }, { 305, 4, 178 }, // und_PK -> ur_Arab_PK
+ { 0, 66, 179 }, { 224, 66, 179 }, // und_Latn_PW -> pau_Latn_PW
+ { 0, 0, 179 }, { 224, 66, 179 }, // und_PW -> pau_Latn_PW
+ { 0, 0, 180 }, { 14, 4, 180 }, // und_PS -> ar_Arab_PS
+ { 0, 66, 181 }, { 270, 66, 181 }, // und_Latn_PA -> es_Latn_PA
+ { 0, 0, 181 }, { 270, 66, 181 }, // und_PA -> es_Latn_PA
+ { 0, 66, 182 }, { 294, 66, 182 }, // und_Latn_PG -> tpi_Latn_PG
+ { 0, 0, 182 }, { 294, 66, 182 }, // und_PG -> tpi_Latn_PG
+ { 0, 66, 183 }, { 97, 66, 183 }, // und_Latn_PY -> gn_Latn_PY
+ { 0, 0, 183 }, { 97, 66, 183 }, // und_PY -> gn_Latn_PY
+ { 0, 66, 184 }, { 270, 66, 184 }, // und_Latn_PE -> es_Latn_PE
+ { 0, 0, 184 }, { 270, 66, 184 }, // und_PE -> es_Latn_PE
+ { 0, 66, 185 }, { 83, 66, 185 }, // und_Latn_PH -> fil_Latn_PH
+ { 0, 0, 185 }, { 83, 66, 185 }, // und_PH -> fil_Latn_PH
+ { 0, 0, 186 }, { 75, 66, 186 }, // und_PN -> en_Latn_PN
+ { 0, 66, 187 }, { 230, 66, 187 }, // und_Latn_PL -> pl_Latn_PL
+ { 0, 0, 187 }, { 230, 66, 187 }, // und_PL -> pl_Latn_PL
+ { 0, 66, 188 }, { 231, 66, 188 }, // und_Latn_PT -> pt_Latn_PT
+ { 0, 0, 188 }, { 231, 66, 188 }, // und_PT -> pt_Latn_PT
+ { 0, 66, 189 }, { 270, 66, 189 }, // und_Latn_PR -> es_Latn_PR
+ { 0, 0, 189 }, { 270, 66, 189 }, // und_PR -> es_Latn_PR
+ { 0, 0, 190 }, { 14, 4, 190 }, // und_QA -> ar_Arab_QA
+ { 0, 66, 191 }, { 85, 66, 191 }, // und_Latn_RE -> fr_Latn_RE
+ { 0, 0, 191 }, { 85, 66, 191 }, // und_RE -> fr_Latn_RE
+ { 0, 27, 192 }, { 45, 27, 192 }, // und_Cyrl_RO -> bg_Cyrl_RO
+ { 0, 66, 192 }, { 235, 66, 192 }, // und_Latn_RO -> ro_Latn_RO
+ { 0, 0, 192 }, { 235, 66, 192 }, // und_RO -> ro_Latn_RO
+ { 0, 0, 193 }, { 239, 27, 193 }, // und_RU -> ru_Cyrl_RU
+ { 0, 66, 194 }, { 138, 66, 194 }, // und_Latn_RW -> rw_Latn_RW
+ { 0, 0, 194 }, { 138, 66, 194 }, // und_RW -> rw_Latn_RW
+ { 0, 66, 195 }, { 85, 66, 195 }, // und_Latn_BL -> fr_Latn_BL
+ { 0, 0, 195 }, { 85, 66, 195 }, // und_BL -> fr_Latn_BL
+ { 0, 0, 196 }, { 75, 66, 196 }, // und_SH -> en_Latn_SH
+ { 0, 0, 197 }, { 75, 66, 197 }, // und_KN -> en_Latn_KN
+ { 0, 0, 198 }, { 75, 66, 198 }, // und_LC -> en_Latn_LC
+ { 0, 66, 199 }, { 85, 66, 199 }, // und_Latn_MF -> fr_Latn_MF
+ { 0, 0, 199 }, { 85, 66, 199 }, // und_MF -> fr_Latn_MF
+ { 0, 66, 200 }, { 85, 66, 200 }, // und_Latn_PM -> fr_Latn_PM
+ { 0, 0, 200 }, { 85, 66, 200 }, // und_PM -> fr_Latn_PM
+ { 0, 0, 201 }, { 75, 66, 201 }, // und_VC -> en_Latn_VC
+ { 0, 66, 202 }, { 244, 66, 202 }, // und_Latn_WS -> sm_Latn_WS
+ { 0, 0, 202 }, { 244, 66, 202 }, // und_WS -> sm_Latn_WS
+ { 0, 66, 203 }, { 119, 66, 203 }, // und_Latn_SM -> it_Latn_SM
+ { 0, 0, 203 }, { 119, 66, 203 }, // und_SM -> it_Latn_SM
+ { 0, 66, 204 }, { 231, 66, 204 }, // und_Latn_ST -> pt_Latn_ST
+ { 0, 0, 204 }, { 231, 66, 204 }, // und_ST -> pt_Latn_ST
+ { 0, 0, 205 }, { 14, 4, 205 }, // und_SA -> ar_Arab_SA
+ { 0, 66, 206 }, { 85, 66, 206 }, // und_Latn_SN -> fr_Latn_SN
+ { 0, 0, 206 }, { 85, 66, 206 }, // und_SN -> fr_Latn_SN
+ { 0, 27, 207 }, { 252, 27, 207 }, // und_Cyrl_RS -> sr_Cyrl_RS
+ { 0, 66, 207 }, { 252, 66, 207 }, // und_Latn_RS -> sr_Latn_RS
+ { 0, 0, 207 }, { 252, 27, 207 }, // und_RS -> sr_Cyrl_RS
+ { 0, 66, 208 }, { 85, 66, 208 }, // und_Latn_SC -> fr_Latn_SC
+ { 0, 0, 208 }, { 85, 66, 208 }, // und_SC -> fr_Latn_SC
+ { 0, 0, 210 }, { 75, 66, 210 }, // und_SG -> en_Latn_SG
+ { 0, 0, 211 }, { 75, 66, 211 }, // und_SX -> en_Latn_SX
+ { 0, 27, 212 }, { 303, 27, 212 }, // und_Cyrl_SK -> uk_Cyrl_SK
+ { 0, 66, 212 }, { 262, 66, 212 }, // und_Latn_SK -> sk_Latn_SK
+ { 0, 0, 212 }, { 262, 66, 212 }, // und_SK -> sk_Latn_SK
+ { 0, 66, 213 }, { 263, 66, 213 }, // und_Latn_SI -> sl_Latn_SI
+ { 0, 0, 213 }, { 263, 66, 213 }, // und_SI -> sl_Latn_SI
+ { 0, 0, 214 }, { 75, 66, 214 }, // und_SB -> en_Latn_SB
+ { 0, 66, 215 }, { 265, 66, 215 }, // und_Latn_SO -> so_Latn_SO
+ { 0, 0, 215 }, { 265, 66, 215 }, // und_SO -> so_Latn_SO
+ { 0, 0, 216 }, { 75, 66, 216 }, // und_ZA -> en_Latn_ZA
+ { 0, 0, 217 }, { 75, 66, 217 }, // und_GS -> en_Latn_GS
+ { 0, 0, 218 }, { 142, 63, 218 }, // und_KR -> ko_Kore_KR
+ { 0, 0, 219 }, { 14, 4, 219 }, // und_SS -> ar_Arab_SS
+ { 0, 66, 220 }, { 270, 66, 220 }, // und_Latn_ES -> es_Latn_ES
+ { 0, 0, 220 }, { 270, 66, 220 }, // und_ES -> es_Latn_ES
+ { 0, 0, 221 }, { 260, 119, 221 }, // und_LK -> si_Sinh_LK
+ { 0, 0, 222 }, { 14, 4, 222 }, // und_SD -> ar_Arab_SD
+ { 0, 66, 223 }, { 72, 66, 223 }, // und_Latn_SR -> nl_Latn_SR
+ { 0, 0, 223 }, { 72, 66, 223 }, // und_SR -> nl_Latn_SR
+ { 0, 66, 224 }, { 209, 66, 224 }, // und_Latn_SJ -> nb_Latn_SJ
+ { 0, 0, 224 }, { 209, 66, 224 }, // und_SJ -> nb_Latn_SJ
+ { 0, 47, 225 }, { 323, 47, 225 }, // und_Hebr_SE -> yi_Hebr_SE
+ { 0, 66, 225 }, { 275, 66, 225 }, // und_Latn_SE -> sv_Latn_SE
+ { 0, 0, 225 }, { 275, 66, 225 }, // und_SE -> sv_Latn_SE
+ { 0, 66, 226 }, { 94, 66, 226 }, // und_Latn_CH -> de_Latn_CH
+ { 0, 0, 226 }, { 94, 66, 226 }, // und_CH -> de_Latn_CH
+ { 0, 66, 227 }, { 85, 66, 227 }, // und_Latn_SY -> fr_Latn_SY
+ { 0, 0, 227 }, { 14, 4, 227 }, // und_SY -> ar_Arab_SY
+ { 0, 66, 228 }, { 284, 66, 228 }, // und_Latn_TW -> trv_Latn_TW
+ { 0, 0, 228 }, { 58, 137, 228 }, // und_TW -> zh_Hant_TW
+ { 0, 4, 229 }, { 228, 4, 229 }, // und_Arab_TJ -> fa_Arab_TJ
+ { 0, 27, 229 }, { 282, 27, 229 }, // und_Cyrl_TJ -> tg_Cyrl_TJ
+ { 0, 0, 229 }, { 282, 27, 229 }, // und_TJ -> tg_Cyrl_TJ
+ { 0, 66, 230 }, { 273, 66, 230 }, // und_Latn_TZ -> sw_Latn_TZ
+ { 0, 0, 230 }, { 273, 66, 230 }, // und_TZ -> sw_Latn_TZ
+ { 0, 0, 231 }, { 289, 133, 231 }, // und_TH -> th_Thai_TH
+ { 0, 66, 232 }, { 231, 66, 232 }, // und_Latn_TL -> pt_Latn_TL
+ { 0, 0, 232 }, { 231, 66, 232 }, // und_TL -> pt_Latn_TL
+ { 0, 66, 233 }, { 85, 66, 233 }, // und_Latn_TG -> fr_Latn_TG
+ { 0, 0, 233 }, { 85, 66, 233 }, // und_TG -> fr_Latn_TG
+ { 0, 66, 234 }, { 293, 66, 234 }, // und_Latn_TK -> tkl_Latn_TK
+ { 0, 0, 234 }, { 293, 66, 234 }, // und_TK -> tkl_Latn_TK
+ { 0, 66, 235 }, { 295, 66, 235 }, // und_Latn_TO -> to_Latn_TO
+ { 0, 0, 235 }, { 295, 66, 235 }, // und_TO -> to_Latn_TO
+ { 0, 0, 236 }, { 75, 66, 236 }, // und_TT -> en_Latn_TT
+ { 0, 0, 237 }, { 75, 66, 237 }, // und_TA -> en_Latn_TA
+ { 0, 66, 238 }, { 85, 66, 238 }, // und_Latn_TN -> fr_Latn_TN
+ { 0, 0, 238 }, { 14, 4, 238 }, // und_TN -> ar_Arab_TN
+ { 0, 66, 239 }, { 298, 66, 239 }, // und_Latn_TR -> tr_Latn_TR
+ { 0, 0, 239 }, { 298, 66, 239 }, // und_TR -> tr_Latn_TR
+ { 0, 66, 240 }, { 299, 66, 240 }, // und_Latn_TM -> tk_Latn_TM
+ { 0, 0, 240 }, { 299, 66, 240 }, // und_TM -> tk_Latn_TM
+ { 0, 0, 241 }, { 75, 66, 241 }, // und_TC -> en_Latn_TC
+ { 0, 66, 242 }, { 300, 66, 242 }, // und_Latn_TV -> tvl_Latn_TV
+ { 0, 0, 242 }, { 300, 66, 242 }, // und_TV -> tvl_Latn_TV
+ { 0, 66, 243 }, { 273, 66, 243 }, // und_Latn_UG -> sw_Latn_UG
+ { 0, 0, 243 }, { 273, 66, 243 }, // und_UG -> sw_Latn_UG
+ { 0, 27, 244 }, { 303, 27, 244 }, // und_Cyrl_UA -> uk_Cyrl_UA
+ { 0, 47, 244 }, { 323, 47, 244 }, // und_Hebr_UA -> yi_Hebr_UA
+ { 0, 66, 244 }, { 230, 66, 244 }, // und_Latn_UA -> pl_Latn_UA
+ { 0, 0, 244 }, { 303, 27, 244 }, // und_UA -> uk_Cyrl_UA
+ { 0, 0, 245 }, { 14, 4, 245 }, // und_AE -> ar_Arab_AE
+ { 0, 4, 246 }, { 305, 4, 246 }, // und_Arab_GB -> ur_Arab_GB
+ { 0, 0, 246 }, { 75, 66, 246 }, // und_GB -> en_Latn_GB
+ { 0, 0, 247 }, { 75, 66, 247 }, // und_UM -> en_Latn_UM
+ { 0, 47, 248 }, { 323, 47, 248 }, // und_Hebr_US -> yi_Hebr_US
+ { 0, 0, 248 }, { 75, 66, 248 }, // und_US -> en_Latn_US
+ { 0, 0, 249 }, { 75, 66, 249 }, // und_VI -> en_Latn_VI
+ { 0, 66, 250 }, { 270, 66, 250 }, // und_Latn_UY -> es_Latn_UY
+ { 0, 0, 250 }, { 270, 66, 250 }, // und_UY -> es_Latn_UY
+ { 0, 66, 251 }, { 307, 66, 251 }, // und_Latn_UZ -> uz_Latn_UZ
+ { 0, 0, 251 }, { 307, 66, 251 }, // und_UZ -> uz_Latn_UZ
+ { 0, 66, 252 }, { 39, 66, 252 }, // und_Latn_VU -> bi_Latn_VU
+ { 0, 0, 252 }, { 39, 66, 252 }, // und_VU -> bi_Latn_VU
+ { 0, 66, 253 }, { 119, 66, 253 }, // und_Latn_VA -> it_Latn_VA
+ { 0, 0, 253 }, { 119, 66, 253 }, // und_VA -> it_Latn_VA
+ { 0, 66, 254 }, { 270, 66, 254 }, // und_Latn_VE -> es_Latn_VE
+ { 0, 0, 254 }, { 270, 66, 254 }, // und_VE -> es_Latn_VE
+ { 0, 66, 255 }, { 310, 66, 255 }, // und_Latn_VN -> vi_Latn_VN
+ { 0, 0, 255 }, { 310, 66, 255 }, // und_VN -> vi_Latn_VN
+ { 0, 66, 256 }, { 85, 66, 256 }, // und_Latn_WF -> fr_Latn_WF
+ { 0, 0, 256 }, { 85, 66, 256 }, // und_WF -> fr_Latn_WF
+ { 0, 0, 257 }, { 14, 4, 257 }, // und_EH -> ar_Arab_EH
+ { 0, 0, 259 }, { 14, 4, 259 }, // und_YE -> ar_Arab_YE
+ { 0, 66, 260 }, { 36, 66, 260 }, // und_Latn_ZM -> bem_Latn_ZM
+ { 0, 0, 260 }, { 36, 66, 260 }, // und_ZM -> bem_Latn_ZM
+ { 0, 66, 261 }, { 254, 66, 261 }, // und_Latn_ZW -> sn_Latn_ZW
+ { 0, 0, 261 }, { 254, 66, 261 }, // und_ZW -> sn_Latn_ZW
+ { 0, 1, 0 }, { 87, 1, 102 }, // und_Adlm -> ff_Adlm_GN
+ { 0, 4, 0 }, { 14, 4, 71 }, // und_Arab -> ar_Arab_EG
+ { 0, 5, 0 }, { 17, 5, 12 }, // und_Armn -> hy_Armn_AM
+ { 0, 6, 0 }, { 23, 6, 112 }, // und_Avst -> ae_Avst_IR
+ { 0, 7, 0 }, { 27, 7, 111 }, // und_Bali -> ban_Bali_ID
+ { 0, 8, 0 }, { 29, 8, 40 }, // und_Bamu -> bax_Bamu_CM
+ { 0, 9, 0 }, { 30, 9, 20 }, // und_Beng -> bn_Beng_BD
+ { 0, 11, 0 }, { 34, 11, 111 }, // und_Batk -> bbc_Batk_ID
+ { 0, 12, 0 }, { 247, 12, 110 }, // und_Bhks -> sa_Bhks_IN
+ { 0, 13, 0 }, { 58, 13, 228 }, // und_Bopo -> zh_Bopo_TW
+ { 0, 15, 0 }, { 85, 15, 84 }, // und_Brai -> fr_Brai_FR
+ { 0, 16, 0 }, { 44, 16, 111 }, // und_Bugi -> bug_Bugi_ID
+ { 0, 18, 0 }, { 116, 18, 41 }, // und_Cans -> iu_Cans_CA
+ { 0, 21, 0 }, { 52, 21, 20 }, // und_Cakm -> ccp_Cakm_BD
+ { 0, 23, 0 }, { 55, 23, 248 }, // und_Cher -> chr_Cher_US
+ { 0, 24, 0 }, { 62, 24, 71 }, // und_Copt -> cop_Copt_EG
+ { 0, 25, 0 }, { 7, 25, 113 }, // und_Xsux -> akk_Xsux_IQ
+ { 0, 26, 0 }, { 13, 26, 63 }, // und_Cprt -> grc_Cprt_CY
+ { 0, 27, 0 }, { 239, 27, 193 }, // und_Cyrl -> ru_Cyrl_RU
+ { 0, 29, 0 }, { 105, 29, 110 }, // und_Deva -> hi_Deva_IN
+ { 0, 30, 0 }, { 85, 30, 84 }, // und_Dupl -> fr_Dupl_FR
+ { 0, 31, 0 }, { 12, 31, 71 }, // und_Egyp -> egy_Egyp_EG
+ { 0, 32, 0 }, { 9, 32, 3 }, // und_Elba -> sq_Elba_AL
+ { 0, 33, 0 }, { 11, 33, 77 }, // und_Ethi -> am_Ethi_ET
+ { 0, 35, 0 }, { 93, 35, 90 }, // und_Geor -> ka_Geor_GE
+ { 0, 36, 0 }, { 59, 36, 36 }, // und_Glag -> cu_Glag_BG
+ { 0, 37, 0 }, { 95, 37, 244 }, // und_Goth -> got_Goth_UA
+ { 0, 38, 0 }, { 247, 38, 110 }, // und_Gran -> sa_Gran_IN
+ { 0, 39, 0 }, { 96, 39, 94 }, // und_Grek -> el_Grek_GR
+ { 0, 40, 0 }, { 98, 40, 110 }, // und_Gujr -> gu_Gujr_IN
+ { 0, 41, 0 }, { 233, 41, 110 }, // und_Guru -> pa_Guru_IN
+ { 0, 42, 0 }, { 142, 42, 218 }, // und_Hang -> ko_Hang_KR
+ { 0, 43, 0 }, { 58, 43, 50 }, // und_Hani -> zh_Hani_CN
+ { 0, 45, 0 }, { 58, 45, 228 }, // und_Hanb -> zh_Hanb_TW
+ { 0, 47, 0 }, { 103, 47, 116 }, // und_Hebr -> he_Hebr_IL
+ { 0, 48, 0 }, { 120, 48, 120 }, // und_Hira -> ja_Hira_JP
+ { 0, 49, 0 }, { 16, 49, 112 }, // und_Armi -> arc_Armi_IR
+ { 0, 50, 0 }, { 223, 50, 112 }, // und_Phli -> pal_Phli_IR
+ { 0, 52, 0 }, { 142, 52, 218 }, // und_Jamo -> ko_Jamo_KR
+ { 0, 53, 0 }, { 120, 53, 120 }, // und_Jpan -> ja_Jpan_JP
+ { 0, 54, 0 }, { 121, 54, 111 }, // und_Java -> jv_Java_ID
+ { 0, 55, 0 }, { 38, 55, 110 }, // und_Kthi -> bho_Kthi_IN
+ { 0, 56, 0 }, { 130, 56, 110 }, // und_Knda -> kn_Knda_IN
+ { 0, 57, 0 }, { 120, 57, 120 }, // und_Kana -> ja_Kana_JP
+ { 0, 60, 0 }, { 135, 60, 39 }, // und_Khmr -> km_Khmr_KH
+ { 0, 61, 0 }, { 259, 61, 110 }, // und_Khoj -> sd_Khoj_IN
+ { 0, 62, 0 }, { 259, 62, 110 }, // und_Sind -> sd_Sind_IN
+ { 0, 63, 0 }, { 142, 63, 218 }, // und_Kore -> ko_Kore_KR
+ { 0, 65, 0 }, { 153, 65, 129 }, // und_Laoo -> lo_Laoo_LA
+ { 0, 66, 0 }, { 75, 66, 248 }, // und_Latn -> en_Latn_US
+ { 0, 70, 0 }, { 13, 70, 94 }, // und_Linb -> grc_Linb_GR
+ { 0, 73, 0 }, { 105, 73, 110 }, // und_Mahj -> hi_Mahj_IN
+ { 0, 74, 0 }, { 175, 74, 110 }, // und_Mlym -> ml_Mlym_IN
+ { 0, 77, 0 }, { 290, 77, 50 }, // und_Marc -> bo_Marc_CN
+ { 0, 78, 0 }, { 179, 78, 110 }, // und_Mtei -> mni_Mtei_IN
+ { 0, 79, 0 }, { 187, 79, 209 }, // und_Mend -> men_Mend_SL
+ { 0, 82, 0 }, { 183, 82, 110 }, // und_Modi -> mr_Modi_IN
+ { 0, 83, 0 }, { 191, 83, 50 }, // und_Mong -> mn_Mong_CN
+ { 0, 86, 0 }, { 46, 86, 161 }, // und_Mymr -> my_Mymr_MM
+ { 0, 87, 0 }, { 16, 87, 122 }, // und_Nbat -> arc_Nbat_JO
+ { 0, 88, 0 }, { 200, 88, 164 }, // und_Newa -> new_Newa_NP
+ { 0, 90, 0 }, { 178, 90, 102 }, // und_Nkoo -> man_Nkoo_GN
+ { 0, 91, 0 }, { 215, 91, 110 }, // und_Orya -> or_Orya_IN
+ { 0, 92, 0 }, { 217, 92, 114 }, // und_Ogam -> sga_Ogam_IE
+ { 0, 93, 0 }, { 248, 93, 110 }, // und_Olck -> sat_Olck_IN
+ { 0, 94, 0 }, { 107, 94, 108 }, // und_Hung -> hu_Hung_HU
+ { 0, 97, 0 }, { 139, 97, 193 }, // und_Perm -> kv_Perm_RU
+ { 0, 98, 0 }, { 219, 98, 112 }, // und_Xpeo -> peo_Xpeo_IR
+ { 0, 101, 0 }, { 221, 101, 248 }, // und_Osge -> osa_Osge_US
+ { 0, 102, 0 }, { 265, 102, 215 }, // und_Osma -> so_Osma_SO
+ { 0, 104, 0 }, { 16, 104, 227 }, // und_Palm -> arc_Palm_SY
+ { 0, 106, 0 }, { 159, 106, 50 }, // und_Phag -> lzh_Phag_CN
+ { 0, 107, 0 }, { 229, 107, 132 }, // und_Phnx -> phn_Phnx_LB
+ { 0, 109, 0 }, { 223, 109, 50 }, // und_Phlp -> pal_Phlp_CN
+ { 0, 111, 0 }, { 218, 111, 225 }, // und_Runr -> non_Runr_SE
+ { 0, 113, 0 }, { 250, 113, 110 }, // und_Saur -> saz_Saur_IN
+ { 0, 114, 0 }, { 247, 114, 110 }, // und_Shrd -> sa_Shrd_IN
+ { 0, 115, 0 }, { 75, 115, 246 }, // und_Shaw -> en_Shaw_GB
+ { 0, 116, 0 }, { 247, 116, 110 }, // und_Sidd -> sa_Sidd_IN
+ { 0, 117, 0 }, { 10, 117, 248 }, // und_Sgnw -> ase_Sgnw_US
+ { 0, 118, 0 }, { 58, 118, 50 }, // und_Hans -> zh_Hans_CN
+ { 0, 119, 0 }, { 260, 119, 221 }, // und_Sinh -> si_Sinh_LK
+ { 0, 121, 0 }, { 272, 121, 111 }, // und_Sund -> su_Sund_ID
+ { 0, 123, 0 }, { 277, 123, 113 }, // und_Syrc -> syr_Syrc_IQ
+ { 0, 124, 0 }, { 83, 124, 185 }, // und_Tglg -> fil_Tglg_PH
+ { 0, 127, 0 }, { 280, 127, 255 }, // und_Tavt -> blt_Tavt_VN
+ { 0, 128, 0 }, { 70, 128, 110 }, // und_Takr -> doi_Takr_IN
+ { 0, 129, 0 }, { 283, 129, 110 }, // und_Taml -> ta_Taml_IN
+ { 0, 131, 0 }, { 287, 131, 110 }, // und_Telu -> te_Telu_IN
+ { 0, 132, 0 }, { 69, 132, 144 }, // und_Thaa -> dv_Thaa_MV
+ { 0, 133, 0 }, { 289, 133, 231 }, // und_Thai -> th_Thai_TH
+ { 0, 134, 0 }, { 290, 134, 50 }, // und_Tibt -> bo_Tibt_CN
+ { 0, 135, 0 }, { 271, 135, 159 }, // und_Tfng -> zgh_Tfng_MA
+ { 0, 136, 0 }, { 171, 136, 110 }, // und_Tirh -> mai_Tirh_IN
+ { 0, 137, 0 }, { 58, 137, 228 }, // und_Hant -> zh_Hant_TW
+ { 0, 138, 0 }, { 302, 138, 227 }, // und_Ugar -> uga_Ugar_SY
+ { 0, 139, 0 }, { 308, 139, 134 }, // und_Vaii -> vai_Vaii_LR
+ { 0, 141, 0 }, { 255, 141, 50 }, // und_Yiii -> ii_Yiii_CN
+ { 0, 142, 0 }, { 339, 142, 161 } // und_Rohg -> rhg_Rohg_MM
};
-static const quint16 locale_index[] = {
+static constexpr quint16 locale_index[] = {
0, // AnyLanguage
0, // C
- 0, // Abkhazian
- 1, // Oromo
- 3, // Afar
- 4, // Afrikaans
- 6, // Albanian
- 9, // Amharic
- 10, // Arabic
- 38, // Armenian
- 39, // Assamese
+ 1, // Abkhazian
+ 2, // Afar
+ 5, // Afrikaans
+ 7, // Aghem
+ 8, // Akan
+ 0, // Akkadian
+ 9, // Akoose
+ 10, // Albanian
+ 0, // American Sign Language
+ 13, // Amharic
+ 0, // Ancient Egyptian
+ 0, // Ancient Greek
+ 14, // Arabic
+ 42, // Aragonese
+ 0, // Aramaic
+ 43, // Armenian
+ 44, // Assamese
+ 45, // Asturian
+ 46, // Asu
+ 47, // Atsam
+ 0, // Avaric
+ 0, // Avestan
0, // Aymara
- 40, // Azerbaijani
- 43, // Bashkir
- 44, // Basque
- 45, // Bengali
- 47, // Dzongkha
- 0, // Bihari
+ 48, // Azerbaijani
+ 53, // Bafia
+ 0, // Balinese
+ 54, // Bambara
+ 0, // Bamun
+ 56, // Bangla
+ 58, // Basaa
+ 59, // Bashkir
+ 60, // Basque
+ 0, // Batak Toba
+ 61, // Belarusian
+ 62, // Bemba
+ 63, // Bena
+ 64, // Bhojpuri
0, // Bislama
- 48, // Breton
- 49, // Bulgarian
- 50, // Burmese
- 51, // Belarusian
- 52, // Khmer
- 53, // Catalan
- 57, // Chinese
- 64, // Corsican
- 65, // Croatian
- 67, // Czech
- 68, // Danish
- 70, // Dutch
- 77, // English
- 183, // Esperanto
- 184, // Estonian
- 185, // Faroese
- 0, // Fijian
- 187, // Finnish
- 188, // French
- 234, // Western Frisian
- 235, // Gaelic
- 236, // Galician
- 237, // Georgian
- 238, // German
- 245, // Greek
- 247, // Greenlandic
- 248, // Guarani
- 249, // Gujarati
- 250, // Hausa
- 254, // Hebrew
- 255, // Hindi
- 256, // Hungarian
- 257, // Icelandic
- 258, // Indonesian
- 259, // Interlingua
- 0, // Interlingue
- 260, // Inuktitut
- 0, // Inupiak
- 262, // Irish
- 264, // Italian
- 268, // Japanese
- 269, // Javanese
- 270, // Kannada
- 271, // Kashmiri
- 272, // Kazakh
- 273, // Kinyarwanda
- 274, // Kirghiz
- 275, // Korean
- 277, // Kurdish
- 278, // Rundi
- 279, // Lao
- 0, // Latin
- 280, // Latvian
- 281, // Lingala
- 285, // Lithuanian
- 286, // Macedonian
- 287, // Malagasy
- 288, // Malay
- 292, // Malayalam
- 293, // Maltese
- 294, // Maori
- 295, // Marathi
- 0, // Marshallese
- 296, // Mongolian
- 0, // Nauru
- 298, // Nepali
- 300, // Norwegian Bokmal
- 302, // Occitan
- 303, // Oriya
- 304, // Pashto
- 306, // Persian
- 308, // Polish
- 309, // Portuguese
- 321, // Punjabi
- 323, // Quechua
- 326, // Romansh
- 327, // Romanian
- 329, // Russian
- 0, // Samoan
- 335, // Sango
- 336, // Sanskrit
- 337, // Serbian
- 345, // Ossetic
- 347, // Southern Sotho
- 348, // Tswana
- 349, // Shona
- 350, // Sindhi
- 351, // Sinhala
- 352, // Swati
- 353, // Slovak
- 354, // Slovenian
- 355, // Somali
- 359, // Spanish
- 387, // Sundanese
- 388, // Swahili
- 392, // Swedish
- 395, // Sardinian
- 396, // Tajik
- 397, // Tamil
- 401, // Tatar
- 402, // Telugu
- 403, // Thai
- 404, // Tibetan
- 406, // Tigrinya
- 408, // Tongan
- 409, // Tsonga
- 410, // Turkish
- 412, // Turkmen
- 0, // Tahitian
- 413, // Uighur
- 414, // Ukrainian
- 415, // Urdu
- 417, // Uzbek
- 420, // Vietnamese
- 421, // Volapuk
- 422, // Welsh
- 423, // Wolof
- 424, // Xhosa
- 425, // Yiddish
- 426, // Yoruba
- 0, // Zhuang
- 428, // Zulu
- 429, // Norwegian Nynorsk
- 430, // Bosnian
- 432, // Divehi
- 433, // Manx
- 434, // Cornish
- 435, // Akan
- 436, // Konkani
- 437, // Ga
- 438, // Igbo
- 439, // Kamba
- 440, // Syriac
- 441, // Blin
- 442, // Geez
- 0, // Koro
- 443, // Sidamo
- 444, // Atsam
- 445, // Tigre
- 446, // Jju
- 447, // Friulian
- 448, // Venda
- 449, // Ewe
- 451, // Walamo
- 452, // Hawaiian
- 453, // Tyap
- 454, // Nyanja
- 455, // Filipino
- 456, // Swiss German
- 459, // Sichuan Yi
- 460, // Kpelle
- 461, // Low German
- 463, // South Ndebele
- 464, // Northern Sotho
- 465, // Northern Sami
- 468, // Taroko
- 469, // Gusii
- 470, // Taita
- 471, // Fulah
- 484, // Kikuyu
- 485, // Samburu
- 486, // Sena
- 487, // North Ndebele
- 488, // Rombo
- 489, // Tachelhit
- 491, // Kabyle
- 492, // Nyankole
- 493, // Bena
- 494, // Vunjo
- 495, // Bambara
- 497, // Embu
- 498, // Cherokee
- 499, // Morisyen
- 500, // Makonde
- 501, // Langi
- 502, // Ganda
- 503, // Bemba
- 504, // Kabuverdianu
- 505, // Meru
- 506, // Kalenjin
- 507, // Nama
- 508, // Machame
- 509, // Colognian
- 510, // Masai
- 512, // Soga
- 513, // Luyia
- 514, // Asu
- 515, // Teso
- 517, // Saho
- 518, // Koyra Chiini
- 519, // Rwa
- 520, // Luo
- 521, // Chiga
- 522, // Central Morocco Tamazight
- 523, // Koyraboro Senni
- 524, // Shambala
- 525, // Bodo
- 0, // Avaric
+ 65, // Blin
+ 66, // Bodo
+ 67, // Bosnian
+ 69, // Breton
+ 0, // Buginese
+ 70, // Bulgarian
+ 71, // Burmese
+ 72, // Cantonese
+ 74, // Catalan
+ 78, // Cebuano
+ 79, // Central Atlas Tamazight
+ 80, // Central Kurdish
+ 82, // Chakma
0, // Chamorro
- 526, // Chechen
- 527, // Church
- 528, // Chuvash
+ 84, // Chechen
+ 85, // Cherokee
+ 86, // Chickasaw
+ 87, // Chiga
+ 88, // Chinese
+ 95, // Church
+ 96, // Chuvash
+ 97, // Colognian
+ 0, // Coptic
+ 98, // Cornish
+ 99, // Corsican
0, // Cree
+ 100, // Croatian
+ 102, // Czech
+ 103, // Danish
+ 105, // Divehi
+ 106, // Dogri
+ 107, // Duala
+ 108, // Dutch
+ 115, // Dzongkha
+ 116, // Embu
+ 117, // English
+ 226, // Erzya
+ 227, // Esperanto
+ 228, // Estonian
+ 229, // Ewe
+ 231, // Ewondo
+ 232, // Faroese
+ 0, // Fijian
+ 234, // Filipino
+ 235, // Finnish
+ 236, // French
+ 282, // Friulian
+ 283, // Fulah
+ 307, // Gaelic
+ 308, // Ga
+ 309, // Galician
+ 310, // Ganda
+ 311, // Geez
+ 313, // Georgian
+ 314, // German
+ 0, // Gothic
+ 321, // Greek
+ 323, // Guarani
+ 324, // Gujarati
+ 325, // Gusii
0, // Haitian
+ 326, // Hausa
+ 331, // Hawaiian
+ 332, // Hebrew
0, // Herero
+ 333, // Hindi
0, // Hiri Motu
+ 335, // Hungarian
+ 336, // Icelandic
+ 337, // Ido
+ 338, // Igbo
+ 339, // Inari Sami
+ 340, // Indonesian
+ 0, // Ingush
+ 341, // Interlingua
+ 342, // Interlingue
+ 343, // Inuktitut
+ 0, // Inupiaq
+ 345, // Irish
+ 347, // Italian
+ 351, // Japanese
+ 352, // Javanese
+ 353, // Jju
+ 354, // Jola-Fonyi
+ 355, // Kabuverdianu
+ 356, // Kabyle
+ 357, // Kako
+ 358, // Kalaallisut
+ 359, // Kalenjin
+ 360, // Kamba
+ 361, // Kannada
0, // Kanuri
+ 362, // Kashmiri
+ 364, // Kazakh
+ 365, // Kenyang
+ 366, // Khmer
+ 367, // Kiche
+ 368, // Kikuyu
+ 369, // Kinyarwanda
0, // Komi
0, // Kongo
- 0, // Kwanyama
+ 370, // Konkani
+ 371, // Korean
+ 0, // Koro
+ 374, // Koyraboro Senni
+ 375, // Koyra Chiini
+ 376, // Kpelle
+ 0, // Kuanyama
+ 378, // Kurdish
+ 379, // Kwasio
+ 380, // Kyrgyz
+ 381, // Lakota
+ 382, // Langi
+ 383, // Lao
+ 384, // Latin
+ 385, // Latvian
+ 0, // Lezghian
0, // Limburgish
- 529, // Luba Katanga
- 530, // Luxembourgish
- 0, // Navaho
+ 386, // Lingala
+ 0, // Literary Chinese
+ 390, // Lithuanian
+ 391, // Lojban
+ 392, // Lower Sorbian
+ 393, // Low German
+ 395, // Luba-Katanga
+ 396, // Lule Sami
+ 398, // Luo
+ 399, // Luxembourgish
+ 400, // Luyia
+ 401, // Macedonian
+ 402, // Machame
+ 403, // Maithili
+ 404, // Makhuwa-Meetto
+ 405, // Makonde
+ 406, // Malagasy
+ 407, // Malayalam
+ 408, // Malay
+ 414, // Maltese
+ 0, // Mandingo
+ 415, // Manipuri
+ 417, // Manx
+ 418, // Maori
+ 419, // Mapuche
+ 420, // Marathi
+ 0, // Marshallese
+ 421, // Masai
+ 423, // Mazanderani
+ 0, // Mende
+ 424, // Meru
+ 425, // Meta
+ 426, // Mohawk
+ 427, // Mongolian
+ 430, // Morisyen
+ 431, // Mundang
+ 432, // Muscogee
+ 433, // Nama
+ 0, // Nauru
+ 434, // Navajo
0, // Ndonga
+ 435, // Nepali
+ 0, // Newari
+ 437, // Ngiemboon
+ 438, // Ngomba
+ 439, // Nigerian Pidgin
+ 440, // Nko
+ 441, // Northern Luri
+ 443, // Northern Sami
+ 446, // Northern Sotho
+ 447, // North Ndebele
+ 448, // Norwegian Bokmal
+ 450, // Norwegian Nynorsk
+ 451, // Nuer
+ 452, // Nyanja
+ 453, // Nyankole
+ 454, // Occitan
+ 456, // Odia
0, // Ojibwa
- 0, // Pali
- 531, // Walloon
- 532, // Aghem
- 533, // Basaa
- 534, // Zarma
- 535, // Duala
- 536, // Jola Fonyi
- 537, // Ewondo
- 538, // Bafia
- 539, // Makhuwa Meetto
- 540, // Mundang
- 541, // Kwasio
- 542, // Nuer
- 543, // Sakha
- 544, // Sangu
- 0, // Congo Swahili
- 545, // Tasawaq
- 546, // Vai
- 548, // Walser
- 549, // Yangben
- 0, // Avestan
- 550, // Asturian
- 551, // Ngomba
- 552, // Kako
- 553, // Meta
- 554, // Ngiemboon
- 555, // Aragonese
- 0, // Akkadian
- 0, // Ancient Egyptian
- 0, // Ancient Greek
- 0, // Aramaic
- 0, // Balinese
- 0, // Bamun
- 0, // Batak Toba
- 0, // Buginese
- 0, // Buhid
- 0, // Carian
- 556, // Chakma
- 0, // Classical Mandaic
- 0, // Coptic
- 0, // Dogri
- 0, // Eastern Cham
- 0, // Eastern Kayah
- 0, // Etruscan
- 0, // Gothic
- 0, // Hanunoo
- 0, // Ingush
- 0, // Large Flowery Miao
- 0, // Lepcha
- 0, // Limbu
- 0, // Lisu
- 0, // Lu
- 0, // Lycian
- 0, // Lydian
- 0, // Mandingo
- 558, // Manipuri
- 0, // Meroitic
- 0, // Northern Thai
0, // Old Irish
0, // Old Norse
0, // Old Persian
- 0, // Old Turkish
+ 457, // Oromo
+ 459, // Osage
+ 460, // Ossetic
0, // Pahlavi
- 0, // Parthian
+ 0, // Palauan
+ 0, // Pali
+ 462, // Papiamento
+ 464, // Pashto
+ 466, // Persian
0, // Phoenician
- 0, // Prakrit Language
- 0, // Rejang
- 0, // Sabaean
- 0, // Samaritan
- 0, // Santali
+ 468, // Polish
+ 469, // Portuguese
+ 481, // Prussian
+ 482, // Punjabi
+ 484, // Quechua
+ 487, // Romanian
+ 489, // Romansh
+ 490, // Rombo
+ 491, // Rundi
+ 492, // Russian
+ 498, // Rwa
+ 499, // Saho
+ 500, // Sakha
+ 501, // Samburu
+ 0, // Samoan
+ 502, // Sango
+ 503, // Sangu
+ 504, // Sanskrit
+ 505, // Santali
+ 507, // Sardinian
0, // Saurashtra
- 0, // Sora
- 0, // Sylheti
- 0, // Tagbanwa
- 559, // Tai Dam
- 0, // Tai Nua
- 0, // Ugaritic
- 560, // Akoose
- 561, // Lakota
- 562, // Standard Moroccan Tamazight
- 563, // Mapuche
- 564, // Central Kurdish
- 566, // Lower Sorbian
- 567, // Upper Sorbian
- 568, // Kenyang
- 569, // Mohawk
- 570, // Nko
- 571, // Prussian
- 572, // Kiche
- 573, // Southern Sami
- 574, // Lule Sami
- 575, // Inari Sami
- 576, // Skolt Sami
- 577, // Warlpiri
- 0, // Manichaean Middle Persian
- 0, // Mende
- 0, // Ancient North Arabian
- 0, // Linear A
- 0, // Hmong Njua
- 0, // Ho
- 0, // Lezghian
- 0, // Bassa
- 0, // Mono
- 0, // Tedim Chin
- 0, // Maithili
- 0, // Ahom
- 0, // American Sign Language
- 0, // Ardhamagadhi Prakrit
- 0, // Bhojpuri
- 0, // Hieroglyphic Luwian
- 0, // Literary Chinese
- 578, // Mazanderani
- 0, // Mru
- 0, // Newari
- 579, // Northern Luri
- 0, // Palauan
- 0, // Papiamento
- 0, // Saraiki
+ 508, // Sena
+ 509, // Serbian
+ 517, // Shambala
+ 518, // Shona
+ 519, // Sichuan Yi
+ 520, // Sicilian
+ 521, // Sidamo
+ 522, // Silesian
+ 523, // Sindhi
+ 525, // Sinhala
+ 526, // Skolt Sami
+ 527, // Slovak
+ 528, // Slovenian
+ 529, // Soga
+ 530, // Somali
+ 534, // Southern Kurdish
+ 536, // Southern Sami
+ 538, // Southern Sotho
+ 540, // South Ndebele
+ 541, // Spanish
+ 569, // Standard Moroccan Tamazight
+ 570, // Sundanese
+ 571, // Swahili
+ 575, // Swati
+ 577, // Swedish
+ 580, // Swiss German
+ 583, // Syriac
+ 585, // Tachelhit
+ 0, // Tahitian
+ 587, // Tai Dam
+ 588, // Taita
+ 589, // Tajik
+ 590, // Tamil
+ 594, // Taroko
+ 595, // Tasawaq
+ 596, // Tatar
+ 597, // Telugu
+ 598, // Teso
+ 600, // Thai
+ 601, // Tibetan
+ 603, // Tigre
+ 604, // Tigrinya
0, // Tokelau
- 0, // Tok Pisin
+ 606, // Tok Pisin
+ 607, // Tongan
+ 608, // Tsonga
+ 609, // Tswana
+ 611, // Turkish
+ 613, // Turkmen
0, // Tuvalu
- 0, // Uncoded Languages
- 581, // Cantonese
- 583, // Osage
- 0, // Tangut
- 584, // Ido
- 585, // Lojban
- 586, // Sicilian
- 587, // Southern Kurdish
- 588, // Western Balochi
- 589, // Cebuano
- 590, // Erzya
- 591, // Chickasaw
- 592, // Muscogee
- 593, // Silesian
+ 614, // Tyap
+ 0, // Ugaritic
+ 615, // Ukrainian
+ 616, // Upper Sorbian
+ 617, // Urdu
+ 619, // Uyghur
+ 620, // Uzbek
+ 623, // Vai
+ 625, // Venda
+ 626, // Vietnamese
+ 627, // Volapuk
+ 628, // Vunjo
+ 629, // Walloon
+ 630, // Walser
+ 631, // Warlpiri
+ 632, // Welsh
+ 633, // Western Balochi
+ 638, // Western Frisian
+ 639, // Wolaytta
+ 640, // Wolof
+ 641, // Xhosa
+ 642, // Yangben
+ 643, // Yiddish
+ 644, // Yoruba
+ 646, // Zarma
+ 647, // Zhuang
+ 648, // Zulu
+ 649, // Kaingang
+ 650, // Nheengatu
+ 653, // Haryanvi
+ 654, // Northern Frisian
+ 655, // Rajasthani
+ 656, // Moksha
+ 657, // Toki Pona
+ 658, // Pijin
+ 659, // Obolo
+ 660, // Baluchi
+ 662, // Ligurian
+ 663, // Rohingya
+ 665, // Torwali
+ 666, // Anii
+ 667, // Kangri
+ 668, // Venetian
0 // trailing 0
};
-static const QLocaleData locale_data[] = {
+static constexpr QLocaleData locale_data[] = {
// lang script terr lStrt lpMid lpEnd lPair lDelm dec group prcnt zero minus plus exp qtOpn qtEnd altQO altQE lDFmt sDFmt lTFmt sTFmt slDay lDays ssDys sDays snDay nDays am pm byte siQnt iecQn crSym crDsp crFmt crFNg ntLng ntTer currISO curDgt curRnd dow1st wknd+ wknd- grpTop grpMid grpEnd
- { 1, 0, 0, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 8, 0, 17, 0, 0, 0, 0, 56, 56, 83, 96, 0, 0, 0, 5, 22, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 8, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 4, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // C/AnyScript/AnyCountry
- { 3, 7, 69, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 45, 10, 22, 109, 109, 163, 163, 83, 83, 2, 2, 0, 5, 22, 0, 0, 4, 0, 0, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 17, 4, 0, 6, 10, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Ethiopia
- { 3, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 45, 0, 0, 109, 109, 163, 163, 190, 190, 2, 2, 0, 5, 22, 2, 0, 4, 0, 0, 16, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 6, 8, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Kenya
- { 4, 7, 69, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Afar/Latin/Ethiopia
- { 5, 7, 195, 0, 0, 7, 7, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 80, 70, 0, 0, 203, 203, 260, 260, 287, 287, 4, 4, 45, 5, 22, 5, 17, 4, 13, 24, 33, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 27, 27, 13, 13, 3, 3, 5, 17, 23, 1, 66, 4, 6, 9, 11, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Afrikaans/Latin/South Africa
- { 5, 7, 148, 0, 0, 7, 7, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 70, 10, 22, 203, 203, 260, 260, 287, 287, 4, 4, 45, 5, 22, 6, 83, 4, 13, 24, 44, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 57, 57, 27, 27, 13, 13, 3, 3, 5, 17, 23, 1, 54, 4, 6, 9, 7, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Afrikaans/Latin/Namibia
- { 6, 7, 2, 0, 0, 15, 15, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 0, 113, 29, 22, 300, 300, 357, 384, 411, 411, 7, 7, 50, 5, 22, 7, 137, 19, 24, 51, 56, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 7, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 4, 44, 5, 7, 5, 8, {65,76,76}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Albania
- { 6, 7, 127, 0, 0, 15, 15, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 0, 113, 0, 0, 300, 300, 357, 384, 411, 411, 7, 7, 50, 5, 22, 11, 181, 19, 24, 51, 64, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 3, 53, 5, 7, 5, 18, {77,75,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Macedonia
- { 6, 7, 257, 0, 0, 15, 15, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 0, 113, 0, 0, 300, 300, 357, 384, 411, 411, 7, 7, 50, 5, 22, 14, 234, 19, 24, 51, 82, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 1, 20, 5, 7, 5, 6, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Kosovo
- { 7, 14, 69, 24, 24, 30, 39, 6, 0, 1, 2, 3, 4, 5, 9, 15, 16, 17, 18, 53, 45, 10, 22, 425, 425, 452, 452, 478, 478, 18, 17, 54, 57, 22, 15, 254, 4, 13, 88, 92, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 26, 26, 13, 13, 3, 4, 3, 23, 23, 2, 33, 4, 6, 4, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Amharic/Ethiopic/Ethiopia
- { 8, 1, 64, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 17, 287, 19, 0, 97, 104, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 80, 5, 0, 7, 3, {69,71,80}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Egypt
- { 8, 1, 3, 47, 47, 47, 47, 6, 1, 0, 30, 3, 33, 35, 9, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 22, 367, 4, 13, 97, 107, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5,101, 4, 6, 7, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Algeria
- { 8, 1, 17, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 27, 468, 19, 0, 97, 114, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 90, 5, 0, 7, 7, {66,72,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Bahrain
- { 8, 1, 42, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 32, 558, 19, 0, 97, 121, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 4,111, 5, 0, 7, 4, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Chad
- { 8, 1, 48, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 0, 0, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 33, 669, 19, 0, 97, 125, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 2,104, 5, 0, 7, 9, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Comoros
- { 8, 1, 59, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 36, 773, 19, 0, 97, 134, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 3, 83, 5, 0, 7, 6, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Djibouti
- { 8, 1, 67, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 39, 856, 19, 0, 97, 140, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 3, 90, 5, 0, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Eritrea
- { 8, 1, 103, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 42, 946, 19, 0, 97, 147, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 83, 5, 0, 7, 6, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Iraq
- { 8, 1, 105, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 1, 1, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 47, 1029, 19, 0, 97, 153, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 9, 4, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1,132, 5, 0, 7, 7, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Israel
- { 8, 1, 109, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 48, 1161, 19, 0, 97, 160, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 83, 5, 0, 7, 6, {74,79,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Jordan
- { 8, 1, 115, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 53, 1244, 19, 0, 97, 166, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 83, 5, 0, 7, 6, {75,87,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Kuwait
- { 8, 1, 119, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 58, 1327, 19, 0, 97, 172, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 83, 5, 0, 7, 5, {76,66,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Lebanon
- { 8, 1, 122, 47, 47, 47, 47, 6, 1, 0, 30, 3, 33, 35, 9, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 63, 1410, 4, 13, 97, 177, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 87, 4, 6, 7, 5, {76,89,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Libya
- { 8, 1, 136, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 68, 1497, 19, 0, 97, 182, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 4,111, 5, 0, 7, 9, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Mauritania
- { 8, 1, 145, 47, 47, 47, 47, 6, 1, 0, 30, 3, 33, 35, 9, 11, 10, 13, 12, 119, 136, 0, 0, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 72, 1608, 4, 13, 97, 191, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 86, 4, 6, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Morocco
- { 8, 1, 162, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 77, 1694, 19, 0, 97, 197, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 76, 5, 0, 7, 5, {79,77,82}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Oman
- { 8, 1, 165, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 47, 1029, 19, 0, 97, 202, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1,132, 5, 0, 7, 18, {73,76,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Palestinian Territories
- { 8, 1, 175, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 82, 1770, 19, 0, 97, 220, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 69, 5, 0, 7, 3, {81,65,82}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Qatar
- { 8, 1, 186, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 87, 1839, 19, 0, 97, 223, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 76, 5, 0, 7, 24, {83,65,82}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Saudi Arabia
- { 8, 1, 194, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 92, 1915, 19, 0, 97, 247, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1, 76, 5, 0, 7, 7, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Somalia
- { 8, 1, 201, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 93, 1991, 19, 0, 97, 254, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 4, 90, 5, 0, 7, 7, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Sudan
- { 8, 1, 207, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 97, 2081, 19, 0, 97, 261, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 76, 5, 0, 7, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Syria
- { 8, 1, 216, 47, 47, 47, 47, 6, 1, 0, 30, 3, 33, 35, 9, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 102, 2157, 4, 13, 97, 266, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 94, 4, 6, 7, 4, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Tunisia
- { 8, 1, 223, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 107, 2251, 19, 0, 97, 270, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 90, 5, 0, 7, 24, {65,69,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/United Arab Emirates
- { 8, 1, 236, 47, 47, 47, 47, 6, 0, 1, 30, 3, 33, 35, 9, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 72, 1608, 4, 13, 97, 294, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 86, 4, 6, 7, 15, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Western Sahara
- { 8, 1, 237, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 112, 2341, 19, 0, 97, 309, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 69, 5, 0, 7, 5, {89,69,82}, 0, 0, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Yemen
- { 8, 1, 254, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 117, 2410, 19, 0, 97, 314, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1,131, 5, 0, 7, 12, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/South Sudan
- { 8, 1, 260, 47, 47, 47, 47, 53, 19, 20, 21, 23, 24, 26, 28, 11, 10, 13, 12, 119, 136, 10, 22, 491, 491, 491, 491, 542, 542, 21, 21, 80, 84, 22, 0, 0, 19, 0, 326, 348, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 0, 0, 5, 0, 22, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/World
- { 9, 10, 11, 0, 0, 54, 54, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 15, 16, 146, 166, 0, 0, 555, 555, 616, 616, 643, 643, 0, 0, 131, 137, 22, 118, 2541, 19, 0, 354, 361, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 8, 10, 5, 61, 61, 27, 27, 13, 13, 2, 2, 6, 17, 23, 1, 45, 5, 0, 7, 8, {65,77,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Armenian/Armenian/Armenia
- { 10, 11, 100, 0, 0, 61, 61, 6, 0, 1, 2, 37, 4, 5, 9, 10, 11, 12, 13, 174, 192, 42, 42, 656, 656, 713, 713, 744, 744, 22, 22, 154, 158, 22, 119, 2586, 8, 0, 369, 376, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 57, 57, 31, 31, 13, 13, 9, 7, 4, 37, 23, 1, 42, 5, 0, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Assamese/Bengali/India
- { 12, 7, 15, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 200, 166, 0, 0, 757, 757, 823, 849, 96, 96, 0, 0, 195, 5, 22, 120, 2628, 19, 0, 380, 390, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 57, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Latin/Azerbaijan
- { 12, 1, 102, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Azerbaijani/Arabic/Iran
- { 12, 2, 15, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 17, 18, 200, 166, 0, 0, 875, 875, 941, 941, 96, 96, 31, 29, 0, 5, 22, 120, 2685, 19, 0, 400, 410, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 5, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Cyrillic/Azerbaijan
- { 13, 2, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bashkir/Cyrillic/Russia
- { 14, 7, 197, 0, 0, 78, 78, 6, 1, 0, 2, 3, 38, 5, 9, 10, 11, 10, 11, 217, 253, 54, 0, 967, 967, 1034, 1034, 1061, 1061, 0, 0, 199, 5, 22, 14, 2690, 19, 24, 420, 427, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 6, 12, 5, 67, 67, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 19, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Basque/Latin/Spain
- { 15, 11, 18, 0, 0, 87, 87, 6, 0, 1, 2, 37, 4, 5, 9, 10, 11, 12, 13, 174, 259, 10, 22, 1074, 1074, 1131, 1131, 1167, 1167, 0, 0, 154, 5, 22, 122, 2709, 0, 31, 435, 440, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 48, 4, 6, 5, 8, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Bengali/Bengali/Bangladesh
- { 15, 11, 100, 0, 0, 87, 87, 6, 0, 1, 2, 37, 4, 5, 9, 10, 11, 12, 13, 174, 259, 10, 22, 1074, 1074, 1131, 1131, 1167, 1167, 0, 0, 154, 5, 22, 119, 2757, 0, 31, 435, 448, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 42, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bengali/Bengali/India
- { 16, 31, 25, 96, 96, 96, 96, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 265, 70, 66, 93, 1184, 1184, 1262, 1262, 1295, 1295, 33, 31, 0, 5, 22, 123, 2799, 4, 0, 452, 458, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 10, 27, 22, 78, 78, 33, 33, 26, 26, 5, 6, 4, 17, 23, 3, 8, 4, 0, 6, 5, {66,84,78}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Dzongkha/Tibetan/Bhutan
- { 19, 7, 74, 0, 0, 105, 105, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 45, 0, 0, 1321, 1321, 1363, 1363, 1395, 1395, 38, 37, 206, 213, 230, 14, 2807, 19, 0, 463, 472, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 42, 42, 32, 32, 17, 17, 4, 4, 7, 17, 23, 1, 35, 5, 0, 9, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Breton/Latin/France
- { 20, 2, 33, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 40, 10, 40, 10, 295, 317, 1, 1, 1412, 1412, 1466, 1466, 1486, 1486, 42, 41, 253, 5, 22, 126, 2842, 19, 24, 477, 486, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 12, 9, 4, 54, 54, 20, 20, 13, 13, 6, 6, 7, 17, 23, 3, 46, 5, 7, 9, 8, {66,71,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Bulgarian/Cyrillic/Bulgaria
- { 21, 25, 147, 120, 120, 125, 125, 135, 0, 1, 2, 41, 4, 5, 9, 10, 11, 12, 13, 329, 347, 115, 125, 1499, 1499, 1499, 1499, 1552, 1552, 48, 47, 260, 5, 22, 2, 2888, 8, 0, 494, 494, 5, 5, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 6, 53, 53, 53, 53, 13, 13, 5, 3, 5, 17, 23, 1, 28, 5, 0, 6, 6, {77,77,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Burmese/Myanmar/Myanmar
- { 22, 2, 20, 0, 0, 136, 136, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 167, 131, 0, 1565, 1565, 1620, 1620, 1640, 1640, 0, 0, 265, 270, 22, 0, 2916, 19, 0, 500, 510, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 7, 11, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 2, 88, 5, 0, 10, 8, {66,89,78}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Belarusian/Cyrillic/Belarus
- { 23, 20, 36, 0, 0, 143, 152, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 259, 10, 22, 1653, 1698, 1744, 1744, 1783, 1783, 0, 0, 287, 5, 22, 129, 3004, 0, 31, 518, 523, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 45, 46, 39, 39, 13, 13, 2, 2, 2, 17, 23, 1, 28, 4, 6, 5, 7, {75,72,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Khmer/Khmer/Cambodia
- { 24, 7, 197, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 355, 259, 1, 1, 1796, 1796, 1855, 1855, 1882, 1882, 53, 50, 0, 5, 22, 14, 3032, 19, 24, 530, 536, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 9, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 19, 5, 7, 6, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Spain
- { 24, 7, 5, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 355, 259, 1, 1, 1796, 1796, 1855, 1855, 1882, 1882, 53, 50, 0, 5, 22, 14, 3032, 19, 24, 530, 543, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 9, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 19, 5, 7, 6, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Andorra
- { 24, 7, 74, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 355, 259, 1, 1, 1796, 1796, 1855, 1855, 1882, 1882, 53, 50, 0, 5, 22, 14, 3032, 19, 24, 530, 550, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 9, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 19, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/France
- { 24, 7, 106, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 355, 259, 1, 1, 1796, 1796, 1855, 1855, 1882, 1882, 53, 50, 0, 5, 22, 14, 3032, 19, 24, 530, 556, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 9, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 19, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Italy
- { 25, 5, 44, 168, 168, 173, 173, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 377, 390, 142, 27, 1902, 1902, 1929, 1929, 1949, 1949, 58, 55, 289, 291, 22, 130, 3051, 4, 13, 562, 566, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 21, 23, 1, 12, 4, 6, 4, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/China
- { 25, 5, 97, 168, 168, 173, 173, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 377, 259, 142, 27, 1902, 1902, 1929, 1929, 1949, 1949, 58, 55, 289, 291, 22, 131, 3063, 4, 13, 562, 568, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 21, 23, 3, 10, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Hong Kong
- { 25, 5, 126, 168, 168, 173, 173, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 377, 259, 142, 27, 1902, 1902, 1929, 1929, 1949, 1949, 58, 55, 289, 291, 22, 134, 3073, 4, 13, 562, 577, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 21, 23, 4, 12, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Macau
- { 25, 5, 190, 168, 168, 173, 173, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 377, 45, 142, 27, 1902, 1902, 1929, 1929, 1949, 1949, 58, 55, 289, 291, 22, 6, 3085, 4, 13, 562, 586, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 21, 23, 1, 14, 4, 6, 4, 3, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Singapore
- { 25, 6, 97, 168, 168, 178, 178, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 377, 398, 153, 27, 1902, 1902, 1962, 1962, 1949, 1949, 58, 55, 312, 5, 22, 131, 3063, 4, 13, 589, 593, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 3, 10, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Hong Kong
- { 25, 6, 126, 168, 168, 178, 178, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 377, 398, 153, 27, 1902, 1902, 1962, 1962, 1949, 1949, 58, 55, 312, 5, 22, 134, 3099, 4, 13, 589, 602, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 4, 12, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Macau
- { 25, 6, 208, 168, 168, 173, 173, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 406, 390, 153, 27, 1902, 1902, 1962, 1962, 1949, 1949, 58, 55, 0, 5, 22, 6, 3111, 4, 13, 589, 611, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 12, 4, 6, 4, 2, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Taiwan
- { 26, 7, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Corsican/Latin/France
- { 27, 7, 54, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 439, 54, 0, 1982, 1982, 2039, 2039, 2066, 2079, 0, 0, 315, 5, 22, 138, 3123, 19, 0, 613, 621, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 12, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 3, 59, 5, 0, 8, 8, {72,82,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Croatia
- { 27, 7, 27, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 452, 54, 0, 1982, 1982, 2039, 2039, 2079, 2079, 0, 0, 315, 5, 22, 141, 3182, 19, 0, 613, 629, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 9, 12, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 2, 84, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Bosnia And Herzegowina
- { 28, 7, 57, 0, 0, 183, 183, 6, 1, 14, 2, 3, 4, 5, 9, 40, 10, 46, 12, 461, 166, 1, 1, 2092, 2092, 2140, 2140, 2160, 2160, 60, 57, 322, 5, 22, 143, 3266, 19, 0, 648, 655, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 9, 4, 48, 48, 20, 20, 13, 13, 4, 4, 5, 17, 23, 2, 67, 5, 0, 7, 5, {67,90,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Czech/Latin/Czech Republic
- { 29, 7, 58, 0, 0, 190, 190, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 478, 501, 166, 166, 2173, 2173, 2223, 2250, 2284, 2284, 0, 0, 0, 5, 22, 145, 3333, 19, 0, 660, 665, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 50, 50, 27, 34, 13, 13, 2, 2, 5, 17, 23, 3, 41, 5, 0, 5, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Denmark
- { 29, 7, 86, 0, 0, 190, 190, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 478, 501, 166, 166, 2173, 2173, 2223, 2250, 2284, 2284, 0, 0, 0, 5, 22, 145, 3333, 19, 0, 660, 672, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 50, 50, 27, 34, 13, 13, 2, 2, 5, 17, 23, 3, 41, 5, 0, 5, 8, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Greenland
- { 30, 7, 151, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 511, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 14, 3374, 8, 37, 680, 680, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 18, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Netherlands
- { 30, 7, 12, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 511, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 148, 3392, 8, 37, 680, 690, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 54, 5, 7, 10, 5, {65,87,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Aruba
- { 30, 7, 21, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 46, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 14, 3374, 8, 37, 680, 695, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 18, 5, 7, 10, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Belgium
- { 30, 7, 152, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 511, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 152, 3446, 8, 37, 680, 701, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 96, 5, 7, 10, 7, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Cura Sao
- { 30, 7, 202, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 511, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 6, 3542, 8, 37, 680, 708, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 57, 5, 7, 10, 8, {83,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Suriname
- { 30, 7, 255, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 511, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 6, 3599, 8, 37, 680, 716, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 60, 5, 7, 10, 19, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Bonaire
- { 30, 7, 256, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 97, 511, 0, 0, 2297, 2297, 2355, 2355, 2375, 2375, 64, 61, 0, 5, 22, 152, 3446, 8, 37, 680, 735, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 96, 5, 7, 10, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Sint Maarten
- { 31, 7, 225, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 747, 763, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 16, 13, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States
- { 31, 3, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 156, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Deseret/United States
- { 31, 7, 4, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 776, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/American Samoa
- { 31, 7, 7, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 790, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 8, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Anguilla
- { 31, 7, 9, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 798, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 17, {88,67,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Antigua And Barbuda
- { 31, 7, 13, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 0, 259, 10, 22, 0, 0, 56, 56, 2388, 2388, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 815, 815, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 27, 27, 24, 24, 2, 2, 5, 17, 23, 1, 58, 4, 6, 18, 9, {65,85,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Australia
- { 31, 7, 14, 0, 0, 208, 208, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 8, 0, 756, 833, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Austria
- { 31, 7, 16, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3840, 4, 13, 756, 840, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 7, {66,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Bahamas
- { 31, 7, 19, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3892, 4, 13, 756, 847, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 55, 4, 6, 7, 8, {66,66,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Barbados
- { 31, 7, 21, 0, 0, 208, 208, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 19, 0, 756, 855, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Belgium
- { 31, 7, 22, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 527, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3947, 4, 13, 756, 862, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 46, 4, 6, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Belize
- { 31, 7, 24, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3993, 4, 13, 756, 868, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 7, {66,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Bermuda
- { 31, 7, 28, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 527, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 136, 4045, 4, 13, 756, 875, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 49, 4, 6, 7, 8, {66,87,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Botswana
- { 31, 7, 31, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 883, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 30, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Indian Ocean Territory
- { 31, 7, 35, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 0, 0, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 159, 4094, 4, 13, 756, 913, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 52, 4, 6, 7, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Burundi
- { 31, 7, 37, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 32, 4146, 4, 13, 756, 920, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 82, 4, 6, 7, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cameroon
- { 31, 7, 38, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 27, 70, 10, 22, 0, 0, 2412, 2412, 83, 83, 64, 61, 0, 5, 22, 6, 4228, 4, 13, 928, 944, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 12, 7, 56, 56, 34, 34, 13, 13, 4, 4, 5, 17, 23, 1, 52, 4, 6, 16, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Canada
- { 31, 7, 40, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4280, 4, 13, 756, 950, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 14, {75,89,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cayman Islands
- { 31, 7, 45, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 756, 964, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 58, 4, 6, 7, 16, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Christmas Island
- { 31, 7, 46, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 756, 980, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 58, 4, 6, 7, 23, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cocos Islands
- { 31, 7, 51, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4350, 4, 13, 756, 1003, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 61, 4, 6, 7, 12, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cook Islands
- { 31, 7, 56, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 4, 13, 756, 1015, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 4, 6, 7, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cyprus
- { 31, 7, 58, 0, 0, 208, 208, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 166, 166, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 145, 4411, 19, 0, 756, 1021, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 43, 5, 0, 7, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Denmark
- { 31, 7, 60, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 1028, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 8, {88,67,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Dominica
- { 31, 7, 67, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 39, 4454, 4, 13, 756, 1036, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 49, 4, 6, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Eritrea
- { 31, 7, 70, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 4503, 4, 13, 756, 1043, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 73, 4, 6, 7, 16, {70,75,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Falkland Islands
- { 31, 7, 72, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4576, 4, 13, 756, 1059, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 46, 4, 6, 7, 4, {70,74,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Fiji
- { 31, 7, 73, 0, 0, 208, 208, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 176, 167, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 19, 0, 756, 1063, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Finland
- { 31, 7, 75, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 4622, 4, 13, 756, 1070, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 31, 4, 6, 7, 8, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Guernsey
- { 31, 7, 80, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 162, 4653, 4, 13, 756, 1078, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 49, 4, 6, 7, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gambia
- { 31, 7, 82, 0, 0, 208, 208, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 19, 0, 756, 1084, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Germany
- { 31, 7, 83, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 163, 4702, 4, 13, 756, 1091, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 46, 4, 6, 7, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Ghana
- { 31, 7, 84, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 4748, 4, 13, 756, 1096, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 9, {71,73,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gibraltar
- { 31, 7, 87, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 1105, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 7, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Grenada
- { 31, 7, 89, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 1112, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 4, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Guam
- { 31, 7, 93, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4800, 4, 13, 756, 1116, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 55, 4, 6, 7, 6, {71,89,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Guyana
- { 31, 7, 97, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 398, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 131, 4855, 4, 13, 756, 1122, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 55, 4, 6, 7, 19, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Hong Kong
- { 31, 7, 100, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 119, 4910, 4, 13, 756, 891, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 43, 4, 6, 7, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // English/Latin/India
- { 31, 7, 104, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 45, 0, 0, 0, 0, 56, 56, 83, 83, 64, 61, 0, 5, 22, 14, 3821, 4, 13, 756, 1141, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 56, 56, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 19, 4, 6, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Ireland
- { 31, 7, 105, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 1, 1, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 47, 4953, 4, 13, 756, 1148, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 61, 4, 6, 7, 6, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // English/Latin/Israel
- { 31, 7, 107, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 259, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 5014, 4, 13, 756, 1154, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 7, {74,77,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Jamaica
- { 31, 7, 111, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 2, 5066, 4, 13, 756, 1161, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 52, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Kenya
- { 31, 7, 112, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 756, 1166, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 58, 4, 6, 7, 8, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Kiribati
- { 31, 7, 120, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 5, 5118, 4, 13, 756, 1174, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 60, 4, 6, 7, 7, {90,65,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Lesotho
- { 31, 7, 121, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 5178, 4, 13, 756, 1181, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 7, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Liberia
- { 31, 7, 126, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 134, 5230, 4, 13, 756, 1188, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 52, 4, 6, 7, 15, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Macau
- { 31, 7, 128, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 166, 5282, 4, 13, 756, 1203, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 53, 4, 6, 7, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Madagascar
- { 31, 7, 129, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 142, 5335, 4, 13, 756, 1213, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 52, 4, 6, 7, 6, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malawi
- { 31, 7, 130, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 168, 5387, 4, 13, 756, 1219, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 58, 4, 6, 7, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malaysia
- { 31, 7, 133, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 4, 13, 756, 1227, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 4, 6, 7, 5, {69,85,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Malta
- { 31, 7, 134, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 1232, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 16, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Marshall Islands
- { 31, 7, 137, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 170, 5445, 4, 13, 756, 1248, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 52, 4, 6, 7, 9, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Mauritius
- { 31, 7, 140, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 1257, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 10, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Micronesia
- { 31, 7, 144, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 1267, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 10, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Montserrat
- { 31, 7, 148, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 5497, 4, 13, 756, 1277, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 7, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Namibia
- { 31, 7, 149, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 756, 1284, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 58, 4, 6, 7, 5, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Nauru
- { 31, 7, 151, 0, 0, 208, 208, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 8, 37, 756, 1289, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 5, 7, 7, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Netherlands
- { 31, 7, 154, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 46, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4350, 4, 13, 756, 1300, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 61, 4, 6, 7, 11, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/New Zealand
- { 31, 7, 157, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 172, 5549, 4, 13, 756, 1311, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 49, 4, 6, 7, 7, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Nigeria
- { 31, 7, 158, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4350, 4, 13, 756, 1318, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 61, 4, 6, 7, 4, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Niue
- { 31, 7, 159, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 756, 1322, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 58, 4, 6, 7, 14, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Norfolk Island
- { 31, 7, 160, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 1336, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 24, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Northern Mariana Islands
- { 31, 7, 163, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 170, 5598, 4, 13, 756, 1360, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 52, 4, 6, 7, 8, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Pakistan
- { 31, 7, 164, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 1368, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 5, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Palau
- { 31, 7, 167, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 2, 5650, 4, 13, 756, 1373, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 72, 4, 6, 7, 16, {80,71,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Papua New Guinea
- { 31, 7, 170, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 173, 5722, 4, 13, 756, 1389, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 11, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Philippines
- { 31, 7, 171, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4350, 4, 13, 756, 1400, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 61, 4, 6, 7, 16, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Pitcairn
- { 31, 7, 174, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 1416, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Puerto Rico
- { 31, 7, 179, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 174, 5774, 4, 13, 756, 1427, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 46, 4, 6, 7, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Rwanda
- { 31, 7, 180, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 1433, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 16, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Kitts And Nevis
- { 31, 7, 181, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 1449, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 8, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Lucia
- { 31, 7, 182, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3693, 4, 13, 756, 1457, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 70, 4, 6, 7, 23, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Vincent And The Grenadines
- { 31, 7, 183, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 176, 5820, 4, 13, 756, 785, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 39, 4, 6, 7, 5, {87,83,84}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Samoa
- { 31, 7, 188, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 179, 5859, 4, 13, 756, 1480, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 58, 4, 6, 7, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Seychelles
- { 31, 7, 189, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 7, 5917, 4, 13, 756, 1490, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 67, 4, 6, 7, 12, {83,76,76}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sierra Leone
- { 31, 7, 190, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 259, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 5984, 4, 13, 756, 1502, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 55, 4, 6, 7, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Singapore
- { 31, 7, 192, 0, 0, 208, 208, 6, 1, 0, 2, 3, 4, 5, 6, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 14, 3821, 19, 24, 756, 1511, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 19, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Slovenia
- { 31, 7, 193, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 6039, 4, 13, 756, 1519, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 73, 4, 6, 7, 15, {83,66,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Solomon Islands
- { 31, 7, 195, 0, 0, 208, 208, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 527, 545, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 5, 5118, 4, 13, 756, 1534, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 60, 4, 6, 7, 12, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/South Africa
- { 31, 7, 199, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 6112, 4, 13, 756, 1546, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 9, {83,72,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Helena
- { 31, 7, 201, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 0, 6164, 4, 13, 756, 1555, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 49, 4, 6, 7, 5, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // English/Latin/Sudan
- { 31, 7, 204, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 181, 6213, 4, 13, 756, 1560, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 52, 4, 6, 7, 8, {83,90,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Swaziland
- { 31, 7, 205, 0, 0, 208, 208, 6, 1, 14, 2, 3, 4, 5, 47, 10, 11, 12, 13, 0, 70, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 145, 6265, 19, 0, 756, 1568, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 46, 5, 0, 7, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sweden
- { 31, 7, 206, 0, 0, 208, 208, 6, 0, 13, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 0, 6311, 8, 44, 756, 1574, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 40, 5, 5, 7, 11, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Switzerland
- { 31, 7, 210, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 182, 6351, 4, 13, 756, 1585, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 61, 4, 6, 7, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tanzania
- { 31, 7, 213, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 4350, 4, 13, 756, 1593, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 61, 4, 6, 7, 7, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tokelau
- { 31, 7, 214, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 185, 6412, 4, 13, 756, 1600, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 48, 4, 6, 7, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tonga
- { 31, 7, 215, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 6460, 4, 13, 756, 1605, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 79, 4, 6, 7, 17, {84,84,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Trinidad And Tobago
- { 31, 7, 219, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 1622, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Turks And Caicos Islands
- { 31, 7, 220, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 6, 3763, 4, 13, 756, 1644, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 58, 4, 6, 7, 6, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tuvalu
- { 31, 7, 221, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 187, 6539, 4, 13, 756, 1650, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 55, 4, 6, 7, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // English/Latin/Uganda
- { 31, 7, 223, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 190, 6594, 4, 13, 756, 1656, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 54, 4, 6, 7, 20, {65,69,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // English/Latin/United Arab Emirates
- { 31, 7, 224, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 6648, 4, 13, 1676, 1691, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 46, 4, 6, 15, 14, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/United Kingdom
- { 31, 7, 226, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 1705, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 21, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States Minor Outlying Islands
- { 31, 7, 229, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 193, 6694, 4, 13, 756, 1726, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 43, 4, 6, 7, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Vanuatu
- { 31, 7, 233, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 1733, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Virgin Islands
- { 31, 7, 234, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 3659, 4, 13, 756, 1755, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 34, 4, 6, 7, 19, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States Virgin Islands
- { 31, 7, 239, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 2, 6737, 4, 13, 756, 1774, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 49, 4, 6, 7, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Zambia
- { 31, 7, 240, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 527, 398, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 1780, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Zimbabwe
- { 31, 7, 249, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 156, 3659, 4, 13, 756, 1788, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 34, 4, 6, 7, 12, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Diego Garcia
- { 31, 7, 251, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 4622, 4, 13, 756, 1800, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 31, 4, 6, 7, 11, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Isle Of Man
- { 31, 7, 252, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 4622, 4, 13, 756, 1811, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 31, 4, 6, 7, 6, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Jersey
- { 31, 7, 254, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 117, 6786, 4, 13, 756, 1817, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 67, 4, 6, 7, 11, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/South Sudan
- { 31, 7, 256, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 152, 6853, 4, 13, 756, 1828, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 94, 4, 6, 7, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sint Maarten
- { 31, 7, 260, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 0, 0, 4, 13, 756, 1840, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 4, 6, 7, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/World
- { 31, 7, 261, 0, 0, 208, 208, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 0, 0, 56, 56, 83, 83, 68, 65, 0, 5, 22, 0, 0, 19, 0, 756, 1845, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 5, 0, 7, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Europe
- { 32, 7, 260, 0, 0, 217, 217, 6, 1, 14, 2, 3, 38, 5, 9, 10, 11, 12, 13, 555, 72, 185, 0, 2446, 2446, 2496, 2496, 2516, 2516, 70, 67, 327, 5, 22, 0, 0, 8, 0, 1851, 1860, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 25, 5, 50, 50, 20, 20, 13, 13, 3, 3, 6, 17, 23, 0, 0, 5, 0, 9, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Esperanto/Latin/World
- { 33, 7, 68, 0, 0, 226, 226, 6, 1, 14, 2, 3, 38, 5, 47, 40, 10, 46, 12, 420, 166, 0, 0, 2529, 2529, 2591, 2591, 2591, 2591, 0, 0, 333, 5, 22, 14, 6947, 19, 24, 1865, 1870, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 13, 13, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Estonian/Latin/Estonia
- { 34, 7, 71, 0, 0, 190, 190, 6, 1, 0, 2, 3, 38, 5, 9, 10, 11, 12, 13, 420, 166, 0, 0, 2604, 2604, 2677, 2704, 2738, 2738, 0, 0, 339, 5, 22, 145, 6966, 19, 24, 1875, 1883, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 2, 42, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Faroe Islands
- { 34, 7, 58, 0, 0, 190, 190, 6, 1, 0, 2, 3, 38, 5, 9, 10, 11, 12, 13, 420, 166, 0, 0, 2604, 2604, 2677, 2704, 2738, 2738, 0, 0, 339, 5, 22, 145, 6966, 19, 24, 1875, 665, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 3, 42, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Denmark
- { 36, 7, 73, 0, 0, 226, 226, 6, 1, 14, 2, 3, 38, 5, 9, 11, 11, 13, 13, 461, 581, 176, 167, 2751, 2817, 2897, 2897, 2917, 2917, 73, 70, 342, 347, 364, 14, 7008, 19, 0, 1890, 1895, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 9, 4, 66, 80, 20, 20, 13, 13, 3, 3, 5, 17, 23, 1, 19, 5, 0, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Finnish/Latin/Finland
- { 37, 7, 74, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 1908, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/France
- { 37, 7, 3, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 195, 7027, 19, 24, 1900, 1914, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 50, 5, 7, 8, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // French/Latin/Algeria
- { 37, 7, 21, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 46, 210, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 1921, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 23, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Belgium
- { 37, 7, 23, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 1929, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Benin
- { 37, 7, 34, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 1934, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burkina Faso
- { 37, 7, 35, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 159, 7135, 19, 24, 1900, 913, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 52, 5, 7, 8, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burundi
- { 37, 7, 37, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 76, 73, 387, 213, 230, 32, 7187, 19, 24, 1900, 1946, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 5, 4, 6, 17, 23, 4, 55, 5, 7, 8, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Cameroon
- { 37, 7, 38, 0, 0, 234, 234, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 11, 10, 97, 70, 233, 233, 2930, 2930, 2981, 2981, 3015, 3015, 64, 61, 387, 213, 230, 6, 7242, 19, 24, 1954, 944, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 24, 9, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 1, 53, 5, 7, 17, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // French/Latin/Canada
- { 37, 7, 41, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 32, 7187, 19, 24, 1900, 1971, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 55, 5, 7, 8, 25, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Central African Republic
- { 37, 7, 42, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 32, 7187, 19, 24, 1900, 1996, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 55, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Chad
- { 37, 7, 48, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7295, 19, 24, 1900, 2001, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 50, 5, 7, 8, 7, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Comoros
- { 37, 7, 49, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 32, 7345, 19, 24, 1900, 2008, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 52, 5, 7, 8, 14, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo Kinshasa
- { 37, 7, 50, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 32, 7187, 19, 24, 1900, 2022, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 55, 5, 7, 8, 17, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo Brazzaville
- { 37, 7, 53, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 2039, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 13, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Ivory Coast
- { 37, 7, 59, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 36, 7397, 19, 24, 1900, 2052, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 56, 5, 7, 8, 8, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // French/Latin/Djibouti
- { 37, 7, 66, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 32, 7187, 19, 24, 1900, 2060, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 55, 5, 7, 8, 18, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Equatorial Guinea
- { 37, 7, 76, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2078, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Guiana
- { 37, 7, 77, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 197, 7453, 19, 24, 1900, 2094, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 34, 5, 7, 8, 19, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Polynesia
- { 37, 7, 79, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 32, 7187, 19, 24, 1900, 2113, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 55, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Gabon
- { 37, 7, 88, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2118, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guadeloupe
- { 37, 7, 91, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 201, 7487, 19, 24, 1900, 2060, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 47, 5, 7, 8, 6, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guinea
- { 37, 7, 94, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 163, 7534, 19, 24, 1900, 2128, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 56, 5, 7, 8, 5, {72,84,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Haiti
- { 37, 7, 125, 0, 0, 234, 234, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2133, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Luxembourg
- { 37, 7, 128, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 166, 7590, 19, 24, 1900, 1203, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 53, 5, 7, 8, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Madagascar
- { 37, 7, 132, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 2143, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mali
- { 37, 7, 135, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2147, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Martinique
- { 37, 7, 136, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 203, 7643, 19, 24, 1900, 2157, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 65, 5, 7, 8, 10, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritania
- { 37, 7, 137, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 170, 7708, 19, 24, 1900, 2167, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 62, 5, 7, 8, 7, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritius
- { 37, 7, 138, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2174, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mayotte
- { 37, 7, 142, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2181, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Monaco
- { 37, 7, 145, 0, 0, 234, 234, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 64, 61, 387, 213, 230, 205, 7770, 19, 24, 1900, 2187, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 3, 53, 5, 7, 8, 5, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Morocco
- { 37, 7, 153, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 197, 7453, 19, 24, 1900, 2192, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 34, 5, 7, 8, 18, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/New Caledonia
- { 37, 7, 156, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 1311, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Niger
- { 37, 7, 176, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2210, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Reunion
- { 37, 7, 179, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 174, 7823, 19, 24, 1900, 1427, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 49, 5, 7, 8, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Rwanda
- { 37, 7, 187, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 2220, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Senegal
- { 37, 7, 188, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 179, 7872, 19, 24, 1900, 1480, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 70, 5, 7, 8, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Seychelles
- { 37, 7, 200, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2227, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 24, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Pierre And Miquelon
- { 37, 7, 206, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 17, 18, 0, 166, 257, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 208, 7942, 19, 24, 2251, 2266, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 14, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 44, 5, 7, 15, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Switzerland
- { 37, 7, 207, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 211, 7986, 19, 24, 1900, 2272, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 50, 5, 7, 8, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // French/Latin/Syria
- { 37, 7, 212, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 33, 7077, 19, 24, 1900, 2277, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 58, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Togo
- { 37, 7, 216, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 213, 8036, 19, 24, 1900, 2281, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 50, 5, 7, 8, 7, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Tunisia
- { 37, 7, 229, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 10, 22, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 193, 8086, 19, 24, 1900, 1726, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 50, 5, 7, 8, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Vanuatu
- { 37, 7, 235, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 197, 7453, 19, 24, 1900, 2288, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 34, 5, 7, 8, 16, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Wallis And Futuna Islands
- { 37, 7, 244, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2304, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Barthelemy
- { 37, 7, 245, 0, 0, 234, 234, 6, 1, 51, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 45, 0, 0, 2930, 2930, 2981, 2981, 3015, 3015, 0, 0, 387, 213, 230, 14, 3032, 19, 24, 1900, 2320, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 19, 5, 7, 8, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Martin
- { 38, 7, 151, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 347, 0, 0, 3028, 3028, 3081, 3081, 83, 83, 0, 0, 0, 5, 22, 14, 3374, 8, 37, 2332, 2337, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 7, 5, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Western Frisian/Latin/Netherlands
- { 39, 7, 224, 0, 0, 242, 242, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 589, 45, 0, 0, 3101, 3101, 3169, 3169, 3196, 3196, 5, 77, 393, 5, 22, 117, 8136, 4, 13, 2345, 2353, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 10, 10, 5, 68, 68, 27, 27, 13, 13, 1, 1, 6, 17, 23, 1, 85, 4, 6, 8, 22, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Gaelic/Latin/United Kingdom
- { 40, 7, 197, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 45, 0, 0, 3209, 3257, 3305, 3339, 3373, 3386, 64, 61, 0, 5, 22, 14, 3032, 19, 0, 2375, 2381, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 48, 48, 34, 34, 13, 20, 4, 4, 5, 17, 23, 1, 19, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Galician/Latin/Spain
- { 41, 15, 81, 0, 0, 259, 259, 6, 1, 14, 2, 3, 4, 5, 9, 40, 10, 15, 16, 637, 166, 0, 0, 3406, 3406, 3467, 3467, 3494, 3494, 0, 0, 399, 404, 22, 215, 8221, 19, 0, 2387, 2394, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 61, 61, 27, 27, 13, 13, 2, 2, 5, 37, 23, 1, 42, 5, 0, 7, 10, {71,69,76}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Georgian/Georgian/Georgia
- { 42, 7, 82, 0, 0, 267, 267, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 14, 8263, 19, 0, 2404, 2411, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 5, 0, 7, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Germany
- { 42, 7, 14, 0, 0, 267, 267, 6, 1, 14, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 14, 8263, 19, 0, 2422, 2422, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 5, 0, 24, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Austria
- { 42, 7, 21, 0, 0, 267, 267, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 14, 8263, 19, 0, 2404, 2446, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Belgium
- { 42, 7, 106, 0, 0, 267, 267, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 14, 8263, 19, 0, 2404, 2453, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Italy
- { 42, 7, 123, 0, 0, 267, 267, 6, 0, 13, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 208, 8281, 19, 0, 2404, 2460, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 3, 57, 5, 0, 7, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Liechtenstein
- { 42, 7, 125, 0, 0, 267, 267, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 14, 8263, 19, 0, 2404, 2473, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 5, 0, 7, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Luxembourg
- { 42, 7, 206, 0, 0, 267, 267, 6, 0, 13, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0, 3507, 3507, 3566, 3586, 3613, 3613, 0, 0, 441, 5, 22, 208, 8281, 19, 0, 2482, 2482, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 3, 57, 5, 0, 21, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Switzerland
- { 43, 16, 85, 0, 0, 276, 276, 6, 1, 0, 2, 3, 4, 5, 6, 15, 16, 10, 11, 0, 259, 10, 22, 3626, 3626, 3680, 3680, 3707, 3707, 81, 78, 0, 5, 22, 14, 8338, 19, 0, 2503, 2511, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 54, 54, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 18, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Greek/Greek/Greece
- { 43, 16, 56, 0, 0, 276, 276, 6, 1, 0, 2, 3, 4, 5, 6, 15, 16, 10, 11, 0, 259, 10, 22, 3626, 3626, 3680, 3680, 3707, 3707, 81, 78, 0, 5, 22, 14, 8338, 19, 0, 2503, 2517, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 54, 54, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 18, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Greek/Greek/Cyprus
- { 44, 7, 86, 0, 0, 285, 285, 6, 1, 0, 2, 3, 38, 5, 47, 16, 15, 18, 17, 80, 70, 166, 166, 3720, 3720, 3817, 3817, 3844, 3844, 0, 0, 0, 5, 22, 145, 8356, 4, 49, 2523, 2534, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 97, 97, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 61, 4, 5, 11, 16, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Greenlandic/Latin/Greenland
- { 45, 7, 168, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 216, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {80,89,71}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Guarani/Latin/Paraguay
- { 46, 17, 100, 0, 0, 296, 296, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 259, 271, 284, 3857, 3857, 3909, 3909, 3940, 3940, 0, 0, 446, 450, 22, 119, 8417, 4, 13, 2550, 2557, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 8, 52, 52, 31, 31, 18, 18, 2, 2, 4, 19, 23, 1, 45, 4, 6, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Gujarati/Gujarati/India
- { 47, 7, 157, 0, 0, 305, 305, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 656, 259, 0, 0, 3958, 3958, 4009, 4009, 4036, 4036, 85, 82, 0, 5, 22, 172, 8462, 8, 0, 2561, 2566, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 51, 51, 27, 27, 13, 13, 6, 5, 4, 17, 23, 1, 53, 5, 0, 5, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Nigeria
- { 47, 1, 157, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 172, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Arabic/Nigeria
- { 47, 7, 83, 0, 0, 305, 305, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 656, 259, 10, 22, 3958, 3958, 4009, 4009, 4036, 4036, 85, 82, 0, 5, 22, 163, 0, 8, 0, 2561, 2574, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 51, 51, 27, 27, 13, 13, 6, 5, 4, 17, 23, 3, 0, 5, 0, 5, 4, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Ghana
- { 47, 7, 156, 0, 0, 305, 305, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 656, 259, 0, 0, 3958, 3958, 4009, 4009, 4036, 4036, 85, 82, 0, 5, 22, 33, 8515, 8, 0, 2561, 2578, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 51, 51, 27, 27, 13, 13, 6, 5, 4, 17, 23, 3, 29, 5, 0, 5, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Niger
- { 48, 18, 105, 0, 0, 313, 313, 6, 0, 1, 2, 3, 33, 35, 9, 11, 11, 13, 13, 673, 581, 1, 1, 4049, 4049, 4113, 4113, 4158, 4158, 91, 87, 469, 5, 22, 47, 8544, 19, 0, 2583, 2588, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 8, 9, 4, 64, 64, 45, 45, 20, 20, 6, 5, 4, 17, 23, 1, 53, 5, 0, 5, 5, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Hebrew/Hebrew/Israel
- { 49, 13, 100, 0, 0, 319, 328, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 259, 10, 22, 4178, 4178, 4230, 4230, 4261, 4261, 68, 65, 473, 5, 22, 119, 8597, 4, 0, 2593, 2599, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 41, 4, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Hindi/Devanagari/India
- { 50, 7, 98, 0, 0, 336, 336, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 16, 15, 691, 710, 1, 1, 4279, 4279, 4330, 4330, 4348, 4348, 97, 92, 477, 5, 22, 217, 8638, 19, 0, 2603, 2609, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 9, 4, 51, 51, 18, 18, 16, 16, 3, 3, 4, 17, 23, 2, 45, 5, 0, 6, 12, {72,85,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Hungarian/Latin/Hungary
- { 51, 7, 99, 0, 0, 190, 190, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 581, 0, 0, 4364, 4364, 4444, 4444, 4478, 4478, 100, 95, 481, 5, 22, 219, 8683, 19, 0, 2621, 2629, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 80, 80, 34, 34, 13, 13, 4, 4, 4, 17, 23, 3, 48, 5, 0, 8, 6, {73,83,75}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Icelandic/Latin/Iceland
- { 52, 7, 101, 0, 0, 344, 354, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 527, 45, 166, 166, 4491, 4491, 4533, 4533, 4560, 4560, 0, 0, 0, 5, 22, 222, 8731, 4, 0, 2635, 2635, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 42, 42, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 38, 4, 0, 9, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Indonesian/Latin/Indonesia
- { 53, 7, 260, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 723, 511, 0, 0, 4573, 4573, 4629, 4629, 4656, 4656, 0, 0, 0, 5, 22, 0, 0, 8, 37, 2644, 2655, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 5, 7, 11, 5, {0,0,0}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Interlingua/Latin/World
- { 55, 44, 38, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 224, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Canadian Aboriginal/Canada
- { 55, 7, 38, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 224, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Latin/Canada
- { 57, 7, 104, 0, 0, 363, 242, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 45, 0, 0, 4669, 4669, 4743, 4743, 4779, 4779, 104, 99, 485, 5, 22, 14, 8769, 4, 13, 2660, 2667, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 30, 4, 6, 7, 4, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/Ireland
- { 57, 7, 224, 0, 0, 363, 242, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 45, 0, 0, 4669, 4669, 4743, 4743, 4779, 4779, 104, 99, 485, 5, 22, 117, 8799, 4, 13, 2660, 2671, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 94, 4, 6, 7, 19, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/United Kingdom
- { 58, 7, 106, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 45, 0, 0, 4792, 4792, 4848, 4848, 4875, 4875, 0, 0, 0, 5, 22, 14, 3032, 19, 0, 2690, 2698, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Italy
- { 58, 7, 184, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 45, 0, 0, 4792, 4792, 4848, 4848, 4875, 4875, 0, 0, 0, 5, 22, 14, 3032, 19, 0, 2690, 2704, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 0, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/San Marino
- { 58, 7, 206, 0, 0, 252, 252, 6, 0, 13, 2, 3, 4, 5, 9, 15, 16, 17, 18, 0, 166, 0, 0, 4792, 4792, 4848, 4848, 4875, 4875, 0, 0, 0, 5, 22, 0, 8893, 19, 0, 2690, 2714, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 52, 5, 0, 8, 8, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Switzerland
- { 58, 7, 230, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 45, 0, 0, 4792, 4792, 4848, 4848, 4875, 4875, 0, 0, 0, 5, 22, 14, 3032, 19, 0, 2690, 2722, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 0, 8, 18, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Vatican City State
- { 59, 19, 108, 168, 168, 168, 168, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 377, 545, 292, 1, 4888, 4888, 4915, 4915, 4915, 4915, 108, 103, 491, 494, 22, 227, 8945, 4, 13, 2740, 2740, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 10, 10, 4, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 10, 4, 6, 3, 2, {74,80,89}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Japanese/Japanese/Japan
- { 60, 7, 101, 0, 0, 374, 384, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 511, 0, 0, 4928, 4928, 4968, 4968, 4996, 4996, 110, 105, 511, 5, 22, 222, 8731, 8, 0, 2743, 2747, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 40, 40, 28, 28, 13, 13, 4, 5, 4, 17, 23, 2, 38, 5, 0, 4, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Javanese/Latin/Indonesia
- { 61, 21, 100, 0, 0, 393, 405, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 259, 271, 284, 5009, 5009, 5062, 5062, 5094, 5094, 114, 110, 515, 523, 22, 119, 8955, 4, 13, 2756, 2761, 6, 6, 12, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 8, 53, 53, 32, 32, 19, 19, 9, 7, 8, 35, 23, 1, 48, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kannada/Kannada/India
- { 62, 1, 100, 0, 0, 0, 0, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 27, 521, 10, 22, 5113, 5113, 5164, 5164, 5213, 5213, 0, 0, 0, 5, 22, 119, 9003, 8, 0, 2765, 2770, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 12, 7, 51, 51, 49, 49, 13, 13, 2, 2, 4, 17, 23, 1, 16, 5, 0, 5, 9, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Kashmiri/Arabic/India
- { 63, 2, 110, 0, 0, 0, 416, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 749, 166, 0, 0, 5226, 5226, 5281, 5281, 5301, 5301, 0, 0, 253, 558, 575, 228, 9019, 19, 0, 2779, 2789, 6, 6, 6, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 10, 5, 55, 55, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 57, 5, 0, 10, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kazakh/Cyrillic/Kazakhstan
- { 64, 7, 179, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 12, 13, 53, 70, 0, 0, 5314, 5314, 5397, 5397, 83, 83, 0, 0, 0, 5, 22, 174, 0, 8, 0, 2798, 2809, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 83, 83, 34, 34, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 11, 8, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kinyarwanda/Latin/Rwanda
- { 65, 2, 116, 0, 0, 426, 426, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 771, 259, 0, 0, 5431, 5431, 5487, 5487, 5524, 5524, 123, 117, 253, 598, 22, 229, 9076, 19, 0, 2817, 2825, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 10, 5, 56, 56, 37, 37, 13, 13, 5, 14, 4, 18, 23, 3, 51, 5, 0, 8, 10, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kirghiz/Cyrillic/Kyrgyzstan
- { 66, 22, 114, 0, 0, 436, 436, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 794, 810, 302, 315, 5537, 5537, 5564, 5564, 5564, 5564, 128, 131, 616, 5, 22, 232, 9127, 4, 13, 2835, 2838, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 18, 4, 6, 3, 4, {75,82,87}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Korean/Korean/South Korea
- { 66, 22, 113, 0, 0, 436, 436, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 794, 810, 302, 315, 5537, 5537, 5564, 5564, 5564, 5564, 128, 131, 616, 5, 22, 233, 9145, 4, 13, 2835, 2842, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 3, 38, 4, 6, 3, 11, {75,80,87}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Korean/Korean/North Korea
- { 67, 7, 217, 0, 0, 443, 443, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 5577, 5577, 5618, 5618, 5637, 5637, 130, 133, 0, 5, 22, 236, 0, 19, 24, 2853, 2858, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 41, 41, 19, 19, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 7, 5, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kurdish/Latin/Turkey
- { 68, 7, 35, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 11, 11, 13, 13, 97, 398, 0, 0, 5650, 5650, 5738, 5738, 83, 83, 132, 135, 0, 5, 22, 159, 9183, 0, 0, 2865, 2873, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 88, 88, 33, 33, 13, 13, 5, 5, 4, 17, 23, 3, 20, 4, 0, 8, 8, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Rundi/Latin/Burundi
- { 69, 23, 117, 0, 0, 0, 450, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 819, 398, 322, 1, 5771, 5771, 5827, 5827, 5862, 5862, 137, 140, 0, 5, 22, 237, 9203, 4, 44, 2881, 2881, 6, 6, 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 24, 4, 56, 56, 35, 35, 16, 16, 8, 8, 4, 17, 23, 1, 20, 4, 5, 3, 3, {76,65,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Lao/Lao/Laos
- { 71, 7, 118, 0, 0, 459, 459, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 838, 166, 0, 0, 5878, 5949, 6020, 6070, 6120, 6120, 145, 148, 619, 5, 22, 14, 9223, 19, 0, 2884, 2892, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 10, 5, 71, 71, 50, 50, 13, 13, 14, 11, 5, 17, 23, 1, 22, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Latvian/Latin/Latvia
- { 72, 7, 49, 0, 0, 467, 467, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0, 6133, 6133, 6232, 6232, 6259, 6259, 159, 159, 0, 5, 22, 32, 9245, 19, 0, 2899, 2906, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 30, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Congo Kinshasa
- { 72, 7, 6, 0, 0, 467, 467, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0, 6133, 6133, 6232, 6232, 6259, 6259, 159, 159, 0, 5, 22, 238, 9261, 19, 0, 2899, 2936, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Angola
- { 72, 7, 41, 0, 0, 467, 467, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0, 6133, 6133, 6232, 6232, 6259, 6259, 159, 159, 0, 5, 22, 32, 9277, 19, 0, 2899, 2942, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 4, 16, 5, 0, 7, 26, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Central African Republic
- { 72, 7, 50, 0, 0, 467, 467, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0, 6133, 6133, 6232, 6232, 6259, 6259, 159, 159, 0, 5, 22, 32, 9277, 19, 0, 2899, 2968, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 4, 16, 5, 0, 7, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Congo Brazzaville
- { 73, 7, 124, 0, 0, 476, 476, 6, 1, 14, 2, 3, 38, 5, 47, 40, 10, 40, 10, 864, 70, 0, 0, 6272, 6272, 6360, 6360, 6380, 6380, 167, 165, 624, 5, 22, 14, 9293, 19, 0, 2973, 2981, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 27, 10, 10, 5, 88, 88, 20, 20, 13, 13, 9, 6, 6, 17, 23, 1, 29, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lithuanian/Latin/Lithuania
- { 74, 2, 127, 0, 0, 113, 113, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 0, 113, 0, 0, 6393, 6393, 6446, 6480, 1486, 1486, 176, 171, 630, 5, 22, 240, 9322, 19, 0, 2988, 2998, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 34, 33, 13, 13, 10, 8, 5, 17, 23, 4, 55, 5, 0, 10, 18, {77,75,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Macedonian/Cyrillic/Macedonia
- { 75, 7, 128, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 70, 0, 0, 6513, 6513, 6572, 6572, 6605, 6605, 0, 0, 0, 5, 22, 166, 5291, 4, 0, 3016, 3024, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 59, 59, 33, 33, 13, 13, 2, 2, 4, 17, 23, 2, 6, 4, 0, 8, 12, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Malagasy/Latin/Madagascar
- { 76, 7, 130, 0, 0, 354, 354, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 46, 10, 22, 6618, 6618, 6660, 6660, 6687, 6687, 186, 179, 619, 5, 22, 168, 9377, 4, 13, 3036, 1219, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 38, 4, 6, 6, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Malaysia
- { 76, 1, 130, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 168, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Arabic/Malaysia
- { 76, 7, 32, 0, 0, 354, 354, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 85, 46, 10, 22, 6618, 6618, 6660, 6660, 6687, 6687, 186, 179, 619, 5, 22, 6, 9415, 4, 13, 3036, 3042, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 30, 4, 6, 6, 6, {66,78,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Brunei
- { 76, 7, 190, 0, 0, 354, 354, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 46, 10, 22, 6618, 6618, 6660, 6660, 6687, 6687, 186, 179, 619, 5, 22, 6, 9445, 4, 13, 3036, 3048, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 36, 4, 6, 6, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Singapore
- { 77, 24, 100, 0, 0, 484, 497, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 891, 259, 10, 22, 6700, 6776, 6851, 6851, 6891, 6912, 0, 0, 635, 641, 22, 119, 9481, 4, 13, 3057, 3063, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 76, 75, 40, 40, 21, 20, 2, 2, 6, 27, 23, 1, 39, 4, 6, 6, 6, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Malayalam/Malayalam/India
- { 78, 7, 133, 0, 0, 509, 517, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 909, 45, 0, 0, 6932, 6932, 6994, 6994, 7021, 7041, 0, 0, 0, 5, 22, 14, 9520, 4, 0, 3069, 1227, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 62, 62, 27, 27, 20, 19, 2, 2, 4, 17, 23, 1, 26, 4, 0, 5, 5, {69,85,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Maltese/Latin/Malta
- { 79, 7, 154, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 511, 10, 22, 7060, 7060, 7106, 7106, 7132, 7132, 0, 0, 0, 5, 22, 6, 9546, 8, 0, 3074, 3079, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 46, 46, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 36, 5, 0, 5, 8, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Maori/Latin/New Zealand
- { 80, 13, 100, 0, 0, 524, 524, 6, 0, 1, 2, 60, 4, 5, 9, 10, 11, 12, 13, 174, 259, 10, 22, 7145, 7145, 7197, 7197, 4261, 4261, 188, 182, 473, 5, 22, 119, 9582, 4, 13, 3087, 2599, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 52, 52, 31, 31, 18, 18, 5, 4, 4, 17, 23, 1, 42, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Marathi/Devanagari/India
- { 82, 2, 143, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 932, 967, 54, 0, 7228, 7270, 7312, 7312, 7312, 7312, 193, 186, 253, 668, 22, 244, 9624, 8, 0, 3092, 3098, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 10, 12, 5, 42, 42, 20, 20, 20, 20, 4, 4, 4, 17, 23, 1, 45, 5, 0, 6, 6, {77,78,84}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Mongolian/Cyrillic/Mongolia
- { 82, 8, 44, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 245, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Mongolian/Mongolian/China
- { 84, 13, 150, 533, 0, 538, 538, 6, 0, 1, 2, 60, 4, 5, 9, 10, 11, 12, 13, 53, 253, 0, 0, 7332, 7332, 7385, 7385, 7417, 7417, 197, 190, 473, 685, 22, 248, 9669, 8, 0, 3104, 3104, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 4, 48, 5, 0, 6, 5, {78,80,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Nepali/Devanagari/Nepal
- { 84, 13, 100, 533, 0, 538, 538, 6, 0, 1, 2, 60, 4, 5, 9, 10, 11, 12, 13, 53, 253, 10, 22, 7332, 7332, 7385, 7385, 7417, 7417, 197, 190, 473, 685, 22, 119, 9717, 8, 0, 3104, 2599, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 1, 48, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Nepali/Devanagari/India
- { 85, 7, 161, 0, 0, 190, 190, 6, 1, 14, 2, 3, 38, 5, 9, 15, 16, 12, 13, 461, 501, 0, 0, 2173, 2173, 2250, 2250, 2284, 2284, 64, 61, 0, 5, 22, 145, 9765, 8, 0, 3110, 3122, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 43, 5, 0, 12, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Norway
- { 85, 7, 203, 0, 0, 190, 190, 6, 1, 14, 2, 3, 38, 5, 9, 15, 16, 12, 13, 461, 501, 0, 0, 2173, 2173, 2250, 2250, 2284, 2284, 64, 61, 0, 5, 22, 145, 9765, 8, 0, 3110, 3127, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 43, 5, 0, 12, 21, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Svalbard And Jan Mayen Islands
- { 86, 7, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Occitan/Latin/France
- { 87, 26, 100, 0, 0, 545, 553, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22, 7434, 7434, 7487, 7487, 7519, 7519, 0, 0, 704, 5, 22, 119, 9808, 4, 13, 3148, 3153, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 53, 53, 32, 32, 17, 17, 2, 2, 5, 17, 23, 1, 42, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Oriya/Oriya/India
- { 88, 1, 1, 560, 560, 566, 575, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 977, 390, 55, 1, 7536, 7536, 7536, 7536, 83, 83, 206, 197, 709, 5, 22, 252, 9850, 4, 13, 3157, 3161, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 11, 4, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 1, 24, 4, 6, 4, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Pashto/Arabic/Afghanistan
- { 88, 1, 163, 560, 560, 566, 575, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 977, 390, 10, 22, 7536, 7536, 7536, 7536, 83, 83, 206, 197, 709, 5, 22, 170, 9874, 4, 13, 3157, 3170, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 12, 7, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 2, 51, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Pashto/Arabic/Pakistan
- { 89, 1, 102, 583, 583, 590, 598, 53, 19, 20, 21, 52, 61, 35, 56, 15, 16, 17, 18, 97, 390, 55, 1, 7574, 7574, 7574, 7574, 7622, 7622, 210, 201, 714, 718, 22, 253, 9925, 54, 60, 3177, 3182, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 11, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 44, 23, 4, 36, 6, 8, 5, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Persian/Arabic/Iran
- { 89, 1, 1, 583, 583, 590, 598, 53, 19, 20, 21, 52, 61, 35, 56, 15, 16, 17, 18, 97, 390, 55, 1, 7574, 7574, 7574, 7574, 7622, 7622, 210, 201, 714, 718, 22, 252, 9961, 8, 60, 3187, 3161, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 11, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 44, 23, 1, 54, 5, 8, 3, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Persian/Arabic/Afghanistan
- { 90, 7, 172, 0, 0, 161, 161, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 15, 16, 0, 501, 0, 0, 7635, 7635, 7693, 7693, 7726, 7739, 0, 0, 322, 5, 22, 257,10015, 19, 24, 3190, 3196, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 58, 58, 33, 33, 13, 13, 2, 2, 5, 17, 23, 2, 76, 5, 7, 6, 6, {80,76,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Polish/Latin/Poland
- { 91, 7, 30, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 45, 0, 0, 7752, 7752, 7830, 7830, 7864, 7864, 0, 0, 0, 5, 22, 5,10091, 8, 0, 3202, 3211, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 10, 5, 78, 78, 34, 34, 13, 13, 2, 2, 5, 17, 23, 2, 53, 5, 0, 9, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Brazil
- { 91, 7, 6, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 238,10144, 19, 24, 3202, 3217, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 53, 5, 7, 9, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Angola
- { 91, 7, 39, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 259,10197, 19, 24, 3202, 3223, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 68, 5, 7, 9, 10, {67,86,69}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Cape Verde
- { 91, 7, 62, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 156,10265, 19, 24, 3202, 3233, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 80, 5, 7, 9, 11, {85,83,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/East Timor
- { 91, 7, 66, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 32,10345, 19, 24, 3202, 3244, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 58, 5, 7, 9, 16, {88,65,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Equatorial Guinea
- { 91, 7, 92, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 33,10403, 19, 24, 3202, 3260, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 61, 5, 7, 9, 12, {88,79,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Guinea Bissau
- { 91, 7, 125, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 14, 3032, 19, 24, 3202, 3272, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 19, 5, 7, 9, 10, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Luxembourg
- { 91, 7, 126, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 10, 22, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 134,10464, 19, 24, 3202, 3282, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 53, 5, 7, 9, 19, {77,79,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Macau
- { 91, 7, 146, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 260,10517, 19, 24, 3202, 3301, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 65, 5, 7, 9, 10, {77,90,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Mozambique
- { 91, 7, 173, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 14, 3032, 19, 24, 3311, 3328, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 19, 5, 7, 17, 8, {69,85,82}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Portugal
- { 91, 7, 185, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 263,10582, 19, 24, 3202, 3336, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 91, 5, 7, 9, 19, {83,84,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Sao Tome And Principe
- { 91, 7, 206, 0, 0, 252, 252, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 45, 0, 0, 7752, 7752, 7877, 7877, 7864, 7864, 219, 209, 0, 5, 22, 208,10673, 19, 24, 3202, 3355, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 44, 5, 7, 9, 5, {67,72,70}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Switzerland
- { 92, 4, 100, 0, 0, 605, 605, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 259, 10, 22, 7925, 7925, 7981, 7981, 8016, 8016, 227, 217, 762, 5, 22, 119,10717, 8, 0, 3360, 3366, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 35, 35, 22, 22, 6, 6, 4, 17, 23, 1, 38, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Punjabi/Gurmukhi/India
- { 92, 1, 163, 0, 0, 0, 0, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 527, 45, 10, 22, 8038, 8038, 8038, 8038, 83, 83, 0, 0, 0, 5, 22, 77,10755, 8, 0, 3370, 3170, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 10, 12, 7, 36, 36, 36, 36, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Punjabi/Arabic/Pakistan
- { 93, 7, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 45, 0, 0, 8074, 8074, 8126, 8126, 8153, 8153, 64, 61, 0, 5, 22, 265,10761, 8, 0, 3376, 3384, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 28, 5, 0, 8, 4, {80,69,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Quechua/Latin/Peru
- { 93, 7, 26, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 45, 0, 0, 8074, 8074, 8126, 8126, 8153, 8153, 64, 61, 0, 5, 22, 267,10789, 8, 0, 3376, 3388, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 24, 5, 0, 8, 7, {66,79,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Bolivia
- { 93, 7, 63, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 45, 0, 0, 8074, 8074, 8126, 8126, 8153, 8153, 64, 61, 0, 5, 22, 6,10813, 8, 0, 3376, 3395, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 36, 5, 0, 8, 7, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Ecuador
- { 94, 7, 206, 0, 0, 0, 0, 6, 0, 13, 2, 3, 38, 5, 9, 15, 16, 17, 18, 997, 347, 0, 0, 8166, 8166, 8221, 8221, 8243, 8243, 0, 0, 0, 5, 22, 208,10849, 19, 0, 3402, 3411, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 55, 55, 22, 22, 13, 13, 2, 2, 4, 17, 23, 3, 45, 5, 0, 9, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Romansh/Latin/Switzerland
- { 95, 7, 177, 0, 0, 614, 614, 6, 1, 0, 2, 3, 4, 5, 9, 40, 11, 15, 16, 0, 501, 0, 0, 8256, 8256, 8303, 8303, 3015, 3015, 64, 61, 766, 5, 22, 269,10894, 19, 24, 3417, 3423, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 33, 33, 13, 13, 4, 4, 4, 17, 23, 3, 56, 5, 7, 6, 7, {82,79,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Romania
- { 95, 7, 141, 0, 0, 614, 614, 6, 1, 0, 2, 3, 4, 5, 9, 40, 11, 15, 16, 0, 501, 0, 0, 8256, 8256, 8336, 8336, 8363, 8363, 64, 61, 766, 5, 22, 7,10950, 19, 24, 3417, 3430, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 27, 27, 15, 15, 4, 4, 4, 17, 23, 1, 68, 5, 7, 6, 17, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Moldova
- { 96, 2, 178, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 501, 0, 0, 8378, 8378, 8439, 8439, 8459, 8439, 0, 0, 265, 668, 22, 121,11018, 19, 0, 3447, 3454, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 88, 5, 0, 7, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Russia
- { 96, 2, 20, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 501, 0, 0, 8378, 8378, 8439, 8439, 8459, 8439, 0, 0, 265, 668, 22, 0,11106, 19, 0, 3447, 510, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 2, 93, 5, 0, 7, 8, {66,89,78}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Belarus
- { 96, 2, 110, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 501, 0, 0, 8378, 8378, 8439, 8439, 8459, 8439, 0, 0, 265, 668, 22, 228,11199, 19, 0, 3447, 3460, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 82, 5, 0, 7, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kazakhstan
- { 96, 2, 116, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 501, 0, 0, 8378, 8378, 8439, 8439, 8459, 8439, 0, 0, 265, 668, 22, 229,11281, 19, 0, 3447, 3469, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 3, 81, 5, 0, 7, 8, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kyrgyzstan
- { 96, 2, 141, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 501, 0, 0, 8378, 8378, 8439, 8439, 8459, 8439, 0, 0, 265, 668, 22, 7,11362, 19, 0, 3447, 3477, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 78, 5, 0, 7, 7, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Moldova
- { 96, 2, 222, 0, 0, 113, 113, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 295, 501, 0, 0, 8378, 8378, 8439, 8439, 8459, 8439, 0, 0, 265, 668, 22, 272,11440, 19, 0, 3447, 3484, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 91, 5, 0, 7, 7, {85,65,72}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Russian/Cyrillic/Ukraine
- { 98, 7, 41, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 398, 0, 0, 8472, 8472, 8537, 8537, 8564, 8564, 233, 223, 0, 5, 22, 32,11531, 4, 44, 3491, 3496, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 18, 4, 5, 5, 22, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Sango/Latin/Central African Republic
- { 99, 13, 100, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 119, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Sanskrit/Devanagari/India
- { 100, 2, 243, 0, 0, 113, 113, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8577, 8577, 8628, 8628, 8655, 8655, 235, 225, 770, 5, 22, 273,11549, 19, 24, 3518, 3524, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 57, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Serbia
- { 100, 7, 27, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8668, 8668, 8724, 8724, 2066, 2066, 244, 233, 315, 5, 22, 141,11606, 19, 24, 3530, 629, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 56, 56, 25, 25, 13, 13, 11, 8, 7, 17, 23, 2,173, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Bosnia And Herzegowina
- { 100, 7, 242, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8668, 8668, 8749, 8749, 2066, 2066, 244, 233, 315, 5, 22, 14,11779, 19, 24, 3530, 3536, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 56, 56, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 22, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Montenegro
- { 100, 7, 243, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8776, 8776, 8749, 8749, 2066, 2066, 255, 233, 315, 5, 22, 273,11801, 19, 24, 3530, 3545, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 57, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Serbia
- { 100, 2, 27, 0, 0, 113, 113, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8829, 8829, 8883, 8883, 8655, 8655, 264, 225, 770, 5, 22, 276,11858, 19, 24, 3518, 3551, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 54, 54, 25, 25, 13, 13, 11, 8, 7, 17, 23, 2,173, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Bosnia And Herzegowina
- { 100, 2, 242, 0, 0, 113, 113, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8829, 8829, 8628, 8628, 8655, 8655, 264, 225, 770, 5, 22, 14,12031, 19, 24, 3518, 3570, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 54, 54, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 22, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Montenegro
- { 100, 2, 257, 0, 0, 113, 113, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8577, 8577, 8628, 8628, 8655, 8655, 235, 225, 770, 5, 22, 14,12031, 19, 24, 3518, 3579, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 22, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Kosovo
- { 100, 7, 257, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 12, 12, 1020, 1040, 0, 0, 8776, 8776, 8749, 8749, 2066, 2066, 255, 233, 315, 5, 22, 14,11779, 19, 24, 3530, 3585, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 22, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Kosovo
- { 101, 2, 81, 0, 0, 622, 622, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 1047, 166, 0, 0, 8908, 8968, 9028, 9055, 9082, 9082, 275, 241, 0, 5, 22, 215,12053, 8, 0, 3591, 3595, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 16, 5, 0, 4, 11, {71,69,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Georgia
- { 101, 2, 178, 0, 0, 622, 622, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 1047, 166, 0, 0, 8908, 8968, 9028, 9055, 9082, 9082, 275, 241, 0, 5, 22, 121,12069, 8, 0, 3591, 3606, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 16, 5, 0, 4, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Russia
- { 102, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Southern Sotho/Latin/South Africa
- { 103, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tswana/Latin/South Africa
- { 104, 7, 240, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 53, 70, 0, 0, 9095, 9095, 9149, 9149, 9176, 9176, 0, 0, 0, 5, 22, 156,12085, 4, 13, 3612, 1780, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 15, 4, 6, 8, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Shona/Latin/Zimbabwe
- { 105, 1, 163, 0, 0, 631, 639, 53, 19, 20, 21, 23, 24, 26, 28, 10, 11, 12, 13, 53, 70, 10, 22, 9189, 9189, 9189, 9189, 9223, 9223, 290, 256, 777, 783, 22, 170,12100, 19, 0, 3620, 3624, 6, 6, 8, 7, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 34, 34, 34, 34, 30, 30, 11, 11, 6, 61, 23, 2, 42, 5, 0, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sindhi/Arabic/Pakistan
- { 106, 32, 198, 0, 0, 646, 655, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 166, 166, 9253, 9253, 9314, 9314, 9352, 9352, 301, 267, 844, 849, 22, 278,12142, 4, 13, 3631, 3636, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 38, 38, 18, 18, 5, 4, 5, 42, 23, 3, 57, 4, 6, 5, 11, {76,75,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sinhala/Sinhala/Sri Lanka
- { 107, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swati/Latin/South Africa
- { 108, 7, 191, 0, 0, 183, 663, 6, 1, 14, 2, 3, 4, 5, 6, 40, 10, 46, 12, 461, 1070, 1, 1, 9370, 9370, 9421, 9421, 9441, 9441, 0, 0, 322, 5, 22, 14,12199, 19, 24, 3647, 3657, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 51, 51, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 25, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovak/Latin/Slovakia
- { 109, 7, 192, 0, 0, 670, 670, 6, 1, 0, 2, 3, 38, 5, 6, 40, 10, 46, 12, 1020, 440, 0, 0, 9454, 9454, 9505, 9505, 9539, 9539, 60, 271, 50, 5, 22, 14,12224, 19, 24, 3666, 3677, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 9, 10, 5, 51, 51, 34, 34, 13, 13, 4, 4, 4, 17, 23, 1, 27, 5, 7, 11, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovenian/Latin/Slovenia
- { 110, 7, 194, 0, 0, 678, 678, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1080, 45, 10, 22, 9552, 9552, 9598, 9598, 9629, 9629, 306, 275, 891, 897, 22, 92,12251, 4, 13, 3686, 3694, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 1, 20, 4, 6, 8, 10, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Somali/Latin/Somalia
- { 110, 7, 59, 0, 0, 678, 678, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1080, 45, 10, 22, 9552, 9552, 9598, 9598, 9629, 9629, 306, 275, 891, 897, 22, 36,12271, 4, 13, 3686, 3704, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 49, 4, 6, 8, 7, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Somali/Latin/Djibouti
- { 110, 7, 69, 0, 0, 678, 678, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1080, 45, 10, 22, 9552, 9552, 9598, 9598, 9629, 9629, 306, 275, 891, 897, 22, 0,12320, 4, 13, 3686, 3711, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 2, 51, 4, 6, 8, 8, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Ethiopia
- { 110, 7, 111, 0, 0, 678, 678, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1080, 45, 0, 0, 9552, 9552, 9598, 9598, 9629, 9629, 306, 275, 891, 897, 22, 2,12371, 4, 13, 3686, 1161, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 51, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Kenya
- { 111, 7, 197, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 259, 55, 1, 9643, 9643, 9695, 9695, 8153, 8153, 53, 50, 0, 5, 22, 14, 3032, 19, 0, 3719, 2381, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 19, 5, 0, 17, 6, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Spain
- { 111, 7, 10, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 3015, 53, 50, 0, 5, 22, 6,12422, 8, 37, 3719, 3736, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 50, 5, 7, 7, 9, {65,82,83}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Argentina
- { 111, 7, 22, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 64, 61, 0, 5, 22, 6,12472, 4, 0, 3719, 3745, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 4, 4, 5, 17, 23, 1, 51, 4, 0, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Belize
- { 111, 7, 26, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 267,12523, 4, 0, 3719, 3388, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 2, 34, 4, 0, 7, 7, {66,79,66}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Bolivia
- { 111, 7, 30, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 64, 61, 0, 5, 22, 5,12557, 4, 0, 3719, 3211, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 4, 4, 5, 17, 23, 2, 51, 4, 0, 7, 6, {66,82,76}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Brazil
- { 111, 7, 43, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 347, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 6,12608, 4, 0, 3719, 3751, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 44, 4, 0, 7, 5, {67,76,80}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Chile
- { 111, 7, 47, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 46, 10, 22, 9643, 9643, 9695, 9695, 4656, 3015, 53, 50, 0, 5, 22, 6,12652, 4, 0, 3719, 3756, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 53, 4, 0, 7, 8, {67,79,80}, 2, 0, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Colombia
- { 111, 7, 52, 0, 0, 687, 687, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 281,12705, 4, 0, 3719, 3764, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 66, 4, 0, 7, 10, {67,82,67}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Costa Rica
- { 111, 7, 55, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 64, 61, 0, 5, 22, 6,12771, 4, 0, 3719, 3774, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 4, 4, 5, 17, 23, 1, 41, 4, 0, 7, 4, {67,85,80}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Cuba
- { 111, 7, 61, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 10, 22, 9643, 9643, 9695, 9695, 3015, 3015, 53, 50, 0, 5, 22, 282,12812, 4, 13, 3719, 3778, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 3, 53, 4, 6, 7, 20, {68,79,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Dominican Republic
- { 111, 7, 63, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 6,12865, 4, 0, 3719, 3395, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 69, 4, 0, 7, 7, {85,83,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Ecuador
- { 111, 7, 65, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 6,12865, 4, 0, 3719, 3798, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 69, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/El Salvador
- { 111, 7, 66, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 259, 55, 1, 9643, 9643, 9695, 9695, 8153, 8153, 53, 50, 0, 5, 22, 32,12934, 19, 0, 3719, 3809, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 4, 91, 5, 0, 7, 17, {88,65,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Equatorial Guinea
- { 111, 7, 90, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 46, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 285,13025, 4, 0, 3719, 3826, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 29, 4, 0, 7, 9, {71,84,81}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Guatemala
- { 111, 7, 96, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1099, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 7,13054, 4, 0, 3719, 3835, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 59, 4, 0, 7, 8, {72,78,76}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Honduras
- { 111, 7, 139, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 45, 1, 1, 9643, 9643, 9695, 9695, 3015, 3015, 53, 50, 0, 5, 22, 6,13113, 4, 0, 3843, 3860, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 9, 4, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 47, 4, 0, 17, 6, {77,88,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Mexico
- { 111, 7, 155, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 286,13160, 4, 0, 3719, 3866, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 2, 68, 4, 0, 7, 9, {78,73,79}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Nicaragua
- { 111, 7, 166, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 1126, 10, 22, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 288,13228, 4, 0, 3719, 3875, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 3, 53, 4, 0, 7, 6, {80,65,66}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Panama
- { 111, 7, 168, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 291,13281, 4, 0, 3719, 3881, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 3, 60, 4, 0, 7, 8, {80,89,71}, 0, 0, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Paraguay
- { 111, 7, 169, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 46, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 265,13341, 4, 0, 3719, 3384, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 2, 42, 4, 0, 7, 4, {80,69,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Peru
- { 111, 7, 170, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 259, 10, 22, 9643, 9643, 9695, 9695, 8153, 8153, 53, 50, 0, 5, 22, 173,13383, 19, 0, 3719, 3889, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 47, 5, 0, 7, 9, {80,72,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Philippines
- { 111, 7, 174, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 1126, 10, 22, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 6,12865, 4, 0, 3719, 1416, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 69, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Puerto Rico
- { 111, 7, 225, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 398, 10, 22, 9643, 9643, 9695, 9695, 3015, 3015, 53, 50, 0, 5, 22, 6,12865, 4, 0, 3719, 3898, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 69, 4, 0, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/United States
- { 111, 7, 227, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 6,13430, 8, 37, 3719, 3912, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 47, 5, 7, 7, 7, {85,89,85}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Uruguay
- { 111, 7, 231, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 10, 22, 9643, 9643, 9695, 9695, 3015, 4656, 53, 50, 0, 5, 22, 294,13477, 4, 0, 3719, 3919, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 4, 57, 4, 0, 7, 9, {86,69,83}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Venezuela
- { 111, 7, 238, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 259, 55, 1, 9643, 9643, 9695, 9695, 8153, 8153, 53, 50, 0, 5, 22, 14, 3032, 19, 0, 3719, 3928, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 19, 5, 0, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Canary Islands
- { 111, 7, 246, 0, 0, 687, 687, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 259, 0, 0, 9643, 9643, 9695, 9695, 3015, 4656, 64, 61, 0, 5, 22, 0, 0, 4, 0, 3936, 3959, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 34, 13, 13, 4, 4, 5, 17, 23, 0, 0, 4, 0, 23, 13, {0,0,0}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Latin America
- { 111, 7, 250, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 610, 259, 55, 1, 9643, 9643, 9695, 9695, 8153, 8153, 53, 50, 0, 5, 22, 14, 3032, 19, 0, 3719, 3972, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 34, 34, 13, 13, 5, 5, 5, 17, 23, 1, 19, 5, 0, 7, 15, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Ceuta And Melilla
- { 112, 7, 101, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 222, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sundanese/Latin/Indonesia
- { 113, 7, 210, 0, 0, 694, 694, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 9729, 9729, 9729, 9729, 83, 83, 0, 0, 619, 914, 22, 182,13534, 8, 0, 3987, 1585, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 66, 5, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Tanzania
- { 113, 7, 49, 0, 0, 694, 694, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 9729, 9729, 9729, 9729, 83, 83, 0, 0, 619, 914, 22, 32,13600, 8, 0, 3987, 3996, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 2, 54, 5, 0, 9, 32, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Congo Kinshasa
- { 113, 7, 111, 0, 0, 694, 694, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 9729, 9729, 9729, 9729, 83, 83, 0, 0, 619, 914, 22, 2,13654, 8, 0, 3987, 1161, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 57, 5, 0, 9, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swahili/Latin/Kenya
- { 113, 7, 221, 0, 0, 694, 694, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 9729, 9729, 9729, 9729, 83, 83, 0, 0, 619, 914, 22, 187,13711, 8, 0, 3987, 1650, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 60, 5, 0, 9, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Swahili/Latin/Uganda
- { 114, 7, 205, 0, 0, 702, 702, 6, 1, 14, 2, 3, 38, 5, 47, 11, 11, 13, 13, 97, 70, 346, 0, 9788, 9788, 9837, 9837, 2284, 2284, 308, 277, 0, 5, 22, 145,13771, 19, 0, 4028, 4035, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 16, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 2, 44, 5, 0, 7, 7, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Sweden
- { 114, 7, 73, 0, 0, 702, 702, 6, 1, 14, 2, 3, 38, 5, 47, 11, 11, 13, 13, 97, 70, 346, 0, 9788, 9788, 9837, 9837, 2284, 2284, 308, 277, 0, 5, 22, 14, 3032, 19, 0, 4028, 1063, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 16, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Finland
- { 114, 7, 248, 0, 0, 702, 702, 6, 1, 14, 2, 3, 38, 5, 47, 11, 11, 13, 13, 97, 70, 346, 0, 9788, 9788, 9837, 9837, 2284, 2284, 308, 277, 0, 5, 22, 14, 3032, 19, 0, 4028, 4042, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 16, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 0, 7, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Aland Islands
- { 115, 7, 106, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sardinian/Latin/Italy
- { 116, 2, 209, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 527, 45, 0, 0, 9865, 9865, 9919, 9919, 9946, 9946, 0, 0, 0, 5, 22, 298,13815, 19, 0, 4047, 4053, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 18, 5, 0, 6, 10, {84,74,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tajik/Cyrillic/Tajikistan
- { 117, 27, 100, 0, 0, 711, 711, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 259, 362, 315, 9959, 9959,10007,10007,10045,10045, 310, 279, 965, 5, 22, 119,13833, 4, 13, 4063, 4068, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 1, 48, 4, 6, 5, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Tamil/Tamil/India
- { 117, 27, 130, 0, 0, 711, 711, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 259, 362, 315, 9959, 9959,10007,10007,10045,10045, 310, 279, 965, 5, 22, 168,13881, 4, 13, 4063, 4075, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 2, 60, 4, 6, 5, 7, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Malaysia
- { 117, 27, 190, 0, 0, 711, 711, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 259, 362, 315, 9959, 9959,10007,10007,10045,10045, 310, 279, 965, 5, 22, 6,13941, 4, 13, 4063, 4082, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 1, 60, 4, 6, 5, 11, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Singapore
- { 117, 27, 198, 0, 0, 711, 711, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 259, 0, 0, 9959, 9959,10007,10007,10045,10045, 310, 279, 965, 5, 22, 302,14001, 4, 13, 4063, 4093, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 3, 48, 4, 6, 5, 6, {76,75,82}, 2, 1, 1, 6, 7, 1, 2, 3 }, // Tamil/Tamil/Sri Lanka
- { 118, 2, 178, 0, 0, 724, 724, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1134, 501, 1, 1,10064,10064,10119,10119,10154,10154, 0, 0, 0, 5, 22, 121,14049, 19, 0, 4099, 3454, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 9, 4, 55, 55, 35, 35, 13, 13, 2, 2, 4, 17, 23, 1, 20, 5, 0, 5, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tatar/Cyrillic/Russia
- { 119, 28, 100, 0, 0, 733, 733, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1157, 347, 10, 22,10167,10167,10226,10226,10257,10257, 0, 0, 972, 979, 22, 119,14069, 4, 13, 4104, 4110, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 59, 59, 31, 31, 17, 17, 2, 2, 7, 29, 23, 1, 25, 4, 6, 6, 8, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Telugu/Telugu/India
- { 120, 30, 211, 120, 120, 744, 752, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1175, 259, 374, 0,10274,10274,10341,10341,10363,10363, 318, 287, 1008, 5, 22, 305,14094, 4, 13, 4118, 4118, 5, 5, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 6, 28, 5, 67, 67, 22, 22, 15, 15, 10, 10, 4, 17, 23, 1, 15, 4, 6, 3, 3, {84,72,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Thai/Thai/Thailand
- { 121, 31, 44, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1194, 70, 10, 22,10378,10378,10456,10456,10506,10506, 328, 297, 0, 5, 22, 130,14109, 8, 0, 4121, 4129, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 12, 7, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 6, 5, 0, 8, 6, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tibetan/Tibetan/China
- { 121, 31, 100, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1194, 70, 10, 22,10378,10378,10456,10456,10506,10506, 328, 297, 0, 5, 22, 119,14115, 8, 0, 4121, 4135, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 12, 7, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 12, 5, 0, 8, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Tibetan/Tibetan/India
- { 122, 14, 69, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1217, 45, 10, 22,10532,10532,10560,10560,10580,10593, 335, 305, 0, 5, 22, 0, 254, 4, 0, 4142, 92, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 12, 7, 28, 28, 20, 20, 13, 13, 7, 7, 4, 17, 23, 2, 9, 4, 0, 4, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Ethiopia
- { 122, 14, 67, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 12, 13, 10, 11, 1217, 45, 10, 22,10532,10532,10560,10560,10593,10593, 335, 305, 0, 5, 22, 39, 0, 4, 0, 4142, 4146, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 12, 7, 28, 28, 20, 20, 13, 13, 7, 7, 4, 17, 23, 3, 0, 4, 0, 4, 4, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Eritrea
- { 123, 7, 214, 759, 759, 759, 759, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 259, 10, 22,10606,10606,10665,10665,10693,10693, 342, 312, 1012, 1017, 1076, 185,14127, 8, 0, 4150, 1600, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 59, 59, 28, 28, 13, 13, 10, 6, 5, 59, 65, 2, 40, 5, 0, 13, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tongan/Latin/Tonga
- { 124, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tsonga/Latin/South Africa
- { 125, 7, 217, 0, 0, 767, 767, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1240, 502, 0, 0,10706,10706,10759,10759,10786,10786, 352, 318, 195, 5, 22, 236,14167, 4, 13, 4163, 4169, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 10, 5, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 39, 4, 6, 6, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Turkey
- { 125, 7, 56, 0, 0, 767, 767, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1240, 502, 10, 22,10706,10706,10759,10759,10786,10786, 352, 318, 195, 5, 22, 14, 8263, 4, 13, 4163, 4176, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 12, 7, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 4, 6, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Cyprus
- { 126, 7, 218, 0, 0, 775, 775, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 10, 11, 1240, 501, 0, 0,10799,10852,10905,10932,10959,10959, 354, 320, 1141, 5, 22, 306,14206, 19, 0, 4182, 4194, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 53, 53, 27, 27, 13, 13, 13, 14, 4, 17, 23, 3, 48, 5, 0, 12, 12, {84,77,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkmen/Latin/Turkmenistan
- { 128, 1, 44, 0, 0, 198, 208, 6, 0, 1, 2, 3, 4, 5, 9, 16, 15, 18, 17, 1256, 70, 10, 22,10972,10972,11026,11026,11046,11046, 367, 334, 0, 5, 22, 227,14254, 4, 13, 4206, 4214, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 54, 54, 20, 20, 13, 13, 12, 12, 4, 17, 23, 1, 39, 4, 6, 8, 5, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Uighur/Arabic/China
- { 129, 2, 222, 0, 0, 136, 136, 6, 1, 14, 2, 3, 4, 5, 63, 15, 16, 40, 10, 1273, 166, 0, 0,11059,11059, 1466, 1466,11114,11114, 379, 346, 1145, 668, 22, 272,14293, 19, 0, 4219, 4229, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 10, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 48, 5, 0, 10, 7, {85,65,72}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ukrainian/Cyrillic/Ukraine
- { 130, 1, 163, 560, 560, 783, 793, 6, 0, 1, 2, 3, 33, 35, 9, 11, 10, 13, 12, 1295, 259, 10, 22,11127,11127,11127,11127, 83, 83, 0, 0, 1150, 1154, 22, 170,14341, 4, 13, 4236, 3170, 6, 6, 10, 9, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 6, 12, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 2, 48, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Urdu/Arabic/Pakistan
- { 130, 1, 100, 560, 560, 783, 793, 6, 19, 20, 2, 52, 33, 53, 56, 11, 10, 13, 12, 1295, 259, 10, 22,11127,11127,11127,11127, 83, 83, 0, 0, 1150, 1154, 22, 119,14389, 4, 13, 4236, 4240, 6, 6, 10, 9, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 12, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 1, 41, 4, 6, 4, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Urdu/Arabic/India
- { 131, 7, 228, 0, 0, 802, 802, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 13, 12, 1313, 45, 55, 0,11162,11162,11222,11222,11253,11253, 381, 348, 195, 5, 22, 309,14430, 19, 0, 4245, 4251, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 11, 5, 60, 60, 31, 31, 13, 13, 2, 2, 4, 17, 23, 4, 57, 5, 0, 6, 11, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Latin/Uzbekistan
- { 131, 1, 1, 0, 0, 0, 0, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 1331, 390, 55, 1, 7574, 7574,11266,11266, 83, 83, 0, 0, 0, 5, 22, 252, 9961, 19, 0, 4262, 3161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 33, 8, 11, 4, 48, 48, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Uzbek/Arabic/Afghanistan
- { 131, 2, 228, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 637, 45, 54, 0,11286,11286,11338,11338,11365,11365, 383, 350, 0, 5, 22, 313,14487, 19, 0, 4268, 4275, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 48, 5, 0, 7, 10, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Cyrillic/Uzbekistan
- { 132, 7, 232, 0, 0, 810, 810, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 174, 45, 0, 0,11378,11378,11432,11432,11464,11464, 385, 352, 0, 5, 22, 316,14535, 19, 0, 4285, 4295, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 54, 54, 32, 32, 20, 20, 2, 2, 4, 17, 23, 1, 32, 5, 0, 10, 8, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Vietnamese/Latin/Vietnam
- { 133, 7, 260, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1364, 70, 0, 0,11484,11484,11526,11546,11573,11573, 0, 0, 0, 5, 22, 0, 0, 8, 0, 4303, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 42, 42, 20, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 7, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Volapuk/Latin/World
- { 134, 7, 224, 0, 0, 818, 829, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,11586,11586,11662,11690,11719,11719, 387, 354, 1174, 5, 22, 117,14567, 4, 13, 4310, 4317, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 76, 76, 28, 29, 14, 14, 2, 2, 7, 17, 23, 1, 90, 4, 6, 7, 16, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Welsh/Latin/United Kingdom
- { 135, 7, 187, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1387, 511, 0, 0,11733,11733,11782,11782,11782,11782, 389, 356, 0, 5, 22, 33,14657, 8, 0, 4333, 4338, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 49, 49, 27, 27, 27, 27, 3, 3, 4, 17, 23, 3, 64, 5, 0, 5, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Wolof/Latin/Senegal
- { 136, 7, 195, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 12, 13, 10, 11, 53, 70, 0, 0,11809,11809,11869,11869, 83, 83, 0, 0, 0, 5, 22, 5,14721, 4, 0, 4346, 4354, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 60, 60, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 78, 4, 0, 8, 15, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Xhosa/Latin/South Africa
- { 137, 18, 260, 0, 0, 839, 839, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 1404, 45, 0, 0,11896,11896,11896,11896, 83, 83, 392, 359, 0, 5, 22, 0, 0, 8, 0, 4369, 4375, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 53, 53, 53, 53, 13, 13, 11, 10, 4, 17, 23, 0, 0, 5, 0, 6, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yiddish/Hebrew/World
- { 138, 7, 157, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1423, 398, 0, 1,11949,11992,12060,12060,12092,12092, 403, 369, 0, 5, 22, 172,14799, 4, 13, 4380, 4390, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 3, 43, 68, 32, 32, 13, 13, 5, 5, 4, 17, 23, 1, 48, 4, 6, 10, 19, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Nigeria
- { 138, 7, 23, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1423, 398, 0, 1,12105,12148,12216,12216,12248,12248, 408, 374, 0, 5, 22, 33,14847, 4, 13, 4380, 4409, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 3, 43, 68, 32, 32, 13, 13, 5, 5, 4, 17, 23, 3, 27, 4, 6, 10, 16, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Benin
- { 140, 7, 195, 0, 0, 848, 857, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 0, 0,12261,12261,12334,12334,12361,12361, 0, 0, 0, 5, 22, 5,14874, 4, 13, 4425, 4432, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 66, 4, 6, 7, 17, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Zulu/Latin/South Africa
- { 141, 7, 161, 0, 0, 190, 190, 6, 1, 14, 2, 3, 38, 5, 9, 15, 16, 12, 13, 461, 501, 346, 0,12374,12374,12424,12451, 2284, 2284, 413, 379, 0, 5, 22, 145, 9765, 19, 0, 4449, 4456, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 16, 5, 50, 50, 27, 27, 13, 13, 9, 11, 4, 17, 23, 2, 43, 5, 0, 7, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Nynorsk/Latin/Norway
- { 142, 7, 27, 0, 0, 161, 161, 6, 1, 0, 2, 3, 4, 5, 9, 40, 11, 12, 13, 420, 1439, 0, 0, 1982, 1982, 2039, 2039, 2066, 2079, 422, 390, 315, 5, 22, 141,14940, 19, 0, 4461, 629, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 11, 10, 5, 57, 57, 27, 27, 13, 13, 10, 7, 7, 17, 23, 2,169, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Latin/Bosnia And Herzegowina
- { 142, 2, 27, 0, 0, 113, 113, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 1020, 1040, 0, 0,12478,12478,12533,12533, 8655, 8655, 264, 397, 0, 5, 22, 276,15109, 19, 0, 4469, 3551, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 13, 4, 17, 23, 2,151, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Cyrillic/Bosnia And Herzegowina
- { 143, 29, 131, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {77,86,82}, 2, 1, 5, 6, 7, 1, 3, 3 }, // Divehi/Thaana/Maldives
- { 144, 7, 251, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 80, 45, 0, 0,12560,12560,12616,12616, 83, 83, 64, 61, 0, 5, 22, 117, 0, 4, 0, 4477, 4482, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 56, 56, 29, 29, 13, 13, 4, 4, 4, 17, 23, 1, 0, 4, 0, 5, 12, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Manx/Latin/Isle Of Man
- { 145, 7, 224, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 45, 0, 0,12645,12645,12705,12705, 83, 83, 64, 61, 0, 5, 22, 117, 0, 4, 0, 4494, 4502, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 60, 60, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 0, 4, 0, 8, 14, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Cornish/Latin/United Kingdom
- { 146, 7, 83, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1450, 547, 10, 22,12732,12732,12780,12780,12807,12807, 432, 410, 0, 5, 22, 163,15260, 4, 0, 4516, 4520, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 48, 48, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 10, 4, 0, 4, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Akan/Latin/Ghana
- { 147, 13, 100, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 192, 10, 22,12820,12820,12820,12820,12868,12868, 0, 0, 1181, 5, 22, 119,15270, 4, 13, 4525, 2599, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 48, 48, 48, 48, 19, 19, 2, 2, 4, 17, 23, 1, 30, 4, 6, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Konkani/Devanagari/India
- { 148, 7, 83, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ga/Latin/Ghana
- { 149, 7, 157, 0, 0, 865, 694, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 259, 0, 0,12887,12887,12940,12940, 83, 83, 434, 412, 0, 5, 22, 172,15300, 4, 13, 4531, 4541, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 28, 28, 13, 13, 7, 7, 4, 17, 23, 1, 5, 4, 6, 10, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Igbo/Latin/Nigeria
- { 150, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,12968,12968,13041,13041,13068,13068, 441, 419, 0, 5, 22, 2,15305, 4, 13, 4549, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 9, 7, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kamba/Latin/Kenya
- { 151, 33, 103, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Syriac/Syriac/Iraq
- { 152, 14, 67, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Blin/Ethiopic/Eritrea
- { 153, 14, 69, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Geez/Ethiopic/Ethiopia
- { 155, 7, 69, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sidamo/Latin/Ethiopia
- { 156, 7, 157, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 172, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Atsam/Latin/Nigeria
- { 157, 14, 67, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tigre/Ethiopic/Eritrea
- { 158, 7, 157, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 172, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Jju/Latin/Nigeria
- { 159, 7, 106, 0, 0, 252, 252, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 1468, 45, 0, 0,13081,13081,13130,13130, 3015, 3015, 53, 50, 0, 5, 22, 14, 3032, 8, 0, 4556, 2453, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 19, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Friulian/Latin/Italy
- { 160, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Venda/Latin/South Africa
- { 161, 7, 83, 0, 0, 874, 885, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1495, 521, 402, 402,13157,13157,13200,13200,13227,13227, 450, 426, 0, 5, 22, 163,15321, 4, 13, 4562, 4568, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 17, 12, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 3, 36, 4, 6, 6, 12, {71,72,83}, 2, 1, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Ghana
- { 161, 7, 212, 0, 0, 874, 885, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1495, 521, 0, 0,13157,13157,13200,13200,13227,13227, 450, 426, 0, 5, 22, 33,15357, 4, 13, 4562, 4580, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 10, 5, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 3,105, 4, 6, 6, 11, {88,79,70}, 0, 0, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Togo
- { 162, 14, 69, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Walamo/Ethiopic/Ethiopia
- { 163, 7, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 259, 10, 22,13240,13240,13296,13296, 83, 83, 0, 0, 0, 5, 22, 6, 0, 4, 13, 4591, 4605, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 6, 14, 19, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Hawaiian/Latin/United States
- { 164, 7, 157, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 172, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tyap/Latin/Nigeria
- { 165, 7, 129, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nyanja/Latin/Malawi
- { 166, 7, 170, 0, 0, 895, 904, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22,13316,13316,13370,13370,13370,13370, 0, 0, 0, 5, 22, 173,15462, 4, 13, 4624, 4632, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 54, 54, 27, 27, 27, 27, 2, 2, 5, 17, 23, 1, 57, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Filipino/Latin/Philippines
- { 167, 7, 206, 0, 0, 267, 267, 6, 0, 13, 2, 3, 38, 5, 9, 15, 16, 17, 18, 420, 166, 0, 0,13397,13397,13459,13459, 3613, 3613, 453, 431, 0, 5, 22, 208,15519, 19, 0, 4641, 4641, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 3, 54, 5, 0, 16, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Switzerland
- { 167, 7, 74, 0, 0, 267, 267, 6, 0, 13, 2, 3, 38, 5, 9, 15, 16, 17, 18, 420, 166, 0, 0,13397,13397,13459,13459, 3613, 3613, 453, 431, 0, 5, 22, 14, 8263, 19, 0, 4641, 4657, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 1, 18, 5, 0, 16, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/France
- { 167, 7, 123, 0, 0, 267, 267, 6, 0, 13, 2, 3, 38, 5, 9, 15, 16, 17, 18, 420, 166, 0, 0,13397,13397,13459,13459, 3613, 3613, 453, 431, 0, 5, 22, 208,15519, 19, 0, 4641, 4667, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 3, 54, 5, 0, 16, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Liechtenstein
- { 168, 34, 44, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 10, 22,13486,13486,13513,13513,13533,13533, 465, 442, 0, 5, 22, 130, 0, 8, 0, 4680, 4683, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 3, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sichuan Yi/Yi/China
- { 169, 7, 121, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kpelle/Latin/Liberia
- { 170, 7, 82, 0, 0, 459, 459, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 1518, 167, 419, 438,13546,13546,13610,13610, 3613, 3613, 0, 0, 0, 5, 22, 14,15573, 19, 0, 4685, 4699, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 7, 19, 10, 64, 64, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 14, 5, 0, 14, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Low German/Latin/Germany
- { 170, 7, 151, 0, 0, 459, 459, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 1518, 167, 419, 438,13546,13546,13610,13610, 3613, 3613, 0, 0, 0, 5, 22, 14,15573, 19, 0, 4685, 4710, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 7, 19, 10, 64, 64, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 14, 5, 0, 14, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Low German/Latin/Netherlands
- { 171, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // South Ndebele/Latin/South Africa
- { 172, 7, 195, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 5, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Northern Sotho/Latin/South Africa
- { 173, 7, 161, 0, 0, 226, 226, 6, 1, 14, 2, 3, 38, 5, 64, 11, 11, 13, 13, 53, 70, 0, 0,13637,13637,13711,13711,13743,13743, 467, 444, 0, 5, 22, 145,15587, 19, 0, 4722, 4737, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 62, 5, 0, 15, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Norway
- { 173, 7, 73, 0, 0, 226, 226, 6, 1, 14, 2, 3, 38, 5, 64, 11, 11, 13, 13, 97, 501, 0, 0,13756,13756,13825,13825,13845,13845, 478, 457, 0, 5, 22, 14,15649, 19, 0, 4722, 4742, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 10, 5, 69, 69, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 22, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Finland
- { 173, 7, 205, 0, 0, 226, 226, 6, 1, 14, 2, 3, 38, 5, 64, 11, 11, 13, 13, 53, 70, 0, 0,13637,13637,13711,13711,13743,13743, 467, 444, 0, 5, 22, 145,15671, 19, 0, 4722, 4748, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 62, 5, 0, 15, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Sweden
- { 174, 7, 208, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 317, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Taroko/Latin/Taiwan
- { 175, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,13858,13858,13919,13919,13946,13946, 480, 459, 0, 5, 22, 2,13654, 4, 13, 4754, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 6, 3, 4, 17, 23, 3, 17, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Gusii/Latin/Kenya
- { 176, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,13959,13959,14063,14063,14090,14090, 486, 462, 0, 5, 22, 2,13654, 4, 13, 4762, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,104,104, 27, 27, 13, 13, 10, 10, 4, 17, 23, 3, 17, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Taita/Latin/Kenya
- { 177, 7, 187, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 33,15733, 19, 0, 4769, 4338, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Senegal
- { 177, 7, 34, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 33,15733, 19, 0, 4769, 4775, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 14, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Burkina Faso
- { 177, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 32,15752, 19, 0, 4769, 4789, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 4, 18, 5, 0, 6, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Cameroon
- { 177, 7, 80, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 10, 22,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 162,15770, 19, 0, 4769, 4797, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 13, 5, 0, 6, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Gambia
- { 177, 7, 83, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 10, 22,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 163, 0, 19, 0, 4769, 4803, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 0, 5, 0, 6, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Ghana
- { 177, 7, 91, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 201, 0, 19, 0, 4769, 4808, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 0, 5, 0, 6, 4, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea
- { 177, 7, 92, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 33,15733, 19, 0, 4769, 4812, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea Bissau
- { 177, 7, 121, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 10, 22,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 6,15783, 19, 0, 4769, 4824, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 16, 5, 0, 6, 9, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Liberia
- { 177, 7, 136, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 10, 22,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 203,15799, 19, 0, 4769, 4833, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 15, 5, 0, 6, 8, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Mauritania
- { 177, 7, 156, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 33,15733, 19, 0, 4769, 4841, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Niger
- { 177, 7, 157, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 172,15814, 19, 0, 4769, 4847, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 16, 5, 0, 6, 9, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Nigeria
- { 177, 7, 189, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 10, 22,14103,14103,14161,14161,14188,14188, 496, 472, 0, 5, 22, 7,15830, 19, 0, 4769, 4856, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 18, 5, 0, 6, 11, {83,76,76}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Sierra Leone
- { 177, 134, 91, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 201, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea
- { 178, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,14201,14201,14263,14263,14290,14290, 502, 479, 0, 5, 22, 2,15848, 4, 13, 4867, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 27, 27, 13, 13, 6, 8, 4, 17, 23, 3, 16, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kikuyu/Latin/Kenya
- { 179, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,14303,14303,14407,14407,14434,14434, 508, 487, 0, 5, 22, 2,15864, 4, 13, 4873, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,104,104, 27, 27, 13, 13, 7, 5, 4, 17, 23, 3, 18, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Samburu/Latin/Kenya
- { 180, 7, 146, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 610, 398, 0, 0,14447,14447,14501,14501,14528,14528, 0, 0, 0, 5, 22, 260,15882, 0, 0, 4881, 3301, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 21, 4, 0, 4, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sena/Latin/Mozambique
- { 181, 7, 240, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,14541,14541,14590,14590,14617,14617, 0, 0, 0, 5, 22, 156,15903, 4, 13, 4885, 1780, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 10, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // North Ndebele/Latin/Zimbabwe
- { 182, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,14630,14630,14694,14694,14722,14722, 515, 492, 0, 5, 22, 182,15920, 4, 0, 4895, 1585, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 64, 64, 28, 28, 13, 13, 8, 7, 4, 17, 23, 3, 18, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Rombo/Latin/Tanzania
- { 183, 9, 145, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 11, 97, 398, 0, 0,14735,14735,14781,14781, 83, 83, 523, 499, 0, 5, 22, 0,15938, 0, 0, 4904, 4911, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 46, 46, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tachelhit/Tifinagh/Morocco
- { 183, 7, 145, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 11, 97, 398, 0, 0,14810,14810,14857,14857, 83, 83, 529, 507, 0, 5, 22, 0,15952, 0, 0, 4917, 4927, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 10, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tachelhit/Latin/Morocco
- { 184, 7, 3, 0, 0, 912, 924, 6, 1, 14, 2, 3, 4, 5, 68, 15, 16, 10, 11, 97, 398, 10, 22,14886,14919,14969,14996,15025,15038, 535, 515, 1185, 1192, 22, 195,15966, 0, 0, 4933, 4942, 6, 6, 12, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 33, 50, 27, 29, 13, 13, 7, 9, 7, 21, 23, 2, 52, 4, 0, 9, 8, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Kabyle/Latin/Algeria
- { 185, 7, 221, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15051,15051,15124,15124,15151,15151, 0, 0, 0, 5, 22, 187,16018, 4, 0, 4950, 1650, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 10, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Nyankole/Latin/Uganda
- { 186, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15164,15164,15245,15245,15272,15272, 542, 524, 0, 5, 22, 182,16037, 0, 0, 4960, 4966, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 81, 81, 27, 27, 13, 13, 7, 7, 4, 17, 23, 3, 22, 4, 0, 6, 10, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Bena/Latin/Tanzania
- { 187, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15285,15285,15346,15346,15373,15373, 549, 531, 0, 5, 22, 182,13534, 4, 0, 4976, 1585, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 8, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Vunjo/Latin/Tanzania
- { 188, 7, 132, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 398, 0, 0,15386,15386,15429,15429,15456,15456, 0, 0, 0, 5, 22, 33,16059, 4, 13, 4984, 2143, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 9, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Latin/Mali
- { 188, 75, 132, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 33, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Nko/Mali
- { 189, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15469,15469,15532,15532,15559,15559, 554, 540, 0, 5, 22, 2,13654, 4, 13, 4993, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 63, 63, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Embu/Latin/Kenya
- { 190, 12, 225, 0, 0, 935, 944, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22,15572,15572,15620,15620,15647,15647, 556, 542, 1213, 5, 22, 6,16076, 4, 13, 4999, 5002, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 27, 27, 13, 13, 3, 6, 6, 17, 23, 1, 24, 4, 6, 3, 15, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cherokee/Cherokee/United States
- { 191, 7, 137, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0,15660,15660,15707,15707,15733,15733, 0, 0, 0, 5, 22, 170,16100, 8, 0, 5017, 5031, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 26, 26, 13, 13, 2, 2, 4, 17, 23, 2, 14, 5, 0, 14, 5, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Morisyen/Latin/Mauritius
- { 192, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15746,15746,15878,15878,14722,14722, 559, 548, 0, 5, 22, 182,13534, 4, 13, 5036, 1585, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,132,132, 27, 27, 13, 13, 4, 5, 4, 17, 23, 3, 20, 4, 6, 10, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Makonde/Latin/Tanzania
- { 193, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 0, 45, 0, 0,15905,15905,15967,15967,16002,16002, 563, 553, 0, 5, 22, 182,16114, 8, 0, 5046, 5054, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 35, 35, 13, 13, 3, 3, 4, 17, 23, 3, 22, 5, 0, 8, 9, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Langi/Latin/Tanzania
- { 194, 7, 221, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,16015,16015,16080,16080,16107,16107, 0, 0, 0, 5, 22, 187,16136, 0, 0, 5063, 5070, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Ganda/Latin/Uganda
- { 195, 7, 239, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22,16120,16120,16120,16120, 83, 83, 566, 556, 0, 5, 22, 2, 0, 4, 13, 5077, 1774, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 79, 79, 79, 79, 13, 13, 8, 7, 4, 17, 23, 1, 0, 4, 6, 9, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bemba/Latin/Zambia
- { 196, 7, 39, 0, 0, 161, 161, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1541, 45, 0, 0,16199,16271,16343,16343,16370,16370, 68, 65, 0, 5, 22, 259,16155, 19, 24, 5086, 5098, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 10, 5, 72, 72, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 42, 5, 7, 12, 10, {67,86,69}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kabuverdianu/Latin/Cape Verde
- { 197, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,16383,16383,16433,16433,16460,16460, 574, 563, 0, 5, 22, 2,13654, 4, 13, 5108, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Meru/Latin/Kenya
- { 198, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,16473,16473,16525,16525,16552,16552, 576, 565, 0, 5, 22, 2,16197, 4, 13, 5114, 5122, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 52, 52, 27, 27, 13, 13, 6, 10, 4, 17, 23, 3, 19, 4, 6, 8, 12, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kalenjin/Latin/Kenya
- { 199, 7, 148, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22,16565,16565,16656,16656,16678,16678, 582, 575, 0, 5, 22, 6,16216, 4, 0, 5134, 5147, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 91, 91, 22, 22, 13, 13, 7, 5, 4, 17, 23, 1, 15, 4, 0, 13, 8, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nama/Latin/Namibia
- { 200, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15285,15285,15346,15346,15373,15373, 549, 531, 0, 5, 22, 182,13534, 4, 0, 5155, 1585, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Machame/Latin/Tanzania
- { 201, 7, 82, 0, 0, 459, 459, 6, 1, 14, 2, 3, 38, 5, 47, 40, 10, 46, 12, 1568, 1070, 0, 0,16691,16691,16762,16762, 3613, 3613, 589, 580, 0, 5, 22, 14, 234, 19, 0, 5164, 5170, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 23, 10, 10, 5, 71, 71, 27, 27, 13, 13, 16, 16, 4, 17, 23, 1, 4, 5, 0, 6, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Colognian/Latin/Germany
- { 202, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,16789,16789,15346,15346,14722,14722, 605, 596, 0, 5, 22, 2,16231, 4, 13, 740, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 18, 4, 6, 3, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Masai/Latin/Kenya
- { 202, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,16789,16789,15346,15346,14722,14722, 605, 596, 0, 5, 22, 182,16249, 4, 13, 740, 5181, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 3, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Masai/Latin/Tanzania
- { 203, 7, 221, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,16846,16846,16910,16910,16944,16944, 614, 602, 0, 5, 22, 187,16136, 19, 0, 5189, 5070, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 64, 64, 34, 34, 13, 13, 6, 6, 4, 17, 23, 3, 19, 5, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Soga/Latin/Uganda
- { 204, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 40, 10, 46, 12, 0, 45, 0, 0,16957,16957,17031,17031, 83, 83, 64, 61, 0, 5, 22, 2,16270, 4, 68, 5196, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 20, 20, 13, 13, 4, 4, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luyia/Latin/Kenya
- { 205, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0, 9729, 9729,17051,17051,15373,15373, 620, 608, 0, 5, 22, 182,16286, 19, 0, 5203, 5209, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 27, 27, 13, 13, 9, 8, 4, 17, 23, 3, 21, 5, 0, 6, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Asu/Latin/Tanzania
- { 206, 7, 221, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,17078,17078,17146,17146,17173,17173, 629, 616, 0, 5, 22, 187,16307, 4, 13, 5217, 1650, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Teso/Latin/Uganda
- { 206, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,17078,17078,17146,17146,17173,17173, 629, 616, 0, 5, 22, 2,16328, 4, 13, 5217, 5223, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 20, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Teso/Latin/Kenya
- { 207, 7, 67, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Saho/Latin/Eritrea
- { 208, 7, 132, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0,17186,17186,17238,17238,17265,17265, 638, 622, 0, 5, 22, 33,16348, 0, 0, 5228, 5239, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 52, 52, 27, 27, 13, 13, 6, 6, 4, 17, 23, 3, 16, 4, 0, 11, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyra Chiini/Latin/Mali
- { 209, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15285,15285,15346,15346,15373,15373, 549, 531, 0, 5, 22, 182,13534, 0, 0, 5244, 1585, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 6, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Rwa/Latin/Tanzania
- { 210, 7, 111, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,17278,17278,17346,17346,17373,17373, 644, 628, 0, 5, 22, 2,16364, 0, 0, 5250, 1161, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 16, 4, 0, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luo/Latin/Kenya
- { 211, 7, 221, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,15051,15051,15124,15124,15151,15151, 0, 0, 0, 5, 22, 187,16018, 4, 0, 5256, 1650, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Chiga/Latin/Uganda
- { 212, 7, 145, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,17386,17386,17433,17433,17460,17460, 646, 630, 0, 5, 22, 0,16380, 19, 0, 5262, 5279, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 27, 27, 13, 13, 9, 10, 4, 17, 23, 0, 15, 5, 0, 17, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Central Morocco Tamazight/Latin/Morocco
- { 213, 7, 132, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0,17473,17473,17526,17526,17265,17265, 638, 622, 0, 5, 22, 33,16348, 0, 0, 5285, 5239, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 27, 27, 13, 13, 6, 6, 4, 17, 23, 3, 16, 4, 0, 15, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyraboro Senni/Latin/Mali
- { 214, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,17553,17553,17615,17615,17642,17642, 655, 640, 0, 5, 22, 182,13556, 0, 0, 5300, 1585, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 27, 27, 13, 13, 5, 8, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Shambala/Latin/Tanzania
- { 215, 13, 100, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22,17655,17655,17708,17708,17740,17740, 660, 648, 0, 5, 22, 119,16395, 8, 0, 5309, 2599, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 53, 53, 32, 32, 18, 18, 3, 6, 4, 17, 23, 1, 3, 5, 0, 4, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bodo/Devanagari/India
- { 218, 2, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0,17758,17758,17802,17802,17826,17802, 0, 0, 0, 5, 22, 121,16398, 19, 0, 5313, 3454, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 44, 44, 24, 24, 16, 24, 2, 2, 4, 17, 23, 1, 42, 5, 0, 7, 5, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chechen/Cyrillic/Russia
- { 219, 2, 178, 0, 0, 952, 952, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 1591, 967, 0, 0,17842,17842,17909,17909,11114,11114, 0, 0, 0, 5, 22, 121,16440, 19, 0, 5320, 5339, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 67, 67, 36, 36, 13, 13, 2, 2, 4, 17, 23, 1, 43, 5, 0, 19, 7, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Church/Cyrillic/Russia
- { 220, 2, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chuvash/Cyrillic/Russia
- { 230, 7, 49, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0,17945,17945,17994,17994,18021,18021, 663, 654, 0, 5, 22, 32,16483, 0, 0, 5346, 5354, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 49, 49, 27, 27, 13, 13, 5, 6, 4, 17, 23, 2, 17, 4, 0, 8, 16, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luba Katanga/Latin/Congo Kinshasa
- { 231, 7, 125, 0, 0, 960, 960, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 166, 0, 0,18034,18034,18098,18125, 3613, 3613, 668, 660, 441, 5, 22, 14, 8263, 19, 0, 5370, 5370, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 64, 64, 27, 34, 13, 13, 5, 8, 5, 17, 23, 1, 18, 5, 0, 14, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luxembourgish/Latin/Luxembourg
- { 236, 7, 21, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Walloon/Latin/Belgium
- { 237, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 46, 13, 97, 398, 0, 0,18159,18159,18230,18230,18257,18257, 673, 668, 0, 5, 22, 32,16500, 0, 0, 5384, 5389, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 71, 71, 27, 27, 13, 13, 3, 3, 4, 17, 23, 4, 14, 4, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Aghem/Latin/Cameroon
- { 238, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 97, 398, 0, 0,18270,18270,18339,18339,18366,18366, 676, 671, 0, 5, 22, 32,16514, 19, 0, 5396, 5401, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 69, 69, 27, 27, 13, 13, 10, 9, 4, 17, 23, 4, 15, 5, 0, 5, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Basaa/Latin/Cameroon
- { 239, 7, 156, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0,18379,18379,17526,17526,18431,18431, 686, 680, 0, 5, 22, 33,16348, 0, 0, 5409, 5419, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 52, 52, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 16, 4, 0, 10, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Zarma/Latin/Niger
- { 240, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 12, 13, 97, 398, 0, 0,18444,18444,18488,18488,18515,18515, 694, 690, 0, 5, 22, 32, 0, 19, 0, 5424, 1946, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 44, 44, 27, 27, 13, 13, 5, 6, 4, 17, 23, 4, 0, 5, 0, 5, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Duala/Latin/Cameroon
- { 241, 7, 187, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 398, 0, 0,18528,18528,18577,18577,18604,18604, 0, 0, 0, 5, 22, 33,16529, 19, 0, 5429, 5434, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 16, 5, 0, 5, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Jola Fonyi/Latin/Senegal
- { 242, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 398, 0, 0,18617,18617,18701,18701,18730,18730, 699, 696, 0, 5, 22, 32,16545, 19, 0, 5441, 5447, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 84, 84, 29, 29, 13, 13, 7, 9, 4, 17, 23, 4, 16, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ewondo/Latin/Cameroon
- { 243, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 12, 13, 97, 398, 0, 0,18743,18743,18787,18787,18815,18815, 706, 705, 0, 5, 22, 32,16561, 19, 0, 5454, 5459, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 44, 44, 28, 28, 13, 13, 6, 7, 4, 17, 23, 4, 4, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bafia/Latin/Cameroon
- { 244, 7, 146, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,18828,18828,18886,18886,18913,18913, 712, 712, 0, 5, 22, 260, 0, 8, 0, 5466, 5471, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 58, 58, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 0, 5, 0, 5, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Makhuwa Meetto/Latin/Mozambique
- { 245, 7, 37, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 97, 398, 0, 0,18926,18926,18999,18999,19026,19026, 720, 722, 0, 5, 22, 32,16565, 4, 13, 5481, 5487, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 73, 73, 27, 27, 13, 13, 5, 5, 4, 17, 23, 4, 10, 4, 6, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Mundang/Latin/Cameroon
- { 246, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 40, 11, 15, 16, 97, 398, 0, 0,19039,19039,19127,19127,19156,19156, 725, 727, 0, 5, 22, 32,16575, 19, 0, 5494, 5500, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 88, 88, 29, 29, 13, 13, 4, 4, 4, 17, 23, 4, 13, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kwasio/Latin/Cameroon
- { 247, 7, 254, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 46, 448, 22,19169,19169,19247,19247,19284,19284, 729, 731, 0, 5, 22, 117, 0, 4, 13, 5507, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 12, 7, 78, 78, 37, 37, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 6, 9, 0, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nuer/Latin/South Sudan
- { 248, 2, 178, 0, 0, 970, 970, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 10, 1614, 253, 0, 0,19297,19297,19367,19367,19387,19387, 731, 733, 1219, 1224, 22, 121,16588, 19, 0, 5516, 5525, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 6, 10, 5, 70, 70, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 46, 5, 0, 9, 9, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sakha/Cyrillic/Russia
- { 249, 7, 210, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 0, 0,19400,19400,19459,19459,19486,19486, 733, 735, 0, 5, 22, 182,16634, 0, 0, 5534, 5543, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 27, 27, 13, 13, 9, 9, 4, 17, 23, 3, 18, 4, 0, 9, 9, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Sangu/Latin/Tanzania
- { 251, 7, 156, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 97, 398, 0, 0,17473,17473,17526,17526,17265,17265, 686, 680, 0, 5, 22, 33,16348, 0, 0, 5552, 5419, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 16, 4, 0, 13, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tasawaq/Latin/Niger
- { 252, 35, 121, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22,19499,19499,19499,19499, 83, 83, 0, 0, 0, 5, 22, 6,16652, 4, 13, 5565, 5567, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 29, 29, 29, 29, 13, 13, 2, 2, 4, 17, 23, 1, 8, 4, 6, 2, 4, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Vai/Vai/Liberia
- { 252, 7, 121, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 45, 10, 22,19528,19528,19528,19528, 83, 83, 0, 0, 0, 5, 22, 6,16660, 4, 13, 5571, 5574, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 47, 47, 47, 47, 13, 13, 2, 2, 4, 17, 23, 1, 13, 4, 6, 3, 8, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Vai/Latin/Liberia
- { 253, 7, 206, 0, 0, 267, 267, 6, 1, 13, 2, 3, 4, 5, 9, 15, 16, 17, 18, 420, 70, 0, 0,19575,19575,19627,19627,19654,19654, 0, 0, 0, 5, 22, 0, 0, 8, 0, 5582, 5588, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 6, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Walser/Latin/Switzerland
- { 254, 7, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 15, 16, 97, 398, 0, 0,19667,19667,19737,19737,19757,19757, 742, 744, 0, 5, 22, 32, 0, 19, 24, 5594, 5600, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 70, 70, 20, 20, 13, 13, 8, 8, 4, 17, 23, 4, 0, 5, 7, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yangben/Latin/Cameroon
- { 256, 7, 197, 0, 0, 687, 687, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 355, 259, 0, 0,19770,19770,19823,19823, 3373, 3373, 750, 752, 0, 5, 22, 14, 3032, 19, 0, 5607, 2381, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 10, 5, 53, 53, 27, 27, 13, 13, 12, 11, 5, 17, 23, 1, 19, 5, 0, 9, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Asturian/Latin/Spain
- { 257, 7, 37, 981, 981, 992, 1008, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 17, 18, 1450, 70, 0, 0,19850,19850,19850,19850,19909,19909, 762, 763, 0, 5, 22, 32,16673, 8, 0, 5616, 5621, 11, 11, 16, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 59, 59, 59, 59, 24, 24, 8, 13, 4, 17, 23, 4, 5, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ngomba/Latin/Cameroon
- { 258, 7, 37, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 17, 18, 80, 1644, 0, 0,19933,19933,19933,19933,19986,19986, 0, 0, 0, 5, 22, 32,14657, 8, 0, 5628, 5632, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 53, 53, 53, 53, 20, 20, 2, 2, 4, 17, 23, 4, 9, 5, 0, 4, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kako/Latin/Cameroon
- { 259, 7, 37, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1450, 70, 0, 0,20006,20006,20006,20006,20054,20054, 0, 0, 0, 5, 22, 32,16678, 8, 0, 5639, 5644, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 48, 48, 48, 48, 20, 20, 2, 2, 4, 17, 23, 4, 5, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Meta/Latin/Cameroon
- { 260, 7, 37, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 15, 16, 10, 11, 1654, 45, 0, 0,20074,20074,20074,20074, 83, 83, 770, 776, 0, 5, 22, 32,16683, 8, 0, 5651, 5667, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 8, 10, 5,110,110,110,110, 13, 13, 9, 8, 4, 17, 23, 4, 9, 5, 0, 16, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ngiemboon/Latin/Cameroon
- { 261, 7, 197, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Aragonese/Latin/Spain
- { 272, 46, 18, 0, 0, 1017, 1017, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 174, 259, 10, 22,20184,20184,20310,20310,20394,20394, 0, 0, 1241, 5, 22, 122,16692, 0, 31, 5674, 5686, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 69, 4, 6, 12, 14, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Chakma/Chakma/Bangladesh
- { 272, 46, 100, 0, 0, 1017, 1017, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 174, 259, 10, 22,20184,20184,20310,20310,20394,20394, 0, 0, 1241, 5, 22, 119,16761, 0, 31, 5674, 5700, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 87, 4, 6, 12, 10, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Chakma/Chakma/India
- { 290, 11, 100, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 119, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Manipuri/Bengali/India
- { 309, 100, 232, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 316, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tai Dam/Tai Viet/Vietnam
- { 312, 7, 37, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 32, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 0, 5, 0, 0, 0, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Akoose/Latin/Cameroon
- { 313, 7, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22,20432,20432,20432,20432, 83,20518, 0, 0, 0, 5, 22, 6, 0, 8, 0, 5710, 5722, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 86, 86, 86, 86, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 12, 22, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Lakota/Latin/United States
- { 314, 9, 145, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 16, 40, 11, 97, 398, 0, 0,20531,20531,14781,14781, 83, 83, 523, 499, 0, 5, 22, 0,15938, 0, 0, 5744, 4911, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 8, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Standard Moroccan Tamazight/Tifinagh/Morocco
- { 315, 7, 43, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {67,76,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Mapuche/Latin/Chile
- { 316, 1, 103, 0, 0, 0, 0, 53, 19, 20, 21, 23, 71, 73, 28, 10, 11, 12, 13, 53, 70, 10, 22,20578,20578,20578,20578,20635,20635, 779, 784, 0, 5, 22, 42,16848, 19, 0, 5752, 5766, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 57, 57, 57, 57, 13, 13, 3, 3, 4, 17, 23, 5, 13, 5, 0, 14, 5, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Central Kurdish/Arabic/Iraq
- { 316, 1, 102, 0, 0, 0, 0, 53, 19, 20, 21, 23, 71, 73, 28, 10, 11, 12, 13, 53, 70, 0, 0,20578,20578,20578,20578,20635,20635, 779, 784, 0, 5, 22, 0,16861, 19, 0, 5752, 5771, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 57, 57, 13, 13, 3, 3, 4, 17, 23, 0, 12, 5, 0, 14, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Central Kurdish/Arabic/Iran
- { 317, 7, 82, 0, 0, 183, 183, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 113, 1, 1,20648,20648,20700,20700,20727,20727, 782, 787, 0, 5, 22, 14,16873, 19, 0, 5776, 5790, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 9, 4, 52, 52, 27, 27, 13, 13, 9, 10, 4, 17, 23, 1, 26, 5, 0, 14, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lower Sorbian/Latin/Germany
- { 318, 7, 82, 0, 0, 183, 183, 6, 1, 0, 2, 3, 4, 5, 9, 40, 10, 46, 12, 420, 113, 1, 460,20740,20740,20792,20792,20819,20819, 782, 797, 1249, 5, 22, 14,16899, 19, 0, 5796, 5811, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 9, 12, 52, 52, 27, 27, 13, 13, 9, 9, 5, 17, 23, 1, 28, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Upper Sorbian/Latin/Germany
- { 319, 7, 37, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 32, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 0, 5, 0, 0, 0, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kenyang/Latin/Cameroon
- { 320, 7, 38, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 224, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Mohawk/Latin/Canada
- { 321, 75, 91, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 201, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Nko/Nko/Guinea
- { 322, 7, 260, 0, 0, 1029, 1029, 6, 1, 14, 2, 3, 4, 5, 9, 40, 10, 40, 10, 1686, 166, 0, 0,20832,20832,20900,20900,20927,20927, 0, 0, 0, 5, 22, 0, 0, 19, 0, 5817, 5826, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 68, 68, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 9, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Prussian/Latin/World
- { 323, 7, 90, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 285, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {71,84,81}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kiche/Latin/Guatemala
- { 324, 7, 205, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Southern Sami/Latin/Sweden
- { 325, 7, 205, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Lule Sami/Latin/Sweden
- { 326, 7, 73, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1713, 581, 176, 167,20940,21009,21081,21081, 83,21108, 791, 806, 0, 5, 22, 14, 242, 19, 0, 5832, 5843, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 9, 4, 69, 72, 27, 27, 13, 13, 3, 3, 4, 17, 23, 1, 4, 5, 0, 11, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Inari Sami/Latin/Finland
- { 327, 7, 73, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Skolt Sami/Latin/Finland
- { 328, 7, 13, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 225, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {65,85,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Warlpiri/Latin/Australia
- { 346, 1, 102, 0, 0, 0, 0, 53, 19, 20, 21, 52, 33, 53, 56, 15, 16, 17, 18, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 714, 1254, 22, 320,16927, 8, 0, 5848, 3182, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 39, 23, 3, 26, 5, 0, 7, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Mazanderani/Arabic/Iran
- { 349, 1, 102, 0, 0, 0, 0, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 5855, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 11, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Northern Luri/Arabic/Iran
- { 349, 1, 103, 0, 0, 0, 0, 53, 19, 20, 21, 52, 33, 53, 56, 10, 11, 12, 13, 53, 70, 10, 22, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 42, 0, 8, 0, 5855, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 0, 5, 0, 11, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Northern Luri/Arabic/Iraq
- { 357, 6, 97, 168, 168, 1037, 1037, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 406, 390, 153, 27, 1902, 1902, 1902, 1902, 1949, 1949, 58, 55, 0, 5, 22, 131,16953, 4, 13, 5866, 5868, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 13, 6, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 10, 4, 6, 2, 14, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Traditional Han/Hong Kong
- { 357, 5, 44, 168, 168, 1037, 1037, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 377, 390, 142, 27, 1902, 1902, 1929, 1929, 1949, 1949, 58, 55, 0, 5, 22, 227, 3051, 4, 13, 5882, 5884, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 12, 4, 6, 2, 7, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Simplified Han/China
- { 358, 138, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 156, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Osage/Osage/United States
- { 360, 7, 260, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ido/Latin/World
- { 361, 7, 260, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lojban/Latin/World
- { 362, 7, 106, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 14, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sicilian/Latin/Italy
- { 363, 1, 102, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Southern Kurdish/Arabic/Iran
- { 364, 1, 163, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 170, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Western Balochi/Arabic/Pakistan
- { 365, 7, 170, 0, 0, 895, 904, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 521, 10, 22,21121,21121,21176,21176,21200,21200, 0, 0, 1293, 5, 22, 173,16963, 4, 13, 5891, 4632, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 55, 55, 24, 24, 13, 13, 2, 2, 8, 17, 23, 1, 55, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cebuano/Latin/Philippines
- { 366, 2, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Erzya/Cyrillic/Russia
- { 367, 7, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 156, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chickasaw/Latin/United States
- { 368, 7, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 156, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Muscogee/Latin/United States
- { 369, 7, 172, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 53, 70, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 257, 0, 8, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {80,76,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Silesian/Latin/Poland
+ { 1, 0, 0, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 8, 0, 17, 0, 0, 0, 0, 56, 56, 83, 96, 0, 0, 0, 5, 22, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 8, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 4, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // C/AnyScript/AnyTerritory
+ { 2, 27, 90, 0, 0, 7, 7, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 27, 49, 10, 0, 109, 109, 157, 157, 179, 179, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 6, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 48, 48, 22, 22, 15, 15, 2, 2, 4, 17, 23, 1, 0, 5, 0, 6, 9, {71,69,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Abkhazian/Cyrillic/Georgia
+ { 3, 66, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 59, 78, 23, 38, 194, 194, 245, 245, 272, 272, 0, 0, 0, 5, 22, 1, 0, 2, 0, 15, 20, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 15, 7, 51, 51, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 4, 0, 5, 7, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Afar/Latin/Ethiopia
+ { 3, 66, 67, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 59, 78, 23, 38, 194, 194, 245, 245, 272, 272, 0, 0, 0, 5, 22, 3, 0, 2, 0, 15, 27, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 15, 7, 51, 51, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 5, 7, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Afar/Latin/Djibouti
+ { 3, 66, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 59, 78, 23, 38, 194, 194, 245, 245, 272, 272, 0, 0, 0, 5, 22, 6, 0, 2, 0, 15, 34, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 15, 7, 51, 51, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 5, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Afar/Latin/Eritrea
+ { 4, 66, 216, 0, 0, 16, 16, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 86, 103, 10, 0, 285, 285, 342, 342, 369, 369, 2, 2, 45, 5, 22, 9, 0, 2, 9, 41, 50, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 57, 57, 27, 27, 13, 13, 3, 3, 5, 17, 23, 1, 20, 4, 6, 9, 11, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Afrikaans/Latin/South Africa
+ { 4, 66, 162, 0, 0, 16, 16, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 103, 23, 38, 285, 285, 342, 342, 369, 369, 2, 2, 45, 5, 22, 10, 20, 2, 9, 41, 61, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 57, 57, 27, 27, 13, 13, 3, 3, 5, 17, 23, 1, 16, 4, 6, 9, 7, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Afrikaans/Latin/Namibia
+ { 5, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 382, 382, 453, 453, 480, 480, 5, 5, 0, 5, 22, 11, 36, 0, 0, 68, 73, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 71, 71, 27, 27, 13, 13, 3, 3, 4, 17, 23, 4, 14, 4, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Aghem/Latin/Cameroon
+ { 6, 66, 92, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 137, 155, 23, 38, 493, 493, 541, 541, 568, 568, 8, 8, 0, 5, 22, 15, 50, 2, 0, 80, 84, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 48, 48, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 10, 4, 0, 4, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Akan/Latin/Ghana
+ { 8, 66, 40, 0, 0, 24, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 11, 60, 15, 0, 89, 95, 6, 6, 5, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 10, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Akoose/Latin/Cameroon
+ { 9, 66, 3, 0, 0, 29, 29, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 0, 180, 45, 38, 581, 581, 638, 638, 665, 665, 10, 10, 50, 5, 22, 18, 70, 4, 20, 102, 107, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 16, 7, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 4, 13, 5, 7, 5, 8, {65,76,76}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Albania
+ { 9, 66, 126, 0, 0, 29, 29, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 0, 180, 10, 0, 581, 581, 638, 638, 665, 665, 10, 10, 50, 5, 22, 22, 83, 4, 20, 102, 115, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 1, 6, 5, 7, 5, 6, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Kosovo
+ { 9, 66, 140, 0, 0, 29, 29, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 0, 180, 10, 0, 581, 581, 638, 638, 665, 665, 10, 10, 50, 5, 22, 23, 89, 4, 20, 102, 121, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 3, 16, 5, 7, 5, 18, {77,75,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Macedonia
+ { 11, 33, 77, 38, 38, 44, 53, 6, 0, 1, 2, 3, 4, 5, 10, 11, 12, 19, 20, 163, 186, 61, 76, 679, 679, 706, 706, 732, 732, 21, 20, 54, 57, 22, 26, 105, 2, 9, 139, 143, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 27, 27, 26, 26, 13, 13, 3, 4, 3, 23, 23, 2, 9, 4, 6, 4, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Amharic/Ethiopic/Ethiopia
+ { 14, 4, 71, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 28, 114, 27, 0, 148, 155, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 9, 6, 0, 7, 3, {69,71,80}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Egypt
+ { 14, 4, 4, 61, 61, 61, 61, 6, 1, 0, 32, 3, 35, 37, 10, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 33, 123, 33, 38, 148, 158, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 12, 5, 7, 7, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Algeria
+ { 14, 4, 19, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 38, 135, 27, 0, 148, 165, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 12, 6, 0, 7, 7, {66,72,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Bahrain
+ { 14, 4, 48, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 11, 147, 27, 0, 148, 172, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 4, 15, 6, 0, 7, 4, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Chad
+ { 14, 4, 55, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 10, 0, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 12, 162, 27, 0, 148, 176, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 13, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 2, 14, 6, 0, 7, 9, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Comoros
+ { 14, 4, 67, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 3, 176, 27, 0, 148, 185, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 3, 11, 6, 0, 7, 6, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Djibouti
+ { 14, 4, 74, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 6, 187, 27, 0, 148, 191, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 3, 12, 6, 0, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Eritrea
+ { 14, 4, 113, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 43, 199, 27, 0, 148, 198, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 11, 6, 0, 7, 6, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Iraq
+ { 14, 4, 116, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 11, 1, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 48, 210, 27, 0, 148, 204, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 4, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 1, 18, 6, 0, 7, 7, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Israel
+ { 14, 4, 122, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 49, 228, 27, 0, 148, 211, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 11, 6, 0, 7, 6, {74,79,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Jordan
+ { 14, 4, 127, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 54, 239, 27, 0, 148, 217, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 11, 6, 0, 7, 6, {75,87,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Kuwait
+ { 14, 4, 132, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 59, 250, 27, 0, 148, 223, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 11, 6, 0, 7, 5, {76,66,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Lebanon
+ { 14, 4, 135, 61, 61, 61, 61, 6, 1, 0, 32, 3, 35, 37, 10, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 64, 261, 33, 38, 148, 228, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 10, 5, 7, 7, 5, {76,89,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Libya
+ { 14, 4, 149, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 69, 271, 27, 0, 148, 233, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 4, 15, 6, 0, 7, 9, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Mauritania
+ { 14, 4, 159, 61, 61, 61, 61, 6, 1, 0, 32, 3, 35, 37, 10, 15, 14, 17, 16, 196, 213, 10, 0, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 73, 286, 33, 38, 148, 242, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 13, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 10, 5, 7, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Morocco
+ { 14, 4, 176, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 78, 296, 27, 0, 148, 248, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 10, 6, 0, 7, 5, {79,77,82}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Oman
+ { 14, 4, 180, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 48, 210, 27, 0, 148, 253, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 1, 18, 6, 0, 7, 18, {73,76,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Palestinian Territories
+ { 14, 4, 190, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 83, 306, 27, 0, 148, 271, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 9, 6, 0, 7, 3, {81,65,82}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Qatar
+ { 14, 4, 205, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 88, 315, 27, 0, 148, 274, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 10, 6, 0, 7, 24, {83,65,82}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Saudi Arabia
+ { 14, 4, 215, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 93, 325, 27, 0, 148, 298, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 1, 10, 6, 0, 7, 7, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Somalia
+ { 14, 4, 219, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 94, 335, 27, 0, 148, 305, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 1, 17, 6, 0, 7, 12, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/South Sudan
+ { 14, 4, 222, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 95, 352, 27, 0, 148, 317, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 4, 11, 6, 0, 7, 7, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Sudan
+ { 14, 4, 227, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 99, 363, 27, 0, 148, 324, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 10, 6, 0, 7, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Syria
+ { 14, 4, 238, 61, 61, 61, 61, 6, 1, 0, 32, 3, 35, 37, 10, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 104, 373, 33, 38, 148, 329, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 11, 5, 7, 7, 4, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Tunisia
+ { 14, 4, 245, 61, 61, 61, 61, 6, 0, 1, 32, 3, 35, 37, 10, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 109, 384, 33, 38, 148, 333, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 12, 5, 7, 7, 24, {65,69,68}, 2, 1, 6, 6, 7, 1, 3, 3 }, // Arabic/Arabic/United Arab Emirates
+ { 14, 4, 257, 61, 61, 61, 61, 6, 0, 1, 32, 3, 35, 37, 10, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 73, 286, 33, 38, 148, 357, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 10, 5, 7, 7, 15, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Western Sahara
+ { 14, 4, 258, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 0, 0, 27, 0, 372, 394, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 0, 0, 6, 0, 22, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/world
+ { 14, 4, 259, 61, 61, 61, 61, 67, 21, 22, 23, 25, 26, 28, 30, 15, 14, 17, 16, 196, 213, 61, 76, 745, 745, 745, 745, 796, 796, 24, 24, 80, 84, 22, 114, 396, 27, 0, 148, 400, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 37, 23, 5, 9, 6, 0, 7, 5, {89,69,82}, 0, 0, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Yemen
+ { 15, 66, 220, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 15, 15, 223, 129, 11, 1, 809, 809, 860, 860, 887, 887, 0, 0, 0, 5, 22, 22, 405, 2, 9, 405, 413, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 12, 4, 51, 51, 27, 27, 16, 16, 2, 2, 4, 17, 23, 1, 4, 4, 6, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Aragonese/Latin/Spain
+ { 17, 5, 12, 0, 0, 75, 75, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 11, 12, 245, 49, 10, 0, 903, 903, 964, 964, 991, 991, 0, 0, 121, 127, 22, 119, 409, 4, 0, 420, 427, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 8, 13, 5, 61, 61, 27, 27, 13, 13, 2, 2, 6, 17, 23, 1, 13, 5, 0, 7, 8, {65,77,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Armenian/Armenian/Armenia
+ { 18, 9, 110, 0, 0, 82, 82, 6, 0, 1, 2, 39, 4, 5, 10, 14, 15, 16, 17, 265, 283, 83, 83, 1004, 1004, 1061, 1061, 1092, 1092, 25, 25, 144, 148, 22, 120, 422, 2, 9, 435, 442, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 57, 57, 31, 31, 13, 13, 9, 7, 4, 37, 23, 1, 12, 4, 6, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Assamese/Bangla/India
+ { 19, 66, 220, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 223, 129, 10, 0, 1105, 1105, 1158, 1158, 1185, 1185, 34, 32, 0, 5, 22, 22, 405, 4, 0, 446, 455, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 13, 5, 53, 53, 27, 27, 13, 13, 12, 11, 5, 17, 23, 1, 4, 5, 0, 9, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Asturian/Latin/Spain
+ { 20, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 1198, 1198, 1257, 1257, 1284, 1284, 46, 43, 0, 5, 22, 121, 434, 4, 0, 461, 467, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 59, 59, 27, 27, 13, 13, 9, 8, 4, 17, 23, 3, 21, 5, 0, 6, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Asu/Latin/Tanzania
+ { 21, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 137, 155, 10, 0, 1297, 1297, 1383, 1383, 83, 83, 0, 0, 0, 5, 22, 124, 455, 15, 0, 475, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 86, 86, 33, 33, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 5, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Atsam/Latin/Nigeria
+ { 25, 66, 17, 0, 0, 91, 91, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 291, 49, 10, 0, 1416, 1416, 1482, 1508, 96, 96, 0, 0, 185, 5, 22, 125, 459, 4, 0, 480, 490, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Latin/Azerbaijan
+ { 25, 4, 112, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 11, 12, 19, 20, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 500, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 6, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Azerbaijani/Arabic/Iran
+ { 25, 4, 113, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 11, 12, 19, 20, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 500, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 6, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Azerbaijani/Arabic/Iraq
+ { 25, 4, 239, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 11, 12, 19, 20, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 126, 0, 15, 0, 500, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 6, 0, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Arabic/Turkey
+ { 25, 27, 17, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 19, 20, 291, 49, 10, 0, 1534, 1534, 1600, 1600, 96, 96, 55, 51, 0, 5, 22, 125, 476, 4, 0, 506, 516, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 5, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Cyrillic/Azerbaijan
+ { 26, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 16, 17, 113, 129, 10, 0, 1626, 1626, 1670, 1670, 1698, 1698, 57, 53, 0, 5, 22, 11, 481, 4, 0, 526, 531, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 44, 44, 28, 28, 13, 13, 6, 7, 4, 17, 23, 4, 4, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bafia/Latin/Cameroon
+ { 28, 66, 145, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 129, 10, 0, 1711, 1711, 1754, 1754, 1781, 1781, 0, 0, 0, 5, 22, 127, 485, 2, 9, 538, 547, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 17, 4, 6, 9, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Latin/Mali
+ { 28, 90, 145, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 127, 0, 2, 9, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 0, 4, 6, 0, 0, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Nko/Mali
+ { 30, 9, 20, 0, 0, 99, 99, 6, 0, 1, 2, 39, 4, 5, 10, 14, 15, 16, 17, 265, 129, 61, 76, 1794, 1794, 1851, 1851, 1887, 1887, 0, 0, 144, 5, 22, 132, 502, 0, 45, 551, 556, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 14, 4, 6, 5, 8, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Bangla/Bangla/Bangladesh
+ { 30, 9, 110, 0, 0, 99, 99, 6, 0, 1, 2, 39, 4, 5, 10, 14, 15, 16, 17, 265, 129, 61, 76, 1794, 1794, 1851, 1851, 1887, 1887, 0, 0, 144, 5, 22, 120, 516, 2, 9, 551, 564, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bangla/Bangla/India
+ { 31, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 113, 129, 10, 0, 1904, 1904, 1973, 1973, 2000, 2000, 63, 60, 0, 5, 22, 11, 528, 4, 0, 568, 573, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 69, 69, 27, 27, 13, 13, 10, 9, 4, 17, 23, 4, 15, 5, 0, 5, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Basaa/Latin/Cameroon
+ { 32, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 133, 0, 15, 0, 581, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 12, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bashkir/Cyrillic/Russia
+ { 33, 66, 220, 0, 0, 108, 108, 6, 1, 0, 2, 3, 48, 5, 10, 11, 12, 14, 15, 308, 344, 98, 0, 2013, 2013, 2080, 2080, 2107, 2107, 0, 0, 189, 5, 22, 22, 543, 4, 20, 593, 600, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 6, 15, 5, 67, 67, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 5, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Basque/Latin/Spain
+ { 35, 27, 22, 0, 0, 117, 117, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 50, 113, 0, 2120, 2120, 2175, 2175, 2195, 2195, 0, 0, 196, 201, 22, 1, 548, 4, 0, 608, 618, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 7, 14, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 2, 16, 5, 0, 10, 8, {66,89,78}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Belarusian/Cyrillic/Belarus
+ { 36, 66, 260, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 2208, 2208, 2208, 2208, 83, 83, 73, 69, 0, 5, 22, 134, 0, 2, 9, 626, 635, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 79, 79, 79, 79, 13, 13, 8, 7, 4, 17, 23, 1, 0, 4, 6, 9, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bemba/Latin/Zambia
+ { 37, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 2287, 2287, 2368, 2368, 2395, 2395, 81, 76, 0, 5, 22, 121, 564, 0, 0, 641, 647, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 81, 81, 27, 27, 13, 13, 7, 7, 4, 17, 23, 3, 22, 4, 0, 6, 10, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Bena/Latin/Tanzania
+ { 38, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 163, 103, 61, 76, 2408, 2408, 2408, 2408, 83, 83, 88, 83, 0, 5, 22, 120, 0, 2, 0, 657, 664, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 55, 55, 55, 55, 13, 13, 3, 4, 4, 17, 23, 1, 0, 4, 0, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Bhojpuri/Devanagari/India
+ { 40, 33, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 372, 78, 61, 76, 2463, 2463, 2505, 2505, 2530, 2530, 0, 0, 0, 5, 22, 6, 0, 2, 0, 668, 671, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 15, 7, 42, 42, 25, 25, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 3, 4, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Blin/Ethiopic/Eritrea
+ { 41, 29, 110, 0, 0, 124, 134, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 291, 394, 127, 142, 2543, 2597, 2650, 2650, 2682, 2682, 91, 87, 0, 5, 22, 120, 586, 2, 9, 675, 664, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 10, 54, 53, 32, 32, 17, 17, 3, 6, 4, 17, 23, 1, 11, 4, 6, 3, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bodo/Devanagari/India
+ { 42, 66, 29, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 13, 15, 16, 17, 404, 423, 10, 0, 2699, 2699, 2756, 2756, 2783, 2796, 94, 93, 218, 5, 22, 135, 597, 4, 0, 678, 686, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 11, 13, 5, 57, 57, 27, 27, 13, 13, 10, 7, 7, 17, 23, 2, 40, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Latin/Bosnia and Herzegovina
+ { 42, 27, 29, 0, 0, 150, 150, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 434, 454, 10, 0, 2809, 2809, 2864, 2864, 2891, 2891, 104, 100, 0, 5, 22, 137, 637, 4, 0, 705, 713, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 13, 5, 55, 55, 27, 27, 13, 13, 11, 13, 4, 17, 23, 2, 19, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Cyrillic/Bosnia and Herzegovina
+ { 43, 66, 84, 0, 0, 157, 157, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 186, 10, 0, 2904, 2904, 2946, 2946, 2978, 2978, 115, 113, 225, 232, 249, 22, 405, 4, 0, 732, 741, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 42, 42, 32, 32, 17, 17, 4, 4, 7, 17, 23, 1, 4, 5, 0, 9, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Breton/Latin/France
+ { 45, 27, 36, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 13, 14, 13, 14, 350, 461, 152, 1, 2995, 2995, 3049, 3049, 3069, 3069, 119, 117, 272, 5, 22, 139, 656, 4, 20, 746, 755, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 12, 17, 4, 54, 54, 20, 20, 13, 13, 6, 6, 7, 17, 23, 3, 13, 5, 7, 9, 8, {66,71,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Bulgarian/Cyrillic/Bulgaria
+ { 46, 86, 161, 165, 165, 172, 172, 182, 0, 1, 2, 50, 4, 5, 10, 14, 15, 16, 17, 473, 129, 169, 1, 3082, 3082, 3082, 3082, 3135, 3135, 125, 123, 279, 5, 22, 134, 669, 15, 0, 763, 763, 7, 7, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 4, 53, 53, 53, 53, 13, 13, 5, 3, 5, 17, 23, 1, 11, 5, 0, 6, 6, {77,77,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Burmese/Myanmar/Myanmar
+ { 47, 137, 107, 183, 183, 188, 188, 6, 0, 1, 2, 3, 4, 5, 10, 51, 52, 53, 54, 491, 505, 182, 43, 3148, 3148, 3148, 3148, 3175, 3175, 130, 126, 0, 5, 22, 142, 680, 2, 9, 769, 771, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 16, 6, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 2, 4, 6, 2, 14, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Traditional Han/Hong Kong
+ { 47, 118, 50, 183, 183, 188, 188, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 513, 505, 169, 0, 3148, 3148, 3188, 3188, 3175, 3175, 130, 126, 0, 5, 22, 145, 682, 2, 9, 785, 787, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 5, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 3, 4, 6, 2, 7, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Cantonese/Simplified Han/China
+ { 48, 66, 220, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 526, 129, 99, 1, 3208, 3208, 3267, 3267, 3267, 3267, 132, 128, 0, 5, 22, 22, 405, 4, 20, 794, 413, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 14, 4, 59, 59, 27, 27, 27, 27, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Spain
+ { 48, 66, 6, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 526, 129, 99, 1, 3208, 3208, 3267, 3267, 3267, 3267, 132, 128, 0, 5, 22, 22, 405, 4, 20, 794, 800, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 14, 4, 59, 59, 27, 27, 27, 27, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Andorra
+ { 48, 66, 84, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 526, 129, 99, 1, 3208, 3208, 3267, 3267, 3267, 3267, 132, 128, 0, 5, 22, 22, 405, 4, 20, 794, 807, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 14, 4, 59, 59, 27, 27, 27, 27, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/France
+ { 48, 66, 117, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 526, 129, 99, 1, 3208, 3208, 3267, 3267, 3267, 3267, 132, 128, 0, 5, 22, 22, 405, 4, 20, 794, 813, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 14, 4, 59, 59, 27, 27, 27, 27, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Italy
+ { 49, 66, 185, 0, 0, 193, 202, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 3294, 3294, 3349, 3349, 3376, 3376, 0, 0, 284, 5, 22, 146, 685, 2, 9, 819, 826, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 55, 55, 27, 27, 13, 13, 2, 2, 8, 17, 23, 1, 15, 4, 6, 7, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cebuano/Latin/Philippines
+ { 50, 66, 159, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 3389, 3389, 3436, 3436, 3463, 3463, 137, 133, 0, 5, 22, 0, 700, 4, 0, 835, 852, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 47, 47, 27, 27, 13, 13, 9, 10, 4, 17, 23, 0, 15, 5, 0, 17, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Central Atlas Tamazight/Latin/Morocco
+ { 51, 4, 113, 0, 0, 0, 0, 67, 21, 22, 23, 25, 55, 57, 59, 14, 15, 16, 17, 163, 103, 61, 76, 3476, 3476, 3476, 3476, 3533, 3533, 146, 143, 0, 5, 22, 43, 715, 4, 0, 858, 872, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 15, 7, 57, 57, 57, 57, 13, 13, 3, 3, 4, 17, 23, 5, 13, 5, 0, 14, 5, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Central Kurdish/Arabic/Iraq
+ { 51, 4, 112, 0, 0, 0, 0, 67, 21, 22, 23, 25, 55, 57, 59, 14, 15, 16, 17, 163, 103, 10, 0, 3476, 3476, 3476, 3476, 3533, 3533, 146, 143, 0, 5, 22, 0, 728, 4, 0, 858, 877, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 13, 5, 57, 57, 57, 57, 13, 13, 3, 3, 4, 17, 23, 0, 12, 5, 0, 14, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Central Kurdish/Arabic/Iran
+ { 52, 21, 20, 0, 0, 210, 210, 6, 0, 1, 2, 61, 4, 5, 10, 14, 15, 16, 17, 265, 129, 61, 76, 3546, 3546, 3672, 3672, 3756, 3756, 0, 0, 292, 5, 22, 132, 740, 0, 45, 882, 894, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 21, 4, 6, 12, 14, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Chakma/Chakma/Bangladesh
+ { 52, 21, 110, 0, 0, 210, 210, 6, 0, 1, 2, 61, 4, 5, 10, 14, 15, 16, 17, 265, 129, 61, 76, 3546, 3546, 3672, 3672, 3756, 3756, 0, 0, 292, 5, 22, 120, 761, 0, 45, 882, 908, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 27, 4, 6, 12, 10, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Chakma/Chakma/India
+ { 54, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 3794, 3794, 3838, 3838, 3862, 3838, 0, 0, 0, 5, 22, 133, 788, 4, 0, 918, 925, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 44, 44, 24, 24, 16, 24, 2, 2, 4, 17, 23, 1, 11, 5, 0, 7, 5, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chechen/Cyrillic/Russia
+ { 55, 23, 248, 0, 0, 222, 231, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 61, 76, 3878, 3878, 3926, 3926, 3953, 3953, 149, 146, 300, 5, 22, 10, 799, 2, 9, 930, 933, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 48, 48, 27, 27, 13, 13, 3, 6, 6, 17, 23, 1, 6, 4, 6, 3, 15, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cherokee/Cherokee/United States
+ { 56, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 3966, 3966, 3966, 3966, 83, 83, 0, 0, 0, 5, 22, 10, 0, 15, 0, 948, 964, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 87, 87, 87, 87, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 16, 13, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chickasaw/Latin/United States
+ { 57, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 4053, 4053, 4126, 4126, 4153, 4153, 0, 0, 0, 5, 22, 147, 805, 2, 0, 977, 983, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Chiga/Latin/Uganda
+ { 58, 118, 50, 183, 183, 239, 239, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 513, 505, 169, 0, 3148, 3148, 3188, 3188, 3175, 3175, 130, 126, 306, 5, 22, 150, 682, 2, 9, 989, 993, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 5, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 1, 3, 4, 6, 4, 2, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/China
+ { 58, 118, 107, 183, 183, 239, 239, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 513, 129, 198, 43, 3148, 3148, 3188, 3188, 3175, 3175, 130, 126, 306, 5, 22, 142, 824, 2, 9, 989, 995, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 14, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 3, 2, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Hong Kong
+ { 58, 118, 139, 183, 183, 239, 239, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 513, 129, 198, 43, 3148, 3148, 3188, 3188, 3175, 3175, 130, 126, 306, 5, 22, 151, 826, 2, 9, 989, 1004, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 14, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 4, 3, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Macao
+ { 58, 118, 210, 183, 183, 239, 239, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 513, 78, 198, 43, 3148, 3148, 3188, 3188, 3175, 3175, 130, 126, 306, 5, 22, 10, 829, 2, 9, 989, 1013, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 14, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 1, 4, 4, 6, 4, 3, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Singapore
+ { 58, 137, 107, 183, 183, 244, 244, 6, 0, 1, 2, 3, 4, 5, 10, 51, 52, 53, 54, 513, 129, 182, 43, 3148, 3148, 4166, 4166, 3175, 3175, 130, 126, 308, 5, 22, 142, 824, 2, 9, 1016, 1020, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 16, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 3, 2, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Hong Kong
+ { 58, 137, 139, 183, 183, 244, 244, 6, 0, 1, 2, 3, 4, 5, 10, 51, 52, 53, 54, 513, 129, 182, 43, 3148, 3148, 4166, 4166, 3175, 3175, 130, 126, 308, 5, 22, 151, 833, 2, 9, 1016, 1029, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 16, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 4, 3, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Macao
+ { 58, 137, 228, 183, 183, 239, 239, 6, 0, 1, 2, 3, 4, 5, 10, 51, 52, 53, 54, 491, 505, 182, 43, 3148, 3148, 4166, 4166, 3175, 3175, 130, 126, 0, 5, 22, 10, 836, 2, 9, 1016, 1038, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 16, 6, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 3, 4, 6, 4, 2, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Taiwan
+ { 59, 27, 193, 0, 0, 249, 249, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 573, 596, 10, 0, 4186, 4186, 4253, 4253, 4289, 4289, 0, 0, 0, 5, 22, 133, 839, 4, 0, 1040, 1059, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 67, 67, 36, 36, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 0, 19, 7, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Church/Cyrillic/Russia
+ { 60, 27, 193, 0, 0, 257, 257, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 606, 49, 10, 0, 4302, 4302, 4367, 4367, 4399, 4399, 0, 0, 0, 5, 22, 133, 857, 4, 0, 1066, 1071, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 65, 65, 32, 32, 13, 13, 2, 2, 4, 17, 23, 1, 12, 5, 0, 5, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chuvash/Cyrillic/Russia
+ { 61, 66, 91, 0, 0, 267, 267, 6, 1, 9, 2, 3, 48, 5, 63, 13, 14, 18, 16, 628, 423, 10, 0, 4412, 4412, 4483, 4483, 4510, 4510, 152, 152, 0, 5, 22, 22, 83, 4, 0, 1077, 1083, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 23, 10, 13, 5, 71, 71, 27, 27, 13, 13, 16, 16, 4, 17, 23, 1, 4, 5, 0, 6, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Colognian/Latin/Germany
+ { 63, 66, 246, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 186, 10, 0, 4523, 4523, 4583, 4583, 83, 83, 168, 168, 0, 5, 22, 94, 0, 2, 0, 1094, 1102, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 60, 60, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 0, 4, 0, 8, 14, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Cornish/Latin/United Kingdom
+ { 64, 66, 84, 0, 0, 275, 275, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 11, 12, 651, 186, 10, 0, 4610, 4610, 4660, 4660, 4694, 4694, 0, 0, 0, 5, 22, 155, 405, 4, 51, 1116, 1121, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 10, 13, 5, 50, 50, 34, 34, 13, 13, 2, 2, 4, 17, 23, 3, 4, 5, 7, 5, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Corsican/Latin/France
+ { 66, 66, 60, 0, 0, 143, 143, 6, 1, 0, 2, 3, 48, 5, 10, 13, 14, 18, 16, 404, 676, 98, 0, 2699, 2699, 2756, 2756, 2783, 2796, 0, 0, 218, 5, 22, 22, 405, 4, 0, 1128, 1136, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 15, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 4, 5, 0, 8, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Croatia
+ { 66, 66, 29, 0, 0, 143, 143, 6, 1, 0, 2, 3, 48, 5, 10, 13, 14, 18, 16, 404, 689, 98, 0, 2699, 2699, 2756, 2756, 2796, 2796, 0, 0, 218, 5, 22, 135, 618, 4, 0, 1128, 686, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 9, 15, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 2, 19, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Bosnia and Herzegovina
+ { 67, 66, 64, 0, 0, 282, 282, 6, 1, 9, 2, 3, 4, 5, 10, 13, 14, 18, 16, 698, 49, 114, 1, 4707, 4707, 4755, 4755, 4775, 4775, 172, 172, 311, 5, 22, 158, 869, 4, 0, 1144, 1151, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 4, 48, 48, 20, 20, 13, 13, 4, 4, 5, 17, 23, 2, 12, 5, 0, 7, 5, {67,90,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Czech/Latin/Czechia
+ { 68, 66, 65, 0, 0, 289, 289, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 715, 49, 212, 212, 4788, 4788, 4838, 4838, 4874, 4874, 0, 0, 0, 5, 22, 160, 881, 4, 0, 1156, 1161, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 50, 50, 36, 36, 13, 13, 2, 2, 5, 17, 23, 3, 11, 5, 0, 5, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Denmark
+ { 68, 66, 95, 0, 0, 289, 289, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 715, 49, 212, 212, 4788, 4788, 4838, 4838, 4874, 4874, 0, 0, 0, 5, 22, 160, 881, 4, 0, 1156, 1168, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 50, 50, 36, 36, 13, 13, 2, 2, 5, 17, 23, 3, 11, 5, 0, 5, 8, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Greenland
+ { 69, 132, 144, 0, 0, 0, 0, 2, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 283, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 163, 0, 15, 0, 1176, 1186, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 10, 13, {77,86,82}, 2, 1, 5, 6, 7, 1, 3, 3 }, // Divehi/Thaana/Maldives
+ { 70, 29, 110, 0, 0, 297, 306, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 738, 129, 61, 76, 4887, 4887, 4937, 4937, 4966, 4988, 176, 176, 0, 5, 22, 120, 892, 2, 0, 1199, 664, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 50, 50, 29, 29, 22, 24, 4, 9, 4, 17, 23, 1, 10, 4, 0, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Dogri/Devanagari/India
+ { 71, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 16, 17, 113, 129, 10, 0, 5012, 5012, 5056, 5056, 5083, 5083, 180, 185, 0, 5, 22, 11, 0, 4, 0, 1204, 1209, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 44, 44, 27, 27, 13, 13, 5, 6, 4, 17, 23, 4, 0, 5, 0, 5, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Duala/Latin/Cameroon
+ { 72, 66, 165, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 394, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 22, 83, 15, 58, 1217, 1217, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Netherlands
+ { 72, 66, 13, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 394, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 165, 902, 15, 58, 1217, 1227, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 16, 5, 7, 10, 5, {65,87,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Aruba
+ { 72, 66, 23, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 187, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 22, 83, 15, 58, 1232, 1238, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Belgium
+ { 72, 66, 44, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 394, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 10, 918, 15, 58, 1217, 1244, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 18, 5, 7, 10, 19, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Caribbean Netherlands
+ { 72, 66, 62, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 394, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 169, 936, 15, 58, 1217, 1263, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 30, 5, 7, 10, 7, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Curacao
+ { 72, 66, 211, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 394, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 169, 936, 15, 58, 1217, 1270, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 30, 5, 7, 10, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Sint Maarten
+ { 72, 66, 223, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 16, 17, 113, 394, 10, 0, 5096, 5096, 5154, 5154, 5174, 5174, 168, 168, 0, 5, 22, 10, 966, 15, 58, 1217, 1282, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 17, 5, 7, 10, 8, {83,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Suriname
+ { 73, 134, 27, 314, 314, 314, 314, 6, 0, 1, 2, 67, 4, 5, 10, 14, 15, 16, 17, 756, 103, 225, 255, 5187, 5187, 5265, 5265, 5298, 5298, 185, 191, 0, 5, 22, 173, 983, 2, 0, 1290, 1296, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 10, 30, 22, 78, 78, 33, 33, 26, 26, 5, 6, 4, 17, 23, 3, 8, 4, 0, 6, 5, {66,84,78}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Dzongkha/Tibetan/Bhutan
+ { 74, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 5324, 5324, 5387, 5387, 5414, 5414, 190, 197, 0, 5, 22, 176, 991, 2, 9, 1301, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 63, 63, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Embu/Latin/Kenya
+ { 75, 66, 248, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1312, 964, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 16, 13, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States
+ { 75, 28, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 5427, 5427, 5511, 5511, 5559, 5559, 192, 199, 0, 5, 22, 10, 0, 15, 0, 1328, 1338, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 84, 84, 48, 48, 20, 20, 4, 4, 4, 17, 23, 1, 0, 5, 0, 10, 25, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Deseret/United States
+ { 75, 66, 5, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 1363, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/American Samoa
+ { 75, 66, 8, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 1377, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 8, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Anguilla
+ { 75, 66, 10, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 1385, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 17, {88,67,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Antigua and Barbuda
+ { 75, 66, 15, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 6, 14, 15, 16, 17, 113, 129, 23, 38, 0, 0, 56, 56, 83, 5579, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1402, 1402, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 15, 7, 56, 56, 27, 27, 13, 24, 2, 2, 5, 17, 23, 1, 17, 4, 6, 18, 9, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Australia
+ { 75, 66, 16, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 15, 0, 1321, 1420, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Austria
+ { 75, 66, 18, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1055, 2, 9, 1321, 1427, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {66,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Bahamas
+ { 75, 66, 21, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1070, 2, 9, 1321, 1434, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 8, {66,66,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Barbados
+ { 75, 66, 23, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 78, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 4, 0, 1321, 1442, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Belgium
+ { 75, 66, 24, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 786, 78, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1086, 2, 9, 1321, 1449, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 13, 4, 6, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Belize
+ { 75, 66, 26, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1099, 2, 9, 1321, 1455, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 7, {66,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Bermuda
+ { 75, 66, 30, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 786, 78, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 153, 1115, 2, 9, 1321, 1462, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 8, {66,87,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Botswana
+ { 75, 66, 33, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 1470, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 30, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Indian Ocean Territory
+ { 75, 66, 34, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 1500, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Virgin Islands
+ { 75, 66, 38, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 10, 0, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 182, 1129, 2, 9, 1321, 1522, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 15, 4, 6, 7, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Burundi
+ { 75, 66, 40, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 11, 1144, 2, 9, 1321, 1529, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 25, 4, 6, 7, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cameroon
+ { 75, 66, 41, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 103, 23, 38, 0, 0, 56, 56, 83, 83, 168, 168, 0, 5, 22, 10, 1169, 2, 9, 1537, 1553, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 15, 7, 56, 56, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 15, 4, 6, 16, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Canada
+ { 75, 66, 45, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1184, 2, 9, 1321, 1559, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 14, {75,89,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cayman Islands
+ { 75, 66, 51, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1321, 1573, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 16, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Christmas Island
+ { 75, 66, 53, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1321, 1589, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 23, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cocos Islands
+ { 75, 66, 58, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1205, 2, 9, 1321, 1612, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 12, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cook Islands
+ { 75, 66, 63, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 2, 9, 1321, 1624, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 4, 6, 7, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cyprus
+ { 75, 66, 65, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 212, 212, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 160, 1223, 4, 0, 1321, 1630, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 12, 5, 0, 7, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Denmark
+ { 75, 66, 66, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 1637, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 12, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Diego Garcia
+ { 75, 66, 68, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 1649, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 8, {88,67,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Dominica
+ { 75, 66, 74, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 6, 1235, 2, 9, 1321, 1657, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 14, 4, 6, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Eritrea
+ { 75, 66, 76, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 155, 1249, 2, 9, 1321, 1664, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 8, {83,90,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Eswatini
+ { 75, 66, 78, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 0, 0, 4, 0, 1321, 1672, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 5, 0, 7, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Europe
+ { 75, 66, 80, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1264, 2, 9, 1321, 1678, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 16, {70,75,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Falkland Islands
+ { 75, 66, 82, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1286, 2, 9, 1321, 1694, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 13, 4, 6, 7, 4, {70,74,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Fiji
+ { 75, 66, 83, 0, 0, 333, 333, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 213, 213, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 4, 0, 1321, 1698, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 4, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Finland
+ { 75, 66, 89, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 185, 1299, 2, 9, 1321, 1705, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gambia
+ { 75, 66, 91, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 4, 0, 1321, 1711, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Germany
+ { 75, 66, 92, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 15, 1313, 2, 9, 1321, 1718, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 13, 4, 6, 7, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Ghana
+ { 75, 66, 93, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1326, 2, 9, 1321, 1723, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 9, {71,73,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gibraltar
+ { 75, 66, 96, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 1732, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 7, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Grenada
+ { 75, 66, 98, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 1739, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 4, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Guam
+ { 75, 66, 100, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1341, 2, 9, 1321, 1743, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 8, 4, 6, 7, 8, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Guernsey
+ { 75, 66, 103, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1349, 2, 9, 1321, 1751, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 6, {71,89,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Guyana
+ { 75, 66, 107, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 142, 1365, 2, 9, 1321, 1757, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 16, 4, 6, 7, 19, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Hong Kong
+ { 75, 66, 110, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 804, 78, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 120, 1381, 2, 9, 1321, 1478, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 12, 4, 6, 7, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // English/Latin/India
+ { 75, 66, 111, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 212, 212, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 186, 1393, 2, 9, 1321, 1776, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Indonesia
+ { 75, 66, 114, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 186, 10, 0, 0, 0, 56, 56, 83, 83, 168, 168, 0, 5, 22, 22, 83, 2, 9, 1321, 1785, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 56, 56, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 4, 4, 6, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Ireland
+ { 75, 66, 115, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1341, 2, 9, 1321, 1792, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 8, 4, 6, 7, 11, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Isle of Man
+ { 75, 66, 116, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 11, 1, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 48, 1410, 2, 9, 1321, 1803, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 4, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 6, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // English/Latin/Israel
+ { 75, 66, 119, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1428, 2, 9, 1321, 1809, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {74,77,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Jamaica
+ { 75, 66, 121, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1341, 2, 9, 1321, 1816, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 8, 4, 6, 7, 6, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Jersey
+ { 75, 66, 124, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 176, 1443, 2, 9, 1321, 1307, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 15, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Kenya
+ { 75, 66, 125, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1321, 1822, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 8, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Kiribati
+ { 75, 66, 133, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 9, 1458, 2, 9, 1321, 1830, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 7, {90,65,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Lesotho
+ { 75, 66, 134, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1476, 2, 9, 1321, 1837, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Liberia
+ { 75, 66, 139, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 151, 1491, 2, 9, 1321, 1844, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 15, 4, 6, 7, 15, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Macao
+ { 75, 66, 141, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 188, 1506, 2, 9, 1321, 1859, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Madagascar
+ { 75, 66, 142, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 190, 1521, 2, 9, 1321, 1869, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 6, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malawi
+ { 75, 66, 143, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 192, 1536, 2, 9, 1321, 1875, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malaysia
+ { 75, 66, 144, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 283, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 194, 1553, 15, 0, 1321, 1883, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 5, 0, 7, 8, {77,86,82}, 2, 1, 5, 6, 7, 1, 3, 3 }, // English/Latin/Maldives
+ { 75, 66, 146, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 2, 9, 1321, 1891, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 4, 6, 7, 5, {69,85,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Malta
+ { 75, 66, 147, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 1896, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 16, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Marshall Islands
+ { 75, 66, 150, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 196, 1570, 2, 9, 1321, 1912, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 9, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Mauritius
+ { 75, 66, 153, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 1921, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 10, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Micronesia
+ { 75, 66, 158, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 1931, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 10, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Montserrat
+ { 75, 66, 162, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1585, 2, 9, 1321, 1941, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Namibia
+ { 75, 66, 163, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1321, 1948, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 5, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Nauru
+ { 75, 66, 165, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 15, 58, 1321, 1953, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 7, 7, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Netherlands
+ { 75, 66, 167, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1205, 2, 9, 1321, 1964, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 11, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/New Zealand
+ { 75, 66, 169, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 124, 1600, 2, 9, 1321, 1975, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 7, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Nigeria
+ { 75, 66, 171, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1205, 2, 9, 1321, 1982, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 4, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Niue
+ { 75, 66, 172, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1321, 1986, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 14, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Norfolk Island
+ { 75, 66, 173, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 2000, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 24, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Northern Mariana Islands
+ { 75, 66, 178, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 196, 1614, 2, 9, 1321, 2024, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 8, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Pakistan
+ { 75, 66, 179, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 2032, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 5, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Palau
+ { 75, 66, 182, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 134, 1629, 2, 9, 1321, 2037, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 16, {80,71,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Papua New Guinea
+ { 75, 66, 185, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 146, 685, 2, 9, 1321, 2053, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 11, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Philippines
+ { 75, 66, 186, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1205, 2, 9, 1321, 2064, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 16, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Pitcairn
+ { 75, 66, 189, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 2080, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Puerto Rico
+ { 75, 66, 194, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 198, 1651, 2, 9, 1321, 2091, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 13, 4, 6, 7, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Rwanda
+ { 75, 66, 196, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1664, 2, 9, 1321, 2097, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 9, {83,72,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Helena
+ { 75, 66, 197, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 2106, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 16, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Kitts and Nevis
+ { 75, 66, 198, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 2122, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 8, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Lucia
+ { 75, 66, 201, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1017, 2, 9, 1321, 2130, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 27, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Vincent and Grenadines
+ { 75, 66, 202, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 200, 1679, 2, 9, 1321, 1372, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 11, 4, 6, 7, 5, {87,83,84}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Samoa
+ { 75, 66, 208, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 203, 1690, 2, 9, 1321, 2157, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Seychelles
+ { 75, 66, 209, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 18, 1707, 2, 9, 1321, 2167, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 20, 4, 6, 7, 12, {83,76,69}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sierra Leone
+ { 75, 66, 210, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1727, 2, 9, 1321, 2179, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Singapore
+ { 75, 66, 211, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 169, 1743, 2, 9, 1321, 2188, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 29, 4, 6, 7, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sint Maarten
+ { 75, 66, 213, 0, 0, 333, 333, 6, 1, 0, 2, 3, 4, 5, 6, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 22, 83, 4, 20, 1321, 2200, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Slovenia
+ { 75, 66, 214, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1772, 2, 9, 1321, 2208, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 15, {83,66,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Solomon Islands
+ { 75, 66, 216, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 786, 821, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 9, 1458, 2, 9, 1321, 2223, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 12, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/South Africa
+ { 75, 66, 219, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1794, 2, 9, 1321, 2235, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 20, 4, 6, 7, 11, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/South Sudan
+ { 75, 66, 222, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 0, 1814, 2, 9, 1321, 2246, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 14, 4, 6, 7, 5, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // English/Latin/Sudan
+ { 75, 66, 225, 0, 0, 333, 333, 6, 1, 9, 2, 3, 4, 5, 63, 14, 15, 16, 17, 0, 103, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 160, 1828, 4, 0, 1321, 2251, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 13, 5, 0, 7, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sweden
+ { 75, 66, 226, 0, 0, 333, 333, 6, 0, 17, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 49, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 0, 1841, 15, 65, 1321, 2257, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 11, 5, 5, 7, 11, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Switzerland
+ { 75, 66, 230, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 121, 1852, 2, 9, 1321, 2268, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 18, 4, 6, 7, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tanzania
+ { 75, 66, 234, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1205, 2, 9, 1321, 2276, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 7, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tokelau
+ { 75, 66, 235, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 205, 1870, 2, 9, 1321, 2283, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 14, 4, 6, 7, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tonga
+ { 75, 66, 236, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1884, 2, 9, 1321, 2288, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 24, 4, 6, 7, 17, {84,84,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Trinidad and Tobago
+ { 75, 66, 241, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 2305, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Turks and Caicos Islands
+ { 75, 66, 242, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 10, 1038, 2, 9, 1321, 2327, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 6, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tuvalu
+ { 75, 66, 243, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 147, 1908, 2, 9, 1321, 983, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 16, 4, 6, 7, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // English/Latin/Uganda
+ { 75, 66, 245, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 1924, 2, 9, 1321, 2333, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 27, 4, 6, 7, 20, {65,69,68}, 2, 1, 6, 6, 7, 1, 3, 3 }, // English/Latin/United Arab Emirates
+ { 75, 66, 246, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 186, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 94, 1951, 2, 9, 2353, 2368, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 13, 4, 6, 15, 14, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/United Kingdom
+ { 75, 66, 247, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 2382, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 21, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States Outlying Islands
+ { 75, 66, 249, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 1008, 2, 9, 1321, 2403, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 19, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States Virgin Islands
+ { 75, 66, 252, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 207, 1964, 2, 9, 1321, 2422, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 12, 4, 6, 7, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Vanuatu
+ { 75, 66, 258, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 0, 0, 2, 9, 1321, 2429, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 4, 6, 7, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/world
+ { 75, 66, 260, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 134, 1976, 2, 9, 1321, 635, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Zambia
+ { 75, 66, 261, 0, 0, 333, 333, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 786, 129, 10, 0, 0, 0, 56, 56, 83, 83, 82, 203, 0, 5, 22, 179, 1008, 2, 9, 1321, 2434, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Zimbabwe
+ { 75, 115, 246, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 5603, 5603, 5690, 5690, 5731, 5731, 196, 205, 0, 5, 22, 94, 0, 15, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 87, 87, 41, 41, 20, 20, 4, 4, 4, 17, 23, 1, 0, 5, 0, 0, 0, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Shavian/United Kingdom
+ { 76, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 5751, 5811, 5892, 5892, 83, 83, 0, 0, 0, 5, 22, 133, 0, 15, 0, 2442, 2453, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 60, 81, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 11, 13, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Erzya/Cyrillic/Russia
+ { 77, 66, 258, 0, 0, 342, 342, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 831, 105, 10, 0, 5919, 5919, 5969, 5969, 5989, 5989, 200, 209, 316, 5, 22, 0, 0, 4, 0, 2466, 2475, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, 8, 13, 5, 50, 50, 20, 20, 13, 13, 3, 3, 6, 17, 23, 0, 0, 5, 0, 9, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Esperanto/Latin/world
+ { 78, 66, 75, 0, 0, 351, 351, 6, 1, 9, 2, 3, 48, 5, 63, 13, 14, 18, 16, 404, 49, 10, 0, 6002, 6002, 6064, 6064, 6064, 6064, 0, 0, 322, 5, 22, 22, 405, 4, 20, 2480, 2485, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 18, 8, 13, 5, 62, 62, 13, 13, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Estonian/Latin/Estonia
+ { 79, 66, 92, 0, 0, 359, 370, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 862, 567, 277, 277, 6077, 6077, 6120, 6120, 6147, 6147, 203, 212, 0, 5, 22, 15, 1990, 2, 9, 2490, 2496, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 20, 12, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 3, 10, 4, 6, 6, 12, {71,72,83}, 2, 1, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Ghana
+ { 79, 66, 233, 0, 0, 359, 370, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 862, 567, 10, 0, 6077, 6077, 6120, 6120, 6147, 6147, 203, 212, 0, 5, 22, 127, 2000, 2, 9, 2490, 2508, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 13, 5, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 5, 33, 4, 6, 6, 11, {88,79,70}, 0, 0, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Togo
+ { 80, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 129, 10, 0, 6160, 6160, 6244, 6244, 6273, 6273, 206, 217, 0, 5, 22, 11, 2033, 4, 0, 2519, 2525, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 84, 84, 29, 29, 13, 13, 7, 9, 4, 17, 23, 4, 16, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ewondo/Latin/Cameroon
+ { 81, 66, 81, 0, 0, 380, 289, 6, 1, 0, 2, 3, 48, 5, 10, 14, 15, 16, 17, 404, 49, 10, 0, 6286, 6286, 6359, 6386, 6420, 6420, 0, 0, 328, 5, 22, 160, 2049, 4, 20, 2532, 2540, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 2, 11, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Faroe Islands
+ { 81, 66, 65, 0, 0, 380, 289, 6, 1, 0, 2, 3, 48, 5, 10, 14, 15, 16, 17, 404, 49, 10, 0, 6286, 6286, 6359, 6386, 6420, 6420, 0, 0, 328, 5, 22, 160, 2049, 4, 20, 2532, 1161, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 3, 11, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Denmark
+ { 83, 66, 185, 0, 0, 389, 398, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 6433, 6433, 6487, 6487, 6487, 6487, 0, 0, 0, 5, 22, 146, 2060, 2, 9, 2547, 826, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 54, 54, 27, 27, 27, 27, 2, 2, 5, 17, 23, 1, 17, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Filipino/Latin/Philippines
+ { 84, 66, 83, 0, 0, 351, 351, 6, 1, 9, 2, 3, 48, 5, 10, 15, 15, 17, 17, 698, 885, 213, 213, 6514, 6580, 6660, 6660, 6680, 6680, 213, 226, 331, 336, 353, 22, 405, 4, 0, 2555, 2560, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 12, 4, 66, 80, 20, 20, 13, 13, 3, 3, 5, 17, 23, 1, 4, 5, 0, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Finnish/Latin/Finland
+ { 85, 66, 84, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2573, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/France
+ { 85, 66, 4, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 209, 2077, 4, 20, 2565, 2579, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // French/Latin/Algeria
+ { 85, 66, 23, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 79, 297, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2586, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 26, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Belgium
+ { 85, 66, 25, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 2594, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Benin
+ { 85, 66, 37, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 2599, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burkina Faso
+ { 85, 66, 38, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 182, 2108, 4, 20, 2565, 1522, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 15, 5, 7, 8, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burundi
+ { 85, 66, 40, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 216, 229, 376, 232, 249, 11, 2123, 4, 20, 2565, 1209, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 5, 4, 6, 17, 23, 4, 16, 5, 7, 8, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Cameroon
+ { 85, 66, 41, 0, 0, 406, 406, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 15, 14, 113, 103, 323, 323, 6693, 6693, 6744, 6744, 6778, 6778, 168, 168, 376, 232, 249, 10, 2139, 4, 20, 2611, 1553, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 27, 9, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 1, 15, 5, 7, 17, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // French/Latin/Canada
+ { 85, 66, 46, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 11, 2123, 4, 20, 2565, 2628, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 25, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Central African Republic
+ { 85, 66, 48, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 11, 2123, 4, 20, 2565, 2653, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Chad
+ { 85, 66, 55, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 12, 2154, 4, 20, 2565, 2658, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Comoros
+ { 85, 66, 56, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 11, 2123, 4, 20, 2565, 2665, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 17, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo - Brazzaville
+ { 85, 66, 57, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 11, 2168, 4, 20, 2565, 2682, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 15, 5, 7, 8, 14, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo - Kinshasa
+ { 85, 66, 67, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 3, 2183, 4, 20, 2565, 2696, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 16, 5, 7, 8, 8, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // French/Latin/Djibouti
+ { 85, 66, 73, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 11, 2123, 4, 20, 2565, 2704, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 18, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Equatorial Guinea
+ { 85, 66, 85, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2722, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Guiana
+ { 85, 66, 86, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 211, 2199, 4, 20, 2565, 2738, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 19, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Polynesia
+ { 85, 66, 88, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 11, 2123, 4, 20, 2565, 2757, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Gabon
+ { 85, 66, 97, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2762, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guadeloupe
+ { 85, 66, 102, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 215, 2208, 4, 20, 2565, 2704, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 13, 5, 7, 8, 6, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guinea
+ { 85, 66, 104, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 15, 2221, 4, 20, 2565, 2772, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 16, 5, 7, 8, 5, {72,84,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Haiti
+ { 85, 66, 118, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 2777, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 13, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Ivory Coast
+ { 85, 66, 138, 0, 0, 406, 406, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2790, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Luxembourg
+ { 85, 66, 141, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 188, 2237, 4, 20, 2565, 1859, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 15, 5, 7, 8, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Madagascar
+ { 85, 66, 145, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 547, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mali
+ { 85, 66, 148, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2800, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Martinique
+ { 85, 66, 149, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 217, 2252, 4, 20, 2565, 2810, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 19, 5, 7, 8, 10, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritania
+ { 85, 66, 150, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 196, 2271, 4, 20, 2565, 2820, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 18, 5, 7, 8, 7, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritius
+ { 85, 66, 151, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2827, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mayotte
+ { 85, 66, 155, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2834, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Monaco
+ { 85, 66, 159, 0, 0, 406, 406, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 168, 168, 376, 232, 249, 0, 2289, 4, 20, 2565, 2840, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 0, 15, 5, 7, 8, 5, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Morocco
+ { 85, 66, 166, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 211, 2199, 4, 20, 2565, 2845, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 18, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/New Caledonia
+ { 85, 66, 170, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 1975, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Niger
+ { 85, 66, 191, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2863, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Reunion
+ { 85, 66, 194, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 198, 2304, 4, 20, 2565, 2091, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Rwanda
+ { 85, 66, 195, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2873, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Barthelemy
+ { 85, 66, 199, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2889, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Martin
+ { 85, 66, 200, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 22, 405, 4, 20, 2565, 2901, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 24, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Pierre and Miquelon
+ { 85, 66, 206, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 2925, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Senegal
+ { 85, 66, 208, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 203, 2318, 4, 20, 2565, 2157, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 21, 5, 7, 8, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Seychelles
+ { 85, 66, 226, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 19, 20, 0, 49, 350, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 0, 2339, 4, 20, 2932, 2947, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 17, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 0, 12, 5, 7, 15, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Switzerland
+ { 85, 66, 227, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 219, 2351, 4, 20, 2565, 2953, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // French/Latin/Syria
+ { 85, 66, 233, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 127, 2091, 4, 20, 2565, 2508, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Togo
+ { 85, 66, 238, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 221, 2365, 4, 20, 2565, 2958, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Tunisia
+ { 85, 66, 252, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 23, 38, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 207, 2379, 4, 20, 2565, 2422, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 15, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Vanuatu
+ { 85, 66, 256, 0, 0, 406, 406, 6, 1, 68, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 186, 10, 0, 6693, 6693, 6744, 6744, 6778, 6778, 0, 0, 376, 232, 249, 211, 2199, 4, 20, 2565, 2965, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 16, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Wallis and Futuna
+ { 86, 66, 117, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 14, 15, 893, 78, 10, 0, 6791, 6791, 6840, 6840, 6778, 6778, 5, 128, 0, 5, 22, 22, 405, 15, 0, 2981, 2987, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Friulian/Latin/Italy
+ { 87, 66, 206, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 127, 2393, 4, 0, 2993, 2999, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Senegal
+ { 87, 1, 37, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 223, 2412, 15, 0, 3007, 3017, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 25, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Burkina Faso
+ { 87, 1, 40, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 229, 2463, 15, 0, 3007, 3042, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 8, 44, 5, 0, 10, 16, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Cameroon
+ { 87, 1, 89, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 61, 76, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 185, 2507, 15, 0, 3007, 3058, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 15, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 29, 5, 0, 10, 14, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Gambia
+ { 87, 1, 92, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 61, 76, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 15, 2536, 15, 0, 3007, 3072, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 15, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 3, 23, 5, 0, 10, 8, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Ghana
+ { 87, 1, 101, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 223, 2412, 15, 0, 3007, 3080, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 23, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea-Bissau
+ { 87, 1, 102, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 215, 2559, 15, 0, 3007, 3080, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 25, 5, 0, 10, 8, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea
+ { 87, 1, 134, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 61, 76, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 10, 2584, 15, 0, 3007, 3103, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 15, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 31, 5, 0, 10, 18, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Liberia
+ { 87, 1, 149, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 61, 76, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 217, 2615, 15, 0, 3007, 3121, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 15, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 37, 5, 0, 10, 16, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Mauritania
+ { 87, 1, 169, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 124, 2652, 15, 0, 3007, 3137, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 33, 5, 0, 10, 18, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Nigeria
+ { 87, 1, 170, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 223, 2412, 15, 0, 3007, 3155, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Niger
+ { 87, 1, 206, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 10, 0, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 223, 2412, 15, 0, 3007, 3167, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 13, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 16, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Senegal
+ { 87, 1, 209, 421, 421, 427, 436, 444, 0, 69, 2, 70, 4, 5, 72, 14, 15, 16, 17, 920, 283, 61, 76, 6965, 6965, 7083, 7083, 7135, 7135, 227, 240, 382, 394, 22, 18, 2685, 15, 0, 3007, 3183, 6, 6, 9, 8, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 17, 8, 15, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 33, 5, 0, 10, 14, {83,76,69}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Sierra Leone
+ { 87, 66, 37, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 127, 2393, 4, 0, 2993, 3197, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 14, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Burkina Faso
+ { 87, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 11, 2718, 4, 0, 2993, 3211, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 4, 18, 5, 0, 6, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Cameroon
+ { 87, 66, 89, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 23, 38, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 185, 2736, 4, 0, 2993, 3219, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 15, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 13, 5, 0, 6, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Gambia
+ { 87, 66, 92, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 23, 38, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 15, 0, 4, 0, 2993, 3225, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 15, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 0, 5, 0, 6, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Ghana
+ { 87, 66, 101, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 127, 2393, 4, 0, 2993, 3230, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea-Bissau
+ { 87, 66, 102, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 215, 0, 4, 0, 2993, 3230, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 0, 5, 0, 6, 4, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea
+ { 87, 66, 134, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 23, 38, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 10, 2749, 4, 0, 2993, 3242, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 15, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 16, 5, 0, 6, 9, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Liberia
+ { 87, 66, 149, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 23, 38, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 217, 2765, 4, 0, 2993, 3251, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 15, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 15, 5, 0, 6, 8, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Mauritania
+ { 87, 66, 169, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 124, 2780, 4, 0, 2993, 3259, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 16, 5, 0, 6, 9, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Nigeria
+ { 87, 66, 170, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 10, 0, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 127, 2393, 4, 0, 2993, 3268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Niger
+ { 87, 66, 209, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 18, 17, 113, 129, 23, 38, 6867, 6867, 6925, 6925, 6952, 6952, 221, 233, 0, 5, 22, 18, 2796, 4, 0, 2993, 3274, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 15, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 18, 5, 0, 6, 11, {83,76,69}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Sierra Leone
+ { 88, 66, 246, 0, 0, 445, 445, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 937, 186, 10, 0, 7157, 7157, 7225, 7225, 7252, 7252, 3, 135, 421, 5, 22, 94, 2814, 2, 9, 3285, 3293, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 10, 13, 5, 68, 68, 27, 27, 13, 13, 1, 1, 6, 17, 23, 1, 15, 4, 6, 8, 22, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Gaelic/Latin/United Kingdom
+ { 89, 66, 92, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38, 7265, 7265, 7297, 7297, 7323, 7323, 0, 0, 0, 5, 22, 15, 50, 2, 9, 3315, 1718, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 32, 32, 26, 26, 13, 13, 2, 2, 4, 17, 23, 3, 10, 4, 6, 2, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ga/Latin/Ghana
+ { 90, 66, 220, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 78, 10, 0, 7336, 7336, 7384, 7384, 1185, 7418, 168, 168, 0, 5, 22, 22, 405, 4, 0, 3317, 455, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 48, 48, 34, 34, 13, 20, 4, 4, 5, 17, 23, 1, 4, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Galician/Latin/Spain
+ { 91, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 7438, 7438, 7503, 7503, 7530, 7530, 0, 0, 0, 5, 22, 147, 2829, 0, 0, 3323, 3330, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Ganda/Latin/Uganda
+ { 92, 33, 77, 0, 0, 0, 0, 6, 0, 74, 2, 3, 4, 5, 10, 14, 15, 16, 17, 985, 78, 61, 76, 7543, 7543, 7543, 7543, 7571, 7571, 0, 0, 0, 5, 22, 0, 105, 15, 0, 3337, 143, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 15, 7, 28, 28, 28, 28, 13, 13, 2, 2, 4, 17, 23, 0, 9, 5, 0, 4, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Geez/Ethiopic/Ethiopia
+ { 92, 33, 74, 0, 0, 0, 0, 6, 0, 74, 2, 3, 4, 5, 10, 14, 15, 16, 17, 985, 78, 61, 76, 7543, 7543, 7543, 7543, 7571, 7571, 0, 0, 0, 5, 22, 6, 0, 15, 0, 3337, 671, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 15, 7, 28, 28, 28, 28, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 4, 4, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Geez/Ethiopic/Eritrea
+ { 93, 35, 90, 0, 0, 455, 455, 6, 1, 9, 2, 3, 4, 5, 10, 13, 14, 11, 12, 1008, 49, 10, 0, 7584, 7584, 7645, 7645, 7672, 7672, 0, 0, 427, 432, 22, 0, 2848, 4, 0, 3341, 3348, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 13, 5, 61, 61, 27, 27, 13, 13, 2, 2, 5, 29, 23, 1, 12, 5, 0, 7, 10, {71,69,76}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Georgian/Georgian/Georgia
+ { 94, 66, 91, 0, 0, 463, 463, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 22, 83, 4, 0, 3358, 3365, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Germany
+ { 94, 66, 16, 0, 0, 463, 463, 6, 1, 9, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 22, 83, 15, 0, 3376, 3376, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 24, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Austria
+ { 94, 66, 23, 0, 0, 463, 463, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 22, 83, 4, 0, 3358, 3400, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Belgium
+ { 94, 66, 117, 0, 0, 463, 463, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 22, 83, 4, 0, 3358, 3407, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Italy
+ { 94, 66, 136, 0, 0, 463, 463, 6, 0, 17, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 0, 2860, 15, 0, 3358, 3414, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 0, 17, 5, 0, 7, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Liechtenstein
+ { 94, 66, 138, 0, 0, 463, 463, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 22, 83, 4, 0, 3358, 3427, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Luxembourg
+ { 94, 66, 226, 0, 0, 463, 463, 6, 0, 17, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0, 7685, 7685, 7744, 7764, 4510, 4510, 0, 0, 461, 5, 22, 0, 2860, 15, 65, 3436, 3436, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 0, 17, 5, 5, 21, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Switzerland
+ { 96, 39, 94, 0, 0, 472, 472, 6, 1, 0, 2, 3, 4, 5, 6, 11, 12, 14, 15, 113, 129, 23, 38, 7791, 7791, 7845, 7845, 7872, 7872, 231, 244, 0, 5, 22, 22, 2877, 4, 0, 3457, 3465, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 15, 7, 54, 54, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Greek/Greek/Greece
+ { 96, 39, 63, 0, 0, 472, 472, 6, 1, 0, 2, 3, 4, 5, 6, 11, 12, 14, 15, 113, 129, 23, 38, 7791, 7791, 7845, 7845, 7872, 7872, 231, 244, 0, 5, 22, 22, 2877, 4, 0, 3457, 3471, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 15, 7, 54, 54, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Greek/Greek/Cyprus
+ { 97, 66, 183, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 7885, 7885, 7885, 7885, 83, 83, 0, 0, 0, 5, 22, 237, 0, 15, 0, 3477, 3484, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 53, 53, 53, 53, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 7, 8, {80,89,71}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Guarani/Latin/Paraguay
+ { 98, 40, 110, 0, 0, 481, 481, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 367, 383, 7938, 7938, 7990, 7990, 8021, 8021, 0, 0, 466, 5, 22, 120, 2881, 2, 9, 3492, 3499, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 16, 8, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 13, 4, 6, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Gujarati/Gujarati/India
+ { 99, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 8039, 8039, 8100, 8100, 8127, 8127, 235, 248, 0, 5, 22, 176, 991, 2, 9, 3503, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 61, 61, 27, 27, 13, 13, 6, 3, 4, 17, 23, 3, 17, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Gusii/Latin/Kenya
+ { 101, 66, 169, 0, 0, 490, 499, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 804, 129, 10, 0, 8140, 8140, 8191, 8191, 8218, 8218, 241, 251, 0, 470, 511, 124, 2894, 15, 0, 3511, 3259, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 1, 15, 5, 0, 5, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Nigeria
+ { 101, 4, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 8231, 8231, 8287, 8287, 83, 83, 0, 0, 0, 5, 22, 124, 2909, 15, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 30, 30, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Arabic/Nigeria
+ { 101, 4, 222, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 8231, 8231, 8287, 8287, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 56, 56, 30, 30, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Hausa/Arabic/Sudan
+ { 101, 66, 92, 0, 0, 490, 499, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 804, 129, 23, 38, 8140, 8140, 8191, 8191, 8218, 8218, 241, 251, 0, 470, 511, 15, 2915, 15, 0, 3511, 3225, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 3, 13, 5, 0, 5, 4, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Ghana
+ { 101, 66, 170, 0, 0, 490, 499, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 804, 129, 10, 0, 8140, 8140, 8191, 8191, 8218, 8218, 241, 251, 0, 470, 511, 127, 2928, 15, 0, 3511, 3516, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 5, 29, 5, 0, 5, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Niger
+ { 102, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 23, 38, 8317, 8317, 8373, 8373, 83, 83, 0, 0, 0, 5, 22, 10, 0, 2, 9, 3521, 3535, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 56, 56, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 6, 14, 19, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Hawaiian/Latin/United States
+ { 103, 47, 116, 0, 0, 507, 507, 6, 0, 1, 2, 3, 35, 37, 10, 15, 15, 17, 17, 1027, 885, 11, 1, 8393, 8393, 8457, 8457, 8502, 8502, 247, 256, 558, 5, 22, 48, 2957, 70, 77, 3554, 3559, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 8, 12, 4, 64, 64, 45, 45, 20, 20, 6, 5, 4, 17, 23, 1, 7, 7, 9, 5, 5, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Hebrew/Hebrew/Israel
+ { 105, 29, 110, 0, 0, 513, 522, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76, 8522, 8522, 8574, 8574, 8605, 8605, 82, 203, 562, 5, 22, 120, 2964, 2, 0, 3564, 664, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 4, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Hindi/Devanagari/India
+ { 105, 66, 110, 0, 0, 530, 540, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 804, 186, 23, 38, 8623, 8623, 8689, 8689, 8727, 8727, 0, 0, 0, 5, 22, 120, 1381, 2, 0, 3570, 1478, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 66, 66, 38, 38, 21, 21, 2, 2, 5, 17, 23, 1, 12, 4, 0, 13, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Hindi/Latin/India
+ { 107, 66, 108, 0, 0, 549, 549, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 12, 11, 1045, 1064, 11, 1, 8748, 8748, 8799, 8799, 8817, 8817, 253, 261, 566, 5, 22, 238, 2976, 4, 0, 3583, 3589, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 12, 4, 51, 51, 18, 18, 16, 16, 3, 3, 4, 17, 23, 2, 13, 5, 0, 6, 12, {72,85,70}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Hungarian/Latin/Hungary
+ { 108, 66, 109, 0, 0, 289, 289, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 885, 10, 0, 8833, 8833, 8913, 8913, 8947, 8947, 256, 264, 570, 5, 22, 160, 2989, 4, 0, 3601, 3609, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 80, 80, 34, 34, 13, 13, 4, 4, 4, 17, 23, 3, 13, 5, 0, 8, 6, {73,83,75}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Icelandic/Latin/Iceland
+ { 109, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 3615, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 3, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ido/Latin/world
+ { 110, 66, 169, 0, 0, 557, 566, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 10, 0, 8960, 8960, 9013, 9013, 83, 83, 260, 268, 0, 5, 22, 124, 3002, 2, 9, 3618, 3622, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 53, 53, 28, 28, 13, 13, 7, 7, 4, 17, 23, 1, 5, 4, 6, 4, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Igbo/Latin/Nigeria
+ { 111, 66, 83, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1077, 885, 213, 213, 9041, 9110, 9182, 9182, 83, 9209, 267, 275, 0, 5, 22, 22, 405, 4, 0, 3630, 3641, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 4, 69, 72, 27, 27, 13, 13, 3, 3, 4, 17, 23, 1, 4, 5, 0, 11, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Inari Sami/Latin/Finland
+ { 112, 66, 111, 0, 0, 574, 584, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 786, 78, 212, 212, 9222, 9222, 9264, 9264, 9291, 9291, 0, 0, 0, 5, 22, 186, 3007, 2, 0, 1776, 1776, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 42, 42, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 16, 4, 0, 9, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Indonesian/Latin/Indonesia
+ { 114, 66, 258, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 16, 17, 14, 15, 1095, 394, 10, 0, 9304, 9304, 9360, 9360, 9387, 9387, 0, 0, 0, 5, 22, 0, 0, 15, 58, 3646, 3657, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 10, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 5, 7, 11, 5, {0,0,0}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Interlingua/Latin/world
+ { 115, 66, 75, 0, 0, 0, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 180, 10, 0, 9400, 9400, 9451, 9451, 9485, 9485, 270, 278, 574, 232, 249, 22, 405, 15, 86, 3662, 3673, 6, 6, 6, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 13, 5, 51, 51, 34, 34, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 6, 11, 7, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Interlingue/Latin/Estonia
+ { 116, 18, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 1121, 61, 76, 9498, 9498, 9498, 9498, 83, 83, 0, 0, 0, 5, 22, 240, 0, 15, 0, 3680, 3686, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 15, 7, 54, 54, 54, 54, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 6, 4, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Canadian Aboriginal/Canada
+ { 116, 66, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 240, 0, 15, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Latin/Canada
+ { 118, 66, 114, 0, 0, 445, 445, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 186, 10, 0, 9552, 9552, 9626, 9626, 9662, 9662, 279, 286, 581, 5, 22, 22, 83, 2, 9, 3690, 3697, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 4, 4, 6, 7, 4, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/Ireland
+ { 118, 66, 246, 0, 0, 445, 445, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 186, 10, 0, 9552, 9552, 9626, 9626, 9662, 9662, 279, 286, 581, 5, 22, 94, 3023, 2, 9, 3690, 3701, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 14, 4, 6, 7, 19, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/United Kingdom
+ { 119, 66, 117, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 78, 10, 0, 9675, 9675, 9731, 9731, 4694, 4694, 0, 0, 0, 5, 22, 22, 405, 4, 0, 3720, 3728, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Italy
+ { 119, 66, 203, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 78, 10, 0, 9675, 9675, 9731, 9731, 4694, 4694, 0, 0, 0, 5, 22, 22, 405, 4, 0, 3720, 3734, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/San Marino
+ { 119, 66, 226, 0, 0, 414, 414, 6, 0, 17, 2, 3, 4, 5, 10, 11, 12, 19, 20, 0, 49, 10, 0, 9675, 9675, 9731, 9731, 4694, 4694, 0, 0, 0, 5, 22, 0, 3037, 15, 65, 3720, 3744, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 15, 5, 5, 8, 8, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Switzerland
+ { 119, 66, 253, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 78, 10, 0, 9675, 9675, 9731, 9731, 4694, 4694, 0, 0, 0, 5, 22, 22, 405, 4, 0, 3720, 3752, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 8, 18, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Vatican City
+ { 120, 53, 120, 183, 183, 183, 183, 6, 0, 1, 2, 3, 4, 5, 10, 51, 52, 53, 54, 513, 821, 391, 1, 9758, 9758, 9785, 9785, 9785, 9785, 283, 290, 587, 590, 22, 145, 3052, 2, 9, 3770, 3770, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 10, 13, 4, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 3, 4, 6, 3, 2, {74,80,89}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Japanese/Japanese/Japan
+ { 121, 66, 111, 0, 0, 593, 603, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 394, 10, 0, 9798, 9798, 9838, 9838, 9866, 9866, 285, 292, 607, 5, 22, 186, 3007, 15, 0, 3773, 3777, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 40, 40, 28, 28, 13, 13, 4, 5, 4, 17, 23, 2, 16, 5, 0, 4, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Javanese/Latin/Indonesia
+ { 122, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 137, 155, 10, 0, 9879, 9879, 9922, 9922, 83, 83, 0, 0, 0, 5, 22, 124, 3055, 15, 0, 3786, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 7, 5, 0, 4, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Jju/Latin/Nigeria
+ { 123, 66, 206, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 129, 10, 0, 9949, 9949, 9998, 9998,10025,10025, 0, 0, 0, 5, 22, 127, 3062, 4, 0, 3790, 3795, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 16, 5, 0, 5, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Jola-Fonyi/Latin/Senegal
+ { 124, 66, 43, 0, 0, 143, 143, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1131, 186, 10, 0,10038,10038,10110,10110,10137,10137, 82, 203, 0, 5, 22, 243, 3078, 4, 20, 3802, 3814, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 13, 5, 72, 72, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 7, 12, 10, {67,86,69}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kabuverdianu/Latin/Cape Verde
+ { 125, 66, 4, 0, 0, 612, 620, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 129, 23, 38,10150,10183,10233,10260,10289,10302, 289, 297, 611, 618, 22, 209, 3096, 0, 0, 3824, 3833, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 15, 7, 33, 50, 27, 29, 13, 13, 7, 9, 7, 21, 23, 2, 14, 4, 0, 9, 8, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Kabyle/Latin/Algeria
+ { 126, 66, 40, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 19, 20, 86, 1158, 10, 0,10315,10315,10315,10315,10368,10368, 0, 0, 0, 5, 22, 11, 3110, 15, 0, 3841, 3845, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 53, 53, 53, 53, 20, 20, 2, 2, 4, 17, 23, 4, 9, 5, 0, 4, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kako/Latin/Cameroon
+ { 127, 66, 95, 0, 0, 627, 627, 6, 1, 0, 2, 3, 48, 5, 63, 12, 11, 20, 19, 86, 103, 212, 212,10388,10388,10485,10485,10512,10512, 0, 0, 0, 5, 22, 160, 3119, 2, 92, 3852, 3863, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 13, 5, 97, 97, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 5, 11, 16, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Kalaallisut/Latin/Greenland
+ { 128, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,10525,10525,10577,10577,10604,10604, 296, 306, 0, 5, 22, 176, 3138, 2, 9, 3879, 3887, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 52, 52, 27, 27, 13, 13, 6, 10, 4, 17, 23, 3, 19, 4, 6, 8, 12, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kalenjin/Latin/Kenya
+ { 129, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,10617,10617,10690,10690,10717,10717, 302, 316, 0, 5, 22, 176, 3157, 2, 9, 3899, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 73, 73, 27, 27, 13, 13, 9, 7, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kamba/Latin/Kenya
+ { 130, 56, 110, 0, 0, 638, 650, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 129, 367, 383,10730,10730,10783,10783,10815,10815, 311, 323, 639, 647, 22, 120, 3173, 2, 9, 3906, 3911, 6, 6, 12, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 16, 8, 53, 53, 32, 32, 19, 19, 9, 7, 8, 35, 23, 1, 13, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kannada/Kannada/India
+ { 132, 4, 110, 661, 661, 667, 677, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 549, 567, 61, 76,10834,10834,10885,10885,10934,10934, 320, 330, 0, 5, 22, 120, 3186, 2, 0, 3915, 3920, 6, 6, 10, 9, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 15, 7, 51, 51, 49, 49, 13, 13, 6, 6, 4, 17, 23, 1, 16, 4, 0, 5, 9, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kashmiri/Arabic/India
+ { 132, 29, 110, 0, 0, 686, 695, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 127, 127,10947,10996,10947,11045,11092,11092, 326, 336, 0, 5, 22, 120, 3202, 15, 0, 3929, 3934, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 49, 49, 49, 47, 13, 13, 5, 5, 4, 17, 23, 1, 11, 5, 0, 5, 10, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kashmiri/Devanagari/India
+ { 133, 27, 123, 0, 0, 0, 703, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 1168, 49, 10, 0,11105,11105,11160,11160,11180,11180, 0, 0, 196, 682, 699, 244, 3213, 4, 0, 3944, 3954, 6, 6, 6, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 13, 5, 55, 55, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 10, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kazakh/Cyrillic/Kazakhstan
+ { 134, 66, 40, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 11, 0, 15, 0, 3963, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 0, 5, 0, 6, 0, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kenyang/Latin/Cameroon
+ { 135, 60, 39, 0, 0, 713, 722, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 61, 76,11193,11238,11284,11284,11323,11323, 0, 0, 722, 5, 22, 245, 3230, 0, 45, 3969, 3974, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 15, 7, 45, 46, 39, 39, 13, 13, 2, 2, 2, 17, 23, 1, 11, 4, 6, 5, 7, {75,72,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Khmer/Khmer/Cambodia
+ { 136, 66, 99, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 246, 0, 15, 0, 3981, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 7, 0, {71,84,81}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kiche/Latin/Guatemala
+ { 137, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,11336,11336,11398,11398,11425,11425, 331, 341, 0, 5, 22, 176, 3241, 2, 9, 3988, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 62, 62, 27, 27, 13, 13, 6, 8, 4, 17, 23, 3, 16, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kikuyu/Latin/Kenya
+ { 138, 66, 194, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 16, 17, 163, 103, 10, 0,11438,11438,11521,11521, 83, 83, 0, 0, 0, 5, 22, 198, 0, 15, 0, 3994, 4005, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 83, 83, 34, 34, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 11, 8, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kinyarwanda/Latin/Rwanda
+ { 141, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 283, 61, 76,11555,11555,11555,11555,11605,11623, 337, 349, 724, 5, 22, 120, 2964, 2, 9, 4013, 664, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 15, 7, 50, 50, 50, 50, 18, 19, 4, 4, 4, 17, 23, 1, 12, 4, 6, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Konkani/Devanagari/India
+ { 142, 63, 218, 0, 0, 731, 731, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1190, 1208, 404, 127,11642,11642,11669,11669,11669,11669, 341, 353, 728, 5, 22, 247, 3257, 2, 9, 4019, 4022, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 9, 16, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 6, 4, 6, 3, 4, {75,82,87}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Korean/Korean/South Korea
+ { 142, 63, 50, 0, 0, 731, 731, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1190, 1208, 169, 0,11642,11642,11669,11669,11669,11669, 341, 353, 728, 5, 22, 248, 3263, 2, 9, 4019, 4026, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 9, 13, 5, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 3, 6, 4, 6, 3, 2, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Korean/Korean/China
+ { 142, 63, 174, 0, 0, 731, 731, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1190, 1208, 404, 127,11642,11642,11669,11669,11669,11669, 341, 353, 728, 5, 22, 247, 3269, 2, 9, 4019, 4028, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 9, 16, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 16, 4, 6, 3, 11, {75,80,87}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Korean/Korean/North Korea
+ { 144, 66, 145, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,11682,11682,11735,11735,11762,11762, 343, 355, 0, 5, 22, 127, 3285, 0, 0, 4039, 4054, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 53, 53, 27, 27, 13, 13, 6, 6, 4, 17, 23, 5, 16, 4, 0, 15, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyraboro Senni/Latin/Mali
+ { 145, 66, 145, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,11775,11775,11827,11827,11762,11762, 343, 355, 0, 5, 22, 127, 3285, 0, 0, 4059, 4054, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 52, 52, 27, 27, 13, 13, 6, 6, 4, 17, 23, 5, 16, 4, 0, 11, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyra Chiini/Latin/Mali
+ { 146, 66, 134, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 23, 38, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 0, 15, 0, 4070, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 6, 0, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kpelle/Latin/Liberia
+ { 146, 66, 102, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 215, 0, 15, 0, 4070, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 6, 0, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kpelle/Latin/Guinea
+ { 148, 66, 239, 0, 0, 738, 738, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1217, 49, 10, 0,11854,11854,11896,11896,11923,11923, 349, 361, 0, 5, 22, 126, 3301, 4, 20, 4076, 4092, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 13, 5, 42, 42, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 12, 5, 7, 16, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kurdish/Latin/Turkey
+ { 149, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 11, 12, 113, 129, 10, 0,11936,11936,12024,12024,12053,12053, 351, 363, 0, 5, 22, 11, 3313, 4, 0, 4099, 4105, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 88, 88, 29, 29, 13, 13, 4, 4, 4, 17, 23, 4, 13, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kwasio/Latin/Cameroon
+ { 150, 27, 128, 0, 0, 745, 745, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 1244, 129, 10, 0,12066,12066,12122,12122,12159,12159, 355, 367, 196, 731, 22, 251, 3326, 4, 0, 4112, 4120, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 13, 5, 56, 56, 37, 37, 13, 13, 5, 14, 4, 18, 23, 3, 15, 5, 0, 8, 10, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kyrgyz/Cyrillic/Kyrgyzstan
+ { 151, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38,12172,12172,12172,12172, 83,12258, 0, 0, 0, 5, 22, 10, 0, 15, 0, 4130, 4142, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 86, 86, 86, 86, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 12, 22, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Lakota/Latin/United States
+ { 152, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 15, 15, 17, 17, 0, 186, 10, 0,12271,12271,12333,12333,12368,12368, 360, 381, 0, 5, 22, 121, 3341, 15, 0, 4164, 4172, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 62, 62, 35, 35, 13, 13, 3, 3, 4, 17, 23, 3, 22, 5, 0, 8, 9, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Langi/Latin/Tanzania
+ { 153, 65, 129, 0, 0, 0, 755, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1267, 129, 420, 1,12381,12381,12437,12437,12472,12472, 363, 384, 0, 5, 22, 254, 3363, 2, 65, 4181, 4181, 6, 6, 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 27, 4, 56, 56, 35, 35, 16, 16, 8, 8, 4, 17, 23, 1, 7, 4, 5, 3, 3, {76,65,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Lao/Lao/Laos
+ { 154, 66, 253, 0, 0, 406, 406, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1286, 1309, 10, 0,12488,12488,12572,12572, 83, 83, 0, 0, 0, 5, 22, 22, 83, 15, 0, 4184, 4190, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 13, 5, 84, 84, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 6, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Latin/Latin/Vatican City
+ { 155, 66, 131, 0, 0, 267, 267, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1317, 49, 10, 0,12599,12670,12741,12791,12841,12841, 371, 392, 749, 5, 22, 22, 3370, 4, 0, 4206, 4214, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 13, 5, 71, 71, 50, 50, 13, 13, 14, 11, 5, 17, 23, 1, 4, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Latvian/Latin/Latvia
+ { 158, 66, 57, 0, 0, 764, 764, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,12854,12854,12953,12953,12980,12980, 385, 403, 0, 5, 22, 11, 3374, 4, 0, 4221, 4228, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 30, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Congo - Kinshasa
+ { 158, 66, 7, 0, 0, 764, 764, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,12854,12854,12953,12953,12980,12980, 385, 403, 0, 5, 22, 255, 3390, 4, 0, 4221, 4258, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Angola
+ { 158, 66, 46, 0, 0, 764, 764, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,12854,12854,12953,12953,12980,12980, 385, 403, 0, 5, 22, 11, 3406, 4, 0, 4221, 4264, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 4, 16, 5, 0, 7, 26, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Central African Republic
+ { 158, 66, 56, 0, 0, 764, 764, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,12854,12854,12953,12953,12980,12980, 385, 403, 0, 5, 22, 11, 3406, 4, 0, 4221, 4290, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 4, 16, 5, 0, 7, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Congo - Brazzaville
+ { 160, 66, 137, 0, 0, 773, 773, 6, 1, 9, 2, 3, 48, 5, 63, 13, 14, 13, 14, 1343, 103, 10, 0,12993,12993,13081,13081,13101,13101, 393, 409, 754, 5, 22, 22, 3422, 4, 0, 4295, 4303, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 27, 10, 13, 5, 88, 88, 20, 20, 13, 13, 9, 6, 6, 17, 23, 1, 5, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lithuanian/Latin/Lithuania
+ { 161, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 4310, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 11, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lojban/Latin/world
+ { 162, 66, 91, 0, 0, 781, 781, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 180, 11, 1,13114,13114,13166,13166,13193,13193, 402, 415, 0, 5, 22, 22, 405, 4, 0, 4321, 4335, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 4, 52, 52, 27, 27, 13, 13, 9, 10, 4, 17, 23, 1, 4, 5, 0, 14, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lower Sorbian/Latin/Germany
+ { 163, 66, 91, 0, 0, 267, 267, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 1370, 50, 447, 469,13206,13206,13270,13270, 4510, 4510, 0, 0, 0, 5, 22, 22, 83, 4, 0, 4341, 4355, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 7, 22, 10, 64, 64, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 14, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Low German/Latin/Germany
+ { 163, 66, 165, 0, 0, 267, 267, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 1370, 50, 447, 469,13206,13206,13270,13270, 4510, 4510, 0, 0, 0, 5, 22, 22, 83, 4, 0, 4341, 4366, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 7, 22, 10, 64, 64, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 14, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Low German/Latin/Netherlands
+ { 164, 66, 57, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,13297,13297,13346,13346,13373,13373, 411, 425, 0, 5, 22, 11, 3427, 0, 0, 4378, 4386, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 49, 49, 27, 27, 13, 13, 5, 6, 4, 17, 23, 2, 17, 4, 0, 8, 16, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luba-Katanga/Latin/Congo - Kinshasa
+ { 165, 66, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 160, 0, 15, 0, 4402, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 15, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Lule Sami/Latin/Sweden
+ { 165, 66, 175, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 160, 0, 15, 0, 4402, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 15, 0, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Lule Sami/Latin/Norway
+ { 166, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,13386,13386,13454,13454,13481,13481, 416, 431, 0, 5, 22, 176, 3444, 0, 0, 4417, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 68, 68, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 16, 4, 0, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luo/Latin/Kenya
+ { 167, 66, 138, 0, 0, 788, 788, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 49, 10, 0,13494,13494,13558,13585, 4510, 4510, 418, 433, 461, 5, 22, 22, 83, 4, 0, 4423, 4423, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 64, 64, 27, 34, 13, 13, 5, 8, 5, 17, 23, 1, 4, 5, 0, 14, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luxembourgish/Latin/Luxembourg
+ { 168, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 13, 14, 18, 16, 0, 186, 10, 0,13619,13619,13693,13693, 83, 83, 168, 168, 0, 5, 22, 176, 3460, 2, 97, 4437, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 74, 74, 20, 20, 13, 13, 4, 4, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luyia/Latin/Kenya
+ { 169, 27, 140, 0, 0, 150, 150, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 0, 180, 10, 0,13713,13713,13766,13766, 3069, 3069, 423, 441, 760, 5, 22, 257, 3476, 4, 0, 4444, 4454, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 53, 53, 34, 34, 13, 13, 7, 5, 5, 17, 23, 4, 16, 5, 0, 10, 18, {77,75,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Macedonian/Cyrillic/Macedonia
+ { 170, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,13800,13800,13861,13861, 1284, 1284, 430, 446, 0, 5, 22, 121, 3492, 2, 0, 4472, 2268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Machame/Latin/Tanzania
+ { 171, 29, 110, 0, 0, 513, 522, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76,13888,13888, 8574, 8574, 8605, 8605, 88, 83, 0, 5, 22, 120, 2964, 15, 0, 4481, 664, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 63, 63, 31, 31, 18, 18, 3, 4, 4, 17, 23, 1, 12, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Maithili/Devanagari/India
+ { 172, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,13951,13951,14009,14009,14036,14036, 435, 455, 0, 5, 22, 261, 0, 15, 0, 4487, 4492, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 58, 58, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 0, 5, 0, 5, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Makhuwa-Meetto/Latin/Mozambique
+ { 173, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,14049,14049,14181,14181,14208,14208, 443, 465, 0, 5, 22, 121, 3492, 2, 9, 4502, 2268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5,132,132, 27, 27, 13, 13, 4, 5, 4, 17, 23, 3, 20, 4, 6, 10, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Makonde/Latin/Tanzania
+ { 174, 66, 141, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 103, 10, 0,14221,14221,14280,14280,14313,14313, 0, 0, 0, 5, 22, 188, 1515, 2, 0, 4512, 4520, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 59, 59, 33, 33, 13, 13, 2, 2, 4, 17, 23, 2, 6, 4, 0, 8, 12, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Malagasy/Latin/Madagascar
+ { 175, 74, 110, 0, 0, 798, 811, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1393, 129, 61, 76,14326,14402,14477,14477,14517,14538, 0, 0, 765, 771, 22, 120, 3512, 2, 9, 4532, 4538, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 76, 75, 40, 40, 21, 20, 2, 2, 6, 27, 23, 1, 11, 4, 6, 6, 6, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Malayalam/Malayalam/India
+ { 176, 66, 143, 0, 0, 584, 584, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 79, 23, 38,14558,14558,14600,14600,14627,14627, 447, 470, 749, 5, 22, 192, 3523, 2, 9, 4544, 1875, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 15, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 16, 4, 6, 6, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Malaysia
+ { 176, 4, 35, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 15, 14, 17, 16, 91, 79, 61, 76,14640,14640,14640,14640, 83, 83, 0, 0, 0, 5, 22, 10, 3539, 2, 9, 4550, 4560, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 7, 15, 7, 34, 34, 34, 34, 13, 13, 2, 2, 4, 17, 23, 1, 10, 4, 6, 10, 5, {66,78,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Arabic/Brunei
+ { 176, 4, 143, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 15, 14, 17, 16, 196, 79, 61, 76,14640,14640,14640,14640, 83, 83, 0, 0, 0, 5, 22, 192, 3549, 2, 9, 4550, 4565, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 15, 7, 34, 34, 34, 34, 13, 13, 2, 2, 4, 17, 23, 2, 13, 4, 6, 10, 6, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Arabic/Malaysia
+ { 176, 66, 35, 0, 0, 584, 584, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 91, 79, 23, 38,14558,14558,14600,14600,14627,14627, 447, 470, 749, 5, 22, 10, 3562, 2, 9, 4544, 4571, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 7, 15, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 12, 4, 6, 6, 6, {66,78,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Brunei
+ { 176, 66, 111, 0, 0, 584, 584, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 786, 78, 212, 212,14558,14558,14600,14600,14627,14627, 447, 470, 749, 5, 22, 186, 3007, 2, 0, 4544, 1776, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 16, 4, 0, 6, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Indonesia
+ { 176, 66, 210, 0, 0, 584, 584, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 79, 23, 38,14558,14558,14600,14600,14627,14627, 447, 470, 749, 5, 22, 10, 3574, 2, 9, 4544, 4577, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 15, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 15, 4, 6, 6, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Singapore
+ { 177, 66, 146, 0, 0, 823, 831, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1411, 186, 10, 0,14674,14674,14736,14736,14763,14783, 0, 0, 0, 5, 22, 22, 3589, 2, 0, 4586, 1891, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 62, 62, 27, 27, 20, 19, 2, 2, 4, 17, 23, 1, 4, 4, 0, 5, 5, {69,85,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Maltese/Latin/Malta
+ { 179, 9, 110, 0, 0, 838, 838, 6, 0, 1, 2, 39, 4, 5, 10, 14, 15, 16, 17, 1434, 129, 61, 76,14802,14802,14802,14802,14860,14885, 449, 473, 0, 5, 22, 120, 3593, 15, 0, 4591, 4599, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 58, 58, 58, 58, 25, 29, 4, 5, 4, 17, 23, 1, 14, 5, 0, 8, 8, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Manipuri/Bangla/India
+ { 179, 78, 110, 0, 0, 0, 0, 6, 0, 1, 2, 75, 4, 5, 10, 14, 15, 16, 17, 265, 283, 479, 494, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 120, 0, 15, 0, 4607, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 8, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 7, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Manipuri/Meitei Mayek/India
+ { 180, 66, 115, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 86, 78, 10, 0,14914,14914,14970,14970, 83, 83, 168, 168, 0, 5, 22, 94, 0, 2, 0, 4614, 4619, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 56, 56, 29, 29, 13, 13, 4, 4, 4, 17, 23, 1, 0, 4, 0, 5, 12, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Manx/Latin/Isle of Man
+ { 181, 66, 167, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 394, 23, 38,14999,14999,15046,15046,15073,15073, 0, 0, 0, 5, 22, 10, 3607, 15, 0, 4631, 4636, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 47, 47, 27, 27, 15, 15, 2, 2, 4, 17, 23, 1, 15, 5, 0, 5, 8, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Maori/Latin/New Zealand
+ { 182, 66, 49, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 10, 0, 15, 0, 4644, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 10, 0, {67,76,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Mapuche/Latin/Chile
+ { 183, 29, 110, 0, 0, 849, 849, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 265, 129, 61, 76,15088,15088,15140,15140, 8605, 8605, 0, 0, 562, 5, 22, 120, 2964, 2, 9, 4654, 664, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Marathi/Devanagari/India
+ { 185, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,15171,15171,13861,13861,14208,14208, 453, 478, 0, 5, 22, 176, 3622, 2, 9, 1275, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 18, 4, 6, 3, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Masai/Latin/Kenya
+ { 185, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,15171,15171,13861,13861,14208,14208, 453, 478, 0, 5, 22, 121, 3640, 2, 9, 1275, 4659, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 3, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Masai/Latin/Tanzania
+ { 186, 4, 112, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 11, 12, 19, 20, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 798, 802, 22, 0, 3661, 15, 0, 4667, 4674, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 39, 23, 0, 10, 5, 0, 7, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Mazanderani/Arabic/Iran
+ { 188, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,15228,15228,15278,15278,15305,15305, 462, 484, 0, 5, 22, 176, 991, 2, 9, 4679, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 50, 50, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Meru/Latin/Kenya
+ { 189, 66, 40, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 137, 103, 10, 0,15318,15318,15318,15318,15366,15366, 0, 0, 0, 5, 22, 11, 3671, 15, 0, 4685, 4690, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 13, 5, 48, 48, 48, 48, 20, 20, 2, 2, 4, 17, 23, 4, 5, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Meta/Latin/Cameroon
+ { 190, 66, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 23, 38, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 240, 0, 15, 0, 4697, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 11, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Mohawk/Latin/Canada
+ { 191, 27, 156, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1452, 596, 98, 0,15386,15428,15470,15470,15470,15470, 464, 486, 196, 841, 22, 264, 3676, 15, 0, 4708, 4714, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 10, 15, 5, 42, 42, 20, 20, 20, 20, 4, 4, 4, 17, 23, 1, 13, 5, 0, 6, 6, {77,78,84}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Mongolian/Cyrillic/Mongolia
+ { 191, 83, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 248, 3689, 15, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 4, 5, 0, 0, 0, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Mongolian/Mongolian/China
+ { 191, 83, 156, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1487, 596, 98, 0,15490,15490,15532,15555,15578,15578, 468, 490, 0, 5, 22, 264, 3693, 2, 0, 4720, 4720, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 10, 15, 5, 42, 42, 23, 23, 23, 22, 4, 5, 4, 17, 23, 1, 8, 4, 0, 6, 6, {77,78,84}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Mongolian/Mongolian/Mongolia
+ { 192, 66, 150, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,15601,15601,15648,15648,15674,15674, 0, 0, 0, 5, 22, 196, 3701, 15, 0, 4726, 4740, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 47, 47, 26, 26, 13, 13, 2, 2, 4, 17, 23, 2, 14, 5, 0, 14, 5, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Morisyen/Latin/Mauritius
+ { 193, 66, 40, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 129, 10, 0,15687,15687,15760,15760,15787,15787, 472, 495, 0, 5, 22, 11, 3715, 2, 9, 4745, 4751, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 73, 73, 27, 27, 13, 13, 5, 5, 4, 17, 23, 4, 10, 4, 6, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Mundang/Latin/Cameroon
+ { 194, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 23, 38,15800,15800,15800,15800, 83, 83, 0, 0, 0, 5, 22, 10, 0, 15, 0, 4758, 964, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7,106,106,106,106, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 7, 13, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Muscogee/Latin/United States
+ { 195, 66, 162, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38,15906,15906,15997,15997,16019,16019, 477, 500, 0, 5, 22, 10, 3725, 2, 0, 4765, 4778, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 91, 91, 22, 22, 13, 13, 7, 5, 4, 17, 23, 1, 15, 4, 0, 13, 8, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nama/Latin/Namibia
+ { 197, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 179, 0, 15, 0, 4786, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 11, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Navajo/Latin/United States
+ { 199, 29, 164, 858, 0, 863, 863, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 163, 344, 10, 0,16032,16032,16085,16085,16117,16117, 484, 505, 562, 858, 22, 265, 3740, 15, 0, 4797, 4797, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 13, 5, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 4, 14, 5, 0, 6, 5, {78,80,82}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Nepali/Devanagari/Nepal
+ { 199, 29, 110, 858, 0, 863, 863, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 163, 344, 61, 76,16032,16032,16085,16085,16117,16117, 484, 505, 562, 858, 22, 120, 3754, 15, 0, 4797, 664, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 1, 14, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Nepali/Devanagari/India
+ { 201, 66, 40, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 1523, 78, 10, 0,16134,16134,16134,16134, 83, 83, 493, 512, 0, 5, 22, 11, 3768, 15, 0, 4803, 4819, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 8, 13, 5,110,110,110,110, 13, 13, 9, 8, 4, 17, 23, 4, 9, 5, 0, 16, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ngiemboon/Latin/Cameroon
+ { 202, 66, 40, 870, 870, 881, 897, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 19, 20, 137, 103, 10, 0,16244,16244,16244,16244,16303,16303, 502, 520, 0, 5, 22, 11, 3777, 15, 0, 4826, 4831, 11, 11, 16, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 13, 5, 59, 59, 59, 59, 24, 24, 8, 13, 4, 17, 23, 4, 5, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ngomba/Latin/Cameroon
+ { 203, 66, 169, 0, 0, 906, 915, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,16327,16327,16378,16378, 83, 83, 510, 533, 877, 5, 22, 124, 3782, 2, 0, 4838, 4852, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 51, 51, 32, 32, 13, 13, 9, 8, 8, 17, 23, 1, 14, 4, 0, 14, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nigerian Pidgin/Latin/Nigeria
+ { 204, 90, 102, 0, 0, 0, 0, 6, 0, 76, 2, 77, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0,16410,16410,16470,16502,16536,16536, 519, 541, 0, 5, 22, 269, 3796, 15, 0, 4860, 4863, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 60, 60, 32, 34, 13, 13, 1, 1, 4, 17, 23, 1, 22, 5, 0, 3, 6, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Nko/Nko/Guinea
+ { 205, 4, 112, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 4869, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 11, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Northern Luri/Arabic/Iran
+ { 205, 4, 113, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 61, 76, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 43, 0, 15, 0, 4869, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 15, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 0, 5, 0, 11, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Northern Luri/Arabic/Iraq
+ { 206, 66, 175, 0, 0, 351, 351, 6, 1, 9, 2, 3, 48, 5, 78, 15, 15, 17, 17, 163, 103, 10, 0,16549,16549,16623,16623,16655,16655, 520, 542, 0, 5, 22, 160, 3818, 4, 0, 4880, 4895, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 13, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 14, 5, 0, 15, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Norway
+ { 206, 66, 83, 0, 0, 351, 351, 6, 1, 9, 2, 3, 48, 5, 78, 15, 15, 17, 17, 113, 49, 10, 0,16668,16668,16737,16737,16757,16757, 531, 185, 0, 5, 22, 22, 405, 4, 0, 4880, 4900, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 13, 5, 69, 69, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Finland
+ { 206, 66, 225, 0, 0, 351, 351, 6, 1, 9, 2, 3, 48, 5, 78, 15, 15, 17, 17, 163, 103, 10, 0,16549,16549,16623,16623,16655,16655, 520, 542, 0, 5, 22, 160, 3832, 4, 0, 4880, 4906, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 13, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 14, 5, 0, 15, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Sweden
+ { 207, 66, 216, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,16770,16770,16833,16833,16859,16859, 0, 0, 0, 5, 22, 9, 0, 2, 0, 4912, 4928, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 63, 63, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 16, 12, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Northern Sotho/Latin/South Africa
+ { 208, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,16872,16872,16921,16921,16948,16948, 0, 0, 0, 5, 22, 179, 3846, 2, 9, 4940, 2434, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 10, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // North Ndebele/Latin/Zimbabwe
+ { 209, 66, 175, 0, 0, 289, 289, 6, 1, 9, 2, 3, 48, 5, 10, 11, 12, 16, 17, 698, 49, 10, 0, 4788, 4788,16961,16961, 4874, 4874, 168, 168, 0, 5, 22, 160, 3863, 15, 58, 4950, 4962, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 7, 12, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Norway
+ { 209, 66, 224, 0, 0, 289, 289, 6, 1, 9, 2, 3, 48, 5, 10, 11, 12, 16, 17, 698, 49, 10, 0, 4788, 4788,16961,16961, 4874, 4874, 168, 168, 0, 5, 22, 160, 3863, 15, 58, 4950, 4967, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 7, 12, 21, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Svalbard and Jan Mayen
+ { 210, 66, 175, 0, 0, 289, 289, 6, 1, 9, 2, 3, 48, 5, 10, 11, 12, 16, 17, 698, 49, 502, 0,16995,16995,17045,17072, 4874, 4874, 533, 555, 0, 5, 22, 160, 3863, 4, 0, 4988, 5001, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 19, 5, 50, 50, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 0, 13, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Nynorsk/Latin/Norway
+ { 211, 66, 219, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 187, 521, 38,17099,17099,17177,17177,17214,17214, 537, 559, 0, 5, 22, 94, 0, 2, 9, 5006, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 15, 7, 78, 78, 37, 37, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 6, 9, 0, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nuer/Latin/South Sudan
+ { 212, 66, 142, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 23, 38,17227,17227,17293,17293, 83, 83, 0, 0, 0, 5, 22, 0, 1521, 15, 0, 5015, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 66, 66, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 15, 5, 0, 6, 0, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nyanja/Latin/Malawi
+ { 213, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 4053, 4053, 4126, 4126, 4153, 4153, 0, 0, 0, 5, 22, 147, 805, 2, 0, 5021, 983, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 10, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Nyankole/Latin/Uganda
+ { 214, 66, 84, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 11, 12, 1555, 79, 10, 536,17320,17320,17320,17320,17376,17376, 0, 0, 376, 232, 249, 22, 405, 0, 45, 5031, 807, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 7, 13, 6, 56, 56, 56, 56, 20, 20, 2, 2, 6, 17, 23, 1, 4, 4, 6, 7, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Occitan/Latin/France
+ { 214, 66, 220, 0, 0, 414, 414, 6, 0, 1, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 79, 99, 1,17396,17396,17453,17453,17480,17480, 0, 0, 376, 232, 249, 22, 405, 0, 0, 5031, 5038, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 14, 4, 57, 57, 27, 27, 13, 13, 2, 2, 6, 17, 23, 1, 4, 4, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Occitan/Latin/Spain
+ { 215, 91, 110, 0, 0, 923, 931, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 61, 76,17493,17493,17546,17546,17578,17578, 0, 0, 885, 5, 22, 120, 3876, 2, 9, 5045, 5050, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 53, 53, 32, 32, 17, 17, 2, 2, 5, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Odia/Odia/India
+ { 220, 66, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 78, 23, 38,17595,17595,17649,17649, 83, 83, 539, 561, 0, 5, 22, 1, 3888, 2, 0, 5054, 5060, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 17, 4, 0, 6, 10, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Ethiopia
+ { 220, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 78, 10, 0,17595,17595,17649,17649,17676,17676, 539, 561, 0, 5, 22, 176, 0, 2, 0, 5054, 5070, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 6, 8, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Kenya
+ { 221, 101, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 61, 76,17689,17689,17689,17689, 83,17869, 0, 0, 0, 5, 22, 10, 0, 15, 0, 5078, 964, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7,180,180,180,180, 13, 20, 2, 2, 4, 17, 23, 1, 0, 5, 0, 12, 13, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Osage/Osage/United States
+ { 222, 27, 90, 0, 0, 938, 938, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 1576, 49, 10, 0,17889,17949,18009,18036,18063,18063, 541, 563, 0, 5, 22, 0, 3905, 15, 0, 5090, 5094, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 13, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 3, 5, 0, 4, 11, {71,69,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Georgia
+ { 222, 27, 193, 0, 0, 938, 938, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 1576, 49, 10, 0,17889,17949,18009,18036,18063,18063, 541, 563, 0, 5, 22, 133, 3908, 15, 0, 5090, 5105, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 13, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 3, 5, 0, 4, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Russia
+ { 226, 66, 62, 0, 0, 143, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 394, 10, 0,18076,18076,18076,18076,18138,18138, 0, 0, 0, 5, 22, 0, 3911, 15, 0, 5111, 5121, 6, 6, 7, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 62, 62, 62, 62, 20, 20, 2, 2, 4, 17, 23, 0, 6, 5, 0, 10, 6, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Papiamento/Latin/Curacao
+ { 226, 66, 13, 0, 0, 143, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 394, 10, 0,18076,18076,18076,18076,18138,18138, 0, 0, 0, 5, 22, 0, 3917, 15, 0, 5111, 1227, 6, 6, 7, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 62, 62, 62, 62, 20, 20, 2, 2, 4, 17, 23, 0, 15, 5, 0, 10, 5, {65,87,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Papiamento/Latin/Aruba
+ { 227, 4, 1, 661, 661, 947, 956, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 1599, 505, 99, 1,18158,18158,18158,18158, 83, 83, 556, 578, 890, 5, 22, 270, 3932, 2, 9, 5127, 5131, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 14, 4, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 1, 6, 4, 6, 4, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Pashto/Arabic/Afghanistan
+ { 227, 4, 178, 661, 661, 947, 956, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 1599, 505, 61, 76,18158,18158,18158,18158, 83, 83, 556, 578, 890, 5, 22, 196, 3938, 2, 9, 5127, 5140, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 15, 7, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 2, 15, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Pashto/Arabic/Pakistan
+ { 228, 4, 112, 964, 964, 971, 979, 67, 21, 22, 23, 40, 82, 37, 44, 11, 12, 19, 20, 113, 505, 99, 1,18196,18196,18196,18196,18244,18244, 560, 582, 798, 5, 22, 271, 3953, 103, 109, 5147, 4674, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 14, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 17, 23, 4, 10, 6, 8, 5, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Persian/Arabic/Iran
+ { 228, 4, 1, 964, 964, 971, 979, 67, 21, 22, 23, 40, 82, 37, 44, 11, 12, 19, 20, 113, 505, 99, 1,18196,18196,18196,18196,18244,18244, 560, 582, 798, 5, 22, 270, 3963, 15, 109, 5152, 5131, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 14, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 17, 23, 1, 16, 5, 8, 3, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Persian/Arabic/Afghanistan
+ { 230, 66, 187, 0, 0, 143, 143, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 11, 12, 0, 50, 10, 0,18257,18257,18315,18315,18348,18361, 0, 0, 311, 5, 22, 275, 3979, 4, 20, 5155, 5161, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 9, 13, 5, 58, 58, 33, 33, 13, 13, 2, 2, 5, 17, 23, 2, 12, 5, 7, 6, 6, {80,76,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Polish/Latin/Poland
+ { 231, 66, 32, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 186, 10, 0,18374,18374,18452,18452,18486,18486, 0, 0, 0, 5, 22, 9, 3991, 15, 0, 5167, 5176, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 13, 5, 78, 78, 34, 34, 13, 13, 2, 2, 5, 17, 23, 2, 15, 5, 0, 9, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Brazil
+ { 231, 66, 7, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 255, 4006, 4, 20, 5167, 5182, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 15, 5, 7, 9, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Angola
+ { 231, 66, 43, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 243, 4021, 4, 20, 5167, 5188, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 20, 5, 7, 9, 10, {67,86,69}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Cape Verde
+ { 231, 66, 73, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 11, 4041, 4, 20, 5167, 5198, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 17, 5, 7, 9, 16, {88,65,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Equatorial Guinea
+ { 231, 66, 101, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 127, 4058, 4, 20, 5167, 5214, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 5, 18, 5, 7, 9, 12, {88,79,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Guinea-Bissau
+ { 231, 66, 138, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 22, 405, 4, 20, 5167, 5226, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 4, 5, 7, 9, 10, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Luxembourg
+ { 231, 66, 139, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 23, 38,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 151, 4076, 4, 20, 5167, 5236, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 15, 7, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 15, 5, 7, 9, 19, {77,79,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Macao
+ { 231, 66, 160, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 261, 4091, 4, 20, 5167, 5255, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 19, 5, 7, 9, 10, {77,90,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Mozambique
+ { 231, 66, 188, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 22, 405, 4, 20, 5265, 5282, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 4, 5, 7, 17, 8, {69,85,82}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Portugal
+ { 231, 66, 204, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 277, 4110, 4, 20, 5167, 5290, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 28, 5, 7, 9, 19, {83,84,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Sao Tome and Principe
+ { 231, 66, 226, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 0, 4138, 4, 20, 5167, 5309, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 0, 12, 5, 7, 9, 5, {67,72,70}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Switzerland
+ { 231, 66, 232, 0, 0, 414, 414, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 78, 10, 0,18374,18374,18499,18499,18486,18486, 569, 590, 0, 5, 22, 179, 4150, 4, 20, 5167, 5314, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 24, 5, 7, 9, 11, {85,83,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Timor-Leste
+ { 232, 66, 187, 0, 0, 986, 986, 6, 1, 9, 2, 3, 4, 5, 10, 13, 14, 13, 14, 1619, 49, 10, 0,18547,18547,18615,18615,18642,18642, 577, 598, 0, 5, 22, 275, 0, 4, 0, 5325, 5334, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 68, 68, 27, 27, 13, 13, 10, 14, 4, 17, 23, 2, 0, 5, 0, 9, 4, {80,76,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Prussian/Latin/Poland
+ { 233, 41, 110, 0, 0, 994, 994, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76,18655,18655,18711,18711,18746,18746, 587, 612, 895, 5, 22, 120, 4174, 15, 0, 5338, 5344, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 56, 56, 35, 35, 22, 22, 6, 6, 4, 17, 23, 1, 11, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Punjabi/Gurmukhi/India
+ { 233, 4, 178, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 786, 186, 61, 76,18768,18768,18768,18768, 83, 83, 0, 0, 0, 5, 22, 78, 4185, 15, 0, 5348, 5140, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 10, 15, 7, 36, 36, 36, 36, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Punjabi/Arabic/Pakistan
+ { 234, 66, 184, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 23, 38,18804,18804,18856,18856,18883,18883, 168, 168, 0, 5, 22, 279, 4191, 15, 0, 5354, 5362, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 11, 5, 0, 8, 4, {80,69,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Quechua/Latin/Peru
+ { 234, 66, 28, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 23, 38,18804,18804,18856,18856,18883,18883, 168, 168, 0, 5, 22, 281, 4202, 15, 0, 5354, 5366, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 9, 5, 0, 8, 7, {66,79,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Bolivia
+ { 234, 66, 70, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 23, 38,18804,18804,18856,18856,18883,18883, 168, 168, 0, 5, 22, 10, 4211, 15, 0, 5354, 5373, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 15, 5, 0, 8, 7, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Ecuador
+ { 235, 66, 192, 0, 0, 1003, 1003, 6, 1, 0, 2, 3, 4, 5, 10, 13, 15, 11, 12, 0, 49, 10, 0,18896,18896,18943,18943, 6778, 6778, 168, 168, 899, 5, 22, 283, 4226, 4, 20, 5380, 5386, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 47, 47, 33, 33, 13, 13, 4, 4, 4, 17, 23, 3, 12, 5, 7, 6, 7, {82,79,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Romania
+ { 235, 66, 154, 0, 0, 1003, 1003, 6, 1, 0, 2, 3, 4, 5, 10, 13, 15, 11, 12, 0, 49, 10, 0,18896,18896,18976,18976,19003,19003, 168, 168, 899, 5, 22, 18, 4238, 4, 20, 5380, 5393, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 47, 47, 27, 27, 15, 15, 4, 4, 4, 17, 23, 1, 15, 5, 7, 6, 17, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Moldova
+ { 236, 66, 226, 0, 0, 414, 414, 6, 0, 17, 2, 3, 48, 5, 10, 11, 12, 19, 20, 1646, 394, 10, 0,19018,19018,19073,19073,19095,19095, 0, 0, 0, 5, 22, 0, 4253, 4, 0, 5410, 5419, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 13, 5, 55, 55, 22, 22, 13, 13, 2, 2, 5, 17, 23, 0, 13, 5, 0, 9, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Romansh/Latin/Switzerland
+ { 237, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,19108,19108,19172,19172,14208,14208, 593, 618, 0, 5, 22, 121, 4266, 2, 0, 5425, 2268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 64, 64, 28, 28, 13, 13, 8, 7, 4, 17, 23, 3, 18, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Rombo/Latin/Tanzania
+ { 238, 66, 38, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 15, 15, 17, 17, 113, 129, 10, 0,19200,19200,19288,19288, 83, 83, 601, 625, 0, 5, 22, 182, 4284, 0, 0, 5434, 5442, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 88, 88, 33, 33, 13, 13, 5, 5, 4, 17, 23, 3, 20, 4, 0, 8, 8, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Rundi/Latin/Burundi
+ { 239, 27, 193, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 49, 10, 0,19321,19321,19382,19382,19402,19402, 0, 0, 196, 841, 22, 133, 4304, 4, 0, 5450, 5457, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 61, 61, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 16, 5, 0, 7, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Russia
+ { 239, 27, 22, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 49, 10, 0,19321,19321,19382,19382,19402,19402, 0, 0, 196, 841, 22, 1, 4320, 4, 0, 5450, 618, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 61, 61, 20, 20, 13, 13, 2, 2, 5, 17, 23, 2, 17, 5, 0, 7, 8, {66,89,78}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Belarus
+ { 239, 27, 123, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 49, 10, 0,19321,19321,19382,19382,19402,19402, 0, 0, 196, 841, 22, 244, 4337, 4, 0, 5450, 5463, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 61, 61, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 15, 5, 0, 7, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kazakhstan
+ { 239, 27, 128, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 49, 10, 0,19321,19321,19382,19382,19402,19402, 0, 0, 196, 841, 22, 251, 4352, 4, 0, 5450, 5472, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 61, 61, 20, 20, 13, 13, 2, 2, 5, 17, 23, 3, 14, 5, 0, 7, 8, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kyrgyzstan
+ { 239, 27, 154, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 49, 10, 0,19321,19321,19382,19382,19402,19402, 0, 0, 196, 841, 22, 18, 4366, 4, 0, 5450, 5480, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 61, 61, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 14, 5, 0, 7, 7, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Moldova
+ { 239, 27, 244, 0, 0, 150, 150, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 350, 49, 10, 0,19321,19321,19382,19382,19402,19402, 0, 0, 196, 841, 22, 286, 4380, 4, 0, 5450, 5487, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 13, 5, 61, 61, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 17, 5, 0, 7, 7, {85,65,72}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Russian/Cyrillic/Ukraine
+ { 240, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,13800,13800,13861,13861, 1284, 1284, 430, 446, 0, 5, 22, 121, 3492, 0, 0, 5494, 2268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 6, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Rwa/Latin/Tanzania
+ { 241, 66, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 59, 78, 23, 38,19415,19415,19470,19470,19497,19497, 0, 0, 0, 5, 22, 6, 0, 2, 0, 5500, 34, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 15, 7, 55, 55, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 4, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Saho/Latin/Eritrea
+ { 242, 27, 193, 0, 0, 1011, 1011, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 14, 1669, 344, 10, 0,19510,19510,19580,19580,19600,19600, 606, 630, 903, 908, 22, 133, 4397, 4, 0, 5504, 5513, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 6, 13, 5, 70, 70, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 20, 5, 0, 9, 9, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sakha/Cyrillic/Russia
+ { 243, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,19613,19613,19717,19717,19744,19744, 608, 632, 0, 5, 22, 176, 4417, 2, 9, 5522, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5,104,104, 27, 27, 13, 13, 7, 5, 4, 17, 23, 3, 18, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Samburu/Latin/Kenya
+ { 245, 66, 46, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 113, 129, 10, 0,19757,19757,19822,19822,19849,19849, 615, 637, 0, 5, 22, 11, 4435, 2, 65, 5530, 5535, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 18, 4, 5, 5, 22, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Sango/Latin/Central African Republic
+ { 246, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,19862,19862,19921,19921,19948,19948, 617, 639, 0, 5, 22, 121, 4453, 0, 0, 5557, 5566, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 59, 59, 27, 27, 13, 13, 9, 9, 4, 17, 23, 3, 18, 4, 0, 9, 9, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Sangu/Latin/Tanzania
+ { 247, 29, 110, 0, 0, 1022, 1032, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76,19961,19961, 8574, 8574, 8605, 8605, 484, 505, 0, 5, 22, 120, 4471, 15, 0, 5575, 5587, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 66, 66, 31, 31, 18, 18, 9, 7, 4, 17, 23, 1, 15, 5, 0, 12, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Sanskrit/Devanagari/India
+ { 248, 93, 110, 0, 0, 0, 0, 6, 0, 1, 2, 84, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76,20027,20027,20068,20068,20093,20093, 626, 648, 0, 5, 22, 120, 4486, 15, 0, 5592, 5599, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 41, 41, 25, 25, 13, 13, 5, 5, 4, 17, 23, 1, 16, 5, 0, 7, 6, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Santali/Ol Chiki/India
+ { 248, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 120, 0, 15, 0, 5605, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 8, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Santali/Devanagari/India
+ { 249, 66, 117, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 1699, 186, 10, 0,20106,20106,20160,20160,20187,20187, 0, 0, 0, 5, 22, 22, 4502, 4, 0, 5613, 813, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, 10, 13, 5, 54, 54, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 5, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sardinian/Latin/Italy
+ { 251, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 10, 0,20200,20200,20254,20254,20281,20281, 0, 0, 0, 5, 22, 261, 4506, 0, 0, 5618, 5255, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 13, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 21, 4, 0, 4, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sena/Latin/Mozambique
+ { 252, 27, 207, 0, 0, 150, 150, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0,20294,20294,20345,20345, 2891, 2891, 0, 0, 925, 5, 22, 0, 4527, 4, 20, 5622, 5628, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 51, 51, 27, 27, 13, 13, 2, 2, 7, 17, 23, 0, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Serbia
+ { 252, 27, 29, 0, 0, 150, 150, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0, 2809, 2809, 2864, 2864, 2891, 2891, 104, 653, 925, 5, 22, 137, 4539, 4, 20, 5622, 713, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 55, 55, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Bosnia and Herzegovina
+ { 252, 27, 126, 0, 0, 150, 150, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0,20294,20294,20345,20345, 2891, 2891, 0, 0, 925, 5, 22, 22, 4579, 4, 20, 5622, 5634, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 51, 51, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Kosovo
+ { 252, 27, 157, 0, 0, 150, 150, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0,20372,20372,20345,20345, 2891, 2891, 104, 653, 925, 5, 22, 22, 4579, 4, 20, 5622, 5640, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 54, 54, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Montenegro
+ { 252, 66, 29, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0, 2699, 2699, 2756, 2756, 2783, 2783, 631, 661, 218, 5, 22, 135, 597, 4, 20, 5649, 686, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 57, 57, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Bosnia and Herzegovina
+ { 252, 66, 126, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0,20426,20426,20479,20479, 2783, 2783, 0, 0, 218, 5, 22, 22, 4583, 4, 20, 5649, 5655, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 53, 53, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Kosovo
+ { 252, 66, 157, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0,20506,20506,20479,20479, 2783, 2783, 631, 661, 218, 5, 22, 22, 4583, 4, 20, 5649, 5661, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 56, 56, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Montenegro
+ { 252, 66, 207, 0, 0, 143, 143, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 16, 16, 404, 454, 10, 0,20426,20426,20479,20479, 2783, 2783, 0, 0, 218, 5, 22, 0, 4587, 4, 20, 5649, 5670, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 7, 13, 5, 53, 53, 27, 27, 13, 13, 2, 2, 7, 17, 23, 0, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Serbia
+ { 253, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,20562,20562,20624,20624,20651,20651, 642, 669, 0, 5, 22, 121, 4599, 0, 0, 5676, 2268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 62, 62, 27, 27, 13, 13, 5, 8, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Shambala/Latin/Tanzania
+ { 254, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 15, 15, 17, 17, 163, 103, 10, 0,20664,20664,20718,20718,20745,20745, 0, 0, 0, 5, 22, 179, 4619, 2, 9, 5685, 2434, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 15, 4, 6, 8, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Shona/Latin/Zimbabwe
+ { 255, 141, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0,20758,20758,20785,20785,20805,20805, 647, 677, 0, 5, 22, 150, 0, 15, 0, 5693, 5696, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 3, 2, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sichuan Yi/Yi/China
+ { 256, 66, 117, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0,20818,20818,20818,20818, 83, 83, 0, 0, 0, 5, 22, 22, 0, 15, 0, 5698, 3728, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 62, 62, 62, 62, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 9, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sicilian/Latin/Italy
+ { 257, 66, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 59, 78, 23, 38,20880,20880,20930,20930,20957,20957, 0, 0, 0, 5, 22, 1, 0, 2, 0, 5707, 5718, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 15, 7, 50, 50, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 4, 0, 11, 11, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sidamo/Latin/Ethiopia
+ { 258, 66, 187, 0, 0, 143, 143, 6, 1, 9, 2, 3, 4, 5, 10, 13, 15, 12, 11, 0, 49, 10, 0,20970,20970,21030,21030,13193,13193, 649, 679, 311, 5, 22, 275, 0, 15, 0, 5729, 5161, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 60, 60, 27, 27, 13, 13, 11, 11, 5, 17, 23, 2, 0, 5, 0, 7, 6, {80,76,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Silesian/Latin/Poland
+ { 259, 4, 178, 0, 0, 1041, 1049, 67, 21, 22, 23, 25, 26, 28, 59, 14, 15, 16, 17, 549, 103, 61, 76,21057,21057,21057,21057,21091,21091, 660, 690, 932, 938, 22, 196, 4634, 4, 0, 5736, 5740, 6, 6, 8, 7, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 18, 10, 15, 7, 34, 34, 34, 34, 30, 30, 11, 11, 6, 25, 23, 2, 12, 5, 0, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sindhi/Arabic/Pakistan
+ { 259, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 61, 76,21121,21148,21189,21211,21239,21239, 671, 701, 0, 5, 22, 120, 4646, 15, 0, 5747, 664, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 27, 41, 22, 28, 20, 20, 8, 6, 4, 17, 23, 1, 17, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Sindhi/Devanagari/India
+ { 260, 119, 221, 0, 0, 1056, 1065, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 212, 212,21259,21259,21320,21320,21358,21358, 679, 707, 963, 968, 22, 287, 4663, 2, 9, 5753, 5758, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 61, 61, 38, 38, 18, 18, 5, 4, 5, 42, 23, 3, 17, 4, 6, 5, 11, {76,75,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sinhala/Sinhala/Sri Lanka
+ { 261, 66, 83, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 22, 0, 15, 0, 5769, 5779, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 10, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Skolt Sami/Latin/Finland
+ { 262, 66, 212, 0, 0, 781, 282, 6, 1, 9, 2, 3, 4, 5, 6, 13, 14, 18, 16, 698, 423, 11, 1,21376,21376,21427,21427,21447,21447, 0, 0, 311, 5, 22, 22, 405, 4, 20, 5791, 5801, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 4, 51, 51, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovak/Latin/Slovakia
+ { 263, 66, 213, 0, 0, 1073, 1073, 6, 1, 0, 2, 3, 48, 5, 6, 13, 14, 18, 16, 404, 423, 10, 0,21460,21460,21511,21511,21545,21545, 172, 711, 50, 5, 22, 22, 4680, 4, 20, 5810, 5821, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 51, 51, 34, 34, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 7, 11, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovenian/Latin/Slovenia
+ { 264, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,21558,21558,21622,21622,21656,21656, 684, 715, 0, 5, 22, 147, 2829, 4, 0, 5830, 3330, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 64, 64, 34, 34, 13, 13, 6, 6, 4, 17, 23, 3, 19, 5, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Soga/Latin/Uganda
+ { 265, 66, 215, 0, 0, 1081, 1081, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 78, 23, 38,21669,21669,21715,21715,21746,21746, 690, 721, 1010, 1016, 22, 93, 4684, 2, 9, 5837, 5845, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 1, 20, 4, 6, 8, 10, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Somali/Latin/Somalia
+ { 265, 66, 67, 0, 0, 1081, 1081, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 78, 23, 38,21669,21669,21715,21715,21746,21746, 690, 721, 1010, 1016, 22, 3, 4704, 2, 9, 5837, 5855, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 13, 4, 6, 8, 7, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Somali/Latin/Djibouti
+ { 265, 66, 77, 0, 0, 1081, 1081, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 78, 23, 38,21669,21669,21715,21715,21746,21746, 690, 721, 1010, 1016, 22, 1, 4717, 2, 9, 5837, 5862, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 2, 15, 4, 6, 8, 8, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Ethiopia
+ { 265, 66, 124, 0, 0, 1081, 1081, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 78, 10, 0,21669,21669,21715,21715,21746,21746, 690, 721, 1010, 1016, 22, 176, 4732, 2, 9, 5837, 1307, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 15, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Kenya
+ { 266, 4, 112, 0, 0, 0, 0, 67, 21, 22, 23, 25, 26, 28, 59, 11, 12, 19, 20, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 5870, 0, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 11, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Southern Kurdish/Arabic/Iran
+ { 266, 4, 113, 0, 0, 0, 0, 67, 21, 22, 23, 25, 26, 28, 59, 11, 12, 19, 20, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 5870, 0, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 11, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Southern Kurdish/Arabic/Iraq
+ { 267, 66, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 160, 0, 15, 0, 5881, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 19, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Southern Sami/Latin/Sweden
+ { 267, 66, 175, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 160, 0, 15, 0, 5881, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 19, 0, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Southern Sami/Latin/Norway
+ { 268, 66, 216, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,21760,21760,21820,21820, 83, 83, 0, 0, 0, 5, 22, 9, 0, 2, 0, 4912, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 60, 60, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 7, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Southern Sotho/Latin/South Africa
+ { 268, 66, 133, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 23, 38,21760,21760,21820,21820, 83, 83, 0, 0, 0, 5, 22, 9, 0, 2, 0, 4912, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 60, 60, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 7, 0, {90,65,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Southern Sotho/Latin/Lesotho
+ { 269, 66, 216, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,21846,21846,21911,21911, 83, 83, 0, 0, 0, 5, 22, 9, 0, 2, 0, 4940, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 65, 65, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 10, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // South Ndebele/Latin/South Africa
+ { 270, 66, 220, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 99, 1,21937,21937,21989,21989,18883,18883, 132, 128, 0, 5, 22, 22, 405, 4, 0, 5900, 455, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 14, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 4, 5, 0, 17, 6, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Spain
+ { 270, 66, 11, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 10, 4747, 15, 58, 5900, 5917, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 14, 5, 7, 7, 9, {65,82,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Argentina
+ { 270, 66, 24, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 10, 0,21937,21937,21989,21989, 6778, 6778, 168, 168, 0, 5, 22, 10, 4761, 2, 0, 5900, 5926, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 13, 5, 52, 52, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 14, 4, 0, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Belize
+ { 270, 66, 28, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 281, 4775, 2, 0, 5900, 5366, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 2, 9, 4, 0, 7, 7, {66,79,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Bolivia
+ { 270, 66, 32, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 10, 0,21937,21937,21989,21989, 6778, 6778, 168, 168, 0, 5, 22, 9, 4784, 2, 0, 5900, 5176, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 13, 5, 52, 52, 27, 27, 13, 13, 4, 4, 5, 17, 23, 2, 14, 4, 0, 7, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Brazil
+ { 270, 66, 42, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 99, 1,21937,21937,21989,21989,18883,18883, 132, 128, 0, 5, 22, 22, 405, 4, 0, 5900, 5932, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 14, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 4, 5, 0, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Canary Islands
+ { 270, 66, 47, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 99, 1,21937,21937,21989,21989,18883,18883, 132, 128, 0, 5, 22, 22, 405, 4, 0, 5900, 5940, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 14, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 4, 5, 0, 7, 15, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Ceuta and Melilla
+ { 270, 66, 49, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 394, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 10, 4798, 2, 65, 5900, 5955, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 12, 4, 5, 7, 5, {67,76,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Chile
+ { 270, 66, 54, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 79, 23, 38,21937,21937,21989,21989, 9387,22016, 132, 128, 0, 5, 22, 10, 4810, 15, 0, 5900, 5960, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 15, 5, 0, 7, 8, {67,79,80}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Colombia
+ { 270, 66, 59, 0, 0, 68, 68, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 290, 4825, 2, 0, 5900, 5968, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 19, 4, 0, 7, 10, {67,82,67}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Costa Rica
+ { 270, 66, 61, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 168, 168, 0, 5, 22, 10, 4844, 2, 0, 5900, 5978, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 11, 4, 0, 7, 4, {67,85,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Cuba
+ { 270, 66, 69, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 291, 4855, 2, 9, 5900, 5982, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 3, 15, 4, 6, 7, 20, {68,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Dominican Republic
+ { 270, 66, 70, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 10, 4870, 2, 65, 5900, 5373, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 5, 7, 7, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Ecuador
+ { 270, 66, 72, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 10, 4870, 2, 0, 5900, 6002, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/El Salvador
+ { 270, 66, 73, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 99, 1,21937,21937,21989,21989,18883,18883, 132, 128, 0, 5, 22, 11, 4890, 2, 0, 5900, 6013, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 14, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 4, 28, 4, 0, 7, 17, {88,65,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Equatorial Guinea
+ { 270, 66, 99, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 79, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 246, 4918, 2, 0, 5900, 6030, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 7, 4, 0, 7, 9, {71,84,81}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Guatemala
+ { 270, 66, 106, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1730, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 18, 4925, 2, 0, 5900, 6039, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 17, 4, 0, 7, 8, {72,78,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Honduras
+ { 270, 66, 130, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 168, 168, 0, 5, 22, 0, 0, 2, 0, 6047, 6070, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 5, 17, 23, 0, 0, 4, 0, 23, 13, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Latin America
+ { 270, 66, 152, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 78, 23, 38,21937,21937,21989,21989, 6778, 6778, 168, 168, 0, 5, 22, 10, 4942, 2, 0, 6083, 6100, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 13, 4, 0, 17, 6, {77,88,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Mexico
+ { 270, 66, 168, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 294, 4955, 2, 0, 5900, 6106, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 2, 20, 4, 0, 7, 9, {78,73,79}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Nicaragua
+ { 270, 66, 181, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 1121, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 296, 4975, 2, 0, 5900, 6115, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 3, 15, 4, 0, 7, 6, {80,65,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Panama
+ { 270, 66, 183, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 299, 4990, 15, 86, 5900, 6121, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 3, 17, 5, 6, 7, 8, {80,89,71}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Paraguay
+ { 270, 66, 184, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 79, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 279, 5007, 15, 0, 5900, 5362, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 2, 11, 5, 0, 7, 4, {80,69,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Peru
+ { 270, 66, 185, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989,18883,18883, 132, 128, 0, 5, 22, 146, 5018, 4, 0, 5900, 6129, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 5, 0, 7, 9, {80,72,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Philippines
+ { 270, 66, 189, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 1121, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 10, 4870, 2, 0, 5900, 2080, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Puerto Rico
+ { 270, 66, 248, 0, 0, 68, 68, 6, 0, 1, 2, 3, 4, 5, 10, 11, 12, 14, 15, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 168, 168, 0, 5, 22, 10, 4870, 2, 0, 5900, 6138, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 15, 7, 52, 52, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 20, 4, 0, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/United States
+ { 270, 66, 250, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 10, 5031, 15, 58, 5900, 6152, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 5, 7, 7, 7, {85,89,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Uruguay
+ { 270, 66, 254, 0, 0, 68, 68, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 958, 129, 23, 38,21937,21937,21989,21989, 6778, 6778, 132, 128, 0, 5, 22, 302, 5044, 2, 65, 5900, 6159, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 15, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 4, 16, 4, 5, 7, 9, {86,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Venezuela
+ { 271, 135, 159, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 15, 113, 129, 10, 0,22029,22029,22076,22076, 83, 83, 692, 723, 0, 5, 22, 0, 5060, 0, 0, 6168, 6176, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 47, 47, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 8, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Standard Moroccan Tamazight/Tifinagh/Morocco
+ { 272, 66, 111, 0, 0, 1090, 1103, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 213, 213,22105,22105,22148,22148, 9291, 9291, 0, 0, 0, 5, 22, 186, 5074, 2, 0, 6182, 1776, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 4, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 15, 4, 0, 10, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sundanese/Latin/Indonesia
+ { 273, 66, 230, 0, 0, 566, 566, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 1198, 1198, 1198, 1198, 83, 83, 0, 0, 749, 1033, 22, 121, 3492, 15, 0, 6192, 2268, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 20, 5, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Tanzania
+ { 273, 66, 57, 0, 0, 566, 566, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 1198, 1198, 1198, 1198, 83, 83, 0, 0, 749, 1033, 22, 11, 5089, 15, 0, 6192, 6201, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 2, 16, 5, 0, 9, 32, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Congo - Kinshasa
+ { 273, 66, 124, 0, 0, 566, 566, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 1198, 1198, 1198, 1198, 83, 83, 0, 0, 749, 1033, 22, 176, 991, 15, 0, 6192, 1307, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 17, 5, 0, 9, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swahili/Latin/Kenya
+ { 273, 66, 243, 0, 0, 566, 566, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0, 1198, 1198, 1198, 1198, 83, 83, 0, 0, 749, 1033, 22, 147, 5105, 15, 0, 6192, 983, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 18, 5, 0, 9, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Swahili/Latin/Uganda
+ { 274, 66, 216, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,22175,22175,22242,22242, 83, 83, 0, 0, 0, 5, 22, 9, 0, 2, 0, 6233, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 67, 67, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 7, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swati/Latin/South Africa
+ { 274, 66, 76, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 23, 38,22175,22175,22242,22242, 83, 83, 0, 0, 0, 5, 22, 155, 0, 2, 0, 6233, 6240, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 67, 67, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 7, 8, {83,90,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swati/Latin/Eswatini
+ { 275, 66, 225, 0, 0, 1115, 1115, 6, 1, 9, 2, 3, 48, 5, 63, 15, 15, 17, 17, 113, 103, 10, 0,22268,22268,22317,22317, 4874, 4874, 698, 731, 0, 5, 22, 160, 5123, 4, 0, 6248, 6255, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 13, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 2, 12, 5, 0, 7, 7, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Sweden
+ { 275, 66, 2, 0, 0, 1115, 1115, 6, 1, 9, 2, 3, 48, 5, 63, 15, 15, 17, 17, 113, 103, 10, 0,22268,22268,22317,22317, 4874, 4874, 698, 731, 0, 5, 22, 22, 405, 4, 0, 6248, 6262, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 13, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 7, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Aland Islands
+ { 275, 66, 83, 0, 0, 1115, 1115, 6, 1, 9, 2, 3, 48, 5, 63, 15, 15, 17, 17, 113, 103, 10, 0,22268,22268,22317,22317, 4874, 4874, 698, 731, 0, 5, 22, 22, 405, 4, 0, 6248, 1698, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 13, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Finland
+ { 276, 66, 226, 0, 0, 463, 463, 6, 0, 17, 2, 3, 48, 5, 10, 11, 12, 19, 20, 404, 49, 10, 0,22345,22345,22407,22407, 4510, 4510, 700, 733, 0, 5, 22, 0, 5135, 4, 0, 6267, 6267, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 0, 16, 5, 0, 16, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Switzerland
+ { 276, 66, 84, 0, 0, 463, 463, 6, 0, 17, 2, 3, 48, 5, 10, 11, 12, 19, 20, 404, 49, 10, 0,22345,22345,22407,22407, 4510, 4510, 700, 733, 0, 5, 22, 22, 83, 4, 0, 6267, 6283, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 1, 4, 5, 0, 16, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/France
+ { 276, 66, 136, 0, 0, 463, 463, 6, 0, 17, 2, 3, 48, 5, 10, 11, 12, 19, 20, 404, 49, 10, 0,22345,22345,22407,22407, 4510, 4510, 700, 733, 0, 5, 22, 0, 5135, 4, 0, 6267, 6293, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 0, 16, 5, 0, 16, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Liechtenstein
+ { 277, 123, 113, 1124, 1124, 1124, 1124, 6, 0, 1, 2, 3, 4, 5, 10, 15, 14, 17, 16, 1757, 395, 61, 76,22434,22434,22486,22486,22515,22515, 712, 744, 1084, 5, 22, 0, 0, 15, 0, 6306, 6312, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 9, 15, 7, 52, 52, 29, 29, 13, 13, 4, 4, 4, 17, 23, 0, 0, 5, 0, 6, 4, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Syriac/Syriac/Iraq
+ { 277, 123, 227, 1124, 1124, 1124, 1124, 6, 0, 1, 2, 3, 4, 5, 10, 15, 14, 17, 16, 1757, 395, 61, 76,22434,22434,22486,22486,22515,22515, 712, 744, 1084, 5, 22, 99, 0, 15, 0, 6306, 6316, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 9, 15, 7, 52, 52, 29, 29, 13, 13, 4, 4, 4, 17, 23, 5, 0, 5, 0, 6, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Syriac/Syriac/Syria
+ { 278, 135, 159, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 15, 113, 129, 10, 0,22528,22528,22076,22076, 83, 83, 692, 723, 0, 5, 22, 0, 5060, 0, 0, 6321, 6176, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 46, 46, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tachelhit/Tifinagh/Morocco
+ { 278, 66, 159, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 13, 15, 113, 129, 10, 0,22574,22574,22621,22621, 83, 83, 716, 748, 0, 5, 22, 0, 5151, 0, 0, 6328, 6338, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 47, 47, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 10, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tachelhit/Latin/Morocco
+ { 280, 127, 255, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 306, 0, 15, 0, 6344, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 4, 0, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tai Dam/Tai Viet/Vietnam
+ { 281, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,22650,22650,22754,22754,22781,22781, 722, 756, 0, 5, 22, 176, 991, 2, 9, 6348, 1307, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5,104,104, 27, 27, 13, 13, 10, 10, 4, 17, 23, 3, 17, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Taita/Latin/Kenya
+ { 282, 27, 229, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 12, 11, 16, 17, 786, 78, 10, 0,22794,22794,22848,22848,22875,22875, 0, 0, 0, 5, 22, 307, 5165, 4, 0, 6355, 6361, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 6, 5, 0, 6, 10, {84,74,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tajik/Cyrillic/Tajikistan
+ { 283, 129, 110, 0, 0, 1130, 1130, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 127, 127,22888,22888,22936,22936,22974,22974, 0, 766, 1088, 5, 22, 120, 5171, 2, 9, 6371, 6376, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 48, 48, 38, 38, 19, 19, 2, 8, 7, 17, 23, 1, 13, 4, 6, 5, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Tamil/Tamil/India
+ { 283, 129, 143, 0, 0, 1130, 1130, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 127, 127,22888,22888,22936,22936,22974,22974, 0, 766, 1088, 5, 22, 192, 5184, 2, 9, 6371, 6383, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 48, 48, 38, 38, 19, 19, 2, 8, 7, 17, 23, 2, 17, 4, 6, 5, 7, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Malaysia
+ { 283, 129, 210, 0, 0, 1130, 1130, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 127, 127,22888,22888,22936,22936,22974,22974, 0, 766, 1088, 5, 22, 10, 5201, 2, 9, 6371, 6390, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 48, 48, 38, 38, 19, 19, 2, 8, 7, 17, 23, 1, 17, 4, 6, 5, 11, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Singapore
+ { 283, 129, 221, 0, 0, 1130, 1130, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 10, 0,22888,22888,22936,22936,22974,22974, 0, 766, 1088, 5, 22, 311, 5218, 2, 9, 6371, 6401, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 5, 48, 48, 38, 38, 19, 19, 2, 8, 7, 17, 23, 3, 13, 4, 6, 5, 6, {76,75,82}, 2, 1, 1, 6, 7, 1, 2, 3 }, // Tamil/Tamil/Sri Lanka
+ { 284, 66, 228, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 137, 103, 23, 38,22993,22993,23164,23164,23191,23191, 0, 0, 0, 5, 22, 314, 5231, 15, 0, 6407, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 15, 7,171,171, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 11, 5, 0, 12, 0, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Taroko/Latin/Taiwan
+ { 285, 66, 170, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,11682,11682,11735,11735,11762,11762, 732, 774, 0, 5, 22, 127, 3285, 0, 0, 6419, 6432, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 53, 53, 27, 27, 13, 13, 8, 10, 4, 17, 23, 5, 16, 4, 0, 13, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tasawaq/Latin/Niger
+ { 286, 27, 193, 0, 0, 1143, 1143, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1775, 49, 11, 1,23204,23204,23259,23259,23294,23294, 0, 0, 0, 5, 22, 133, 5242, 4, 0, 6437, 5457, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 12, 4, 55, 55, 35, 35, 13, 13, 2, 2, 4, 17, 23, 1, 11, 5, 0, 5, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tatar/Cyrillic/Russia
+ { 287, 131, 110, 0, 0, 1152, 1152, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1798, 394, 61, 76,23307,23307,23366,23366,23397,23397, 0, 0, 1095, 1102, 22, 120, 5253, 2, 9, 6442, 6448, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 15, 7, 59, 59, 31, 31, 17, 17, 2, 2, 7, 29, 23, 1, 14, 4, 6, 6, 8, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Telugu/Telugu/India
+ { 288, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,23414,23414,23482,23482,23509,23509, 740, 784, 0, 5, 22, 147, 5267, 2, 9, 6456, 983, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Teso/Latin/Uganda
+ { 288, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,23414,23414,23482,23482,23509,23509, 740, 784, 0, 5, 22, 176, 5288, 2, 9, 6456, 6462, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 20, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Teso/Latin/Kenya
+ { 289, 133, 231, 24, 24, 1163, 1171, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1816, 129, 542, 0,23522,23522,23589,23589,23611,23611, 749, 790, 1131, 5, 22, 317, 5308, 2, 9, 6467, 6467, 5, 5, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 6, 31, 5, 67, 67, 22, 22, 15, 15, 10, 10, 4, 17, 23, 1, 3, 4, 6, 3, 3, {84,72,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Thai/Thai/Thailand
+ { 290, 134, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1835, 103, 10, 0,23626,23626,23704,23704,23754,23754, 759, 800, 0, 5, 22, 150, 5311, 15, 0, 6470, 6478, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 6, 5, 0, 8, 6, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tibetan/Tibetan/China
+ { 290, 134, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1835, 103, 61, 76,23626,23626,23704,23704,23754,23754, 759, 800, 0, 5, 22, 120, 5317, 15, 0, 6470, 6484, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 15, 7, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 12, 5, 0, 8, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Tibetan/Tibetan/India
+ { 291, 33, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1858, 78, 61, 76,23780,23780,23820,23820,23846,23846, 0, 0, 0, 5, 22, 6, 0, 2, 0, 6491, 671, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 8, 15, 7, 40, 40, 26, 26, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 3, 4, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tigre/Ethiopic/Eritrea
+ { 292, 33, 77, 38, 38, 1178, 1178, 6, 0, 1, 2, 3, 4, 5, 10, 11, 12, 14, 15, 1879, 78, 61, 76,23859,23859,23887,23887,23907,23907, 766, 808, 0, 5, 22, 1, 112, 2, 0, 6494, 143, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 15, 7, 28, 28, 20, 20, 13, 13, 4, 4, 4, 17, 23, 2, 2, 4, 0, 4, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Ethiopia
+ { 292, 33, 74, 38, 38, 1178, 1178, 6, 0, 1, 2, 3, 4, 5, 10, 16, 17, 14, 15, 1879, 78, 61, 76,23859,23859,23887,23887,23907,23907, 766, 808, 0, 5, 22, 6, 5329, 2, 0, 6494, 671, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 15, 7, 28, 28, 20, 20, 13, 13, 4, 4, 4, 17, 23, 3, 3, 4, 0, 4, 4, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Eritrea
+ { 294, 66, 182, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 787, 78, 573, 589,23920,23920,23964,23964, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 6498, 6507, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 16, 8, 44, 44, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 9, 13, {80,71,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tok Pisin/Latin/Papua New Guinea
+ { 295, 66, 235, 1185, 1185, 1185, 1185, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 23, 38,23991,23991,24050,24050,24078,24078, 770, 812, 1135, 1140, 1199, 205, 5332, 15, 0, 6520, 2283, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 15, 7, 59, 59, 28, 28, 13, 13, 10, 6, 5, 59, 65, 2, 17, 5, 0, 13, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tongan/Latin/Tonga
+ { 296, 66, 216, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,24091,24091,24162,24162, 83, 83, 0, 0, 0, 5, 22, 9, 0, 15, 0, 6533, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 71, 71, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 8, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tsonga/Latin/South Africa
+ { 297, 66, 216, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,24188,24188,24251,24251, 83, 83, 0, 0, 0, 5, 22, 9, 0, 2, 0, 6541, 6549, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 63, 63, 31, 31, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 8, 13, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tswana/Latin/South Africa
+ { 297, 66, 30, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,24188,24188,24251,24251, 83, 83, 0, 0, 0, 5, 22, 153, 0, 2, 0, 6541, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 63, 63, 31, 31, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 8, 0, {66,87,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tswana/Latin/Botswana
+ { 298, 66, 239, 0, 0, 1193, 1193, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1896, 50, 10, 0,24282,24282,24335,24335,24362,24362, 780, 818, 185, 5, 22, 126, 5349, 2, 9, 6562, 6568, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 5, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 11, 4, 6, 6, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Turkey
+ { 298, 66, 63, 0, 0, 1193, 1193, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1896, 50, 23, 38,24282,24282,24335,24335,24362,24362, 780, 818, 185, 5, 22, 22, 83, 2, 9, 6562, 6575, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 15, 7, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 4, 6, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Cyprus
+ { 299, 66, 240, 0, 0, 1201, 1201, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 14, 15, 1896, 49, 10, 0,24375,24428,24481,24508,24535,24535, 782, 820, 1264, 5, 22, 0, 5360, 4, 0, 6581, 6593, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 13, 5, 53, 53, 27, 27, 13, 13, 13, 14, 4, 17, 23, 0, 14, 5, 0, 12, 12, {84,77,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkmen/Latin/Turkmenistan
+ { 301, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 137, 155, 10, 0,24548,24548,24589,24589, 83, 83, 0, 0, 0, 5, 22, 124, 5374, 15, 0, 6605, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 41, 41, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 5, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tyap/Latin/Nigeria
+ { 303, 27, 244, 0, 0, 117, 117, 6, 1, 9, 2, 3, 4, 5, 85, 11, 12, 13, 14, 1912, 49, 10, 0,24616,24671, 3049, 3049, 4289, 4289, 795, 834, 1268, 841, 22, 286, 5378, 4, 0, 6610, 6620, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 13, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 17, 5, 0, 10, 7, {85,65,72}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ukrainian/Cyrillic/Ukraine
+ { 304, 66, 91, 0, 0, 781, 781, 6, 1, 0, 2, 3, 4, 5, 10, 13, 14, 18, 16, 404, 180, 11, 597,24726,24726,24778,24778,24805,24805, 402, 836, 1273, 5, 22, 22, 405, 4, 0, 6627, 6642, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 12, 52, 52, 27, 27, 13, 13, 9, 9, 5, 17, 23, 1, 4, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Upper Sorbian/Latin/Germany
+ { 305, 4, 178, 661, 661, 1209, 1219, 6, 0, 1, 2, 3, 35, 37, 10, 15, 14, 17, 16, 1934, 129, 61, 76,24818,24818,24818,24818, 83, 83, 0, 0, 1278, 1282, 22, 196, 5395, 2, 9, 6648, 5140, 6, 6, 10, 9, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 6, 15, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 2, 14, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Urdu/Arabic/Pakistan
+ { 305, 4, 110, 661, 661, 1209, 1219, 6, 21, 22, 2, 40, 35, 41, 44, 15, 14, 17, 16, 1934, 129, 61, 76,24818,24818,24818,24818, 83, 83, 0, 0, 1278, 1282, 22, 120, 5409, 2, 9, 6648, 6652, 6, 6, 10, 9, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 15, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 1, 12, 4, 6, 4, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Urdu/Arabic/India
+ { 306, 4, 50, 0, 0, 323, 333, 6, 0, 1, 2, 3, 4, 5, 10, 12, 11, 20, 19, 1952, 103, 10, 0,24853,24853,24907,24907,24927,24927, 797, 845, 0, 5, 22, 145, 5421, 2, 9, 6657, 6665, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 54, 54, 20, 20, 13, 13, 12, 12, 4, 17, 23, 1, 11, 4, 6, 8, 5, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Uyghur/Arabic/China
+ { 307, 66, 251, 0, 0, 1228, 1228, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 17, 16, 1969, 78, 99, 0,24940,24940,25000,25000,25031,25031, 360, 857, 185, 5, 22, 318, 5432, 2, 9, 6670, 6676, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 14, 5, 60, 60, 31, 31, 13, 13, 2, 2, 4, 17, 23, 4, 17, 4, 6, 6, 11, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Latin/Uzbekistan
+ { 307, 4, 1, 0, 0, 0, 0, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 1987, 505, 99, 1,18196,18196,25044,25044, 83, 83, 0, 0, 0, 5, 22, 270, 3963, 4, 0, 6687, 5131, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 33, 8, 14, 4, 48, 48, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Uzbek/Arabic/Afghanistan
+ { 307, 27, 251, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1008, 78, 98, 0,25064,25064,25116,25116,25143,25143, 809, 859, 0, 5, 22, 322, 5449, 4, 0, 6693, 6700, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 15, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 14, 5, 0, 7, 10, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Cyrillic/Uzbekistan
+ { 308, 139, 134, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 61, 76,25156,25156,25156,25156, 83, 83, 0, 0, 0, 5, 22, 10, 5463, 2, 9, 6710, 6712, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 29, 29, 29, 29, 13, 13, 2, 2, 4, 17, 23, 1, 8, 4, 6, 2, 4, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Vai/Vai/Liberia
+ { 308, 66, 134, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38,25185,25185,25185,25185, 83, 83, 0, 0, 0, 5, 22, 10, 5471, 2, 9, 6716, 6719, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 47, 47, 47, 47, 13, 13, 2, 2, 4, 17, 23, 1, 13, 4, 6, 3, 8, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Vai/Latin/Liberia
+ { 309, 66, 216, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 16, 17, 14, 15, 163, 103, 10, 0,25232,25232,25301,25301, 83, 83, 0, 0, 0, 5, 22, 9, 0, 2, 0, 6727, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 69, 69, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 0, 9, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Venda/Latin/South Africa
+ { 310, 66, 255, 0, 0, 1236, 1236, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 10, 0,25327,25327,25381,25381,25413,25413, 811, 861, 0, 5, 22, 306, 5484, 4, 0, 6736, 6746, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 5, 54, 54, 32, 32, 20, 20, 2, 2, 4, 17, 23, 1, 13, 5, 0, 10, 8, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Vietnamese/Latin/Vietnam
+ { 311, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 2020, 103, 10, 0,25433,25433,25475,25495,25522,25522, 0, 0, 0, 5, 22, 0, 0, 15, 0, 6754, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 42, 42, 20, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 7, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Volapuk/Latin/world
+ { 312, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,13800,13800,13861,13861, 1284, 1284, 430, 446, 0, 5, 22, 121, 3492, 2, 0, 6761, 2268, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 8, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Vunjo/Latin/Tanzania
+ { 313, 66, 23, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 22, 0, 15, 0, 6769, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 5, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Walloon/Latin/Belgium
+ { 314, 66, 226, 0, 0, 463, 463, 6, 1, 17, 2, 3, 4, 5, 10, 11, 12, 19, 20, 404, 103, 10, 0,25535,25535,25587,25587,25614,25614, 0, 0, 0, 5, 22, 0, 0, 15, 0, 6774, 6780, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 13, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 6, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Walser/Latin/Switzerland
+ { 315, 66, 15, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 241, 0, 15, 0, 6786, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 8, 0, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Warlpiri/Latin/Australia
+ { 316, 66, 246, 0, 0, 1244, 1255, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 78, 10, 0,25627,25627,25703,25731,25760,25760, 813, 863, 1302, 5, 22, 94, 5497, 2, 9, 6794, 6801, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 76, 76, 28, 29, 14, 14, 2, 2, 7, 17, 23, 1, 12, 4, 6, 7, 16, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Welsh/Latin/United Kingdom
+ { 317, 4, 178, 661, 661, 971, 979, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 196, 5509, 15, 0, 6817, 0, 6, 6, 8, 7, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 13, 5, 0, 14, 0, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Western Balochi/Arabic/Pakistan
+ { 317, 4, 1, 661, 661, 971, 979, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 270, 5522, 15, 0, 6817, 0, 6, 6, 8, 7, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 14, 0, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Western Balochi/Arabic/Afghanistan
+ { 317, 4, 112, 661, 661, 971, 979, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 271, 5539, 15, 0, 6817, 0, 6, 6, 8, 7, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 11, 5, 0, 14, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Western Balochi/Arabic/Iran
+ { 317, 4, 176, 661, 661, 971, 979, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 6817, 6831, 6, 6, 8, 7, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 14, 5, {79,77,82}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Western Balochi/Arabic/Oman
+ { 317, 4, 245, 661, 661, 971, 979, 67, 21, 22, 23, 40, 35, 41, 44, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 15, 0, 6817, 6836, 6, 6, 8, 7, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 14, 19, {65,69,68}, 2, 1, 6, 6, 7, 1, 3, 3 }, // Western Balochi/Arabic/United Arab Emirates
+ { 318, 66, 165, 0, 0, 16, 16, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 394, 10, 0,25774,25774,25827,25827, 83, 83, 0, 0, 0, 5, 22, 22, 83, 15, 58, 6855, 6860, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 53, 53, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 7, 5, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Western Frisian/Latin/Netherlands
+ { 319, 33, 77, 0, 0, 0, 0, 6, 0, 17, 2, 3, 4, 5, 10, 14, 15, 16, 17, 2043, 78, 61, 76,25847,25847,25847,25847,25873,25873, 0, 0, 0, 5, 22, 1, 105, 2, 0, 6868, 143, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 15, 7, 26, 26, 26, 26, 13, 13, 2, 2, 4, 17, 23, 2, 9, 4, 0, 5, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Wolaytta/Ethiopic/Ethiopia
+ { 320, 66, 206, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 2065, 394, 10, 0,25886,25886,25935,25935,25935,25935, 732, 865, 0, 5, 22, 127, 5550, 15, 0, 6873, 2999, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 49, 49, 27, 27, 27, 27, 3, 3, 4, 17, 23, 5, 29, 5, 0, 5, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Wolof/Latin/Senegal
+ { 321, 66, 216, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 10, 0,25962,25962,26022,26049,26078,26098, 0, 0, 0, 5, 22, 9, 5579, 2, 0, 6878, 6886, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 5, 60, 60, 27, 29, 20, 21, 2, 2, 4, 17, 23, 1, 25, 4, 0, 8, 15, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Xhosa/Latin/South Africa
+ { 322, 66, 40, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 11, 12, 113, 129, 10, 0,26119,26119,26189,26189,26209,26209, 815, 868, 0, 5, 22, 11, 0, 4, 20, 6901, 6907, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 70, 70, 20, 20, 13, 13, 8, 8, 4, 17, 23, 4, 0, 5, 7, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yangben/Latin/Cameroon
+ { 323, 47, 244, 0, 0, 1265, 1265, 6, 0, 1, 2, 3, 4, 5, 10, 15, 15, 17, 17, 2082, 78, 10, 0,26222,26222,26222,26222, 83, 83, 823, 876, 0, 5, 22, 286, 0, 15, 0, 6914, 6920, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 13, 5, 53, 53, 53, 53, 13, 13, 11, 10, 4, 17, 23, 1, 0, 5, 0, 6, 9, {85,65,72}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yiddish/Hebrew/Ukraine
+ { 324, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 2101, 129, 10, 1,26275,26318,26386,26386,26418,26418, 834, 886, 1309, 1320, 22, 124, 5604, 2, 9, 6929, 6939, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 3, 43, 68, 32, 32, 13, 13, 5, 5, 11, 37, 23, 1, 14, 4, 6, 10, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Nigeria
+ { 324, 66, 25, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 2101, 129, 10, 1,26431,26474,26542,26542,26574,26574, 839, 891, 1357, 1320, 22, 127, 5618, 2, 9, 6929, 6947, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 3, 43, 68, 32, 32, 13, 13, 5, 5, 11, 37, 23, 5, 26, 4, 6, 10, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Benin
+ { 325, 66, 170, 0, 0, 0, 0, 6, 0, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 129, 10, 0,26587,26587,11735,11735,26639,26639, 732, 774, 0, 5, 22, 127, 3285, 0, 0, 6953, 6432, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 52, 52, 27, 27, 13, 13, 8, 10, 4, 17, 23, 5, 16, 4, 0, 10, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Zarma/Latin/Niger
+ { 326, 66, 50, 0, 0, 1274, 1274, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0,26652,26652,26652,26652, 83, 83, 844, 896, 0, 5, 22, 150, 5644, 15, 0, 6963, 6972, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 89, 89, 89, 89, 13, 13, 7, 12, 4, 17, 23, 1, 10, 5, 0, 9, 8, {67,78,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Zhuang/Latin/China
+ { 327, 66, 216, 0, 0, 1285, 1294, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 549, 567, 10, 0,26741,26741,26814,26814,26841,26841, 0, 0, 0, 5, 22, 9, 5654, 2, 9, 6980, 6987, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 5, 73, 73, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 20, 4, 6, 7, 17, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Zulu/Latin/South Africa
+ { 328, 66, 32, 0, 0, 1302, 1302, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 2117, 186, 10, 0,26854,26854,26940,26940,26974,26974, 0, 0, 1368, 5, 22, 9, 5674, 15, 0, 7004, 7011, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 13, 5, 86, 86, 34, 34, 20, 20, 2, 2, 7, 17, 23, 2, 12, 5, 0, 7, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kaingang/Latin/Brazil
+ { 329, 66, 32, 0, 0, 1311, 1311, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 10, 0,26994,26994,27058,27058,27085,27085, 0, 0, 1375, 5, 22, 9, 5686, 15, 0, 7017, 7025, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 64, 64, 27, 27, 13, 13, 2, 2, 8, 17, 23, 2, 15, 5, 0, 8, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Nheengatu/Latin/Brazil
+ { 329, 66, 54, 0, 0, 1311, 1311, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38,26994,26994,27058,27058,27085,27085, 132, 128, 1375, 5, 22, 10, 5701, 15, 0, 7031, 7038, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 64, 64, 27, 27, 13, 13, 5, 5, 8, 17, 23, 1, 17, 5, 0, 7, 8, {67,79,80}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Nheengatu/Latin/Colombia
+ { 329, 66, 254, 0, 0, 1311, 1311, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 186, 23, 38,26994,26994,27058,27058,27085,27085, 132, 128, 1375, 5, 22, 302, 5718, 15, 0, 7031, 7046, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 64, 64, 27, 27, 13, 13, 5, 5, 8, 17, 23, 4, 22, 5, 0, 7, 9, {86,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Nheengatu/Latin/Venezuela
+ { 330, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 163, 103, 61, 76,27098,27098,27098,27098, 83, 83, 851, 83, 0, 5, 22, 120, 0, 15, 0, 7055, 664, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 54, 54, 54, 54, 13, 13, 4, 4, 4, 17, 23, 1, 0, 5, 0, 8, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Haryanvi/Devanagari/India
+ { 331, 66, 91, 0, 0, 915, 915, 6, 1, 0, 2, 3, 4, 5, 10, 14, 15, 16, 17, 404, 78, 10, 0,27152,27152,27208,27208, 83, 83, 0, 0, 0, 5, 22, 22, 83, 15, 0, 7063, 7073, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 13, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Northern Frisian/Latin/Germany
+ { 332, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 49, 4, 5, 10, 14, 15, 16, 17, 163, 103, 61, 76, 8522, 8522, 8522, 8522, 83, 83, 855, 908, 0, 5, 22, 120, 0, 15, 0, 7082, 664, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 52, 52, 52, 52, 13, 13, 5, 4, 4, 17, 23, 1, 0, 5, 0, 9, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Rajasthani/Devanagari/India
+ { 333, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 133, 0, 15, 0, 7091, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 12, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Moksha/Cyrillic/Russia
+ { 334, 66, 258, 0, 0, 0, 0, 6, 1, 9, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0,27235,27235,27235,27235, 83, 83, 860, 912, 0, 5, 22, 0, 0, 2, 0, 7103, 7112, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 90, 90, 90, 90, 13, 13, 12, 12, 4, 17, 23, 0, 0, 4, 0, 9, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 2, 2 }, // Toki Pona/Latin/world
+ { 335, 66, 214, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0,27325,27325,27325,27325, 83, 83, 0, 0, 0, 5, 22, 10, 0, 15, 0, 7118, 7123, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 46, 46, 46, 46, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 5, 13, {83,66,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Pijin/Latin/Solomon Islands
+ { 336, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 124, 0, 15, 0, 7136, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 5, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Obolo/Latin/Nigeria
+ { 337, 4, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 367, 383,27371,27371,27417,27417, 83, 83, 0, 0, 0, 5, 22, 196, 5395, 15, 0, 7141, 5140, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 16, 8, 46, 46, 24, 24, 13, 13, 2, 2, 4, 17, 23, 2, 13, 5, 0, 5, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Baluchi/Arabic/Pakistan
+ { 337, 66, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 265, 129, 573, 589,27441,27441,27511,27511, 83, 83, 0, 0, 0, 5, 22, 196, 5740, 15, 0, 7146, 7153, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 16, 8, 70, 70, 26, 26, 13, 13, 2, 2, 4, 17, 23, 2, 14, 5, 0, 7, 8, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Baluchi/Latin/Pakistan
+ { 338, 66, 117, 0, 0, 414, 414, 6, 1, 0, 2, 3, 4, 5, 10, 11, 12, 14, 15, 2140, 78, 10, 0,27537,27537,27591,27591,27625,27625, 0, 0, 0, 5, 22, 22, 405, 4, 20, 7161, 3728, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 8, 13, 5, 54, 54, 34, 34, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ligurian/Latin/Italy
+ { 339, 142, 161, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 10, 1, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 134, 0, 15, 0, 7167, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 13, 4, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 18, 0, {77,77,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Rohingya/Hanifi/Myanmar
+ { 339, 142, 20, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 163, 103, 61, 76, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 132, 0, 15, 0, 7167, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 15, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 18, 0, {66,68,84}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Rohingya/Hanifi/Bangladesh
+ { 340, 4, 178, 1321, 1321, 1326, 1335, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 1934, 129, 61, 76,27638,27638,27638,27638,27695,27695, 0, 0, 1278, 1282, 22, 196, 5395, 15, 0, 7185, 5140, 5, 5, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 15, 7, 57, 57, 57, 57, 13, 13, 2, 2, 4, 20, 23, 2, 14, 5, 0, 7, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Torwali/Arabic/Pakistan
+ { 341, 66, 25, 0, 0, 566, 566, 6, 1, 9, 2, 3, 4, 5, 10, 11, 12, 14, 15, 2161, 2178, 10, 0,27708,27708,27766,27766,27800,27800, 872, 924, 0, 5, 22, 127, 5754, 15, 86, 7192, 7203, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 13, 5, 58, 58, 34, 34, 20, 20, 13, 13, 4, 17, 23, 5, 33, 5, 6, 11, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Anii/Latin/Benin
+ { 342, 29, 110, 0, 0, 1343, 1353, 6, 0, 1, 2, 3, 4, 5, 10, 14, 15, 16, 17, 0, 129, 61, 76,27820,27820,27872,27872,27905,27905, 885, 937, 0, 5, 22, 120, 5787, 2, 0, 7208, 664, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 15, 7, 52, 52, 33, 33, 18, 18, 6, 11, 4, 17, 23, 1, 14, 4, 0, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Kangri/Devanagari/India
+ { 343, 66, 117, 0, 0, 414, 414, 6, 1, 68, 2, 3, 4, 5, 10, 14, 15, 16, 17, 113, 78, 10, 0,27923,27923,27967,27967,27625,27625, 0, 0, 0, 5, 22, 155, 405, 117, 0, 7215, 3728, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 13, 5, 44, 44, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 4, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Venetian/Latin/Italy
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0,0,0}, 0, 0, 0, 0, 0, 0, 0, 0 } // trailing zeros
};
-static const char16_t list_pattern_part_data[] = {
-0x25, 0x31, 0x2c, 0x20, 0x25, 0x32, 0x3b, 0x25, 0x31, 0x20, 0x65, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64, 0x68,
-0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x1363, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x12a5, 0x1293, 0x20, 0x25, 0x32, 0x25,
-0x31, 0x20, 0x12a5, 0x1293, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x648, 0x25, 0x32, 0x61b, 0x25, 0x31, 0x20, 0x587, 0x20, 0x25,
-0x32, 0x25, 0x31, 0x20, 0x986, 0x9f0, 0x9c1, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0x259, 0x20, 0x25, 0x32, 0x25, 0x31,
-0x20, 0x65, 0x74, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x98f, 0x9ac, 0x982, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xf51,
-0xf44, 0xf0b, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x68, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x438, 0x20, 0x25, 0x32,
-0x25, 0x31, 0x20, 0x25, 0x32, 0x25, 0x31, 0x1014, 0x103e, 0x1004, 0x1037, 0x103a, 0x20, 0x25, 0x32, 0x104a, 0x25, 0x31, 0x20, 0x456,
-0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x1793, 0x17b7, 0x1784, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x1793, 0x17b7, 0x1784, 0x200b, 0x25,
-0x32, 0x25, 0x31, 0x20, 0x69, 0x20, 0x25, 0x32, 0x25, 0x31, 0x3001, 0x25, 0x32, 0x25, 0x31, 0x548c, 0x25, 0x32, 0x25, 0x31,
-0x53ca, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6f, 0x67, 0x20, 0x25, 0x32, 0x25, 0x31,
-0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
-0x6b, 0x61, 0x6a, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6a, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x65, 0x74, 0x20,
-0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x67, 0x75, 0x73, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x65, 0x20, 0x25, 0x32, 0x25,
-0x31, 0x20, 0x10d3, 0x10d0, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x75, 0x6e, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x3ba,
-0x3b1, 0x3b9, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x61, 0x6d, 0x6d, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xa85,
-0xaa8, 0xac7, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x5d5, 0x25, 0x32, 0x25,
-0x31, 0x2c, 0x20, 0x914, 0x930, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x914, 0x930, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xe9,
-0x73, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x64, 0x61, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64, 0x61, 0x6e,
-0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x61, 0x67, 0x75, 0x73, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x6c, 0x61,
-0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6c, 0x61, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0xcae, 0xca4, 0xccd,
-0xca4, 0xcc1, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xcae, 0xca4, 0xccd, 0xca4, 0xcc1, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x436,
-0x4d9, 0x43d, 0x435, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x436, 0x430, 0x43d, 0x430, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xbc0f,
-0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xfb, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xec1, 0xea5, 0xeb0, 0x20, 0x25, 0x32, 0x25,
-0x31, 0x20, 0x75, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6d, 0x70, 0xe9, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x69,
-0x72, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x25, 0x32, 0x20, 0xd0e, 0xd28, 0xd4d, 0xd28, 0xd3f, 0xd35, 0x25, 0x31, 0x20,
-0xd15, 0xd42, 0xd1f, 0xd3e, 0xd24, 0xd46, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x75, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
-0x75, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x906, 0x923, 0x93f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x25, 0x32, 0x25, 0x31,
-0x20, 0x930, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0xb13, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xb13, 0x20, 0x25, 0x32,
-0x25, 0x31, 0x60c, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x20, 0x627, 0x648, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x627, 0x648,
-0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x200f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x20, 0x648, 0x20, 0x25, 0x32, 0x25, 0x31,
-0x20, 0x648, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xa05, 0xa24, 0xa47, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x219, 0x69, 0x20,
-0x25, 0x32, 0x25, 0x31, 0x20, 0x4d5, 0x43c, 0x4d5, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x20, 0x6fd, 0x20, 0x25, 0x32, 0x25,
-0x31, 0x20, 0x6fd, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0xdc3, 0xdc4, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xdc3, 0xdc4,
-0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0xa0, 0x25, 0x32, 0x25, 0x31, 0x20, 0x69, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31,
-0x20, 0x69, 0x79, 0x6f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x79, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6e, 0x61, 0x20,
-0x25, 0x32, 0x25, 0x31, 0x20, 0x6f, 0x63, 0x68, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xbae, 0xbb1, 0xbcd, 0xbb1, 0xbc1, 0xbae,
-0xbcd, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x4bb, 0x4d9, 0x43c, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xc2e, 0xc30, 0xc3f, 0xc2f,
-0xc41, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xe41, 0xe25, 0xe30, 0x25, 0x32, 0x25, 0x31, 0xe41, 0xe25, 0xe30, 0x25, 0x32, 0x25,
-0x31, 0x20, 0x6d, 0x6f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x77, 0x65,
-0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x20, 0x627, 0x648, 0x631, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x627, 0x648, 0x631, 0x20,
-0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0xe0, 0x20, 0x25, 0x32, 0x25, 0x31,
-0x2c, 0x20, 0x61, 0x28, 0x63, 0x29, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x28, 0x63, 0x29, 0x20, 0x25, 0x32, 0x25,
-0x31, 0x20, 0x5d0, 0x5d5, 0x5df, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x6e, 0x65, 0x2d, 0x25, 0x32, 0x25, 0x31, 0x20,
-0x6e, 0x65, 0x2d, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x6e, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x6b, 0x70,
-0x6c, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6b, 0x70, 0x6c, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x61,
-0x74, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x74, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x61, 0x6b, 0x6b, 0x65,
-0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x6b, 0x6b, 0x65, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x13a0,
-0x13b4, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x13a0, 0x13b4, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x438, 0x486, 0x20, 0x25, 0x32,
-0x25, 0x31, 0x20, 0x61, 0x28, 0x6e, 0x29, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x443, 0x43e, 0x43d, 0x43d, 0x430, 0x20, 0x25,
-0x32, 0x25, 0x31, 0x2c, 0x20, 0x14b, 0x301, 0x67, 0x25b, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x1e3f, 0x62, 0x25b, 0x6e,
-0x20, 0x14b, 0x301, 0x67, 0x25b, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x70, 0x254, 0x70, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
-0xd804, 0xdd03, 0xd804, 0xdd33, 0xd804, 0xdd03, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x62, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x540c,
-0x25, 0x32
+static constexpr char16_t list_pattern_part_data[] = {
+0x25, 0x31, 0x2c, 0x20, 0x25, 0x32, 0x3b, 0x25, 0x31, 0x2d, 0x438, 0x20,
+0x25, 0x32, 0x2d, 0x438, 0x25, 0x31, 0x20, 0x65, 0x6e, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64, 0x68, 0x65, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x1363, 0x20, 0x25, 0x32, 0x25, 0x31, 0x1363, 0x20,
+0x12a5, 0x1293, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x12a5, 0x1293, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x648, 0x25, 0x32, 0x61b, 0x25, 0x31, 0x20, 0x79,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x587, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x20, 0x986, 0x9f0, 0x9c1, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0x259,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x98f, 0x9ac, 0x982, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x20, 0x65, 0x74, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x456, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x906, 0x930, 0x94b, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x906, 0x930, 0x94b, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0x69, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x438, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x68, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x2d, 0x20, 0x25, 0x32, 0x25, 0x31, 0x1014, 0x103e, 0x1004, 0x1037, 0x103a, 0x20,
+0x25, 0x32, 0x104a, 0x25, 0x31, 0x3001, 0x25, 0x32, 0x25, 0x31, 0x540c, 0x25,
+0x32, 0x25, 0x31, 0x2c, 0x20, 0x75, 0x67, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x20, 0x75, 0x67, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xd804, 0xdd03, 0xd804,
+0xdd33, 0xd804, 0xdd03, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x13a0, 0x13b4,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x13a0, 0x13b4, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x548c, 0x25, 0x32, 0x25, 0x31, 0x53ca, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x438, 0x486, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x442, 0x430, 0x442, 0x430,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x75, 0x6e, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0xe8, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0xa0, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x6f, 0x67, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c,
+0x20, 0x924, 0x947, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x924, 0x947, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0xf51, 0xf44, 0xf0b, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x61, 0x6e, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6b, 0x61, 0x6a,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6a, 0x61, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x2c, 0x20, 0x6b, 0x70, 0x6c, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x20, 0x6b, 0x70, 0x6c, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20,
+0x6f, 0x67, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x61, 0x74, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x74, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x20, 0x65, 0x74, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x65, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x2e41, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2e41, 0x20, 0xd83a,
+0xdd2b, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xd83a, 0xdd2b, 0x20, 0x25, 0x32,
+0x204f, 0x25, 0x31, 0x20, 0x61, 0x67, 0x75, 0x73, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0x10d3, 0x10d0, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x75, 0x6e,
+0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x3ba, 0x3b1, 0x3b9, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0xa85, 0xaa8, 0xac7, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x2c, 0x20, 0x64, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64, 0x61,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x5d5, 0x25, 0x32, 0x25, 0x31, 0x2c,
+0x20, 0x914, 0x930, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x914, 0x930, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x61, 0x75, 0x72, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x20, 0x61, 0x75, 0x72, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0xe9, 0x73, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x6e, 0x61, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x6e, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x2c, 0x20, 0x64, 0x61, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64,
+0x61, 0x6e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x6c, 0x61, 0x6e,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6c, 0x61, 0x6e, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x2c, 0x20, 0x64, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x64,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x61, 0x6d, 0x6d, 0x61, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0xcae, 0xca4, 0xccd, 0xca4, 0xcc1, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0xcae, 0xca4, 0xccd, 0xca4, 0xcc1, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x60c, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x20, 0x62a,
+0x655, 0x6c1, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x62a, 0x655, 0x6c1, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x924, 0x93f, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0x924, 0x93f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x436, 0x4d9,
+0x43d, 0x435, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x1793, 0x17b7, 0x1784, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x1793, 0x17b7, 0x1784, 0x200b, 0x25, 0x32, 0x25,
+0x31, 0x20, 0xbc0f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xfb, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x436, 0x430, 0x43d, 0x430, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0xec1, 0xea5, 0xeb0, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6d,
+0x70, 0xe9, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x69, 0x72, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x61, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61,
+0x28, 0x6e, 0x29, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x25, 0x32,
+0x20, 0xd0e, 0xd28, 0xd4d, 0xd28, 0xd3f, 0xd35, 0x25, 0x31, 0x20, 0xd15, 0xd42,
+0xd1f, 0xd3e, 0xd24, 0xd46, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x75,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x75, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x20, 0x985, 0x9ae, 0x9b8, 0x9c1, 0x982, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x906, 0x923, 0x93f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x25, 0x32, 0x25,
+0x31, 0x20, 0x930, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x14b, 0x301,
+0x67, 0x25b, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x1e3f, 0x62, 0x25b,
+0x6e, 0x20, 0x14b, 0x301, 0x67, 0x25b, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x70, 0x254, 0x70, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x61, 0x6e,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x6e, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x2c, 0x20, 0xb13, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0xb13, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x4d5, 0x43c, 0x4d5, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x60c, 0x20, 0x627, 0x648, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x627,
+0x648, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c, 0x200f, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x60c, 0x20, 0x648, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x648, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x62, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x20, 0xa05, 0xa24, 0xa47, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x219, 0x69,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x443, 0x43e, 0x43d, 0x43d, 0x430, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x2c, 0x20, 0x924, 0x925, 0x93e, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x20, 0x924, 0x925, 0x93e, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c,
+0x20, 0x6fd, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6fd, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x2c, 0x20, 0xdc3, 0xdc4, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0xdc3, 0xdc4, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x69, 0x6e, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x69, 0x79, 0x6f, 0x20, 0x25, 0x32, 0x25, 0x31,
+0x2c, 0x20, 0x73, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0x73, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0x6f, 0x63, 0x68, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x718,
+0x25, 0x32, 0x25, 0x31, 0x20, 0xbae, 0xbb1, 0xbcd, 0xbb1, 0xbc1, 0xbae, 0xbcd,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x4bb, 0x4d9, 0x43c, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x20, 0xc2e, 0xc30, 0xc3f, 0xc2f, 0xc41, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x20, 0xe41, 0xe25, 0xe30, 0x25, 0x32, 0x25, 0x31, 0xe41, 0xe25, 0xe30,
+0x25, 0x32, 0x25, 0x31, 0x1295, 0x20, 0x25, 0x32, 0x1295, 0x25, 0x31, 0x20,
+0x6d, 0x6f, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0x65, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x20, 0x77, 0x65, 0x20, 0x25, 0x32, 0x25, 0x31, 0x60c,
+0x20, 0x627, 0x648, 0x631, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x627, 0x648,
+0x631, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x76, 0x61, 0x20, 0x25, 0x32,
+0x25, 0x31, 0x20, 0x76, 0xe0, 0x20, 0x25, 0x32, 0x25, 0x31, 0x2c, 0x20,
+0x61, 0x28, 0x63, 0x29, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x28,
+0x63, 0x29, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x5d0, 0x5d5, 0x5df, 0x20,
+0x25, 0x32, 0x25, 0x31, 0x20, 0x63, 0x61, 0x65, 0x75, 0x71, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x2c, 0x20, 0x6e, 0x65, 0x2d, 0x25, 0x32, 0x25, 0x31,
+0x20, 0x6e, 0x65, 0x2d, 0x25, 0x32, 0x25, 0x31, 0x20, 0x6b, 0x61, 0x72,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x61, 0x73, 0x75, 0xed, 0x20, 0x25,
+0x32, 0x25, 0x31, 0x60c, 0x25, 0x32, 0x25, 0x31, 0x20, 0x60c, 0x622, 0x6ba,
+0x20, 0x25, 0x32, 0x25, 0x31, 0x20, 0x622, 0x6ba, 0x20, 0x25, 0x32, 0x25,
+0x31, 0x2c, 0x20, 0x915, 0x928, 0x947, 0x20, 0x25, 0x32, 0x25, 0x31, 0x20,
+0x915, 0x928, 0x947, 0x20, 0x25, 0x32
};
-static const char16_t single_character_data[] = {
-0x2e, 0x2c, 0x25, 0x30, 0x2d, 0x2b, 0x65, 0x22, 0x27, 0x45, 0x201c, 0x201d, 0x2018, 0x2019, 0xa0, 0xab, 0xbb, 0x2039, 0x203a, 0x66b,
-0x66c, 0x66a, 0x61c, 0x660, 0x61c, 0x2d, 0x61c, 0x2b, 0x627, 0x633, 0x200e, 0x25, 0x200e, 0x200e, 0x2d, 0x200e, 0x2b, 0x9e6, 0x2212, 0xf20,
-0x201e, 0x1040, 0x300c, 0x300d, 0x300e, 0x300f, 0x201a, 0xd7, 0x31, 0x30, 0x5e, 0x202f, 0x6f0, 0x200e, 0x2b, 0x200e, 0xd7, 0x6f1, 0x6f0, 0x5e,
-0x966, 0x200e, 0x2212, 0x415, 0xb7, 0x31, 0x30, 0x5e, 0x5a, 0xd804, 0xdd36, 0x200f, 0x2d, 0x200f, 0x2b
+static constexpr char16_t single_character_data[] = {
+0x2e, 0x2c, 0x25, 0x30, 0x2d, 0x2b, 0x65, 0x22, 0x27, 0xa0, 0x45, 0xab,
+0xbb, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2039, 0x203a, 0x66b, 0x66c, 0x66a,
+0x61c, 0x660, 0x61c, 0x2d, 0x61c, 0x2b, 0x623, 0x633, 0x200e, 0x25, 0x200e, 0x200e,
+0x2d, 0x200e, 0x2b, 0x9e6, 0x6f0, 0x200e, 0x2b, 0x200e, 0xd7, 0x6f1, 0x6f0, 0x5e,
+0x2212, 0x966, 0x1040, 0x300c, 0x300d, 0x300e, 0x300f, 0x200f, 0x2d, 0x200f, 0x2b, 0x627,
+0x633, 0xd804, 0xdd36, 0xd7, 0x31, 0x30, 0x5e, 0xf20, 0x202f, 0x2e41, 0xd83a, 0xdd50,
+0xd83a, 0xdd09, 0x12c8, 0xabf0, 0x60c, 0x7c0, 0xb7, 0x31, 0x30, 0x5e, 0x200e, 0x2212,
+0x1c50, 0x415
};
-static const char16_t date_format_data[] = {
-0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x20, 0x4d,
-0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c,
-0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d,
-0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, 0x64,
-0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64,
-0x64, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x64,
-0x64, 0x64, 0x64, 0x60c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x200f, 0x2f, 0x4d,
-0x200f, 0x2f, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x569, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64,
-0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20,
-0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x2d, 0x4d, 0x2d, 0x79, 0x79, 0x79, 0x79,
-0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79,
-0x79, 0x28, 0x27, 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x72, 0x65, 0x6e, 0x27,
-0x20, 0x64, 0x28, 0x27, 0x61, 0x27, 0x29, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x2f, 0x4d, 0x2f, 0x64, 0x64,
-0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0xf66, 0xfa4, 0xfb1, 0xf72, 0xf0b, 0xf63, 0xf7c, 0xf0b, 0x79,
-0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0xf5a, 0xf7a, 0xf66, 0xf0b, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c,
-0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x433, 0x27, 0x2e, 0x64, 0x2e, 0x4d,
-0x4d, 0x2e, 0x79, 0x79, 0x20, 0x27, 0x433, 0x27, 0x2e, 0x79, 0x79, 0x79, 0x79, 0x104a, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
-0x64, 0x104a, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2d, 0x4d, 0x4d, 0x2d, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c,
-0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
-0x79, 0x5e74, 0x4d, 0x6708, 0x64, 0x65e5, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0x2f, 0x4d, 0x2f, 0x64, 0x64, 0x2f,
-0x4d, 0x2f, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x5e74, 0x4d, 0x6708, 0x64, 0x65e5, 0x20, 0x64, 0x64, 0x64, 0x64,
-0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x64,
-0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x2e, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x79,
-0x2e, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64,
-0x64, 0x64, 0x20, 0x27, 0x64, 0x65, 0x6e, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
-0x79, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x2d, 0x4d, 0x4d, 0x2d, 0x79, 0x79, 0x79,
-0x79, 0x4d, 0x2f, 0x64, 0x2f, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
-0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x2f, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c,
-0x20, 0x64, 0x2d, 0x27, 0x61, 0x27, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
-0x79, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x27, 0x6d, 0x68, 0x27,
-0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64,
-0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64,
-0x64, 0x2c, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64,
-0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64,
-0x20, 0x5d1, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x20, 0x4d, 0x4d, 0x4d,
-0x4d, 0x20, 0x64, 0x2e, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x20, 0x4d, 0x4d, 0x2e, 0x20,
-0x64, 0x64, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x20, 0x27, 0x6c, 0x65, 0x27, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20,
-0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x436, 0x27, 0x2e, 0x20, 0x64,
-0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0x2d, 0x27, 0x436, 0x27, 0x2e,
-0x2c, 0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0xb144, 0x20,
-0x4d, 0xc6d4, 0x20, 0x64, 0xc77c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x64, 0x2e, 0x64,
-0x64, 0x64, 0x64, 0x20, 0xe97, 0xeb5, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64,
-0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x20, 0x27, 0x67, 0x61, 0x64, 0x61, 0x27, 0x20, 0x64, 0x2e, 0x20,
-0x4d, 0x4d, 0x4d, 0x4d, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x6d, 0x27, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64,
-0x20, 0x27, 0x64, 0x27, 0x2e, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0x2c, 0x20, 0x4d, 0x4d, 0x4d,
-0x4d, 0x20, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x74, 0x61,
-0x27, 0x2019, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x43e, 0x43d,
-0x44b, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x44b, 0x43d, 0x27, 0x20, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x20,
-0x27, 0x433, 0x430, 0x440, 0x430, 0x433, 0x27, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x4d, 0x4d, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x64,
-0x64, 0x20, 0x62f, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x62f, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x64, 0x64,
-0x64, 0x2c, 0x20, 0x27, 0x69, 0x6c, 0x73, 0x27, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79,
-0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e,
-0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c,
-0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x430, 0x437, 0x27, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x79, 0x79, 0x79,
-0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64,
-0x64, 0x64, 0x64, 0x20, 0x64, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65,
-0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x2f, 0x79, 0x79, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
-0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x435, 0x43b, 0x27, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20,
-0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0xe17,
-0xe35, 0xe48, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x4d,
-0x4d, 0x4d, 0x4d, 0xf60, 0xf72, 0xf0b, 0xf5a, 0xf7a, 0xf66, 0xf0b, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
-0x64, 0x1363, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x1218, 0x12d3, 0x120d, 0x1272, 0x20, 0x79, 0x79, 0x79, 0x79,
-0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79,
-0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x60c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64,
-0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x440, 0x27, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x60c,
-0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x60c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64,
-0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x646, 0x686, 0x6cc, 0x20,
-0x6cc, 0x6cc, 0x644, 0x20, 0x64, 0x20, 0x646, 0x686, 0x6cc, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x64, 0x64, 0x20,
-0x6a9, 0x648, 0x646, 0x6cc, 0x79, 0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x61, 0x27, 0x20, 0x27, 0x64, 0x27,
-0x2e, 0x20, 0x64, 0x27, 0x69, 0x64, 0x27, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20,
-0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x5d8, 0x5df, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79,
-0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64,
-0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79,
-0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x20, 0x27, 0x64, 0x69, 0x27, 0x20,
-0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x61, 0x6c, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c,
-0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x27, 0x6c, 0x69, 0x61, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64,
-0x64, 0x64, 0x2c, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
-0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x69, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27,
-0x64, 0x69, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x27, 0x64, 0xe4, 0x27, 0x20, 0x64,
-0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d,
-0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x43b, 0x27, 0x2e, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27,
-0x441, 0x44b, 0x43b, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x27, 0x43a, 0x4af, 0x43d, 0x44d, 0x27, 0x2c, 0x20,
-0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x2c,
-0x20, 0x27, 0x6c, 0x79, 0x25b, 0x27, 0x30c, 0x2bc, 0x20, 0x64, 0x20, 0x27, 0x6e, 0x61, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
-0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x6d, 0x65,
-0x74, 0x74, 0x61, 0x73, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d,
-0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, 0x20, 0x79, 0x79, 0x79, 0x79
+static constexpr char16_t date_format_data[] = {
+0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
+0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79,
+0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d,
+0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x448, 0x27,
+0x2e, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x79, 0x79, 0x79, 0x64,
+0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64,
+0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f,
+0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x2d,
+0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x2f, 0x4d,
+0x2f, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x79,
+0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x79,
+0x79, 0x2f, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64,
+0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f,
+0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x60c, 0x20, 0x64, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x200f, 0x2f,
+0x4d, 0x200f, 0x2f, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c,
+0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27,
+0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20, 0x569, 0x2e,
+0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64,
+0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x2d, 0x4d, 0x2d, 0x79,
+0x79, 0x79, 0x79, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79,
+0x79, 0x79, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79,
+0x28, 0x27, 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, 0x27, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x27, 0x72, 0x65, 0x6e, 0x27, 0x20, 0x64, 0x28, 0x27, 0x61,
+0x27, 0x29, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x2f, 0x4d,
+0x2f, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x202f, 0x27, 0x433, 0x27, 0x2e,
+0x64, 0x64, 0x64, 0x64, 0x1361, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x20, 0x130d, 0x122d, 0x130b, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64,
+0x2d, 0x4d, 0x4d, 0x2d, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64,
+0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79,
+0x79, 0x79, 0x2e, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x2e, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x64, 0x2e,
+0x4d, 0x2e, 0x79, 0x79, 0x2e, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x79,
+0x202f, 0x27, 0x433, 0x27, 0x2e, 0x79, 0x79, 0x79, 0x79, 0x104a, 0x20, 0x4d,
+0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x104a, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79,
+0x79, 0x79, 0x79, 0x5e74, 0x4d, 0x6708, 0x64, 0x65e5, 0x20, 0x64, 0x64, 0x64,
+0x64, 0x79, 0x79, 0x79, 0x79, 0x2f, 0x4d, 0x2f, 0x64, 0x79, 0x79, 0x79,
+0x79, 0x5e74, 0x4d, 0x6708, 0x64, 0x65e5, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27,
+0x64, 0x65, 0x6c, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64,
+0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79,
+0x79, 0x79, 0x79, 0x4d, 0x2f, 0x64, 0x2f, 0x79, 0x79, 0x64, 0x64, 0x64,
+0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x43b,
+0x27, 0x2e, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x79, 0x79, 0x79, 0x79,
+0x2e, 0x4d, 0x4d, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20,
+0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x202f,
+0x27, 0x4ab, 0x27, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x27, 0x64,
+0xe4, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79,
+0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x20, 0x27, 0x64, 0x69, 0x27, 0x20, 0x27, 0x75, 0x27, 0x20,
+0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x2e, 0x20,
+0x79, 0x79, 0x79, 0x79, 0x2e, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79,
+0x79, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20,
+0x27, 0x64, 0x65, 0x6e, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20,
+0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79,
+0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0xf66, 0xfa4, 0xfb1, 0xf72, 0xf0b, 0xf63,
+0xf7c, 0xf0b, 0x79, 0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
+0xf5a, 0xf7a, 0xf66, 0xf0b, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20,
+0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79,
+0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c,
+0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x2f, 0x4d, 0x4d,
+0x2f, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x27, 0x6c, 0x61,
+0x27, 0x20, 0x64, 0x2d, 0x27, 0x61, 0x27, 0x20, 0x27, 0x64, 0x65, 0x27,
+0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64,
+0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x27,
+0x6c, 0x69, 0x61, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x2e, 0x4d,
+0x2e, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x20,
+0x27, 0x64, 0x69, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64,
+0x61, 0x6c, 0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64,
+0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2e41, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x27, 0x6d, 0x68, 0x27,
+0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64,
+0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d,
+0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x64, 0x64, 0x64, 0x64, 0x1365, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x20, 0x1218, 0x12d3, 0x120d, 0x1275, 0x20, 0x79, 0x79, 0x79, 0x79,
+0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c,
+0x20, 0x64, 0x20, 0x5d1, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
+0x64, 0x2e, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x79, 0x79,
+0x2e, 0x20, 0x4d, 0x4d, 0x2e, 0x20, 0x64, 0x64, 0x2e, 0x64, 0x64, 0x64,
+0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, 0x20, 0x79,
+0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x27, 0x6c, 0x65, 0x27,
+0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
+0x20, 0x79, 0x79, 0x79, 0x79, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x2f, 0x79,
+0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x27,
+0x64, 0x69, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x69,
+0x27, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x20,
+0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x202f, 0x27, 0x436, 0x27,
+0x2e, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x64, 0x64,
+0x64, 0x64, 0x79, 0x79, 0x79, 0x79, 0xb144, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
+0x20, 0x64, 0xc77c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x79, 0x79, 0x2e, 0x20,
+0x4d, 0x2e, 0x20, 0x64, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64,
+0x27, 0xea, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x61, 0x27, 0x20,
+0x79, 0x79, 0x79, 0x79, 0x27, 0x61, 0x6e, 0x27, 0x79, 0x79, 0x79, 0x79,
+0x2d, 0x27, 0x436, 0x27, 0x2e, 0x2c, 0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d,
+0x4d, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x20,
+0xe97, 0xeb5, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79,
+0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x27, 0x64, 0x69, 0x65,
+0x27, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x64, 0x20, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64,
+0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2e, 0x20, 0x27, 0x67, 0x61,
+0x64, 0x61, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x79,
+0x79, 0x79, 0x79, 0x20, 0x27, 0x6d, 0x27, 0x2e, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x20, 0x64, 0x20, 0x27, 0x64, 0x27, 0x2e, 0x2c, 0x20, 0x64, 0x64,
+0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x27, 0x64, 0x65, 0x27,
+0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x79, 0x79, 0x79, 0x79, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
+0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c,
+0x20, 0x64, 0x20, 0x27, 0x74, 0x61, 0x27, 0x2019, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64,
+0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64,
+0x79, 0x79, 0x79, 0x79, 0x202f, 0x27, 0x43e, 0x43d, 0x44b, 0x27, 0x20, 0x4d,
+0x4d, 0x4d, 0x4d, 0x27, 0x44b, 0x43d, 0x27, 0x20, 0x64, 0x2c, 0x20, 0x64,
+0x64, 0x64, 0x64, 0x20, 0x27, 0x433, 0x430, 0x440, 0x430, 0x433, 0x27, 0x79,
+0x79, 0x79, 0x79, 0x20, 0x1823, 0x1828, 0x20, 0x180e, 0x180e, 0x180e, 0x1824, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x180e, 0x180e, 0x1822, 0x1822, 0x1828, 0x64, 0x2e, 0x20,
+0x64, 0x64, 0x64, 0x64, 0x20, 0x180b, 0x182d, 0x1820, 0x1837, 0x1820, 0x182d, 0x64,
+0x64, 0x64, 0x64, 0x20, 0x2c, 0x20, 0x27, 0x6c, 0x79, 0x25b, 0x27, 0x30c,
+0x2bc, 0x20, 0x64, 0x20, 0x27, 0x6e, 0x61, 0x27, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20,
+0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20,
+0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x202f, 0x27,
+0x430, 0x437, 0x27, 0x64, 0x64, 0x64, 0x64, 0x20, 0x62f, 0x20, 0x79, 0x79,
+0x79, 0x79, 0x20, 0x62f, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64,
+0x64, 0x64, 0x64, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20, 0x27, 0x6d,
+0x65, 0x74, 0x74, 0x61, 0x73, 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x27, 0x69, 0x6c, 0x73,
+0x27, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x79, 0x79, 0x79, 0x79, 0x202f, 0x27, 0x441, 0x44b, 0x43b, 0x27, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x27, 0x43a, 0x4af, 0x43d, 0x44d,
+0x27, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x20,
+0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
+0x27, 0x64, 0x65, 0x27, 0x20, 0x27, 0x73, 0x75, 0x27, 0x20, 0x79, 0x79,
+0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x64, 0x20, 0x27, 0x64,
+0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27,
+0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x60c, 0x20, 0x64,
+0x20, 0x712, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64,
+0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x202f,
+0x27, 0x435, 0x43b, 0x27, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c,
+0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x2c, 0x20,
+0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0xe17, 0xe35, 0xe48, 0x20,
+0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79,
+0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0xf60, 0xf72, 0xf0b, 0xf5a,
+0xf7a, 0xf66, 0xf0b, 0x64, 0x2c, 0x20, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+0x64, 0x64, 0x1361, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
+0x12ee, 0x121d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x1363,
+0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79,
+0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x20,
+0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79, 0x79, 0x202f, 0x27, 0x440,
+0x27, 0x2e, 0x64, 0x64, 0x64, 0x64, 0x60c, 0x20, 0x64, 0x20, 0x4d, 0x4d,
+0x4d, 0x4d, 0x60c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
+0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x60c, 0x20, 0x64, 0x64, 0x64,
+0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d,
+0x4d, 0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x20,
+0x646, 0x686, 0x6cc, 0x20, 0x6cc, 0x6cc, 0x644, 0x20, 0x64, 0x20, 0x646, 0x686,
+0x6cc, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x64, 0x64, 0x64, 0x20,
+0x6a9, 0x648, 0x646, 0x6cc, 0x79, 0x79, 0x79, 0x79, 0x20, 0x4d, 0x4d, 0x4d,
+0x4d, 0x27, 0x61, 0x27, 0x20, 0x27, 0x64, 0x27, 0x2e, 0x20, 0x64, 0x27,
+0x69, 0x64, 0x27, 0x64, 0x64, 0x64, 0x64, 0x1365, 0x20, 0x64, 0x64, 0x20,
+0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x130b, 0x120b, 0x1233, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d,
+0x2c, 0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20,
+0x64, 0x5d8, 0x5df, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d,
+0x20, 0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x64,
+0x20, 0x27, 0x6e, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20,
+0x79, 0x79, 0x79, 0x79, 0x64, 0x64, 0x64, 0x64, 0x20, 0x64, 0x20, 0x4d,
+0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x6f, 0x27, 0x20, 0x79, 0x79, 0x79,
+0x79, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20,
+0x64, 0x20, 0x79, 0x79, 0x79, 0x79, 0x4d, 0x2f, 0x64, 0x2f, 0x79, 0x79,
+0x79, 0x79
};
-static const char16_t time_format_data[] = {
-0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x41, 0x50,
-0x20, 0x74, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x41, 0x50, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x41, 0x50, 0x2c,
-0x20, 0x74, 0x41, 0x50, 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x74, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a,
-0x73, 0x73, 0x20, 0x28, 0x74, 0x29, 0xf46, 0xf74, 0xf0b, 0xf5a, 0xf7c, 0xf51, 0xf0b, 0x20, 0x68, 0x20, 0xf66, 0xf90, 0xf62, 0xf0b,
-0xf58, 0xf0b, 0x20, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x41, 0x50, 0x20, 0x74, 0xf46, 0xf74, 0xf0b, 0xf5a, 0xf7c, 0xf51, 0xf0b,
-0x20, 0x68, 0x20, 0xf66, 0xf90, 0xf62, 0xf0b, 0xf58, 0xf0b, 0x20, 0x6d, 0x6d, 0x20, 0x41, 0x50, 0x74, 0x20, 0x48, 0x48, 0x3a,
-0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x42, 0x20, 0x48, 0x3a, 0x6d, 0x6d, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x2c,
-0x20, 0x74, 0x74, 0x20, 0x41, 0x50, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x41, 0x50, 0x68, 0x3a, 0x6d, 0x6d, 0x3a,
-0x73, 0x73, 0x20, 0x5b, 0x74, 0x5d, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x74, 0x48, 0x2e, 0x6d, 0x6d,
-0x2e, 0x73, 0x73, 0x20, 0x74, 0x48, 0x2d, 0x27, 0x61, 0x27, 0x20, 0x27, 0x68, 0x6f, 0x72, 0x6f, 0x27, 0x20, 0x27, 0x6b,
-0x61, 0x6a, 0x27, 0x20, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x48, 0x20, 0x27, 0x68, 0x27, 0x20, 0x6d, 0x6d, 0x20, 0x27,
-0x6d, 0x69, 0x6e, 0x27, 0x20, 0x73, 0x73, 0x20, 0x27, 0x73, 0x27, 0x20, 0x74, 0x48, 0x48, 0x20, 0x27, 0x68, 0x27, 0x20,
-0x6d, 0x6d, 0x20, 0x27, 0x6d, 0x69, 0x6e, 0x27, 0x20, 0x73, 0x73, 0x20, 0x27, 0x73, 0x27, 0x20, 0x74, 0x48, 0x48, 0x2e,
-0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x27, 0x68, 0x27, 0x20, 0x74, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20,
-0x41, 0x50, 0x20, 0x74, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x41, 0x50, 0x48, 0x6642, 0x6d, 0x6d, 0x5206, 0x73, 0x73, 0x79d2,
-0x20, 0x74, 0x41, 0x50, 0x20, 0x68, 0xc2dc, 0x20, 0x6d, 0xbd84, 0x20, 0x73, 0xcd08, 0x20, 0x74, 0x41, 0x50, 0x20, 0x68, 0x3a,
-0x6d, 0x6d, 0x48, 0x20, 0xec2, 0xea1, 0xe87, 0x20, 0x6d, 0x20, 0xe99, 0xeb2, 0xe97, 0xeb5, 0x20, 0x73, 0x73, 0x20, 0xea7, 0xeb4,
-0xe99, 0xeb2, 0xe97, 0xeb5, 0x20, 0x74, 0x27, 0x6b, 0x6c, 0x27, 0x2e, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73,
-0x20, 0x74, 0x41, 0x50, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x48, 0x20, 0xe19, 0xe32, 0xe2c, 0xe34,
-0xe01, 0xe32, 0x20, 0x6d, 0x6d, 0x20, 0xe19, 0xe32, 0xe17, 0xe35, 0x20, 0x73, 0x73, 0x20, 0xe27, 0xe34, 0xe19, 0xe32, 0xe17, 0xe35,
-0x20, 0x74, 0x41, 0x50, 0x20, 0x27, 0x67, 0x61, 0x27, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x27,
-0x4b, 0x6c, 0x6f, 0x63, 0x6b, 0x27, 0x20, 0x48, 0x2e, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x74, 0x29, 0x27, 0x4b,
-0x6c, 0x27, 0x2e, 0x20, 0x48, 0x2e, 0x6d, 0x6d, 0x74, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x41, 0x50,
-0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x27, 0x68, 0x6f, 0x64, 0x17a, 0x27, 0x2e
+static constexpr char16_t time_format_data[] = {
+0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x48, 0x48,
+0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x74, 0x74, 0x74, 0x68,
+0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x202f, 0x41, 0x70, 0x20, 0x74, 0x74,
+0x74, 0x74, 0x68, 0x3a, 0x6d, 0x6d, 0x202f, 0x41, 0x70, 0x68, 0x3a, 0x6d,
+0x6d, 0x3a, 0x73, 0x73, 0x202f, 0x41, 0x70, 0x2c, 0x20, 0x74, 0x74, 0x74,
+0x74, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x41, 0x70, 0x20,
+0x74, 0x74, 0x74, 0x74, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x41, 0x70, 0x41,
+0x70, 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x74, 0x74,
+0x74, 0x74, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28,
+0x74, 0x74, 0x74, 0x74, 0x29, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73,
+0x73, 0x2c, 0x20, 0x74, 0x74, 0x74, 0x74, 0x41, 0x70, 0x20, 0x68, 0x3a,
+0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x74, 0x74, 0x74, 0x41, 0x70,
+0x20, 0x928, 0x93f, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x48, 0x3a, 0x6d, 0x6d,
+0x3a, 0x73, 0x73, 0x20, 0x27, 0x447, 0x27, 0x2e, 0x20, 0x74, 0x74, 0x74,
+0x74, 0x74, 0x74, 0x74, 0x74, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a,
+0x73, 0x73, 0x41, 0x70, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20,
+0x5b, 0x74, 0x74, 0x74, 0x74, 0x5d, 0x74, 0x74, 0x74, 0x74, 0x20, 0x41,
+0x70, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x48, 0x48, 0x2e, 0x6d,
+0x6d, 0x2e, 0x73, 0x73, 0x20, 0x74, 0x74, 0x74, 0x74, 0xf46, 0xf74, 0xf0b,
+0xf5a, 0xf7c, 0xf51, 0xf0b, 0x20, 0x68, 0x20, 0xf66, 0xf90, 0xf62, 0xf0b, 0xf58,
+0xf0b, 0x20, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x41, 0x70, 0x20, 0x74,
+0x74, 0x74, 0x74, 0xf46, 0xf74, 0xf0b, 0xf5a, 0xf7c, 0xf51, 0xf0b, 0x20, 0x68,
+0x20, 0xf66, 0xf90, 0xf62, 0xf0b, 0xf58, 0xf0b, 0x20, 0x6d, 0x6d, 0x20, 0x41,
+0x70, 0x41, 0x70, 0x20, 0x27, 0x67, 0x61, 0x27, 0x20, 0x68, 0x3a, 0x6d,
+0x6d, 0x3a, 0x73, 0x73, 0x20, 0x74, 0x74, 0x74, 0x74, 0x48, 0x20, 0x27,
+0x68, 0x27, 0x20, 0x6d, 0x6d, 0x20, 0x27, 0x6d, 0x69, 0x6e, 0x27, 0x20,
+0x73, 0x73, 0x20, 0x27, 0x73, 0x27, 0x20, 0x74, 0x74, 0x74, 0x74, 0x48,
+0x48, 0x20, 0x27, 0x68, 0x27, 0x20, 0x6d, 0x6d, 0x20, 0x27, 0x6d, 0x69,
+0x6e, 0x27, 0x20, 0x73, 0x73, 0x20, 0x27, 0x73, 0x27, 0x20, 0x74, 0x74,
+0x74, 0x74, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x27,
+0x68, 0x27, 0x20, 0x74, 0x74, 0x74, 0x74, 0x68, 0x68, 0x3a, 0x6d, 0x6d,
+0x3a, 0x73, 0x73, 0x20, 0x41, 0x70, 0x20, 0x74, 0x74, 0x74, 0x74, 0x68,
+0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x41, 0x70, 0x48, 0x6642, 0x6d, 0x6d, 0x5206,
+0x73, 0x73, 0x79d2, 0x20, 0x74, 0x74, 0x74, 0x74, 0x41, 0x70, 0x20, 0x68,
+0xc2dc, 0x20, 0x6d, 0xbd84, 0x20, 0x73, 0xcd08, 0x20, 0x74, 0x74, 0x74, 0x74,
+0x48, 0x20, 0xec2, 0xea1, 0xe87, 0x20, 0x6d, 0x20, 0xe99, 0xeb2, 0xe97, 0xeb5,
+0x20, 0x73, 0x73, 0x20, 0xea7, 0xeb4, 0xe99, 0xeb2, 0xe97, 0xeb5, 0x20, 0x74,
+0x74, 0x74, 0x74, 0x27, 0x4b, 0x6c, 0x6f, 0x63, 0x6b, 0x27, 0x20, 0x48,
+0x2e, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x74, 0x74, 0x74, 0x74,
+0x29, 0x27, 0x4b, 0x6c, 0x27, 0x2e, 0x20, 0x48, 0x2e, 0x6d, 0x6d, 0x68,
+0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x41, 0x70, 0x20, 0x74, 0x74,
+0x74, 0x74, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x20, 0x41, 0x70, 0x27, 0x6b,
+0x6c, 0x27, 0x2e, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73,
+0x20, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x20, 0x68, 0x3a,
+0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x202f, 0x41, 0x70, 0x48, 0x27, 0x68, 0x27,
+0x6d, 0x6d, 0x48, 0x20, 0xe19, 0xe32, 0xe2c, 0xe34, 0xe01, 0xe32, 0x20, 0x6d,
+0x6d, 0x20, 0xe19, 0xe32, 0xe17, 0xe35, 0x20, 0x73, 0x73, 0x20, 0xe27, 0xe34,
+0xe19, 0xe32, 0xe17, 0xe35, 0x20, 0x74, 0x74, 0x74, 0x74, 0x68, 0x68, 0x3a,
+0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x202f, 0x41, 0x70, 0x20, 0x74, 0x74, 0x74,
+0x74, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x202f, 0x41, 0x70, 0x48, 0x3a, 0x6d,
+0x6d, 0x20, 0x27, 0x68, 0x6f, 0x64, 0x17a, 0x27, 0x2e
};
-static const char16_t days_data[] = {
-0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x3b, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x3b, 0x54, 0x75, 0x65, 0x73, 0x64, 0x61,
-0x79, 0x3b, 0x57, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, 0x61, 0x79, 0x3b, 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79,
-0x3b, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x3b, 0x53, 0x61, 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x53, 0x75, 0x6e, 0x3b,
-0x4d, 0x6f, 0x6e, 0x3b, 0x54, 0x75, 0x65, 0x3b, 0x57, 0x65, 0x64, 0x3b, 0x54, 0x68, 0x75, 0x3b, 0x46, 0x72, 0x69, 0x3b,
-0x53, 0x61, 0x74, 0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x57, 0x3b, 0x54, 0x3b, 0x46, 0x3b, 0x53, 0x37, 0x3b, 0x31, 0x3b,
-0x32, 0x3b, 0x33, 0x3b, 0x34, 0x3b, 0x35, 0x3b, 0x36, 0x44, 0x69, 0x6c, 0x62, 0x61, 0x74, 0x61, 0x3b, 0x57, 0x69, 0x69,
-0x78, 0x61, 0x74, 0x61, 0x3b, 0x51, 0x69, 0x62, 0x78, 0x61, 0x74, 0x61, 0x3b, 0x52, 0x6f, 0x6f, 0x62, 0x69, 0x69, 0x3b,
-0x4b, 0x61, 0x6d, 0x69, 0x69, 0x73, 0x61, 0x3b, 0x4a, 0x69, 0x6d, 0x61, 0x61, 0x74, 0x61, 0x3b, 0x53, 0x61, 0x6e, 0x62,
-0x61, 0x74, 0x61, 0x44, 0x69, 0x6c, 0x3b, 0x57, 0x69, 0x78, 0x3b, 0x51, 0x69, 0x62, 0x3b, 0x52, 0x6f, 0x62, 0x3b, 0x4b,
-0x61, 0x6d, 0x3b, 0x4a, 0x69, 0x6d, 0x3b, 0x53, 0x61, 0x6e, 0x44, 0x3b, 0x57, 0x3b, 0x51, 0x3b, 0x52, 0x3b, 0x4b, 0x3b,
-0x4a, 0x3b, 0x53, 0x53, 0x6f, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x4d, 0x61, 0x61, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x44, 0x69,
-0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x57, 0x6f, 0x65, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x44, 0x6f, 0x6e, 0x64, 0x65,
-0x72, 0x64, 0x61, 0x67, 0x3b, 0x56, 0x72, 0x79, 0x64, 0x61, 0x67, 0x3b, 0x53, 0x61, 0x74, 0x65, 0x72, 0x64, 0x61, 0x67,
-0x53, 0x6f, 0x2e, 0x3b, 0x4d, 0x61, 0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b, 0x57, 0x6f, 0x2e, 0x3b, 0x44, 0x6f, 0x2e, 0x3b,
-0x56, 0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x53, 0x3b, 0x4d, 0x3b, 0x44, 0x3b, 0x57, 0x3b, 0x44, 0x3b, 0x56, 0x3b, 0x53,
-0x65, 0x20, 0x64, 0x69, 0x65, 0x6c, 0x3b, 0x65, 0x20, 0x68, 0xeb, 0x6e, 0xeb, 0x3b, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x74,
-0xeb, 0x3b, 0x65, 0x20, 0x6d, 0xeb, 0x72, 0x6b, 0x75, 0x72, 0xeb, 0x3b, 0x65, 0x20, 0x65, 0x6e, 0x6a, 0x74, 0x65, 0x3b,
-0x65, 0x20, 0x70, 0x72, 0x65, 0x6d, 0x74, 0x65, 0x3b, 0x65, 0x20, 0x73, 0x68, 0x74, 0x75, 0x6e, 0xeb, 0x64, 0x69, 0x65,
-0x3b, 0x68, 0xeb, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d, 0xeb, 0x72, 0x3b, 0x65, 0x6e, 0x6a, 0x3b, 0x70, 0x72, 0x65,
-0x3b, 0x73, 0x68, 0x74, 0x44, 0x69, 0x65, 0x3b, 0x48, 0xeb, 0x6e, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x4d, 0xeb, 0x72, 0x3b,
-0x45, 0x6e, 0x6a, 0x3b, 0x50, 0x72, 0x65, 0x3b, 0x53, 0x68, 0x74, 0x64, 0x3b, 0x68, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x65,
-0x3b, 0x70, 0x3b, 0x73, 0x68, 0x12a5, 0x1211, 0x12f5, 0x3b, 0x1230, 0x129e, 0x3b, 0x121b, 0x12ad, 0x1230, 0x129e, 0x3b, 0x1228, 0x1261, 0x12d5,
-0x3b, 0x1210, 0x1219, 0x1235, 0x3b, 0x12d3, 0x122d, 0x1265, 0x3b, 0x1245, 0x12f3, 0x121c, 0x12a5, 0x1211, 0x12f5, 0x3b, 0x1230, 0x129e, 0x3b, 0x121b,
-0x12ad, 0x1230, 0x3b, 0x1228, 0x1261, 0x12d5, 0x3b, 0x1210, 0x1219, 0x1235, 0x3b, 0x12d3, 0x122d, 0x1265, 0x3b, 0x1245, 0x12f3, 0x121c, 0x12a5, 0x3b,
-0x1230, 0x3b, 0x121b, 0x3b, 0x1228, 0x3b, 0x1210, 0x3b, 0x12d3, 0x3b, 0x1245, 0x627, 0x644, 0x623, 0x62d, 0x62f, 0x3b, 0x627, 0x644, 0x627,
-0x62b, 0x646, 0x64a, 0x646, 0x3b, 0x627, 0x644, 0x62b, 0x644, 0x627, 0x62b, 0x627, 0x621, 0x3b, 0x627, 0x644, 0x623, 0x631, 0x628, 0x639,
-0x627, 0x621, 0x3b, 0x627, 0x644, 0x62e, 0x645, 0x64a, 0x633, 0x3b, 0x627, 0x644, 0x62c, 0x645, 0x639, 0x629, 0x3b, 0x627, 0x644, 0x633,
-0x628, 0x62a, 0x62d, 0x3b, 0x646, 0x3b, 0x62b, 0x3b, 0x631, 0x3b, 0x62e, 0x3b, 0x62c, 0x3b, 0x633, 0x56f, 0x56b, 0x580, 0x561, 0x56f,
-0x56b, 0x3b, 0x565, 0x580, 0x56f, 0x578, 0x582, 0x577, 0x561, 0x562, 0x569, 0x56b, 0x3b, 0x565, 0x580, 0x565, 0x584, 0x577, 0x561, 0x562,
-0x569, 0x56b, 0x3b, 0x579, 0x578, 0x580, 0x565, 0x584, 0x577, 0x561, 0x562, 0x569, 0x56b, 0x3b, 0x570, 0x56b, 0x576, 0x563, 0x577, 0x561,
-0x562, 0x569, 0x56b, 0x3b, 0x578, 0x582, 0x580, 0x562, 0x561, 0x569, 0x3b, 0x577, 0x561, 0x562, 0x561, 0x569, 0x56f, 0x56b, 0x580, 0x3b,
-0x565, 0x580, 0x56f, 0x3b, 0x565, 0x580, 0x584, 0x3b, 0x579, 0x580, 0x584, 0x3b, 0x570, 0x576, 0x563, 0x3b, 0x578, 0x582, 0x580, 0x3b,
-0x577, 0x562, 0x569, 0x53f, 0x3b, 0x535, 0x3b, 0x535, 0x3b, 0x549, 0x3b, 0x540, 0x3b, 0x548, 0x3b, 0x547, 0x9a6, 0x9c7, 0x993, 0x9ac,
-0x9be, 0x9f0, 0x3b, 0x9b8, 0x9cb, 0x9ae, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9ae, 0x999, 0x9cd, 0x997, 0x9b2, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9ac,
-0x9c1, 0x9a7, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9ac, 0x9c3, 0x9b9, 0x9b8, 0x9cd, 0x9aa, 0x9a4, 0x9bf, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9b6, 0x9c1,
-0x995, 0x9cd, 0x9f0, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9b6, 0x9a8, 0x9bf, 0x9ac, 0x9be, 0x9f0, 0x9a6, 0x9c7, 0x993, 0x3b, 0x9b8, 0x9cb, 0x9ae,
-0x3b, 0x9ae, 0x999, 0x9cd, 0x997, 0x9b2, 0x3b, 0x9ac, 0x9c1, 0x9a7, 0x3b, 0x9ac, 0x9c3, 0x9b9, 0x3b, 0x9b6, 0x9c1, 0x995, 0x9cd, 0x9f0,
-0x3b, 0x9b6, 0x9a8, 0x9bf, 0x9a6, 0x3b, 0x9b8, 0x3b, 0x9ae, 0x3b, 0x9ac, 0x3b, 0x9ac, 0x3b, 0x9b6, 0x3b, 0x9b6, 0x62, 0x61, 0x7a,
-0x61, 0x72, 0x3b, 0x62, 0x61, 0x7a, 0x61, 0x72, 0x20, 0x65, 0x72, 0x74, 0x259, 0x73, 0x69, 0x3b, 0xe7, 0x259, 0x72, 0x15f,
-0x259, 0x6e, 0x62, 0x259, 0x20, 0x61, 0x78, 0x15f, 0x61, 0x6d, 0x131, 0x3b, 0xe7, 0x259, 0x72, 0x15f, 0x259, 0x6e, 0x62, 0x259,
-0x3b, 0x63, 0xfc, 0x6d, 0x259, 0x20, 0x61, 0x78, 0x15f, 0x61, 0x6d, 0x131, 0x3b, 0x63, 0xfc, 0x6d, 0x259, 0x3b, 0x15f, 0x259,
-0x6e, 0x62, 0x259, 0x42, 0x2e, 0x3b, 0x42, 0x2e, 0x45, 0x2e, 0x3b, 0xc7, 0x2e, 0x41, 0x2e, 0x3b, 0xc7, 0x2e, 0x3b, 0x43,
-0x2e, 0x41, 0x2e, 0x3b, 0x43, 0x2e, 0x3b, 0x15e, 0x2e, 0x42, 0x2e, 0x3b, 0x42, 0x2e, 0x65, 0x2e, 0x3b, 0xc7, 0x2e, 0x61,
-0x2e, 0x3b, 0xc7, 0x2e, 0x3b, 0x43, 0x2e, 0x61, 0x2e, 0x3b, 0x43, 0x2e, 0x3b, 0x15e, 0x2e, 0x431, 0x430, 0x437, 0x430, 0x440,
-0x3b, 0x431, 0x430, 0x437, 0x430, 0x440, 0x20, 0x435, 0x440, 0x442, 0x4d9, 0x441, 0x438, 0x3b, 0x447, 0x4d9, 0x440, 0x448, 0x4d9, 0x43d,
-0x431, 0x4d9, 0x20, 0x430, 0x445, 0x448, 0x430, 0x43c, 0x44b, 0x3b, 0x447, 0x4d9, 0x440, 0x448, 0x4d9, 0x43d, 0x431, 0x4d9, 0x3b, 0x4b9,
-0x4af, 0x43c, 0x4d9, 0x20, 0x430, 0x445, 0x448, 0x430, 0x43c, 0x44b, 0x3b, 0x4b9, 0x4af, 0x43c, 0x4d9, 0x3b, 0x448, 0x4d9, 0x43d, 0x431,
-0x4d9, 0x411, 0x2e, 0x3b, 0x411, 0x2e, 0x415, 0x2e, 0x3b, 0x427, 0x2e, 0x410, 0x2e, 0x3b, 0x427, 0x2e, 0x3b, 0x4b8, 0x2e, 0x410,
-0x2e, 0x3b, 0x4b8, 0x2e, 0x3b, 0x428, 0x2e, 0x69, 0x67, 0x61, 0x6e, 0x64, 0x65, 0x61, 0x3b, 0x61, 0x73, 0x74, 0x65, 0x6c,
-0x65, 0x68, 0x65, 0x6e, 0x61, 0x3b, 0x61, 0x73, 0x74, 0x65, 0x61, 0x72, 0x74, 0x65, 0x61, 0x3b, 0x61, 0x73, 0x74, 0x65,
-0x61, 0x7a, 0x6b, 0x65, 0x6e, 0x61, 0x3b, 0x6f, 0x73, 0x74, 0x65, 0x67, 0x75, 0x6e, 0x61, 0x3b, 0x6f, 0x73, 0x74, 0x69,
-0x72, 0x61, 0x6c, 0x61, 0x3b, 0x6c, 0x61, 0x72, 0x75, 0x6e, 0x62, 0x61, 0x74, 0x61, 0x69, 0x67, 0x2e, 0x3b, 0x61, 0x6c,
-0x2e, 0x3b, 0x61, 0x72, 0x2e, 0x3b, 0x61, 0x7a, 0x2e, 0x3b, 0x6f, 0x67, 0x2e, 0x3b, 0x6f, 0x72, 0x2e, 0x3b, 0x6c, 0x72,
-0x2e, 0x49, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x4f, 0x3b, 0x4f, 0x3b, 0x4c, 0x9b0, 0x9ac, 0x9bf, 0x9ac, 0x9be, 0x9b0,
-0x3b, 0x9b8, 0x9cb, 0x9ae, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9ae, 0x999, 0x9cd, 0x997, 0x9b2, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9ac, 0x9c1, 0x9a7,
-0x9ac, 0x9be, 0x9b0, 0x3b, 0x9ac, 0x9c3, 0x9b9, 0x9b8, 0x9cd, 0x9aa, 0x9a4, 0x9bf, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9b6, 0x9c1, 0x995, 0x9cd,
-0x9b0, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9b6, 0x9a8, 0x9bf, 0x9ac, 0x9be, 0x9b0, 0x9b0, 0x9ac, 0x9bf, 0x3b, 0x9b8, 0x9cb, 0x9ae, 0x3b, 0x9ae,
-0x999, 0x9cd, 0x997, 0x9b2, 0x3b, 0x9ac, 0x9c1, 0x9a7, 0x3b, 0x9ac, 0x9c3, 0x9b9, 0x9b8, 0x9cd, 0x9aa, 0x9a4, 0x9bf, 0x3b, 0x9b6, 0x9c1,
-0x995, 0x9cd, 0x9b0, 0x3b, 0x9b6, 0x9a8, 0x9bf, 0x9b0, 0x3b, 0x9b8, 0x9cb, 0x3b, 0x9ae, 0x3b, 0x9ac, 0x9c1, 0x3b, 0x9ac, 0x9c3, 0x3b,
-0x9b6, 0x9c1, 0x3b, 0x9b6, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf5f, 0xfb3, 0xf0b, 0xf56, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf58, 0xf72,
-0xf42, 0xf0b, 0xf51, 0xf58, 0xf62, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf63, 0xfb7, 0xf42, 0xf0b, 0xf54, 0xf0b, 0x3b, 0xf42, 0xf5f,
-0xf60, 0xf0b, 0xf55, 0xf74, 0xf62, 0xf0b, 0xf56, 0xf74, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf54, 0xf0b, 0xf66, 0xf44, 0xf66, 0xf0b,
-0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0xf0b, 0xf54, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf49, 0xf72, 0xf0b,
-0xf58, 0xf0b, 0xf5f, 0xfb3, 0xf0b, 0x3b, 0xf58, 0xf72, 0xf62, 0xf0b, 0x3b, 0xf63, 0xfb7, 0xf42, 0xf0b, 0x3b, 0xf55, 0xf74, 0xf62, 0xf0b,
-0x3b, 0xf66, 0xf44, 0xf66, 0xf0b, 0x3b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0xf0b, 0x3b, 0xf49, 0xf72, 0xf0b, 0xf5f, 0xfb3, 0x3b, 0xf58, 0xf72,
-0xf62, 0x3b, 0xf63, 0xfb7, 0xf42, 0x3b, 0xf55, 0xf74, 0xf62, 0x3b, 0xf66, 0xf44, 0xfb6, 0x3b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0x3b, 0xf49,
-0xf72, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x65, 0x75, 0x72, 0x7a, 0x68, 0x3b, 0x4d, 0x65, 0x72, 0x63,
-0x2bc, 0x68, 0x65, 0x72, 0x3b, 0x59, 0x61, 0x6f, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x6e, 0x65, 0x72, 0x3b, 0x53, 0x61, 0x64,
-0x6f, 0x72, 0x6e, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x65, 0x75, 0x2e, 0x3b, 0x4d, 0x65, 0x72, 0x2e,
-0x3b, 0x59, 0x61, 0x6f, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x2e, 0x3b, 0x53, 0x61, 0x64, 0x2e, 0x53, 0x75, 0x3b, 0x4c, 0x3b,
-0x4d, 0x7a, 0x3b, 0x4d, 0x63, 0x3b, 0x59, 0x3b, 0x47, 0x3b, 0x53, 0x61, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x44f, 0x3b, 0x43f,
-0x43e, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x43d, 0x438, 0x43a, 0x3b, 0x432, 0x442, 0x43e, 0x440, 0x43d, 0x438, 0x43a, 0x3b, 0x441, 0x440,
-0x44f, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x44a, 0x440, 0x442, 0x44a, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x44a, 0x43a, 0x3b,
-0x441, 0x44a, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x434, 0x3b, 0x43f, 0x43d, 0x3b, 0x432, 0x442, 0x3b, 0x441, 0x440, 0x3b, 0x447, 0x442,
-0x3b, 0x43f, 0x442, 0x3b, 0x441, 0x431, 0x43d, 0x3b, 0x43f, 0x3b, 0x432, 0x3b, 0x441, 0x3b, 0x447, 0x3b, 0x43f, 0x3b, 0x441, 0x1010,
-0x1014, 0x1004, 0x103a, 0x1039, 0x1002, 0x1014, 0x103d, 0x1031, 0x3b, 0x1010, 0x1014, 0x1004, 0x103a, 0x1039, 0x101c, 0x102c, 0x3b, 0x1021, 0x1004, 0x103a,
-0x1039, 0x1002, 0x102b, 0x3b, 0x1017, 0x102f, 0x1012, 0x1039, 0x1013, 0x101f, 0x1030, 0x1038, 0x3b, 0x1000, 0x103c, 0x102c, 0x101e, 0x1015, 0x1010, 0x1031,
-0x1038, 0x3b, 0x101e, 0x1031, 0x102c, 0x1000, 0x103c, 0x102c, 0x3b, 0x1005, 0x1014, 0x1031, 0x1010, 0x3b, 0x1010, 0x3b, 0x1021, 0x3b, 0x1017, 0x3b,
-0x1000, 0x3b, 0x101e, 0x3b, 0x1005, 0x43d, 0x44f, 0x434, 0x437, 0x435, 0x43b, 0x44f, 0x3b, 0x43f, 0x430, 0x43d, 0x44f, 0x434, 0x437, 0x435,
-0x43b, 0x430, 0x43a, 0x3b, 0x430, 0x45e, 0x442, 0x43e, 0x440, 0x430, 0x43a, 0x3b, 0x441, 0x435, 0x440, 0x430, 0x434, 0x430, 0x3b, 0x447,
-0x430, 0x446, 0x432, 0x435, 0x440, 0x3b, 0x43f, 0x44f, 0x442, 0x43d, 0x456, 0x446, 0x430, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430,
-0x43d, 0x434, 0x3b, 0x43f, 0x43d, 0x3b, 0x430, 0x45e, 0x3b, 0x441, 0x440, 0x3b, 0x447, 0x446, 0x3b, 0x43f, 0x442, 0x3b, 0x441, 0x431,
-0x43d, 0x3b, 0x43f, 0x3b, 0x430, 0x3b, 0x441, 0x3b, 0x447, 0x3b, 0x43f, 0x3b, 0x441, 0x17a2, 0x17b6, 0x1791, 0x17b7, 0x178f, 0x17d2, 0x1799,
-0x3b, 0x1785, 0x1793, 0x17d2, 0x1791, 0x3b, 0x17a2, 0x1784, 0x17d2, 0x1782, 0x17b6, 0x179a, 0x3b, 0x1796, 0x17bb, 0x1792, 0x3b, 0x1796, 0x17d2, 0x179a,
-0x17a0, 0x179f, 0x17d2, 0x1794, 0x178f, 0x17b7, 0x17cd, 0x3b, 0x179f, 0x17bb, 0x1780, 0x17d2, 0x179a, 0x3b, 0x179f, 0x17c5, 0x179a, 0x17cd, 0x17a2, 0x17b6,
-0x1791, 0x17b7, 0x178f, 0x17d2, 0x1799, 0x3b, 0x1785, 0x17d0, 0x1793, 0x17d2, 0x1791, 0x3b, 0x17a2, 0x1784, 0x17d2, 0x1782, 0x17b6, 0x179a, 0x3b, 0x1796,
-0x17bb, 0x1792, 0x3b, 0x1796, 0x17d2, 0x179a, 0x17a0, 0x179f, 0x17d2, 0x1794, 0x178f, 0x17b7, 0x17cd, 0x3b, 0x179f, 0x17bb, 0x1780, 0x17d2, 0x179a, 0x3b,
-0x179f, 0x17c5, 0x179a, 0x17cd, 0x17a2, 0x17b6, 0x1791, 0x17b7, 0x178f, 0x17d2, 0x1799, 0x3b, 0x1785, 0x1793, 0x17d2, 0x1791, 0x3b, 0x17a2, 0x1784, 0x17d2,
-0x1782, 0x17b6, 0x179a, 0x3b, 0x1796, 0x17bb, 0x1792, 0x3b, 0x1796, 0x17d2, 0x179a, 0x17a0, 0x3b, 0x179f, 0x17bb, 0x1780, 0x17d2, 0x179a, 0x3b, 0x179f,
-0x17c5, 0x179a, 0x17cd, 0x17a2, 0x3b, 0x1785, 0x3b, 0x17a2, 0x3b, 0x1796, 0x3b, 0x1796, 0x3b, 0x179f, 0x3b, 0x179f, 0x64, 0x69, 0x75, 0x6d,
-0x65, 0x6e, 0x67, 0x65, 0x3b, 0x64, 0x69, 0x6c, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x64, 0x69, 0x6d, 0x61, 0x72, 0x74, 0x73,
-0x3b, 0x64, 0x69, 0x6d, 0x65, 0x63, 0x72, 0x65, 0x73, 0x3b, 0x64, 0x69, 0x6a, 0x6f, 0x75, 0x73, 0x3b, 0x64, 0x69, 0x76,
-0x65, 0x6e, 0x64, 0x72, 0x65, 0x73, 0x3b, 0x64, 0x69, 0x73, 0x73, 0x61, 0x62, 0x74, 0x65, 0x64, 0x67, 0x2e, 0x3b, 0x64,
-0x6c, 0x2e, 0x3b, 0x64, 0x74, 0x2e, 0x3b, 0x64, 0x63, 0x2e, 0x3b, 0x64, 0x6a, 0x2e, 0x3b, 0x64, 0x76, 0x2e, 0x3b, 0x64,
-0x73, 0x2e, 0x64, 0x67, 0x3b, 0x64, 0x6c, 0x3b, 0x64, 0x74, 0x3b, 0x64, 0x63, 0x3b, 0x64, 0x6a, 0x3b, 0x64, 0x76, 0x3b,
-0x64, 0x73, 0x661f, 0x671f, 0x65e5, 0x3b, 0x661f, 0x671f, 0x4e00, 0x3b, 0x661f, 0x671f, 0x4e8c, 0x3b, 0x661f, 0x671f, 0x4e09, 0x3b, 0x661f, 0x671f,
-0x56db, 0x3b, 0x661f, 0x671f, 0x4e94, 0x3b, 0x661f, 0x671f, 0x516d, 0x5468, 0x65e5, 0x3b, 0x5468, 0x4e00, 0x3b, 0x5468, 0x4e8c, 0x3b, 0x5468, 0x4e09,
-0x3b, 0x5468, 0x56db, 0x3b, 0x5468, 0x4e94, 0x3b, 0x5468, 0x516d, 0x65e5, 0x3b, 0x4e00, 0x3b, 0x4e8c, 0x3b, 0x4e09, 0x3b, 0x56db, 0x3b, 0x4e94,
-0x3b, 0x516d, 0x9031, 0x65e5, 0x3b, 0x9031, 0x4e00, 0x3b, 0x9031, 0x4e8c, 0x3b, 0x9031, 0x4e09, 0x3b, 0x9031, 0x56db, 0x3b, 0x9031, 0x4e94, 0x3b,
-0x9031, 0x516d, 0x6e, 0x65, 0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x6a, 0x65, 0x6c, 0x6a,
-0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x61, 0x6b, 0x3b, 0x73, 0x72, 0x69, 0x6a, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65,
-0x74, 0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b, 0x3b, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x6e,
-0x65, 0x64, 0x3b, 0x70, 0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x6f, 0x3b, 0x73, 0x72, 0x69, 0x3b, 0x10d, 0x65, 0x74, 0x3b, 0x70,
-0x65, 0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e, 0x3b, 0x70, 0x3b, 0x75, 0x3b, 0x73, 0x3b, 0x10d, 0x3b, 0x70, 0x3b, 0x73, 0x4e,
-0x3b, 0x50, 0x3b, 0x55, 0x3b, 0x53, 0x3b, 0x10c, 0x3b, 0x50, 0x3b, 0x53, 0x6e, 0x65, 0x64, 0x11b, 0x6c, 0x65, 0x3b, 0x70,
-0x6f, 0x6e, 0x64, 0x11b, 0x6c, 0xed, 0x3b, 0xfa, 0x74, 0x65, 0x72, 0xfd, 0x3b, 0x73, 0x74, 0x159, 0x65, 0x64, 0x61, 0x3b,
-0x10d, 0x74, 0x76, 0x72, 0x74, 0x65, 0x6b, 0x3b, 0x70, 0xe1, 0x74, 0x65, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61,
-0x6e, 0x65, 0x3b, 0x70, 0x6f, 0x3b, 0xfa, 0x74, 0x3b, 0x73, 0x74, 0x3b, 0x10d, 0x74, 0x3b, 0x70, 0xe1, 0x3b, 0x73, 0x6f,
-0x4e, 0x3b, 0x50, 0x3b, 0xda, 0x3b, 0x53, 0x3b, 0x10c, 0x3b, 0x50, 0x3b, 0x53, 0x73, 0xf8, 0x6e, 0x64, 0x61, 0x67, 0x3b,
-0x6d, 0x61, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x69, 0x72, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x6f, 0x6e, 0x73, 0x64, 0x61,
-0x67, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x66, 0x72, 0x65, 0x64, 0x61, 0x67, 0x3b, 0x6c, 0xf8, 0x72,
-0x64, 0x61, 0x67, 0x73, 0xf8, 0x6e, 0x3b, 0x6d, 0x61, 0x6e, 0x3b, 0x74, 0x69, 0x72, 0x3b, 0x6f, 0x6e, 0x73, 0x3b, 0x74,
-0x6f, 0x72, 0x3b, 0x66, 0x72, 0x65, 0x3b, 0x6c, 0xf8, 0x72, 0x73, 0xf8, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x6e, 0x2e, 0x3b,
-0x74, 0x69, 0x72, 0x2e, 0x3b, 0x6f, 0x6e, 0x73, 0x2e, 0x3b, 0x74, 0x6f, 0x72, 0x2e, 0x3b, 0x66, 0x72, 0x65, 0x2e, 0x3b,
-0x6c, 0xf8, 0x72, 0x2e, 0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x4f, 0x3b, 0x54, 0x3b, 0x46, 0x3b, 0x4c, 0x7a, 0x6f, 0x6e,
-0x64, 0x61, 0x67, 0x3b, 0x6d, 0x61, 0x61, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x64, 0x69, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b,
-0x77, 0x6f, 0x65, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x64, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x64, 0x61, 0x67, 0x3b, 0x76,
-0x72, 0x69, 0x6a, 0x64, 0x61, 0x67, 0x3b, 0x7a, 0x61, 0x74, 0x65, 0x72, 0x64, 0x61, 0x67, 0x7a, 0x6f, 0x3b, 0x6d, 0x61,
-0x3b, 0x64, 0x69, 0x3b, 0x77, 0x6f, 0x3b, 0x64, 0x6f, 0x3b, 0x76, 0x72, 0x3b, 0x7a, 0x61, 0x5a, 0x3b, 0x4d, 0x3b, 0x44,
-0x3b, 0x57, 0x3b, 0x44, 0x3b, 0x56, 0x3b, 0x5a, 0x53, 0x75, 0x2e, 0x3b, 0x4d, 0x2e, 0x3b, 0x54, 0x75, 0x2e, 0x3b, 0x57,
-0x2e, 0x3b, 0x54, 0x68, 0x2e, 0x3b, 0x46, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x53, 0x75, 0x6e, 0x2e, 0x3b, 0x4d, 0x6f, 0x6e,
-0x2e, 0x3b, 0x54, 0x75, 0x65, 0x2e, 0x3b, 0x57, 0x65, 0x64, 0x2e, 0x3b, 0x54, 0x68, 0x75, 0x2e, 0x3b, 0x46, 0x72, 0x69,
-0x2e, 0x3b, 0x53, 0x61, 0x74, 0x2e, 0x64, 0x69, 0x6d, 0x61, 0x6e, 0x109, 0x6f, 0x3b, 0x6c, 0x75, 0x6e, 0x64, 0x6f, 0x3b,
-0x6d, 0x61, 0x72, 0x64, 0x6f, 0x3b, 0x6d, 0x65, 0x72, 0x6b, 0x72, 0x65, 0x64, 0x6f, 0x3b, 0x135, 0x61, 0x16d, 0x64, 0x6f,
-0x3b, 0x76, 0x65, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x6f, 0x3b, 0x73, 0x61, 0x62, 0x61, 0x74, 0x6f, 0x64, 0x69, 0x3b, 0x6c,
-0x75, 0x3b, 0x6d, 0x61, 0x3b, 0x6d, 0x65, 0x3b, 0x135, 0x61, 0x3b, 0x76, 0x65, 0x3b, 0x73, 0x61, 0x44, 0x3b, 0x4c, 0x3b,
-0x4d, 0x3b, 0x4d, 0x3b, 0x134, 0x3b, 0x56, 0x3b, 0x53, 0x70, 0xfc, 0x68, 0x61, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x65, 0x73,
-0x6d, 0x61, 0x73, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x74, 0x65, 0x69, 0x73, 0x69, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x6b, 0x6f,
-0x6c, 0x6d, 0x61, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x6e, 0x65, 0x6c, 0x6a, 0x61, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x72, 0x65,
-0x65, 0x64, 0x65, 0x3b, 0x6c, 0x61, 0x75, 0x70, 0xe4, 0x65, 0x76, 0x50, 0x3b, 0x45, 0x3b, 0x54, 0x3b, 0x4b, 0x3b, 0x4e,
-0x3b, 0x52, 0x3b, 0x4c, 0x73, 0x75, 0x6e, 0x6e, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6d, 0xe1, 0x6e, 0x61, 0x64,
-0x61, 0x67, 0x75, 0x72, 0x3b, 0x74, 0xfd, 0x73, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6d, 0x69, 0x6b, 0x75, 0x64, 0x61,
-0x67, 0x75, 0x72, 0x3b, 0x68, 0xf3, 0x73, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x66, 0x72, 0xed, 0x67, 0x67, 0x6a, 0x61,
-0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6c, 0x65, 0x79, 0x67, 0x61, 0x72, 0x64, 0x61, 0x67, 0x75, 0x72, 0x73, 0x75, 0x6e,
-0x3b, 0x6d, 0xe1, 0x6e, 0x3b, 0x74, 0xfd, 0x73, 0x3b, 0x6d, 0x69, 0x6b, 0x3b, 0x68, 0xf3, 0x73, 0x3b, 0x66, 0x72, 0xed,
-0x3b, 0x6c, 0x65, 0x79, 0x73, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0xe1, 0x6e, 0x2e, 0x3b, 0x74, 0xfd, 0x73, 0x2e, 0x3b, 0x6d,
-0x69, 0x6b, 0x2e, 0x3b, 0x68, 0xf3, 0x73, 0x2e, 0x3b, 0x66, 0x72, 0xed, 0x2e, 0x3b, 0x6c, 0x65, 0x79, 0x2e, 0x53, 0x3b,
-0x4d, 0x3b, 0x54, 0x3b, 0x4d, 0x3b, 0x48, 0x3b, 0x46, 0x3b, 0x4c, 0x73, 0x75, 0x6e, 0x6e, 0x75, 0x6e, 0x74, 0x61, 0x69,
-0x3b, 0x6d, 0x61, 0x61, 0x6e, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x3b, 0x74, 0x69, 0x69, 0x73, 0x74, 0x61, 0x69, 0x3b, 0x6b,
-0x65, 0x73, 0x6b, 0x69, 0x76, 0x69, 0x69, 0x6b, 0x6b, 0x6f, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x74, 0x61, 0x69, 0x3b, 0x70,
-0x65, 0x72, 0x6a, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x3b, 0x6c, 0x61, 0x75, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x73, 0x75, 0x6e,
-0x6e, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61, 0x3b, 0x6d, 0x61, 0x61, 0x6e, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61,
-0x3b, 0x74, 0x69, 0x69, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x61, 0x3b, 0x6b, 0x65, 0x73, 0x6b, 0x69, 0x76, 0x69, 0x69, 0x6b,
-0x6b, 0x6f, 0x6e, 0x61, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x61, 0x3b, 0x70, 0x65, 0x72, 0x6a, 0x61,
-0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61, 0x3b, 0x6c, 0x61, 0x75, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61, 0x73, 0x75, 0x3b,
-0x6d, 0x61, 0x3b, 0x74, 0x69, 0x3b, 0x6b, 0x65, 0x3b, 0x74, 0x6f, 0x3b, 0x70, 0x65, 0x3b, 0x6c, 0x61, 0x53, 0x3b, 0x4d,
-0x3b, 0x54, 0x3b, 0x4b, 0x3b, 0x54, 0x3b, 0x50, 0x3b, 0x4c, 0x64, 0x69, 0x6d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x3b, 0x6c,
-0x75, 0x6e, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d, 0x65, 0x72, 0x63, 0x72, 0x65, 0x64, 0x69, 0x3b,
-0x6a, 0x65, 0x75, 0x64, 0x69, 0x3b, 0x76, 0x65, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x69, 0x3b, 0x73, 0x61, 0x6d, 0x65, 0x64,
-0x69, 0x64, 0x69, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0x65, 0x72, 0x2e,
-0x3b, 0x6a, 0x65, 0x75, 0x2e, 0x3b, 0x76, 0x65, 0x6e, 0x2e, 0x3b, 0x73, 0x61, 0x6d, 0x2e, 0x44, 0x3b, 0x4c, 0x3b, 0x4d,
-0x3b, 0x4d, 0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x73, 0x6e, 0x65, 0x69, 0x6e, 0x3b, 0x6d, 0x6f, 0x61, 0x6e, 0x64, 0x65,
-0x69, 0x3b, 0x74, 0x69, 0x69, 0x73, 0x64, 0x65, 0x69, 0x3b, 0x77, 0x6f, 0x61, 0x6e, 0x73, 0x64, 0x65, 0x69, 0x3b, 0x74,
-0x6f, 0x6e, 0x67, 0x65, 0x72, 0x73, 0x64, 0x65, 0x69, 0x3b, 0x66, 0x72, 0x65, 0x65, 0x64, 0x3b, 0x73, 0x6e, 0x65, 0x6f,
-0x6e, 0x73, 0x69, 0x3b, 0x6d, 0x6f, 0x3b, 0x74, 0x69, 0x3b, 0x77, 0x6f, 0x3b, 0x74, 0x6f, 0x3b, 0x66, 0x72, 0x3b, 0x73,
-0x6f, 0x44, 0x69, 0x44, 0xf2, 0x6d, 0x68, 0x6e, 0x61, 0x69, 0x63, 0x68, 0x3b, 0x44, 0x69, 0x4c, 0x75, 0x61, 0x69, 0x6e,
-0x3b, 0x44, 0x69, 0x4d, 0xe0, 0x69, 0x72, 0x74, 0x3b, 0x44, 0x69, 0x43, 0x69, 0x61, 0x64, 0x61, 0x69, 0x6e, 0x3b, 0x44,
-0x69, 0x61, 0x72, 0x44, 0x61, 0x6f, 0x69, 0x6e, 0x3b, 0x44, 0x69, 0x68, 0x41, 0x6f, 0x69, 0x6e, 0x65, 0x3b, 0x44, 0x69,
-0x53, 0x61, 0x74, 0x68, 0x61, 0x69, 0x72, 0x6e, 0x65, 0x44, 0x69, 0x44, 0x3b, 0x44, 0x69, 0x4c, 0x3b, 0x44, 0x69, 0x4d,
-0x3b, 0x44, 0x69, 0x43, 0x3b, 0x44, 0x69, 0x61, 0x3b, 0x44, 0x69, 0x68, 0x3b, 0x44, 0x69, 0x53, 0x44, 0x3b, 0x4c, 0x3b,
-0x4d, 0x3b, 0x43, 0x3b, 0x41, 0x3b, 0x48, 0x3b, 0x53, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x4c, 0x75, 0x6e,
-0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x4d, 0xe9, 0x72, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x3b, 0x58, 0x6f,
-0x76, 0x65, 0x73, 0x3b, 0x56, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x3b, 0x53, 0xe1, 0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d,
-0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x6d, 0xe9, 0x72,
-0x63, 0x6f, 0x72, 0x65, 0x73, 0x3b, 0x78, 0x6f, 0x76, 0x65, 0x73, 0x3b, 0x76, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x3b, 0x73,
-0xe1, 0x62, 0x61, 0x64, 0x6f, 0x44, 0x6f, 0x6d, 0x2e, 0x3b, 0x4c, 0x75, 0x6e, 0x73, 0x3b, 0x4d, 0x61, 0x72, 0x2e, 0x3b,
-0x4d, 0xe9, 0x72, 0x2e, 0x3b, 0x58, 0x6f, 0x76, 0x2e, 0x3b, 0x56, 0x65, 0x6e, 0x2e, 0x3b, 0x53, 0xe1, 0x62, 0x2e, 0x64,
-0x6f, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0xe9, 0x72, 0x2e, 0x3b, 0x78,
-0x6f, 0x76, 0x2e, 0x3b, 0x76, 0x65, 0x6e, 0x2e, 0x3b, 0x73, 0xe1, 0x62, 0x2e, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d,
-0x3b, 0x58, 0x3b, 0x56, 0x3b, 0x53, 0x64, 0x2e, 0x3b, 0x6c, 0x2e, 0x3b, 0x6d, 0x2e, 0x3b, 0x6d, 0x2e, 0x3b, 0x78, 0x2e,
-0x3b, 0x76, 0x2e, 0x3b, 0x73, 0x2e, 0x10d9, 0x10d5, 0x10d8, 0x10e0, 0x10d0, 0x3b, 0x10dd, 0x10e0, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8,
-0x3b, 0x10e1, 0x10d0, 0x10db, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8, 0x3b, 0x10dd, 0x10d7, 0x10ee, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8,
-0x3b, 0x10ee, 0x10e3, 0x10d7, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8, 0x3b, 0x10de, 0x10d0, 0x10e0, 0x10d0, 0x10e1, 0x10d9, 0x10d4, 0x10d5, 0x10d8,
-0x3b, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8, 0x10d9, 0x10d5, 0x10d8, 0x3b, 0x10dd, 0x10e0, 0x10e8, 0x3b, 0x10e1, 0x10d0, 0x10db, 0x3b, 0x10dd,
-0x10d7, 0x10ee, 0x3b, 0x10ee, 0x10e3, 0x10d7, 0x3b, 0x10de, 0x10d0, 0x10e0, 0x3b, 0x10e8, 0x10d0, 0x10d1, 0x10d9, 0x3b, 0x10dd, 0x3b, 0x10e1, 0x3b,
-0x10dd, 0x3b, 0x10ee, 0x3b, 0x10de, 0x3b, 0x10e8, 0x53, 0x6f, 0x6e, 0x6e, 0x74, 0x61, 0x67, 0x3b, 0x4d, 0x6f, 0x6e, 0x74, 0x61,
-0x67, 0x3b, 0x44, 0x69, 0x65, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x3b, 0x4d, 0x69, 0x74, 0x74, 0x77, 0x6f, 0x63, 0x68, 0x3b,
-0x44, 0x6f, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x61, 0x67, 0x3b, 0x46, 0x72, 0x65, 0x69, 0x74, 0x61, 0x67, 0x3b, 0x53,
-0x61, 0x6d, 0x73, 0x74, 0x61, 0x67, 0x53, 0x6f, 0x3b, 0x4d, 0x6f, 0x3b, 0x44, 0x69, 0x3b, 0x4d, 0x69, 0x3b, 0x44, 0x6f,
-0x3b, 0x46, 0x72, 0x3b, 0x53, 0x61, 0x53, 0x6f, 0x2e, 0x3b, 0x4d, 0x6f, 0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b, 0x4d, 0x69,
-0x2e, 0x3b, 0x44, 0x6f, 0x2e, 0x3b, 0x46, 0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x53, 0x3b, 0x4d, 0x3b, 0x44, 0x3b, 0x4d,
-0x3b, 0x44, 0x3b, 0x46, 0x3b, 0x53, 0x39a, 0x3c5, 0x3c1, 0x3b9, 0x3b1, 0x3ba, 0x3ae, 0x3b, 0x394, 0x3b5, 0x3c5, 0x3c4, 0x3ad, 0x3c1,
-0x3b1, 0x3b, 0x3a4, 0x3c1, 0x3af, 0x3c4, 0x3b7, 0x3b, 0x3a4, 0x3b5, 0x3c4, 0x3ac, 0x3c1, 0x3c4, 0x3b7, 0x3b, 0x3a0, 0x3ad, 0x3bc, 0x3c0,
-0x3c4, 0x3b7, 0x3b, 0x3a0, 0x3b1, 0x3c1, 0x3b1, 0x3c3, 0x3ba, 0x3b5, 0x3c5, 0x3ae, 0x3b, 0x3a3, 0x3ac, 0x3b2, 0x3b2, 0x3b1, 0x3c4, 0x3bf,
-0x39a, 0x3c5, 0x3c1, 0x3b, 0x394, 0x3b5, 0x3c5, 0x3b, 0x3a4, 0x3c1, 0x3af, 0x3b, 0x3a4, 0x3b5, 0x3c4, 0x3b, 0x3a0, 0x3ad, 0x3bc, 0x3b,
-0x3a0, 0x3b1, 0x3c1, 0x3b, 0x3a3, 0x3ac, 0x3b2, 0x39a, 0x3b, 0x394, 0x3b, 0x3a4, 0x3b, 0x3a4, 0x3b, 0x3a0, 0x3b, 0x3a0, 0x3b, 0x3a3,
-0x73, 0x61, 0x70, 0x61, 0x61, 0x74, 0x3b, 0x61, 0x74, 0x61, 0x61, 0x73, 0x69, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65,
-0x71, 0x3b, 0x6d, 0x61, 0x72, 0x6c, 0x75, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b, 0x70, 0x69, 0x6e, 0x67,
-0x61, 0x73, 0x75, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b, 0x73, 0x69, 0x73, 0x61, 0x6d, 0x61, 0x6e, 0x6e,
-0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x6d, 0x61, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e,
-0x65, 0x71, 0x3b, 0x61, 0x72, 0x66, 0x69, 0x6e, 0x69, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x73, 0x61, 0x70,
-0x3b, 0x61, 0x74, 0x61, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x70, 0x69, 0x6e, 0x3b, 0x73, 0x69, 0x73, 0x3b, 0x74, 0x61, 0x6c,
-0x3b, 0x61, 0x72, 0x66, 0x53, 0x3b, 0x41, 0x3b, 0x4d, 0x3b, 0x50, 0x3b, 0x53, 0x3b, 0x54, 0x3b, 0x41, 0xab0, 0xab5, 0xabf,
-0xab5, 0xabe, 0xab0, 0x3b, 0xab8, 0xacb, 0xaae, 0xab5, 0xabe, 0xab0, 0x3b, 0xaae, 0xa82, 0xa97, 0xab3, 0xab5, 0xabe, 0xab0, 0x3b, 0xaac,
-0xac1, 0xaa7, 0xab5, 0xabe, 0xab0, 0x3b, 0xa97, 0xac1, 0xab0, 0xac1, 0xab5, 0xabe, 0xab0, 0x3b, 0xab6, 0xac1, 0xa95, 0xacd, 0xab0, 0xab5,
-0xabe, 0xab0, 0x3b, 0xab6, 0xaa8, 0xabf, 0xab5, 0xabe, 0xab0, 0xab0, 0xab5, 0xabf, 0x3b, 0xab8, 0xacb, 0xaae, 0x3b, 0xaae, 0xa82, 0xa97,
-0xab3, 0x3b, 0xaac, 0xac1, 0xaa7, 0x3b, 0xa97, 0xac1, 0xab0, 0xac1, 0x3b, 0xab6, 0xac1, 0xa95, 0xacd, 0xab0, 0x3b, 0xab6, 0xaa8, 0xabf,
-0xab0, 0x3b, 0xab8, 0xacb, 0x3b, 0xaae, 0xa82, 0x3b, 0xaac, 0xac1, 0x3b, 0xa97, 0xac1, 0x3b, 0xab6, 0xac1, 0x3b, 0xab6, 0x4c, 0x61,
-0x68, 0x61, 0x64, 0x69, 0x3b, 0x4c, 0x69, 0x74, 0x69, 0x6e, 0x69, 0x6e, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b,
-0x4c, 0x61, 0x72, 0x61, 0x62, 0x61, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x4a, 0x75, 0x6d, 0x6d, 0x61,
-0x2bc, 0x61, 0x3b, 0x41, 0x73, 0x61, 0x62, 0x61, 0x72, 0x4c, 0x61, 0x68, 0x3b, 0x4c, 0x69, 0x74, 0x3b, 0x54, 0x61, 0x6c,
-0x3b, 0x4c, 0x61, 0x72, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x41, 0x73, 0x61, 0x4c, 0x3b, 0x4c, 0x3b,
-0x54, 0x3b, 0x4c, 0x3b, 0x41, 0x3b, 0x4a, 0x3b, 0x41, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e8, 0x5d0, 0x5e9, 0x5d5, 0x5df, 0x3b, 0x5d9,
-0x5d5, 0x5dd, 0x20, 0x5e9, 0x5e0, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e9, 0x5dc, 0x5d9, 0x5e9, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd,
-0x20, 0x5e8, 0x5d1, 0x5d9, 0x5e2, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d7, 0x5de, 0x5d9, 0x5e9, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd,
-0x20, 0x5e9, 0x5d9, 0x5e9, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e9, 0x5d1, 0x5ea, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d0, 0x5f3, 0x3b,
-0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d1, 0x5f3, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d2, 0x5f3, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d3, 0x5f3,
-0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d4, 0x5f3, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d5, 0x5f3, 0x3b, 0x5e9, 0x5d1, 0x5ea, 0x5d0, 0x5f3,
-0x3b, 0x5d1, 0x5f3, 0x3b, 0x5d2, 0x5f3, 0x3b, 0x5d3, 0x5f3, 0x3b, 0x5d4, 0x5f3, 0x3b, 0x5d5, 0x5f3, 0x3b, 0x5e9, 0x5f3, 0x930, 0x935,
-0x93f, 0x935, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x935, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x935, 0x93e, 0x930, 0x3b,
-0x92c, 0x941, 0x927, 0x935, 0x93e, 0x930, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x935, 0x93e, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930,
-0x935, 0x93e, 0x930, 0x3b, 0x936, 0x928, 0x93f, 0x935, 0x93e, 0x930, 0x930, 0x935, 0x93f, 0x3b, 0x938, 0x94b, 0x92e, 0x3b, 0x92e, 0x902,
-0x917, 0x932, 0x3b, 0x92c, 0x941, 0x927, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x3b, 0x936, 0x928,
-0x93f, 0x930, 0x3b, 0x938, 0x94b, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x3b, 0x917, 0x941, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0x76,
-0x61, 0x73, 0xe1, 0x72, 0x6e, 0x61, 0x70, 0x3b, 0x68, 0xe9, 0x74, 0x66, 0x151, 0x3b, 0x6b, 0x65, 0x64, 0x64, 0x3b, 0x73,
-0x7a, 0x65, 0x72, 0x64, 0x61, 0x3b, 0x63, 0x73, 0xfc, 0x74, 0xf6, 0x72, 0x74, 0xf6, 0x6b, 0x3b, 0x70, 0xe9, 0x6e, 0x74,
-0x65, 0x6b, 0x3b, 0x73, 0x7a, 0x6f, 0x6d, 0x62, 0x61, 0x74, 0x56, 0x3b, 0x48, 0x3b, 0x4b, 0x3b, 0x53, 0x7a, 0x65, 0x3b,
-0x43, 0x73, 0x3b, 0x50, 0x3b, 0x53, 0x7a, 0x6f, 0x56, 0x3b, 0x48, 0x3b, 0x4b, 0x3b, 0x53, 0x7a, 0x3b, 0x43, 0x73, 0x3b,
-0x50, 0x3b, 0x53, 0x7a, 0x73, 0x75, 0x6e, 0x6e, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6d, 0xe1, 0x6e, 0x75, 0x64,
-0x61, 0x67, 0x75, 0x72, 0x3b, 0xfe, 0x72, 0x69, 0xf0, 0x6a, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6d, 0x69, 0xf0,
-0x76, 0x69, 0x6b, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x66, 0x69, 0x6d, 0x6d, 0x74, 0x75, 0x64, 0x61, 0x67, 0x75,
-0x72, 0x3b, 0x66, 0xf6, 0x73, 0x74, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6c, 0x61, 0x75, 0x67, 0x61, 0x72, 0x64,
-0x61, 0x67, 0x75, 0x72, 0x73, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0xe1, 0x6e, 0x2e, 0x3b, 0xfe, 0x72, 0x69, 0x2e, 0x3b, 0x6d,
-0x69, 0xf0, 0x2e, 0x3b, 0x66, 0x69, 0x6d, 0x2e, 0x3b, 0x66, 0xf6, 0x73, 0x2e, 0x3b, 0x6c, 0x61, 0x75, 0x2e, 0x53, 0x3b,
-0x4d, 0x3b, 0xde, 0x3b, 0x4d, 0x3b, 0x46, 0x3b, 0x46, 0x3b, 0x4c, 0x4d, 0x69, 0x6e, 0x67, 0x67, 0x75, 0x3b, 0x53, 0x65,
-0x6e, 0x69, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x61, 0x73, 0x61, 0x3b, 0x52, 0x61, 0x62, 0x75, 0x3b, 0x4b, 0x61, 0x6d, 0x69,
-0x73, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x75, 0x4d, 0x69, 0x6e, 0x3b, 0x53, 0x65, 0x6e,
-0x3b, 0x53, 0x65, 0x6c, 0x3b, 0x52, 0x61, 0x62, 0x3b, 0x4b, 0x61, 0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x61, 0x62,
-0x4d, 0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x4b, 0x3b, 0x4a, 0x3b, 0x53, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63,
-0x61, 0x3b, 0x6c, 0x75, 0x6e, 0x65, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x64, 0x69, 0x3b, 0x6d, 0x65, 0x72,
-0x63, 0x75, 0x72, 0x69, 0x64, 0x69, 0x3b, 0x6a, 0x6f, 0x76, 0x65, 0x64, 0x69, 0x3b, 0x76, 0x65, 0x6e, 0x65, 0x72, 0x64,
-0x69, 0x3b, 0x73, 0x61, 0x62, 0x62, 0x61, 0x74, 0x6f, 0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72,
-0x3b, 0x6d, 0x65, 0x72, 0x3b, 0x6a, 0x6f, 0x76, 0x3b, 0x76, 0x65, 0x6e, 0x3b, 0x73, 0x61, 0x62, 0x64, 0x3b, 0x6c, 0x3b,
-0x6d, 0x3b, 0x6d, 0x3b, 0x6a, 0x3b, 0x76, 0x3b, 0x73, 0x44, 0xe9, 0x20, 0x44, 0x6f, 0x6d, 0x68, 0x6e, 0x61, 0x69, 0x67,
-0x68, 0x3b, 0x44, 0xe9, 0x20, 0x4c, 0x75, 0x61, 0x69, 0x6e, 0x3b, 0x44, 0xe9, 0x20, 0x4d, 0xe1, 0x69, 0x72, 0x74, 0x3b,
-0x44, 0xe9, 0x20, 0x43, 0xe9, 0x61, 0x64, 0x61, 0x6f, 0x69, 0x6e, 0x3b, 0x44, 0xe9, 0x61, 0x72, 0x64, 0x61, 0x6f, 0x69,
-0x6e, 0x3b, 0x44, 0xe9, 0x20, 0x68, 0x41, 0x6f, 0x69, 0x6e, 0x65, 0x3b, 0x44, 0xe9, 0x20, 0x53, 0x61, 0x74, 0x68, 0x61,
-0x69, 0x72, 0x6e, 0x44, 0x6f, 0x6d, 0x68, 0x3b, 0x4c, 0x75, 0x61, 0x6e, 0x3b, 0x4d, 0xe1, 0x69, 0x72, 0x74, 0x3b, 0x43,
-0xe9, 0x61, 0x64, 0x3b, 0x44, 0xe9, 0x61, 0x72, 0x3b, 0x41, 0x6f, 0x69, 0x6e, 0x65, 0x3b, 0x53, 0x61, 0x74, 0x68, 0x44,
-0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x43, 0x3b, 0x44, 0x3b, 0x41, 0x3b, 0x53, 0x64, 0x6f, 0x6d, 0x65, 0x6e, 0x69, 0x63, 0x61,
-0x3b, 0x6c, 0x75, 0x6e, 0x65, 0x64, 0xec, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x64, 0xec, 0x3b, 0x6d, 0x65, 0x72, 0x63,
-0x6f, 0x6c, 0x65, 0x64, 0xec, 0x3b, 0x67, 0x69, 0x6f, 0x76, 0x65, 0x64, 0xec, 0x3b, 0x76, 0x65, 0x6e, 0x65, 0x72, 0x64,
-0xec, 0x3b, 0x73, 0x61, 0x62, 0x61, 0x74, 0x6f, 0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b,
-0x6d, 0x65, 0x72, 0x3b, 0x67, 0x69, 0x6f, 0x3b, 0x76, 0x65, 0x6e, 0x3b, 0x73, 0x61, 0x62, 0x44, 0x3b, 0x4c, 0x3b, 0x4d,
-0x3b, 0x4d, 0x3b, 0x47, 0x3b, 0x56, 0x3b, 0x53, 0x65e5, 0x66dc, 0x65e5, 0x3b, 0x6708, 0x66dc, 0x65e5, 0x3b, 0x706b, 0x66dc, 0x65e5, 0x3b,
-0x6c34, 0x66dc, 0x65e5, 0x3b, 0x6728, 0x66dc, 0x65e5, 0x3b, 0x91d1, 0x66dc, 0x65e5, 0x3b, 0x571f, 0x66dc, 0x65e5, 0x65e5, 0x3b, 0x6708, 0x3b, 0x706b,
-0x3b, 0x6c34, 0x3b, 0x6728, 0x3b, 0x91d1, 0x3b, 0x571f, 0x41, 0x68, 0x61, 0x64, 0x3b, 0x53, 0x65, 0x6e, 0x69, 0x6e, 0x3b, 0x53,
-0x65, 0x6c, 0x61, 0x73, 0x61, 0x3b, 0x52, 0x61, 0x62, 0x75, 0x3b, 0x4b, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x4a, 0x75, 0x6d,
-0x61, 0x74, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x75, 0x41, 0x68, 0x61, 0x64, 0x3b, 0x53, 0x65, 0x6e, 0x3b, 0x53, 0x65, 0x6c,
-0x3b, 0x52, 0x61, 0x62, 0x3b, 0x4b, 0x61, 0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x61, 0x62, 0x41, 0x3b, 0x53, 0x3b,
-0x53, 0x3b, 0x52, 0x3b, 0x4b, 0x3b, 0x4a, 0x3b, 0x53, 0xcad, 0xcbe, 0xca8, 0xcc1, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcb8, 0xccb, 0xcae,
-0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcae, 0xc82, 0xc97, 0xcb3, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcac, 0xcc1, 0xca7, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xc97,
-0xcc1, 0xcb0, 0xcc1, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcb6, 0xcc1, 0xc95, 0xccd, 0xcb0, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcb6, 0xca8, 0xcbf, 0xcb5,
-0xcbe, 0xcb0, 0xcad, 0xcbe, 0xca8, 0xcc1, 0x3b, 0xcb8, 0xccb, 0xcae, 0x3b, 0xcae, 0xc82, 0xc97, 0xcb3, 0x3b, 0xcac, 0xcc1, 0xca7, 0x3b,
-0xc97, 0xcc1, 0xcb0, 0xcc1, 0x3b, 0xcb6, 0xcc1, 0xc95, 0xccd, 0xcb0, 0x3b, 0xcb6, 0xca8, 0xcbf, 0xcad, 0xcbe, 0x3b, 0xcb8, 0xccb, 0x3b,
-0xcae, 0xc82, 0x3b, 0xcac, 0xcc1, 0x3b, 0xc97, 0xcc1, 0x3b, 0xcb6, 0xcc1, 0x3b, 0xcb6, 0x627, 0x64e, 0x62a, 0x6be, 0x648, 0x627, 0x631,
-0x3b, 0x698, 0x654, 0x646, 0x62f, 0x631, 0x655, 0x631, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x6c6, 0x645, 0x648, 0x627, 0x631, 0x3b, 0x628,
-0x648, 0x62f, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x631, 0x620, 0x633, 0x648, 0x627, 0x631, 0x3b, 0x62c, 0x64f, 0x645, 0x6c1, 0x3b, 0x628,
-0x679, 0x648, 0x627, 0x631, 0x622, 0x62a, 0x6be, 0x648, 0x627, 0x631, 0x3b, 0x698, 0x654, 0x646, 0x62f, 0x655, 0x631, 0x648, 0x627, 0x631,
-0x3b, 0x628, 0x6c6, 0x645, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x648, 0x62f, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x631, 0x620, 0x633, 0x648,
-0x627, 0x631, 0x3b, 0x62c, 0x64f, 0x645, 0x6c1, 0x3b, 0x628, 0x679, 0x648, 0x627, 0x631, 0x627, 0x3b, 0x698, 0x3b, 0x628, 0x3b, 0x628,
-0x3b, 0x628, 0x3b, 0x62c, 0x3b, 0x628, 0x436, 0x435, 0x43a, 0x441, 0x435, 0x43d, 0x431, 0x456, 0x3b, 0x434, 0x4af, 0x439, 0x441, 0x435,
-0x43d, 0x431, 0x456, 0x3b, 0x441, 0x435, 0x439, 0x441, 0x435, 0x43d, 0x431, 0x456, 0x3b, 0x441, 0x4d9, 0x440, 0x441, 0x435, 0x43d, 0x431,
-0x456, 0x3b, 0x431, 0x435, 0x439, 0x441, 0x435, 0x43d, 0x431, 0x456, 0x3b, 0x436, 0x4b1, 0x43c, 0x430, 0x3b, 0x441, 0x435, 0x43d, 0x431,
-0x456, 0x436, 0x441, 0x3b, 0x434, 0x441, 0x3b, 0x441, 0x441, 0x3b, 0x441, 0x440, 0x3b, 0x431, 0x441, 0x3b, 0x436, 0x43c, 0x3b, 0x441,
-0x431, 0x416, 0x3b, 0x414, 0x3b, 0x421, 0x3b, 0x421, 0x3b, 0x411, 0x3b, 0x416, 0x3b, 0x421, 0x4b, 0x75, 0x20, 0x63, 0x79, 0x75,
-0x6d, 0x77, 0x65, 0x72, 0x75, 0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x6d, 0x62, 0x65, 0x72, 0x65, 0x3b, 0x4b, 0x75, 0x77,
-0x61, 0x20, 0x6b, 0x61, 0x62, 0x69, 0x72, 0x69, 0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x74, 0x75,
-0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x65, 0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61,
-0x6e, 0x75, 0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x75, 0x63, 0x79, 0x75,
-0x2e, 0x3b, 0x6d, 0x62, 0x65, 0x2e, 0x3b, 0x6b, 0x61, 0x62, 0x2e, 0x3b, 0x67, 0x74, 0x75, 0x2e, 0x3b, 0x6b, 0x61, 0x6e,
-0x2e, 0x3b, 0x67, 0x6e, 0x75, 0x2e, 0x3b, 0x67, 0x6e, 0x64, 0x2e, 0x436, 0x435, 0x43a, 0x448, 0x435, 0x43c, 0x431, 0x438, 0x3b,
-0x434, 0x4af, 0x439, 0x448, 0x4e9, 0x43c, 0x431, 0x4af, 0x3b, 0x448, 0x435, 0x439, 0x448, 0x435, 0x43c, 0x431, 0x438, 0x3b, 0x448, 0x430,
-0x440, 0x448, 0x435, 0x43c, 0x431, 0x438, 0x3b, 0x431, 0x435, 0x439, 0x448, 0x435, 0x43c, 0x431, 0x438, 0x3b, 0x436, 0x443, 0x43c, 0x430,
-0x3b, 0x438, 0x448, 0x435, 0x43c, 0x431, 0x438, 0x436, 0x435, 0x43a, 0x2e, 0x3b, 0x434, 0x4af, 0x439, 0x2e, 0x3b, 0x448, 0x435, 0x439,
-0x448, 0x2e, 0x3b, 0x448, 0x430, 0x440, 0x448, 0x2e, 0x3b, 0x431, 0x435, 0x439, 0x448, 0x2e, 0x3b, 0x436, 0x443, 0x43c, 0x430, 0x3b,
-0x438, 0x448, 0x43c, 0x2e, 0x416, 0x3b, 0x414, 0x3b, 0x428, 0x3b, 0x428, 0x3b, 0x411, 0x3b, 0x416, 0x3b, 0x418, 0xc77c, 0xc694, 0xc77c,
-0x3b, 0xc6d4, 0xc694, 0xc77c, 0x3b, 0xd654, 0xc694, 0xc77c, 0x3b, 0xc218, 0xc694, 0xc77c, 0x3b, 0xbaa9, 0xc694, 0xc77c, 0x3b, 0xae08, 0xc694, 0xc77c,
-0x3b, 0xd1a0, 0xc694, 0xc77c, 0xc77c, 0x3b, 0xc6d4, 0x3b, 0xd654, 0x3b, 0xc218, 0x3b, 0xbaa9, 0x3b, 0xae08, 0x3b, 0xd1a0, 0x79, 0x65, 0x6b,
-0x15f, 0x65, 0x6d, 0x3b, 0x64, 0x75, 0x15f, 0x65, 0x6d, 0x3b, 0x73, 0xea, 0x15f, 0x65, 0x6d, 0x3b, 0xe7, 0x61, 0x72, 0x15f,
-0x65, 0x6d, 0x3b, 0x70, 0xea, 0x6e, 0x63, 0x15f, 0x65, 0x6d, 0x3b, 0xee, 0x6e, 0x3b, 0x15f, 0x65, 0x6d, 0xee, 0x79, 0x15f,
-0x3b, 0x64, 0x15f, 0x3b, 0x73, 0x15f, 0x3b, 0xe7, 0x15f, 0x3b, 0x70, 0x15f, 0x3b, 0xee, 0x6e, 0x3b, 0x15f, 0x59, 0x3b, 0x44,
-0x3b, 0x53, 0x3b, 0xc7, 0x3b, 0x50, 0x3b, 0xce, 0x3b, 0x15e, 0x4b, 0x75, 0x20, 0x77, 0x2019, 0x69, 0x6e, 0x64, 0x77, 0x69,
-0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x6d, 0x62, 0x65, 0x72, 0x65, 0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x6b,
-0x61, 0x62, 0x69, 0x72, 0x69, 0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4b,
-0x75, 0x20, 0x77, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x65, 0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61,
-0x6e, 0x75, 0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x75, 0x63, 0x75,
-0x2e, 0x3b, 0x6d, 0x62, 0x65, 0x2e, 0x3b, 0x6b, 0x61, 0x62, 0x2e, 0x3b, 0x67, 0x74, 0x75, 0x2e, 0x3b, 0x6b, 0x61, 0x6e,
-0x2e, 0x3b, 0x67, 0x6e, 0x75, 0x2e, 0x3b, 0x67, 0x6e, 0x64, 0x2e, 0xea7, 0xeb1, 0xe99, 0xead, 0xeb2, 0xe97, 0xeb4, 0xe94, 0x3b,
-0xea7, 0xeb1, 0xe99, 0xe88, 0xeb1, 0xe99, 0x3b, 0xea7, 0xeb1, 0xe99, 0xead, 0xeb1, 0xe87, 0xe84, 0xeb2, 0xe99, 0x3b, 0xea7, 0xeb1, 0xe99,
-0xe9e, 0xeb8, 0xe94, 0x3b, 0xea7, 0xeb1, 0xe99, 0xe9e, 0xeb0, 0xeab, 0xeb1, 0xe94, 0x3b, 0xea7, 0xeb1, 0xe99, 0xeaa, 0xeb8, 0xe81, 0x3b,
-0xea7, 0xeb1, 0xe99, 0xec0, 0xeaa, 0xebb, 0xeb2, 0xead, 0xeb2, 0xe97, 0xeb4, 0xe94, 0x3b, 0xe88, 0xeb1, 0xe99, 0x3b, 0xead, 0xeb1, 0xe87,
-0xe84, 0xeb2, 0xe99, 0x3b, 0xe9e, 0xeb8, 0xe94, 0x3b, 0xe9e, 0xeb0, 0xeab, 0xeb1, 0xe94, 0x3b, 0xeaa, 0xeb8, 0xe81, 0x3b, 0xec0, 0xeaa,
-0xebb, 0xeb2, 0xead, 0xeb2, 0x3b, 0xe88, 0x3b, 0xead, 0x3b, 0xe9e, 0x3b, 0xe9e, 0xeab, 0x3b, 0xeaa, 0xeb8, 0x3b, 0xeaa, 0x53, 0x76,
-0x113, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x50, 0x69, 0x72, 0x6d, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x4f, 0x74,
-0x72, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x54, 0x72, 0x65, 0x161, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x43, 0x65, 0x74,
-0x75, 0x72, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x50, 0x69, 0x65, 0x6b, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b,
-0x53, 0x65, 0x73, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x73, 0x76, 0x113, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x70,
-0x69, 0x72, 0x6d, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x6f, 0x74, 0x72, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x74, 0x72,
-0x65, 0x161, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x63, 0x65, 0x74, 0x75, 0x72, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b,
-0x70, 0x69, 0x65, 0x6b, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x73, 0x65, 0x73, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61,
-0x53, 0x76, 0x113, 0x74, 0x64, 0x2e, 0x3b, 0x50, 0x69, 0x72, 0x6d, 0x64, 0x2e, 0x3b, 0x4f, 0x74, 0x72, 0x64, 0x2e, 0x3b,
-0x54, 0x72, 0x65, 0x161, 0x64, 0x2e, 0x3b, 0x43, 0x65, 0x74, 0x75, 0x72, 0x74, 0x64, 0x2e, 0x3b, 0x50, 0x69, 0x65, 0x6b,
-0x74, 0x64, 0x2e, 0x3b, 0x53, 0x65, 0x73, 0x74, 0x64, 0x2e, 0x73, 0x76, 0x113, 0x74, 0x64, 0x2e, 0x3b, 0x70, 0x69, 0x72,
-0x6d, 0x64, 0x2e, 0x3b, 0x6f, 0x74, 0x72, 0x64, 0x2e, 0x3b, 0x74, 0x72, 0x65, 0x161, 0x64, 0x2e, 0x3b, 0x63, 0x65, 0x74,
-0x75, 0x72, 0x74, 0x64, 0x2e, 0x3b, 0x70, 0x69, 0x65, 0x6b, 0x74, 0x64, 0x2e, 0x3b, 0x73, 0x65, 0x73, 0x74, 0x64, 0x2e,
-0x53, 0x3b, 0x50, 0x3b, 0x4f, 0x3b, 0x54, 0x3b, 0x43, 0x3b, 0x50, 0x3b, 0x53, 0x65, 0x79, 0x65, 0x6e, 0x67, 0x61, 0x3b,
-0x6d, 0x6f, 0x6b, 0x254, 0x6c, 0x254, 0x20, 0x6d, 0x77, 0x61, 0x20, 0x79, 0x61, 0x6d, 0x62, 0x6f, 0x3b, 0x6d, 0x6f, 0x6b,
-0x254, 0x6c, 0x254, 0x20, 0x6d, 0x77, 0x61, 0x20, 0x6d, 0xed, 0x62, 0x61, 0x6c, 0xe9, 0x3b, 0x6d, 0x6f, 0x6b, 0x254, 0x6c,
-0x254, 0x20, 0x6d, 0x77, 0x61, 0x20, 0x6d, 0xed, 0x73, 0xe1, 0x74, 0x6f, 0x3b, 0x6d, 0x6f, 0x6b, 0x254, 0x6c, 0x254, 0x20,
-0x79, 0x61, 0x20, 0x6d, 0xed, 0x6e, 0xe9, 0x69, 0x3b, 0x6d, 0x6f, 0x6b, 0x254, 0x6c, 0x254, 0x20, 0x79, 0x61, 0x20, 0x6d,
-0xed, 0x74, 0xe1, 0x6e, 0x6f, 0x3b, 0x6d, 0x70, 0x254, 0x301, 0x73, 0x254, 0x65, 0x79, 0x65, 0x3b, 0x79, 0x62, 0x6f, 0x3b,
-0x6d, 0x62, 0x6c, 0x3b, 0x6d, 0x73, 0x74, 0x3b, 0x6d, 0x69, 0x6e, 0x3b, 0x6d, 0x74, 0x6e, 0x3b, 0x6d, 0x70, 0x73, 0x65,
-0x3b, 0x79, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x70, 0x73, 0x65, 0x6b, 0x6d, 0x61, 0x64, 0x69, 0x65,
-0x6e, 0x69, 0x73, 0x3b, 0x70, 0x69, 0x72, 0x6d, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x61, 0x6e, 0x74, 0x72,
-0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x74, 0x72, 0x65, 0x10d, 0x69, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73,
-0x3b, 0x6b, 0x65, 0x74, 0x76, 0x69, 0x72, 0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x70, 0x65, 0x6e, 0x6b,
-0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x161, 0x65, 0x161, 0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73,
-0x73, 0x6b, 0x3b, 0x70, 0x72, 0x3b, 0x61, 0x6e, 0x3b, 0x74, 0x72, 0x3b, 0x6b, 0x74, 0x3b, 0x70, 0x6e, 0x3b, 0x161, 0x74,
-0x53, 0x3b, 0x50, 0x3b, 0x41, 0x3b, 0x54, 0x3b, 0x4b, 0x3b, 0x50, 0x3b, 0x160, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x430, 0x3b,
-0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x43d, 0x438, 0x43a, 0x3b, 0x432, 0x442, 0x43e, 0x440, 0x43d, 0x438, 0x43a, 0x3b, 0x441,
-0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x440, 0x442, 0x43e, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x43e, 0x43a, 0x3b,
-0x441, 0x430, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434, 0x2e, 0x3b, 0x43f, 0x43e, 0x43d, 0x2e, 0x3b, 0x432, 0x442, 0x43e, 0x2e,
-0x3b, 0x441, 0x440, 0x435, 0x2e, 0x3b, 0x447, 0x435, 0x442, 0x2e, 0x3b, 0x43f, 0x435, 0x442, 0x2e, 0x3b, 0x441, 0x430, 0x431, 0x2e,
-0x43d, 0x435, 0x434, 0x2e, 0x3b, 0x43f, 0x43e, 0x43d, 0x2e, 0x3b, 0x432, 0x442, 0x2e, 0x3b, 0x441, 0x440, 0x435, 0x2e, 0x3b, 0x447,
-0x435, 0x442, 0x2e, 0x3b, 0x43f, 0x435, 0x442, 0x2e, 0x3b, 0x441, 0x430, 0x431, 0x2e, 0x41, 0x6c, 0x61, 0x68, 0x61, 0x64, 0x79,
-0x3b, 0x41, 0x6c, 0x61, 0x74, 0x73, 0x69, 0x6e, 0x61, 0x69, 0x6e, 0x79, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b,
-0x41, 0x6c, 0x61, 0x72, 0x6f, 0x62, 0x69, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x6b, 0x61, 0x6d, 0x69, 0x73, 0x79, 0x3b, 0x5a,
-0x6f, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x61, 0x62, 0x6f, 0x74, 0x73, 0x79, 0x41, 0x6c, 0x61, 0x68, 0x3b, 0x41, 0x6c, 0x61,
-0x74, 0x73, 0x3b, 0x54, 0x61, 0x6c, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x3b, 0x41, 0x6c, 0x61, 0x6b, 0x3b, 0x5a, 0x6f, 0x6d,
-0x3b, 0x41, 0x73, 0x61, 0x62, 0x41, 0x3b, 0x41, 0x3b, 0x54, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x5a, 0x3b, 0x41, 0x41, 0x68,
-0x61, 0x64, 0x3b, 0x49, 0x73, 0x6e, 0x69, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x61, 0x73, 0x61, 0x3b, 0x52, 0x61, 0x62, 0x75,
-0x3b, 0x4b, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x74, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x75,
-0x41, 0x68, 0x64, 0x3b, 0x49, 0x73, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x3b, 0x52, 0x61, 0x62, 0x3b, 0x4b, 0x68, 0x61, 0x3b,
-0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x61, 0x62, 0x41, 0x3b, 0x49, 0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x4b, 0x3b, 0x4a, 0x3b, 0x53,
-0xd1e, 0xd3e, 0xd2f, 0xd31, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd24, 0xd3f, 0xd19, 0xd4d, 0xd15, 0xd33, 0xd3e, 0xd34, 0xd4d, 0x200c,
-0xd1a, 0x3b, 0xd1a, 0xd4a, 0xd35, 0xd4d, 0xd35, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd2c, 0xd41, 0xd27, 0xd28, 0xd3e, 0xd34, 0xd4d,
-0x200c, 0xd1a, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0xd34, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd46, 0xd33, 0xd4d, 0xd33, 0xd3f,
-0xd2f, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd36, 0xd28, 0xd3f, 0xd2f, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0xd1e, 0xd3e, 0xd2f, 0xd31,
-0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd24, 0xd3f, 0xd19, 0xd4d, 0xd15, 0xd33, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd1a, 0xd4a,
-0xd35, 0xd4d, 0xd35, 0xd3e, 0xd34, 0xd4d, 0xd1a, 0x3b, 0xd2c, 0xd41, 0xd27, 0xd28, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd4d,
-0xd2f, 0xd3e, 0xd34, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd46, 0xd33, 0xd4d, 0xd33, 0xd3f, 0xd2f, 0xd3e, 0xd34, 0xd4d, 0x200c,
-0xd1a, 0x3b, 0xd36, 0xd28, 0xd3f, 0xd2f, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0xd1e, 0xd3e, 0xd2f, 0xd7c, 0x3b, 0xd24, 0xd3f, 0xd19, 0xd4d,
-0xd15, 0xd7e, 0x3b, 0xd1a, 0xd4a, 0xd35, 0xd4d, 0xd35, 0x3b, 0xd2c, 0xd41, 0xd27, 0xd7b, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0xd34, 0xd02,
-0x3b, 0xd35, 0xd46, 0xd33, 0xd4d, 0xd33, 0xd3f, 0x3b, 0xd36, 0xd28, 0xd3f, 0xd1e, 0xd3e, 0x3b, 0xd24, 0xd3f, 0x3b, 0xd1a, 0xd4a, 0x3b,
-0xd2c, 0xd41, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0x3b, 0xd35, 0xd46, 0x3b, 0xd36, 0xd1e, 0x3b, 0xd24, 0xd3f, 0x3b, 0xd1a, 0xd4a, 0x3b,
-0xd2c, 0xd41, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0x3b, 0xd35, 0xd46, 0x3b, 0xd36, 0x49, 0x6c, 0x2d, 0x126, 0x61, 0x64, 0x64, 0x3b,
-0x49, 0x74, 0x2d, 0x54, 0x6e, 0x65, 0x6a, 0x6e, 0x3b, 0x49, 0x74, 0x2d, 0x54, 0x6c, 0x69, 0x65, 0x74, 0x61, 0x3b, 0x4c,
-0x2d, 0x45, 0x72, 0x62, 0x67, 0x127, 0x61, 0x3b, 0x49, 0x6c, 0x2d, 0x126, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x49, 0x6c, 0x2d,
-0x120, 0x69, 0x6d, 0x67, 0x127, 0x61, 0x3b, 0x49, 0x73, 0x2d, 0x53, 0x69, 0x62, 0x74, 0x126, 0x61, 0x64, 0x3b, 0x54, 0x6e,
-0x65, 0x3b, 0x54, 0x6c, 0x69, 0x3b, 0x45, 0x72, 0x62, 0x3b, 0x126, 0x61, 0x6d, 0x3b, 0x120, 0x69, 0x6d, 0x3b, 0x53, 0x69,
-0x62, 0x126, 0x64, 0x3b, 0x54, 0x6e, 0x3b, 0x54, 0x6c, 0x3b, 0x45, 0x72, 0x3b, 0x126, 0x6d, 0x3b, 0x120, 0x6d, 0x3b, 0x53,
-0x62, 0x126, 0x64, 0x3b, 0x54, 0x3b, 0x54, 0x6c, 0x3b, 0x45, 0x72, 0x3b, 0x126, 0x6d, 0x3b, 0x120, 0x6d, 0x3b, 0x53, 0x62,
-0x52, 0x101, 0x74, 0x61, 0x70, 0x75, 0x3b, 0x52, 0x101, 0x68, 0x69, 0x6e, 0x61, 0x3b, 0x52, 0x101, 0x74, 0x16b, 0x3b, 0x52,
-0x101, 0x61, 0x70, 0x61, 0x3b, 0x52, 0x101, 0x70, 0x61, 0x72, 0x65, 0x3b, 0x52, 0x101, 0x6d, 0x65, 0x72, 0x65, 0x3b, 0x52,
-0x101, 0x68, 0x6f, 0x72, 0x6f, 0x69, 0x54, 0x61, 0x70, 0x3b, 0x48, 0x69, 0x6e, 0x3b, 0x54, 0x16b, 0x3b, 0x41, 0x70, 0x61,
-0x3b, 0x50, 0x61, 0x72, 0x3b, 0x4d, 0x65, 0x72, 0x3b, 0x48, 0x6f, 0x72, 0x54, 0x3b, 0x48, 0x3b, 0x54, 0x3b, 0x41, 0x3b,
-0x50, 0x3b, 0x4d, 0x3b, 0x48, 0x930, 0x935, 0x93f, 0x935, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x935, 0x93e, 0x930, 0x3b, 0x92e,
-0x902, 0x917, 0x933, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x927, 0x935, 0x93e, 0x930, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x935, 0x93e,
-0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x935, 0x93e, 0x930, 0x3b, 0x936, 0x928, 0x93f, 0x935, 0x93e, 0x930, 0x930, 0x935, 0x93f,
-0x3b, 0x938, 0x94b, 0x92e, 0x3b, 0x92e, 0x902, 0x917, 0x933, 0x3b, 0x92c, 0x941, 0x927, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x3b, 0x936,
-0x941, 0x915, 0x94d, 0x930, 0x3b, 0x936, 0x928, 0x93f, 0x41d, 0x44f, 0x43c, 0x3b, 0x414, 0x430, 0x432, 0x430, 0x430, 0x3b, 0x41c, 0x44f,
-0x433, 0x43c, 0x430, 0x440, 0x3b, 0x41b, 0x445, 0x430, 0x433, 0x432, 0x430, 0x3b, 0x41f, 0x4af, 0x440, 0x44d, 0x432, 0x3b, 0x411, 0x430,
-0x430, 0x441, 0x430, 0x43d, 0x3b, 0x411, 0x44f, 0x43c, 0x431, 0x430, 0x43d, 0x44f, 0x43c, 0x3b, 0x434, 0x430, 0x432, 0x430, 0x430, 0x3b,
-0x43c, 0x44f, 0x433, 0x43c, 0x430, 0x440, 0x3b, 0x43b, 0x445, 0x430, 0x433, 0x432, 0x430, 0x3b, 0x43f, 0x4af, 0x440, 0x44d, 0x432, 0x3b,
-0x431, 0x430, 0x430, 0x441, 0x430, 0x43d, 0x3b, 0x431, 0x44f, 0x43c, 0x431, 0x430, 0x41d, 0x44f, 0x3b, 0x414, 0x430, 0x3b, 0x41c, 0x44f,
-0x3b, 0x41b, 0x445, 0x3b, 0x41f, 0x4af, 0x3b, 0x411, 0x430, 0x3b, 0x411, 0x44f, 0x906, 0x907, 0x924, 0x92c, 0x93e, 0x930, 0x3b, 0x938,
-0x94b, 0x92e, 0x92c, 0x93e, 0x930, 0x3b, 0x92e, 0x919, 0x94d, 0x917, 0x932, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x927, 0x92c, 0x93e,
-0x930, 0x3b, 0x92c, 0x93f, 0x939, 0x93f, 0x92c, 0x93e, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x92c, 0x93e, 0x930, 0x3b, 0x936,
-0x928, 0x93f, 0x92c, 0x93e, 0x930, 0x906, 0x907, 0x924, 0x3b, 0x938, 0x94b, 0x92e, 0x3b, 0x92e, 0x919, 0x94d, 0x917, 0x932, 0x3b, 0x92c,
-0x941, 0x927, 0x3b, 0x92c, 0x93f, 0x939, 0x93f, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x3b, 0x936, 0x928, 0x93f, 0x906, 0x3b, 0x938,
-0x94b, 0x3b, 0x92e, 0x3b, 0x92c, 0x941, 0x3b, 0x92c, 0x93f, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0xb30, 0xb2c, 0xb3f, 0xb2c, 0xb3e, 0xb30,
-0x3b, 0xb38, 0xb4b, 0xb2e, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb2e, 0xb19, 0xb4d, 0xb17, 0xb33, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb2c, 0xb41, 0xb27,
-0xb2c, 0xb3e, 0xb30, 0x3b, 0xb17, 0xb41, 0xb30, 0xb41, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb36, 0xb41, 0xb15, 0xb4d, 0xb30, 0xb2c, 0xb3e, 0xb30,
-0x3b, 0xb36, 0xb28, 0xb3f, 0xb2c, 0xb3e, 0xb30, 0xb30, 0xb2c, 0xb3f, 0x3b, 0xb38, 0xb4b, 0xb2e, 0x3b, 0xb2e, 0xb19, 0xb4d, 0xb17, 0xb33,
-0x3b, 0xb2c, 0xb41, 0xb27, 0x3b, 0xb17, 0xb41, 0xb30, 0xb41, 0x3b, 0xb36, 0xb41, 0xb15, 0xb4d, 0xb30, 0x3b, 0xb36, 0xb28, 0xb3f, 0xb30,
-0x3b, 0xb38, 0xb4b, 0x3b, 0xb2e, 0x3b, 0xb2c, 0xb41, 0x3b, 0xb17, 0xb41, 0x3b, 0xb36, 0xb41, 0x3b, 0xb36, 0x64a, 0x648, 0x646, 0x6cd,
-0x3b, 0x62f, 0x648, 0x646, 0x6cd, 0x3b, 0x62f, 0x631, 0x6d0, 0x646, 0x6cd, 0x3b, 0x685, 0x644, 0x631, 0x646, 0x6cd, 0x3b, 0x67e, 0x64a,
-0x646, 0x681, 0x646, 0x6cd, 0x3b, 0x62c, 0x645, 0x639, 0x647, 0x3b, 0x627, 0x648, 0x646, 0x6cd, 0x6cc, 0x6a9, 0x634, 0x646, 0x628, 0x647,
-0x3b, 0x62f, 0x648, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x633, 0x647, 0x200c, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x686, 0x647, 0x627, 0x631,
-0x634, 0x646, 0x628, 0x647, 0x3b, 0x67e, 0x646, 0x62c, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x62c, 0x645, 0x639, 0x647, 0x3b, 0x634, 0x646,
-0x628, 0x647, 0x6cc, 0x3b, 0x62f, 0x3b, 0x633, 0x3b, 0x686, 0x3b, 0x67e, 0x3b, 0x62c, 0x3b, 0x634, 0x6e, 0x69, 0x65, 0x64, 0x7a,
-0x69, 0x65, 0x6c, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x69, 0x65, 0x64, 0x7a, 0x69, 0x61, 0x142, 0x65, 0x6b, 0x3b, 0x77, 0x74,
-0x6f, 0x72, 0x65, 0x6b, 0x3b, 0x15b, 0x72, 0x6f, 0x64, 0x61, 0x3b, 0x63, 0x7a, 0x77, 0x61, 0x72, 0x74, 0x65, 0x6b, 0x3b,
-0x70, 0x69, 0x105, 0x74, 0x65, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x7a, 0x2e, 0x3b,
-0x70, 0x6f, 0x6e, 0x2e, 0x3b, 0x77, 0x74, 0x2e, 0x3b, 0x15b, 0x72, 0x2e, 0x3b, 0x63, 0x7a, 0x77, 0x2e, 0x3b, 0x70, 0x74,
-0x2e, 0x3b, 0x73, 0x6f, 0x62, 0x2e, 0x4e, 0x3b, 0x50, 0x3b, 0x57, 0x3b, 0x15a, 0x3b, 0x43, 0x3b, 0x50, 0x3b, 0x53, 0x6e,
-0x3b, 0x70, 0x3b, 0x77, 0x3b, 0x15b, 0x3b, 0x63, 0x3b, 0x70, 0x3b, 0x73, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b,
-0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x3b, 0x74, 0x65, 0x72, 0xe7, 0x61, 0x2d,
-0x66, 0x65, 0x69, 0x72, 0x61, 0x3b, 0x71, 0x75, 0x61, 0x72, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x3b, 0x71,
-0x75, 0x69, 0x6e, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x3b, 0x73, 0x65, 0x78, 0x74, 0x61, 0x2d, 0x66, 0x65,
-0x69, 0x72, 0x61, 0x3b, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x2e, 0x3b, 0x73, 0x65, 0x67, 0x2e, 0x3b,
-0x74, 0x65, 0x72, 0x2e, 0x3b, 0x71, 0x75, 0x61, 0x2e, 0x3b, 0x71, 0x75, 0x69, 0x2e, 0x3b, 0x73, 0x65, 0x78, 0x2e, 0x3b,
-0x73, 0xe1, 0x62, 0x2e, 0x44, 0x3b, 0x53, 0x3b, 0x54, 0x3b, 0x51, 0x3b, 0x51, 0x3b, 0x53, 0x3b, 0x53, 0x64, 0x6f, 0x6d,
-0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x61, 0x3b, 0x74, 0x65, 0x72, 0xe7, 0x61, 0x3b, 0x71,
-0x75, 0x61, 0x72, 0x74, 0x61, 0x3b, 0x71, 0x75, 0x69, 0x6e, 0x74, 0x61, 0x3b, 0x73, 0x65, 0x78, 0x74, 0x61, 0x3b, 0x73,
-0xe1, 0x62, 0x61, 0x64, 0x6f, 0xa10, 0xa24, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa38, 0xa4b, 0xa2e, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa2e, 0xa70,
-0xa17, 0xa32, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa2c, 0xa41, 0xa71, 0xa27, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa35, 0xa40, 0xa30, 0xa35, 0xa3e, 0xa30,
-0x3b, 0xa38, 0xa3c, 0xa41, 0xa71, 0xa15, 0xa30, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa38, 0xa3c, 0xa28, 0xa3f, 0xa71, 0xa1a, 0xa30, 0xa35, 0xa3e,
-0xa30, 0xa10, 0xa24, 0x3b, 0xa38, 0xa4b, 0xa2e, 0x3b, 0xa2e, 0xa70, 0xa17, 0xa32, 0x3b, 0xa2c, 0xa41, 0xa71, 0xa27, 0x3b, 0xa35, 0xa40,
-0xa30, 0x3b, 0xa38, 0xa3c, 0xa41, 0xa71, 0xa15, 0xa30, 0x3b, 0xa38, 0xa3c, 0xa28, 0xa3f, 0xa71, 0xa1a, 0xa30, 0xa10, 0x3b, 0xa38, 0xa4b,
-0x3b, 0xa2e, 0xa70, 0x3b, 0xa2c, 0xa41, 0xa71, 0x3b, 0xa35, 0xa40, 0x3b, 0xa38, 0xa3c, 0xa41, 0xa71, 0x3b, 0xa38, 0xa3c, 0x627, 0x62a,
-0x648, 0x627, 0x631, 0x3b, 0x67e, 0x6cc, 0x631, 0x3b, 0x645, 0x646, 0x6af, 0x644, 0x3b, 0x628, 0x64f, 0x62f, 0x6be, 0x3b, 0x62c, 0x645,
-0x639, 0x631, 0x627, 0x62a, 0x3b, 0x62c, 0x645, 0x639, 0x6c1, 0x3b, 0x6c1, 0x641, 0x62a, 0x6c1, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x67,
-0x6f, 0x3b, 0x4c, 0x75, 0x6e, 0x65, 0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x4d, 0x69, 0xe9, 0x72, 0x63,
-0x6f, 0x6c, 0x65, 0x73, 0x3b, 0x4a, 0x75, 0x65, 0x76, 0x65, 0x73, 0x3b, 0x56, 0x69, 0x65, 0x72, 0x6e, 0x65, 0x73, 0x3b,
-0x53, 0xe1, 0x62, 0x61, 0x64, 0x6f, 0x44, 0x6f, 0x6d, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x69,
-0xe9, 0x3b, 0x4a, 0x75, 0x65, 0x3b, 0x56, 0x69, 0x65, 0x3b, 0x53, 0x61, 0x62, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x58,
-0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x64, 0x75, 0x6d, 0x65, 0x6e, 0x67, 0x69, 0x61, 0x3b, 0x67, 0x6c, 0x69, 0x6e, 0x64,
-0x65, 0x73, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d, 0x65, 0x73, 0x65, 0x6d, 0x6e, 0x61, 0x3b, 0x67,
-0x69, 0x65, 0x76, 0x67, 0x69, 0x61, 0x3b, 0x76, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x64, 0x69, 0x3b, 0x73, 0x6f, 0x6e, 0x64,
-0x61, 0x64, 0x75, 0x3b, 0x67, 0x6c, 0x69, 0x3b, 0x6d, 0x61, 0x3b, 0x6d, 0x65, 0x3b, 0x67, 0x69, 0x65, 0x3b, 0x76, 0x65,
-0x3b, 0x73, 0x6f, 0x44, 0x3b, 0x47, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x47, 0x3b, 0x56, 0x3b, 0x53, 0x64, 0x75, 0x6d, 0x69,
-0x6e, 0x69, 0x63, 0x103, 0x3b, 0x6c, 0x75, 0x6e, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x21b, 0x69, 0x3b, 0x6d, 0x69, 0x65, 0x72,
-0x63, 0x75, 0x72, 0x69, 0x3b, 0x6a, 0x6f, 0x69, 0x3b, 0x76, 0x69, 0x6e, 0x65, 0x72, 0x69, 0x3b, 0x73, 0xe2, 0x6d, 0x62,
-0x103, 0x74, 0x103, 0x64, 0x75, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0x69,
-0x65, 0x2e, 0x3b, 0x6a, 0x6f, 0x69, 0x3b, 0x76, 0x69, 0x6e, 0x2e, 0x3b, 0x73, 0xe2, 0x6d, 0x2e, 0x44, 0x75, 0x6d, 0x3b,
-0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x69, 0x65, 0x3b, 0x4a, 0x6f, 0x69, 0x3b, 0x56, 0x69, 0x6e, 0x3b,
-0x53, 0xe2, 0x6d, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x61, 0x3b, 0x4d, 0x69, 0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x432, 0x43e,
-0x441, 0x43a, 0x440, 0x435, 0x441, 0x435, 0x43d, 0x44c, 0x435, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x44c, 0x43d, 0x438,
-0x43a, 0x3b, 0x432, 0x442, 0x43e, 0x440, 0x43d, 0x438, 0x43a, 0x3b, 0x441, 0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432,
-0x435, 0x440, 0x433, 0x3b, 0x43f, 0x44f, 0x442, 0x43d, 0x438, 0x446, 0x430, 0x3b, 0x441, 0x443, 0x431, 0x431, 0x43e, 0x442, 0x430, 0x432,
-0x441, 0x3b, 0x43f, 0x43d, 0x3b, 0x432, 0x442, 0x3b, 0x441, 0x440, 0x3b, 0x447, 0x442, 0x3b, 0x43f, 0x442, 0x3b, 0x441, 0x431, 0x412,
-0x3b, 0x41f, 0x3b, 0x412, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f, 0x3b, 0x421, 0x42, 0x69, 0x6b, 0x75, 0x61, 0x2d, 0xf4, 0x6b,
-0x6f, 0x3b, 0x42, 0xef, 0x6b, 0x75, 0x61, 0x2d, 0xfb, 0x73, 0x65, 0x3b, 0x42, 0xef, 0x6b, 0x75, 0x61, 0x2d, 0x70, 0x74,
-0xe2, 0x3b, 0x42, 0xef, 0x6b, 0x75, 0x61, 0x2d, 0x75, 0x73, 0xef, 0xf6, 0x3b, 0x42, 0xef, 0x6b, 0x75, 0x61, 0x2d, 0x6f,
-0x6b, 0xfc, 0x3b, 0x4c, 0xe2, 0x70, 0xf4, 0x73, 0xf6, 0x3b, 0x4c, 0xe2, 0x79, 0x65, 0x6e, 0x67, 0x61, 0x42, 0x6b, 0x31,
-0x3b, 0x42, 0x6b, 0x32, 0x3b, 0x42, 0x6b, 0x33, 0x3b, 0x42, 0x6b, 0x34, 0x3b, 0x42, 0x6b, 0x35, 0x3b, 0x4c, 0xe2, 0x70,
-0x3b, 0x4c, 0xe2, 0x79, 0x4b, 0x3b, 0x53, 0x3b, 0x54, 0x3b, 0x53, 0x3b, 0x4b, 0x3b, 0x50, 0x3b, 0x59, 0x43d, 0x435, 0x434,
-0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x459, 0x430, 0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440, 0x430, 0x43a,
-0x3b, 0x441, 0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x440, 0x442, 0x430, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430,
-0x43a, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434, 0x3b, 0x43f, 0x43e, 0x43d, 0x3b, 0x443, 0x442, 0x43e, 0x3b,
-0x441, 0x440, 0x435, 0x3b, 0x447, 0x435, 0x442, 0x3b, 0x43f, 0x435, 0x442, 0x3b, 0x441, 0x443, 0x431, 0x43d, 0x3b, 0x43f, 0x3b, 0x443,
-0x3b, 0x441, 0x3b, 0x447, 0x3b, 0x43f, 0x3b, 0x441, 0x6e, 0x65, 0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e,
-0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x61, 0x6b, 0x3b, 0x73, 0x72, 0x69, 0x6a, 0x65,
-0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74, 0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b, 0x3b, 0x73, 0x75,
-0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65, 0x64, 0x3b, 0x70, 0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x3b, 0x73, 0x72, 0x3b, 0x10d, 0x65,
-0x74, 0x3b, 0x70, 0x65, 0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x64, 0x3b, 0x70, 0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x6f,
-0x3b, 0x73, 0x72, 0x65, 0x3b, 0x10d, 0x65, 0x74, 0x3b, 0x70, 0x65, 0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x64, 0x65,
-0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x61,
-0x6b, 0x3b, 0x73, 0x72, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74, 0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74,
-0x61, 0x6b, 0x3b, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x43d, 0x435, 0x434, 0x458, 0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d,
-0x435, 0x434, 0x435, 0x459, 0x430, 0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440, 0x430, 0x43a, 0x3b, 0x441, 0x440, 0x438, 0x458, 0x435, 0x434,
-0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x440, 0x442, 0x430, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430, 0x43a, 0x3b, 0x441, 0x443, 0x431,
-0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434, 0x3b, 0x43f, 0x43e, 0x43d, 0x3b, 0x443, 0x442, 0x3b, 0x441, 0x440, 0x3b, 0x447, 0x435, 0x442,
-0x3b, 0x43f, 0x435, 0x442, 0x3b, 0x441, 0x443, 0x431, 0x425, 0x443, 0x44b, 0x446, 0x430, 0x443, 0x431, 0x43e, 0x43d, 0x3b, 0x41a, 0x44a,
-0x443, 0x44b, 0x440, 0x438, 0x441, 0x4d5, 0x440, 0x3b, 0x414, 0x44b, 0x446, 0x446, 0x4d5, 0x433, 0x3b, 0x4d4, 0x440, 0x442, 0x44b, 0x446,
-0x446, 0x4d5, 0x433, 0x3b, 0x426, 0x44b, 0x43f, 0x43f, 0x4d5, 0x440, 0x4d5, 0x43c, 0x3b, 0x41c, 0x430, 0x439, 0x440, 0x4d5, 0x43c, 0x431,
-0x43e, 0x43d, 0x3b, 0x421, 0x430, 0x431, 0x430, 0x442, 0x445, 0x443, 0x44b, 0x446, 0x430, 0x443, 0x431, 0x43e, 0x43d, 0x3b, 0x43a, 0x44a,
-0x443, 0x44b, 0x440, 0x438, 0x441, 0x4d5, 0x440, 0x3b, 0x434, 0x44b, 0x446, 0x446, 0x4d5, 0x433, 0x3b, 0x4d5, 0x440, 0x442, 0x44b, 0x446,
-0x446, 0x4d5, 0x433, 0x3b, 0x446, 0x44b, 0x43f, 0x43f, 0x4d5, 0x440, 0x4d5, 0x43c, 0x3b, 0x43c, 0x430, 0x439, 0x440, 0x4d5, 0x43c, 0x431,
-0x43e, 0x43d, 0x3b, 0x441, 0x430, 0x431, 0x430, 0x442, 0x425, 0x446, 0x431, 0x3b, 0x41a, 0x440, 0x441, 0x3b, 0x414, 0x446, 0x433, 0x3b,
-0x4d4, 0x440, 0x442, 0x3b, 0x426, 0x43f, 0x440, 0x3b, 0x41c, 0x440, 0x431, 0x3b, 0x421, 0x431, 0x442, 0x445, 0x446, 0x431, 0x3b, 0x43a,
-0x440, 0x441, 0x3b, 0x434, 0x446, 0x433, 0x3b, 0x4d5, 0x440, 0x442, 0x3b, 0x446, 0x43f, 0x440, 0x3b, 0x43c, 0x440, 0x431, 0x3b, 0x441,
-0x431, 0x442, 0x425, 0x3b, 0x41a, 0x3b, 0x414, 0x3b, 0x4d4, 0x3b, 0x426, 0x3b, 0x41c, 0x3b, 0x421, 0x53, 0x76, 0x6f, 0x6e, 0x64,
-0x6f, 0x3b, 0x4d, 0x75, 0x76, 0x68, 0x75, 0x72, 0x6f, 0x3b, 0x43, 0x68, 0x69, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x43, 0x68,
-0x69, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x43, 0x68, 0x69, 0x6e, 0x61, 0x3b, 0x43, 0x68, 0x69, 0x73, 0x68, 0x61, 0x6e, 0x75,
-0x3b, 0x4d, 0x75, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x53, 0x76, 0x6f, 0x3b, 0x4d, 0x75, 0x76, 0x3b, 0x43, 0x68, 0x70,
-0x3b, 0x43, 0x68, 0x74, 0x3b, 0x43, 0x68, 0x6e, 0x3b, 0x43, 0x68, 0x73, 0x3b, 0x4d, 0x75, 0x67, 0x53, 0x3b, 0x4d, 0x3b,
-0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x4d, 0x622, 0x686, 0x631, 0x3b, 0x633, 0x648, 0x645, 0x631, 0x3b, 0x627, 0x6b1,
-0x627, 0x631, 0x648, 0x3b, 0x627, 0x631, 0x628, 0x639, 0x3b, 0x62e, 0x645, 0x64a, 0x633, 0x3b, 0x62c, 0x645, 0x639, 0x648, 0x3b, 0x687,
-0x646, 0x687, 0x631, 0x622, 0x686, 0x631, 0x3b, 0x633, 0x648, 0x3b, 0x627, 0x6b1, 0x627, 0x631, 0x648, 0x3b, 0x627, 0x631, 0x628, 0x639,
-0x3b, 0x62e, 0x645, 0x3b, 0x62c, 0x645, 0x639, 0x648, 0x3b, 0x687, 0x646, 0x687, 0x631, 0xd89, 0xdbb, 0xdd2, 0xdaf, 0xdcf, 0x3b, 0xdc3,
-0xdb3, 0xdd4, 0xdaf, 0xdcf, 0x3b, 0xd85, 0xd9f, 0xdc4, 0xdbb, 0xdd4, 0xdc0, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdb6, 0xdaf, 0xdcf, 0xdaf, 0xdcf,
-0x3b, 0xdb6, 0xdca, 0x200d, 0xdbb, 0xdc4, 0xdc3, 0xdca, 0xdb4, 0xdad, 0xdd2, 0xdb1, 0xdca, 0xdaf, 0xdcf, 0x3b, 0xdc3, 0xdd2, 0xd9a, 0xdd4,
-0xdbb, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdc3, 0xdd9, 0xdb1, 0xdc3, 0xdd4, 0xdbb, 0xdcf, 0xdaf, 0xdcf, 0xd89, 0xdbb, 0xdd2, 0xdaf, 0xdcf, 0x3b,
-0xdc3, 0xdb3, 0xdd4, 0xdaf, 0xdcf, 0x3b, 0xd85, 0xd9f, 0xdc4, 0x3b, 0xdb6, 0xdaf, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdb6, 0xdca, 0x200d, 0xdbb,
-0xdc4, 0xdc3, 0xdca, 0x3b, 0xdc3, 0xdd2, 0xd9a, 0xdd4, 0x3b, 0xdc3, 0xdd9, 0xdb1, 0xd89, 0x3b, 0xdc3, 0x3b, 0xd85, 0x3b, 0xdb6, 0x3b,
-0xdb6, 0xdca, 0x200d, 0xdbb, 0x3b, 0xdc3, 0xdd2, 0x3b, 0xdc3, 0xdd9, 0x6e, 0x65, 0x64, 0x65, 0x13e, 0x61, 0x3b, 0x70, 0x6f, 0x6e,
-0x64, 0x65, 0x6c, 0x6f, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6b, 0x3b, 0x73, 0x74, 0x72, 0x65, 0x64, 0x61, 0x3b,
-0x161, 0x74, 0x76, 0x72, 0x74, 0x6f, 0x6b, 0x3b, 0x70, 0x69, 0x61, 0x74, 0x6f, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74,
-0x61, 0x6e, 0x65, 0x3b, 0x70, 0x6f, 0x3b, 0x75, 0x74, 0x3b, 0x73, 0x74, 0x3b, 0x161, 0x74, 0x3b, 0x70, 0x69, 0x3b, 0x73,
-0x6f, 0x6e, 0x3b, 0x70, 0x3b, 0x75, 0x3b, 0x73, 0x3b, 0x161, 0x3b, 0x70, 0x3b, 0x73, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a,
-0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x65, 0x6b, 0x3b, 0x74, 0x6f, 0x72, 0x65, 0x6b, 0x3b, 0x73,
-0x72, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74, 0x72, 0x74, 0x65, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x65, 0x6b, 0x3b, 0x73,
-0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65, 0x64, 0x2e, 0x3b, 0x70, 0x6f, 0x6e, 0x2e, 0x3b, 0x74, 0x6f, 0x72, 0x2e, 0x3b,
-0x73, 0x72, 0x65, 0x2e, 0x3b, 0x10d, 0x65, 0x74, 0x2e, 0x3b, 0x70, 0x65, 0x74, 0x2e, 0x3b, 0x73, 0x6f, 0x62, 0x2e, 0x6e,
-0x3b, 0x70, 0x3b, 0x74, 0x3b, 0x73, 0x3b, 0x10d, 0x3b, 0x70, 0x3b, 0x73, 0x41, 0x78, 0x61, 0x64, 0x3b, 0x49, 0x73, 0x6e,
-0x69, 0x69, 0x6e, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x61, 0x64, 0x6f, 0x3b, 0x41, 0x72, 0x62, 0x61, 0x63, 0x6f, 0x3b, 0x4b,
-0x68, 0x61, 0x6d, 0x69, 0x69, 0x73, 0x3b, 0x4a, 0x69, 0x6d, 0x63, 0x6f, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x69, 0x41, 0x78,
-0x64, 0x3b, 0x49, 0x73, 0x6e, 0x3b, 0x54, 0x6c, 0x64, 0x6f, 0x3b, 0x41, 0x72, 0x62, 0x63, 0x3b, 0x4b, 0x68, 0x6d, 0x73,
-0x3b, 0x4a, 0x6d, 0x63, 0x3b, 0x53, 0x62, 0x74, 0x69, 0x41, 0x3b, 0x49, 0x3b, 0x54, 0x3b, 0x41, 0x3b, 0x4b, 0x68, 0x3b,
-0x4a, 0x3b, 0x53, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x6c, 0x75, 0x6e, 0x65, 0x73, 0x3b, 0x6d, 0x61, 0x72,
-0x74, 0x65, 0x73, 0x3b, 0x6d, 0x69, 0xe9, 0x72, 0x63, 0x6f, 0x6c, 0x65, 0x73, 0x3b, 0x6a, 0x75, 0x65, 0x76, 0x65, 0x73,
-0x3b, 0x76, 0x69, 0x65, 0x72, 0x6e, 0x65, 0x73, 0x3b, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x2e, 0x3b,
-0x6c, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0x69, 0xe9, 0x2e, 0x3b, 0x6a, 0x75, 0x65, 0x2e, 0x3b,
-0x76, 0x69, 0x65, 0x2e, 0x3b, 0x73, 0xe1, 0x62, 0x2e, 0x4a, 0x75, 0x6d, 0x61, 0x70, 0x69, 0x6c, 0x69, 0x3b, 0x4a, 0x75,
-0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74,
-0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b,
-0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x73, 0xf6, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x6d, 0xe5, 0x6e, 0x64, 0x61,
-0x67, 0x3b, 0x74, 0x69, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x6f, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x6f, 0x72, 0x73,
-0x64, 0x61, 0x67, 0x3b, 0x66, 0x72, 0x65, 0x64, 0x61, 0x67, 0x3b, 0x6c, 0xf6, 0x72, 0x64, 0x61, 0x67, 0x73, 0xf6, 0x6e,
-0x3b, 0x6d, 0xe5, 0x6e, 0x3b, 0x74, 0x69, 0x73, 0x3b, 0x6f, 0x6e, 0x73, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x3b, 0x66, 0x72,
-0x65, 0x3b, 0x6c, 0xf6, 0x72, 0x42f, 0x43a, 0x448, 0x430, 0x43d, 0x431, 0x435, 0x3b, 0x414, 0x443, 0x448, 0x430, 0x43d, 0x431, 0x435,
-0x3b, 0x421, 0x435, 0x448, 0x430, 0x43d, 0x431, 0x435, 0x3b, 0x427, 0x43e, 0x440, 0x448, 0x430, 0x43d, 0x431, 0x435, 0x3b, 0x41f, 0x430,
-0x43d, 0x4b7, 0x448, 0x430, 0x43d, 0x431, 0x435, 0x3b, 0x4b6, 0x443, 0x43c, 0x44a, 0x430, 0x3b, 0x428, 0x430, 0x43d, 0x431, 0x435, 0x42f,
-0x448, 0x431, 0x3b, 0x414, 0x448, 0x431, 0x3b, 0x421, 0x448, 0x431, 0x3b, 0x427, 0x448, 0x431, 0x3b, 0x41f, 0x448, 0x431, 0x3b, 0x4b6,
-0x43c, 0x44a, 0x3b, 0x428, 0x43d, 0x431, 0x42f, 0x3b, 0x414, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f, 0x3b, 0x4b6, 0x3b, 0x428, 0xb9e,
-0xbbe, 0xbaf, 0xbbf, 0xbb1, 0xbc1, 0x3b, 0xba4, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbb3, 0xbcd, 0x3b, 0xb9a, 0xbc6, 0xbb5, 0xbcd, 0xbb5, 0xbbe,
-0xbaf, 0xbcd, 0x3b, 0xbaa, 0xbc1, 0xba4, 0xba9, 0xbcd, 0x3b, 0xbb5, 0xbbf, 0xbaf, 0xbbe, 0xbb4, 0xba9, 0xbcd, 0x3b, 0xbb5, 0xbc6, 0xbb3,
-0xbcd, 0xbb3, 0xbbf, 0x3b, 0xb9a, 0xba9, 0xbbf, 0xb9e, 0xbbe, 0xbaf, 0xbbf, 0x2e, 0x3b, 0xba4, 0xbbf, 0xb99, 0xbcd, 0x2e, 0x3b, 0xb9a,
-0xbc6, 0xbb5, 0xbcd, 0x2e, 0x3b, 0xbaa, 0xbc1, 0xba4, 0x2e, 0x3b, 0xbb5, 0xbbf, 0xbaf, 0xbbe, 0x2e, 0x3b, 0xbb5, 0xbc6, 0xbb3, 0xbcd,
-0x2e, 0x3b, 0xb9a, 0xba9, 0xbbf, 0xb9e, 0xbbe, 0x3b, 0xba4, 0xbbf, 0x3b, 0xb9a, 0xbc6, 0x3b, 0xbaa, 0xbc1, 0x3b, 0xbb5, 0xbbf, 0x3b,
-0xbb5, 0xbc6, 0x3b, 0xb9a, 0x44f, 0x43a, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b, 0x434, 0x4af, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b,
-0x441, 0x438, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b, 0x447, 0x4d9, 0x440, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b, 0x43f, 0x4d9, 0x43d,
-0x497, 0x435, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b, 0x497, 0x43e, 0x43c, 0x433, 0x430, 0x3b, 0x448, 0x438, 0x43c, 0x431, 0x4d9, 0x44f,
-0x43a, 0x448, 0x2e, 0x3b, 0x434, 0x4af, 0x448, 0x2e, 0x3b, 0x441, 0x438, 0x448, 0x2e, 0x3b, 0x447, 0x4d9, 0x440, 0x2e, 0x3b, 0x43f,
-0x4d9, 0x43d, 0x497, 0x2e, 0x3b, 0x497, 0x43e, 0x43c, 0x2e, 0x3b, 0x448, 0x438, 0x43c, 0x2e, 0x42f, 0x3b, 0x414, 0x3b, 0x421, 0x3b,
-0x427, 0x3b, 0x41f, 0x3b, 0x496, 0x3b, 0x428, 0xc06, 0xc26, 0xc3f, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc38, 0xc4b, 0xc2e, 0xc35, 0xc3e,
-0xc30, 0xc02, 0x3b, 0xc2e, 0xc02, 0xc17, 0xc33, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc2c, 0xc41, 0xc27, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b,
-0xc17, 0xc41, 0xc30, 0xc41, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc36, 0xc41, 0xc15, 0xc4d, 0xc30, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc36,
-0xc28, 0xc3f, 0xc35, 0xc3e, 0xc30, 0xc02, 0xc06, 0xc26, 0xc3f, 0x3b, 0xc38, 0xc4b, 0xc2e, 0x3b, 0xc2e, 0xc02, 0xc17, 0xc33, 0x3b, 0xc2c,
-0xc41, 0xc27, 0x3b, 0xc17, 0xc41, 0xc30, 0xc41, 0x3b, 0xc36, 0xc41, 0xc15, 0xc4d, 0xc30, 0x3b, 0xc36, 0xc28, 0xc3f, 0xc06, 0x3b, 0xc38,
-0xc4b, 0x3b, 0xc2e, 0x3b, 0xc2c, 0xc41, 0x3b, 0xc17, 0xc41, 0x3b, 0xc36, 0xc41, 0x3b, 0xc36, 0xe27, 0xe31, 0xe19, 0xe2d, 0xe32, 0xe17,
-0xe34, 0xe15, 0xe22, 0xe4c, 0x3b, 0xe27, 0xe31, 0xe19, 0xe08, 0xe31, 0xe19, 0xe17, 0xe23, 0xe4c, 0x3b, 0xe27, 0xe31, 0xe19, 0xe2d, 0xe31,
-0xe07, 0xe04, 0xe32, 0xe23, 0x3b, 0xe27, 0xe31, 0xe19, 0xe1e, 0xe38, 0xe18, 0x3b, 0xe27, 0xe31, 0xe19, 0xe1e, 0xe24, 0xe2b, 0xe31, 0xe2a,
-0xe1a, 0xe14, 0xe35, 0x3b, 0xe27, 0xe31, 0xe19, 0xe28, 0xe38, 0xe01, 0xe23, 0xe4c, 0x3b, 0xe27, 0xe31, 0xe19, 0xe40, 0xe2a, 0xe32, 0xe23,
-0xe4c, 0xe2d, 0xe32, 0x2e, 0x3b, 0xe08, 0x2e, 0x3b, 0xe2d, 0x2e, 0x3b, 0xe1e, 0x2e, 0x3b, 0xe1e, 0xe24, 0x2e, 0x3b, 0xe28, 0x2e,
-0x3b, 0xe2a, 0x2e, 0xe2d, 0xe32, 0x3b, 0xe08, 0x3b, 0xe2d, 0x3b, 0xe1e, 0x3b, 0xe1e, 0xe24, 0x3b, 0xe28, 0x3b, 0xe2a, 0xf42, 0xf5f,
-0xf60, 0xf0b, 0xf49, 0xf72, 0xf0b, 0xf58, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf5f, 0xfb3, 0xf0b, 0xf56, 0xf0b, 0x3b, 0xf42, 0xf5f,
-0xf60, 0xf0b, 0xf58, 0xf72, 0xf42, 0xf0b, 0xf51, 0xf58, 0xf62, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf63, 0xfb7, 0xf42, 0xf0b, 0xf54,
-0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf55, 0xf74, 0xf62, 0xf0b, 0xf56, 0xf74, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf54, 0xf0b,
-0xf66, 0xf44, 0xf66, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0xf0b, 0xf54, 0xf0b, 0xf49, 0xf72, 0xf0b, 0xf58,
-0xf0b, 0x3b, 0xf5f, 0xfb3, 0xf0b, 0xf56, 0xf0b, 0x3b, 0xf58, 0xf72, 0xf42, 0xf0b, 0xf51, 0xf58, 0xf62, 0xf0b, 0x3b, 0xf63, 0xfb7, 0xf42,
-0xf0b, 0xf54, 0xf0b, 0x3b, 0xf55, 0xf74, 0xf62, 0xf0b, 0xf56, 0xf74, 0xf0b, 0x3b, 0xf54, 0xf0b, 0xf66, 0xf44, 0xf66, 0xf0b, 0x3b, 0xf66,
-0xfa4, 0xf7a, 0xf53, 0xf0b, 0xf54, 0xf0b, 0xf49, 0xf72, 0x3b, 0xf5f, 0xfb3, 0x3b, 0xf58, 0xf72, 0xf42, 0x3b, 0xf63, 0xfb7, 0xf42, 0x3b,
-0xf55, 0xf74, 0xf62, 0x3b, 0xf66, 0xf44, 0xf66, 0x3b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0x1230, 0x1295, 0x1260, 0x1275, 0x3b, 0x1230, 0x1291, 0x12ed,
-0x3b, 0x1220, 0x1209, 0x1235, 0x3b, 0x1228, 0x1261, 0x12d5, 0x3b, 0x1283, 0x1219, 0x1235, 0x3b, 0x12d3, 0x122d, 0x1262, 0x3b, 0x1240, 0x12f3, 0x121d,
-0x1230, 0x1295, 0x3b, 0x1230, 0x1291, 0x3b, 0x1230, 0x1209, 0x3b, 0x1228, 0x1261, 0x3b, 0x1213, 0x1219, 0x3b, 0x12d3, 0x122d, 0x3b, 0x1240, 0x12f3,
-0x1230, 0x3b, 0x1230, 0x3b, 0x1220, 0x3b, 0x1228, 0x3b, 0x1213, 0x3b, 0x12d3, 0x3b, 0x1240, 0x1230, 0x3b, 0x1230, 0x3b, 0x1230, 0x3b, 0x1228,
-0x3b, 0x1213, 0x3b, 0x12d3, 0x3b, 0x1240, 0x53, 0x101, 0x70, 0x61, 0x74, 0x65, 0x3b, 0x4d, 0x14d, 0x6e, 0x69, 0x74, 0x65, 0x3b,
-0x54, 0x16b, 0x73, 0x69, 0x74, 0x65, 0x3b, 0x50, 0x75, 0x6c, 0x65, 0x6c, 0x75, 0x6c, 0x75, 0x3b, 0x54, 0x75, 0x2bb, 0x61,
-0x70, 0x75, 0x6c, 0x65, 0x6c, 0x75, 0x6c, 0x75, 0x3b, 0x46, 0x61, 0x6c, 0x61, 0x69, 0x74, 0x65, 0x3b, 0x54, 0x6f, 0x6b,
-0x6f, 0x6e, 0x61, 0x6b, 0x69, 0x53, 0x101, 0x70, 0x3b, 0x4d, 0x14d, 0x6e, 0x3b, 0x54, 0x16b, 0x73, 0x3b, 0x50, 0x75, 0x6c,
-0x3b, 0x54, 0x75, 0x2bb, 0x61, 0x3b, 0x46, 0x61, 0x6c, 0x3b, 0x54, 0x6f, 0x6b, 0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x50,
-0x3b, 0x54, 0x3b, 0x46, 0x3b, 0x54, 0x50, 0x61, 0x7a, 0x61, 0x72, 0x3b, 0x50, 0x61, 0x7a, 0x61, 0x72, 0x74, 0x65, 0x73,
-0x69, 0x3b, 0x53, 0x61, 0x6c, 0x131, 0x3b, 0xc7, 0x61, 0x72, 0x15f, 0x61, 0x6d, 0x62, 0x61, 0x3b, 0x50, 0x65, 0x72, 0x15f,
-0x65, 0x6d, 0x62, 0x65, 0x3b, 0x43, 0x75, 0x6d, 0x61, 0x3b, 0x43, 0x75, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x69, 0x50,
-0x61, 0x7a, 0x3b, 0x50, 0x7a, 0x74, 0x3b, 0x53, 0x61, 0x6c, 0x3b, 0xc7, 0x61, 0x72, 0x3b, 0x50, 0x65, 0x72, 0x3b, 0x43,
-0x75, 0x6d, 0x3b, 0x43, 0x6d, 0x74, 0x50, 0x3b, 0x50, 0x3b, 0x53, 0x3b, 0xc7, 0x3b, 0x50, 0x3b, 0x43, 0x3b, 0x43, 0xdd,
-0x65, 0x6b, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x44, 0x75, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x53, 0x69, 0x15f, 0x65,
-0x6e, 0x62, 0x65, 0x3b, 0xc7, 0x61, 0x72, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x50, 0x65, 0x6e, 0x15f, 0x65, 0x6e, 0x62,
-0x65, 0x3b, 0x41, 0x6e, 0x6e, 0x61, 0x3b, 0x15e, 0x65, 0x6e, 0x62, 0x65, 0xfd, 0x65, 0x6b, 0x15f, 0x65, 0x6e, 0x62, 0x65,
-0x3b, 0x64, 0x75, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x73, 0x69, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0xe7, 0x61, 0x72,
-0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x70, 0x65, 0x6e, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x61, 0x6e, 0x6e, 0x61, 0x3b,
-0x15f, 0x65, 0x6e, 0x62, 0x65, 0xdd, 0x65, 0x6b, 0x3b, 0x44, 0x75, 0x15f, 0x3b, 0x53, 0x69, 0x15f, 0x3b, 0xc7, 0x61, 0x72,
-0x3b, 0x50, 0x65, 0x6e, 0x3b, 0x41, 0x6e, 0x6e, 0x3b, 0x15e, 0x65, 0x6e, 0xfd, 0x65, 0x6b, 0x3b, 0x64, 0x75, 0x15f, 0x3b,
-0x73, 0x69, 0x15f, 0x3b, 0xe7, 0x61, 0x72, 0x3b, 0x70, 0x65, 0x6e, 0x3b, 0x61, 0x6e, 0x6e, 0x3b, 0x15f, 0x65, 0x6e, 0xdd,
-0x3b, 0x44, 0x3b, 0x53, 0x3b, 0xc7, 0x3b, 0x50, 0x3b, 0x41, 0x3b, 0x15e, 0x64a, 0x6d5, 0x643, 0x634, 0x6d5, 0x646, 0x628, 0x6d5,
-0x3b, 0x62f, 0x6c8, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x633, 0x6d5, 0x64a, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x686, 0x627,
-0x631, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x67e, 0x6d5, 0x64a, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x62c, 0x6c8, 0x645, 0x6d5,
-0x3b, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x64a, 0x6d5, 0x3b, 0x62f, 0x6c8, 0x3b, 0x633, 0x6d5, 0x3b, 0x686, 0x627, 0x3b, 0x67e, 0x6d5,
-0x3b, 0x62c, 0x6c8, 0x3b, 0x634, 0x6d5, 0x64a, 0x3b, 0x62f, 0x3b, 0x633, 0x3b, 0x686, 0x3b, 0x67e, 0x3b, 0x62c, 0x3b, 0x634, 0x43d,
-0x435, 0x434, 0x456, 0x43b, 0x44f, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x456, 0x43b, 0x43e, 0x43a, 0x3b, 0x432, 0x456, 0x432, 0x442,
-0x43e, 0x440, 0x43e, 0x43a, 0x3b, 0x441, 0x435, 0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x435, 0x440, 0x3b, 0x43f,
-0x2bc, 0x44f, 0x442, 0x43d, 0x438, 0x446, 0x44f, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x41d, 0x3b, 0x41f, 0x3b, 0x412, 0x3b,
-0x421, 0x3b, 0x427, 0x3b, 0x41f, 0x3b, 0x421, 0x627, 0x62a, 0x648, 0x627, 0x631, 0x3b, 0x67e, 0x6cc, 0x631, 0x3b, 0x645, 0x646, 0x6af,
-0x644, 0x3b, 0x628, 0x62f, 0x6be, 0x3b, 0x62c, 0x645, 0x639, 0x631, 0x627, 0x62a, 0x3b, 0x62c, 0x645, 0x639, 0x6c1, 0x3b, 0x6c1, 0x641,
-0x62a, 0x6c1, 0x79, 0x61, 0x6b, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x3b, 0x64, 0x75, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61,
-0x3b, 0x73, 0x65, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x3b, 0x63, 0x68, 0x6f, 0x72, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61,
-0x3b, 0x70, 0x61, 0x79, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x3b, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x73, 0x68, 0x61, 0x6e,
-0x62, 0x61, 0x59, 0x61, 0x6b, 0x3b, 0x44, 0x75, 0x73, 0x68, 0x3b, 0x53, 0x65, 0x73, 0x68, 0x3b, 0x43, 0x68, 0x6f, 0x72,
-0x3b, 0x50, 0x61, 0x79, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x68, 0x61, 0x6e, 0x59, 0x3b, 0x44, 0x3b, 0x53, 0x3b, 0x43,
-0x3b, 0x50, 0x3b, 0x4a, 0x3b, 0x53, 0x6cc, 0x2e, 0x3b, 0x62f, 0x2e, 0x3b, 0x633, 0x2e, 0x3b, 0x686, 0x2e, 0x3b, 0x67e, 0x2e,
-0x3b, 0x62c, 0x2e, 0x3b, 0x634, 0x2e, 0x44f, 0x43a, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x3b, 0x434, 0x443, 0x448, 0x430, 0x43d, 0x431,
-0x430, 0x3b, 0x441, 0x435, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x3b, 0x447, 0x43e, 0x440, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x3b, 0x43f,
-0x430, 0x439, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x3b, 0x436, 0x443, 0x43c, 0x430, 0x3b, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x44f, 0x43a,
-0x448, 0x3b, 0x434, 0x443, 0x448, 0x3b, 0x441, 0x435, 0x448, 0x3b, 0x447, 0x43e, 0x440, 0x3b, 0x43f, 0x430, 0x439, 0x3b, 0x436, 0x443,
-0x43c, 0x3b, 0x448, 0x430, 0x43d, 0x42f, 0x3b, 0x414, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f, 0x3b, 0x416, 0x3b, 0x428, 0x43, 0x68,
-0x1ee7, 0x20, 0x4e, 0x68, 0x1ead, 0x74, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x48, 0x61, 0x69, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x42,
-0x61, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x54, 0x1b0, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x4e, 0x103, 0x6d, 0x3b, 0x54, 0x68, 0x1ee9,
-0x20, 0x53, 0xe1, 0x75, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x42, 0x1ea3, 0x79, 0x43, 0x4e, 0x3b, 0x54, 0x68, 0x20, 0x32, 0x3b,
-0x54, 0x68, 0x20, 0x33, 0x3b, 0x54, 0x68, 0x20, 0x34, 0x3b, 0x54, 0x68, 0x20, 0x35, 0x3b, 0x54, 0x68, 0x20, 0x36, 0x3b,
-0x54, 0x68, 0x20, 0x37, 0x43, 0x4e, 0x3b, 0x54, 0x32, 0x3b, 0x54, 0x33, 0x3b, 0x54, 0x34, 0x3b, 0x54, 0x35, 0x3b, 0x54,
-0x36, 0x3b, 0x54, 0x37, 0x73, 0x75, 0x64, 0x65, 0x6c, 0x3b, 0x6d, 0x75, 0x64, 0x65, 0x6c, 0x3b, 0x74, 0x75, 0x64, 0x65,
-0x6c, 0x3b, 0x76, 0x65, 0x64, 0x65, 0x6c, 0x3b, 0x64, 0xf6, 0x64, 0x65, 0x6c, 0x3b, 0x66, 0x72, 0x69, 0x64, 0x65, 0x6c,
-0x3b, 0x7a, 0xe4, 0x64, 0x65, 0x6c, 0x53, 0x75, 0x3b, 0x4d, 0x75, 0x3b, 0x54, 0x75, 0x3b, 0x56, 0x65, 0x3b, 0x44, 0xf6,
-0x3b, 0x46, 0x72, 0x3b, 0x5a, 0xe4, 0x73, 0x75, 0x2e, 0x3b, 0x6d, 0x75, 0x2e, 0x3b, 0x74, 0x75, 0x2e, 0x3b, 0x76, 0x65,
-0x2e, 0x3b, 0x64, 0xf6, 0x2e, 0x3b, 0x66, 0x72, 0x2e, 0x3b, 0x7a, 0xe4, 0x2e, 0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x56,
-0x3b, 0x44, 0x3b, 0x46, 0x3b, 0x5a, 0x44, 0x79, 0x64, 0x64, 0x20, 0x53, 0x75, 0x6c, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20,
-0x4c, 0x6c, 0x75, 0x6e, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x4d, 0x61, 0x77, 0x72, 0x74, 0x68, 0x3b, 0x44, 0x79, 0x64,
-0x64, 0x20, 0x4d, 0x65, 0x72, 0x63, 0x68, 0x65, 0x72, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x49, 0x61, 0x75, 0x3b, 0x44,
-0x79, 0x64, 0x64, 0x20, 0x47, 0x77, 0x65, 0x6e, 0x65, 0x72, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x53, 0x61, 0x64, 0x77,
-0x72, 0x6e, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x6c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x77, 0x3b, 0x4d, 0x65, 0x72, 0x3b, 0x49,
-0x61, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x3b, 0x53, 0x61, 0x64, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x6c, 0x75, 0x6e, 0x3b, 0x4d,
-0x61, 0x77, 0x3b, 0x4d, 0x65, 0x72, 0x3b, 0x49, 0x61, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x6e, 0x3b, 0x53, 0x61, 0x64, 0x53,
-0x3b, 0x4c, 0x6c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x49, 0x3b, 0x47, 0x3b, 0x53, 0x44, 0x69, 0x62, 0xe9, 0x65, 0x72, 0x3b,
-0x41, 0x6c, 0x74, 0x69, 0x6e, 0x65, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x61, 0x74, 0x61, 0x3b, 0xc0, 0x6c, 0x61, 0x72, 0x62,
-0x61, 0x3b, 0x41, 0x6c, 0x78, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0xc0, 0x6a, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x65,
-0x65, 0x72, 0x44, 0x69, 0x62, 0x3b, 0x41, 0x6c, 0x74, 0x3b, 0x54, 0x61, 0x6c, 0x3b, 0xc0, 0x6c, 0x61, 0x3b, 0x41, 0x6c,
-0x78, 0x3b, 0xc0, 0x6a, 0x6a, 0x3b, 0x41, 0x73, 0x65, 0x43, 0x61, 0x77, 0x65, 0x3b, 0x4d, 0x76, 0x75, 0x6c, 0x6f, 0x3b,
-0x4c, 0x77, 0x65, 0x73, 0x69, 0x62, 0x69, 0x6e, 0x69, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x74, 0x68, 0x61, 0x74, 0x68,
-0x75, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x6e, 0x65, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x68, 0x6c, 0x61, 0x6e, 0x75,
-0x3b, 0x4d, 0x67, 0x71, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x43, 0x61, 0x77, 0x3b, 0x4d, 0x76, 0x75, 0x3b, 0x42, 0x69, 0x6e,
-0x3b, 0x54, 0x68, 0x61, 0x3b, 0x53, 0x69, 0x6e, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d, 0x67, 0x71, 0x5d6, 0x5d5, 0x5e0, 0x5d8,
-0x5d9, 0x5e7, 0x3b, 0x5de, 0x5d0, 0x5b8, 0x5e0, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5d3, 0x5d9, 0x5e0, 0x5e1, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5de,
-0x5d9, 0x5d8, 0x5d5, 0x5d5, 0x5d0, 0x5da, 0x3b, 0x5d3, 0x5d0, 0x5e0, 0x5e2, 0x5e8, 0x5e9, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5e4, 0x5bf, 0x5e8,
-0x5f2, 0x5b7, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5e9, 0x5d1, 0x5ea, 0xc0, 0xec, 0x6b, 0xfa, 0x3b, 0x41, 0x6a, 0xe9, 0x3b, 0xcc, 0x73,
-0x1eb9, 0x301, 0x67, 0x75, 0x6e, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x72, 0xfa, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x62, 0x1ecd, 0x3b,
-0x1eb8, 0x74, 0xec, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0x1eb9, 0x301, 0x74, 0x61, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0xc0, 0xec, 0x6b,
-0xfa, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0x41, 0x6a, 0xe9, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0xcc, 0x73, 0x1eb9, 0x301,
-0x67, 0x75, 0x6e, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x72, 0xfa, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x62, 0x1ecd, 0x3b, 0x1ecc, 0x6a,
-0x1ecd, 0x301, 0x20, 0x1eb8, 0x74, 0xec, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0xc0, 0x62, 0xe1, 0x6d, 0x1eb9, 0x301, 0x74, 0x61,
-0xc0, 0xec, 0x6b, 0x3b, 0x41, 0x6a, 0x3b, 0xcc, 0x73, 0x1eb9, 0x301, 0x67, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x72, 0x3b, 0x1ecc,
-0x6a, 0x1ecd, 0x301, 0x62, 0x3b, 0x1eb8, 0x74, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0xc0, 0x3b, 0x41, 0x3b, 0xcc, 0x3b, 0x1ecc, 0x3b,
-0x1ecc, 0x3b, 0x1eb8, 0x3b, 0xc0, 0xc0, 0xec, 0x6b, 0xfa, 0x3b, 0x41, 0x6a, 0xe9, 0x3b, 0xcc, 0x73, 0x25b, 0x301, 0x67, 0x75,
-0x6e, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x72, 0xfa, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x62, 0x254, 0x3b, 0x190, 0x74, 0xec, 0x3b,
-0xc0, 0x62, 0xe1, 0x6d, 0x25b, 0x301, 0x74, 0x61, 0x186, 0x6a, 0x254, 0x301, 0x20, 0xc0, 0xec, 0x6b, 0xfa, 0x3b, 0x186, 0x6a,
-0x254, 0x301, 0x20, 0x41, 0x6a, 0xe9, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x20, 0xcc, 0x73, 0x25b, 0x301, 0x67, 0x75, 0x6e, 0x3b,
-0x186, 0x6a, 0x254, 0x301, 0x72, 0xfa, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x62, 0x254, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x20, 0x190,
-0x74, 0xec, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x20, 0xc0, 0x62, 0xe1, 0x6d, 0x25b, 0x301, 0x74, 0x61, 0xc0, 0xec, 0x6b, 0x3b,
-0x41, 0x6a, 0x3b, 0xcc, 0x73, 0x25b, 0x301, 0x67, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x72, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x62,
-0x3b, 0x190, 0x74, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0xc0, 0x3b, 0x41, 0x3b, 0xcc, 0x3b, 0x186, 0x3b, 0x186, 0x3b, 0x190, 0x3b,
-0xc0, 0x49, 0x53, 0x6f, 0x6e, 0x74, 0x6f, 0x3b, 0x55, 0x4d, 0x73, 0x6f, 0x6d, 0x62, 0x75, 0x6c, 0x75, 0x6b, 0x6f, 0x3b,
-0x55, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x3b, 0x55, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x74, 0x68, 0x61,
-0x74, 0x68, 0x75, 0x3b, 0x55, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x6e, 0x65, 0x3b, 0x55, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x68,
-0x6c, 0x61, 0x6e, 0x75, 0x3b, 0x55, 0x4d, 0x67, 0x71, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x73,
-0x6f, 0x3b, 0x42, 0x69, 0x6c, 0x3b, 0x54, 0x68, 0x61, 0x3b, 0x53, 0x69, 0x6e, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d, 0x67,
-0x71, 0x53, 0x3b, 0x4d, 0x3b, 0x42, 0x3b, 0x54, 0x3b, 0x53, 0x3b, 0x48, 0x3b, 0x4d, 0x73, 0xf8, 0x6e, 0x64, 0x61, 0x67,
-0x3b, 0x6d, 0xe5, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x79, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x6f, 0x6e, 0x73, 0x64, 0x61,
-0x67, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x66, 0x72, 0x65, 0x64, 0x61, 0x67, 0x3b, 0x6c, 0x61, 0x75,
-0x72, 0x64, 0x61, 0x67, 0x73, 0xf8, 0x6e, 0x3b, 0x6d, 0xe5, 0x6e, 0x3b, 0x74, 0x79, 0x73, 0x3b, 0x6f, 0x6e, 0x73, 0x3b,
-0x74, 0x6f, 0x72, 0x3b, 0x66, 0x72, 0x65, 0x3b, 0x6c, 0x61, 0x75, 0x73, 0xf8, 0x2e, 0x3b, 0x6d, 0xe5, 0x2e, 0x3b, 0x74,
-0x79, 0x2e, 0x3b, 0x6f, 0x6e, 0x2e, 0x3b, 0x74, 0x6f, 0x2e, 0x3b, 0x66, 0x72, 0x2e, 0x3b, 0x6c, 0x61, 0x2e, 0x43d, 0x435,
-0x434, 0x458, 0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x458, 0x435, 0x459, 0x430, 0x43a, 0x3b, 0x443, 0x442, 0x43e,
-0x440, 0x430, 0x43a, 0x3b, 0x441, 0x440, 0x438, 0x458, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x440, 0x442, 0x430, 0x43a,
-0x3b, 0x43f, 0x435, 0x442, 0x430, 0x43a, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434, 0x3b, 0x43f, 0x43e, 0x43d,
-0x3b, 0x443, 0x442, 0x43e, 0x3b, 0x441, 0x440, 0x438, 0x3b, 0x447, 0x435, 0x442, 0x3b, 0x43f, 0x435, 0x442, 0x3b, 0x441, 0x443, 0x431,
-0x4a, 0x65, 0x64, 0x6f, 0x6f, 0x6e, 0x65, 0x65, 0x3b, 0x4a, 0x65, 0x6c, 0x68, 0x65, 0x69, 0x6e, 0x3b, 0x4a, 0x65, 0x6d,
-0x61, 0x79, 0x72, 0x74, 0x3b, 0x4a, 0x65, 0x72, 0x63, 0x65, 0x61, 0x6e, 0x3b, 0x4a, 0x65, 0x72, 0x64, 0x65, 0x69, 0x6e,
-0x3b, 0x4a, 0x65, 0x68, 0x65, 0x69, 0x6e, 0x65, 0x79, 0x3b, 0x4a, 0x65, 0x73, 0x61, 0x72, 0x6e, 0x4a, 0x65, 0x64, 0x3b,
-0x4a, 0x65, 0x6c, 0x3b, 0x4a, 0x65, 0x6d, 0x3b, 0x4a, 0x65, 0x72, 0x63, 0x3b, 0x4a, 0x65, 0x72, 0x64, 0x3b, 0x4a, 0x65,
-0x68, 0x3b, 0x4a, 0x65, 0x73, 0x64, 0x79, 0x20, 0x53, 0x75, 0x6c, 0x3b, 0x64, 0x79, 0x20, 0x4c, 0x75, 0x6e, 0x3b, 0x64,
-0x79, 0x20, 0x4d, 0x65, 0x75, 0x72, 0x74, 0x68, 0x3b, 0x64, 0x79, 0x20, 0x4d, 0x65, 0x72, 0x68, 0x65, 0x72, 0x3b, 0x64,
-0x79, 0x20, 0x59, 0x6f, 0x77, 0x3b, 0x64, 0x79, 0x20, 0x47, 0x77, 0x65, 0x6e, 0x65, 0x72, 0x3b, 0x64, 0x79, 0x20, 0x53,
-0x61, 0x64, 0x6f, 0x72, 0x6e, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x74, 0x68, 0x3b, 0x4d, 0x68, 0x72,
-0x3b, 0x59, 0x6f, 0x77, 0x3b, 0x47, 0x77, 0x65, 0x3b, 0x53, 0x61, 0x64, 0x4b, 0x77, 0x65, 0x73, 0x69, 0x64, 0x61, 0x3b,
-0x44, 0x77, 0x6f, 0x77, 0x64, 0x61, 0x3b, 0x42, 0x65, 0x6e, 0x61, 0x64, 0x61, 0x3b, 0x57, 0x75, 0x6b, 0x75, 0x64, 0x61,
-0x3b, 0x59, 0x61, 0x77, 0x64, 0x61, 0x3b, 0x46, 0x69, 0x64, 0x61, 0x3b, 0x4d, 0x65, 0x6d, 0x65, 0x6e, 0x65, 0x64, 0x61,
-0x4b, 0x77, 0x65, 0x3b, 0x44, 0x77, 0x6f, 0x3b, 0x42, 0x65, 0x6e, 0x3b, 0x57, 0x75, 0x6b, 0x3b, 0x59, 0x61, 0x77, 0x3b,
-0x46, 0x69, 0x61, 0x3b, 0x4d, 0x65, 0x6d, 0x4b, 0x3b, 0x44, 0x3b, 0x42, 0x3b, 0x57, 0x3b, 0x59, 0x3b, 0x46, 0x3b, 0x4d,
-0x906, 0x92f, 0x924, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x933, 0x93e, 0x930, 0x3b, 0x92c,
-0x941, 0x927, 0x935, 0x93e, 0x930, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x935, 0x93e, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x93e,
-0x930, 0x3b, 0x936, 0x947, 0x928, 0x935, 0x93e, 0x930, 0x906, 0x3b, 0x938, 0x94b, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x3b, 0x917,
-0x941, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0x947, 0x53, 0x1ecd, 0x6e, 0x64, 0x65, 0x65, 0x3b, 0x4d, 0x1ecd, 0x6e, 0x64, 0x65, 0x3b,
-0x54, 0x69, 0x75, 0x7a, 0x64, 0x65, 0x65, 0x3b, 0x57, 0x65, 0x6e, 0x65, 0x7a, 0x64, 0x65, 0x65, 0x3b, 0x54, 0x1ecd, 0x1ecd,
-0x7a, 0x64, 0x65, 0x65, 0x3b, 0x46, 0x72, 0x61, 0x1ecb, 0x64, 0x65, 0x65, 0x3b, 0x53, 0x61, 0x74, 0x1ecd, 0x64, 0x65, 0x65,
-0x1ee4, 0x6b, 0x61, 0x3b, 0x4d, 0x1ecd, 0x6e, 0x3b, 0x54, 0x69, 0x75, 0x3b, 0x57, 0x65, 0x6e, 0x3b, 0x54, 0x1ecd, 0x1ecd, 0x3b,
-0x46, 0x72, 0x61, 0x1ecb, 0x3b, 0x53, 0x61, 0x74, 0x57, 0x61, 0x20, 0x6b, 0x79, 0x75, 0x6d, 0x77, 0x61, 0x3b, 0x57, 0x61,
-0x20, 0x6b, 0x77, 0x61, 0x6d, 0x62, 0x129, 0x6c, 0x129, 0x6c, 0x79, 0x61, 0x3b, 0x57, 0x61, 0x20, 0x6b, 0x65, 0x6c, 0x129,
-0x3b, 0x57, 0x61, 0x20, 0x6b, 0x61, 0x74, 0x61, 0x74, 0x169, 0x3b, 0x57, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x61, 0x3b, 0x57,
-0x61, 0x20, 0x6b, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x57, 0x61, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x74, 0x68, 0x61, 0x74,
-0x169, 0x57, 0x6b, 0x79, 0x3b, 0x57, 0x6b, 0x77, 0x3b, 0x57, 0x6b, 0x6c, 0x3b, 0x57, 0x74, 0x169, 0x3b, 0x57, 0x6b, 0x6e,
-0x3b, 0x57, 0x74, 0x6e, 0x3b, 0x57, 0x74, 0x68, 0x59, 0x3b, 0x57, 0x3b, 0x45, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b,
-0x41, 0x64, 0x6f, 0x6d, 0x65, 0x6e, 0x69, 0x65, 0x3b, 0x6c, 0x75, 0x6e, 0x69, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x61,
-0x72, 0x73, 0x3b, 0x6d, 0x69, 0x65, 0x72, 0x63, 0x75, 0x73, 0x3b, 0x6a, 0x6f, 0x69, 0x62, 0x65, 0x3b, 0x76, 0x69, 0x6e,
-0x61, 0x72, 0x73, 0x3b, 0x73, 0x61, 0x62, 0x69, 0x64, 0x65, 0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61,
-0x72, 0x3b, 0x6d, 0x69, 0x65, 0x3b, 0x6a, 0x6f, 0x69, 0x3b, 0x76, 0x69, 0x6e, 0x3b, 0x73, 0x61, 0x62, 0x6b, 0x254, 0x73,
-0x69, 0x256, 0x61, 0x3b, 0x64, 0x7a, 0x6f, 0x256, 0x61, 0x3b, 0x62, 0x6c, 0x61, 0x256, 0x61, 0x3b, 0x6b, 0x75, 0x256, 0x61,
-0x3b, 0x79, 0x61, 0x77, 0x6f, 0x256, 0x61, 0x3b, 0x66, 0x69, 0x256, 0x61, 0x3b, 0x6d, 0x65, 0x6d, 0x6c, 0x65, 0x256, 0x61,
-0x6b, 0x254, 0x73, 0x3b, 0x64, 0x7a, 0x6f, 0x3b, 0x62, 0x6c, 0x61, 0x3b, 0x6b, 0x75, 0x256, 0x3b, 0x79, 0x61, 0x77, 0x3b,
-0x66, 0x69, 0x256, 0x3b, 0x6d, 0x65, 0x6d, 0x6b, 0x3b, 0x64, 0x3b, 0x62, 0x3b, 0x6b, 0x3b, 0x79, 0x3b, 0x66, 0x3b, 0x6d,
-0x4c, 0x101, 0x70, 0x75, 0x6c, 0x65, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6b, 0x61, 0x68, 0x69, 0x3b, 0x50, 0x6f, 0x2bb, 0x61,
-0x6c, 0x75, 0x61, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6b, 0x6f, 0x6c, 0x75, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x68, 0x101, 0x3b,
-0x50, 0x6f, 0x2bb, 0x61, 0x6c, 0x69, 0x6d, 0x61, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6f, 0x6e, 0x6f, 0x4c, 0x50, 0x3b, 0x50,
-0x31, 0x3b, 0x50, 0x32, 0x3b, 0x50, 0x33, 0x3b, 0x50, 0x34, 0x3b, 0x50, 0x35, 0x3b, 0x50, 0x36, 0x4c, 0x69, 0x6e, 0x67,
-0x67, 0x6f, 0x3b, 0x4c, 0x75, 0x6e, 0x65, 0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x4d, 0x69, 0x79, 0x65,
-0x72, 0x6b, 0x75, 0x6c, 0x65, 0x73, 0x3b, 0x48, 0x75, 0x77, 0x65, 0x62, 0x65, 0x73, 0x3b, 0x42, 0x69, 0x79, 0x65, 0x72,
-0x6e, 0x65, 0x73, 0x3b, 0x53, 0x61, 0x62, 0x61, 0x64, 0x6f, 0x4c, 0x69, 0x6e, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x61,
-0x72, 0x3b, 0x4d, 0x69, 0x79, 0x3b, 0x48, 0x75, 0x77, 0x3b, 0x42, 0x69, 0x79, 0x3b, 0x53, 0x61, 0x62, 0x53, 0x75, 0x6e,
-0x6e, 0x74, 0x69, 0x67, 0x3b, 0x4d, 0xe4, 0xe4, 0x6e, 0x74, 0x69, 0x67, 0x3b, 0x5a, 0x69, 0x69, 0x73, 0x63, 0x68, 0x74,
-0x69, 0x67, 0x3b, 0x4d, 0x69, 0x74, 0x74, 0x77, 0x75, 0x63, 0x68, 0x3b, 0x44, 0x75, 0x6e, 0x73, 0x63, 0x68, 0x74, 0x69,
-0x67, 0x3b, 0x46, 0x72, 0x69, 0x69, 0x74, 0x69, 0x67, 0x3b, 0x53, 0x61, 0x6d, 0x73, 0x63, 0x68, 0x74, 0x69, 0x67, 0x53,
-0x75, 0x2e, 0x3b, 0x4d, 0xe4, 0x2e, 0x3b, 0x5a, 0x69, 0x2e, 0x3b, 0x4d, 0x69, 0x2e, 0x3b, 0x44, 0x75, 0x2e, 0x3b, 0x46,
-0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0xa46d, 0xa18f, 0xa44d, 0x3b, 0xa18f, 0xa282, 0xa2cd, 0x3b, 0xa18f, 0xa282, 0xa44d, 0x3b, 0xa18f, 0xa282,
-0xa315, 0x3b, 0xa18f, 0xa282, 0xa1d6, 0x3b, 0xa18f, 0xa282, 0xa26c, 0x3b, 0xa18f, 0xa282, 0xa0d8, 0xa46d, 0xa18f, 0x3b, 0xa18f, 0xa2cd, 0x3b, 0xa18f,
-0xa44d, 0x3b, 0xa18f, 0xa315, 0x3b, 0xa18f, 0xa1d6, 0x3b, 0xa18f, 0xa26c, 0x3b, 0xa18f, 0xa0d8, 0xa18f, 0x3b, 0xa2cd, 0x3b, 0xa44d, 0x3b, 0xa315,
-0x3b, 0xa1d6, 0x3b, 0xa26c, 0x3b, 0xa0d8, 0x53, 0xfc, 0x6e, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x4d, 0x61, 0x61, 0x6e, 0x64, 0x61,
-0x67, 0x3b, 0x44, 0x69, 0x6e, 0x67, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x4d, 0x69, 0x64, 0x64, 0x65, 0x77, 0x65, 0x6b, 0x65,
-0x6e, 0x3b, 0x44, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x46, 0x72, 0x65, 0x65, 0x64, 0x61, 0x67,
-0x3b, 0x53, 0xfc, 0x6e, 0x6e, 0x61, 0x76, 0x65, 0x6e, 0x64, 0x53, 0xfc, 0x2e, 0x3b, 0x4d, 0x61, 0x2e, 0x3b, 0x44, 0x69,
-0x2e, 0x3b, 0x4d, 0x69, 0x2e, 0x3b, 0x44, 0x75, 0x2e, 0x3b, 0x46, 0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x73, 0x6f, 0x74,
-0x6e, 0x61, 0x62, 0x65, 0x61, 0x69, 0x76, 0x69, 0x3b, 0x76, 0x75, 0x6f, 0x73, 0x73, 0xe1, 0x72, 0x67, 0x61, 0x3b, 0x6d,
-0x61, 0x14b, 0x14b, 0x65, 0x62, 0xe1, 0x72, 0x67, 0x61, 0x3b, 0x67, 0x61, 0x73, 0x6b, 0x61, 0x76, 0x61, 0x68, 0x6b, 0x6b,
-0x75, 0x3b, 0x64, 0x75, 0x6f, 0x72, 0x61, 0x73, 0x64, 0x61, 0x74, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x6a, 0x61, 0x64, 0x61,
-0x74, 0x3b, 0x6c, 0xe1, 0x76, 0x76, 0x61, 0x72, 0x64, 0x61, 0x74, 0x73, 0x6f, 0x74, 0x6e, 0x3b, 0x76, 0x75, 0x6f, 0x73,
-0x3b, 0x6d, 0x61, 0x14b, 0x3b, 0x67, 0x61, 0x73, 0x6b, 0x3b, 0x64, 0x75, 0x6f, 0x72, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x3b,
-0x6c, 0xe1, 0x76, 0x53, 0x3b, 0x56, 0x3b, 0x4d, 0x3b, 0x47, 0x3b, 0x44, 0x3b, 0x42, 0x3b, 0x4c, 0x73, 0x6f, 0x74, 0x6e,
-0x61, 0x62, 0x65, 0x61, 0x69, 0x76, 0x69, 0x3b, 0x6d, 0xe1, 0x6e, 0x6e, 0x6f, 0x64, 0x61, 0x74, 0x3b, 0x64, 0x69, 0x73,
-0x64, 0x61, 0x74, 0x3b, 0x67, 0x61, 0x73, 0x6b, 0x61, 0x76, 0x61, 0x68, 0x6b, 0x6b, 0x75, 0x3b, 0x64, 0x75, 0x6f, 0x72,
-0x61, 0x73, 0x74, 0x61, 0x74, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x6a, 0x61, 0x64, 0x61, 0x74, 0x3b, 0x6c, 0xe1, 0x76, 0x76,
-0x6f, 0x72, 0x64, 0x61, 0x74, 0x73, 0x6f, 0x3b, 0x6d, 0xe1, 0x3b, 0x64, 0x69, 0x3b, 0x67, 0x61, 0x3b, 0x64, 0x75, 0x3b,
-0x62, 0x65, 0x3b, 0x6c, 0xe1, 0x53, 0x3b, 0x4d, 0x3b, 0x44, 0x3b, 0x47, 0x3b, 0x44, 0x3b, 0x42, 0x3b, 0x4c, 0x43, 0x68,
-0x75, 0x6d, 0x61, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x43, 0x68, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x6f, 0x3b, 0x43, 0x68,
-0x75, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x3b, 0x43, 0x68, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x72, 0x61,
-0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x63, 0x68, 0x75, 0x6d, 0x61, 0x3b, 0x45, 0x73, 0x61, 0x62, 0x61, 0x74, 0x6f, 0x43,
-0x70, 0x72, 0x3b, 0x43, 0x74, 0x74, 0x3b, 0x43, 0x6d, 0x6e, 0x3b, 0x43, 0x6d, 0x74, 0x3b, 0x41, 0x72, 0x73, 0x3b, 0x49,
-0x63, 0x6d, 0x3b, 0x45, 0x73, 0x74, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x45, 0x49,
-0x74, 0x75, 0x6b, 0x75, 0x20, 0x6a, 0x61, 0x20, 0x6a, 0x75, 0x6d, 0x77, 0x61, 0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d, 0x75,
-0x6b, 0x61, 0x20, 0x6a, 0x69, 0x6d, 0x77, 0x65, 0x72, 0x69, 0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x20,
-0x6b, 0x61, 0x77, 0x69, 0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x20, 0x6b, 0x61, 0x64, 0x61, 0x64, 0x75,
-0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x61, 0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d,
-0x75, 0x6b, 0x61, 0x20, 0x6b, 0x61, 0x73, 0x61, 0x6e, 0x75, 0x3b, 0x4b, 0x69, 0x66, 0x75, 0x6c, 0x61, 0x20, 0x6e, 0x67,
-0x75, 0x77, 0x6f, 0x4a, 0x75, 0x6d, 0x3b, 0x4a, 0x69, 0x6d, 0x3b, 0x4b, 0x61, 0x77, 0x3b, 0x4b, 0x61, 0x64, 0x3b, 0x4b,
-0x61, 0x6e, 0x3b, 0x4b, 0x61, 0x73, 0x3b, 0x4e, 0x67, 0x75, 0x4a, 0x3b, 0x4a, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b,
-0x4b, 0x3b, 0x4e, 0x64, 0x65, 0x77, 0x6f, 0x3b, 0x61, 0x61, 0x253, 0x6e, 0x64, 0x65, 0x3b, 0x6d, 0x61, 0x77, 0x62, 0x61,
-0x61, 0x72, 0x65, 0x3b, 0x6e, 0x6a, 0x65, 0x73, 0x6c, 0x61, 0x61, 0x72, 0x65, 0x3b, 0x6e, 0x61, 0x61, 0x73, 0x61, 0x61,
-0x6e, 0x64, 0x65, 0x3b, 0x6d, 0x61, 0x77, 0x6e, 0x64, 0x65, 0x3b, 0x68, 0x6f, 0x6f, 0x72, 0x65, 0x2d, 0x62, 0x69, 0x69,
-0x72, 0x64, 0x65, 0x77, 0x3b, 0x61, 0x61, 0x253, 0x3b, 0x6d, 0x61, 0x77, 0x3b, 0x6e, 0x6a, 0x65, 0x3b, 0x6e, 0x61, 0x61,
-0x3b, 0x6d, 0x77, 0x64, 0x3b, 0x68, 0x62, 0x69, 0x64, 0x3b, 0x61, 0x3b, 0x6d, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6d, 0x3b,
-0x68, 0x4b, 0x69, 0x75, 0x6d, 0x69, 0x61, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x169, 0x3b, 0x4e, 0x6a,
-0x75, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x61, 0x3b, 0x41, 0x72, 0x61,
-0x6d, 0x69, 0x74, 0x68, 0x69, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x6d, 0x6f,
-0x74, 0x68, 0x69, 0x4b, 0x4d, 0x41, 0x3b, 0x4e, 0x54, 0x54, 0x3b, 0x4e, 0x4d, 0x4e, 0x3b, 0x4e, 0x4d, 0x54, 0x3b, 0x41,
-0x52, 0x54, 0x3b, 0x4e, 0x4d, 0x41, 0x3b, 0x4e, 0x4d, 0x4d, 0x4b, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x41, 0x3b,
-0x4e, 0x3b, 0x4e, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x61, 0x72, 0x65, 0x3b, 0x4d, 0x64, 0x65,
-0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x6b, 0x75, 0x6e, 0x69, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65,
-0x65, 0x20, 0x6f, 0x6e, 0x67, 0x2019, 0x77, 0x61, 0x6e, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20,
-0x69, 0x6e, 0x65, 0x74, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x69, 0x6c, 0x65, 0x3b, 0x4d,
-0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x73, 0x61, 0x70, 0x61, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74,
-0x20, 0x65, 0x65, 0x20, 0x6b, 0x77, 0x65, 0x41, 0x72, 0x65, 0x3b, 0x4b, 0x75, 0x6e, 0x3b, 0x4f, 0x6e, 0x67, 0x3b, 0x49,
-0x6e, 0x65, 0x3b, 0x49, 0x6c, 0x65, 0x3b, 0x53, 0x61, 0x70, 0x3b, 0x4b, 0x77, 0x65, 0x41, 0x3b, 0x4b, 0x3b, 0x4f, 0x3b,
-0x49, 0x3b, 0x49, 0x3b, 0x53, 0x3b, 0x4b, 0x44, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x43, 0x68, 0x69, 0x70, 0x6f,
-0x73, 0x69, 0x3b, 0x43, 0x68, 0x69, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x43, 0x68, 0x69, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x43,
-0x68, 0x69, 0x6e, 0x61, 0x69, 0x3b, 0x43, 0x68, 0x69, 0x73, 0x68, 0x61, 0x6e, 0x75, 0x3b, 0x53, 0x61, 0x62, 0x75, 0x64,
-0x75, 0x44, 0x69, 0x6d, 0x3b, 0x50, 0x6f, 0x73, 0x3b, 0x50, 0x69, 0x72, 0x3b, 0x54, 0x61, 0x74, 0x3b, 0x4e, 0x61, 0x69,
-0x3b, 0x53, 0x68, 0x61, 0x3b, 0x53, 0x61, 0x62, 0x44, 0x3b, 0x50, 0x3b, 0x43, 0x3b, 0x54, 0x3b, 0x4e, 0x3b, 0x53, 0x3b,
-0x53, 0x53, 0x6f, 0x6e, 0x74, 0x6f, 0x3b, 0x4d, 0x76, 0x75, 0x6c, 0x6f, 0x3b, 0x53, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x3b,
-0x53, 0x69, 0x74, 0x68, 0x61, 0x74, 0x68, 0x75, 0x3b, 0x53, 0x69, 0x6e, 0x65, 0x3b, 0x53, 0x69, 0x68, 0x6c, 0x61, 0x6e,
-0x75, 0x3b, 0x4d, 0x67, 0x71, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x76, 0x75, 0x3b, 0x53, 0x69,
-0x62, 0x3b, 0x53, 0x69, 0x74, 0x3b, 0x53, 0x69, 0x6e, 0x3b, 0x53, 0x69, 0x68, 0x3b, 0x4d, 0x67, 0x71, 0x53, 0x3b, 0x4d,
-0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x4d, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x70, 0x69, 0x6c, 0x69, 0x3b,
-0x49, 0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x49,
-0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a,
-0x75, 0x6d, 0x61, 0x61, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x49, 0x6a, 0x70, 0x3b, 0x49, 0x6a,
-0x74, 0x3b, 0x49, 0x6a, 0x6e, 0x3b, 0x49, 0x6a, 0x74, 0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x49,
-0x6a, 0x6d, 0x32, 0x3b, 0x33, 0x3b, 0x34, 0x3b, 0x35, 0x3b, 0x36, 0x3b, 0x37, 0x3b, 0x31, 0x2d30, 0x2d59, 0x2d30, 0x2d4e, 0x2d30,
-0x2d59, 0x3b, 0x2d30, 0x2d62, 0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d3d, 0x2d55, 0x2d30, 0x2d59,
-0x3b, 0x2d30, 0x2d3d, 0x2d61, 0x2d30, 0x2d59, 0x3b, 0x2d59, 0x2d49, 0x2d4e, 0x2d61, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d39, 0x2d62, 0x2d30,
-0x2d59, 0x2d30, 0x2d59, 0x2d30, 0x3b, 0x2d30, 0x2d62, 0x2d4f, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x3b, 0x2d30, 0x2d3d, 0x2d55, 0x3b, 0x2d30, 0x2d3d, 0x2d61,
-0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4e, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d39, 0x61, 0x73, 0x61, 0x6d, 0x61, 0x73, 0x3b, 0x61, 0x79, 0x6e,
-0x61, 0x73, 0x3b, 0x61, 0x73, 0x69, 0x6e, 0x61, 0x73, 0x3b, 0x61, 0x6b, 0x1e5b, 0x61, 0x73, 0x3b, 0x61, 0x6b, 0x77, 0x61,
-0x73, 0x3b, 0x61, 0x73, 0x69, 0x6d, 0x77, 0x61, 0x73, 0x3b, 0x61, 0x73, 0x69, 0x1e0d, 0x79, 0x61, 0x73, 0x61, 0x73, 0x61,
-0x3b, 0x61, 0x79, 0x6e, 0x3b, 0x61, 0x73, 0x69, 0x3b, 0x61, 0x6b, 0x1e5b, 0x3b, 0x61, 0x6b, 0x77, 0x3b, 0x61, 0x73, 0x69,
-0x6d, 0x3b, 0x61, 0x73, 0x69, 0x1e0d, 0x41, 0x63, 0x65, 0x72, 0x3b, 0x41, 0x72, 0x69, 0x6d, 0x3b, 0x41, 0x72, 0x61, 0x6d,
-0x3b, 0x41, 0x68, 0x61, 0x64, 0x3b, 0x41, 0x6d, 0x68, 0x61, 0x64, 0x3b, 0x53, 0x65, 0x6d, 0x3b, 0x53, 0x65, 0x64, 0x59,
-0x61, 0x6e, 0x61, 0x73, 0x73, 0x3b, 0x53, 0x61, 0x6e, 0x61, 0x73, 0x73, 0x3b, 0x4b, 0x72, 0x61, 0x1e0d, 0x61, 0x73, 0x73,
-0x3b, 0x4b, 0x75, 0x1e93, 0x61, 0x73, 0x73, 0x3b, 0x53, 0x61, 0x6d, 0x61, 0x73, 0x73, 0x3b, 0x53, 0x1e0d, 0x69, 0x73, 0x61,
-0x73, 0x73, 0x3b, 0x53, 0x61, 0x79, 0x61, 0x73, 0x73, 0x41, 0x63, 0x65, 0x3b, 0x41, 0x72, 0x69, 0x3b, 0x41, 0x72, 0x61,
-0x3b, 0x41, 0x68, 0x61, 0x3b, 0x41, 0x6d, 0x68, 0x3b, 0x53, 0x65, 0x6d, 0x3b, 0x53, 0x65, 0x64, 0x59, 0x61, 0x6e, 0x3b,
-0x53, 0x61, 0x6e, 0x3b, 0x4b, 0x72, 0x61, 0x1e0d, 0x3b, 0x4b, 0x75, 0x1e93, 0x3b, 0x53, 0x61, 0x6d, 0x3b, 0x53, 0x1e0d, 0x69,
-0x73, 0x3b, 0x53, 0x61, 0x79, 0x59, 0x3b, 0x53, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x53, 0x43, 0x3b,
-0x52, 0x3b, 0x41, 0x3b, 0x48, 0x3b, 0x4d, 0x3b, 0x53, 0x3b, 0x44, 0x53, 0x61, 0x6e, 0x64, 0x65, 0x3b, 0x4f, 0x72, 0x77,
-0x6f, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x7a, 0x61, 0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x62, 0x69, 0x72, 0x69, 0x3b,
-0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x73, 0x68, 0x61, 0x74, 0x75, 0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x6e, 0x61,
-0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x74, 0x61, 0x61, 0x6e, 0x6f, 0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6d, 0x75, 0x6b,
-0x61, 0x61, 0x67, 0x61, 0x53, 0x41, 0x4e, 0x3b, 0x4f, 0x52, 0x4b, 0x3b, 0x4f, 0x4b, 0x42, 0x3b, 0x4f, 0x4b, 0x53, 0x3b,
-0x4f, 0x4b, 0x4e, 0x3b, 0x4f, 0x4b, 0x54, 0x3b, 0x4f, 0x4d, 0x4b, 0x53, 0x3b, 0x4b, 0x3b, 0x52, 0x3b, 0x53, 0x3b, 0x4e,
-0x3b, 0x54, 0x3b, 0x4d, 0x70, 0x61, 0x20, 0x6d, 0x75, 0x6c, 0x75, 0x6e, 0x67, 0x75, 0x3b, 0x70, 0x61, 0x20, 0x73, 0x68,
-0x61, 0x68, 0x75, 0x76, 0x69, 0x6c, 0x75, 0x68, 0x61, 0x3b, 0x70, 0x61, 0x20, 0x68, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x3b,
-0x70, 0x61, 0x20, 0x68, 0x69, 0x64, 0x61, 0x74, 0x75, 0x3b, 0x70, 0x61, 0x20, 0x68, 0x69, 0x74, 0x61, 0x79, 0x69, 0x3b,
-0x70, 0x61, 0x20, 0x68, 0x69, 0x68, 0x61, 0x6e, 0x75, 0x3b, 0x70, 0x61, 0x20, 0x73, 0x68, 0x61, 0x68, 0x75, 0x6c, 0x65,
-0x6d, 0x62, 0x65, 0x6c, 0x61, 0x4d, 0x75, 0x6c, 0x3b, 0x56, 0x69, 0x6c, 0x3b, 0x48, 0x69, 0x76, 0x3b, 0x48, 0x69, 0x64,
-0x3b, 0x48, 0x69, 0x74, 0x3b, 0x48, 0x69, 0x68, 0x3b, 0x4c, 0x65, 0x6d, 0x4d, 0x3b, 0x4a, 0x3b, 0x48, 0x3b, 0x48, 0x3b,
-0x48, 0x3b, 0x57, 0x3b, 0x4a, 0x4a, 0x75, 0x6d, 0x61, 0x70, 0x69, 0x6c, 0x79, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74,
-0x61, 0x74, 0x75, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e,
-0x75, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75,
-0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4a, 0x70, 0x69, 0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6e, 0x6e, 0x3b, 0x4a, 0x74,
-0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x4a, 0x6d, 0x6f, 0x4a, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x4a,
-0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x4a, 0x6b, 0x61, 0x72, 0x69, 0x3b, 0x6e, 0x74, 0x25b, 0x6e, 0x25b, 0x3b, 0x74, 0x61, 0x72,
-0x61, 0x74, 0x61, 0x3b, 0x61, 0x72, 0x61, 0x62, 0x61, 0x3b, 0x61, 0x6c, 0x61, 0x6d, 0x69, 0x73, 0x61, 0x3b, 0x6a, 0x75,
-0x6d, 0x61, 0x3b, 0x73, 0x69, 0x62, 0x69, 0x72, 0x69, 0x6b, 0x61, 0x72, 0x3b, 0x6e, 0x74, 0x25b, 0x3b, 0x74, 0x61, 0x72,
-0x3b, 0x61, 0x72, 0x61, 0x3b, 0x61, 0x6c, 0x61, 0x3b, 0x6a, 0x75, 0x6d, 0x3b, 0x73, 0x69, 0x62, 0x4b, 0x3b, 0x4e, 0x3b,
-0x54, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x4a, 0x3b, 0x53, 0x4b, 0x69, 0x75, 0x6d, 0x69, 0x61, 0x3b, 0x4e, 0x6a, 0x75, 0x6d,
-0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61,
-0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x72, 0x61, 0x6d, 0x69, 0x74, 0x68, 0x69, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x61,
-0x3b, 0x4e, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x74, 0x68, 0x69, 0x69, 0x4b, 0x6d, 0x61, 0x3b, 0x54, 0x61, 0x74, 0x3b,
-0x49, 0x6e, 0x65, 0x3b, 0x54, 0x61, 0x6e, 0x3b, 0x41, 0x72, 0x6d, 0x3b, 0x4d, 0x61, 0x61, 0x3b, 0x4e, 0x4d, 0x4d, 0x4b,
-0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x41, 0x3b, 0x4d, 0x3b, 0x4e, 0x13a4, 0x13be, 0x13d9, 0x13d3, 0x13c6, 0x13cd, 0x13ac, 0x3b,
-0x13a4, 0x13be, 0x13d9, 0x13d3, 0x13c9, 0x13c5, 0x13af, 0x3b, 0x13d4, 0x13b5, 0x13c1, 0x13a2, 0x13a6, 0x3b, 0x13e6, 0x13a2, 0x13c1, 0x13a2, 0x13a6, 0x3b,
-0x13c5, 0x13a9, 0x13c1, 0x13a2, 0x13a6, 0x3b, 0x13e7, 0x13be, 0x13a9, 0x13b6, 0x13cd, 0x13d7, 0x3b, 0x13a4, 0x13be, 0x13d9, 0x13d3, 0x13c8, 0x13d5, 0x13be,
-0x13c6, 0x13cd, 0x13ac, 0x3b, 0x13c9, 0x13c5, 0x13af, 0x3b, 0x13d4, 0x13b5, 0x13c1, 0x3b, 0x13e6, 0x13a2, 0x13c1, 0x3b, 0x13c5, 0x13a9, 0x13c1, 0x3b,
-0x13e7, 0x13be, 0x13a9, 0x3b, 0x13c8, 0x13d5, 0x13be, 0x13c6, 0x3b, 0x13c9, 0x3b, 0x13d4, 0x3b, 0x13e6, 0x3b, 0x13c5, 0x3b, 0x13e7, 0x3b, 0x13a4,
-0x64, 0x69, 0x6d, 0x61, 0x6e, 0x73, 0x3b, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d,
-0x65, 0x72, 0x6b, 0x72, 0x65, 0x64, 0x69, 0x3b, 0x7a, 0x65, 0x64, 0x69, 0x3b, 0x76, 0x61, 0x6e, 0x64, 0x72, 0x65, 0x64,
-0x69, 0x3b, 0x73, 0x61, 0x6d, 0x64, 0x69, 0x64, 0x69, 0x6d, 0x3b, 0x6c, 0x69, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d,
-0x65, 0x72, 0x3b, 0x7a, 0x65, 0x3b, 0x76, 0x61, 0x6e, 0x3b, 0x73, 0x61, 0x6d, 0x64, 0x3b, 0x6c, 0x3b, 0x6d, 0x3b, 0x6d,
-0x3b, 0x7a, 0x3b, 0x76, 0x3b, 0x73, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x70, 0x69, 0x6c, 0x69,
-0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4c, 0x69, 0x64, 0x75,
-0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x68, 0x69, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61,
-0x20, 0x6c, 0x79, 0x61, 0x6e, 0x6e, 0x79, 0x61, 0x6e, 0x6f, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x79,
-0x61, 0x6e, 0x6e, 0x79, 0x61, 0x6e, 0x6f, 0x20, 0x6e, 0x61, 0x20, 0x6c, 0x69, 0x6e, 0x6a, 0x69, 0x3b, 0x4c, 0x69, 0x64,
-0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x6e, 0x6e, 0x79, 0x61, 0x6e, 0x6f, 0x20, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x76,
-0x69, 0x6c, 0x69, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x69, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x4c, 0x6c,
-0x32, 0x3b, 0x4c, 0x6c, 0x33, 0x3b, 0x4c, 0x6c, 0x34, 0x3b, 0x4c, 0x6c, 0x35, 0x3b, 0x4c, 0x6c, 0x36, 0x3b, 0x4c, 0x6c,
-0x37, 0x3b, 0x4c, 0x6c, 0x31, 0x4a, 0x75, 0x6d, 0x61, 0x70, 0xed, 0x69, 0x72, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74,
-0xe1, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0xed, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0xe1, 0x61, 0x6e,
-0x6f, 0x3b, 0x41, 0x6c, 0x61, 0x6d, 0xed, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0xe1, 0x61, 0x3b, 0x4a, 0x75,
-0x6d, 0x61, 0x6d, 0xf3, 0x6f, 0x73, 0x69, 0x50, 0xed, 0x69, 0x6c, 0x69, 0x3b, 0x54, 0xe1, 0x61, 0x74, 0x75, 0x3b, 0xcd,
-0x6e, 0x65, 0x3b, 0x54, 0xe1, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x6d, 0x3b, 0x4d, 0xf3, 0x6f,
-0x73, 0x69, 0x50, 0x3b, 0x54, 0x3b, 0x45, 0x3b, 0x4f, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x4d, 0x53, 0x61, 0x62, 0x62, 0x69,
-0x69, 0x74, 0x69, 0x3b, 0x42, 0x61, 0x6c, 0x61, 0x7a, 0x61, 0x3b, 0x4c, 0x77, 0x61, 0x6b, 0x75, 0x62, 0x69, 0x72, 0x69,
-0x3b, 0x4c, 0x77, 0x61, 0x6b, 0x75, 0x73, 0x61, 0x74, 0x75, 0x3b, 0x4c, 0x77, 0x61, 0x6b, 0x75, 0x6e, 0x61, 0x3b, 0x4c,
-0x77, 0x61, 0x6b, 0x75, 0x74, 0x61, 0x61, 0x6e, 0x6f, 0x3b, 0x4c, 0x77, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x61, 0x67, 0x61,
-0x53, 0x61, 0x62, 0x3b, 0x42, 0x61, 0x6c, 0x3b, 0x4c, 0x77, 0x32, 0x3b, 0x4c, 0x77, 0x33, 0x3b, 0x4c, 0x77, 0x34, 0x3b,
-0x4c, 0x77, 0x35, 0x3b, 0x4c, 0x77, 0x36, 0x53, 0x3b, 0x42, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b, 0x4c,
-0x50, 0x61, 0x20, 0x4d, 0x75, 0x6c, 0x75, 0x6e, 0x67, 0x75, 0x3b, 0x50, 0x61, 0x6c, 0x69, 0x63, 0x68, 0x69, 0x6d, 0x6f,
-0x3b, 0x50, 0x61, 0x6c, 0x69, 0x63, 0x68, 0x69, 0x62, 0x75, 0x6c, 0x69, 0x3b, 0x50, 0x61, 0x6c, 0x69, 0x63, 0x68, 0x69,
-0x74, 0x61, 0x74, 0x75, 0x3b, 0x50, 0x61, 0x6c, 0x69, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x3b, 0x50, 0x61, 0x6c, 0x69, 0x63,
-0x68, 0x69, 0x73, 0x61, 0x6e, 0x6f, 0x3b, 0x50, 0x61, 0x63, 0x68, 0x69, 0x62, 0x65, 0x6c, 0x75, 0x73, 0x68, 0x69, 0x64,
-0x75, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x73, 0x69, 0x67, 0x75, 0x6e, 0x64, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b,
-0x74, 0x65, 0x72, 0x73, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b, 0x6b, 0x75, 0x61, 0x72, 0x74, 0x61, 0x2d, 0x66, 0x65,
-0x72, 0x61, 0x3b, 0x6b, 0x69, 0x6e, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b, 0x73, 0x65, 0x73, 0x74, 0x61, 0x2d,
-0x66, 0x65, 0x72, 0x61, 0x3b, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x75, 0x64, 0x75, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x73,
-0x69, 0x67, 0x75, 0x6e, 0x64, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b, 0x74, 0x65, 0x72, 0x73, 0x61, 0x2d, 0x66, 0x65,
-0x72, 0x61, 0x3b, 0x6b, 0x75, 0x61, 0x72, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b, 0x6b, 0x69, 0x6e, 0x74, 0x61,
-0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b, 0x73, 0x65, 0x73, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b, 0x73, 0x61, 0x62,
-0x61, 0x64, 0x75, 0x64, 0x75, 0x6d, 0x3b, 0x73, 0x69, 0x67, 0x3b, 0x74, 0x65, 0x72, 0x3b, 0x6b, 0x75, 0x61, 0x3b, 0x6b,
-0x69, 0x6e, 0x3b, 0x73, 0x65, 0x73, 0x3b, 0x73, 0x61, 0x62, 0x44, 0x3b, 0x53, 0x3b, 0x54, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b,
-0x53, 0x3b, 0x53, 0x4b, 0x69, 0x75, 0x6d, 0x69, 0x61, 0x3b, 0x4d, 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6b, 0x6f, 0x3b, 0x57,
-0x61, 0x69, 0x72, 0x69, 0x3b, 0x57, 0x65, 0x74, 0x68, 0x61, 0x74, 0x75, 0x3b, 0x57, 0x65, 0x6e, 0x61, 0x3b, 0x57, 0x65,
-0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4b, 0x49, 0x55, 0x3b, 0x4d, 0x52, 0x41,
-0x3b, 0x57, 0x41, 0x49, 0x3b, 0x57, 0x45, 0x54, 0x3b, 0x57, 0x45, 0x4e, 0x3b, 0x57, 0x54, 0x4e, 0x3b, 0x4a, 0x55, 0x4d,
-0x4b, 0x3b, 0x4d, 0x3b, 0x57, 0x3b, 0x57, 0x3b, 0x57, 0x3b, 0x57, 0x3b, 0x4a, 0x4b, 0x6f, 0x74, 0x69, 0x73, 0x61, 0x70,
-0x3b, 0x4b, 0x6f, 0x74, 0x61, 0x61, 0x69, 0x3b, 0x4b, 0x6f, 0x61, 0x65, 0x6e, 0x67, 0x2019, 0x3b, 0x4b, 0x6f, 0x73, 0x6f,
-0x6d, 0x6f, 0x6b, 0x3b, 0x4b, 0x6f, 0x61, 0x6e, 0x67, 0x2019, 0x77, 0x61, 0x6e, 0x3b, 0x4b, 0x6f, 0x6d, 0x75, 0x75, 0x74,
-0x3b, 0x4b, 0x6f, 0x6c, 0x6f, 0x4b, 0x74, 0x73, 0x3b, 0x4b, 0x6f, 0x74, 0x3b, 0x4b, 0x6f, 0x6f, 0x3b, 0x4b, 0x6f, 0x73,
-0x3b, 0x4b, 0x6f, 0x61, 0x3b, 0x4b, 0x6f, 0x6d, 0x3b, 0x4b, 0x6f, 0x6c, 0x54, 0x3b, 0x54, 0x3b, 0x4f, 0x3b, 0x53, 0x3b,
-0x41, 0x3b, 0x4d, 0x3b, 0x4c, 0x53, 0x6f, 0x6e, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x4d, 0x61, 0x6e,
-0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x44, 0x65, 0x6e, 0x73, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65,
-0x73, 0x3b, 0x57, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x44, 0x6f, 0x6e, 0x64, 0x65,
-0x72, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x46, 0x72, 0x61, 0x69, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65,
-0x65, 0x73, 0x3b, 0x53, 0x61, 0x74, 0x65, 0x72, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x53, 0x6f, 0x6e, 0x3b,
-0x4d, 0x61, 0x3b, 0x44, 0x65, 0x3b, 0x57, 0x75, 0x3b, 0x44, 0x6f, 0x3b, 0x46, 0x72, 0x3b, 0x53, 0x61, 0x74, 0x53, 0x3b,
-0x4d, 0x3b, 0x45, 0x3b, 0x57, 0x3b, 0x44, 0x3b, 0x46, 0x3b, 0x41, 0x53, 0x75, 0x6e, 0x6e, 0x64, 0x61, 0x61, 0x63, 0x68,
-0x3b, 0x4d, 0x6f, 0x68, 0x6e, 0x64, 0x61, 0x61, 0x63, 0x68, 0x3b, 0x44, 0x69, 0x6e, 0x6e, 0x73, 0x64, 0x61, 0x61, 0x63,
-0x68, 0x3b, 0x4d, 0x65, 0x74, 0x77, 0x6f, 0x63, 0x68, 0x3b, 0x44, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x64, 0x61, 0x61,
-0x63, 0x68, 0x3b, 0x46, 0x72, 0x69, 0x69, 0x64, 0x61, 0x61, 0x63, 0x68, 0x3b, 0x53, 0x61, 0x6d, 0x73, 0x64, 0x61, 0x61,
-0x63, 0x68, 0x53, 0x75, 0x2e, 0x3b, 0x4d, 0x6f, 0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b, 0x4d, 0x65, 0x2e, 0x3b, 0x44, 0x75,
-0x2e, 0x3b, 0x46, 0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x4a, 0x75, 0x6d, 0x61, 0x70, 0xed, 0x6c, 0xed, 0x3b, 0x4a, 0x75,
-0x6d, 0x61, 0x74, 0xe1, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0xe1,
-0x6e, 0x254, 0x3b, 0x41, 0x6c, 0x61, 0xe1, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0xe1, 0x61, 0x3b, 0x4a, 0x75,
-0x6d, 0x61, 0x6d, 0xf3, 0x73, 0x69, 0x53, 0x61, 0x62, 0x69, 0x69, 0x74, 0x69, 0x3b, 0x42, 0x61, 0x6c, 0x61, 0x7a, 0x61,
-0x3b, 0x4f, 0x77, 0x6f, 0x6b, 0x75, 0x62, 0x69, 0x6c, 0x69, 0x3b, 0x4f, 0x77, 0x6f, 0x6b, 0x75, 0x73, 0x61, 0x74, 0x75,
-0x3b, 0x4f, 0x6c, 0x6f, 0x6b, 0x75, 0x6e, 0x61, 0x3b, 0x4f, 0x6c, 0x6f, 0x6b, 0x75, 0x74, 0x61, 0x61, 0x6e, 0x75, 0x3b,
-0x4f, 0x6c, 0x6f, 0x6d, 0x75, 0x6b, 0x61, 0x61, 0x67, 0x61, 0x53, 0x61, 0x62, 0x69, 0x3b, 0x42, 0x61, 0x6c, 0x61, 0x3b,
-0x4b, 0x75, 0x62, 0x69, 0x3b, 0x4b, 0x75, 0x73, 0x61, 0x3b, 0x4b, 0x75, 0x6e, 0x61, 0x3b, 0x4b, 0x75, 0x74, 0x61, 0x3b,
-0x4d, 0x75, 0x6b, 0x61, 0x53, 0x3b, 0x42, 0x3b, 0x42, 0x3b, 0x53, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b, 0x4d, 0x4a, 0x75, 0x6d,
-0x61, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e,
-0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x4d, 0x75, 0x72, 0x77, 0x61, 0x20, 0x77, 0x61,
-0x20, 0x4b, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x4d, 0x75, 0x72, 0x77, 0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x61, 0x74, 0x61,
-0x6e, 0x6f, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4a, 0x32, 0x3b, 0x4a, 0x33, 0x3b, 0x4a, 0x34, 0x3b,
-0x4a, 0x35, 0x3b, 0x41, 0x6c, 0x3b, 0x49, 0x6a, 0x3b, 0x4a, 0x31, 0x4a, 0x70, 0x69, 0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a,
-0x6e, 0x6e, 0x3b, 0x4a, 0x74, 0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x6d, 0x3b, 0x4a, 0x6d, 0x6f, 0x4e, 0x61,
-0x6b, 0x61, 0x65, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x4e, 0x61, 0x6b, 0x61, 0x65, 0x62, 0x61, 0x72, 0x61, 0x73, 0x61, 0x3b,
-0x4e, 0x61, 0x6b, 0x61, 0x61, 0x72, 0x65, 0x3b, 0x4e, 0x61, 0x6b, 0x61, 0x75, 0x6e, 0x69, 0x3b, 0x4e, 0x61, 0x6b, 0x61,
-0x75, 0x6e, 0x67, 0x2019, 0x6f, 0x6e, 0x3b, 0x4e, 0x61, 0x6b, 0x61, 0x6b, 0x61, 0x6e, 0x79, 0x3b, 0x4e, 0x61, 0x6b, 0x61,
-0x73, 0x61, 0x62, 0x69, 0x74, 0x69, 0x4a, 0x75, 0x6d, 0x3b, 0x42, 0x61, 0x72, 0x3b, 0x41, 0x61, 0x72, 0x3b, 0x55, 0x6e,
-0x69, 0x3b, 0x55, 0x6e, 0x67, 0x3b, 0x4b, 0x61, 0x6e, 0x3b, 0x53, 0x61, 0x62, 0x4a, 0x3b, 0x42, 0x3b, 0x41, 0x3b, 0x55,
-0x3b, 0x55, 0x3b, 0x4b, 0x3b, 0x53, 0x41, 0x6c, 0x68, 0x61, 0x64, 0x69, 0x3b, 0x41, 0x74, 0x69, 0x6e, 0x69, 0x3b, 0x41,
-0x74, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x62, 0x61, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69,
-0x69, 0x73, 0x61, 0x3b, 0x41, 0x6c, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x73, 0x61, 0x62, 0x64, 0x75, 0x41, 0x6c,
-0x68, 0x3b, 0x41, 0x74, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x3b, 0x41, 0x6c, 0x6d, 0x3b, 0x41, 0x6c,
-0x6a, 0x3b, 0x41, 0x73, 0x73, 0x48, 0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b, 0x53, 0x4a, 0x75,
-0x6d, 0x61, 0x70, 0x69, 0x6c, 0x3b, 0x57, 0x75, 0x6f, 0x6b, 0x20, 0x54, 0x69, 0x63, 0x68, 0x3b, 0x54, 0x69, 0x63, 0x68,
-0x20, 0x41, 0x72, 0x69, 0x79, 0x6f, 0x3b, 0x54, 0x69, 0x63, 0x68, 0x20, 0x41, 0x64, 0x65, 0x6b, 0x3b, 0x54, 0x69, 0x63,
-0x68, 0x20, 0x41, 0x6e, 0x67, 0x2019, 0x77, 0x65, 0x6e, 0x3b, 0x54, 0x69, 0x63, 0x68, 0x20, 0x41, 0x62, 0x69, 0x63, 0x68,
-0x3b, 0x4e, 0x67, 0x65, 0x73, 0x6f, 0x4a, 0x4d, 0x50, 0x3b, 0x57, 0x55, 0x54, 0x3b, 0x54, 0x41, 0x52, 0x3b, 0x54, 0x41,
-0x44, 0x3b, 0x54, 0x41, 0x4e, 0x3b, 0x54, 0x41, 0x42, 0x3b, 0x4e, 0x47, 0x53, 0x4a, 0x3b, 0x57, 0x3b, 0x54, 0x3b, 0x54,
-0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x4e, 0x41, 0x73, 0x61, 0x6d, 0x61, 0x73, 0x3b, 0x41, 0x79, 0x6e, 0x61, 0x73, 0x3b, 0x41,
-0x73, 0x69, 0x6e, 0x61, 0x73, 0x3b, 0x41, 0x6b, 0x72, 0x61, 0x73, 0x3b, 0x41, 0x6b, 0x77, 0x61, 0x73, 0x3b, 0x41, 0x73,
-0x69, 0x6d, 0x77, 0x61, 0x73, 0x3b, 0x41, 0x73, 0x69, 0x1e0d, 0x79, 0x61, 0x73, 0x41, 0x73, 0x61, 0x3b, 0x41, 0x79, 0x6e,
-0x3b, 0x41, 0x73, 0x6e, 0x3b, 0x41, 0x6b, 0x72, 0x3b, 0x41, 0x6b, 0x77, 0x3b, 0x41, 0x73, 0x6d, 0x3b, 0x41, 0x73, 0x1e0d,
-0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x41, 0x6c, 0x68, 0x61, 0x64, 0x69, 0x3b,
-0x41, 0x74, 0x69, 0x6e, 0x6e, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x6c, 0x61, 0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72,
-0x62, 0x61, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x69, 0x73, 0x61, 0x3b, 0x41, 0x6c, 0x7a, 0x75, 0x6d, 0x61, 0x3b,
-0x41, 0x73, 0x69, 0x62, 0x74, 0x69, 0x41, 0x6c, 0x68, 0x3b, 0x41, 0x74, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x3b, 0x41, 0x6c,
-0x61, 0x3b, 0x41, 0x6c, 0x6d, 0x3b, 0x41, 0x6c, 0x7a, 0x3b, 0x41, 0x73, 0x69, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x70, 0x69,
-0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x6e, 0x65, 0x3b,
-0x4a, 0x75, 0x6d, 0x61, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49,
-0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4a, 0x70, 0x69, 0x3b, 0x4a,
-0x74, 0x74, 0x3b, 0x4a, 0x6d, 0x6e, 0x3b, 0x4a, 0x74, 0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x4a,
-0x6d, 0x6f, 0x32, 0x3b, 0x33, 0x3b, 0x34, 0x3b, 0x35, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x31, 0x930, 0x92c, 0x93f, 0x92c, 0x93e,
-0x930, 0x3b, 0x938, 0x92e, 0x92c, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x926, 0x92c,
-0x93e, 0x930, 0x3b, 0x92c, 0x93f, 0x938, 0x925, 0x93f, 0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x941, 0x916, 0x941, 0x930, 0x92c, 0x93e, 0x930,
-0x3b, 0x938, 0x941, 0x928, 0x93f, 0x92c, 0x93e, 0x930, 0x930, 0x92c, 0x93f, 0x3b, 0x938, 0x92e, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x3b,
-0x92c, 0x941, 0x926, 0x3b, 0x92c, 0x93f, 0x938, 0x925, 0x93f, 0x3b, 0x938, 0x941, 0x916, 0x941, 0x930, 0x3b, 0x938, 0x941, 0x928, 0x93f,
-0x930, 0x3b, 0x938, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x3b, 0x92c, 0x93f, 0x3b, 0x938, 0x941, 0x3b, 0x938, 0x941, 0x43a, 0x4c0,
-0x438, 0x440, 0x430, 0x3b, 0x43e, 0x440, 0x448, 0x43e, 0x442, 0x3b, 0x448, 0x438, 0x43d, 0x430, 0x440, 0x430, 0x3b, 0x43a, 0x445, 0x430,
-0x430, 0x440, 0x430, 0x3b, 0x435, 0x430, 0x440, 0x430, 0x3b, 0x43f, 0x4c0, 0x435, 0x440, 0x430, 0x441, 0x43a, 0x430, 0x3b, 0x448, 0x443,
-0x43e, 0x442, 0x43a, 0x4c0, 0x438, 0x3b, 0x43e, 0x440, 0x3b, 0x448, 0x438, 0x3b, 0x43a, 0x445, 0x430, 0x3b, 0x435, 0x430, 0x3b, 0x43f,
-0x4c0, 0x435, 0x3b, 0x448, 0x443, 0x43e, 0x43a, 0x4c0, 0x3b, 0x43e, 0x3b, 0x448, 0x3b, 0x43a, 0x445, 0x3b, 0x435, 0x3b, 0x43f, 0x4c0,
-0x3b, 0x448, 0x43d, 0x435, 0x434, 0x463, 0x301, 0x43b, 0x467, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x463, 0x301, 0x43b, 0x44c, 0x43d,
-0x438, 0x43a, 0x44a, 0x3b, 0x432, 0x442, 0x43e, 0x301, 0x440, 0x43d, 0x438, 0x43a, 0x44a, 0x3b, 0x441, 0x440, 0x435, 0x434, 0x430, 0x300,
-0x3b, 0x447, 0x435, 0x442, 0x432, 0x435, 0x440, 0x442, 0x43e, 0x301, 0x43a, 0x44a, 0x3b, 0x43f, 0x467, 0x442, 0x43e, 0x301, 0x43a, 0x44a,
-0x3b, 0x441, 0xa64b, 0x431, 0x431, 0x461, 0x301, 0x442, 0x430, 0x43d, 0x434, 0x2de7, 0x487, 0x467, 0x3b, 0x43f, 0x43d, 0x2de3, 0x435, 0x3b,
-0x432, 0x442, 0x43e, 0x2dec, 0x487, 0x3b, 0x441, 0x440, 0x2de3, 0x435, 0x3b, 0x447, 0x435, 0x2de6, 0x487, 0x3b, 0x43f, 0x467, 0x2de6, 0x487,
-0x3b, 0x441, 0xa64b, 0x2de0, 0x487, 0x4c, 0x75, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x4e, 0x6b, 0x6f, 0x64, 0x79, 0x61, 0x3b,
-0x4e, 0x64, 0xe0, 0x61, 0x79, 0xe0, 0x3b, 0x4e, 0x64, 0x61, 0x6e, 0x67, 0xf9, 0x3b, 0x4e, 0x6a, 0xf2, 0x77, 0x61, 0x3b,
-0x4e, 0x67, 0xf2, 0x76, 0x79, 0x61, 0x3b, 0x4c, 0x75, 0x62, 0x69, 0x6e, 0x67, 0x75, 0x4c, 0x75, 0x6d, 0x3b, 0x4e, 0x6b,
-0x6f, 0x3b, 0x4e, 0x64, 0x79, 0x3b, 0x4e, 0x64, 0x67, 0x3b, 0x4e, 0x6a, 0x77, 0x3b, 0x4e, 0x67, 0x76, 0x3b, 0x4c, 0x75,
-0x62, 0x4c, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4c, 0x53, 0x6f, 0x6e, 0x6e, 0x64, 0x65,
-0x67, 0x3b, 0x4d, 0xe9, 0x69, 0x6e, 0x64, 0x65, 0x67, 0x3b, 0x44, 0xeb, 0x6e, 0x73, 0x63, 0x68, 0x64, 0x65, 0x67, 0x3b,
-0x4d, 0xeb, 0x74, 0x74, 0x77, 0x6f, 0x63, 0x68, 0x3b, 0x44, 0x6f, 0x6e, 0x6e, 0x65, 0x73, 0x63, 0x68, 0x64, 0x65, 0x67,
-0x3b, 0x46, 0x72, 0x65, 0x69, 0x64, 0x65, 0x67, 0x3b, 0x53, 0x61, 0x6d, 0x73, 0x63, 0x68, 0x64, 0x65, 0x67, 0x53, 0x6f,
-0x6e, 0x3b, 0x4d, 0xe9, 0x69, 0x3b, 0x44, 0xeb, 0x6e, 0x3b, 0x4d, 0xeb, 0x74, 0x3b, 0x44, 0x6f, 0x6e, 0x3b, 0x46, 0x72,
-0x65, 0x3b, 0x53, 0x61, 0x6d, 0x53, 0x6f, 0x6e, 0x2e, 0x3b, 0x4d, 0xe9, 0x69, 0x2e, 0x3b, 0x44, 0xeb, 0x6e, 0x2e, 0x3b,
-0x4d, 0xeb, 0x74, 0x2e, 0x3b, 0x44, 0x6f, 0x6e, 0x2e, 0x3b, 0x46, 0x72, 0x65, 0x2e, 0x3b, 0x53, 0x61, 0x6d, 0x2e, 0x74,
-0x73, 0x75, 0x294, 0x6e, 0x74, 0x73, 0x268, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75, 0x6b, 0x70, 0xe0, 0x3b, 0x74, 0x73, 0x75,
-0x294, 0x75, 0x67, 0x68, 0x254, 0x65, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75, 0x74, 0x254, 0x300, 0x6d, 0x6c, 0xf2, 0x3b, 0x74,
-0x73, 0x75, 0x294, 0x75, 0x6d, 0xe8, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75, 0x67, 0x68, 0x268, 0x302, 0x6d, 0x3b, 0x74, 0x73,
-0x75, 0x294, 0x6e, 0x64, 0x7a, 0x268, 0x6b, 0x254, 0x294, 0x254, 0x6e, 0x74, 0x73, 0x3b, 0x6b, 0x70, 0x61, 0x3b, 0x67, 0x68,
-0x254, 0x3b, 0x74, 0x254, 0x6d, 0x3b, 0x75, 0x6d, 0x65, 0x3b, 0x67, 0x68, 0x268, 0x3b, 0x64, 0x7a, 0x6b, 0x6e, 0x3b, 0x6b,
-0x3b, 0x67, 0x3b, 0x74, 0x3b, 0x75, 0x3b, 0x67, 0x3b, 0x64, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6e, 0x254, 0x302, 0x79, 0x3b,
-0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6e, 0x6a, 0x61, 0x14b, 0x67, 0x75, 0x6d, 0x62, 0x61, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20,
-0xfb, 0x6d, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x14b, 0x67, 0xea, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6d, 0x62, 0x254,
-0x6b, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6b, 0x254, 0x254, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6a, 0xf4, 0x6e, 0x6e,
-0x254, 0x79, 0x3b, 0x6e, 0x6a, 0x61, 0x3b, 0x75, 0x75, 0x6d, 0x3b, 0x14b, 0x67, 0x65, 0x3b, 0x6d, 0x62, 0x254, 0x3b, 0x6b,
-0x254, 0x254, 0x3b, 0x6a, 0x6f, 0x6e, 0x6e, 0x3b, 0x6e, 0x3b, 0x75, 0x3b, 0x14b, 0x3b, 0x6d, 0x3b, 0x6b, 0x3b, 0x6a, 0x41,
-0x6c, 0x68, 0x61, 0x64, 0x69, 0x3b, 0x41, 0x74, 0x69, 0x6e, 0x6e, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x6c, 0x61, 0x61, 0x74,
-0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x62, 0x61, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x41, 0x6c,
-0x7a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x69, 0x62, 0x74, 0x69, 0x48, 0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x4c, 0x3b, 0x4d,
-0x3b, 0x5a, 0x3b, 0x53, 0xe9, 0x74, 0x69, 0x3b, 0x6d, 0x254, 0x301, 0x73, 0xfa, 0x3b, 0x6b, 0x77, 0x61, 0x73, 0xfa, 0x3b,
-0x6d, 0x75, 0x6b, 0x254, 0x301, 0x73, 0xfa, 0x3b, 0x14b, 0x67, 0x69, 0x73, 0xfa, 0x3b, 0x257, 0xf3, 0x6e, 0x25b, 0x73, 0xfa,
-0x3b, 0x65, 0x73, 0x61, 0x253, 0x61, 0x73, 0xfa, 0xe9, 0x74, 0x3b, 0x6d, 0x254, 0x301, 0x73, 0x3b, 0x6b, 0x77, 0x61, 0x3b,
-0x6d, 0x75, 0x6b, 0x3b, 0x14b, 0x67, 0x69, 0x3b, 0x257, 0xf3, 0x6e, 0x3b, 0x65, 0x73, 0x61, 0x65, 0x3b, 0x6d, 0x3b, 0x6b,
-0x3b, 0x6d, 0x3b, 0x14b, 0x3b, 0x257, 0x3b, 0x65, 0x44, 0x69, 0x6d, 0x61, 0x73, 0x3b, 0x54, 0x65, 0x6e, 0x65, 0x14b, 0x3b,
-0x54, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x62, 0x61, 0x79, 0x3b, 0x41, 0x72, 0x61, 0x6d, 0x69,
-0x73, 0x61, 0x79, 0x3b, 0x41, 0x72, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x53, 0x69, 0x62, 0x69, 0x74, 0x69, 0x44, 0x69, 0x6d,
-0x3b, 0x54, 0x65, 0x6e, 0x3b, 0x54, 0x61, 0x6c, 0x3b, 0x41, 0x6c, 0x61, 0x3b, 0x41, 0x72, 0x61, 0x3b, 0x41, 0x72, 0x6a,
-0x3b, 0x53, 0x69, 0x62, 0x44, 0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x53, 0x73, 0x254, 0x301,
-0x6e, 0x64, 0x254, 0x3b, 0x6d, 0x254, 0x301, 0x6e, 0x64, 0x69, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x259,
-0x6c, 0xfa, 0x20, 0x6d, 0x259, 0x301, 0x62, 0x25b, 0x30c, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x259, 0x6c,
-0xfa, 0x20, 0x6d, 0x259, 0x301, 0x6c, 0x25b, 0x301, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x259, 0x6c, 0xfa,
-0x20, 0x6d, 0x259, 0x301, 0x6e, 0x79, 0x69, 0x3b, 0x66, 0xfa, 0x6c, 0x61, 0x64, 0xe9, 0x3b, 0x73, 0xe9, 0x72, 0x61, 0x64,
-0xe9, 0x73, 0x254, 0x301, 0x6e, 0x3b, 0x6d, 0x254, 0x301, 0x6e, 0x3b, 0x73, 0x6d, 0x62, 0x3b, 0x73, 0x6d, 0x6c, 0x3b, 0x73,
-0x6d, 0x6e, 0x3b, 0x66, 0xfa, 0x6c, 0x3b, 0x73, 0xe9, 0x72, 0x73, 0x3b, 0x6d, 0x3b, 0x73, 0x3b, 0x73, 0x3b, 0x73, 0x3b,
-0x66, 0x3b, 0x73, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x1dd, 0x3b, 0x6c, 0x1dd, 0x6e, 0x64, 0xed, 0x3b, 0x6d, 0x61, 0x61, 0x64,
-0xed, 0x3b, 0x6d, 0x25b, 0x6b, 0x72, 0x25b, 0x64, 0xed, 0x3b, 0x6a, 0x1dd, 0x1dd, 0x64, 0xed, 0x3b, 0x6a, 0xfa, 0x6d, 0x62,
-0xe1, 0x3b, 0x73, 0x61, 0x6d, 0x64, 0xed, 0x73, 0x254, 0x301, 0x6e, 0x3b, 0x6c, 0x1dd, 0x6e, 0x3b, 0x6d, 0x61, 0x61, 0x3b,
-0x6d, 0x25b, 0x6b, 0x3b, 0x6a, 0x1dd, 0x1dd, 0x3b, 0x6a, 0xfa, 0x6d, 0x3b, 0x73, 0x61, 0x6d, 0x73, 0x3b, 0x6c, 0x3b, 0x6d,
-0x3b, 0x6d, 0x3b, 0x6a, 0x3b, 0x6a, 0x3b, 0x73, 0x53, 0x61, 0x62, 0x61, 0x74, 0x6f, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74,
-0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f,
-0x3b, 0x41, 0x72, 0x61, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75,
-0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x53, 0x61, 0x62, 0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6e, 0x6e, 0x3b, 0x4a, 0x74,
-0x6e, 0x3b, 0x41, 0x72, 0x61, 0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x4a, 0x6d, 0x6f, 0x53, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x4a,
-0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x4a, 0x43, 0x6f, 0x6d, 0x2019, 0x79, 0x61, 0x6b, 0x6b, 0x65, 0x3b, 0x43, 0x6f, 0x6d, 0x6c,
-0x61, 0x61, 0x257, 0x69, 0x69, 0x3b, 0x43, 0x6f, 0x6d, 0x7a, 0x79, 0x69, 0x69, 0x257, 0x69, 0x69, 0x3b, 0x43, 0x6f, 0x6d,
-0x6b, 0x6f, 0x6c, 0x6c, 0x65, 0x3b, 0x43, 0x6f, 0x6d, 0x6b, 0x61, 0x6c, 0x64, 0x1dd, 0x253, 0x6c, 0x69, 0x69, 0x3b, 0x43,
-0x6f, 0x6d, 0x67, 0x61, 0x69, 0x73, 0x75, 0x75, 0x3b, 0x43, 0x6f, 0x6d, 0x7a, 0x79, 0x65, 0x253, 0x73, 0x75, 0x75, 0x43,
-0x79, 0x61, 0x3b, 0x43, 0x6c, 0x61, 0x3b, 0x43, 0x7a, 0x69, 0x3b, 0x43, 0x6b, 0x6f, 0x3b, 0x43, 0x6b, 0x61, 0x3b, 0x43,
-0x67, 0x61, 0x3b, 0x43, 0x7a, 0x65, 0x59, 0x3b, 0x4c, 0x3b, 0x5a, 0x3b, 0x4f, 0x3b, 0x41, 0x3b, 0x47, 0x3b, 0x45, 0x73,
-0x254, 0x301, 0x6e, 0x64, 0x254, 0x3b, 0x6d, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20,
-0x6d, 0x61, 0x66, 0xfa, 0x20, 0x6d, 0xe1, 0x62, 0x61, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x61, 0x66,
-0xfa, 0x20, 0x6d, 0xe1, 0x6c, 0x61, 0x6c, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x61, 0x66, 0xfa, 0x20,
-0x6d, 0xe1, 0x6e, 0x61, 0x3b, 0x6d, 0x61, 0x62, 0xe1, 0x67, 0xe1, 0x20, 0x6d, 0xe1, 0x20, 0x73, 0x75, 0x6b, 0x75, 0x6c,
-0x3b, 0x73, 0xe1, 0x73, 0x61, 0x64, 0x69, 0x73, 0x254, 0x301, 0x6e, 0x3b, 0x6d, 0x254, 0x301, 0x6e, 0x3b, 0x73, 0x6d, 0x62,
-0x3b, 0x73, 0x6d, 0x6c, 0x3b, 0x73, 0x6d, 0x6e, 0x3b, 0x6d, 0x62, 0x73, 0x3b, 0x73, 0x61, 0x73, 0x73, 0x3b, 0x6d, 0x3b,
-0x73, 0x3b, 0x73, 0x3b, 0x73, 0x3b, 0x6d, 0x3b, 0x73, 0x43, 0xe4, 0x14b, 0x20, 0x6b, 0x75, 0x254, 0x74, 0x68, 0x3b, 0x4a,
-0x69, 0x65, 0x63, 0x20, 0x6c, 0x61, 0x331, 0x74, 0x3b, 0x52, 0x25b, 0x77, 0x20, 0x6c, 0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x44,
-0x69, 0x254, 0x331, 0x6b, 0x20, 0x6c, 0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x14a, 0x75, 0x61, 0x61, 0x6e, 0x20, 0x6c, 0xe4, 0x74,
-0x6e, 0x69, 0x3b, 0x44, 0x68, 0x69, 0x65, 0x65, 0x63, 0x20, 0x6c, 0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x42, 0xe4, 0x6b, 0x25b,
-0x6c, 0x20, 0x6c, 0xe4, 0x74, 0x6e, 0x69, 0x43, 0xe4, 0x14b, 0x3b, 0x4a, 0x69, 0x65, 0x63, 0x3b, 0x52, 0x25b, 0x77, 0x3b,
-0x44, 0x69, 0x254, 0x331, 0x6b, 0x3b, 0x14a, 0x75, 0x61, 0x61, 0x6e, 0x3b, 0x44, 0x68, 0x69, 0x65, 0x65, 0x63, 0x3b, 0x42,
-0xe4, 0x6b, 0x25b, 0x6c, 0x43, 0x3b, 0x4a, 0x3b, 0x52, 0x3b, 0x44, 0x3b, 0x14a, 0x3b, 0x44, 0x3b, 0x42, 0x431, 0x430, 0x441,
-0x43a, 0x44b, 0x4bb, 0x44b, 0x430, 0x43d, 0x43d, 0x44c, 0x430, 0x3b, 0x431, 0x44d, 0x43d, 0x438, 0x434, 0x438, 0x44d, 0x43d, 0x43d, 0x44c,
-0x438, 0x43a, 0x3b, 0x43e, 0x43f, 0x442, 0x443, 0x43e, 0x440, 0x443, 0x43d, 0x43d, 0x44c, 0x443, 0x43a, 0x3b, 0x441, 0x44d, 0x440, 0x44d,
-0x434, 0x44d, 0x3b, 0x447, 0x44d, 0x43f, 0x43f, 0x438, 0x44d, 0x440, 0x3b, 0x411, 0x44d, 0x44d, 0x442, 0x438, 0x4a5, 0x441, 0x44d, 0x3b,
-0x441, 0x443, 0x431, 0x443, 0x43e, 0x442, 0x430, 0x431, 0x441, 0x3b, 0x431, 0x43d, 0x3b, 0x43e, 0x43f, 0x3b, 0x441, 0x44d, 0x3b, 0x447,
-0x43f, 0x3b, 0x431, 0x44d, 0x3b, 0x441, 0x431, 0x411, 0x3b, 0x411, 0x3b, 0x41e, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x411, 0x3b, 0x421,
-0x4d, 0x75, 0x6c, 0x75, 0x6e, 0x67, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d,
-0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x61, 0x68, 0x61, 0x6d,
-0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4d,
-0x75, 0x6c, 0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6e, 0x6e, 0x3b, 0x4a, 0x74, 0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49,
-0x6a, 0x75, 0x3b, 0x4a, 0x6d, 0x6f, 0x4d, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x4a, 0xa55e,
-0xa54c, 0xa535, 0x3b, 0xa5f3, 0xa5e1, 0xa609, 0x3b, 0xa55a, 0xa55e, 0xa55a, 0x3b, 0xa549, 0xa55e, 0xa552, 0x3b, 0xa549, 0xa524, 0xa546, 0xa562, 0x3b,
-0xa549, 0xa524, 0xa540, 0xa56e, 0x3b, 0xa53b, 0xa52c, 0xa533, 0x6c, 0x61, 0x68, 0x61, 0x64, 0x69, 0x3b, 0x74, 0x25b, 0x25b, 0x6e, 0x25b,
-0x25b, 0x3b, 0x74, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b, 0x61, 0x6c, 0x61, 0x62, 0x61, 0x3b, 0x61, 0x69, 0x6d, 0x69, 0x73,
-0x61, 0x3b, 0x61, 0x69, 0x6a, 0x69, 0x6d, 0x61, 0x3b, 0x73, 0x69, 0x253, 0x69, 0x74, 0x69, 0x53, 0x75, 0x6e, 0x6e, 0x74,
-0x61, 0x67, 0x3b, 0x4d, 0xe4, 0x6e, 0x74, 0x61, 0x67, 0x3b, 0x5a, 0x69, 0x161, 0x74, 0x61, 0x67, 0x3b, 0x4d, 0x69, 0x74,
-0x74, 0x77, 0x75, 0x10d, 0x3b, 0x46, 0x72, 0xf3, 0x6e, 0x74, 0x61, 0x67, 0x3b, 0x46, 0x72, 0x69, 0x74, 0x61, 0x67, 0x3b,
-0x53, 0x61, 0x6d, 0x161, 0x74, 0x61, 0x67, 0x53, 0x75, 0x6e, 0x3b, 0x4d, 0xe4, 0x6e, 0x3b, 0x5a, 0x69, 0x161, 0x3b, 0x4d,
-0x69, 0x74, 0x3b, 0x46, 0x72, 0xf3, 0x3b, 0x46, 0x72, 0x69, 0x3b, 0x53, 0x61, 0x6d, 0x53, 0x3b, 0x4d, 0x3b, 0x5a, 0x3b,
-0x4d, 0x3b, 0x46, 0x3b, 0x46, 0x3b, 0x53, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x69, 0x25b, 0x3b, 0x6d, 0xf3, 0x6e, 0x64, 0x69,
-0x65, 0x3b, 0x6d, 0x75, 0xe1, 0x6e, 0x79, 0xe1, 0x14b, 0x6d, 0xf3, 0x6e, 0x64, 0x69, 0x65, 0x3b, 0x6d, 0x65, 0x74, 0xfa,
-0x6b, 0x70, 0xed, 0xe1, 0x70, 0x25b, 0x3b, 0x6b, 0xfa, 0x70, 0xe9, 0x6c, 0x69, 0x6d, 0x65, 0x74, 0xfa, 0x6b, 0x70, 0x69,
-0x61, 0x70, 0x25b, 0x3b, 0x66, 0x65, 0x6c, 0xe9, 0x74, 0x65, 0x3b, 0x73, 0xe9, 0x73, 0x65, 0x6c, 0xe9, 0x73, 0x64, 0x3b,
-0x6d, 0x64, 0x3b, 0x6d, 0x77, 0x3b, 0x65, 0x74, 0x3b, 0x6b, 0x6c, 0x3b, 0x66, 0x6c, 0x3b, 0x73, 0x73, 0x73, 0x3b, 0x6d,
-0x3b, 0x6d, 0x3b, 0x65, 0x3b, 0x6b, 0x3b, 0x66, 0x3b, 0x73, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x6c, 0x6c,
-0x75, 0x6e, 0x65, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x6d, 0x69, 0xe9, 0x72, 0x63, 0x6f, 0x6c, 0x65,
-0x73, 0x3b, 0x78, 0x75, 0x65, 0x76, 0x65, 0x73, 0x3b, 0x76, 0x69, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x3b, 0x73, 0xe1, 0x62,
-0x61, 0x64, 0x75, 0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x6c, 0x75, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d, 0x69, 0xe9, 0x3b, 0x78,
-0x75, 0x65, 0x3b, 0x76, 0x69, 0x65, 0x3b, 0x73, 0xe1, 0x62, 0x53, 0x254, 0x301, 0x6e, 0x64, 0x69, 0x3b, 0x4d, 0x254, 0x301,
-0x6e, 0x64, 0x69, 0x3b, 0xc1, 0x70, 0x74, 0x61, 0x20, 0x4d, 0x254, 0x301, 0x6e, 0x64, 0x69, 0x3b, 0x57, 0x25b, 0x301, 0x6e,
-0x25b, 0x73, 0x25b, 0x64, 0x25b, 0x3b, 0x54, 0x254, 0x301, 0x73, 0x25b, 0x64, 0x25b, 0x3b, 0x46, 0x25b, 0x6c, 0xe2, 0x79, 0x25b,
-0x64, 0x25b, 0x3b, 0x53, 0xe1, 0x73, 0x69, 0x64, 0x25b, 0x53, 0x254, 0x301, 0x3b, 0x4d, 0x254, 0x301, 0x3b, 0xc1, 0x4d, 0x3b,
-0x57, 0x25b, 0x301, 0x3b, 0x54, 0x254, 0x301, 0x3b, 0x46, 0x25b, 0x3b, 0x53, 0xe1, 0x73, 0x254, 0x6e, 0x64, 0x69, 0x3b, 0x6c,
-0x75, 0x6e, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d, 0x25b, 0x72, 0x6b, 0x25b, 0x72, 0x25b, 0x64, 0x69,
-0x3b, 0x79, 0x65, 0x64, 0x69, 0x3b, 0x76, 0x61, 0x14b, 0x64, 0x25b, 0x72, 0x25b, 0x64, 0x69, 0x3b, 0x6d, 0x254, 0x6e, 0x254,
-0x20, 0x73, 0x254, 0x6e, 0x64, 0x69, 0x73, 0x6f, 0x3b, 0x6c, 0x75, 0x3b, 0x6d, 0x61, 0x3b, 0x6d, 0x25b, 0x3b, 0x79, 0x65,
-0x3b, 0x76, 0x61, 0x3b, 0x6d, 0x73, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x31, 0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x32, 0x3b,
-0x41, 0x6e, 0x65, 0x67, 0x20, 0x33, 0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x34, 0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x35,
-0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x36, 0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x37, 0x41, 0x31, 0x3b, 0x41, 0x32, 0x3b,
-0x41, 0x33, 0x3b, 0x41, 0x34, 0x3b, 0x41, 0x35, 0x3b, 0x41, 0x36, 0x3b, 0x41, 0x37, 0x6c, 0x79, 0x25b, 0x2bc, 0x25b, 0x301,
-0x20, 0x73, 0x1e85, 0xed, 0x14b, 0x74, 0xe8, 0x3b, 0x6d, 0x76, 0x66, 0xf2, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d,
-0x62, 0x254, 0x301, 0x254, 0x6e, 0x74, 0xe8, 0x20, 0x6d, 0x76, 0x66, 0xf2, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x74,
-0x73, 0xe8, 0x74, 0x73, 0x25b, 0x300, 0x25b, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0x62, 0x254, 0x301, 0x254, 0x6e,
-0x74, 0xe8, 0x20, 0x74, 0x73, 0x65, 0x74, 0x73, 0x25b, 0x300, 0x25b, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0x76,
-0x66, 0xf2, 0x20, 0x6d, 0xe0, 0x67, 0x61, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0xe0, 0x67, 0x61, 0x20, 0x6c,
-0x79, 0x25b, 0x30c, 0x2bc, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1d, 0xd804, 0xdd28, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804,
-0xdd25, 0xd804, 0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd27, 0xd804, 0xdd01,
-0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd23, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd2a, 0xd804,
-0xdd16, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804, 0xdd28, 0xd804, 0xdd25,
-0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2a, 0xd804, 0xdd07, 0xd804,
-0xdd34, 0xd804, 0xdd07, 0xd804, 0xdd2e, 0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd27,
-0xd804, 0xdd1a, 0xd804, 0xdd28, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1d, 0xd804, 0xdd28, 0x3b, 0xd804,
-0xdd25, 0xd804, 0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd27, 0xd804, 0xdd01, 0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd23,
-0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd2a, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804, 0xdd28,
-0xd804, 0xdd25, 0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2a, 0xd804, 0xdd07, 0xd804, 0xdd34, 0xd804, 0xdd07, 0xd804,
-0xdd2e, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd27, 0xd804, 0xdd1a, 0xd804, 0xdd28, 0xd804, 0xdd22, 0xd804, 0xdd27, 0x3b, 0xd804,
-0xdd25, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd2a, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22,
-0xd804, 0xdd28, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2a, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd27, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x77, 0x61,
-0x6b, 0x21f, 0x61, 0x14b, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x77, 0x61, 0x14b, 0x17e, 0x69, 0x3b, 0x41, 0x14b, 0x70,
-0xe9, 0x74, 0x75, 0x6e, 0x75, 0x14b, 0x70, 0x61, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x79, 0x61, 0x6d, 0x6e, 0x69,
-0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x74, 0x6f, 0x70, 0x61, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x7a, 0x61,
-0x70, 0x74, 0x61, 0x14b, 0x3b, 0x4f, 0x77, 0xe1, 0x14b, 0x67, 0x79, 0x75, 0x17e, 0x61, 0x17e, 0x61, 0x70, 0x69, 0x41, 0x3b,
-0x57, 0x3b, 0x4e, 0x3b, 0x59, 0x3b, 0x54, 0x3b, 0x5a, 0x3b, 0x4f, 0x2d30, 0x2d59, 0x2d30, 0x2d4e, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d62,
-0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d3d, 0x2d55, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d3d, 0x2d61,
-0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4e, 0x2d61, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d39, 0x2d62, 0x2d30, 0x2d59, 0x6cc, 0x6d5,
-0x6a9, 0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x62f, 0x648, 0x648, 0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x633, 0x6ce, 0x634, 0x6d5,
-0x645, 0x645, 0x6d5, 0x3b, 0x686, 0x648, 0x627, 0x631, 0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x67e, 0x6ce, 0x646, 0x62c, 0x634, 0x6d5,
-0x645, 0x645, 0x6d5, 0x3b, 0x6be, 0x6d5, 0x6cc, 0x646, 0x6cc, 0x3b, 0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x6cc, 0x3b, 0x62f, 0x3b, 0x633,
-0x3b, 0x686, 0x3b, 0x67e, 0x3b, 0x6be, 0x3b, 0x634, 0x6e, 0x6a, 0x65, 0x17a, 0x65, 0x6c, 0x61, 0x3b, 0x70, 0xf3, 0x6e, 0x6a,
-0x65, 0x17a, 0x65, 0x6c, 0x65, 0x3b, 0x77, 0x61, 0x142, 0x74, 0x6f, 0x72, 0x61, 0x3b, 0x73, 0x72, 0x6a, 0x6f, 0x64, 0x61,
-0x3b, 0x73, 0x74, 0x77, 0xf3, 0x72, 0x74, 0x6b, 0x3b, 0x70, 0x11b, 0x74, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61,
-0x6e, 0x6a, 0x65, 0x3b, 0x70, 0xf3, 0x6e, 0x3b, 0x77, 0x61, 0x142, 0x3b, 0x73, 0x72, 0x6a, 0x3b, 0x73, 0x74, 0x77, 0x3b,
-0x70, 0x11b, 0x74, 0x3b, 0x73, 0x6f, 0x62, 0x6e, 0x3b, 0x70, 0x3b, 0x77, 0x3b, 0x73, 0x3b, 0x73, 0x3b, 0x70, 0x3b, 0x73,
-0x6e, 0x6a, 0x65, 0x64, 0x17a, 0x65, 0x6c, 0x61, 0x3b, 0x70, 0xf3, 0x6e, 0x64, 0x17a, 0x65, 0x6c, 0x61, 0x3b, 0x77, 0x75,
-0x74, 0x6f, 0x72, 0x61, 0x3b, 0x73, 0x72, 0x6a, 0x65, 0x64, 0x61, 0x3b, 0x161, 0x74, 0x77, 0xf3, 0x72, 0x74, 0x6b, 0x3b,
-0x70, 0x6a, 0x61, 0x74, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x6a, 0x65, 0x3b, 0x70, 0xf3, 0x6e, 0x3b,
-0x77, 0x75, 0x74, 0x3b, 0x73, 0x72, 0x6a, 0x3b, 0x161, 0x74, 0x77, 0x3b, 0x70, 0x6a, 0x61, 0x3b, 0x73, 0x6f, 0x62, 0x6e,
-0x3b, 0x70, 0x3b, 0x77, 0x3b, 0x73, 0x3b, 0x161, 0x3b, 0x70, 0x3b, 0x73, 0x6e, 0x61, 0x64, 0x12b, 0x6c, 0x69, 0x3b, 0x70,
-0x61, 0x6e, 0x61, 0x64, 0x12b, 0x6c, 0x69, 0x3b, 0x77, 0x69, 0x73, 0x61, 0x73, 0x12b, 0x64, 0x69, 0x73, 0x3b, 0x70, 0x75,
-0x73, 0x73, 0x69, 0x73, 0x61, 0x77, 0x61, 0x69, 0x74, 0x69, 0x3b, 0x6b, 0x65, 0x74, 0x77, 0x69, 0x72, 0x74, 0x69, 0x6b,
-0x73, 0x3b, 0x70, 0x113, 0x6e, 0x74, 0x6e, 0x69, 0x6b, 0x73, 0x3b, 0x73, 0x61, 0x62, 0x61, 0x74, 0x74, 0x69, 0x6b, 0x61,
-0x6e, 0x61, 0x64, 0x3b, 0x70, 0x61, 0x6e, 0x3b, 0x77, 0x69, 0x73, 0x3b, 0x70, 0x75, 0x73, 0x3b, 0x6b, 0x65, 0x74, 0x3b,
-0x70, 0x113, 0x6e, 0x3b, 0x73, 0x61, 0x62, 0x4e, 0x3b, 0x50, 0x3b, 0x57, 0x3b, 0x50, 0x3b, 0x4b, 0x3b, 0x50, 0x3b, 0x53,
-0x70, 0x61, 0x73, 0x65, 0x70, 0x65, 0x69, 0x76, 0x69, 0x3b, 0x76, 0x75, 0x6f, 0x73, 0x73, 0x61, 0x72, 0x67, 0xe2, 0x3b,
-0x6d, 0x61, 0x6a, 0x65, 0x62, 0x61, 0x72, 0x67, 0xe2, 0x3b, 0x6b, 0x6f, 0x73, 0x6b, 0x6f, 0x6b, 0x6b, 0x6f, 0x3b, 0x74,
-0x75, 0x6f, 0x72, 0xe2, 0x73, 0x74, 0xe2, 0x68, 0x3b, 0x76, 0xe1, 0x73, 0x74, 0x75, 0x70, 0x70, 0x65, 0x69, 0x76, 0x69,
-0x3b, 0x6c, 0xe1, 0x76, 0x75, 0x72, 0x64, 0xe2, 0x68, 0x70, 0x61, 0x73, 0x65, 0x70, 0x65, 0x65, 0x69, 0x76, 0x69, 0x3b,
-0x76, 0x75, 0x6f, 0x73, 0x73, 0x61, 0x61, 0x72, 0x67, 0xe2, 0x3b, 0x6d, 0x61, 0x6a, 0x65, 0x62, 0x61, 0x61, 0x72, 0x67,
-0xe2, 0x3b, 0x6b, 0x6f, 0x73, 0x6b, 0x6f, 0x68, 0x6f, 0x3b, 0x74, 0x75, 0x6f, 0x72, 0xe2, 0x73, 0x74, 0x75, 0x76, 0x3b,
-0x76, 0xe1, 0x73, 0x74, 0x75, 0x70, 0x70, 0x65, 0x65, 0x69, 0x76, 0x69, 0x3b, 0x6c, 0xe1, 0x76, 0x75, 0x72, 0x64, 0x75,
-0x76, 0x70, 0x61, 0x73, 0x3b, 0x76, 0x75, 0x6f, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6b, 0x6f, 0x73, 0x3b, 0x74, 0x75, 0x6f,
-0x3b, 0x76, 0xe1, 0x73, 0x3b, 0x6c, 0xe1, 0x76, 0x70, 0x3b, 0x56, 0x3b, 0x4d, 0x3b, 0x4b, 0x3b, 0x54, 0x3b, 0x56, 0x3b,
-0x4c, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x4c, 0x75, 0x6e, 0x65, 0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74, 0x65,
-0x73, 0x3b, 0x4d, 0x69, 0x79, 0x65, 0x72, 0x6b, 0x75, 0x6c, 0x65, 0x73, 0x3b, 0x48, 0x75, 0x77, 0x65, 0x62, 0x65, 0x73,
-0x3b, 0x42, 0x69, 0x79, 0x65, 0x72, 0x6e, 0x65, 0x73, 0x3b, 0x53, 0x61, 0x62, 0x61, 0x64, 0x6f, 0x44, 0x6f, 0x6d, 0x3b,
-0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x6b, 0x73, 0x3b, 0x48, 0x75, 0x3b, 0x42, 0x69, 0x3b, 0x53, 0x61,
-0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x48, 0x3b, 0x42, 0x3b, 0x53
+static constexpr char16_t days_data[] = {
+0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x3b, 0x4d, 0x6f, 0x6e, 0x64, 0x61,
+0x79, 0x3b, 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x3b, 0x57, 0x65,
+0x64, 0x6e, 0x65, 0x73, 0x64, 0x61, 0x79, 0x3b, 0x54, 0x68, 0x75, 0x72,
+0x73, 0x64, 0x61, 0x79, 0x3b, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x3b,
+0x53, 0x61, 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x53, 0x75, 0x6e, 0x3b,
+0x4d, 0x6f, 0x6e, 0x3b, 0x54, 0x75, 0x65, 0x3b, 0x57, 0x65, 0x64, 0x3b,
+0x54, 0x68, 0x75, 0x3b, 0x46, 0x72, 0x69, 0x3b, 0x53, 0x61, 0x74, 0x53,
+0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x57, 0x3b, 0x54, 0x3b, 0x46, 0x3b, 0x53,
+0x37, 0x3b, 0x31, 0x3b, 0x32, 0x3b, 0x33, 0x3b, 0x34, 0x3b, 0x35, 0x3b,
+0x36, 0x410, 0x43c, 0x4bd, 0x44b, 0x448, 0x430, 0x3b, 0x410, 0x448, 0x4d9, 0x430,
+0x445, 0x44c, 0x430, 0x3b, 0x410, 0x4a9, 0x430, 0x448, 0x430, 0x3b, 0x410, 0x445,
+0x430, 0x448, 0x430, 0x3b, 0x410, 0x525, 0x448, 0x44c, 0x430, 0x448, 0x430, 0x3b,
+0x410, 0x445, 0x4d9, 0x430, 0x448, 0x430, 0x3b, 0x410, 0x441, 0x430, 0x431, 0x448,
+0x430, 0x410, 0x43c, 0x3b, 0x410, 0x448, 0x4d9, 0x3b, 0x410, 0x4a9, 0x3b, 0x410,
+0x445, 0x3b, 0x410, 0x525, 0x3b, 0x410, 0x445, 0x4d9, 0x3b, 0x410, 0x441, 0x41c,
+0x3b, 0x428, 0x4d9, 0x3b, 0x4a8, 0x3b, 0x425, 0x3b, 0x524, 0x3b, 0x425, 0x4d9,
+0x3b, 0x421, 0x41, 0x63, 0x61, 0x61, 0x64, 0x61, 0x3b, 0x45, 0x74, 0x6c,
+0x65, 0x65, 0x6e, 0x69, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x61, 0x74, 0x61,
+0x3b, 0x41, 0x72, 0x62, 0x61, 0x71, 0x61, 0x3b, 0x4b, 0x61, 0x6d, 0x69,
+0x69, 0x73, 0x69, 0x3b, 0x47, 0x75, 0x6d, 0x71, 0x61, 0x74, 0x61, 0x3b,
+0x53, 0x61, 0x62, 0x74, 0x69, 0x41, 0x63, 0x61, 0x3b, 0x45, 0x74, 0x6c,
+0x3b, 0x54, 0x61, 0x6c, 0x3b, 0x41, 0x72, 0x62, 0x3b, 0x4b, 0x61, 0x6d,
+0x3b, 0x47, 0x75, 0x6d, 0x3b, 0x53, 0x61, 0x62, 0x41, 0x3b, 0x45, 0x3b,
+0x54, 0x3b, 0x41, 0x3b, 0x4b, 0x3b, 0x47, 0x3b, 0x53, 0x53, 0x6f, 0x6e,
+0x64, 0x61, 0x67, 0x3b, 0x4d, 0x61, 0x61, 0x6e, 0x64, 0x61, 0x67, 0x3b,
+0x44, 0x69, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x57, 0x6f, 0x65, 0x6e,
+0x73, 0x64, 0x61, 0x67, 0x3b, 0x44, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x64,
+0x61, 0x67, 0x3b, 0x56, 0x72, 0x79, 0x64, 0x61, 0x67, 0x3b, 0x53, 0x61,
+0x74, 0x65, 0x72, 0x64, 0x61, 0x67, 0x53, 0x6f, 0x2e, 0x3b, 0x4d, 0x61,
+0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b, 0x57, 0x6f, 0x2e, 0x3b, 0x44, 0x6f,
+0x2e, 0x3b, 0x56, 0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x53, 0x3b, 0x4d,
+0x3b, 0x44, 0x3b, 0x57, 0x3b, 0x44, 0x3b, 0x56, 0x3b, 0x53, 0x74, 0x73,
+0x75, 0x294, 0x6e, 0x74, 0x73, 0x268, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75,
+0x6b, 0x70, 0xe0, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75, 0x67, 0x68, 0x254,
+0x65, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75, 0x74, 0x254, 0x300, 0x6d, 0x6c,
+0xf2, 0x3b, 0x74, 0x73, 0x75, 0x294, 0x75, 0x6d, 0xe8, 0x3b, 0x74, 0x73,
+0x75, 0x294, 0x75, 0x67, 0x68, 0x268, 0x302, 0x6d, 0x3b, 0x74, 0x73, 0x75,
+0x294, 0x6e, 0x64, 0x7a, 0x268, 0x6b, 0x254, 0x294, 0x254, 0x6e, 0x74, 0x73,
+0x3b, 0x6b, 0x70, 0x61, 0x3b, 0x67, 0x68, 0x254, 0x3b, 0x74, 0x254, 0x6d,
+0x3b, 0x75, 0x6d, 0x65, 0x3b, 0x67, 0x68, 0x268, 0x3b, 0x64, 0x7a, 0x6b,
+0x6e, 0x3b, 0x6b, 0x3b, 0x67, 0x3b, 0x74, 0x3b, 0x75, 0x3b, 0x67, 0x3b,
+0x64, 0x4b, 0x77, 0x65, 0x73, 0x69, 0x64, 0x61, 0x3b, 0x44, 0x77, 0x6f,
+0x77, 0x64, 0x61, 0x3b, 0x42, 0x65, 0x6e, 0x61, 0x64, 0x61, 0x3b, 0x57,
+0x75, 0x6b, 0x75, 0x64, 0x61, 0x3b, 0x59, 0x61, 0x77, 0x64, 0x61, 0x3b,
+0x46, 0x69, 0x64, 0x61, 0x3b, 0x4d, 0x65, 0x6d, 0x65, 0x6e, 0x65, 0x64,
+0x61, 0x4b, 0x77, 0x65, 0x3b, 0x44, 0x77, 0x6f, 0x3b, 0x42, 0x65, 0x6e,
+0x3b, 0x57, 0x75, 0x6b, 0x3b, 0x59, 0x61, 0x77, 0x3b, 0x46, 0x69, 0x61,
+0x3b, 0x4d, 0x65, 0x6d, 0x4b, 0x3b, 0x44, 0x3b, 0x42, 0x3b, 0x57, 0x3b,
+0x59, 0x3b, 0x46, 0x3b, 0x4d, 0x65, 0x20, 0x64, 0x69, 0x65, 0x6c, 0x3b,
+0x65, 0x20, 0x68, 0xeb, 0x6e, 0xeb, 0x3b, 0x65, 0x20, 0x6d, 0x61, 0x72,
+0x74, 0xeb, 0x3b, 0x65, 0x20, 0x6d, 0xeb, 0x72, 0x6b, 0x75, 0x72, 0xeb,
+0x3b, 0x65, 0x20, 0x65, 0x6e, 0x6a, 0x74, 0x65, 0x3b, 0x65, 0x20, 0x70,
+0x72, 0x65, 0x6d, 0x74, 0x65, 0x3b, 0x65, 0x20, 0x73, 0x68, 0x74, 0x75,
+0x6e, 0xeb, 0x64, 0x69, 0x65, 0x3b, 0x68, 0xeb, 0x6e, 0x3b, 0x6d, 0x61,
+0x72, 0x3b, 0x6d, 0xeb, 0x72, 0x3b, 0x65, 0x6e, 0x6a, 0x3b, 0x70, 0x72,
+0x65, 0x3b, 0x73, 0x68, 0x74, 0x64, 0x3b, 0x68, 0x3b, 0x6d, 0x3b, 0x6d,
+0x3b, 0x65, 0x3b, 0x70, 0x3b, 0x73, 0x68, 0x12a5, 0x1211, 0x12f5, 0x3b, 0x1230,
+0x129e, 0x3b, 0x121b, 0x12ad, 0x1230, 0x129e, 0x3b, 0x1228, 0x1261, 0x12d5, 0x3b, 0x1210,
+0x1219, 0x1235, 0x3b, 0x12d3, 0x122d, 0x1265, 0x3b, 0x1245, 0x12f3, 0x121c, 0x12a5, 0x1211,
+0x12f5, 0x3b, 0x1230, 0x129e, 0x3b, 0x121b, 0x12ad, 0x1230, 0x3b, 0x1228, 0x1261, 0x12d5,
+0x3b, 0x1210, 0x1219, 0x1235, 0x3b, 0x12d3, 0x122d, 0x1265, 0x3b, 0x1245, 0x12f3, 0x121c,
+0x12a5, 0x3b, 0x1230, 0x3b, 0x121b, 0x3b, 0x1228, 0x3b, 0x1210, 0x3b, 0x12d3, 0x3b,
+0x1245, 0x627, 0x644, 0x623, 0x62d, 0x62f, 0x3b, 0x627, 0x644, 0x627, 0x62b, 0x646,
+0x64a, 0x646, 0x3b, 0x627, 0x644, 0x62b, 0x644, 0x627, 0x62b, 0x627, 0x621, 0x3b,
+0x627, 0x644, 0x623, 0x631, 0x628, 0x639, 0x627, 0x621, 0x3b, 0x627, 0x644, 0x62e,
+0x645, 0x64a, 0x633, 0x3b, 0x627, 0x644, 0x62c, 0x645, 0x639, 0x629, 0x3b, 0x627,
+0x644, 0x633, 0x628, 0x62a, 0x62d, 0x3b, 0x646, 0x3b, 0x62b, 0x3b, 0x631, 0x3b,
+0x62e, 0x3b, 0x62c, 0x3b, 0x633, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x63, 0x68,
+0x65, 0x3b, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x7a,
+0x3b, 0x6d, 0x69, 0x65, 0x72, 0x63, 0x72, 0x65, 0x73, 0x3b, 0x63, 0x68,
+0x75, 0x65, 0x76, 0x65, 0x73, 0x3b, 0x76, 0x69, 0x65, 0x72, 0x6e, 0x65,
+0x73, 0x3b, 0x73, 0x61, 0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x3b,
+0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d, 0x69, 0x65, 0x3b,
+0x63, 0x68, 0x75, 0x3b, 0x76, 0x69, 0x65, 0x3b, 0x73, 0x61, 0x62, 0x44,
+0x3b, 0x4c, 0x3b, 0x4d, 0x61, 0x3b, 0x4d, 0x69, 0x3b, 0x43, 0x68, 0x3b,
+0x56, 0x3b, 0x53, 0x56f, 0x56b, 0x580, 0x561, 0x56f, 0x56b, 0x3b, 0x565, 0x580,
+0x56f, 0x578, 0x582, 0x577, 0x561, 0x562, 0x569, 0x56b, 0x3b, 0x565, 0x580, 0x565,
+0x584, 0x577, 0x561, 0x562, 0x569, 0x56b, 0x3b, 0x579, 0x578, 0x580, 0x565, 0x584,
+0x577, 0x561, 0x562, 0x569, 0x56b, 0x3b, 0x570, 0x56b, 0x576, 0x563, 0x577, 0x561,
+0x562, 0x569, 0x56b, 0x3b, 0x578, 0x582, 0x580, 0x562, 0x561, 0x569, 0x3b, 0x577,
+0x561, 0x562, 0x561, 0x569, 0x56f, 0x56b, 0x580, 0x3b, 0x565, 0x580, 0x56f, 0x3b,
+0x565, 0x580, 0x584, 0x3b, 0x579, 0x580, 0x584, 0x3b, 0x570, 0x576, 0x563, 0x3b,
+0x578, 0x582, 0x580, 0x3b, 0x577, 0x562, 0x569, 0x53f, 0x3b, 0x535, 0x3b, 0x535,
+0x3b, 0x549, 0x3b, 0x540, 0x3b, 0x548, 0x3b, 0x547, 0x9a6, 0x9c7, 0x993, 0x9ac,
+0x9be, 0x9f0, 0x3b, 0x9b8, 0x9cb, 0x9ae, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9ae, 0x999,
+0x9cd, 0x997, 0x9b2, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9ac, 0x9c1, 0x9a7, 0x9ac, 0x9be,
+0x9f0, 0x3b, 0x9ac, 0x9c3, 0x9b9, 0x9b8, 0x9cd, 0x9aa, 0x9a4, 0x9bf, 0x9ac, 0x9be,
+0x9f0, 0x3b, 0x9b6, 0x9c1, 0x995, 0x9cd, 0x9f0, 0x9ac, 0x9be, 0x9f0, 0x3b, 0x9b6,
+0x9a8, 0x9bf, 0x9ac, 0x9be, 0x9f0, 0x9a6, 0x9c7, 0x993, 0x3b, 0x9b8, 0x9cb, 0x9ae,
+0x3b, 0x9ae, 0x999, 0x9cd, 0x997, 0x9b2, 0x3b, 0x9ac, 0x9c1, 0x9a7, 0x3b, 0x9ac,
+0x9c3, 0x9b9, 0x3b, 0x9b6, 0x9c1, 0x995, 0x9cd, 0x9f0, 0x3b, 0x9b6, 0x9a8, 0x9bf,
+0x9a6, 0x3b, 0x9b8, 0x3b, 0x9ae, 0x3b, 0x9ac, 0x3b, 0x9ac, 0x3b, 0x9b6, 0x3b,
+0x9b6, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x6c, 0x6c, 0x75,
+0x6e, 0x65, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x6d,
+0x69, 0xe9, 0x72, 0x63, 0x6f, 0x6c, 0x65, 0x73, 0x3b, 0x78, 0x75, 0x65,
+0x76, 0x65, 0x73, 0x3b, 0x76, 0x69, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x3b,
+0x73, 0xe1, 0x62, 0x61, 0x64, 0x75, 0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x6c,
+0x75, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d, 0x69, 0xe9, 0x3b, 0x78, 0x75,
+0x65, 0x3b, 0x76, 0x69, 0x65, 0x3b, 0x73, 0xe1, 0x62, 0x44, 0x3b, 0x4c,
+0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x58, 0x3b, 0x56, 0x3b, 0x53, 0x4a, 0x75,
+0x6d, 0x61, 0x70, 0x69, 0x6c, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74,
+0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b,
+0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68,
+0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61,
+0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4a, 0x70, 0x69,
+0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6e, 0x6e, 0x3b, 0x4a, 0x74, 0x6e,
+0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x6d, 0x3b, 0x4a, 0x6d, 0x6f,
+0x4a, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x41, 0x3b, 0x49, 0x3b,
+0x4a, 0x57, 0x61, 0x69, 0x20, 0x59, 0x6f, 0x6b, 0x61, 0x20, 0x42, 0x61,
+0x77, 0x61, 0x69, 0x3b, 0x57, 0x61, 0x69, 0x20, 0x54, 0x75, 0x6e, 0x67,
+0x61, 0x3b, 0x54, 0x6f, 0x6b, 0x69, 0x20, 0x47, 0x69, 0x74, 0x75, 0x6e,
+0x67, 0x3b, 0x54, 0x73, 0x61, 0x6d, 0x20, 0x4b, 0x61, 0x73, 0x75, 0x77,
+0x61, 0x3b, 0x57, 0x61, 0x69, 0x20, 0x4e, 0x61, 0x20, 0x4e, 0x61, 0x73,
+0x3b, 0x57, 0x61, 0x69, 0x20, 0x4e, 0x61, 0x20, 0x54, 0x69, 0x79, 0x6f,
+0x6e, 0x3b, 0x57, 0x61, 0x69, 0x20, 0x4e, 0x61, 0x20, 0x43, 0x68, 0x69,
+0x72, 0x69, 0x6d, 0x59, 0x6f, 0x6b, 0x3b, 0x54, 0x75, 0x6e, 0x67, 0x3b,
+0x47, 0x69, 0x74, 0x75, 0x6e, 0x67, 0x3b, 0x54, 0x73, 0x61, 0x6e, 0x3b,
+0x4e, 0x61, 0x73, 0x3b, 0x4e, 0x61, 0x74, 0x3b, 0x43, 0x68, 0x69, 0x72,
+0x62, 0x61, 0x7a, 0x61, 0x72, 0x3b, 0x62, 0x61, 0x7a, 0x61, 0x72, 0x20,
+0x65, 0x72, 0x74, 0x259, 0x73, 0x69, 0x3b, 0xe7, 0x259, 0x72, 0x15f, 0x259,
+0x6e, 0x62, 0x259, 0x20, 0x61, 0x78, 0x15f, 0x61, 0x6d, 0x131, 0x3b, 0xe7,
+0x259, 0x72, 0x15f, 0x259, 0x6e, 0x62, 0x259, 0x3b, 0x63, 0xfc, 0x6d, 0x259,
+0x20, 0x61, 0x78, 0x15f, 0x61, 0x6d, 0x131, 0x3b, 0x63, 0xfc, 0x6d, 0x259,
+0x3b, 0x15f, 0x259, 0x6e, 0x62, 0x259, 0x42, 0x2e, 0x3b, 0x42, 0x2e, 0x45,
+0x2e, 0x3b, 0xc7, 0x2e, 0x41, 0x2e, 0x3b, 0xc7, 0x2e, 0x3b, 0x43, 0x2e,
+0x41, 0x2e, 0x3b, 0x43, 0x2e, 0x3b, 0x15e, 0x2e, 0x42, 0x2e, 0x3b, 0x42,
+0x2e, 0x65, 0x2e, 0x3b, 0xc7, 0x2e, 0x61, 0x2e, 0x3b, 0xc7, 0x2e, 0x3b,
+0x43, 0x2e, 0x61, 0x2e, 0x3b, 0x43, 0x2e, 0x3b, 0x15e, 0x2e, 0x431, 0x430,
+0x437, 0x430, 0x440, 0x3b, 0x431, 0x430, 0x437, 0x430, 0x440, 0x20, 0x435, 0x440,
+0x442, 0x4d9, 0x441, 0x438, 0x3b, 0x447, 0x4d9, 0x440, 0x448, 0x4d9, 0x43d, 0x431,
+0x4d9, 0x20, 0x430, 0x445, 0x448, 0x430, 0x43c, 0x44b, 0x3b, 0x447, 0x4d9, 0x440,
+0x448, 0x4d9, 0x43d, 0x431, 0x4d9, 0x3b, 0x4b9, 0x4af, 0x43c, 0x4d9, 0x20, 0x430,
+0x445, 0x448, 0x430, 0x43c, 0x44b, 0x3b, 0x4b9, 0x4af, 0x43c, 0x4d9, 0x3b, 0x448,
+0x4d9, 0x43d, 0x431, 0x4d9, 0x411, 0x2e, 0x3b, 0x411, 0x2e, 0x415, 0x2e, 0x3b,
+0x427, 0x2e, 0x410, 0x2e, 0x3b, 0x427, 0x2e, 0x3b, 0x4b8, 0x2e, 0x410, 0x2e,
+0x3b, 0x4b8, 0x2e, 0x3b, 0x428, 0x2e, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x1dd,
+0x3b, 0x6c, 0x1dd, 0x6e, 0x64, 0xed, 0x3b, 0x6d, 0x61, 0x61, 0x64, 0xed,
+0x3b, 0x6d, 0x25b, 0x6b, 0x72, 0x25b, 0x64, 0xed, 0x3b, 0x6a, 0x1dd, 0x1dd,
+0x64, 0xed, 0x3b, 0x6a, 0xfa, 0x6d, 0x62, 0xe1, 0x3b, 0x73, 0x61, 0x6d,
+0x64, 0xed, 0x73, 0x254, 0x301, 0x6e, 0x3b, 0x6c, 0x1dd, 0x6e, 0x3b, 0x6d,
+0x61, 0x61, 0x3b, 0x6d, 0x25b, 0x6b, 0x3b, 0x6a, 0x1dd, 0x1dd, 0x3b, 0x6a,
+0xfa, 0x6d, 0x3b, 0x73, 0x61, 0x6d, 0x73, 0x3b, 0x6c, 0x3b, 0x6d, 0x3b,
+0x6d, 0x3b, 0x6a, 0x3b, 0x6a, 0x3b, 0x73, 0x6b, 0x61, 0x72, 0x69, 0x3b,
+0x6e, 0x74, 0x25b, 0x6e, 0x25b, 0x3b, 0x74, 0x61, 0x72, 0x61, 0x74, 0x61,
+0x3b, 0x61, 0x72, 0x61, 0x62, 0x61, 0x3b, 0x61, 0x6c, 0x61, 0x6d, 0x69,
+0x73, 0x61, 0x3b, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x73, 0x69, 0x62, 0x69,
+0x72, 0x69, 0x6b, 0x61, 0x72, 0x3b, 0x6e, 0x74, 0x25b, 0x3b, 0x74, 0x61,
+0x72, 0x3b, 0x61, 0x72, 0x61, 0x3b, 0x61, 0x6c, 0x61, 0x3b, 0x6a, 0x75,
+0x6d, 0x3b, 0x73, 0x69, 0x62, 0x4b, 0x3b, 0x4e, 0x3b, 0x54, 0x3b, 0x41,
+0x3b, 0x41, 0x3b, 0x4a, 0x3b, 0x53, 0x9b0, 0x9ac, 0x9bf, 0x9ac, 0x9be, 0x9b0,
+0x3b, 0x9b8, 0x9cb, 0x9ae, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9ae, 0x999, 0x9cd, 0x997,
+0x9b2, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9ac, 0x9c1, 0x9a7, 0x9ac, 0x9be, 0x9b0, 0x3b,
+0x9ac, 0x9c3, 0x9b9, 0x9b8, 0x9cd, 0x9aa, 0x9a4, 0x9bf, 0x9ac, 0x9be, 0x9b0, 0x3b,
+0x9b6, 0x9c1, 0x995, 0x9cd, 0x9b0, 0x9ac, 0x9be, 0x9b0, 0x3b, 0x9b6, 0x9a8, 0x9bf,
+0x9ac, 0x9be, 0x9b0, 0x9b0, 0x9ac, 0x9bf, 0x3b, 0x9b8, 0x9cb, 0x9ae, 0x3b, 0x9ae,
+0x999, 0x9cd, 0x997, 0x9b2, 0x3b, 0x9ac, 0x9c1, 0x9a7, 0x3b, 0x9ac, 0x9c3, 0x9b9,
+0x9b8, 0x9cd, 0x9aa, 0x9a4, 0x9bf, 0x3b, 0x9b6, 0x9c1, 0x995, 0x9cd, 0x9b0, 0x3b,
+0x9b6, 0x9a8, 0x9bf, 0x9b0, 0x3b, 0x9b8, 0x9cb, 0x3b, 0x9ae, 0x3b, 0x9ac, 0x9c1,
+0x3b, 0x9ac, 0x9c3, 0x3b, 0x9b6, 0x9c1, 0x3b, 0x9b6, 0x14b, 0x67, 0x77, 0xe0,
+0x20, 0x6e, 0x254, 0x302, 0x79, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6e,
+0x6a, 0x61, 0x14b, 0x67, 0x75, 0x6d, 0x62, 0x61, 0x3b, 0x14b, 0x67, 0x77,
+0xe0, 0x20, 0xfb, 0x6d, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x14b, 0x67,
+0xea, 0x3b, 0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6d, 0x62, 0x254, 0x6b, 0x3b,
+0x14b, 0x67, 0x77, 0xe0, 0x20, 0x6b, 0x254, 0x254, 0x3b, 0x14b, 0x67, 0x77,
+0xe0, 0x20, 0x6a, 0xf4, 0x6e, 0x6e, 0x254, 0x79, 0x3b, 0x6e, 0x6a, 0x61,
+0x3b, 0x75, 0x75, 0x6d, 0x3b, 0x14b, 0x67, 0x65, 0x3b, 0x6d, 0x62, 0x254,
+0x3b, 0x6b, 0x254, 0x254, 0x3b, 0x6a, 0x6f, 0x6e, 0x6e, 0x3b, 0x6e, 0x3b,
+0x75, 0x3b, 0x14b, 0x3b, 0x6d, 0x3b, 0x6b, 0x3b, 0x6a, 0x69, 0x67, 0x61,
+0x6e, 0x64, 0x65, 0x61, 0x3b, 0x61, 0x73, 0x74, 0x65, 0x6c, 0x65, 0x68,
+0x65, 0x6e, 0x61, 0x3b, 0x61, 0x73, 0x74, 0x65, 0x61, 0x72, 0x74, 0x65,
+0x61, 0x3b, 0x61, 0x73, 0x74, 0x65, 0x61, 0x7a, 0x6b, 0x65, 0x6e, 0x61,
+0x3b, 0x6f, 0x73, 0x74, 0x65, 0x67, 0x75, 0x6e, 0x61, 0x3b, 0x6f, 0x73,
+0x74, 0x69, 0x72, 0x61, 0x6c, 0x61, 0x3b, 0x6c, 0x61, 0x72, 0x75, 0x6e,
+0x62, 0x61, 0x74, 0x61, 0x69, 0x67, 0x2e, 0x3b, 0x61, 0x6c, 0x2e, 0x3b,
+0x61, 0x72, 0x2e, 0x3b, 0x61, 0x7a, 0x2e, 0x3b, 0x6f, 0x67, 0x2e, 0x3b,
+0x6f, 0x72, 0x2e, 0x3b, 0x6c, 0x72, 0x2e, 0x49, 0x3b, 0x41, 0x3b, 0x41,
+0x3b, 0x41, 0x3b, 0x4f, 0x3b, 0x4f, 0x3b, 0x4c, 0x43d, 0x44f, 0x434, 0x437,
+0x435, 0x43b, 0x44f, 0x3b, 0x43f, 0x430, 0x43d, 0x44f, 0x434, 0x437, 0x435, 0x43b,
+0x430, 0x43a, 0x3b, 0x430, 0x45e, 0x442, 0x43e, 0x440, 0x430, 0x43a, 0x3b, 0x441,
+0x435, 0x440, 0x430, 0x434, 0x430, 0x3b, 0x447, 0x430, 0x446, 0x432, 0x435, 0x440,
+0x3b, 0x43f, 0x44f, 0x442, 0x43d, 0x456, 0x446, 0x430, 0x3b, 0x441, 0x443, 0x431,
+0x43e, 0x442, 0x430, 0x43d, 0x434, 0x3b, 0x43f, 0x43d, 0x3b, 0x430, 0x45e, 0x3b,
+0x441, 0x440, 0x3b, 0x447, 0x446, 0x3b, 0x43f, 0x442, 0x3b, 0x441, 0x431, 0x43d,
+0x3b, 0x43f, 0x3b, 0x430, 0x3b, 0x441, 0x3b, 0x447, 0x3b, 0x43f, 0x3b, 0x441,
+0x50, 0x61, 0x20, 0x4d, 0x75, 0x6c, 0x75, 0x6e, 0x67, 0x75, 0x3b, 0x50,
+0x61, 0x6c, 0x69, 0x63, 0x68, 0x69, 0x6d, 0x6f, 0x3b, 0x50, 0x61, 0x6c,
+0x69, 0x63, 0x68, 0x69, 0x62, 0x75, 0x6c, 0x69, 0x3b, 0x50, 0x61, 0x6c,
+0x69, 0x63, 0x68, 0x69, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x50, 0x61, 0x6c,
+0x69, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x3b, 0x50, 0x61, 0x6c, 0x69, 0x63,
+0x68, 0x69, 0x73, 0x61, 0x6e, 0x6f, 0x3b, 0x50, 0x61, 0x63, 0x68, 0x69,
+0x62, 0x65, 0x6c, 0x75, 0x73, 0x68, 0x69, 0x70, 0x61, 0x20, 0x6d, 0x75,
+0x6c, 0x75, 0x6e, 0x67, 0x75, 0x3b, 0x70, 0x61, 0x20, 0x73, 0x68, 0x61,
+0x68, 0x75, 0x76, 0x69, 0x6c, 0x75, 0x68, 0x61, 0x3b, 0x70, 0x61, 0x20,
+0x68, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x3b, 0x70, 0x61, 0x20, 0x68, 0x69,
+0x64, 0x61, 0x74, 0x75, 0x3b, 0x70, 0x61, 0x20, 0x68, 0x69, 0x74, 0x61,
+0x79, 0x69, 0x3b, 0x70, 0x61, 0x20, 0x68, 0x69, 0x68, 0x61, 0x6e, 0x75,
+0x3b, 0x70, 0x61, 0x20, 0x73, 0x68, 0x61, 0x68, 0x75, 0x6c, 0x65, 0x6d,
+0x62, 0x65, 0x6c, 0x61, 0x4d, 0x75, 0x6c, 0x3b, 0x56, 0x69, 0x6c, 0x3b,
+0x48, 0x69, 0x76, 0x3b, 0x48, 0x69, 0x64, 0x3b, 0x48, 0x69, 0x74, 0x3b,
+0x48, 0x69, 0x68, 0x3b, 0x4c, 0x65, 0x6d, 0x4d, 0x3b, 0x4a, 0x3b, 0x48,
+0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x57, 0x3b, 0x4a, 0x930, 0x92c, 0x940, 0x92c,
+0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x92c, 0x93e, 0x930, 0x3b, 0x92e, 0x902,
+0x917, 0x932, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x927, 0x92c, 0x93e, 0x930,
+0x3b, 0x92c, 0x943, 0x939, 0x938, 0x94d, 0x92a, 0x924, 0x93f, 0x92c, 0x93e, 0x930,
+0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x928,
+0x940, 0x91a, 0x930, 0x1230, 0x1295, 0x1260, 0x122d, 0x20, 0x1245, 0x12f3, 0x12c5, 0x3b,
+0x1230, 0x1291, 0x3b, 0x1230, 0x120a, 0x131d, 0x3b, 0x1208, 0x1313, 0x20, 0x12c8, 0x122a,
+0x20, 0x1208, 0x1265, 0x12cb, 0x3b, 0x12a3, 0x121d, 0x12f5, 0x3b, 0x12a3, 0x122d, 0x1265,
+0x3b, 0x1230, 0x1295, 0x1260, 0x122d, 0x20, 0x123d, 0x1313, 0x12c5, 0x1230, 0x2f, 0x1245,
+0x3b, 0x1230, 0x1291, 0x3b, 0x1230, 0x120a, 0x131d, 0x3b, 0x1208, 0x1313, 0x3b, 0x12a3,
+0x121d, 0x12f5, 0x3b, 0x12a3, 0x122d, 0x1265, 0x3b, 0x1230, 0x2f, 0x123d, 0x1230, 0x3b,
+0x1230, 0x3b, 0x1230, 0x3b, 0x1208, 0x3b, 0x12a3, 0x3b, 0x12a3, 0x3b, 0x1230, 0x930,
+0x92c, 0x93f, 0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x92e, 0x92c, 0x93e, 0x930, 0x3b,
+0x92e, 0x902, 0x917, 0x932, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x927, 0x92c,
+0x93e, 0x930, 0x3b, 0x92c, 0x93f, 0x938, 0x94d, 0x925, 0x93f, 0x92c, 0x93e, 0x930,
+0x3b, 0x938, 0x941, 0x941, 0x916, 0x941, 0x930, 0x92c, 0x93e, 0x930, 0x3b, 0x938,
+0x928, 0x93f, 0x92c, 0x93e, 0x930, 0x930, 0x92c, 0x93f, 0x92c, 0x93e, 0x930, 0x3b,
+0x938, 0x92e, 0x92c, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x92c, 0x93e,
+0x930, 0x3b, 0x92c, 0x941, 0x927, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x93f, 0x938,
+0x94d, 0x925, 0x93f, 0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x941, 0x916, 0x941, 0x930,
+0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x928, 0x93f, 0x92c, 0x93e, 0x930, 0x930, 0x92c,
+0x93f, 0x3b, 0x938, 0x92e, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x3b, 0x92c, 0x941,
+0x927, 0x3b, 0x92c, 0x93f, 0x938, 0x94d, 0x925, 0x93f, 0x3b, 0x938, 0x941, 0x916,
+0x941, 0x930, 0x3b, 0x938, 0x928, 0x93f, 0x930, 0x3b, 0x938, 0x3b, 0x92e, 0x902,
+0x3b, 0x92c, 0x941, 0x3b, 0x92c, 0x93f, 0x3b, 0x938, 0x941, 0x3b, 0x938, 0x6e,
+0x65, 0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65,
+0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72,
+0x61, 0x6b, 0x3b, 0x73, 0x72, 0x69, 0x6a, 0x65, 0x64, 0x61, 0x3b, 0x10d,
+0x65, 0x74, 0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61,
+0x6b, 0x3b, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65, 0x64, 0x3b,
+0x70, 0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x6f, 0x3b, 0x73, 0x72, 0x69, 0x3b,
+0x10d, 0x65, 0x74, 0x3b, 0x70, 0x65, 0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e,
+0x3b, 0x70, 0x3b, 0x75, 0x3b, 0x73, 0x3b, 0x10d, 0x3b, 0x70, 0x3b, 0x73,
+0x4e, 0x3b, 0x50, 0x3b, 0x55, 0x3b, 0x53, 0x3b, 0x10c, 0x3b, 0x50, 0x3b,
+0x53, 0x43d, 0x435, 0x434, 0x458, 0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d,
+0x435, 0x434, 0x458, 0x435, 0x459, 0x430, 0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440,
+0x430, 0x43a, 0x3b, 0x441, 0x440, 0x438, 0x458, 0x435, 0x434, 0x430, 0x3b, 0x447,
+0x435, 0x442, 0x432, 0x440, 0x442, 0x430, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430,
+0x43a, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434, 0x3b,
+0x43f, 0x43e, 0x43d, 0x3b, 0x443, 0x442, 0x43e, 0x3b, 0x441, 0x440, 0x438, 0x3b,
+0x447, 0x435, 0x442, 0x3b, 0x43f, 0x435, 0x442, 0x3b, 0x441, 0x443, 0x431, 0x43d,
+0x3b, 0x43f, 0x3b, 0x443, 0x3b, 0x441, 0x3b, 0x447, 0x3b, 0x43f, 0x3b, 0x441,
+0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x65, 0x75, 0x72,
+0x7a, 0x68, 0x3b, 0x4d, 0x65, 0x72, 0x63, 0x2bc, 0x68, 0x65, 0x72, 0x3b,
+0x59, 0x61, 0x6f, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x6e, 0x65, 0x72, 0x3b,
+0x53, 0x61, 0x64, 0x6f, 0x72, 0x6e, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x75,
+0x6e, 0x3b, 0x4d, 0x65, 0x75, 0x2e, 0x3b, 0x4d, 0x65, 0x72, 0x2e, 0x3b,
+0x59, 0x61, 0x6f, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x2e, 0x3b, 0x53, 0x61,
+0x64, 0x2e, 0x53, 0x75, 0x3b, 0x4c, 0x3b, 0x4d, 0x7a, 0x3b, 0x4d, 0x63,
+0x3b, 0x59, 0x3b, 0x47, 0x3b, 0x53, 0x61, 0x43d, 0x435, 0x434, 0x435, 0x43b,
+0x44f, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x43d, 0x438, 0x43a,
+0x3b, 0x432, 0x442, 0x43e, 0x440, 0x43d, 0x438, 0x43a, 0x3b, 0x441, 0x440, 0x44f,
+0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x44a, 0x440, 0x442, 0x44a, 0x43a,
+0x3b, 0x43f, 0x435, 0x442, 0x44a, 0x43a, 0x3b, 0x441, 0x44a, 0x431, 0x43e, 0x442,
+0x430, 0x43d, 0x434, 0x3b, 0x43f, 0x43d, 0x3b, 0x432, 0x442, 0x3b, 0x441, 0x440,
+0x3b, 0x447, 0x442, 0x3b, 0x43f, 0x442, 0x3b, 0x441, 0x431, 0x43d, 0x3b, 0x43f,
+0x3b, 0x432, 0x3b, 0x441, 0x3b, 0x447, 0x3b, 0x43f, 0x3b, 0x441, 0x1010, 0x1014,
+0x1004, 0x103a, 0x1039, 0x1002, 0x1014, 0x103d, 0x1031, 0x3b, 0x1010, 0x1014, 0x1004, 0x103a,
+0x1039, 0x101c, 0x102c, 0x3b, 0x1021, 0x1004, 0x103a, 0x1039, 0x1002, 0x102b, 0x3b, 0x1017,
+0x102f, 0x1012, 0x1039, 0x1013, 0x101f, 0x1030, 0x1038, 0x3b, 0x1000, 0x103c, 0x102c, 0x101e,
+0x1015, 0x1010, 0x1031, 0x1038, 0x3b, 0x101e, 0x1031, 0x102c, 0x1000, 0x103c, 0x102c, 0x3b,
+0x1005, 0x1014, 0x1031, 0x1010, 0x3b, 0x1010, 0x3b, 0x1021, 0x3b, 0x1017, 0x3b, 0x1000,
+0x3b, 0x101e, 0x3b, 0x1005, 0x661f, 0x671f, 0x65e5, 0x3b, 0x661f, 0x671f, 0x4e00, 0x3b,
+0x661f, 0x671f, 0x4e8c, 0x3b, 0x661f, 0x671f, 0x4e09, 0x3b, 0x661f, 0x671f, 0x56db, 0x3b,
+0x661f, 0x671f, 0x4e94, 0x3b, 0x661f, 0x671f, 0x516d, 0x65e5, 0x3b, 0x4e00, 0x3b, 0x4e8c,
+0x3b, 0x4e09, 0x3b, 0x56db, 0x3b, 0x4e94, 0x3b, 0x516d, 0x5468, 0x65e5, 0x3b, 0x5468,
+0x4e00, 0x3b, 0x5468, 0x4e8c, 0x3b, 0x5468, 0x4e09, 0x3b, 0x5468, 0x56db, 0x3b, 0x5468,
+0x4e94, 0x3b, 0x5468, 0x516d, 0x64, 0x69, 0x75, 0x6d, 0x65, 0x6e, 0x67, 0x65,
+0x3b, 0x64, 0x69, 0x6c, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x64, 0x69, 0x6d,
+0x61, 0x72, 0x74, 0x73, 0x3b, 0x64, 0x69, 0x6d, 0x65, 0x63, 0x72, 0x65,
+0x73, 0x3b, 0x64, 0x69, 0x6a, 0x6f, 0x75, 0x73, 0x3b, 0x64, 0x69, 0x76,
+0x65, 0x6e, 0x64, 0x72, 0x65, 0x73, 0x3b, 0x64, 0x69, 0x73, 0x73, 0x61,
+0x62, 0x74, 0x65, 0x64, 0x67, 0x2e, 0x3b, 0x64, 0x6c, 0x2e, 0x3b, 0x64,
+0x74, 0x2e, 0x3b, 0x64, 0x63, 0x2e, 0x3b, 0x64, 0x6a, 0x2e, 0x3b, 0x64,
+0x76, 0x2e, 0x3b, 0x64, 0x73, 0x2e, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x67,
+0x6f, 0x3b, 0x4c, 0x75, 0x6e, 0x65, 0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74,
+0x65, 0x73, 0x3b, 0x4d, 0x69, 0x79, 0x65, 0x72, 0x6b, 0x75, 0x6c, 0x65,
+0x73, 0x3b, 0x48, 0x75, 0x77, 0x65, 0x62, 0x65, 0x73, 0x3b, 0x42, 0x69,
+0x79, 0x65, 0x72, 0x6e, 0x65, 0x73, 0x3b, 0x53, 0x61, 0x62, 0x61, 0x64,
+0x6f, 0x44, 0x6f, 0x6d, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x72,
+0x3b, 0x4d, 0x69, 0x79, 0x3b, 0x48, 0x75, 0x77, 0x3b, 0x42, 0x69, 0x79,
+0x3b, 0x53, 0x61, 0x62, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b,
+0x48, 0x3b, 0x42, 0x3b, 0x53, 0x41, 0x73, 0x61, 0x6d, 0x61, 0x73, 0x3b,
+0x41, 0x79, 0x6e, 0x61, 0x73, 0x3b, 0x41, 0x73, 0x69, 0x6e, 0x61, 0x73,
+0x3b, 0x41, 0x6b, 0x72, 0x61, 0x73, 0x3b, 0x41, 0x6b, 0x77, 0x61, 0x73,
+0x3b, 0x41, 0x73, 0x69, 0x6d, 0x77, 0x61, 0x73, 0x3b, 0x41, 0x73, 0x69,
+0x1e0d, 0x79, 0x61, 0x73, 0x41, 0x73, 0x61, 0x3b, 0x41, 0x79, 0x6e, 0x3b,
+0x41, 0x73, 0x6e, 0x3b, 0x41, 0x6b, 0x72, 0x3b, 0x41, 0x6b, 0x77, 0x3b,
+0x41, 0x73, 0x6d, 0x3b, 0x41, 0x73, 0x1e0d, 0x41, 0x3b, 0x41, 0x3b, 0x41,
+0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41, 0x6cc, 0x6d5, 0x6a9, 0x634,
+0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x62f, 0x648, 0x648, 0x634, 0x6d5, 0x645, 0x645,
+0x6d5, 0x3b, 0x633, 0x6ce, 0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x686, 0x648,
+0x627, 0x631, 0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x67e, 0x6ce, 0x646, 0x62c,
+0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x3b, 0x6be, 0x6d5, 0x6cc, 0x646, 0x6cc, 0x3b,
+0x634, 0x6d5, 0x645, 0x645, 0x6d5, 0x6cc, 0x3b, 0x62f, 0x3b, 0x633, 0x3b, 0x686,
+0x3b, 0x67e, 0x3b, 0x6be, 0x3b, 0x634, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1d,
+0xd804, 0xdd28, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804,
+0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b,
+0xd804, 0xdd1f, 0xd804, 0xdd27, 0xd804, 0xdd01, 0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd23,
+0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804,
+0xdd2a, 0xd804, 0xdd16, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b,
+0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804, 0xdd28, 0xd804, 0xdd25, 0xd804, 0xdd2a,
+0xd804, 0xdd1b, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804,
+0xdd25, 0xd804, 0xdd2a, 0xd804, 0xdd07, 0xd804, 0xdd34, 0xd804, 0xdd07, 0xd804, 0xdd2e, 0xd804,
+0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25,
+0xd804, 0xdd27, 0xd804, 0xdd1a, 0xd804, 0xdd28, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34,
+0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1d, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd25, 0xd804,
+0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd27, 0xd804, 0xdd01,
+0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804,
+0xdd2a, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22,
+0xd804, 0xdd28, 0xd804, 0xdd25, 0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd34, 0x3b, 0xd804,
+0xdd25, 0xd804, 0xdd2a, 0xd804, 0xdd07, 0xd804, 0xdd34, 0xd804, 0xdd07, 0xd804, 0xdd2e, 0xd804,
+0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd27, 0xd804, 0xdd1a, 0xd804, 0xdd28,
+0xd804, 0xdd22, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd1f,
+0xd804, 0xdd27, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd2a, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd33,
+0xd804, 0xdd22, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2a, 0x3b, 0xd804, 0xdd25,
+0xd804, 0xdd27, 0x43a, 0x4c0, 0x438, 0x440, 0x430, 0x3b, 0x43e, 0x440, 0x448, 0x43e,
+0x442, 0x3b, 0x448, 0x438, 0x43d, 0x430, 0x440, 0x430, 0x3b, 0x43a, 0x445, 0x430,
+0x430, 0x440, 0x430, 0x3b, 0x435, 0x430, 0x440, 0x430, 0x3b, 0x43f, 0x4c0, 0x435,
+0x440, 0x430, 0x441, 0x43a, 0x430, 0x3b, 0x448, 0x443, 0x43e, 0x442, 0x43a, 0x4c0,
+0x438, 0x3b, 0x43e, 0x440, 0x3b, 0x448, 0x438, 0x3b, 0x43a, 0x445, 0x430, 0x3b,
+0x435, 0x430, 0x3b, 0x43f, 0x4c0, 0x435, 0x3b, 0x448, 0x443, 0x43e, 0x43a, 0x4c0,
+0x3b, 0x43e, 0x3b, 0x448, 0x3b, 0x43a, 0x445, 0x3b, 0x435, 0x3b, 0x43f, 0x4c0,
+0x3b, 0x448, 0x13a4, 0x13be, 0x13d9, 0x13d3, 0x13c6, 0x13cd, 0x13ac, 0x3b, 0x13a4, 0x13be,
+0x13d9, 0x13d3, 0x13c9, 0x13c5, 0x13af, 0x3b, 0x13d4, 0x13b5, 0x13c1, 0x13a2, 0x13a6, 0x3b,
+0x13e6, 0x13a2, 0x13c1, 0x13a2, 0x13a6, 0x3b, 0x13c5, 0x13a9, 0x13c1, 0x13a2, 0x13a6, 0x3b,
+0x13e7, 0x13be, 0x13a9, 0x13b6, 0x13cd, 0x13d7, 0x3b, 0x13a4, 0x13be, 0x13d9, 0x13d3, 0x13c8,
+0x13d5, 0x13be, 0x13c6, 0x13cd, 0x13ac, 0x3b, 0x13c9, 0x13c5, 0x13af, 0x3b, 0x13d4, 0x13b5,
+0x13c1, 0x3b, 0x13e6, 0x13a2, 0x13c1, 0x3b, 0x13c5, 0x13a9, 0x13c1, 0x3b, 0x13e7, 0x13be,
+0x13a9, 0x3b, 0x13c8, 0x13d5, 0x13be, 0x13c6, 0x3b, 0x13c9, 0x3b, 0x13d4, 0x3b, 0x13e6,
+0x3b, 0x13c5, 0x3b, 0x13e7, 0x3b, 0x13a4, 0x4e, 0x69, 0x74, 0x74, 0x61, 0x6b,
+0x20, 0x48, 0x6f, 0x6c, 0x6c, 0x6f, 0x2bc, 0x3b, 0x4d, 0x61, 0x6e, 0x74,
+0x69, 0x2bc, 0x3b, 0x43, 0x68, 0x6f, 0x73, 0x74, 0x69, 0x2bc, 0x3b, 0x57,
+0x69, 0x6e, 0x73, 0x74, 0x69, 0x2bc, 0x3b, 0x53, 0x6f, 0x69, 0x73, 0x74,
+0x69, 0x2bc, 0x3b, 0x4e, 0x61, 0x6e, 0x6e, 0x61, 0x6c, 0x68, 0x63, 0x68,
+0x69, 0x66, 0x61, 0x2bc, 0x20, 0x4e, 0x69, 0x74, 0x74, 0x61, 0x6b, 0x3b,
+0x4e, 0x69, 0x74, 0x74, 0x61, 0x6b, 0x20, 0x48, 0x6f, 0x6c, 0x6c, 0x6f,
+0x2bc, 0x20, 0x4e, 0x61, 0x6b, 0x66, 0x69, 0x73, 0x68, 0x53, 0x61, 0x6e,
+0x64, 0x65, 0x3b, 0x4f, 0x72, 0x77, 0x6f, 0x6b, 0x75, 0x62, 0x61, 0x6e,
+0x7a, 0x61, 0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x62, 0x69, 0x72,
+0x69, 0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x73, 0x68, 0x61, 0x74,
+0x75, 0x3b, 0x4f, 0x72, 0x77, 0x61, 0x6b, 0x61, 0x6e, 0x61, 0x3b, 0x4f,
+0x72, 0x77, 0x61, 0x6b, 0x61, 0x74, 0x61, 0x61, 0x6e, 0x6f, 0x3b, 0x4f,
+0x72, 0x77, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x61, 0x67, 0x61, 0x53, 0x41,
+0x4e, 0x3b, 0x4f, 0x52, 0x4b, 0x3b, 0x4f, 0x4b, 0x42, 0x3b, 0x4f, 0x4b,
+0x53, 0x3b, 0x4f, 0x4b, 0x4e, 0x3b, 0x4f, 0x4b, 0x54, 0x3b, 0x4f, 0x4d,
+0x4b, 0x53, 0x3b, 0x4b, 0x3b, 0x52, 0x3b, 0x53, 0x3b, 0x4e, 0x3b, 0x54,
+0x3b, 0x4d, 0x9031, 0x65e5, 0x3b, 0x9031, 0x4e00, 0x3b, 0x9031, 0x4e8c, 0x3b, 0x9031,
+0x4e09, 0x3b, 0x9031, 0x56db, 0x3b, 0x9031, 0x4e94, 0x3b, 0x9031, 0x516d, 0x43d, 0x435,
+0x434, 0x463, 0x301, 0x43b, 0x467, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x463,
+0x301, 0x43b, 0x44c, 0x43d, 0x438, 0x43a, 0x44a, 0x3b, 0x432, 0x442, 0x43e, 0x301,
+0x440, 0x43d, 0x438, 0x43a, 0x44a, 0x3b, 0x441, 0x440, 0x435, 0x434, 0x430, 0x300,
+0x3b, 0x447, 0x435, 0x442, 0x432, 0x435, 0x440, 0x442, 0x43e, 0x301, 0x43a, 0x44a,
+0x3b, 0x43f, 0x467, 0x442, 0x43e, 0x301, 0x43a, 0x44a, 0x3b, 0x441, 0xa64b, 0x431,
+0x431, 0x461, 0x301, 0x442, 0x430, 0x43d, 0x434, 0x2de7, 0x487, 0x467, 0x3b, 0x43f,
+0x43d, 0x2de3, 0x435, 0x3b, 0x432, 0x442, 0x43e, 0x2dec, 0x487, 0x3b, 0x441, 0x440,
+0x2de3, 0x435, 0x3b, 0x447, 0x435, 0x2de6, 0x487, 0x3b, 0x43f, 0x467, 0x2de6, 0x487,
+0x3b, 0x441, 0xa64b, 0x2de0, 0x487, 0x41d, 0x3b, 0x41f, 0x3b, 0x412, 0x3b, 0x421,
+0x3b, 0x427, 0x3b, 0x41f, 0x3b, 0x421, 0x432, 0x44b, 0x440, 0x441, 0x430, 0x440,
+0x43d, 0x438, 0x43a, 0x443, 0x43d, 0x3b, 0x442, 0x443, 0x43d, 0x442, 0x438, 0x43a,
+0x443, 0x43d, 0x3b, 0x44b, 0x442, 0x43b, 0x430, 0x440, 0x438, 0x43a, 0x443, 0x43d,
+0x3b, 0x44e, 0x43d, 0x43a, 0x443, 0x43d, 0x3b, 0x43a, 0x4d7, 0x4ab, 0x43d, 0x435,
+0x440, 0x43d, 0x438, 0x43a, 0x443, 0x43d, 0x3b, 0x44d, 0x440, 0x43d, 0x435, 0x43a,
+0x443, 0x43d, 0x3b, 0x448, 0x4d1, 0x43c, 0x430, 0x442, 0x43a, 0x443, 0x43d, 0x432,
+0x44b, 0x440, 0x2e, 0x3b, 0x442, 0x443, 0x43d, 0x2e, 0x3b, 0x44b, 0x442, 0x43b,
+0x2e, 0x3b, 0x44e, 0x43d, 0x2e, 0x3b, 0x43a, 0x4d7, 0x4ab, 0x2e, 0x3b, 0x44d,
+0x440, 0x2e, 0x3b, 0x448, 0x4d1, 0x43c, 0x2e, 0x412, 0x3b, 0x422, 0x3b, 0x42b,
+0x3b, 0x42e, 0x3b, 0x41a, 0x3b, 0x42d, 0x3b, 0x428, 0x53, 0x75, 0x6e, 0x6e,
+0x64, 0x61, 0x61, 0x63, 0x68, 0x3b, 0x4d, 0x6f, 0x68, 0x6e, 0x64, 0x61,
+0x61, 0x63, 0x68, 0x3b, 0x44, 0x69, 0x6e, 0x6e, 0x73, 0x64, 0x61, 0x61,
+0x63, 0x68, 0x3b, 0x4d, 0x65, 0x74, 0x77, 0x6f, 0x63, 0x68, 0x3b, 0x44,
+0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x64, 0x61, 0x61, 0x63, 0x68, 0x3b,
+0x46, 0x72, 0x69, 0x69, 0x64, 0x61, 0x61, 0x63, 0x68, 0x3b, 0x53, 0x61,
+0x6d, 0x73, 0x64, 0x61, 0x61, 0x63, 0x68, 0x53, 0x75, 0x2e, 0x3b, 0x4d,
+0x6f, 0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b, 0x4d, 0x65, 0x2e, 0x3b, 0x44,
+0x75, 0x2e, 0x3b, 0x46, 0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x53, 0x3b,
+0x4d, 0x3b, 0x44, 0x3b, 0x4d, 0x3b, 0x44, 0x3b, 0x46, 0x3b, 0x53, 0x64,
+0x79, 0x20, 0x53, 0x75, 0x6c, 0x3b, 0x64, 0x79, 0x20, 0x4c, 0x75, 0x6e,
+0x3b, 0x64, 0x79, 0x20, 0x4d, 0x65, 0x75, 0x72, 0x74, 0x68, 0x3b, 0x64,
+0x79, 0x20, 0x4d, 0x65, 0x72, 0x68, 0x65, 0x72, 0x3b, 0x64, 0x79, 0x20,
+0x59, 0x6f, 0x77, 0x3b, 0x64, 0x79, 0x20, 0x47, 0x77, 0x65, 0x6e, 0x65,
+0x72, 0x3b, 0x64, 0x79, 0x20, 0x53, 0x61, 0x64, 0x6f, 0x72, 0x6e, 0x53,
+0x75, 0x6c, 0x3b, 0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x74, 0x68, 0x3b, 0x4d,
+0x68, 0x72, 0x3b, 0x59, 0x6f, 0x77, 0x3b, 0x47, 0x77, 0x65, 0x3b, 0x53,
+0x61, 0x64, 0x64, 0x75, 0x6d, 0x65, 0x6e, 0x69, 0x63, 0x61, 0x3b, 0x6c,
+0x75, 0x6e, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x69, 0x3b, 0x6d, 0x65,
+0x72, 0x63, 0x75, 0x72, 0x69, 0x3b, 0x67, 0x68, 0x6a, 0x6f, 0x76, 0x69,
+0x3b, 0x76, 0x65, 0x6e, 0x6e, 0x65, 0x72, 0x69, 0x3b, 0x73, 0x61, 0x62,
+0x62, 0x61, 0x74, 0x75, 0x64, 0x75, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e,
+0x2e, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0x65, 0x72, 0x2e, 0x3b,
+0x67, 0x68, 0x6a, 0x2e, 0x3b, 0x76, 0x65, 0x6e, 0x2e, 0x3b, 0x73, 0x61,
+0x62, 0x2e, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x47, 0x3b,
+0x56, 0x3b, 0x53, 0x6e, 0x65, 0x64, 0x11b, 0x6c, 0x65, 0x3b, 0x70, 0x6f,
+0x6e, 0x64, 0x11b, 0x6c, 0xed, 0x3b, 0xfa, 0x74, 0x65, 0x72, 0xfd, 0x3b,
+0x73, 0x74, 0x159, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x74, 0x76, 0x72, 0x74,
+0x65, 0x6b, 0x3b, 0x70, 0xe1, 0x74, 0x65, 0x6b, 0x3b, 0x73, 0x6f, 0x62,
+0x6f, 0x74, 0x61, 0x6e, 0x65, 0x3b, 0x70, 0x6f, 0x3b, 0xfa, 0x74, 0x3b,
+0x73, 0x74, 0x3b, 0x10d, 0x74, 0x3b, 0x70, 0xe1, 0x3b, 0x73, 0x6f, 0x4e,
+0x3b, 0x50, 0x3b, 0xda, 0x3b, 0x53, 0x3b, 0x10c, 0x3b, 0x50, 0x3b, 0x53,
+0x73, 0xf8, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x6d, 0x61, 0x6e, 0x64, 0x61,
+0x67, 0x3b, 0x74, 0x69, 0x72, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x6f, 0x6e,
+0x73, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x61, 0x67,
+0x3b, 0x66, 0x72, 0x65, 0x64, 0x61, 0x67, 0x3b, 0x6c, 0xf8, 0x72, 0x64,
+0x61, 0x67, 0x73, 0xf8, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x6e, 0x2e, 0x3b,
+0x74, 0x69, 0x72, 0x73, 0x2e, 0x3b, 0x6f, 0x6e, 0x73, 0x2e, 0x3b, 0x74,
+0x6f, 0x72, 0x73, 0x2e, 0x3b, 0x66, 0x72, 0x65, 0x2e, 0x3b, 0x6c, 0xf8,
+0x72, 0x2e, 0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x4f, 0x3b, 0x54, 0x3b,
+0x46, 0x3b, 0x4c, 0x910, 0x924, 0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e,
+0x92c, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x92c, 0x93e, 0x930, 0x3b,
+0x92c, 0x941, 0x927, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x940, 0x930, 0x92c, 0x93e,
+0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x92c, 0x93e, 0x930, 0x3b, 0x936,
+0x928, 0x93f, 0x92c, 0x93e, 0x930, 0x910, 0x924, 0x3b, 0x938, 0x94b, 0x92e, 0x3b,
+0x92e, 0x902, 0x917, 0x932, 0x3b, 0x92c, 0x941, 0x927, 0x3b, 0x92c, 0x940, 0x930,
+0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x3b, 0x936, 0x928, 0x93f, 0x910, 0x3b,
+0x938, 0x94b, 0x3b, 0x92e, 0x2e, 0x3b, 0x92c, 0x941, 0x2e, 0x3b, 0x92c, 0x940,
+0x2e, 0x3b, 0x936, 0x941, 0x2e, 0x3b, 0x936, 0x2e, 0x910, 0x2e, 0x3b, 0x938,
+0x94b, 0x2e, 0x3b, 0x92e, 0x2e, 0x3b, 0x92c, 0x941, 0x2e, 0x3b, 0x92c, 0x940,
+0x2e, 0x3b, 0x936, 0x941, 0x2e, 0x3b, 0x936, 0x2e, 0xe9, 0x74, 0x69, 0x3b,
+0x6d, 0x254, 0x301, 0x73, 0xfa, 0x3b, 0x6b, 0x77, 0x61, 0x73, 0xfa, 0x3b,
+0x6d, 0x75, 0x6b, 0x254, 0x301, 0x73, 0xfa, 0x3b, 0x14b, 0x67, 0x69, 0x73,
+0xfa, 0x3b, 0x257, 0xf3, 0x6e, 0x25b, 0x73, 0xfa, 0x3b, 0x65, 0x73, 0x61,
+0x253, 0x61, 0x73, 0xfa, 0xe9, 0x74, 0x3b, 0x6d, 0x254, 0x301, 0x73, 0x3b,
+0x6b, 0x77, 0x61, 0x3b, 0x6d, 0x75, 0x6b, 0x3b, 0x14b, 0x67, 0x69, 0x3b,
+0x257, 0xf3, 0x6e, 0x3b, 0x65, 0x73, 0x61, 0x65, 0x3b, 0x6d, 0x3b, 0x6b,
+0x3b, 0x6d, 0x3b, 0x14b, 0x3b, 0x257, 0x3b, 0x65, 0x7a, 0x6f, 0x6e, 0x64,
+0x61, 0x67, 0x3b, 0x6d, 0x61, 0x61, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x64,
+0x69, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x77, 0x6f, 0x65, 0x6e, 0x73,
+0x64, 0x61, 0x67, 0x3b, 0x64, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x64, 0x61,
+0x67, 0x3b, 0x76, 0x72, 0x69, 0x6a, 0x64, 0x61, 0x67, 0x3b, 0x7a, 0x61,
+0x74, 0x65, 0x72, 0x64, 0x61, 0x67, 0x7a, 0x6f, 0x3b, 0x6d, 0x61, 0x3b,
+0x64, 0x69, 0x3b, 0x77, 0x6f, 0x3b, 0x64, 0x6f, 0x3b, 0x76, 0x72, 0x3b,
+0x7a, 0x61, 0x5a, 0x3b, 0x4d, 0x3b, 0x44, 0x3b, 0x57, 0x3b, 0x44, 0x3b,
+0x56, 0x3b, 0x5a, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf5f, 0xfb3, 0xf0b, 0xf56, 0xf0b,
+0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf58, 0xf72, 0xf42, 0xf0b, 0xf51, 0xf58, 0xf62,
+0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf63, 0xfb7, 0xf42, 0xf0b, 0xf54, 0xf0b,
+0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf55, 0xf74, 0xf62, 0xf0b, 0xf56, 0xf74, 0xf0b,
+0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf54, 0xf0b, 0xf66, 0xf44, 0xf66, 0xf0b, 0x3b,
+0xf42, 0xf5f, 0xf60, 0xf0b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0xf0b, 0xf54, 0xf0b, 0x3b,
+0xf42, 0xf5f, 0xf60, 0xf0b, 0xf49, 0xf72, 0xf0b, 0xf58, 0xf0b, 0xf5f, 0xfb3, 0xf0b,
+0x3b, 0xf58, 0xf72, 0xf62, 0xf0b, 0x3b, 0xf63, 0xfb7, 0xf42, 0xf0b, 0x3b, 0xf55,
+0xf74, 0xf62, 0xf0b, 0x3b, 0xf66, 0xf44, 0xf66, 0xf0b, 0x3b, 0xf66, 0xfa4, 0xf7a,
+0xf53, 0xf0b, 0x3b, 0xf49, 0xf72, 0xf0b, 0xf5f, 0xfb3, 0x3b, 0xf58, 0xf72, 0xf62,
+0x3b, 0xf63, 0xfb7, 0xf42, 0x3b, 0xf55, 0xf74, 0xf62, 0x3b, 0xf66, 0xf44, 0xfb6,
+0x3b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0x3b, 0xf49, 0xf72, 0x4b, 0x69, 0x75, 0x6d,
+0x69, 0x61, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x75,
+0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x3b, 0x4e, 0x6a,
+0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x72, 0x61, 0x6d,
+0x69, 0x74, 0x68, 0x69, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b,
+0x4e, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x74, 0x68, 0x69, 0x69, 0x4b,
+0x6d, 0x61, 0x3b, 0x54, 0x61, 0x74, 0x3b, 0x49, 0x6e, 0x65, 0x3b, 0x54,
+0x61, 0x6e, 0x3b, 0x41, 0x72, 0x6d, 0x3b, 0x4d, 0x61, 0x61, 0x3b, 0x4e,
+0x4d, 0x4d, 0x4b, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x41, 0x3b,
+0x4d, 0x3b, 0x4e, 0xd801, 0xdc1d, 0xd801, 0xdc32, 0xd801, 0xdc4c, 0xd801, 0xdc3c, 0xd801,
+0xdc29, 0x3b, 0xd801, 0xdc23, 0xd801, 0xdc32, 0xd801, 0xdc4c, 0xd801, 0xdc3c, 0xd801, 0xdc29,
+0x3b, 0xd801, 0xdc13, 0xd801, 0xdc2d, 0xd801, 0xdc46, 0xd801, 0xdc3c, 0xd801, 0xdc29, 0x3b,
+0xd801, 0xdc0e, 0xd801, 0xdc2f, 0xd801, 0xdc4c, 0xd801, 0xdc46, 0xd801, 0xdc3c, 0xd801, 0xdc29,
+0x3b, 0xd801, 0xdc1b, 0xd801, 0xdc32, 0xd801, 0xdc49, 0xd801, 0xdc46, 0xd801, 0xdc3c, 0xd801,
+0xdc29, 0x3b, 0xd801, 0xdc19, 0xd801, 0xdc49, 0xd801, 0xdc34, 0xd801, 0xdc3c, 0xd801, 0xdc29,
+0x3b, 0xd801, 0xdc1d, 0xd801, 0xdc30, 0xd801, 0xdc3b, 0xd801, 0xdc32, 0xd801, 0xdc49, 0xd801,
+0xdc3c, 0xd801, 0xdc29, 0xd801, 0xdc1d, 0xd801, 0xdc32, 0xd801, 0xdc4c, 0x3b, 0xd801, 0xdc23,
+0xd801, 0xdc32, 0xd801, 0xdc4c, 0x3b, 0xd801, 0xdc13, 0xd801, 0xdc2d, 0xd801, 0xdc46, 0x3b,
+0xd801, 0xdc0e, 0xd801, 0xdc2f, 0xd801, 0xdc4c, 0x3b, 0xd801, 0xdc1b, 0xd801, 0xdc32, 0xd801,
+0xdc49, 0x3b, 0xd801, 0xdc19, 0xd801, 0xdc49, 0xd801, 0xdc34, 0x3b, 0xd801, 0xdc1d, 0xd801,
+0xdc30, 0xd801, 0xdc3b, 0xd801, 0xdc1d, 0x3b, 0xd801, 0xdc23, 0x3b, 0xd801, 0xdc13, 0x3b,
+0xd801, 0xdc0e, 0x3b, 0xd801, 0xdc1b, 0x3b, 0xd801, 0xdc19, 0x3b, 0xd801, 0xdc1d, 0x53,
+0x75, 0x2e, 0x3b, 0x4d, 0x2e, 0x3b, 0x54, 0x75, 0x2e, 0x3b, 0x57, 0x2e,
+0x3b, 0x54, 0x68, 0x2e, 0x3b, 0x46, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0xb7,
+0xd801, 0xdc55, 0xd801, 0xdc6d, 0xd801, 0xdc59, 0xd801, 0xdc5b, 0xd801, 0xdc71, 0x3b, 0xb7,
+0xd801, 0xdc65, 0xd801, 0xdc6d, 0xd801, 0xdc59, 0xd801, 0xdc5b, 0xd801, 0xdc71, 0x3b, 0xb7,
+0xd801, 0xdc51, 0xd801, 0xdc75, 0xd801, 0xdc5f, 0xd801, 0xdc5b, 0xd801, 0xdc71, 0x3b, 0xb7,
+0xd801, 0xdc62, 0xd801, 0xdc67, 0xd801, 0xdc59, 0xd801, 0xdc5f, 0xd801, 0xdc5b, 0xd801, 0xdc71,
+0x3b, 0xb7, 0xd801, 0xdc54, 0xd801, 0xdc7b, 0xd801, 0xdc5f, 0xd801, 0xdc5b, 0xd801, 0xdc71,
+0x3b, 0xb7, 0xd801, 0xdc53, 0xd801, 0xdc6e, 0xd801, 0xdc72, 0xd801, 0xdc5b, 0xd801, 0xdc71,
+0x3b, 0xb7, 0xd801, 0xdc55, 0xd801, 0xdc68, 0xd801, 0xdc5b, 0xd801, 0xdc7b, 0xd801, 0xdc5b,
+0xd801, 0xdc71, 0xb7, 0xd801, 0xdc55, 0xd801, 0xdc6d, 0x3b, 0xb7, 0xd801, 0xdc65, 0xd801,
+0xdc6d, 0x3b, 0xb7, 0xd801, 0xdc51, 0xd801, 0xdc75, 0x3b, 0xb7, 0xd801, 0xdc62, 0xd801,
+0xdc67, 0x3b, 0xb7, 0xd801, 0xdc54, 0xd801, 0xdc7b, 0x3b, 0xb7, 0xd801, 0xdc53, 0xd801,
+0xdc6e, 0x3b, 0xb7, 0xd801, 0xdc55, 0xd801, 0xdc68, 0xd801, 0xdc55, 0x3b, 0xd801, 0xdc65,
+0x3b, 0xd801, 0xdc51, 0x3b, 0xd801, 0xdc62, 0x3b, 0xd801, 0xdc54, 0x3b, 0xd801, 0xdc53,
+0x3b, 0xd801, 0xdc55, 0x442, 0x430, 0x440, 0x433, 0x43e, 0x447, 0x438, 0x3b, 0x430,
+0x442, 0x44f, 0x43d, 0x44c, 0x447, 0x438, 0x3b, 0x432, 0x430, 0x441, 0x442, 0x430,
+0x43d, 0x44c, 0x447, 0x438, 0x3b, 0x43a, 0x443, 0x43d, 0x448, 0x43a, 0x430, 0x447,
+0x438, 0x3b, 0x43a, 0x430, 0x43b, 0x43e, 0x43d, 0x44c, 0x447, 0x438, 0x3b, 0x441,
+0x44e, 0x43a, 0x43e, 0x43d, 0x44c, 0x447, 0x438, 0x3b, 0x448, 0x43b, 0x44f, 0x43c,
+0x43e, 0x447, 0x438, 0x442, 0x430, 0x440, 0x433, 0x43e, 0x447, 0x438, 0x441, 0x442,
+0x44d, 0x3b, 0x430, 0x442, 0x44f, 0x43d, 0x44c, 0x447, 0x438, 0x441, 0x442, 0x44d,
+0x3b, 0x432, 0x430, 0x441, 0x442, 0x430, 0x43d, 0x44c, 0x447, 0x438, 0x441, 0x442,
+0x44d, 0x3b, 0x43a, 0x443, 0x43d, 0x448, 0x43a, 0x430, 0x447, 0x438, 0x441, 0x442,
+0x44d, 0x3b, 0x43a, 0x430, 0x43b, 0x43e, 0x43d, 0x44c, 0x447, 0x438, 0x441, 0x442,
+0x44d, 0x3b, 0x441, 0x44e, 0x43a, 0x43e, 0x43d, 0x44c, 0x447, 0x438, 0x441, 0x442,
+0x44d, 0x3b, 0x448, 0x43b, 0x44f, 0x43c, 0x43e, 0x447, 0x438, 0x441, 0x442, 0x44d,
+0x442, 0x430, 0x440, 0x3b, 0x430, 0x442, 0x44f, 0x3b, 0x432, 0x430, 0x441, 0x3b,
+0x43a, 0x443, 0x43d, 0x3b, 0x43a, 0x430, 0x43b, 0x3b, 0x441, 0x44e, 0x43a, 0x3b,
+0x448, 0x43b, 0x44f, 0x64, 0x69, 0x6d, 0x61, 0x6e, 0x109, 0x6f, 0x3b, 0x6c,
+0x75, 0x6e, 0x64, 0x6f, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x6f, 0x3b, 0x6d,
+0x65, 0x72, 0x6b, 0x72, 0x65, 0x64, 0x6f, 0x3b, 0x135, 0x61, 0x16d, 0x64,
+0x6f, 0x3b, 0x76, 0x65, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x6f, 0x3b, 0x73,
+0x61, 0x62, 0x61, 0x74, 0x6f, 0x64, 0x69, 0x3b, 0x6c, 0x75, 0x3b, 0x6d,
+0x61, 0x3b, 0x6d, 0x65, 0x3b, 0x135, 0x61, 0x3b, 0x76, 0x65, 0x3b, 0x73,
+0x61, 0x64, 0x3b, 0x6c, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x135, 0x3b, 0x76,
+0x3b, 0x73, 0x70, 0xfc, 0x68, 0x61, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x65,
+0x73, 0x6d, 0x61, 0x73, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x74, 0x65, 0x69,
+0x73, 0x69, 0x70, 0xe4, 0x65, 0x76, 0x3b, 0x6b, 0x6f, 0x6c, 0x6d, 0x61,
+0x70, 0xe4, 0x65, 0x76, 0x3b, 0x6e, 0x65, 0x6c, 0x6a, 0x61, 0x70, 0xe4,
+0x65, 0x76, 0x3b, 0x72, 0x65, 0x65, 0x64, 0x65, 0x3b, 0x6c, 0x61, 0x75,
+0x70, 0xe4, 0x65, 0x76, 0x50, 0x3b, 0x45, 0x3b, 0x54, 0x3b, 0x4b, 0x3b,
+0x4e, 0x3b, 0x52, 0x3b, 0x4c, 0x6b, 0x254, 0x73, 0x69, 0x256, 0x61, 0x3b,
+0x64, 0x7a, 0x6f, 0x256, 0x61, 0x3b, 0x62, 0x6c, 0x61, 0x256, 0x61, 0x3b,
+0x6b, 0x75, 0x256, 0x61, 0x3b, 0x79, 0x61, 0x77, 0x6f, 0x256, 0x61, 0x3b,
+0x66, 0x69, 0x256, 0x61, 0x3b, 0x6d, 0x65, 0x6d, 0x6c, 0x65, 0x256, 0x61,
+0x6b, 0x254, 0x73, 0x3b, 0x64, 0x7a, 0x6f, 0x3b, 0x62, 0x6c, 0x61, 0x3b,
+0x6b, 0x75, 0x256, 0x3b, 0x79, 0x61, 0x77, 0x3b, 0x66, 0x69, 0x256, 0x3b,
+0x6d, 0x65, 0x6d, 0x6b, 0x3b, 0x64, 0x3b, 0x62, 0x3b, 0x6b, 0x3b, 0x79,
+0x3b, 0x66, 0x3b, 0x6d, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x3b, 0x6d,
+0x254, 0x301, 0x6e, 0x64, 0x69, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254,
+0x20, 0x6d, 0x259, 0x6c, 0xfa, 0x20, 0x6d, 0x259, 0x301, 0x62, 0x25b, 0x30c,
+0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x259, 0x6c, 0xfa,
+0x20, 0x6d, 0x259, 0x301, 0x6c, 0x25b, 0x301, 0x3b, 0x73, 0x254, 0x301, 0x6e,
+0x64, 0x254, 0x20, 0x6d, 0x259, 0x6c, 0xfa, 0x20, 0x6d, 0x259, 0x301, 0x6e,
+0x79, 0x69, 0x3b, 0x66, 0xfa, 0x6c, 0x61, 0x64, 0xe9, 0x3b, 0x73, 0xe9,
+0x72, 0x61, 0x64, 0xe9, 0x73, 0x254, 0x301, 0x6e, 0x3b, 0x6d, 0x254, 0x301,
+0x6e, 0x3b, 0x73, 0x6d, 0x62, 0x3b, 0x73, 0x6d, 0x6c, 0x3b, 0x73, 0x6d,
+0x6e, 0x3b, 0x66, 0xfa, 0x6c, 0x3b, 0x73, 0xe9, 0x72, 0x73, 0x3b, 0x6d,
+0x3b, 0x73, 0x3b, 0x73, 0x3b, 0x73, 0x3b, 0x66, 0x3b, 0x73, 0x73, 0x75,
+0x6e, 0x6e, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6d, 0xe1, 0x6e,
+0x61, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x74, 0xfd, 0x73, 0x64, 0x61,
+0x67, 0x75, 0x72, 0x3b, 0x6d, 0x69, 0x6b, 0x75, 0x64, 0x61, 0x67, 0x75,
+0x72, 0x3b, 0x68, 0xf3, 0x73, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x66,
+0x72, 0xed, 0x67, 0x67, 0x6a, 0x61, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b,
+0x6c, 0x65, 0x79, 0x67, 0x61, 0x72, 0x64, 0x61, 0x67, 0x75, 0x72, 0x73,
+0x75, 0x6e, 0x3b, 0x6d, 0xe1, 0x6e, 0x3b, 0x74, 0xfd, 0x73, 0x3b, 0x6d,
+0x69, 0x6b, 0x3b, 0x68, 0xf3, 0x73, 0x3b, 0x66, 0x72, 0xed, 0x3b, 0x6c,
+0x65, 0x79, 0x73, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0xe1, 0x6e, 0x2e, 0x3b,
+0x74, 0xfd, 0x73, 0x2e, 0x3b, 0x6d, 0x69, 0x6b, 0x2e, 0x3b, 0x68, 0xf3,
+0x73, 0x2e, 0x3b, 0x66, 0x72, 0xed, 0x2e, 0x3b, 0x6c, 0x65, 0x79, 0x2e,
+0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x4d, 0x3b, 0x48, 0x3b, 0x46, 0x3b,
+0x4c, 0x4c, 0x69, 0x6e, 0x67, 0x67, 0x6f, 0x3b, 0x4c, 0x75, 0x6e, 0x65,
+0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x4d, 0x69, 0x79,
+0x65, 0x72, 0x6b, 0x75, 0x6c, 0x65, 0x73, 0x3b, 0x48, 0x75, 0x77, 0x65,
+0x62, 0x65, 0x73, 0x3b, 0x42, 0x69, 0x79, 0x65, 0x72, 0x6e, 0x65, 0x73,
+0x3b, 0x53, 0x61, 0x62, 0x61, 0x64, 0x6f, 0x4c, 0x69, 0x6e, 0x3b, 0x4c,
+0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x69, 0x79, 0x3b, 0x48,
+0x75, 0x77, 0x3b, 0x42, 0x69, 0x79, 0x3b, 0x53, 0x61, 0x62, 0x73, 0x75,
+0x6e, 0x6e, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x3b, 0x6d, 0x61, 0x61, 0x6e,
+0x61, 0x6e, 0x74, 0x61, 0x69, 0x3b, 0x74, 0x69, 0x69, 0x73, 0x74, 0x61,
+0x69, 0x3b, 0x6b, 0x65, 0x73, 0x6b, 0x69, 0x76, 0x69, 0x69, 0x6b, 0x6b,
+0x6f, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x74, 0x61, 0x69, 0x3b, 0x70, 0x65,
+0x72, 0x6a, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x3b, 0x6c, 0x61, 0x75, 0x61,
+0x6e, 0x74, 0x61, 0x69, 0x73, 0x75, 0x6e, 0x6e, 0x75, 0x6e, 0x74, 0x61,
+0x69, 0x6e, 0x61, 0x3b, 0x6d, 0x61, 0x61, 0x6e, 0x61, 0x6e, 0x74, 0x61,
+0x69, 0x6e, 0x61, 0x3b, 0x74, 0x69, 0x69, 0x73, 0x74, 0x61, 0x69, 0x6e,
+0x61, 0x3b, 0x6b, 0x65, 0x73, 0x6b, 0x69, 0x76, 0x69, 0x69, 0x6b, 0x6b,
+0x6f, 0x6e, 0x61, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x74, 0x61, 0x69, 0x6e,
+0x61, 0x3b, 0x70, 0x65, 0x72, 0x6a, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+0x61, 0x3b, 0x6c, 0x61, 0x75, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61,
+0x73, 0x75, 0x3b, 0x6d, 0x61, 0x3b, 0x74, 0x69, 0x3b, 0x6b, 0x65, 0x3b,
+0x74, 0x6f, 0x3b, 0x70, 0x65, 0x3b, 0x6c, 0x61, 0x53, 0x3b, 0x4d, 0x3b,
+0x54, 0x3b, 0x4b, 0x3b, 0x54, 0x3b, 0x50, 0x3b, 0x4c, 0x64, 0x69, 0x6d,
+0x61, 0x6e, 0x63, 0x68, 0x65, 0x3b, 0x6c, 0x75, 0x6e, 0x64, 0x69, 0x3b,
+0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d, 0x65, 0x72, 0x63, 0x72, 0x65,
+0x64, 0x69, 0x3b, 0x6a, 0x65, 0x75, 0x64, 0x69, 0x3b, 0x76, 0x65, 0x6e,
+0x64, 0x72, 0x65, 0x64, 0x69, 0x3b, 0x73, 0x61, 0x6d, 0x65, 0x64, 0x69,
+0x64, 0x69, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0x61,
+0x72, 0x2e, 0x3b, 0x6d, 0x65, 0x72, 0x2e, 0x3b, 0x6a, 0x65, 0x75, 0x2e,
+0x3b, 0x76, 0x65, 0x6e, 0x2e, 0x3b, 0x73, 0x61, 0x6d, 0x2e, 0x44, 0x3b,
+0x4c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x64,
+0x6f, 0x6d, 0x65, 0x6e, 0x69, 0x65, 0x3b, 0x6c, 0x75, 0x6e, 0x69, 0x73,
+0x3b, 0x6d, 0x61, 0x72, 0x74, 0x61, 0x72, 0x73, 0x3b, 0x6d, 0x69, 0x65,
+0x72, 0x63, 0x75, 0x73, 0x3b, 0x6a, 0x6f, 0x69, 0x62, 0x65, 0x3b, 0x76,
+0x69, 0x6e, 0x61, 0x72, 0x73, 0x3b, 0x73, 0x61, 0x62, 0x69, 0x64, 0x65,
+0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b,
+0x6d, 0x69, 0x65, 0x3b, 0x6a, 0x6f, 0x69, 0x3b, 0x76, 0x69, 0x6e, 0x3b,
+0x73, 0x61, 0x62, 0x64, 0x65, 0x77, 0x6f, 0x3b, 0x61, 0x61, 0x253, 0x6e,
+0x64, 0x65, 0x3b, 0x6d, 0x61, 0x77, 0x62, 0x61, 0x61, 0x72, 0x65, 0x3b,
+0x6e, 0x6a, 0x65, 0x73, 0x6c, 0x61, 0x61, 0x72, 0x65, 0x3b, 0x6e, 0x61,
+0x61, 0x73, 0x61, 0x61, 0x6e, 0x64, 0x65, 0x3b, 0x6d, 0x61, 0x77, 0x6e,
+0x64, 0x65, 0x3b, 0x68, 0x6f, 0x6f, 0x72, 0x65, 0x2d, 0x62, 0x69, 0x69,
+0x72, 0x64, 0x65, 0x77, 0x3b, 0x61, 0x61, 0x253, 0x3b, 0x6d, 0x61, 0x77,
+0x3b, 0x6e, 0x6a, 0x65, 0x3b, 0x6e, 0x61, 0x61, 0x3b, 0x6d, 0x77, 0x64,
+0x3b, 0x68, 0x62, 0x69, 0x64, 0x3b, 0x61, 0x3b, 0x6d, 0x3b, 0x6e, 0x3b,
+0x6e, 0x3b, 0x6d, 0x3b, 0x68, 0xd83a, 0xdd08, 0xd83a, 0xdd2b, 0xd83a, 0xdd2c, 0xd83a,
+0xdd26, 0xd83a, 0xdd2d, 0xd83a, 0xdd2a, 0xd83a, 0xdd46, 0xd83a, 0xdd2b, 0x3b, 0xd83a, 0xdd00,
+0xd83a, 0xdd44, 0xd83a, 0xdd29, 0xd83a, 0xdd35, 0xd83a, 0xdd32, 0xd83a, 0xdd4b, 0xd83a, 0xdd23,
+0xd83a, 0xdd2b, 0x3b, 0xd83a, 0xdd03, 0xd83a, 0xdd22, 0xd83a, 0xdd31, 0xd83a, 0xdd26, 0xd83a,
+0xdd22, 0xd83a, 0xdd44, 0xd83a, 0xdd2a, 0xd83a, 0xdd2b, 0x3b, 0xd83a, 0xdd10, 0xd83a, 0xdd36,
+0xd83a, 0xdd2b, 0xd83a, 0xdd27, 0xd83a, 0xdd24, 0xd83a, 0xdd22, 0xd83a, 0xdd44, 0xd83a, 0xdd2a,
+0xd83a, 0xdd2b, 0x3b, 0xd83a, 0xdd10, 0xd83a, 0xdd22, 0xd83a, 0xdd44, 0xd83a, 0xdd27, 0xd83a,
+0xdd22, 0xd83a, 0xdd44, 0xd83a, 0xdd32, 0xd83a, 0xdd23, 0xd83a, 0xdd2b, 0x3b, 0xd83a, 0xdd03,
+0xd83a, 0xdd22, 0xd83a, 0xdd31, 0xd83a, 0xdd32, 0xd83a, 0xdd23, 0xd83a, 0xdd2b, 0x3b, 0xd83a,
+0xdd16, 0xd83a, 0xdd2e, 0xd83a, 0xdd2a, 0xd83a, 0xdd26, 0xd83a, 0xdd2d, 0xd83a, 0xdd2a, 0xd83a,
+0xdd46, 0xd83a, 0xdd2b, 0xd83a, 0xdd08, 0xd83a, 0xdd2b, 0xd83a, 0xdd2c, 0x3b, 0xd83a, 0xdd00,
+0xd83a, 0xdd44, 0xd83a, 0xdd29, 0xd83a, 0xdd35, 0x3b, 0xd83a, 0xdd03, 0xd83a, 0xdd22, 0xd83a,
+0xdd26, 0x3b, 0xd83a, 0xdd14, 0xd83a, 0xdd2b, 0xd83a, 0xdd27, 0x3b, 0xd83a, 0xdd10, 0xd83a,
+0xdd22, 0xd83a, 0xdd44, 0xd83a, 0xdd27, 0x3b, 0xd83a, 0xdd03, 0xd83a, 0xdd22, 0xd83a, 0xdd23,
+0x3b, 0xd83a, 0xdd16, 0xd83a, 0xdd2e, 0xd83a, 0xdd2a, 0xd83a, 0xdd08, 0x3b, 0xd83a, 0xdd00,
+0xd83a, 0xdd44, 0x3b, 0xd83a, 0xdd03, 0x3b, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd10, 0x3b,
+0xd83a, 0xdd03, 0x3b, 0xd83a, 0xdd16, 0x44, 0x69, 0x44, 0xf2, 0x6d, 0x68, 0x6e,
+0x61, 0x69, 0x63, 0x68, 0x3b, 0x44, 0x69, 0x4c, 0x75, 0x61, 0x69, 0x6e,
+0x3b, 0x44, 0x69, 0x4d, 0xe0, 0x69, 0x72, 0x74, 0x3b, 0x44, 0x69, 0x43,
+0x69, 0x61, 0x64, 0x61, 0x69, 0x6e, 0x3b, 0x44, 0x69, 0x61, 0x72, 0x44,
+0x61, 0x6f, 0x69, 0x6e, 0x3b, 0x44, 0x69, 0x68, 0x41, 0x6f, 0x69, 0x6e,
+0x65, 0x3b, 0x44, 0x69, 0x53, 0x61, 0x74, 0x68, 0x61, 0x69, 0x72, 0x6e,
+0x65, 0x44, 0x69, 0x44, 0x3b, 0x44, 0x69, 0x4c, 0x3b, 0x44, 0x69, 0x4d,
+0x3b, 0x44, 0x69, 0x43, 0x3b, 0x44, 0x69, 0x61, 0x3b, 0x44, 0x69, 0x68,
+0x3b, 0x44, 0x69, 0x53, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x43, 0x3b,
+0x41, 0x3b, 0x48, 0x3b, 0x53, 0x48, 0x254, 0x67, 0x62, 0x61, 0x61, 0x3b,
+0x4a, 0x75, 0x3b, 0x4a, 0x75, 0x66, 0x254, 0x3b, 0x53, 0x68, 0x254, 0x3b,
+0x53, 0x6f, 0x6f, 0x3b, 0x53, 0x6f, 0x68, 0x61, 0x61, 0x3b, 0x48, 0x254,
+0x254, 0x48, 0x254, 0x67, 0x3b, 0x4a, 0x75, 0x3b, 0x4a, 0x75, 0x66, 0x3b,
+0x53, 0x68, 0x254, 0x3b, 0x53, 0x6f, 0x6f, 0x3b, 0x53, 0x6f, 0x68, 0x3b,
+0x48, 0x254, 0x254, 0x48, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x53, 0x3b, 0x53,
+0x3b, 0x53, 0x3b, 0x48, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b,
+0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b,
+0x6d, 0xe9, 0x72, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x3b, 0x78, 0x6f, 0x76,
+0x65, 0x73, 0x3b, 0x76, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x3b, 0x73, 0xe1,
+0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e,
+0x73, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0xe9, 0x72, 0x2e, 0x3b,
+0x78, 0x6f, 0x76, 0x2e, 0x3b, 0x76, 0x65, 0x6e, 0x2e, 0x3b, 0x73, 0xe1,
+0x62, 0x2e, 0x64, 0x2e, 0x3b, 0x6c, 0x2e, 0x3b, 0x6d, 0x2e, 0x3b, 0x6d,
+0x2e, 0x3b, 0x78, 0x2e, 0x3b, 0x76, 0x2e, 0x3b, 0x73, 0x2e, 0x53, 0x61,
+0x62, 0x62, 0x69, 0x69, 0x74, 0x69, 0x3b, 0x42, 0x61, 0x6c, 0x61, 0x7a,
+0x61, 0x3b, 0x4c, 0x77, 0x61, 0x6b, 0x75, 0x62, 0x69, 0x72, 0x69, 0x3b,
+0x4c, 0x77, 0x61, 0x6b, 0x75, 0x73, 0x61, 0x74, 0x75, 0x3b, 0x4c, 0x77,
+0x61, 0x6b, 0x75, 0x6e, 0x61, 0x3b, 0x4c, 0x77, 0x61, 0x6b, 0x75, 0x74,
+0x61, 0x61, 0x6e, 0x6f, 0x3b, 0x4c, 0x77, 0x61, 0x6d, 0x75, 0x6b, 0x61,
+0x61, 0x67, 0x61, 0x53, 0x61, 0x62, 0x3b, 0x42, 0x61, 0x6c, 0x3b, 0x4c,
+0x77, 0x32, 0x3b, 0x4c, 0x77, 0x33, 0x3b, 0x4c, 0x77, 0x34, 0x3b, 0x4c,
+0x77, 0x35, 0x3b, 0x4c, 0x77, 0x36, 0x53, 0x3b, 0x42, 0x3b, 0x4c, 0x3b,
+0x4c, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b, 0x4c, 0x12a5, 0x1281, 0x12f5, 0x3b, 0x1230,
+0x1291, 0x12ed, 0x3b, 0x1220, 0x1209, 0x1235, 0x3b, 0x122b, 0x1265, 0x12d5, 0x3b, 0x1210,
+0x1219, 0x1235, 0x3b, 0x12d3, 0x122d, 0x1260, 0x3b, 0x1240, 0x12f3, 0x121a, 0x1275, 0x12a5,
+0x3b, 0x1230, 0x3b, 0x1220, 0x3b, 0x122b, 0x3b, 0x1210, 0x3b, 0x12d3, 0x3b, 0x1240,
+0x10d9, 0x10d5, 0x10d8, 0x10e0, 0x10d0, 0x3b, 0x10dd, 0x10e0, 0x10e8, 0x10d0, 0x10d1, 0x10d0,
+0x10d7, 0x10d8, 0x3b, 0x10e1, 0x10d0, 0x10db, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8,
+0x3b, 0x10dd, 0x10d7, 0x10ee, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8, 0x3b, 0x10ee,
+0x10e3, 0x10d7, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7, 0x10d8, 0x3b, 0x10de, 0x10d0, 0x10e0,
+0x10d0, 0x10e1, 0x10d9, 0x10d4, 0x10d5, 0x10d8, 0x3b, 0x10e8, 0x10d0, 0x10d1, 0x10d0, 0x10d7,
+0x10d8, 0x10d9, 0x10d5, 0x10d8, 0x3b, 0x10dd, 0x10e0, 0x10e8, 0x3b, 0x10e1, 0x10d0, 0x10db,
+0x3b, 0x10dd, 0x10d7, 0x10ee, 0x3b, 0x10ee, 0x10e3, 0x10d7, 0x3b, 0x10de, 0x10d0, 0x10e0,
+0x3b, 0x10e8, 0x10d0, 0x10d1, 0x10d9, 0x3b, 0x10dd, 0x3b, 0x10e1, 0x3b, 0x10dd, 0x3b,
+0x10ee, 0x3b, 0x10de, 0x3b, 0x10e8, 0x53, 0x6f, 0x6e, 0x6e, 0x74, 0x61, 0x67,
+0x3b, 0x4d, 0x6f, 0x6e, 0x74, 0x61, 0x67, 0x3b, 0x44, 0x69, 0x65, 0x6e,
+0x73, 0x74, 0x61, 0x67, 0x3b, 0x4d, 0x69, 0x74, 0x74, 0x77, 0x6f, 0x63,
+0x68, 0x3b, 0x44, 0x6f, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x61, 0x67,
+0x3b, 0x46, 0x72, 0x65, 0x69, 0x74, 0x61, 0x67, 0x3b, 0x53, 0x61, 0x6d,
+0x73, 0x74, 0x61, 0x67, 0x53, 0x6f, 0x3b, 0x4d, 0x6f, 0x3b, 0x44, 0x69,
+0x3b, 0x4d, 0x69, 0x3b, 0x44, 0x6f, 0x3b, 0x46, 0x72, 0x3b, 0x53, 0x61,
+0x53, 0x6f, 0x2e, 0x3b, 0x4d, 0x6f, 0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b,
+0x4d, 0x69, 0x2e, 0x3b, 0x44, 0x6f, 0x2e, 0x3b, 0x46, 0x72, 0x2e, 0x3b,
+0x53, 0x61, 0x2e, 0x39a, 0x3c5, 0x3c1, 0x3b9, 0x3b1, 0x3ba, 0x3ae, 0x3b, 0x394,
+0x3b5, 0x3c5, 0x3c4, 0x3ad, 0x3c1, 0x3b1, 0x3b, 0x3a4, 0x3c1, 0x3af, 0x3c4, 0x3b7,
+0x3b, 0x3a4, 0x3b5, 0x3c4, 0x3ac, 0x3c1, 0x3c4, 0x3b7, 0x3b, 0x3a0, 0x3ad, 0x3bc,
+0x3c0, 0x3c4, 0x3b7, 0x3b, 0x3a0, 0x3b1, 0x3c1, 0x3b1, 0x3c3, 0x3ba, 0x3b5, 0x3c5,
+0x3ae, 0x3b, 0x3a3, 0x3ac, 0x3b2, 0x3b2, 0x3b1, 0x3c4, 0x3bf, 0x39a, 0x3c5, 0x3c1,
+0x3b, 0x394, 0x3b5, 0x3c5, 0x3b, 0x3a4, 0x3c1, 0x3af, 0x3b, 0x3a4, 0x3b5, 0x3c4,
+0x3b, 0x3a0, 0x3ad, 0x3bc, 0x3b, 0x3a0, 0x3b1, 0x3c1, 0x3b, 0x3a3, 0x3ac, 0x3b2,
+0x39a, 0x3b, 0x394, 0x3b, 0x3a4, 0x3b, 0x3a4, 0x3b, 0x3a0, 0x3b, 0x3a0, 0x3b,
+0x3a3, 0x41, 0x72, 0x61, 0x74, 0x65, 0x129, 0x3b, 0x41, 0x72, 0x61, 0x6b,
+0xf5, 0x69, 0x3b, 0x41, 0x72, 0x61, 0x61, 0x70, 0x79, 0x3b, 0x41, 0x72,
+0x61, 0x72, 0x75, 0x6e, 0x64, 0x79, 0x3b, 0x41, 0x72, 0x61, 0x70, 0x6f,
+0x3b, 0x41, 0x72, 0x61, 0x70, 0x6f, 0x74, 0x65, 0x129, 0x3b, 0x41, 0x72,
+0x61, 0x70, 0x6f, 0x6b, 0xf5, 0x69, 0xab0, 0xab5, 0xabf, 0xab5, 0xabe, 0xab0,
+0x3b, 0xab8, 0xacb, 0xaae, 0xab5, 0xabe, 0xab0, 0x3b, 0xaae, 0xa82, 0xa97, 0xab3,
+0xab5, 0xabe, 0xab0, 0x3b, 0xaac, 0xac1, 0xaa7, 0xab5, 0xabe, 0xab0, 0x3b, 0xa97,
+0xac1, 0xab0, 0xac1, 0xab5, 0xabe, 0xab0, 0x3b, 0xab6, 0xac1, 0xa95, 0xacd, 0xab0,
+0xab5, 0xabe, 0xab0, 0x3b, 0xab6, 0xaa8, 0xabf, 0xab5, 0xabe, 0xab0, 0xab0, 0xab5,
+0xabf, 0x3b, 0xab8, 0xacb, 0xaae, 0x3b, 0xaae, 0xa82, 0xa97, 0xab3, 0x3b, 0xaac,
+0xac1, 0xaa7, 0x3b, 0xa97, 0xac1, 0xab0, 0xac1, 0x3b, 0xab6, 0xac1, 0xa95, 0xacd,
+0xab0, 0x3b, 0xab6, 0xaa8, 0xabf, 0xab0, 0x3b, 0xab8, 0xacb, 0x3b, 0xaae, 0xa82,
+0x3b, 0xaac, 0xac1, 0x3b, 0xa97, 0xac1, 0x3b, 0xab6, 0xac1, 0x3b, 0xab6, 0x43,
+0x68, 0x75, 0x6d, 0x61, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x43, 0x68, 0x75,
+0x6d, 0x61, 0x74, 0x61, 0x74, 0x6f, 0x3b, 0x43, 0x68, 0x75, 0x6d, 0x61,
+0x69, 0x6e, 0x65, 0x3b, 0x43, 0x68, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e,
+0x6f, 0x3b, 0x41, 0x72, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x63,
+0x68, 0x75, 0x6d, 0x61, 0x3b, 0x45, 0x73, 0x61, 0x62, 0x61, 0x74, 0x6f,
+0x43, 0x70, 0x72, 0x3b, 0x43, 0x74, 0x74, 0x3b, 0x43, 0x6d, 0x6e, 0x3b,
+0x43, 0x6d, 0x74, 0x3b, 0x41, 0x72, 0x73, 0x3b, 0x49, 0x63, 0x6d, 0x3b,
+0x45, 0x73, 0x74, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x41,
+0x3b, 0x49, 0x3b, 0x45, 0x4c, 0x61, 0x68, 0x61, 0x64, 0x69, 0x3b, 0x4c,
+0x69, 0x74, 0x69, 0x6e, 0x69, 0x6e, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x74,
+0x61, 0x3b, 0x4c, 0x61, 0x72, 0x61, 0x62, 0x61, 0x3b, 0x41, 0x6c, 0x68,
+0x61, 0x6d, 0x69, 0x73, 0x3b, 0x4a, 0x75, 0x6d, 0x6d, 0x61, 0x2bc, 0x61,
+0x3b, 0x41, 0x73, 0x61, 0x62, 0x61, 0x72, 0x4c, 0x61, 0x68, 0x3b, 0x4c,
+0x69, 0x74, 0x3b, 0x54, 0x61, 0x6c, 0x3b, 0x4c, 0x61, 0x72, 0x3b, 0x41,
+0x6c, 0x68, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x41, 0x73, 0x61, 0x4c, 0x3b,
+0x4c, 0x3b, 0x54, 0x3b, 0x4c, 0x3b, 0x41, 0x3b, 0x4a, 0x3b, 0x41, 0x644,
+0x64e, 0x62d, 0x64e, 0x62f, 0x650, 0x3b, 0x644, 0x650, 0x62a, 0x650, 0x646, 0x650,
+0x646, 0x652, 0x3b, 0x62a, 0x64e, 0x644, 0x64e, 0x62a, 0x64e, 0x3b, 0x644, 0x64e,
+0x631, 0x64e, 0x628, 0x64e, 0x3b, 0x623, 0x64e, 0x644, 0x652, 0x62d, 0x64e, 0x645,
+0x650, 0x633, 0x652, 0x3b, 0x62c, 0x64f, 0x645, 0x64e, 0x639, 0x64e, 0x3b, 0x623,
+0x64e, 0x633, 0x64e, 0x628, 0x64e, 0x631, 0x652, 0x644, 0x64e, 0x62d, 0x3b, 0x644,
+0x650, 0x62a, 0x3b, 0x62a, 0x64e, 0x644, 0x3b, 0x644, 0x64e, 0x631, 0x3b, 0x623,
+0x64e, 0x644, 0x652, 0x62d, 0x3b, 0x62c, 0x64f, 0x645, 0x3b, 0x623, 0x64e, 0x633,
+0x64e, 0x4c, 0x101, 0x70, 0x75, 0x6c, 0x65, 0x3b, 0x50, 0x6f, 0x2bb, 0x61,
+0x6b, 0x61, 0x68, 0x69, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6c, 0x75, 0x61,
+0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6b, 0x6f, 0x6c, 0x75, 0x3b, 0x50, 0x6f,
+0x2bb, 0x61, 0x68, 0x101, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6c, 0x69, 0x6d,
+0x61, 0x3b, 0x50, 0x6f, 0x2bb, 0x61, 0x6f, 0x6e, 0x6f, 0x4c, 0x50, 0x3b,
+0x50, 0x31, 0x3b, 0x50, 0x32, 0x3b, 0x50, 0x33, 0x3b, 0x50, 0x34, 0x3b,
+0x50, 0x35, 0x3b, 0x50, 0x36, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e8, 0x5d0, 0x5e9,
+0x5d5, 0x5df, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e9, 0x5e0, 0x5d9, 0x3b, 0x5d9,
+0x5d5, 0x5dd, 0x20, 0x5e9, 0x5dc, 0x5d9, 0x5e9, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd,
+0x20, 0x5e8, 0x5d1, 0x5d9, 0x5e2, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d7,
+0x5de, 0x5d9, 0x5e9, 0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e9, 0x5d9, 0x5e9,
+0x5d9, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5e9, 0x5d1, 0x5ea, 0x5d9, 0x5d5, 0x5dd,
+0x20, 0x5d0, 0x5f3, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d1, 0x5f3, 0x3b, 0x5d9,
+0x5d5, 0x5dd, 0x20, 0x5d2, 0x5f3, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d3, 0x5f3,
+0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20, 0x5d4, 0x5f3, 0x3b, 0x5d9, 0x5d5, 0x5dd, 0x20,
+0x5d5, 0x5f3, 0x3b, 0x5e9, 0x5d1, 0x5ea, 0x5d0, 0x5f3, 0x3b, 0x5d1, 0x5f3, 0x3b,
+0x5d2, 0x5f3, 0x3b, 0x5d3, 0x5f3, 0x3b, 0x5d4, 0x5f3, 0x3b, 0x5d5, 0x5f3, 0x3b,
+0x5e9, 0x5f3, 0x930, 0x935, 0x93f, 0x935, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e,
+0x935, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x935, 0x93e, 0x930, 0x3b,
+0x92c, 0x941, 0x927, 0x935, 0x93e, 0x930, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x935,
+0x93e, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x935, 0x93e, 0x930, 0x3b,
+0x936, 0x928, 0x93f, 0x935, 0x93e, 0x930, 0x930, 0x935, 0x93f, 0x3b, 0x938, 0x94b,
+0x92e, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x3b, 0x92c, 0x941, 0x927, 0x3b, 0x917,
+0x941, 0x930, 0x941, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x3b, 0x936, 0x928,
+0x93f, 0x930, 0x3b, 0x938, 0x94b, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x3b,
+0x917, 0x941, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0x52, 0x61, 0x76, 0x69, 0x77,
+0x61, 0x61, 0x72, 0x3b, 0x53, 0x6f, 0x6d, 0x77, 0x61, 0x61, 0x72, 0x3b,
+0x4d, 0x61, 0x6e, 0x67, 0x61, 0x6c, 0x77, 0x61, 0x61, 0x72, 0x3b, 0x42,
+0x75, 0x64, 0x68, 0x77, 0x61, 0x61, 0x72, 0x3b, 0x47, 0x75, 0x72, 0x75,
+0x77, 0x61, 0x61, 0x72, 0x3b, 0x53, 0x68, 0x75, 0x6b, 0x72, 0x61, 0x77,
+0x61, 0x61, 0x72, 0x3b, 0x53, 0x68, 0x61, 0x6e, 0x69, 0x77, 0x61, 0x61,
+0x72, 0x52, 0x61, 0x76, 0x69, 0x3b, 0x53, 0x6f, 0x6d, 0x3b, 0x4d, 0x61,
+0x6e, 0x67, 0x61, 0x6c, 0x3b, 0x42, 0x75, 0x64, 0x68, 0x3b, 0x47, 0x75,
+0x72, 0x75, 0x3b, 0x53, 0x68, 0x75, 0x6b, 0x72, 0x61, 0x3b, 0x53, 0x68,
+0x61, 0x6e, 0x69, 0x52, 0x61, 0x3b, 0x53, 0x6f, 0x3b, 0x4d, 0x61, 0x3b,
+0x42, 0x75, 0x3b, 0x47, 0x75, 0x3b, 0x53, 0x68, 0x3b, 0x53, 0x68, 0x61,
+0x76, 0x61, 0x73, 0xe1, 0x72, 0x6e, 0x61, 0x70, 0x3b, 0x68, 0xe9, 0x74,
+0x66, 0x151, 0x3b, 0x6b, 0x65, 0x64, 0x64, 0x3b, 0x73, 0x7a, 0x65, 0x72,
+0x64, 0x61, 0x3b, 0x63, 0x73, 0xfc, 0x74, 0xf6, 0x72, 0x74, 0xf6, 0x6b,
+0x3b, 0x70, 0xe9, 0x6e, 0x74, 0x65, 0x6b, 0x3b, 0x73, 0x7a, 0x6f, 0x6d,
+0x62, 0x61, 0x74, 0x56, 0x3b, 0x48, 0x3b, 0x4b, 0x3b, 0x53, 0x7a, 0x65,
+0x3b, 0x43, 0x73, 0x3b, 0x50, 0x3b, 0x53, 0x7a, 0x6f, 0x56, 0x3b, 0x48,
+0x3b, 0x4b, 0x3b, 0x53, 0x7a, 0x3b, 0x43, 0x73, 0x3b, 0x50, 0x3b, 0x53,
+0x7a, 0x73, 0x75, 0x6e, 0x6e, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b,
+0x6d, 0xe1, 0x6e, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0xfe, 0x72,
+0x69, 0xf0, 0x6a, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6d, 0x69,
+0xf0, 0x76, 0x69, 0x6b, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x66,
+0x69, 0x6d, 0x6d, 0x74, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x66,
+0xf6, 0x73, 0x74, 0x75, 0x64, 0x61, 0x67, 0x75, 0x72, 0x3b, 0x6c, 0x61,
+0x75, 0x67, 0x61, 0x72, 0x64, 0x61, 0x67, 0x75, 0x72, 0x73, 0x75, 0x6e,
+0x2e, 0x3b, 0x6d, 0xe1, 0x6e, 0x2e, 0x3b, 0xfe, 0x72, 0x69, 0x2e, 0x3b,
+0x6d, 0x69, 0xf0, 0x2e, 0x3b, 0x66, 0x69, 0x6d, 0x2e, 0x3b, 0x66, 0xf6,
+0x73, 0x2e, 0x3b, 0x6c, 0x61, 0x75, 0x2e, 0x53, 0x3b, 0x4d, 0x3b, 0xde,
+0x3b, 0x4d, 0x3b, 0x46, 0x3b, 0x46, 0x3b, 0x4c, 0x53, 0x1ecd, 0x6e, 0x64,
+0x65, 0x65, 0x3b, 0x4d, 0x1ecd, 0x6e, 0x64, 0x65, 0x3b, 0x54, 0x69, 0x75,
+0x7a, 0x64, 0x65, 0x65, 0x3b, 0x57, 0x65, 0x6e, 0x65, 0x7a, 0x64, 0x65,
+0x65, 0x3b, 0x54, 0x1ecd, 0x1ecd, 0x7a, 0x64, 0x65, 0x65, 0x3b, 0x46, 0x72,
+0x61, 0x1ecb, 0x64, 0x65, 0x65, 0x3b, 0x53, 0x61, 0x74, 0x1ecd, 0x64, 0x65,
+0x65, 0x53, 0x1ecd, 0x6e, 0x3b, 0x4d, 0x1ecd, 0x6e, 0x3b, 0x54, 0x69, 0x75,
+0x3b, 0x57, 0x65, 0x6e, 0x3b, 0x54, 0x1ecd, 0x1ecd, 0x3b, 0x46, 0x72, 0x61,
+0x1ecb, 0x3b, 0x53, 0x61, 0x74, 0x70, 0x61, 0x73, 0x65, 0x70, 0x65, 0x69,
+0x76, 0x69, 0x3b, 0x76, 0x75, 0x6f, 0x73, 0x73, 0x61, 0x72, 0x67, 0xe2,
+0x3b, 0x6d, 0x61, 0x6a, 0x65, 0x62, 0x61, 0x72, 0x67, 0xe2, 0x3b, 0x6b,
+0x6f, 0x73, 0x6b, 0x6f, 0x6b, 0x6b, 0x6f, 0x3b, 0x74, 0x75, 0x6f, 0x72,
+0xe2, 0x73, 0x74, 0xe2, 0x68, 0x3b, 0x76, 0xe1, 0x73, 0x74, 0x75, 0x70,
+0x70, 0x65, 0x69, 0x76, 0x69, 0x3b, 0x6c, 0xe1, 0x76, 0x75, 0x72, 0x64,
+0xe2, 0x68, 0x70, 0x61, 0x73, 0x65, 0x70, 0x65, 0x65, 0x69, 0x76, 0x69,
+0x3b, 0x76, 0x75, 0x6f, 0x73, 0x73, 0x61, 0x61, 0x72, 0x67, 0xe2, 0x3b,
+0x6d, 0x61, 0x6a, 0x65, 0x62, 0x61, 0x61, 0x72, 0x67, 0xe2, 0x3b, 0x6b,
+0x6f, 0x73, 0x6b, 0x6f, 0x68, 0x6f, 0x3b, 0x74, 0x75, 0x6f, 0x72, 0xe2,
+0x73, 0x74, 0x75, 0x76, 0x3b, 0x76, 0xe1, 0x73, 0x74, 0x75, 0x70, 0x70,
+0x65, 0x65, 0x69, 0x76, 0x69, 0x3b, 0x6c, 0xe1, 0x76, 0x75, 0x72, 0x64,
+0x75, 0x76, 0x70, 0x61, 0x73, 0x3b, 0x76, 0x75, 0x6f, 0x3b, 0x6d, 0x61,
+0x6a, 0x3b, 0x6b, 0x6f, 0x73, 0x3b, 0x74, 0x75, 0x6f, 0x3b, 0x76, 0xe1,
+0x73, 0x3b, 0x6c, 0xe1, 0x76, 0x70, 0x3b, 0x56, 0x3b, 0x4d, 0x3b, 0x4b,
+0x3b, 0x54, 0x3b, 0x56, 0x3b, 0x4c, 0x4d, 0x69, 0x6e, 0x67, 0x67, 0x75,
+0x3b, 0x53, 0x65, 0x6e, 0x69, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x61, 0x73,
+0x61, 0x3b, 0x52, 0x61, 0x62, 0x75, 0x3b, 0x4b, 0x61, 0x6d, 0x69, 0x73,
+0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x75,
+0x4d, 0x69, 0x6e, 0x3b, 0x53, 0x65, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x3b,
+0x52, 0x61, 0x62, 0x3b, 0x4b, 0x61, 0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b,
+0x53, 0x61, 0x62, 0x4d, 0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x4b,
+0x3b, 0x4a, 0x3b, 0x53, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61,
+0x3b, 0x6c, 0x75, 0x6e, 0x65, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x74,
+0x65, 0x64, 0x69, 0x3b, 0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x69, 0x64,
+0x69, 0x3b, 0x6a, 0x6f, 0x76, 0x65, 0x64, 0x69, 0x3b, 0x76, 0x65, 0x6e,
+0x65, 0x72, 0x64, 0x69, 0x3b, 0x73, 0x61, 0x62, 0x62, 0x61, 0x74, 0x6f,
+0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b,
+0x6d, 0x65, 0x72, 0x3b, 0x6a, 0x6f, 0x76, 0x3b, 0x76, 0x65, 0x6e, 0x3b,
+0x73, 0x61, 0x62, 0x64, 0x3b, 0x6c, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x6a,
+0x3b, 0x76, 0x3b, 0x73, 0x73, 0x6f, 0x6c, 0x65, 0x64, 0xed, 0x3b, 0x6c,
+0x75, 0x6e, 0x65, 0x64, 0xed, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0xed, 0x3b,
+0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x64, 0xed, 0x3b, 0x6a, 0x6f, 0x76,
+0x65, 0x64, 0xed, 0x3b, 0x76, 0x65, 0x6e, 0x65, 0x72, 0x64, 0xed, 0x3b,
+0x73, 0x61, 0x74, 0x75, 0x72, 0x64, 0xed, 0x73, 0x6f, 0x6c, 0x2e, 0x3b,
+0x6c, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0x65,
+0x72, 0x2e, 0x3b, 0x6a, 0x6f, 0x76, 0x2e, 0x3b, 0x76, 0x65, 0x6e, 0x2e,
+0x3b, 0x73, 0x61, 0x74, 0x2e, 0x53, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d,
+0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x14c8, 0x1466, 0x144f, 0x1591, 0x152d, 0x1585,
+0x3b, 0x14c7, 0x14a1, 0x1490, 0x153e, 0x152d, 0x1405, 0x3b, 0x14c7, 0x14a1, 0x1490, 0x153e,
+0x152d, 0x1405, 0x14d5, 0x1585, 0x146d, 0x3b, 0x1431, 0x1593, 0x1466, 0x14ef, 0x1585, 0x3b,
+0x14ef, 0x1455, 0x14bb, 0x14a5, 0x1585, 0x3b, 0x1455, 0x14ea, 0x14d5, 0x14bb, 0x14a5, 0x1405,
+0x1466, 0x3b, 0x14c8, 0x1466, 0x14f0, 0x1591, 0x152d, 0x14db, 0x1550, 0x14c2, 0x140a, 0x1585,
+0x44, 0xe9, 0x20, 0x44, 0x6f, 0x6d, 0x68, 0x6e, 0x61, 0x69, 0x67, 0x68,
+0x3b, 0x44, 0xe9, 0x20, 0x4c, 0x75, 0x61, 0x69, 0x6e, 0x3b, 0x44, 0xe9,
+0x20, 0x4d, 0xe1, 0x69, 0x72, 0x74, 0x3b, 0x44, 0xe9, 0x20, 0x43, 0xe9,
+0x61, 0x64, 0x61, 0x6f, 0x69, 0x6e, 0x3b, 0x44, 0xe9, 0x61, 0x72, 0x64,
+0x61, 0x6f, 0x69, 0x6e, 0x3b, 0x44, 0xe9, 0x20, 0x68, 0x41, 0x6f, 0x69,
+0x6e, 0x65, 0x3b, 0x44, 0xe9, 0x20, 0x53, 0x61, 0x74, 0x68, 0x61, 0x69,
+0x72, 0x6e, 0x44, 0x6f, 0x6d, 0x68, 0x3b, 0x4c, 0x75, 0x61, 0x6e, 0x3b,
+0x4d, 0xe1, 0x69, 0x72, 0x74, 0x3b, 0x43, 0xe9, 0x61, 0x64, 0x3b, 0x44,
+0xe9, 0x61, 0x72, 0x3b, 0x41, 0x6f, 0x69, 0x6e, 0x65, 0x3b, 0x53, 0x61,
+0x74, 0x68, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x43, 0x3b, 0x44, 0x3b,
+0x41, 0x3b, 0x53, 0x64, 0x6f, 0x6d, 0x65, 0x6e, 0x69, 0x63, 0x61, 0x3b,
+0x6c, 0x75, 0x6e, 0x65, 0x64, 0xec, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65,
+0x64, 0xec, 0x3b, 0x6d, 0x65, 0x72, 0x63, 0x6f, 0x6c, 0x65, 0x64, 0xec,
+0x3b, 0x67, 0x69, 0x6f, 0x76, 0x65, 0x64, 0xec, 0x3b, 0x76, 0x65, 0x6e,
+0x65, 0x72, 0x64, 0xec, 0x3b, 0x73, 0x61, 0x62, 0x61, 0x74, 0x6f, 0x64,
+0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d,
+0x65, 0x72, 0x3b, 0x67, 0x69, 0x6f, 0x3b, 0x76, 0x65, 0x6e, 0x3b, 0x73,
+0x61, 0x62, 0x65e5, 0x66dc, 0x65e5, 0x3b, 0x6708, 0x66dc, 0x65e5, 0x3b, 0x706b, 0x66dc,
+0x65e5, 0x3b, 0x6c34, 0x66dc, 0x65e5, 0x3b, 0x6728, 0x66dc, 0x65e5, 0x3b, 0x91d1, 0x66dc,
+0x65e5, 0x3b, 0x571f, 0x66dc, 0x65e5, 0x65e5, 0x3b, 0x6708, 0x3b, 0x706b, 0x3b, 0x6c34,
+0x3b, 0x6728, 0x3b, 0x91d1, 0x3b, 0x571f, 0x41, 0x68, 0x61, 0x64, 0x3b, 0x53,
+0x65, 0x6e, 0x69, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x61, 0x73, 0x61, 0x3b,
+0x52, 0x61, 0x62, 0x75, 0x3b, 0x4b, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x4a,
+0x75, 0x6d, 0x61, 0x74, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x75, 0x41, 0x68,
+0x61, 0x64, 0x3b, 0x53, 0x65, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x3b, 0x52,
+0x61, 0x62, 0x3b, 0x4b, 0x61, 0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53,
+0x61, 0x62, 0x41, 0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x4b, 0x3b,
+0x4a, 0x3b, 0x53, 0x4c, 0x61, 0x64, 0x69, 0x3b, 0x4c, 0x69, 0x6e, 0x74,
+0x61, 0x6e, 0x69, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b, 0x4c,
+0x61, 0x72, 0x62, 0x61, 0x3b, 0x4c, 0x61, 0x6d, 0x69, 0x74, 0x3b, 0x4a,
+0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x61, 0x62, 0x61, 0x72, 0x4c, 0x61,
+0x64, 0x3b, 0x4c, 0x69, 0x6e, 0x3b, 0x54, 0x61, 0x6c, 0x3b, 0x4c, 0x61,
+0x72, 0x3b, 0x4c, 0x61, 0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x41, 0x73,
+0x61, 0x44, 0x69, 0x6d, 0x61, 0x73, 0x3b, 0x54, 0x65, 0x6e, 0x65, 0x14b,
+0x3b, 0x54, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72,
+0x62, 0x61, 0x79, 0x3b, 0x41, 0x72, 0x61, 0x6d, 0x69, 0x73, 0x61, 0x79,
+0x3b, 0x41, 0x72, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x53, 0x69, 0x62, 0x69,
+0x74, 0x69, 0x44, 0x69, 0x6d, 0x3b, 0x54, 0x65, 0x6e, 0x3b, 0x54, 0x61,
+0x6c, 0x3b, 0x41, 0x6c, 0x61, 0x3b, 0x41, 0x72, 0x61, 0x3b, 0x41, 0x72,
+0x6a, 0x3b, 0x53, 0x69, 0x62, 0x44, 0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x41,
+0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x53, 0x64, 0x75, 0x6d, 0x69, 0x6e, 0x67,
+0x75, 0x3b, 0x73, 0x69, 0x67, 0x75, 0x6e, 0x64, 0x61, 0x2d, 0x66, 0x65,
+0x72, 0x61, 0x3b, 0x74, 0x65, 0x72, 0x73, 0x61, 0x2d, 0x66, 0x65, 0x72,
+0x61, 0x3b, 0x6b, 0x75, 0x61, 0x72, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x72,
+0x61, 0x3b, 0x6b, 0x69, 0x6e, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61,
+0x3b, 0x73, 0x65, 0x73, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x72, 0x61, 0x3b,
+0x73, 0xe1, 0x62, 0x61, 0x64, 0x75, 0x64, 0x75, 0x6d, 0x3b, 0x73, 0x69,
+0x67, 0x3b, 0x74, 0x65, 0x72, 0x3b, 0x6b, 0x75, 0x61, 0x3b, 0x6b, 0x69,
+0x6e, 0x3b, 0x73, 0x65, 0x73, 0x3b, 0x73, 0x61, 0x62, 0x44, 0x3b, 0x53,
+0x3b, 0x54, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b, 0x53, 0x3b, 0x53, 0x41, 0x63,
+0x65, 0x72, 0x3b, 0x41, 0x72, 0x69, 0x6d, 0x3b, 0x41, 0x72, 0x61, 0x6d,
+0x3b, 0x41, 0x68, 0x61, 0x64, 0x3b, 0x41, 0x6d, 0x68, 0x61, 0x64, 0x3b,
+0x53, 0x65, 0x6d, 0x3b, 0x53, 0x65, 0x64, 0x59, 0x61, 0x6e, 0x61, 0x73,
+0x73, 0x3b, 0x53, 0x61, 0x6e, 0x61, 0x73, 0x73, 0x3b, 0x4b, 0x72, 0x61,
+0x1e0d, 0x61, 0x73, 0x73, 0x3b, 0x4b, 0x75, 0x1e93, 0x61, 0x73, 0x73, 0x3b,
+0x53, 0x61, 0x6d, 0x61, 0x73, 0x73, 0x3b, 0x53, 0x1e0d, 0x69, 0x73, 0x61,
+0x73, 0x73, 0x3b, 0x53, 0x61, 0x79, 0x61, 0x73, 0x73, 0x41, 0x63, 0x65,
+0x3b, 0x41, 0x72, 0x69, 0x3b, 0x41, 0x72, 0x61, 0x3b, 0x41, 0x68, 0x61,
+0x3b, 0x41, 0x6d, 0x68, 0x3b, 0x53, 0x65, 0x6d, 0x3b, 0x53, 0x65, 0x64,
+0x59, 0x61, 0x6e, 0x3b, 0x53, 0x61, 0x6e, 0x3b, 0x4b, 0x72, 0x61, 0x1e0d,
+0x3b, 0x4b, 0x75, 0x1e93, 0x3b, 0x53, 0x61, 0x6d, 0x3b, 0x53, 0x1e0d, 0x69,
+0x73, 0x3b, 0x53, 0x61, 0x79, 0x59, 0x3b, 0x53, 0x3b, 0x4b, 0x3b, 0x4b,
+0x3b, 0x53, 0x3b, 0x53, 0x3b, 0x53, 0x43, 0x3b, 0x52, 0x3b, 0x52, 0x3b,
+0x48, 0x3b, 0x4d, 0x3b, 0x53, 0x3b, 0x53, 0x73, 0x254, 0x6e, 0x64, 0x69,
+0x3b, 0x6c, 0x75, 0x6e, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69,
+0x3b, 0x6d, 0x25b, 0x72, 0x6b, 0x25b, 0x72, 0x25b, 0x64, 0x69, 0x3b, 0x79,
+0x65, 0x64, 0x69, 0x3b, 0x76, 0x61, 0x14b, 0x64, 0x25b, 0x72, 0x25b, 0x64,
+0x69, 0x3b, 0x6d, 0x254, 0x6e, 0x254, 0x20, 0x73, 0x254, 0x6e, 0x64, 0x69,
+0x73, 0x6f, 0x3b, 0x6c, 0x75, 0x3b, 0x6d, 0x61, 0x3b, 0x6d, 0x25b, 0x3b,
+0x79, 0x65, 0x3b, 0x76, 0x61, 0x3b, 0x6d, 0x73, 0x73, 0x61, 0x70, 0x61,
+0x61, 0x74, 0x3b, 0x61, 0x74, 0x61, 0x61, 0x73, 0x69, 0x6e, 0x6e, 0x67,
+0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b, 0x6d, 0x61, 0x72, 0x6c, 0x75, 0x6e,
+0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b, 0x70, 0x69, 0x6e, 0x67,
+0x61, 0x73, 0x75, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b,
+0x73, 0x69, 0x73, 0x61, 0x6d, 0x61, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e,
+0x65, 0x71, 0x3b, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x6d, 0x61, 0x6e, 0x6e,
+0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x3b, 0x61, 0x72, 0x66, 0x69, 0x6e,
+0x69, 0x6e, 0x6e, 0x67, 0x6f, 0x72, 0x6e, 0x65, 0x71, 0x73, 0x61, 0x70,
+0x3b, 0x61, 0x74, 0x61, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x70, 0x69, 0x6e,
+0x3b, 0x73, 0x69, 0x73, 0x3b, 0x74, 0x61, 0x6c, 0x3b, 0x61, 0x72, 0x66,
+0x53, 0x3b, 0x41, 0x3b, 0x4d, 0x3b, 0x50, 0x3b, 0x53, 0x3b, 0x54, 0x3b,
+0x41, 0x4b, 0x6f, 0x74, 0x69, 0x73, 0x61, 0x70, 0x3b, 0x4b, 0x6f, 0x74,
+0x61, 0x61, 0x69, 0x3b, 0x4b, 0x6f, 0x61, 0x65, 0x6e, 0x67, 0x2019, 0x3b,
+0x4b, 0x6f, 0x73, 0x6f, 0x6d, 0x6f, 0x6b, 0x3b, 0x4b, 0x6f, 0x61, 0x6e,
+0x67, 0x2019, 0x77, 0x61, 0x6e, 0x3b, 0x4b, 0x6f, 0x6d, 0x75, 0x75, 0x74,
+0x3b, 0x4b, 0x6f, 0x6c, 0x6f, 0x4b, 0x74, 0x73, 0x3b, 0x4b, 0x6f, 0x74,
+0x3b, 0x4b, 0x6f, 0x6f, 0x3b, 0x4b, 0x6f, 0x73, 0x3b, 0x4b, 0x6f, 0x61,
+0x3b, 0x4b, 0x6f, 0x6d, 0x3b, 0x4b, 0x6f, 0x6c, 0x54, 0x3b, 0x54, 0x3b,
+0x4f, 0x3b, 0x53, 0x3b, 0x41, 0x3b, 0x4d, 0x3b, 0x4c, 0x57, 0x61, 0x20,
+0x6b, 0x79, 0x75, 0x6d, 0x77, 0x61, 0x3b, 0x57, 0x61, 0x20, 0x6b, 0x77,
+0x61, 0x6d, 0x62, 0x129, 0x6c, 0x129, 0x6c, 0x79, 0x61, 0x3b, 0x57, 0x61,
+0x20, 0x6b, 0x65, 0x6c, 0x129, 0x3b, 0x57, 0x61, 0x20, 0x6b, 0x61, 0x74,
+0x61, 0x74, 0x169, 0x3b, 0x57, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x61, 0x3b,
+0x57, 0x61, 0x20, 0x6b, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x57, 0x61,
+0x20, 0x74, 0x68, 0x61, 0x6e, 0x74, 0x68, 0x61, 0x74, 0x169, 0x57, 0x6b,
+0x79, 0x3b, 0x57, 0x6b, 0x77, 0x3b, 0x57, 0x6b, 0x6c, 0x3b, 0x57, 0x74,
+0x169, 0x3b, 0x57, 0x6b, 0x6e, 0x3b, 0x57, 0x74, 0x6e, 0x3b, 0x57, 0x74,
+0x68, 0x59, 0x3b, 0x57, 0x3b, 0x45, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x41,
+0x3b, 0x41, 0xcad, 0xcbe, 0xca8, 0xcc1, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcb8, 0xccb,
+0xcae, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcae, 0xc82, 0xc97, 0xcb3, 0xcb5, 0xcbe, 0xcb0,
+0x3b, 0xcac, 0xcc1, 0xca7, 0xcb5, 0xcbe, 0xcb0, 0x3b, 0xc97, 0xcc1, 0xcb0, 0xcc1,
+0xcb5, 0xcbe, 0xcb0, 0x3b, 0xcb6, 0xcc1, 0xc95, 0xccd, 0xcb0, 0xcb5, 0xcbe, 0xcb0,
+0x3b, 0xcb6, 0xca8, 0xcbf, 0xcb5, 0xcbe, 0xcb0, 0xcad, 0xcbe, 0xca8, 0xcc1, 0x3b,
+0xcb8, 0xccb, 0xcae, 0x3b, 0xcae, 0xc82, 0xc97, 0xcb3, 0x3b, 0xcac, 0xcc1, 0xca7,
+0x3b, 0xc97, 0xcc1, 0xcb0, 0xcc1, 0x3b, 0xcb6, 0xcc1, 0xc95, 0xccd, 0xcb0, 0x3b,
+0xcb6, 0xca8, 0xcbf, 0xcad, 0xcbe, 0x3b, 0xcb8, 0xccb, 0x3b, 0xcae, 0xc82, 0x3b,
+0xcac, 0xcc1, 0x3b, 0xc97, 0xcc1, 0x3b, 0xcb6, 0xcc1, 0x3b, 0xcb6, 0x627, 0x64e,
+0x62a, 0x6be, 0x648, 0x627, 0x631, 0x3b, 0x698, 0x654, 0x646, 0x62f, 0x631, 0x655,
+0x631, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x6c6, 0x645, 0x648, 0x627, 0x631, 0x3b,
+0x628, 0x648, 0x62f, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x631, 0x620, 0x633, 0x648,
+0x627, 0x631, 0x3b, 0x62c, 0x64f, 0x645, 0x6c1, 0x3b, 0x628, 0x679, 0x648, 0x627,
+0x631, 0x622, 0x62a, 0x6be, 0x648, 0x627, 0x631, 0x3b, 0x698, 0x654, 0x646, 0x62f,
+0x655, 0x631, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x6c6, 0x645, 0x648, 0x627, 0x631,
+0x3b, 0x628, 0x648, 0x62f, 0x648, 0x627, 0x631, 0x3b, 0x628, 0x631, 0x620, 0x633,
+0x648, 0x627, 0x631, 0x3b, 0x62c, 0x64f, 0x645, 0x6c1, 0x3b, 0x628, 0x679, 0x648,
+0x627, 0x631, 0x627, 0x3b, 0x698, 0x3b, 0x628, 0x3b, 0x628, 0x3b, 0x628, 0x3b,
+0x62c, 0x3b, 0x628, 0x906, 0x925, 0x935, 0x93e, 0x930, 0x3b, 0x91a, 0x902, 0x926,
+0x93f, 0x930, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x935, 0x93e, 0x930, 0x3b,
+0x92c, 0x94b, 0x926, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x94d, 0x930, 0x947, 0x938,
+0x935, 0x93e, 0x930, 0x3b, 0x91c, 0x941, 0x92e, 0x94d, 0x92e, 0x93e, 0x3b, 0x92c,
+0x91f, 0x935, 0x93e, 0x930, 0x906, 0x925, 0x935, 0x93e, 0x930, 0x3b, 0x91a, 0x93c,
+0x902, 0x926, 0x93f, 0x930, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x94b, 0x92e, 0x935,
+0x93e, 0x930, 0x3b, 0x92c, 0x94b, 0x926, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x94d,
+0x930, 0x947, 0x938, 0x935, 0x93e, 0x930, 0x3b, 0x91c, 0x941, 0x92e, 0x93e, 0x3b,
+0x92c, 0x91f, 0x935, 0x93e, 0x930, 0x906, 0x925, 0x935, 0x93e, 0x930, 0x3b, 0x91a,
+0x902, 0x926, 0x93f, 0x930, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x935, 0x93e,
+0x930, 0x3b, 0x92c, 0x94b, 0x926, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x94d, 0x930,
+0x947, 0x938, 0x935, 0x93e, 0x930, 0x3b, 0x91c, 0x941, 0x92e, 0x93e, 0x3b, 0x92c,
+0x91f, 0x935, 0x93e, 0x930, 0x905, 0x3b, 0x91a, 0x3b, 0x92c, 0x3b, 0x92c, 0x3b,
+0x92c, 0x3b, 0x91c, 0x3b, 0x92c, 0x436, 0x435, 0x43a, 0x441, 0x435, 0x43d, 0x431,
+0x456, 0x3b, 0x434, 0x4af, 0x439, 0x441, 0x435, 0x43d, 0x431, 0x456, 0x3b, 0x441,
+0x435, 0x439, 0x441, 0x435, 0x43d, 0x431, 0x456, 0x3b, 0x441, 0x4d9, 0x440, 0x441,
+0x435, 0x43d, 0x431, 0x456, 0x3b, 0x431, 0x435, 0x439, 0x441, 0x435, 0x43d, 0x431,
+0x456, 0x3b, 0x436, 0x4b1, 0x43c, 0x430, 0x3b, 0x441, 0x435, 0x43d, 0x431, 0x456,
+0x436, 0x441, 0x3b, 0x434, 0x441, 0x3b, 0x441, 0x441, 0x3b, 0x441, 0x440, 0x3b,
+0x431, 0x441, 0x3b, 0x436, 0x43c, 0x3b, 0x441, 0x431, 0x416, 0x3b, 0x414, 0x3b,
+0x421, 0x3b, 0x421, 0x3b, 0x411, 0x3b, 0x416, 0x3b, 0x421, 0x17a2, 0x17b6, 0x1791,
+0x17b7, 0x178f, 0x17d2, 0x1799, 0x3b, 0x1785, 0x1793, 0x17d2, 0x1791, 0x3b, 0x17a2, 0x1784,
+0x17d2, 0x1782, 0x17b6, 0x179a, 0x3b, 0x1796, 0x17bb, 0x1792, 0x3b, 0x1796, 0x17d2, 0x179a,
+0x17a0, 0x179f, 0x17d2, 0x1794, 0x178f, 0x17b7, 0x17cd, 0x3b, 0x179f, 0x17bb, 0x1780, 0x17d2,
+0x179a, 0x3b, 0x179f, 0x17c5, 0x179a, 0x17cd, 0x17a2, 0x17b6, 0x1791, 0x17b7, 0x178f, 0x17d2,
+0x1799, 0x3b, 0x1785, 0x17d0, 0x1793, 0x17d2, 0x1791, 0x3b, 0x17a2, 0x1784, 0x17d2, 0x1782,
+0x17b6, 0x179a, 0x3b, 0x1796, 0x17bb, 0x1792, 0x3b, 0x1796, 0x17d2, 0x179a, 0x17a0, 0x179f,
+0x17d2, 0x1794, 0x178f, 0x17b7, 0x17cd, 0x3b, 0x179f, 0x17bb, 0x1780, 0x17d2, 0x179a, 0x3b,
+0x179f, 0x17c5, 0x179a, 0x17cd, 0x17a2, 0x17b6, 0x1791, 0x17b7, 0x178f, 0x17d2, 0x1799, 0x3b,
+0x1785, 0x1793, 0x17d2, 0x1791, 0x3b, 0x17a2, 0x1784, 0x17d2, 0x1782, 0x17b6, 0x179a, 0x3b,
+0x1796, 0x17bb, 0x1792, 0x3b, 0x1796, 0x17d2, 0x179a, 0x17a0, 0x3b, 0x179f, 0x17bb, 0x1780,
+0x17d2, 0x179a, 0x3b, 0x179f, 0x17c5, 0x179a, 0x17cd, 0x17a2, 0x3b, 0x1785, 0x3b, 0x17a2,
+0x3b, 0x1796, 0x3b, 0x1796, 0x3b, 0x179f, 0x3b, 0x179f, 0x4b, 0x69, 0x75, 0x6d,
+0x69, 0x61, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x169,
+0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x3b, 0x4e, 0x6a,
+0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x61, 0x3b, 0x41, 0x72, 0x61, 0x6d,
+0x69, 0x74, 0x68, 0x69, 0x3b, 0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b,
+0x4e, 0x6a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x74, 0x68, 0x69, 0x4b, 0x4d,
+0x41, 0x3b, 0x4e, 0x54, 0x54, 0x3b, 0x4e, 0x4d, 0x4e, 0x3b, 0x4e, 0x4d,
+0x54, 0x3b, 0x41, 0x52, 0x54, 0x3b, 0x4e, 0x4d, 0x41, 0x3b, 0x4e, 0x4d,
+0x4d, 0x4b, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x41, 0x3b, 0x4e,
+0x3b, 0x4e, 0x4b, 0x75, 0x20, 0x63, 0x79, 0x75, 0x6d, 0x77, 0x65, 0x72,
+0x75, 0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x6d, 0x62, 0x65, 0x72, 0x65,
+0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x6b, 0x61, 0x62, 0x69, 0x72, 0x69,
+0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x74, 0x75,
+0x3b, 0x4b, 0x75, 0x77, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x65, 0x3b, 0x4b,
+0x75, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x6e, 0x75, 0x3b, 0x4b,
+0x75, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x74,
+0x75, 0x63, 0x79, 0x75, 0x2e, 0x3b, 0x6d, 0x62, 0x65, 0x2e, 0x3b, 0x6b,
+0x61, 0x62, 0x2e, 0x3b, 0x67, 0x74, 0x75, 0x2e, 0x3b, 0x6b, 0x61, 0x6e,
+0x2e, 0x3b, 0x67, 0x6e, 0x75, 0x2e, 0x3b, 0x67, 0x6e, 0x64, 0x2e, 0x906,
+0x92f, 0x924, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x93e, 0x930, 0x3b, 0x92e,
+0x902, 0x917, 0x933, 0x93e, 0x930, 0x3b, 0x92c, 0x941, 0x927, 0x935, 0x93e, 0x930,
+0x3b, 0x92c, 0x93f, 0x930, 0x947, 0x938, 0x94d, 0x924, 0x93e, 0x930, 0x3b, 0x936,
+0x941, 0x915, 0x94d, 0x930, 0x93e, 0x930, 0x3b, 0x936, 0x947, 0x928, 0x935, 0x93e,
+0x930, 0x906, 0x3b, 0x938, 0x94b, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x3b,
+0x92c, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0x947, 0x906, 0x3b, 0x938, 0x94b, 0x3b,
+0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x3b, 0x92c, 0x93f, 0x3b, 0x936, 0x941, 0x3b,
+0x936, 0x947, 0xc77c, 0xc694, 0xc77c, 0x3b, 0xc6d4, 0xc694, 0xc77c, 0x3b, 0xd654, 0xc694,
+0xc77c, 0x3b, 0xc218, 0xc694, 0xc77c, 0x3b, 0xbaa9, 0xc694, 0xc77c, 0x3b, 0xae08, 0xc694,
+0xc77c, 0x3b, 0xd1a0, 0xc694, 0xc77c, 0xc77c, 0x3b, 0xc6d4, 0x3b, 0xd654, 0x3b, 0xc218,
+0x3b, 0xbaa9, 0x3b, 0xae08, 0x3b, 0xd1a0, 0x41, 0x6c, 0x68, 0x61, 0x64, 0x69,
+0x3b, 0x41, 0x74, 0x69, 0x6e, 0x6e, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x6c,
+0x61, 0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x62, 0x61, 0x3b,
+0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x69, 0x73, 0x61, 0x3b, 0x41, 0x6c,
+0x7a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x69, 0x62, 0x74, 0x69, 0x41,
+0x6c, 0x68, 0x3b, 0x41, 0x74, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x3b, 0x41,
+0x6c, 0x61, 0x3b, 0x41, 0x6c, 0x6d, 0x3b, 0x41, 0x6c, 0x7a, 0x3b, 0x41,
+0x73, 0x69, 0x48, 0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x4c, 0x3b, 0x4c, 0x3b,
+0x4c, 0x3b, 0x53, 0x41, 0x6c, 0x68, 0x61, 0x64, 0x69, 0x3b, 0x41, 0x74,
+0x69, 0x6e, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b,
+0x41, 0x6c, 0x61, 0x72, 0x62, 0x61, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d,
+0x69, 0x69, 0x73, 0x61, 0x3b, 0x41, 0x6c, 0x6a, 0x75, 0x6d, 0x61, 0x3b,
+0x41, 0x73, 0x73, 0x61, 0x62, 0x64, 0x75, 0x41, 0x6c, 0x68, 0x3b, 0x41,
+0x74, 0x69, 0x3b, 0x41, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x3b, 0x41,
+0x6c, 0x6d, 0x3b, 0x41, 0x6c, 0x6a, 0x3b, 0x41, 0x73, 0x73, 0x79, 0x65,
+0x6b, 0x15f, 0x65, 0x6d, 0x3b, 0x64, 0x75, 0x15f, 0x65, 0x6d, 0x3b, 0x73,
+0xea, 0x15f, 0x65, 0x6d, 0x3b, 0xe7, 0x61, 0x72, 0x15f, 0x65, 0x6d, 0x3b,
+0x70, 0xea, 0x6e, 0x63, 0x15f, 0x65, 0x6d, 0x3b, 0xee, 0x6e, 0xee, 0x3b,
+0x15f, 0x65, 0x6d, 0xee, 0x79, 0x15f, 0x6d, 0x3b, 0x64, 0x15f, 0x6d, 0x3b,
+0x73, 0x15f, 0x6d, 0x3b, 0xe7, 0x15f, 0x6d, 0x3b, 0x70, 0x15f, 0x6d, 0x3b,
+0xee, 0x6e, 0xee, 0x3b, 0x15f, 0x65, 0x6d, 0x59, 0x3b, 0x44, 0x3b, 0x53,
+0x3b, 0xc7, 0x3b, 0x50, 0x3b, 0xce, 0x3b, 0x15e, 0x73, 0x254, 0x301, 0x6e,
+0x64, 0x254, 0x3b, 0x6d, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x3b, 0x73, 0x254,
+0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x61, 0x66, 0xfa, 0x20, 0x6d, 0xe1,
+0x62, 0x61, 0x3b, 0x73, 0x254, 0x301, 0x6e, 0x64, 0x254, 0x20, 0x6d, 0x61,
+0x66, 0xfa, 0x20, 0x6d, 0xe1, 0x6c, 0x61, 0x6c, 0x3b, 0x73, 0x254, 0x301,
+0x6e, 0x64, 0x254, 0x20, 0x6d, 0x61, 0x66, 0xfa, 0x20, 0x6d, 0xe1, 0x6e,
+0x61, 0x3b, 0x6d, 0x61, 0x62, 0xe1, 0x67, 0xe1, 0x20, 0x6d, 0xe1, 0x20,
+0x73, 0x75, 0x6b, 0x75, 0x6c, 0x3b, 0x73, 0xe1, 0x73, 0x61, 0x64, 0x69,
+0x73, 0x254, 0x301, 0x6e, 0x3b, 0x6d, 0x254, 0x301, 0x6e, 0x3b, 0x73, 0x6d,
+0x62, 0x3b, 0x73, 0x6d, 0x6c, 0x3b, 0x73, 0x6d, 0x6e, 0x3b, 0x6d, 0x62,
+0x73, 0x3b, 0x73, 0x61, 0x73, 0x73, 0x3b, 0x6d, 0x3b, 0x73, 0x3b, 0x73,
+0x3b, 0x73, 0x3b, 0x6d, 0x3b, 0x73, 0x436, 0x435, 0x43a, 0x448, 0x435, 0x43c,
+0x431, 0x438, 0x3b, 0x434, 0x4af, 0x439, 0x448, 0x4e9, 0x43c, 0x431, 0x4af, 0x3b,
+0x448, 0x435, 0x439, 0x448, 0x435, 0x43c, 0x431, 0x438, 0x3b, 0x448, 0x430, 0x440,
+0x448, 0x435, 0x43c, 0x431, 0x438, 0x3b, 0x431, 0x435, 0x439, 0x448, 0x435, 0x43c,
+0x431, 0x438, 0x3b, 0x436, 0x443, 0x43c, 0x430, 0x3b, 0x438, 0x448, 0x435, 0x43c,
+0x431, 0x438, 0x436, 0x435, 0x43a, 0x2e, 0x3b, 0x434, 0x4af, 0x439, 0x2e, 0x3b,
+0x448, 0x435, 0x439, 0x448, 0x2e, 0x3b, 0x448, 0x430, 0x440, 0x448, 0x2e, 0x3b,
+0x431, 0x435, 0x439, 0x448, 0x2e, 0x3b, 0x436, 0x443, 0x43c, 0x430, 0x3b, 0x438,
+0x448, 0x43c, 0x2e, 0x416, 0x3b, 0x414, 0x3b, 0x428, 0x3b, 0x428, 0x3b, 0x411,
+0x3b, 0x416, 0x3b, 0x418, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x77, 0x61,
+0x6b, 0x21f, 0x61, 0x14b, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x77,
+0x61, 0x14b, 0x17e, 0x69, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x6e,
+0x75, 0x14b, 0x70, 0x61, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x79,
+0x61, 0x6d, 0x6e, 0x69, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x74,
+0x6f, 0x70, 0x61, 0x3b, 0x41, 0x14b, 0x70, 0xe9, 0x74, 0x75, 0x7a, 0x61,
+0x70, 0x74, 0x61, 0x14b, 0x3b, 0x4f, 0x77, 0xe1, 0x14b, 0x67, 0x79, 0x75,
+0x17e, 0x61, 0x17e, 0x61, 0x70, 0x69, 0x41, 0x3b, 0x57, 0x3b, 0x4e, 0x3b,
+0x59, 0x3b, 0x54, 0x3b, 0x5a, 0x3b, 0x4f, 0x4a, 0x75, 0x6d, 0x61, 0x70,
+0xed, 0x69, 0x72, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0xe1, 0x74,
+0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0xed, 0x6e, 0x65, 0x3b, 0x4a, 0x75,
+0x6d, 0x61, 0x74, 0xe1, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x61, 0x6d,
+0xed, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0xe1, 0x61, 0x3b,
+0x4a, 0x75, 0x6d, 0x61, 0x6d, 0xf3, 0x6f, 0x73, 0x69, 0x50, 0xed, 0x69,
+0x6c, 0x69, 0x3b, 0x54, 0xe1, 0x61, 0x74, 0x75, 0x3b, 0xcd, 0x6e, 0x65,
+0x3b, 0x54, 0xe1, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49,
+0x6a, 0x6d, 0x3b, 0x4d, 0xf3, 0x6f, 0x73, 0x69, 0x50, 0x3b, 0x54, 0x3b,
+0x45, 0x3b, 0x4f, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x4d, 0xea7, 0xeb1, 0xe99,
+0xead, 0xeb2, 0xe97, 0xeb4, 0xe94, 0x3b, 0xea7, 0xeb1, 0xe99, 0xe88, 0xeb1, 0xe99,
+0x3b, 0xea7, 0xeb1, 0xe99, 0xead, 0xeb1, 0xe87, 0xe84, 0xeb2, 0xe99, 0x3b, 0xea7,
+0xeb1, 0xe99, 0xe9e, 0xeb8, 0xe94, 0x3b, 0xea7, 0xeb1, 0xe99, 0xe9e, 0xeb0, 0xeab,
+0xeb1, 0xe94, 0x3b, 0xea7, 0xeb1, 0xe99, 0xeaa, 0xeb8, 0xe81, 0x3b, 0xea7, 0xeb1,
+0xe99, 0xec0, 0xeaa, 0xebb, 0xeb2, 0xead, 0xeb2, 0xe97, 0xeb4, 0xe94, 0x3b, 0xe88,
+0xeb1, 0xe99, 0x3b, 0xead, 0xeb1, 0xe87, 0xe84, 0xeb2, 0xe99, 0x3b, 0xe9e, 0xeb8,
+0xe94, 0x3b, 0xe9e, 0xeb0, 0xeab, 0xeb1, 0xe94, 0x3b, 0xeaa, 0xeb8, 0xe81, 0x3b,
+0xec0, 0xeaa, 0xebb, 0xeb2, 0xead, 0xeb2, 0x3b, 0xe88, 0x3b, 0xead, 0x3b, 0xe9e,
+0x3b, 0xe9e, 0xeab, 0x3b, 0xeaa, 0xeb8, 0x3b, 0xeaa, 0x64, 0x69, 0x65, 0x73,
+0x20, 0x53, 0x6f, 0x6c, 0x69, 0x73, 0x3b, 0x64, 0x69, 0x65, 0x73, 0x20,
+0x4c, 0x75, 0x6e, 0x61, 0x65, 0x3b, 0x64, 0x69, 0x65, 0x73, 0x20, 0x4d,
+0x61, 0x72, 0x74, 0x69, 0x73, 0x3b, 0x64, 0x69, 0x65, 0x73, 0x20, 0x4d,
+0x65, 0x72, 0x63, 0x75, 0x72, 0x69, 0x69, 0x3b, 0x64, 0x69, 0x65, 0x73,
+0x20, 0x49, 0x6f, 0x76, 0x69, 0x73, 0x3b, 0x64, 0x69, 0x65, 0x73, 0x20,
+0x56, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x73, 0x3b, 0x64, 0x69, 0x65, 0x73,
+0x20, 0x53, 0x61, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x53, 0x6f, 0x6c, 0x3b,
+0x4c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x65, 0x72, 0x3b,
+0x49, 0x6f, 0x76, 0x3b, 0x56, 0x65, 0x6e, 0x3b, 0x53, 0x61, 0x74, 0x53,
+0x76, 0x113, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x50, 0x69, 0x72,
+0x6d, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x4f, 0x74, 0x72, 0x64, 0x69,
+0x65, 0x6e, 0x61, 0x3b, 0x54, 0x72, 0x65, 0x161, 0x64, 0x69, 0x65, 0x6e,
+0x61, 0x3b, 0x43, 0x65, 0x74, 0x75, 0x72, 0x74, 0x64, 0x69, 0x65, 0x6e,
+0x61, 0x3b, 0x50, 0x69, 0x65, 0x6b, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61,
+0x3b, 0x53, 0x65, 0x73, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x73, 0x76,
+0x113, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x70, 0x69, 0x72, 0x6d,
+0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b, 0x6f, 0x74, 0x72, 0x64, 0x69, 0x65,
+0x6e, 0x61, 0x3b, 0x74, 0x72, 0x65, 0x161, 0x64, 0x69, 0x65, 0x6e, 0x61,
+0x3b, 0x63, 0x65, 0x74, 0x75, 0x72, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61,
+0x3b, 0x70, 0x69, 0x65, 0x6b, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x3b,
+0x73, 0x65, 0x73, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x53, 0x76, 0x113,
+0x74, 0x64, 0x2e, 0x3b, 0x50, 0x69, 0x72, 0x6d, 0x64, 0x2e, 0x3b, 0x4f,
+0x74, 0x72, 0x64, 0x2e, 0x3b, 0x54, 0x72, 0x65, 0x161, 0x64, 0x2e, 0x3b,
+0x43, 0x65, 0x74, 0x75, 0x72, 0x74, 0x64, 0x2e, 0x3b, 0x50, 0x69, 0x65,
+0x6b, 0x74, 0x64, 0x2e, 0x3b, 0x53, 0x65, 0x73, 0x74, 0x64, 0x2e, 0x73,
+0x76, 0x113, 0x74, 0x64, 0x2e, 0x3b, 0x70, 0x69, 0x72, 0x6d, 0x64, 0x2e,
+0x3b, 0x6f, 0x74, 0x72, 0x64, 0x2e, 0x3b, 0x74, 0x72, 0x65, 0x161, 0x64,
+0x2e, 0x3b, 0x63, 0x65, 0x74, 0x75, 0x72, 0x74, 0x64, 0x2e, 0x3b, 0x70,
+0x69, 0x65, 0x6b, 0x74, 0x64, 0x2e, 0x3b, 0x73, 0x65, 0x73, 0x74, 0x64,
+0x2e, 0x53, 0x3b, 0x50, 0x3b, 0x4f, 0x3b, 0x54, 0x3b, 0x43, 0x3b, 0x50,
+0x3b, 0x53, 0x65, 0x79, 0x65, 0x6e, 0x67, 0x61, 0x3b, 0x6d, 0x6f, 0x6b,
+0x254, 0x6c, 0x254, 0x20, 0x6d, 0x77, 0x61, 0x20, 0x79, 0x61, 0x6d, 0x62,
+0x6f, 0x3b, 0x6d, 0x6f, 0x6b, 0x254, 0x6c, 0x254, 0x20, 0x6d, 0x77, 0x61,
+0x20, 0x6d, 0xed, 0x62, 0x61, 0x6c, 0xe9, 0x3b, 0x6d, 0x6f, 0x6b, 0x254,
+0x6c, 0x254, 0x20, 0x6d, 0x77, 0x61, 0x20, 0x6d, 0xed, 0x73, 0xe1, 0x74,
+0x6f, 0x3b, 0x6d, 0x6f, 0x6b, 0x254, 0x6c, 0x254, 0x20, 0x79, 0x61, 0x20,
+0x6d, 0xed, 0x6e, 0xe9, 0x69, 0x3b, 0x6d, 0x6f, 0x6b, 0x254, 0x6c, 0x254,
+0x20, 0x79, 0x61, 0x20, 0x6d, 0xed, 0x74, 0xe1, 0x6e, 0x6f, 0x3b, 0x6d,
+0x70, 0x254, 0x301, 0x73, 0x254, 0x65, 0x79, 0x65, 0x3b, 0x79, 0x62, 0x6f,
+0x3b, 0x6d, 0x62, 0x6c, 0x3b, 0x6d, 0x73, 0x74, 0x3b, 0x6d, 0x69, 0x6e,
+0x3b, 0x6d, 0x74, 0x6e, 0x3b, 0x6d, 0x70, 0x73, 0x65, 0x3b, 0x79, 0x3b,
+0x6d, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x70, 0x73, 0x65, 0x6b,
+0x6d, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x70, 0x69, 0x72,
+0x6d, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x61, 0x6e, 0x74,
+0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x74, 0x72, 0x65,
+0x10d, 0x69, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x6b, 0x65,
+0x74, 0x76, 0x69, 0x72, 0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73,
+0x3b, 0x70, 0x65, 0x6e, 0x6b, 0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69,
+0x73, 0x3b, 0x161, 0x65, 0x161, 0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69,
+0x73, 0x73, 0x6b, 0x3b, 0x70, 0x72, 0x3b, 0x61, 0x6e, 0x3b, 0x74, 0x72,
+0x3b, 0x6b, 0x74, 0x3b, 0x70, 0x6e, 0x3b, 0x161, 0x74, 0x53, 0x3b, 0x50,
+0x3b, 0x41, 0x3b, 0x54, 0x3b, 0x4b, 0x3b, 0x50, 0x3b, 0x160, 0x6e, 0x6a,
+0x65, 0x17a, 0x65, 0x6c, 0x61, 0x3b, 0x70, 0xf3, 0x6e, 0x6a, 0x65, 0x17a,
+0x65, 0x6c, 0x65, 0x3b, 0x77, 0x61, 0x142, 0x74, 0x6f, 0x72, 0x61, 0x3b,
+0x73, 0x72, 0x6a, 0x6f, 0x64, 0x61, 0x3b, 0x73, 0x74, 0x77, 0xf3, 0x72,
+0x74, 0x6b, 0x3b, 0x70, 0x11b, 0x74, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f,
+0x74, 0x61, 0x6e, 0x6a, 0x65, 0x3b, 0x70, 0xf3, 0x6e, 0x3b, 0x77, 0x61,
+0x142, 0x3b, 0x73, 0x72, 0x6a, 0x3b, 0x73, 0x74, 0x77, 0x3b, 0x70, 0x11b,
+0x74, 0x3b, 0x73, 0x6f, 0x62, 0x6e, 0x3b, 0x70, 0x3b, 0x77, 0x3b, 0x73,
+0x3b, 0x73, 0x3b, 0x70, 0x3b, 0x73, 0x53, 0xfc, 0x6e, 0x6e, 0x64, 0x61,
+0x67, 0x3b, 0x4d, 0x61, 0x61, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x44, 0x69,
+0x6e, 0x67, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x4d, 0x69, 0x64, 0x64, 0x65,
+0x77, 0x65, 0x6b, 0x65, 0x6e, 0x3b, 0x44, 0x75, 0x6e, 0x6e, 0x65, 0x72,
+0x73, 0x64, 0x61, 0x67, 0x3b, 0x46, 0x72, 0x65, 0x65, 0x64, 0x61, 0x67,
+0x3b, 0x53, 0xfc, 0x6e, 0x6e, 0x61, 0x76, 0x65, 0x6e, 0x64, 0x53, 0xfc,
+0x2e, 0x3b, 0x4d, 0x61, 0x2e, 0x3b, 0x44, 0x69, 0x2e, 0x3b, 0x4d, 0x69,
+0x2e, 0x3b, 0x44, 0x75, 0x2e, 0x3b, 0x46, 0x72, 0x2e, 0x3b, 0x53, 0x61,
+0x2e, 0x4c, 0x75, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b, 0x4e, 0x6b, 0x6f,
+0x64, 0x79, 0x61, 0x3b, 0x4e, 0x64, 0xe0, 0x61, 0x79, 0xe0, 0x3b, 0x4e,
+0x64, 0x61, 0x6e, 0x67, 0xf9, 0x3b, 0x4e, 0x6a, 0xf2, 0x77, 0x61, 0x3b,
+0x4e, 0x67, 0xf2, 0x76, 0x79, 0x61, 0x3b, 0x4c, 0x75, 0x62, 0x69, 0x6e,
+0x67, 0x75, 0x4c, 0x75, 0x6d, 0x3b, 0x4e, 0x6b, 0x6f, 0x3b, 0x4e, 0x64,
+0x79, 0x3b, 0x4e, 0x64, 0x67, 0x3b, 0x4e, 0x6a, 0x77, 0x3b, 0x4e, 0x67,
+0x76, 0x3b, 0x4c, 0x75, 0x62, 0x4c, 0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4e,
+0x3b, 0x4e, 0x3b, 0x4e, 0x3b, 0x4c, 0x4a, 0x75, 0x6d, 0x61, 0x70, 0x69,
+0x6c, 0x3b, 0x57, 0x75, 0x6f, 0x6b, 0x20, 0x54, 0x69, 0x63, 0x68, 0x3b,
+0x54, 0x69, 0x63, 0x68, 0x20, 0x41, 0x72, 0x69, 0x79, 0x6f, 0x3b, 0x54,
+0x69, 0x63, 0x68, 0x20, 0x41, 0x64, 0x65, 0x6b, 0x3b, 0x54, 0x69, 0x63,
+0x68, 0x20, 0x41, 0x6e, 0x67, 0x2019, 0x77, 0x65, 0x6e, 0x3b, 0x54, 0x69,
+0x63, 0x68, 0x20, 0x41, 0x62, 0x69, 0x63, 0x68, 0x3b, 0x4e, 0x67, 0x65,
+0x73, 0x6f, 0x4a, 0x4d, 0x50, 0x3b, 0x57, 0x55, 0x54, 0x3b, 0x54, 0x41,
+0x52, 0x3b, 0x54, 0x41, 0x44, 0x3b, 0x54, 0x41, 0x4e, 0x3b, 0x54, 0x41,
+0x42, 0x3b, 0x4e, 0x47, 0x53, 0x4a, 0x3b, 0x57, 0x3b, 0x54, 0x3b, 0x54,
+0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x4e, 0x53, 0x6f, 0x6e, 0x6e, 0x64, 0x65,
+0x67, 0x3b, 0x4d, 0xe9, 0x69, 0x6e, 0x64, 0x65, 0x67, 0x3b, 0x44, 0xeb,
+0x6e, 0x73, 0x63, 0x68, 0x64, 0x65, 0x67, 0x3b, 0x4d, 0xeb, 0x74, 0x74,
+0x77, 0x6f, 0x63, 0x68, 0x3b, 0x44, 0x6f, 0x6e, 0x6e, 0x65, 0x73, 0x63,
+0x68, 0x64, 0x65, 0x67, 0x3b, 0x46, 0x72, 0x65, 0x69, 0x64, 0x65, 0x67,
+0x3b, 0x53, 0x61, 0x6d, 0x73, 0x63, 0x68, 0x64, 0x65, 0x67, 0x53, 0x6f,
+0x6e, 0x3b, 0x4d, 0xe9, 0x69, 0x3b, 0x44, 0xeb, 0x6e, 0x3b, 0x4d, 0xeb,
+0x74, 0x3b, 0x44, 0x6f, 0x6e, 0x3b, 0x46, 0x72, 0x65, 0x3b, 0x53, 0x61,
+0x6d, 0x53, 0x6f, 0x6e, 0x2e, 0x3b, 0x4d, 0xe9, 0x69, 0x2e, 0x3b, 0x44,
+0xeb, 0x6e, 0x2e, 0x3b, 0x4d, 0xeb, 0x74, 0x2e, 0x3b, 0x44, 0x6f, 0x6e,
+0x2e, 0x3b, 0x46, 0x72, 0x65, 0x2e, 0x3b, 0x53, 0x61, 0x6d, 0x2e, 0x4a,
+0x75, 0x6d, 0x61, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61,
+0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65,
+0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x4d, 0x75,
+0x72, 0x77, 0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x61, 0x6e, 0x6e, 0x65,
+0x3b, 0x4d, 0x75, 0x72, 0x77, 0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x61,
+0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73,
+0x69, 0x4a, 0x32, 0x3b, 0x4a, 0x33, 0x3b, 0x4a, 0x34, 0x3b, 0x4a, 0x35,
+0x3b, 0x41, 0x6c, 0x3b, 0x49, 0x6a, 0x3b, 0x4a, 0x31, 0x43d, 0x435, 0x434,
+0x435, 0x43b, 0x430, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x43d,
+0x438, 0x43a, 0x3b, 0x432, 0x442, 0x43e, 0x440, 0x43d, 0x438, 0x43a, 0x3b, 0x441,
+0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x440, 0x442, 0x43e,
+0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x43e, 0x43a, 0x3b, 0x441, 0x430, 0x431, 0x43e,
+0x442, 0x430, 0x43d, 0x435, 0x434, 0x2e, 0x3b, 0x43f, 0x43e, 0x43d, 0x2e, 0x3b,
+0x432, 0x442, 0x43e, 0x2e, 0x3b, 0x441, 0x440, 0x435, 0x2e, 0x3b, 0x447, 0x435,
+0x442, 0x2e, 0x3b, 0x43f, 0x435, 0x442, 0x2e, 0x3b, 0x441, 0x430, 0x431, 0x2e,
+0x4a, 0x75, 0x6d, 0x61, 0x70, 0x69, 0x6c, 0x79, 0x69, 0x3b, 0x4a, 0x75,
+0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61,
+0x6e, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x75,
+0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a,
+0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73,
+0x69, 0x4a, 0x70, 0x69, 0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6e, 0x6e,
+0x3b, 0x4a, 0x74, 0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75,
+0x3b, 0x4a, 0x6d, 0x6f, 0x930, 0x935, 0x93f, 0x20, 0x926, 0x93f, 0x928, 0x3b,
+0x938, 0x94b, 0x92e, 0x20, 0x926, 0x93f, 0x928, 0x3b, 0x92e, 0x902, 0x917, 0x932,
+0x20, 0x926, 0x93f, 0x928, 0x3b, 0x92c, 0x941, 0x927, 0x20, 0x926, 0x93f, 0x928,
+0x3b, 0x92c, 0x943, 0x939, 0x938, 0x94d, 0x92a, 0x924, 0x93f, 0x20, 0x926, 0x93f,
+0x928, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x20, 0x926, 0x93f, 0x928, 0x3b,
+0x936, 0x928, 0x93f, 0x20, 0x926, 0x93f, 0x928, 0x53, 0x61, 0x62, 0x61, 0x74,
+0x6f, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a,
+0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74,
+0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x72, 0x61, 0x68, 0x61, 0x6d, 0x69, 0x73,
+0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75, 0x6d,
+0x61, 0x6d, 0x6f, 0x73, 0x69, 0x53, 0x61, 0x62, 0x3b, 0x4a, 0x74, 0x74,
+0x3b, 0x4a, 0x6e, 0x6e, 0x3b, 0x4a, 0x74, 0x6e, 0x3b, 0x41, 0x72, 0x61,
+0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x4a, 0x6d, 0x6f, 0x53, 0x3b, 0x4a, 0x3b,
+0x4a, 0x3b, 0x4a, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x4a, 0x4c, 0x69, 0x64,
+0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x70, 0x69, 0x6c, 0x69, 0x3b,
+0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x74, 0x61,
+0x74, 0x75, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x79,
+0x61, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x68, 0x69, 0x3b, 0x4c, 0x69, 0x64,
+0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61, 0x6e, 0x6e, 0x79, 0x61, 0x6e,
+0x6f, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c, 0x79, 0x61,
+0x6e, 0x6e, 0x79, 0x61, 0x6e, 0x6f, 0x20, 0x6e, 0x61, 0x20, 0x6c, 0x69,
+0x6e, 0x6a, 0x69, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76, 0x61, 0x20, 0x6c,
+0x79, 0x61, 0x6e, 0x6e, 0x79, 0x61, 0x6e, 0x6f, 0x20, 0x6e, 0x61, 0x20,
+0x6d, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x3b, 0x4c, 0x69, 0x64, 0x75, 0x76,
+0x61, 0x20, 0x6c, 0x69, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x4c, 0x6c, 0x32,
+0x3b, 0x4c, 0x6c, 0x33, 0x3b, 0x4c, 0x6c, 0x34, 0x3b, 0x4c, 0x6c, 0x35,
+0x3b, 0x4c, 0x6c, 0x36, 0x3b, 0x4c, 0x6c, 0x37, 0x3b, 0x4c, 0x6c, 0x31,
+0x32, 0x3b, 0x33, 0x3b, 0x34, 0x3b, 0x35, 0x3b, 0x36, 0x3b, 0x37, 0x3b,
+0x31, 0x41, 0x6c, 0x61, 0x68, 0x61, 0x64, 0x79, 0x3b, 0x41, 0x6c, 0x61,
+0x74, 0x73, 0x69, 0x6e, 0x61, 0x69, 0x6e, 0x79, 0x3b, 0x54, 0x61, 0x6c,
+0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x6f, 0x62, 0x69, 0x61,
+0x3b, 0x41, 0x6c, 0x61, 0x6b, 0x61, 0x6d, 0x69, 0x73, 0x79, 0x3b, 0x5a,
+0x6f, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x61, 0x62, 0x6f, 0x74, 0x73, 0x79,
+0x41, 0x6c, 0x61, 0x68, 0x3b, 0x41, 0x6c, 0x61, 0x74, 0x73, 0x3b, 0x54,
+0x61, 0x6c, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x3b, 0x41, 0x6c, 0x61, 0x6b,
+0x3b, 0x5a, 0x6f, 0x6d, 0x3b, 0x41, 0x73, 0x61, 0x62, 0x41, 0x3b, 0x41,
+0x3b, 0x54, 0x3b, 0x41, 0x3b, 0x41, 0x3b, 0x5a, 0x3b, 0x41, 0xd1e, 0xd3e,
+0xd2f, 0xd31, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd24, 0xd3f, 0xd19, 0xd4d,
+0xd15, 0xd33, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd1a, 0xd4a, 0xd35, 0xd4d,
+0xd35, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd2c, 0xd41, 0xd27, 0xd28, 0xd3e,
+0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0xd34, 0xd3e, 0xd34,
+0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd46, 0xd33, 0xd4d, 0xd33, 0xd3f, 0xd2f, 0xd3e,
+0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd36, 0xd28, 0xd3f, 0xd2f, 0xd3e, 0xd34, 0xd4d,
+0x200c, 0xd1a, 0xd1e, 0xd3e, 0xd2f, 0xd31, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b,
+0xd24, 0xd3f, 0xd19, 0xd4d, 0xd15, 0xd33, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b,
+0xd1a, 0xd4a, 0xd35, 0xd4d, 0xd35, 0xd3e, 0xd34, 0xd4d, 0xd1a, 0x3b, 0xd2c, 0xd41,
+0xd27, 0xd28, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e,
+0xd34, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd35, 0xd46, 0xd33, 0xd4d, 0xd33,
+0xd3f, 0xd2f, 0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0x3b, 0xd36, 0xd28, 0xd3f, 0xd2f,
+0xd3e, 0xd34, 0xd4d, 0x200c, 0xd1a, 0xd1e, 0xd3e, 0xd2f, 0xd7c, 0x3b, 0xd24, 0xd3f,
+0xd19, 0xd4d, 0xd15, 0xd7e, 0x3b, 0xd1a, 0xd4a, 0xd35, 0xd4d, 0xd35, 0x3b, 0xd2c,
+0xd41, 0xd27, 0xd7b, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0xd34, 0xd02, 0x3b, 0xd35,
+0xd46, 0xd33, 0xd4d, 0xd33, 0xd3f, 0x3b, 0xd36, 0xd28, 0xd3f, 0xd1e, 0xd3e, 0x3b,
+0xd24, 0xd3f, 0x3b, 0xd1a, 0xd4a, 0x3b, 0xd2c, 0xd41, 0x3b, 0xd35, 0xd4d, 0xd2f,
+0xd3e, 0x3b, 0xd35, 0xd46, 0x3b, 0xd36, 0xd1e, 0x3b, 0xd24, 0xd3f, 0x3b, 0xd1a,
+0xd4a, 0x3b, 0xd2c, 0xd41, 0x3b, 0xd35, 0xd4d, 0xd2f, 0xd3e, 0x3b, 0xd35, 0xd46,
+0x3b, 0xd36, 0x41, 0x68, 0x61, 0x64, 0x3b, 0x49, 0x73, 0x6e, 0x69, 0x6e,
+0x3b, 0x53, 0x65, 0x6c, 0x61, 0x73, 0x61, 0x3b, 0x52, 0x61, 0x62, 0x75,
+0x3b, 0x4b, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x4a, 0x75, 0x6d, 0x61,
+0x61, 0x74, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x75, 0x41, 0x68, 0x64, 0x3b,
+0x49, 0x73, 0x6e, 0x3b, 0x53, 0x65, 0x6c, 0x3b, 0x52, 0x61, 0x62, 0x3b,
+0x4b, 0x68, 0x61, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x61, 0x62, 0x41,
+0x3b, 0x49, 0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x4b, 0x3b, 0x4a, 0x3b, 0x53,
+0x627, 0x62d, 0x62f, 0x3b, 0x627, 0x62b, 0x646, 0x64a, 0x646, 0x3b, 0x62b, 0x644,
+0x627, 0x62b, 0x3b, 0x631, 0x627, 0x628, 0x648, 0x3b, 0x62e, 0x645, 0x64a, 0x633,
+0x3b, 0x62c, 0x645, 0x639, 0x629, 0x3b, 0x633, 0x628, 0x62a, 0x648, 0x49, 0x6c,
+0x2d, 0x126, 0x61, 0x64, 0x64, 0x3b, 0x49, 0x74, 0x2d, 0x54, 0x6e, 0x65,
+0x6a, 0x6e, 0x3b, 0x49, 0x74, 0x2d, 0x54, 0x6c, 0x69, 0x65, 0x74, 0x61,
+0x3b, 0x4c, 0x2d, 0x45, 0x72, 0x62, 0x67, 0x127, 0x61, 0x3b, 0x49, 0x6c,
+0x2d, 0x126, 0x61, 0x6d, 0x69, 0x73, 0x3b, 0x49, 0x6c, 0x2d, 0x120, 0x69,
+0x6d, 0x67, 0x127, 0x61, 0x3b, 0x49, 0x73, 0x2d, 0x53, 0x69, 0x62, 0x74,
+0x126, 0x61, 0x64, 0x3b, 0x54, 0x6e, 0x65, 0x3b, 0x54, 0x6c, 0x69, 0x3b,
+0x45, 0x72, 0x62, 0x3b, 0x126, 0x61, 0x6d, 0x3b, 0x120, 0x69, 0x6d, 0x3b,
+0x53, 0x69, 0x62, 0x126, 0x64, 0x3b, 0x54, 0x6e, 0x3b, 0x54, 0x6c, 0x3b,
+0x45, 0x72, 0x3b, 0x126, 0x6d, 0x3b, 0x120, 0x6d, 0x3b, 0x53, 0x62, 0x126,
+0x64, 0x3b, 0x54, 0x3b, 0x54, 0x6c, 0x3b, 0x45, 0x72, 0x3b, 0x126, 0x6d,
+0x3b, 0x120, 0x6d, 0x3b, 0x53, 0x62, 0x9a8, 0x9cb, 0x982, 0x9ae, 0x9be, 0x987,
+0x99c, 0x9bf, 0x982, 0x3b, 0x9a8, 0x9bf, 0x982, 0x9a5, 0x9cc, 0x995, 0x9be, 0x9ac,
+0x9be, 0x3b, 0x9b2, 0x9c8, 0x9ac, 0x9be, 0x995, 0x9aa, 0x9cb, 0x995, 0x9aa, 0x9be,
+0x3b, 0x9af, 0x9bc, 0x9c1, 0x9ae, 0x9b6, 0x995, 0x9c8, 0x9b6, 0x9be, 0x3b, 0x9b6,
+0x997, 0x9cb, 0x9b2, 0x9b6, 0x9c7, 0x9a8, 0x3b, 0x987, 0x9b0, 0x9be, 0x987, 0x3b,
+0x9a5, 0x9be, 0x982, 0x99c, 0x9a8, 0x9cb, 0x3b, 0x9a8, 0x9bf, 0x982, 0x3b, 0x9b2,
+0x9c8, 0x3b, 0x9af, 0x9bc, 0x9c1, 0x9ae, 0x3b, 0x9b6, 0x997, 0x3b, 0x987, 0x9b0,
+0x9be, 0x3b, 0x9a5, 0x9be, 0x982, 0x9a8, 0x9cb, 0x982, 0x3b, 0x9a8, 0x9bf, 0x982,
+0x3b, 0x9b2, 0x9c8, 0x9ac, 0x9be, 0x3b, 0x9af, 0x9bc, 0x9c1, 0x9ae, 0x3b, 0x9b6,
+0x997, 0x9cb, 0x3b, 0x987, 0x9b0, 0x9be, 0x3b, 0x9a5, 0x9be, 0x982, 0x4a, 0x65,
+0x64, 0x6f, 0x6f, 0x6e, 0x65, 0x65, 0x3b, 0x4a, 0x65, 0x6c, 0x68, 0x65,
+0x69, 0x6e, 0x3b, 0x4a, 0x65, 0x6d, 0x61, 0x79, 0x72, 0x74, 0x3b, 0x4a,
+0x65, 0x72, 0x63, 0x65, 0x61, 0x6e, 0x3b, 0x4a, 0x65, 0x72, 0x64, 0x65,
+0x69, 0x6e, 0x3b, 0x4a, 0x65, 0x68, 0x65, 0x69, 0x6e, 0x65, 0x79, 0x3b,
+0x4a, 0x65, 0x73, 0x61, 0x72, 0x6e, 0x4a, 0x65, 0x64, 0x3b, 0x4a, 0x65,
+0x6c, 0x3b, 0x4a, 0x65, 0x6d, 0x3b, 0x4a, 0x65, 0x72, 0x63, 0x3b, 0x4a,
+0x65, 0x72, 0x64, 0x3b, 0x4a, 0x65, 0x68, 0x3b, 0x4a, 0x65, 0x73, 0x52,
+0x101, 0x74, 0x61, 0x70, 0x75, 0x3b, 0x4d, 0x61, 0x6e, 0x65, 0x3b, 0x54,
+0x16b, 0x72, 0x65, 0x69, 0x3b, 0x57, 0x65, 0x6e, 0x65, 0x72, 0x65, 0x69,
+0x3b, 0x54, 0x101, 0x69, 0x74, 0x65, 0x3b, 0x50, 0x61, 0x72, 0x61, 0x69,
+0x72, 0x65, 0x3b, 0x52, 0x101, 0x68, 0x6f, 0x72, 0x6f, 0x69, 0x52, 0x101,
+0x74, 0x3b, 0x4d, 0x61, 0x6e, 0x3b, 0x54, 0x16b, 0x72, 0x3b, 0x57, 0x65,
+0x6e, 0x3b, 0x54, 0x101, 0x69, 0x3b, 0x50, 0x61, 0x72, 0x3b, 0x52, 0x101,
+0x68, 0x52, 0x74, 0x3b, 0x4d, 0x3b, 0x54, 0x3b, 0x57, 0x3b, 0x54, 0x3b,
+0x50, 0x3b, 0x52, 0x68, 0x930, 0x935, 0x93f, 0x935, 0x93e, 0x930, 0x3b, 0x938,
+0x94b, 0x92e, 0x935, 0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x933, 0x935, 0x93e,
+0x930, 0x3b, 0x92c, 0x941, 0x927, 0x935, 0x93e, 0x930, 0x3b, 0x917, 0x941, 0x930,
+0x941, 0x935, 0x93e, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x935, 0x93e,
+0x930, 0x3b, 0x936, 0x928, 0x93f, 0x935, 0x93e, 0x930, 0x930, 0x935, 0x93f, 0x3b,
+0x938, 0x94b, 0x92e, 0x3b, 0x92e, 0x902, 0x917, 0x933, 0x3b, 0x92c, 0x941, 0x927,
+0x3b, 0x917, 0x941, 0x930, 0x941, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x3b,
+0x936, 0x928, 0x93f, 0x4a, 0x75, 0x6d, 0x61, 0x70, 0xed, 0x6c, 0xed, 0x3b,
+0x4a, 0x75, 0x6d, 0x61, 0x74, 0xe1, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d,
+0x61, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0xe1, 0x6e, 0x254,
+0x3b, 0x41, 0x6c, 0x61, 0xe1, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x4a, 0x75,
+0x6d, 0xe1, 0x61, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0xf3, 0x73, 0x69,
+0x4b, 0x69, 0x75, 0x6d, 0x69, 0x61, 0x3b, 0x4d, 0x75, 0x72, 0x61, 0x6d,
+0x75, 0x6b, 0x6f, 0x3b, 0x57, 0x61, 0x69, 0x72, 0x69, 0x3b, 0x57, 0x65,
+0x74, 0x68, 0x61, 0x74, 0x75, 0x3b, 0x57, 0x65, 0x6e, 0x61, 0x3b, 0x57,
+0x65, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f,
+0x73, 0x69, 0x4b, 0x49, 0x55, 0x3b, 0x4d, 0x52, 0x41, 0x3b, 0x57, 0x41,
+0x49, 0x3b, 0x57, 0x45, 0x54, 0x3b, 0x57, 0x45, 0x4e, 0x3b, 0x57, 0x54,
+0x4e, 0x3b, 0x4a, 0x55, 0x4d, 0x4b, 0x3b, 0x4d, 0x3b, 0x57, 0x3b, 0x57,
+0x3b, 0x57, 0x3b, 0x57, 0x3b, 0x4a, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x31,
+0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x32, 0x3b, 0x41, 0x6e, 0x65, 0x67,
+0x20, 0x33, 0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x34, 0x3b, 0x41, 0x6e,
+0x65, 0x67, 0x20, 0x35, 0x3b, 0x41, 0x6e, 0x65, 0x67, 0x20, 0x36, 0x3b,
+0x41, 0x6e, 0x65, 0x67, 0x20, 0x37, 0x41, 0x31, 0x3b, 0x41, 0x32, 0x3b,
+0x41, 0x33, 0x3b, 0x41, 0x34, 0x3b, 0x41, 0x35, 0x3b, 0x41, 0x36, 0x3b,
+0x41, 0x37, 0x41d, 0x44f, 0x43c, 0x3b, 0x414, 0x430, 0x432, 0x430, 0x430, 0x3b,
+0x41c, 0x44f, 0x433, 0x43c, 0x430, 0x440, 0x3b, 0x41b, 0x445, 0x430, 0x433, 0x432,
+0x430, 0x3b, 0x41f, 0x4af, 0x440, 0x44d, 0x432, 0x3b, 0x411, 0x430, 0x430, 0x441,
+0x430, 0x43d, 0x3b, 0x411, 0x44f, 0x43c, 0x431, 0x430, 0x43d, 0x44f, 0x43c, 0x3b,
+0x434, 0x430, 0x432, 0x430, 0x430, 0x3b, 0x43c, 0x44f, 0x433, 0x43c, 0x430, 0x440,
+0x3b, 0x43b, 0x445, 0x430, 0x433, 0x432, 0x430, 0x3b, 0x43f, 0x4af, 0x440, 0x44d,
+0x432, 0x3b, 0x431, 0x430, 0x430, 0x441, 0x430, 0x43d, 0x3b, 0x431, 0x44f, 0x43c,
+0x431, 0x430, 0x41d, 0x44f, 0x3b, 0x414, 0x430, 0x3b, 0x41c, 0x44f, 0x3b, 0x41b,
+0x445, 0x3b, 0x41f, 0x4af, 0x3b, 0x411, 0x430, 0x3b, 0x411, 0x44f, 0x1828, 0x1822,
+0x182e, 0x180e, 0x1820, 0x3b, 0x1833, 0x1820, 0x1838, 0x1820, 0x3b, 0x182e, 0x1822, 0x1820,
+0x1820, 0x182e, 0x1820, 0x1837, 0x3b, 0x1840, 0x1820, 0x182d, 0x182a, 0x1820, 0x3b, 0x182b,
+0x1826, 0x1837, 0x182a, 0x1826, 0x3b, 0x182a, 0x1820, 0x1830, 0x1820, 0x1829, 0x3b, 0x182a,
+0x1822, 0x182e, 0x182a, 0x1820, 0x1828, 0x1822, 0x3b, 0x1833, 0x1820, 0x3b, 0x182e, 0x1822,
+0x182d, 0x3b, 0x1840, 0x1820, 0x3b, 0x182b, 0x1826, 0x1837, 0x3b, 0x182a, 0x1820, 0x3b,
+0x182a, 0x1822, 0x182e, 0x1828, 0x1822, 0x3b, 0x1832, 0x1820, 0x3b, 0x182e, 0x1822, 0x182d,
+0x3b, 0x1840, 0x1820, 0x3b, 0x182b, 0x1825, 0x1837, 0x3b, 0x182a, 0x1820, 0x3b, 0x182a,
+0x1822, 0x182e, 0x1828, 0x1822, 0x3b, 0x1833, 0x1820, 0x3b, 0x182e, 0x1822, 0x182d, 0x3b,
+0x1840, 0x1820, 0x3b, 0x182b, 0x1825, 0x1837, 0x3b, 0x182a, 0x1820, 0x3b, 0x182a, 0x1822,
+0x182e, 0x64, 0x69, 0x6d, 0x61, 0x6e, 0x73, 0x3b, 0x6c, 0x69, 0x6e, 0x64,
+0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d, 0x65, 0x72, 0x6b,
+0x72, 0x65, 0x64, 0x69, 0x3b, 0x7a, 0x65, 0x64, 0x69, 0x3b, 0x76, 0x61,
+0x6e, 0x64, 0x72, 0x65, 0x64, 0x69, 0x3b, 0x73, 0x61, 0x6d, 0x64, 0x69,
+0x64, 0x69, 0x6d, 0x3b, 0x6c, 0x69, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b,
+0x6d, 0x65, 0x72, 0x3b, 0x7a, 0x65, 0x3b, 0x76, 0x61, 0x6e, 0x3b, 0x73,
+0x61, 0x6d, 0x64, 0x3b, 0x6c, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x7a, 0x3b,
+0x76, 0x3b, 0x73, 0x43, 0x6f, 0x6d, 0x2019, 0x79, 0x61, 0x6b, 0x6b, 0x65,
+0x3b, 0x43, 0x6f, 0x6d, 0x6c, 0x61, 0x61, 0x257, 0x69, 0x69, 0x3b, 0x43,
+0x6f, 0x6d, 0x7a, 0x79, 0x69, 0x69, 0x257, 0x69, 0x69, 0x3b, 0x43, 0x6f,
+0x6d, 0x6b, 0x6f, 0x6c, 0x6c, 0x65, 0x3b, 0x43, 0x6f, 0x6d, 0x6b, 0x61,
+0x6c, 0x64, 0x1dd, 0x253, 0x6c, 0x69, 0x69, 0x3b, 0x43, 0x6f, 0x6d, 0x67,
+0x61, 0x69, 0x73, 0x75, 0x75, 0x3b, 0x43, 0x6f, 0x6d, 0x7a, 0x79, 0x65,
+0x253, 0x73, 0x75, 0x75, 0x43, 0x79, 0x61, 0x3b, 0x43, 0x6c, 0x61, 0x3b,
+0x43, 0x7a, 0x69, 0x3b, 0x43, 0x6b, 0x6f, 0x3b, 0x43, 0x6b, 0x61, 0x3b,
+0x43, 0x67, 0x61, 0x3b, 0x43, 0x7a, 0x65, 0x59, 0x3b, 0x4c, 0x3b, 0x5a,
+0x3b, 0x4f, 0x3b, 0x41, 0x3b, 0x47, 0x3b, 0x45, 0x4e, 0x65, 0x74, 0x74,
+0x76, 0x20, 0x43, 0x61, 0x6b, 0x6f, 0x3b, 0x45, 0x6e, 0x68, 0x76, 0x74,
+0x65, 0x63, 0x65, 0x73, 0x6b, 0x76, 0x3b, 0x45, 0x6e, 0x68, 0x76, 0x74,
+0x65, 0x63, 0x65, 0x73, 0x6b, 0x76, 0x20, 0x45, 0x6e, 0x68, 0x76, 0x79,
+0x76, 0x74, 0x6b, 0x65, 0x3b, 0x45, 0x6e, 0x6e, 0x76, 0x72, 0x6b, 0x76,
+0x70, 0x76, 0x3b, 0x45, 0x6e, 0x6e, 0x76, 0x72, 0x6b, 0x76, 0x70, 0x76,
+0x20, 0x45, 0x6e, 0x68, 0x76, 0x79, 0x76, 0x74, 0x6b, 0x65, 0x3b, 0x4e,
+0x61, 0x6b, 0x20, 0x4f, 0x6b, 0x6b, 0x6f, 0x73, 0x6b, 0x76, 0x20, 0x4e,
+0x65, 0x74, 0x74, 0x76, 0x3b, 0x4e, 0x65, 0x74, 0x74, 0x76, 0x20, 0x43,
+0x61, 0x6b, 0x63, 0x75, 0x73, 0x65, 0x53, 0x6f, 0x6e, 0x74, 0x61, 0x78,
+0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x4d, 0x61, 0x6e, 0x74, 0x61, 0x78,
+0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x44, 0x65, 0x6e, 0x73, 0x74, 0x61,
+0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x57, 0x75, 0x6e, 0x73, 0x74,
+0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x44, 0x6f, 0x6e, 0x64,
+0x65, 0x72, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b, 0x46,
+0x72, 0x61, 0x69, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65, 0x73, 0x3b,
+0x53, 0x61, 0x74, 0x65, 0x72, 0x74, 0x61, 0x78, 0x74, 0x73, 0x65, 0x65,
+0x73, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x61, 0x3b, 0x44, 0x65, 0x3b, 0x57,
+0x75, 0x3b, 0x44, 0x6f, 0x3b, 0x46, 0x72, 0x3b, 0x53, 0x61, 0x74, 0x53,
+0x3b, 0x4d, 0x3b, 0x45, 0x3b, 0x57, 0x3b, 0x44, 0x3b, 0x46, 0x3b, 0x41,
+0x906, 0x907, 0x924, 0x92c, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x92c, 0x93e,
+0x930, 0x3b, 0x92e, 0x919, 0x94d, 0x917, 0x932, 0x92c, 0x93e, 0x930, 0x3b, 0x92c,
+0x941, 0x927, 0x92c, 0x93e, 0x930, 0x3b, 0x92c, 0x93f, 0x939, 0x93f, 0x92c, 0x93e,
+0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x92c, 0x93e, 0x930, 0x3b, 0x936,
+0x928, 0x93f, 0x92c, 0x93e, 0x930, 0x906, 0x907, 0x924, 0x3b, 0x938, 0x94b, 0x92e,
+0x3b, 0x92e, 0x919, 0x94d, 0x917, 0x932, 0x3b, 0x92c, 0x941, 0x927, 0x3b, 0x92c,
+0x93f, 0x939, 0x93f, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x3b, 0x936, 0x928,
+0x93f, 0x906, 0x3b, 0x938, 0x94b, 0x3b, 0x92e, 0x3b, 0x92c, 0x941, 0x3b, 0x92c,
+0x93f, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0x6c, 0x79, 0x25b, 0x2bc, 0x25b, 0x301,
+0x20, 0x73, 0x1e85, 0xed, 0x14b, 0x74, 0xe8, 0x3b, 0x6d, 0x76, 0x66, 0xf2,
+0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0x62, 0x254, 0x301, 0x254,
+0x6e, 0x74, 0xe8, 0x20, 0x6d, 0x76, 0x66, 0xf2, 0x20, 0x6c, 0x79, 0x25b,
+0x30c, 0x2bc, 0x3b, 0x74, 0x73, 0xe8, 0x74, 0x73, 0x25b, 0x300, 0x25b, 0x20,
+0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0x62, 0x254, 0x301, 0x254, 0x6e,
+0x74, 0xe8, 0x20, 0x74, 0x73, 0x65, 0x74, 0x73, 0x25b, 0x300, 0x25b, 0x20,
+0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0x76, 0x66, 0xf2, 0x20, 0x6d,
+0xe0, 0x67, 0x61, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x3b, 0x6d, 0xe0,
+0x67, 0x61, 0x20, 0x6c, 0x79, 0x25b, 0x30c, 0x2bc, 0x53, 0x254, 0x301, 0x6e,
+0x64, 0x69, 0x3b, 0x4d, 0x254, 0x301, 0x6e, 0x64, 0x69, 0x3b, 0xc1, 0x70,
+0x74, 0x61, 0x20, 0x4d, 0x254, 0x301, 0x6e, 0x64, 0x69, 0x3b, 0x57, 0x25b,
+0x301, 0x6e, 0x25b, 0x73, 0x25b, 0x64, 0x25b, 0x3b, 0x54, 0x254, 0x301, 0x73,
+0x25b, 0x64, 0x25b, 0x3b, 0x46, 0x25b, 0x6c, 0xe2, 0x79, 0x25b, 0x64, 0x25b,
+0x3b, 0x53, 0xe1, 0x73, 0x69, 0x64, 0x25b, 0x53, 0x254, 0x301, 0x3b, 0x4d,
+0x254, 0x301, 0x3b, 0xc1, 0x4d, 0x3b, 0x57, 0x25b, 0x301, 0x3b, 0x54, 0x254,
+0x301, 0x3b, 0x46, 0x25b, 0x3b, 0x53, 0xe1, 0x53, 0x1ecd, 0x301, 0x6e, 0x64,
+0xe8, 0x3b, 0x4d, 0x1ecd, 0x301, 0x6e, 0x64, 0xe8, 0x3b, 0x54, 0x69, 0xfa,
+0x7a, 0x64, 0xe8, 0x3b, 0x57, 0x1eb9, 0x301, 0x6e, 0x1eb9, 0x301, 0x7a, 0x64,
+0xe8, 0x3b, 0x54, 0x1ecd, 0x301, 0x7a, 0x64, 0xe8, 0x3b, 0x46, 0x72, 0x61,
+0xed, 0x64, 0xe8, 0x3b, 0x53, 0xe1, 0x74, 0x1ecd, 0x64, 0xe8, 0x53, 0x1ecd,
+0x301, 0x6e, 0x3b, 0x4d, 0x1ecd, 0x301, 0x6e, 0x3b, 0x54, 0x69, 0xfa, 0x3b,
+0x57, 0x1eb9, 0x301, 0x6e, 0x3b, 0x54, 0x1ecd, 0x301, 0x7a, 0x3b, 0x46, 0x72,
+0x61, 0xed, 0x3b, 0x53, 0xe1, 0x74, 0x7de, 0x7ca, 0x7ef, 0x7d9, 0x7cc, 0x7df,
+0x7cf, 0x7f2, 0x3b, 0x7de, 0x7d0, 0x7ec, 0x7d3, 0x7ca, 0x7ec, 0x7df, 0x7cf, 0x7f2,
+0x3b, 0x7de, 0x7d0, 0x7ec, 0x7df, 0x7cf, 0x7f2, 0x3b, 0x7de, 0x7ce, 0x7e3, 0x7ce,
+0x7f2, 0x7df, 0x7cf, 0x7f2, 0x3b, 0x7d3, 0x7cc, 0x7df, 0x7cf, 0x7f2, 0x3b, 0x7db,
+0x7cc, 0x7ec, 0x7e3, 0x7cc, 0x7f2, 0x7ec, 0x7df, 0x7cf, 0x7f2, 0x3b, 0x7de, 0x7cd,
+0x7f2, 0x7d8, 0x7cd, 0x7df, 0x7cf, 0x7f2, 0x7de, 0x7ca, 0x7ef, 0x7d9, 0x3b, 0x7de,
+0x7d0, 0x7ec, 0x7d3, 0x3b, 0x7de, 0x7d0, 0x7ec, 0x7df, 0x3b, 0x7de, 0x7ce, 0x7e3,
+0x3b, 0x7d3, 0x7cc, 0x7df, 0x3b, 0x7db, 0x7cc, 0x7ec, 0x7e3, 0x3b, 0x7de, 0x7cd,
+0x7f2, 0x7d8, 0x7de, 0x7ca, 0x7ef, 0x7d9, 0x3b, 0x7de, 0x7d0, 0x7ec, 0x7d3, 0x3b,
+0x7de, 0x7d0, 0x7ec, 0x7df, 0x7cf, 0x7f2, 0x3b, 0x7de, 0x7ce, 0x7e3, 0x3b, 0x7d3,
+0x7cc, 0x7df, 0x3b, 0x7db, 0x7cc, 0x7ec, 0x7e3, 0x3b, 0x7de, 0x7cd, 0x7f2, 0x7d8,
+0x7de, 0x3b, 0x7de, 0x3b, 0x7de, 0x3b, 0x7de, 0x3b, 0x7d3, 0x3b, 0x7db, 0x3b,
+0x7de, 0x73, 0x6f, 0x74, 0x6e, 0x61, 0x62, 0x65, 0x61, 0x69, 0x76, 0x69,
+0x3b, 0x76, 0x75, 0x6f, 0x73, 0x73, 0xe1, 0x72, 0x67, 0x61, 0x3b, 0x6d,
+0x61, 0x14b, 0x14b, 0x65, 0x62, 0xe1, 0x72, 0x67, 0x61, 0x3b, 0x67, 0x61,
+0x73, 0x6b, 0x61, 0x76, 0x61, 0x68, 0x6b, 0x6b, 0x75, 0x3b, 0x64, 0x75,
+0x6f, 0x72, 0x61, 0x73, 0x64, 0x61, 0x74, 0x3b, 0x62, 0x65, 0x61, 0x72,
+0x6a, 0x61, 0x64, 0x61, 0x74, 0x3b, 0x6c, 0xe1, 0x76, 0x76, 0x61, 0x72,
+0x64, 0x61, 0x74, 0x73, 0x6f, 0x74, 0x6e, 0x3b, 0x76, 0x75, 0x6f, 0x73,
+0x3b, 0x6d, 0x61, 0x14b, 0x3b, 0x67, 0x61, 0x73, 0x6b, 0x3b, 0x64, 0x75,
+0x6f, 0x72, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x3b, 0x6c, 0xe1, 0x76, 0x53,
+0x3b, 0x56, 0x3b, 0x4d, 0x3b, 0x47, 0x3b, 0x44, 0x3b, 0x42, 0x3b, 0x4c,
+0x73, 0x6f, 0x74, 0x6e, 0x61, 0x62, 0x65, 0x61, 0x69, 0x76, 0x69, 0x3b,
+0x6d, 0xe1, 0x6e, 0x6e, 0x6f, 0x64, 0x61, 0x74, 0x3b, 0x64, 0x69, 0x73,
+0x64, 0x61, 0x74, 0x3b, 0x67, 0x61, 0x73, 0x6b, 0x61, 0x76, 0x61, 0x68,
+0x6b, 0x6b, 0x75, 0x3b, 0x64, 0x75, 0x6f, 0x72, 0x61, 0x73, 0x74, 0x61,
+0x74, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x6a, 0x61, 0x64, 0x61, 0x74, 0x3b,
+0x6c, 0xe1, 0x76, 0x76, 0x6f, 0x72, 0x64, 0x61, 0x74, 0x73, 0x6f, 0x3b,
+0x6d, 0xe1, 0x3b, 0x64, 0x69, 0x3b, 0x67, 0x61, 0x3b, 0x64, 0x75, 0x3b,
+0x62, 0x65, 0x3b, 0x6c, 0xe1, 0x53, 0x3b, 0x4d, 0x3b, 0x44, 0x3b, 0x47,
+0x3b, 0x44, 0x3b, 0x42, 0x3b, 0x4c, 0x4c, 0x61, 0x6d, 0x6f, 0x72, 0x65,
+0x6e, 0x61, 0x3b, 0x4d, 0x75, 0x73, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67,
+0x6f, 0x3b, 0x4c, 0x61, 0x62, 0x6f, 0x62, 0x65, 0x64, 0x69, 0x3b, 0x4c,
+0x61, 0x62, 0x6f, 0x72, 0x61, 0x72, 0x6f, 0x3b, 0x4c, 0x61, 0x62, 0x6f,
+0x6e, 0x65, 0x3b, 0x4c, 0x61, 0x62, 0x6f, 0x68, 0x6c, 0x61, 0x6e, 0x6f,
+0x3b, 0x4d, 0x6f, 0x6b, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x4c, 0x61, 0x6d,
+0x3b, 0x4d, 0x6f, 0x73, 0x3b, 0x42, 0x65, 0x64, 0x3b, 0x52, 0x61, 0x72,
+0x3b, 0x4e, 0x65, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d, 0x6f, 0x6b, 0x4c,
+0x3b, 0x4d, 0x3b, 0x42, 0x3b, 0x52, 0x3b, 0x4e, 0x3b, 0x48, 0x3b, 0x4d,
+0x53, 0x6f, 0x6e, 0x74, 0x6f, 0x3b, 0x4d, 0x76, 0x75, 0x6c, 0x6f, 0x3b,
+0x53, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x3b, 0x53, 0x69, 0x74, 0x68, 0x61,
+0x74, 0x68, 0x75, 0x3b, 0x53, 0x69, 0x6e, 0x65, 0x3b, 0x53, 0x69, 0x68,
+0x6c, 0x61, 0x6e, 0x75, 0x3b, 0x4d, 0x67, 0x71, 0x69, 0x62, 0x65, 0x6c,
+0x6f, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x76, 0x75, 0x3b, 0x53, 0x69, 0x62,
+0x3b, 0x53, 0x69, 0x74, 0x3b, 0x53, 0x69, 0x6e, 0x3b, 0x53, 0x69, 0x68,
+0x3b, 0x4d, 0x67, 0x71, 0x53, 0x3b, 0x4d, 0x3b, 0x53, 0x3b, 0x53, 0x3b,
+0x53, 0x3b, 0x53, 0x3b, 0x4d, 0x73, 0xf8, 0x6e, 0x2e, 0x3b, 0x6d, 0x61,
+0x6e, 0x2e, 0x3b, 0x74, 0x69, 0x72, 0x2e, 0x3b, 0x6f, 0x6e, 0x73, 0x2e,
+0x3b, 0x74, 0x6f, 0x72, 0x2e, 0x3b, 0x66, 0x72, 0x65, 0x2e, 0x3b, 0x6c,
+0xf8, 0x72, 0x2e, 0x73, 0xf8, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x6d, 0xe5,
+0x6e, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x79, 0x73, 0x64, 0x61, 0x67, 0x3b,
+0x6f, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x6f, 0x72, 0x73, 0x64,
+0x61, 0x67, 0x3b, 0x66, 0x72, 0x65, 0x64, 0x61, 0x67, 0x3b, 0x6c, 0x61,
+0x75, 0x72, 0x64, 0x61, 0x67, 0x73, 0xf8, 0x6e, 0x3b, 0x6d, 0xe5, 0x6e,
+0x3b, 0x74, 0x79, 0x73, 0x3b, 0x6f, 0x6e, 0x73, 0x3b, 0x74, 0x6f, 0x72,
+0x3b, 0x66, 0x72, 0x65, 0x3b, 0x6c, 0x61, 0x75, 0x73, 0xf8, 0x2e, 0x3b,
+0x6d, 0xe5, 0x2e, 0x3b, 0x74, 0x79, 0x2e, 0x3b, 0x6f, 0x6e, 0x2e, 0x3b,
+0x74, 0x6f, 0x2e, 0x3b, 0x66, 0x72, 0x2e, 0x3b, 0x6c, 0x61, 0x2e, 0x43,
+0xe4, 0x14b, 0x20, 0x6b, 0x75, 0x254, 0x74, 0x68, 0x3b, 0x4a, 0x69, 0x65,
+0x63, 0x20, 0x6c, 0x61, 0x331, 0x74, 0x3b, 0x52, 0x25b, 0x77, 0x20, 0x6c,
+0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x44, 0x69, 0x254, 0x331, 0x6b, 0x20, 0x6c,
+0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x14a, 0x75, 0x61, 0x61, 0x6e, 0x20, 0x6c,
+0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x44, 0x68, 0x69, 0x65, 0x65, 0x63, 0x20,
+0x6c, 0xe4, 0x74, 0x6e, 0x69, 0x3b, 0x42, 0xe4, 0x6b, 0x25b, 0x6c, 0x20,
+0x6c, 0xe4, 0x74, 0x6e, 0x69, 0x43, 0xe4, 0x14b, 0x3b, 0x4a, 0x69, 0x65,
+0x63, 0x3b, 0x52, 0x25b, 0x77, 0x3b, 0x44, 0x69, 0x254, 0x331, 0x6b, 0x3b,
+0x14a, 0x75, 0x61, 0x61, 0x6e, 0x3b, 0x44, 0x68, 0x69, 0x65, 0x65, 0x63,
+0x3b, 0x42, 0xe4, 0x6b, 0x25b, 0x6c, 0x43, 0x3b, 0x4a, 0x3b, 0x52, 0x3b,
+0x44, 0x3b, 0x14a, 0x3b, 0x44, 0x3b, 0x42, 0x4c, 0x61, 0x6d, 0x75, 0x6c,
+0x75, 0x6e, 0x67, 0x75, 0x3b, 0x4c, 0x6f, 0x6c, 0x65, 0x6d, 0x62, 0x61,
+0x3b, 0x4c, 0x61, 0x63, 0x68, 0x69, 0x77, 0x69, 0x72, 0x69, 0x3b, 0x4c,
+0x61, 0x63, 0x68, 0x69, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4c, 0x61, 0x63,
+0x68, 0x69, 0x6e, 0x61, 0x79, 0x69, 0x3b, 0x4c, 0x61, 0x63, 0x68, 0x69,
+0x73, 0x61, 0x6e, 0x75, 0x3b, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x75, 0x6b,
+0x61, 0x4d, 0x75, 0x6c, 0x3b, 0x4c, 0x65, 0x6d, 0x3b, 0x57, 0x69, 0x72,
+0x3b, 0x54, 0x61, 0x74, 0x3b, 0x4e, 0x61, 0x69, 0x3b, 0x53, 0x61, 0x6e,
+0x3b, 0x57, 0x65, 0x72, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x67, 0x65, 0x3b,
+0x64, 0x69, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x64, 0x69, 0x6d, 0x61, 0x72,
+0x73, 0x3b, 0x64, 0x69, 0x6d, 0xe8, 0x63, 0x72, 0x65, 0x73, 0x3b, 0x64,
+0x69, 0x6a, 0xf2, 0x75, 0x73, 0x3b, 0x64, 0x69, 0x76, 0x65, 0x6e, 0x64,
+0x72, 0x65, 0x73, 0x3b, 0x64, 0x69, 0x73, 0x73, 0x61, 0x62, 0x74, 0x65,
+0x44, 0x67, 0x3b, 0x44, 0x6c, 0x3b, 0x44, 0x6d, 0x3b, 0x44, 0x63, 0x3b,
+0x44, 0x6a, 0x3b, 0x44, 0x76, 0x3b, 0x44, 0x73, 0x64, 0x69, 0x6d, 0x65,
+0x6e, 0x67, 0x65, 0x3b, 0x64, 0x65, 0x6c, 0x75, 0x6e, 0x73, 0x3b, 0x64,
+0x69, 0x6d, 0x61, 0x72, 0x73, 0x3b, 0x64, 0x69, 0x6d, 0xe8, 0x72, 0x63,
+0x6c, 0x65, 0x73, 0x3b, 0x64, 0x69, 0x6a, 0x61, 0x75, 0x73, 0x3b, 0x64,
+0x69, 0x75, 0x65, 0x6e, 0x64, 0x72, 0x65, 0x73, 0x3b, 0x64, 0x69, 0x73,
+0x73, 0x61, 0x62, 0x74, 0x65, 0x64, 0x69, 0x6d, 0x3b, 0x64, 0x65, 0x6c,
+0x3b, 0x64, 0x6d, 0x61, 0x3b, 0x64, 0x6d, 0xe8, 0x3b, 0x64, 0x69, 0x6a,
+0x3b, 0x64, 0x69, 0x75, 0x3b, 0x64, 0x69, 0x73, 0x44, 0x3b, 0x4c, 0x3b,
+0x4d, 0x3b, 0x58, 0x3b, 0x4a, 0x3b, 0x55, 0x3b, 0x53, 0xb30, 0xb2c, 0xb3f,
+0xb2c, 0xb3e, 0xb30, 0x3b, 0xb38, 0xb4b, 0xb2e, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb2e,
+0xb19, 0xb4d, 0xb17, 0xb33, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb2c, 0xb41, 0xb27, 0xb2c,
+0xb3e, 0xb30, 0x3b, 0xb17, 0xb41, 0xb30, 0xb41, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb36,
+0xb41, 0xb15, 0xb4d, 0xb30, 0xb2c, 0xb3e, 0xb30, 0x3b, 0xb36, 0xb28, 0xb3f, 0xb2c,
+0xb3e, 0xb30, 0xb30, 0xb2c, 0xb3f, 0x3b, 0xb38, 0xb4b, 0xb2e, 0x3b, 0xb2e, 0xb19,
+0xb4d, 0xb17, 0xb33, 0x3b, 0xb2c, 0xb41, 0xb27, 0x3b, 0xb17, 0xb41, 0xb30, 0xb41,
+0x3b, 0xb36, 0xb41, 0xb15, 0xb4d, 0xb30, 0x3b, 0xb36, 0xb28, 0xb3f, 0xb30, 0x3b,
+0xb38, 0xb4b, 0x3b, 0xb2e, 0x3b, 0xb2c, 0xb41, 0x3b, 0xb17, 0xb41, 0x3b, 0xb36,
+0xb41, 0x3b, 0xb36, 0x44, 0x69, 0x6c, 0x62, 0x61, 0x74, 0x61, 0x3b, 0x57,
+0x69, 0x69, 0x78, 0x61, 0x74, 0x61, 0x3b, 0x51, 0x69, 0x62, 0x78, 0x61,
+0x74, 0x61, 0x3b, 0x52, 0x6f, 0x6f, 0x62, 0x69, 0x69, 0x3b, 0x4b, 0x61,
+0x6d, 0x69, 0x69, 0x73, 0x61, 0x3b, 0x4a, 0x69, 0x6d, 0x61, 0x61, 0x74,
+0x61, 0x3b, 0x53, 0x61, 0x6e, 0x62, 0x61, 0x74, 0x61, 0x44, 0x69, 0x6c,
+0x3b, 0x57, 0x69, 0x78, 0x3b, 0x51, 0x69, 0x62, 0x3b, 0x52, 0x6f, 0x62,
+0x3b, 0x4b, 0x61, 0x6d, 0x3b, 0x4a, 0x69, 0x6d, 0x3b, 0x53, 0x61, 0x6e,
+0x44, 0x3b, 0x57, 0x3b, 0x51, 0x3b, 0x52, 0x3b, 0x4b, 0x3b, 0x4a, 0x3b,
+0x53, 0xd801, 0xdcb9, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcec, 0xd801, 0xdcd8, 0x20, 0xd801,
+0xdccf, 0xd801, 0xdcd8, 0xd801, 0xdce4, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcf0, 0xd801, 0xdcd8,
+0xd801, 0xdce4, 0xd801, 0xdce3, 0x3b, 0xd801, 0xdcb9, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcec,
+0xd801, 0xdcd8, 0x20, 0xd801, 0xdcc4, 0xd801, 0xdcd8, 0xd801, 0xdce1, 0xd801, 0xdcdb, 0x358,
+0xd801, 0xdce7, 0xd801, 0xdce3, 0x3b, 0xd801, 0xdcb9, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcec,
+0xd801, 0xdcd8, 0x20, 0xd801, 0xdccf, 0xd801, 0xdcdf, 0xd801, 0xdcf5, 0xd801, 0xdcea, 0x358,
+0xd801, 0xdcec, 0xd801, 0xdcd8, 0x3b, 0xd801, 0xdcb9, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcec,
+0xd801, 0xdcd8, 0x20, 0xd801, 0xdccf, 0xd801, 0xdcdf, 0xd801, 0xdcf5, 0xd801, 0xdcd8, 0xd801,
+0xdcdc, 0xd801, 0xdce3, 0x3b, 0xd801, 0xdcb9, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcec, 0xd801,
+0xdcd8, 0x20, 0xd801, 0xdccf, 0xd801, 0xdcdf, 0xd801, 0xdcf0, 0xd801, 0xdcea, 0xd801, 0xdcec,
+0xd801, 0xdcd8, 0x3b, 0xd801, 0xdcb9, 0xd801, 0xdcd8, 0x358, 0xd801, 0xdcec, 0xd801, 0xdcd8,
+0x20, 0xd801, 0xdcc8, 0xd801, 0xdcd8, 0x20, 0xd801, 0xdcf5, 0xd801, 0xdcd8, 0xd801, 0xdcf2,
+0xd801, 0xdcd8, 0x20, 0xd801, 0xdcfb, 0xd801, 0xdce3, 0x358, 0x3b, 0xd801, 0xdcb9, 0xd801,
+0xdcd8, 0x358, 0xd801, 0xdcec, 0xd801, 0xdcd8, 0x20, 0xd801, 0xdcc2, 0xd801, 0xdce4, 0xd801,
+0xdcd8, 0xd801, 0xdcf8, 0xd801, 0xdcdf, 0x20, 0xd801, 0xdce3, 0x358, 0xd801, 0xdce4, 0xd801,
+0xdcdf, 0xd801, 0xdccf, 0x3b, 0xd801, 0xdcc4, 0x3b, 0xd801, 0xdccd, 0x3b, 0xd801, 0xdcb4,
+0x3b, 0xd801, 0xdcc8, 0x3b, 0xd801, 0xdcca, 0x3b, 0xd801, 0xdcf8, 0x425, 0x443, 0x44b,
+0x446, 0x430, 0x443, 0x431, 0x43e, 0x43d, 0x3b, 0x41a, 0x44a, 0x443, 0x44b, 0x440,
+0x438, 0x441, 0x4d5, 0x440, 0x3b, 0x414, 0x44b, 0x446, 0x446, 0x4d5, 0x433, 0x3b,
+0x4d4, 0x440, 0x442, 0x44b, 0x446, 0x446, 0x4d5, 0x433, 0x3b, 0x426, 0x44b, 0x43f,
+0x43f, 0x4d5, 0x440, 0x4d5, 0x43c, 0x3b, 0x41c, 0x430, 0x439, 0x440, 0x4d5, 0x43c,
+0x431, 0x43e, 0x43d, 0x3b, 0x421, 0x430, 0x431, 0x430, 0x442, 0x445, 0x443, 0x44b,
+0x446, 0x430, 0x443, 0x431, 0x43e, 0x43d, 0x3b, 0x43a, 0x44a, 0x443, 0x44b, 0x440,
+0x438, 0x441, 0x4d5, 0x440, 0x3b, 0x434, 0x44b, 0x446, 0x446, 0x4d5, 0x433, 0x3b,
+0x4d5, 0x440, 0x442, 0x44b, 0x446, 0x446, 0x4d5, 0x433, 0x3b, 0x446, 0x44b, 0x43f,
+0x43f, 0x4d5, 0x440, 0x4d5, 0x43c, 0x3b, 0x43c, 0x430, 0x439, 0x440, 0x4d5, 0x43c,
+0x431, 0x43e, 0x43d, 0x3b, 0x441, 0x430, 0x431, 0x430, 0x442, 0x425, 0x446, 0x431,
+0x3b, 0x41a, 0x440, 0x441, 0x3b, 0x414, 0x446, 0x433, 0x3b, 0x4d4, 0x440, 0x442,
+0x3b, 0x426, 0x43f, 0x440, 0x3b, 0x41c, 0x440, 0x431, 0x3b, 0x421, 0x431, 0x442,
+0x445, 0x446, 0x431, 0x3b, 0x43a, 0x440, 0x441, 0x3b, 0x434, 0x446, 0x433, 0x3b,
+0x4d5, 0x440, 0x442, 0x3b, 0x446, 0x43f, 0x440, 0x3b, 0x43c, 0x440, 0x431, 0x3b,
+0x441, 0x431, 0x442, 0x425, 0x3b, 0x41a, 0x3b, 0x414, 0x3b, 0x4d4, 0x3b, 0x426,
+0x3b, 0x41c, 0x3b, 0x421, 0x64, 0x6a, 0x61, 0x64, 0x75, 0x6d, 0x69, 0x6e,
+0x67, 0x75, 0x3b, 0x64, 0x6a, 0x61, 0x6c, 0x75, 0x6e, 0x61, 0x3b, 0x64,
+0x6a, 0x61, 0x6d, 0x61, 0x72, 0x73, 0x3b, 0x64, 0x6a, 0x61, 0x72, 0x61,
+0x73, 0x6f, 0x6e, 0x3b, 0x64, 0x6a, 0x61, 0x77, 0x65, 0x70, 0x73, 0x3b,
+0x64, 0x6a, 0x61, 0x62, 0x69, 0xe8, 0x72, 0x6e, 0xe8, 0x3b, 0x64, 0x6a,
+0x61, 0x73, 0x61, 0x62, 0x72, 0x61, 0x64, 0x64, 0x3b, 0x64, 0x6c, 0x3b,
+0x64, 0x6d, 0x3b, 0x64, 0x72, 0x3b, 0x64, 0x77, 0x3b, 0x64, 0x62, 0x3b,
+0x64, 0x73, 0x64a, 0x648, 0x646, 0x6cd, 0x3b, 0x62f, 0x648, 0x646, 0x6cd, 0x3b,
+0x62f, 0x631, 0x6d0, 0x646, 0x6cd, 0x3b, 0x685, 0x644, 0x631, 0x646, 0x6cd, 0x3b,
+0x67e, 0x64a, 0x646, 0x681, 0x646, 0x6cd, 0x3b, 0x62c, 0x645, 0x639, 0x647, 0x3b,
+0x627, 0x648, 0x646, 0x6cd, 0x6cc, 0x6a9, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x62f,
+0x648, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x633, 0x647, 0x200c, 0x634, 0x646, 0x628,
+0x647, 0x3b, 0x686, 0x647, 0x627, 0x631, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x67e,
+0x646, 0x62c, 0x634, 0x646, 0x628, 0x647, 0x3b, 0x62c, 0x645, 0x639, 0x647, 0x3b,
+0x634, 0x646, 0x628, 0x647, 0x6cc, 0x3b, 0x62f, 0x3b, 0x633, 0x3b, 0x686, 0x3b,
+0x67e, 0x3b, 0x62c, 0x3b, 0x634, 0x6e, 0x69, 0x65, 0x64, 0x7a, 0x69, 0x65,
+0x6c, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x69, 0x65, 0x64, 0x7a, 0x69, 0x61,
+0x142, 0x65, 0x6b, 0x3b, 0x77, 0x74, 0x6f, 0x72, 0x65, 0x6b, 0x3b, 0x15b,
+0x72, 0x6f, 0x64, 0x61, 0x3b, 0x63, 0x7a, 0x77, 0x61, 0x72, 0x74, 0x65,
+0x6b, 0x3b, 0x70, 0x69, 0x105, 0x74, 0x65, 0x6b, 0x3b, 0x73, 0x6f, 0x62,
+0x6f, 0x74, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x7a, 0x2e, 0x3b, 0x70, 0x6f,
+0x6e, 0x2e, 0x3b, 0x77, 0x74, 0x2e, 0x3b, 0x15b, 0x72, 0x2e, 0x3b, 0x63,
+0x7a, 0x77, 0x2e, 0x3b, 0x70, 0x74, 0x2e, 0x3b, 0x73, 0x6f, 0x62, 0x2e,
+0x4e, 0x3b, 0x50, 0x3b, 0x57, 0x3b, 0x15a, 0x3b, 0x43, 0x3b, 0x50, 0x3b,
+0x53, 0x6e, 0x3b, 0x70, 0x3b, 0x77, 0x3b, 0x15b, 0x3b, 0x63, 0x3b, 0x70,
+0x3b, 0x73, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x73, 0x65,
+0x67, 0x75, 0x6e, 0x64, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x3b,
+0x74, 0x65, 0x72, 0xe7, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x3b,
+0x71, 0x75, 0x61, 0x72, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61,
+0x3b, 0x71, 0x75, 0x69, 0x6e, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72,
+0x61, 0x3b, 0x73, 0x65, 0x78, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72,
+0x61, 0x3b, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x2e,
+0x3b, 0x73, 0x65, 0x67, 0x2e, 0x3b, 0x74, 0x65, 0x72, 0x2e, 0x3b, 0x71,
+0x75, 0x61, 0x2e, 0x3b, 0x71, 0x75, 0x69, 0x2e, 0x3b, 0x73, 0x65, 0x78,
+0x2e, 0x3b, 0x73, 0xe1, 0x62, 0x2e, 0x44, 0x3b, 0x53, 0x3b, 0x54, 0x3b,
+0x51, 0x3b, 0x51, 0x3b, 0x53, 0x3b, 0x53, 0x64, 0x6f, 0x6d, 0x69, 0x6e,
+0x67, 0x6f, 0x3b, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x61, 0x3b, 0x74,
+0x65, 0x72, 0xe7, 0x61, 0x3b, 0x71, 0x75, 0x61, 0x72, 0x74, 0x61, 0x3b,
+0x71, 0x75, 0x69, 0x6e, 0x74, 0x61, 0x3b, 0x73, 0x65, 0x78, 0x74, 0x61,
+0x3b, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x6f, 0x6e, 0x61, 0x64, 0x12b, 0x6c,
+0x69, 0x3b, 0x70, 0x61, 0x6e, 0x61, 0x64, 0x12b, 0x6c, 0x69, 0x3b, 0x77,
+0x69, 0x73, 0x61, 0x73, 0x12b, 0x64, 0x69, 0x73, 0x3b, 0x70, 0x75, 0x73,
+0x73, 0x69, 0x73, 0x61, 0x77, 0x61, 0x69, 0x74, 0x69, 0x3b, 0x6b, 0x65,
+0x74, 0x77, 0x69, 0x72, 0x74, 0x69, 0x6b, 0x73, 0x3b, 0x70, 0x113, 0x6e,
+0x74, 0x6e, 0x69, 0x6b, 0x73, 0x3b, 0x73, 0x61, 0x62, 0x61, 0x74, 0x74,
+0x69, 0x6b, 0x61, 0x6e, 0x61, 0x64, 0x3b, 0x70, 0x61, 0x6e, 0x3b, 0x77,
+0x69, 0x73, 0x3b, 0x70, 0x75, 0x73, 0x3b, 0x6b, 0x65, 0x74, 0x3b, 0x70,
+0x113, 0x6e, 0x3b, 0x73, 0x61, 0x62, 0x4e, 0x3b, 0x50, 0x3b, 0x57, 0x3b,
+0x50, 0x3b, 0x4b, 0x3b, 0x50, 0x3b, 0x53, 0xa10, 0xa24, 0xa35, 0xa3e, 0xa30,
+0x3b, 0xa38, 0xa4b, 0xa2e, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa2e, 0xa70, 0xa17, 0xa32,
+0xa35, 0xa3e, 0xa30, 0x3b, 0xa2c, 0xa41, 0xa71, 0xa27, 0xa35, 0xa3e, 0xa30, 0x3b,
+0xa35, 0xa40, 0xa30, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa38, 0xa3c, 0xa41, 0xa71, 0xa15,
+0xa30, 0xa35, 0xa3e, 0xa30, 0x3b, 0xa38, 0xa3c, 0xa28, 0xa3f, 0xa71, 0xa1a, 0xa30,
+0xa35, 0xa3e, 0xa30, 0xa10, 0xa24, 0x3b, 0xa38, 0xa4b, 0xa2e, 0x3b, 0xa2e, 0xa70,
+0xa17, 0xa32, 0x3b, 0xa2c, 0xa41, 0xa71, 0xa27, 0x3b, 0xa35, 0xa40, 0xa30, 0x3b,
+0xa38, 0xa3c, 0xa41, 0xa71, 0xa15, 0xa30, 0x3b, 0xa38, 0xa3c, 0xa28, 0xa3f, 0xa71,
+0xa1a, 0xa30, 0xa10, 0x3b, 0xa38, 0xa4b, 0x3b, 0xa2e, 0xa70, 0x3b, 0xa2c, 0xa41,
+0xa71, 0x3b, 0xa35, 0xa40, 0x3b, 0xa38, 0xa3c, 0xa41, 0xa71, 0x3b, 0xa38, 0xa3c,
+0x627, 0x62a, 0x648, 0x627, 0x631, 0x3b, 0x67e, 0x6cc, 0x631, 0x3b, 0x645, 0x646,
+0x6af, 0x644, 0x3b, 0x628, 0x64f, 0x62f, 0x6be, 0x3b, 0x62c, 0x645, 0x639, 0x631,
+0x627, 0x62a, 0x3b, 0x62c, 0x645, 0x639, 0x6c1, 0x3b, 0x6c1, 0x641, 0x62a, 0x6c1,
+0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x4c, 0x75, 0x6e, 0x65,
+0x73, 0x3b, 0x4d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x4d, 0x69, 0xe9,
+0x72, 0x63, 0x6f, 0x6c, 0x65, 0x73, 0x3b, 0x4a, 0x75, 0x65, 0x76, 0x65,
+0x73, 0x3b, 0x56, 0x69, 0x65, 0x72, 0x6e, 0x65, 0x73, 0x3b, 0x53, 0xe1,
+0x62, 0x61, 0x64, 0x6f, 0x44, 0x6f, 0x6d, 0x3b, 0x4c, 0x75, 0x6e, 0x3b,
+0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x69, 0xe9, 0x3b, 0x4a, 0x75, 0x65, 0x3b,
+0x56, 0x69, 0x65, 0x3b, 0x53, 0x61, 0x62, 0x44, 0x3b, 0x4c, 0x3b, 0x4d,
+0x3b, 0x58, 0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x64, 0x75, 0x6d, 0x69,
+0x6e, 0x69, 0x63, 0x103, 0x3b, 0x6c, 0x75, 0x6e, 0x69, 0x3b, 0x6d, 0x61,
+0x72, 0x21b, 0x69, 0x3b, 0x6d, 0x69, 0x65, 0x72, 0x63, 0x75, 0x72, 0x69,
+0x3b, 0x6a, 0x6f, 0x69, 0x3b, 0x76, 0x69, 0x6e, 0x65, 0x72, 0x69, 0x3b,
+0x73, 0xe2, 0x6d, 0x62, 0x103, 0x74, 0x103, 0x64, 0x75, 0x6d, 0x2e, 0x3b,
+0x6c, 0x75, 0x6e, 0x2e, 0x3b, 0x6d, 0x61, 0x72, 0x2e, 0x3b, 0x6d, 0x69,
+0x65, 0x2e, 0x3b, 0x6a, 0x6f, 0x69, 0x3b, 0x76, 0x69, 0x6e, 0x2e, 0x3b,
+0x73, 0xe2, 0x6d, 0x2e, 0x44, 0x75, 0x6d, 0x3b, 0x4c, 0x75, 0x6e, 0x3b,
+0x4d, 0x61, 0x72, 0x3b, 0x4d, 0x69, 0x65, 0x3b, 0x4a, 0x6f, 0x69, 0x3b,
+0x56, 0x69, 0x6e, 0x3b, 0x53, 0xe2, 0x6d, 0x44, 0x3b, 0x4c, 0x3b, 0x4d,
+0x61, 0x3b, 0x4d, 0x69, 0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x64, 0x75,
+0x6d, 0x65, 0x6e, 0x67, 0x69, 0x61, 0x3b, 0x67, 0x6c, 0x69, 0x6e, 0x64,
+0x65, 0x73, 0x64, 0x69, 0x3b, 0x6d, 0x61, 0x72, 0x64, 0x69, 0x3b, 0x6d,
+0x65, 0x73, 0x65, 0x6d, 0x6e, 0x61, 0x3b, 0x67, 0x69, 0x65, 0x76, 0x67,
+0x69, 0x61, 0x3b, 0x76, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x64, 0x69, 0x3b,
+0x73, 0x6f, 0x6e, 0x64, 0x61, 0x64, 0x75, 0x3b, 0x67, 0x6c, 0x69, 0x3b,
+0x6d, 0x61, 0x3b, 0x6d, 0x65, 0x3b, 0x67, 0x69, 0x65, 0x3b, 0x76, 0x65,
+0x3b, 0x73, 0x6f, 0x44, 0x3b, 0x47, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x47,
+0x3b, 0x56, 0x3b, 0x53, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x70, 0x69, 0x6c,
+0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b,
+0x49, 0x6a, 0x75, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x3b, 0x49, 0x6a, 0x75,
+0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d,
+0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x49,
+0x6a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x49, 0x6a, 0x70, 0x3b,
+0x49, 0x6a, 0x74, 0x3b, 0x49, 0x6a, 0x6e, 0x3b, 0x49, 0x6a, 0x74, 0x6e,
+0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x49, 0x6a, 0x6d,
+0x4b, 0x75, 0x20, 0x77, 0x2019, 0x69, 0x6e, 0x64, 0x77, 0x69, 0x3b, 0x4b,
+0x75, 0x20, 0x77, 0x61, 0x20, 0x6d, 0x62, 0x65, 0x72, 0x65, 0x3b, 0x4b,
+0x75, 0x20, 0x77, 0x61, 0x20, 0x6b, 0x61, 0x62, 0x69, 0x72, 0x69, 0x3b,
+0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x74, 0x75,
+0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x65, 0x3b,
+0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x6e, 0x75,
+0x3b, 0x4b, 0x75, 0x20, 0x77, 0x61, 0x20, 0x67, 0x61, 0x74, 0x61, 0x6e,
+0x64, 0x61, 0x74, 0x75, 0x63, 0x75, 0x2e, 0x3b, 0x6d, 0x62, 0x65, 0x2e,
+0x3b, 0x6b, 0x61, 0x62, 0x2e, 0x3b, 0x67, 0x74, 0x75, 0x2e, 0x3b, 0x6b,
+0x61, 0x6e, 0x2e, 0x3b, 0x67, 0x6e, 0x75, 0x2e, 0x3b, 0x67, 0x6e, 0x64,
+0x2e, 0x432, 0x43e, 0x441, 0x43a, 0x440, 0x435, 0x441, 0x435, 0x43d, 0x44c, 0x435,
+0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x43b, 0x44c, 0x43d, 0x438, 0x43a,
+0x3b, 0x432, 0x442, 0x43e, 0x440, 0x43d, 0x438, 0x43a, 0x3b, 0x441, 0x440, 0x435,
+0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x435, 0x440, 0x433, 0x3b, 0x43f,
+0x44f, 0x442, 0x43d, 0x438, 0x446, 0x430, 0x3b, 0x441, 0x443, 0x431, 0x431, 0x43e,
+0x442, 0x430, 0x432, 0x441, 0x3b, 0x43f, 0x43d, 0x3b, 0x432, 0x442, 0x3b, 0x441,
+0x440, 0x3b, 0x447, 0x442, 0x3b, 0x43f, 0x442, 0x3b, 0x441, 0x431, 0x412, 0x3b,
+0x41f, 0x3b, 0x412, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f, 0x3b, 0x421, 0x4e,
+0x61, 0x62, 0x61, 0x20, 0x53, 0x61, 0x6d, 0x62, 0x61, 0x74, 0x3b, 0x53,
+0x61, 0x6e, 0x69, 0x3b, 0x53, 0x61, 0x6c, 0x75, 0x73, 0x3b, 0x52, 0x61,
+0x62, 0x75, 0x71, 0x3b, 0x43, 0x61, 0x6d, 0x75, 0x73, 0x3b, 0x4a, 0x75,
+0x6d, 0x71, 0x61, 0x74, 0x61, 0x3b, 0x51, 0x75, 0x6e, 0x78, 0x61, 0x20,
+0x53, 0x61, 0x6d, 0x62, 0x61, 0x74, 0x4e, 0x61, 0x62, 0x3b, 0x53, 0x61,
+0x6e, 0x3b, 0x53, 0x61, 0x6c, 0x3b, 0x52, 0x61, 0x62, 0x3b, 0x43, 0x61,
+0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x51, 0x75, 0x6e, 0x4e, 0x3b, 0x53,
+0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x43, 0x3b, 0x4a, 0x3b, 0x51, 0x431, 0x430,
+0x441, 0x43a, 0x44b, 0x4bb, 0x44b, 0x430, 0x43d, 0x43d, 0x44c, 0x430, 0x3b, 0x431,
+0x44d, 0x43d, 0x438, 0x434, 0x438, 0x44d, 0x43d, 0x43d, 0x44c, 0x438, 0x43a, 0x3b,
+0x43e, 0x43f, 0x442, 0x443, 0x43e, 0x440, 0x443, 0x43d, 0x43d, 0x44c, 0x443, 0x43a,
+0x3b, 0x441, 0x44d, 0x440, 0x44d, 0x434, 0x44d, 0x3b, 0x447, 0x44d, 0x43f, 0x43f,
+0x438, 0x44d, 0x440, 0x3b, 0x411, 0x44d, 0x44d, 0x442, 0x438, 0x4a5, 0x441, 0x44d,
+0x3b, 0x441, 0x443, 0x431, 0x443, 0x43e, 0x442, 0x430, 0x431, 0x441, 0x3b, 0x431,
+0x43d, 0x3b, 0x43e, 0x43f, 0x3b, 0x441, 0x44d, 0x3b, 0x447, 0x43f, 0x3b, 0x431,
+0x44d, 0x3b, 0x441, 0x431, 0x411, 0x3b, 0x411, 0x3b, 0x41e, 0x3b, 0x421, 0x3b,
+0x427, 0x3b, 0x411, 0x3b, 0x421, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20,
+0x65, 0x65, 0x20, 0x61, 0x72, 0x65, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f,
+0x74, 0x20, 0x65, 0x65, 0x20, 0x6b, 0x75, 0x6e, 0x69, 0x3b, 0x4d, 0x64,
+0x65, 0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x6f, 0x6e, 0x67, 0x2019,
+0x77, 0x61, 0x6e, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65,
+0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3b, 0x4d, 0x64, 0x65, 0x72, 0x6f,
+0x74, 0x20, 0x65, 0x65, 0x20, 0x69, 0x6c, 0x65, 0x3b, 0x4d, 0x64, 0x65,
+0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x73, 0x61, 0x70, 0x61, 0x3b,
+0x4d, 0x64, 0x65, 0x72, 0x6f, 0x74, 0x20, 0x65, 0x65, 0x20, 0x6b, 0x77,
+0x65, 0x41, 0x72, 0x65, 0x3b, 0x4b, 0x75, 0x6e, 0x3b, 0x4f, 0x6e, 0x67,
+0x3b, 0x49, 0x6e, 0x65, 0x3b, 0x49, 0x6c, 0x65, 0x3b, 0x53, 0x61, 0x70,
+0x3b, 0x4b, 0x77, 0x65, 0x41, 0x3b, 0x4b, 0x3b, 0x4f, 0x3b, 0x49, 0x3b,
+0x49, 0x3b, 0x53, 0x3b, 0x4b, 0x42, 0x69, 0x6b, 0x75, 0x61, 0x2d, 0xf4,
+0x6b, 0x6f, 0x3b, 0x42, 0xef, 0x6b, 0x75, 0x61, 0x2d, 0xfb, 0x73, 0x65,
+0x3b, 0x42, 0xef, 0x6b, 0x75, 0x61, 0x2d, 0x70, 0x74, 0xe2, 0x3b, 0x42,
+0xef, 0x6b, 0x75, 0x61, 0x2d, 0x75, 0x73, 0xef, 0xf6, 0x3b, 0x42, 0xef,
+0x6b, 0x75, 0x61, 0x2d, 0x6f, 0x6b, 0xfc, 0x3b, 0x4c, 0xe2, 0x70, 0xf4,
+0x73, 0xf6, 0x3b, 0x4c, 0xe2, 0x79, 0x65, 0x6e, 0x67, 0x61, 0x42, 0x6b,
+0x31, 0x3b, 0x42, 0x6b, 0x32, 0x3b, 0x42, 0x6b, 0x33, 0x3b, 0x42, 0x6b,
+0x34, 0x3b, 0x42, 0x6b, 0x35, 0x3b, 0x4c, 0xe2, 0x70, 0x3b, 0x4c, 0xe2,
+0x79, 0x4b, 0x3b, 0x53, 0x3b, 0x54, 0x3b, 0x53, 0x3b, 0x4b, 0x3b, 0x50,
+0x3b, 0x59, 0x4d, 0x75, 0x6c, 0x75, 0x6e, 0x67, 0x75, 0x3b, 0x4a, 0x75,
+0x6d, 0x61, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6e,
+0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b,
+0x41, 0x6c, 0x61, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a,
+0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x6d, 0x6f, 0x73,
+0x69, 0x4d, 0x75, 0x6c, 0x3b, 0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6e, 0x6e,
+0x3b, 0x4a, 0x74, 0x6e, 0x3b, 0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75,
+0x3b, 0x4a, 0x6d, 0x6f, 0x4d, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b, 0x4a, 0x3b,
+0x41, 0x3b, 0x49, 0x3b, 0x4a, 0x930, 0x935, 0x93f, 0x935, 0x93e, 0x938, 0x930,
+0x903, 0x3b, 0x938, 0x94b, 0x92e, 0x935, 0x93e, 0x938, 0x930, 0x903, 0x3b, 0x92e,
+0x902, 0x917, 0x932, 0x935, 0x93e, 0x938, 0x930, 0x903, 0x3b, 0x92c, 0x941, 0x927,
+0x935, 0x93e, 0x938, 0x930, 0x903, 0x3b, 0x917, 0x941, 0x930, 0x941, 0x935, 0x93e,
+0x938, 0x930, 0x3a, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x935, 0x93e, 0x938,
+0x930, 0x903, 0x3b, 0x936, 0x928, 0x93f, 0x935, 0x93e, 0x938, 0x930, 0x903, 0x1c65,
+0x1c64, 0x1c78, 0x1c5c, 0x1c6e, 0x3b, 0x1c5a, 0x1c5b, 0x1c6e, 0x3b, 0x1c75, 0x1c5f, 0x1c5e,
+0x1c6e, 0x3b, 0x1c65, 0x1c5f, 0x1c79, 0x1c5c, 0x1c69, 0x1c71, 0x3b, 0x1c65, 0x1c5f, 0x1c79,
+0x1c68, 0x1c6b, 0x1c64, 0x3b, 0x1c61, 0x1c5f, 0x1c79, 0x1c68, 0x1c69, 0x1c62, 0x3b, 0x1c67,
+0x1c69, 0x1c66, 0x1c69, 0x1c62, 0x1c65, 0x1c64, 0x1c78, 0x3b, 0x1c5a, 0x1c5b, 0x3b, 0x1c75,
+0x1c5f, 0x3b, 0x1c65, 0x1c5f, 0x1c79, 0x3b, 0x1c65, 0x1c5f, 0x1c79, 0x1c68, 0x3b, 0x1c61,
+0x1c5f, 0x1c79, 0x3b, 0x1c67, 0x1c69, 0x1c65, 0x3b, 0x1c5a, 0x3b, 0x1c75, 0x3b, 0x1c65,
+0x3b, 0x1c65, 0x3b, 0x1c61, 0x3b, 0x1c67, 0x64, 0x6f, 0x6d, 0xec, 0x6e, 0x69,
+0x67, 0x61, 0x3b, 0x6c, 0x75, 0x6e, 0x69, 0x73, 0x3b, 0x6d, 0x61, 0x72,
+0x74, 0x69, 0x73, 0x3b, 0x6d, 0xe8, 0x72, 0x63, 0x75, 0x72, 0x69, 0x73,
+0x3b, 0x67, 0x69, 0xf2, 0x62, 0x69, 0x61, 0x3b, 0x63, 0x68, 0x65, 0x6e,
+0xe0, 0x62, 0x75, 0x72, 0x61, 0x3b, 0x73, 0xe0, 0x62, 0x61, 0x64, 0x75,
+0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b,
+0x6d, 0xe8, 0x72, 0x3b, 0x67, 0x69, 0xf2, 0x3b, 0x63, 0x68, 0x65, 0x3b,
+0x73, 0xe0, 0x62, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x47,
+0x3b, 0x43, 0x3b, 0x53, 0x44, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x75, 0x3b,
+0x43, 0x68, 0x69, 0x70, 0x6f, 0x73, 0x69, 0x3b, 0x43, 0x68, 0x69, 0x70,
+0x69, 0x72, 0x69, 0x3b, 0x43, 0x68, 0x69, 0x74, 0x61, 0x74, 0x75, 0x3b,
+0x43, 0x68, 0x69, 0x6e, 0x61, 0x69, 0x3b, 0x43, 0x68, 0x69, 0x73, 0x68,
+0x61, 0x6e, 0x75, 0x3b, 0x53, 0x61, 0x62, 0x75, 0x64, 0x75, 0x44, 0x69,
+0x6d, 0x3b, 0x50, 0x6f, 0x73, 0x3b, 0x50, 0x69, 0x72, 0x3b, 0x54, 0x61,
+0x74, 0x3b, 0x4e, 0x61, 0x69, 0x3b, 0x53, 0x68, 0x61, 0x3b, 0x53, 0x61,
+0x62, 0x44, 0x3b, 0x50, 0x3b, 0x43, 0x3b, 0x54, 0x3b, 0x4e, 0x3b, 0x53,
+0x3b, 0x53, 0x43d, 0x435, 0x434, 0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d,
+0x435, 0x434, 0x435, 0x459, 0x430, 0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440, 0x430,
+0x43a, 0x3b, 0x441, 0x440, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432,
+0x440, 0x442, 0x430, 0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430, 0x43a, 0x3b, 0x441,
+0x443, 0x431, 0x43e, 0x442, 0x430, 0x43d, 0x435, 0x434, 0x3b, 0x43f, 0x43e, 0x43d,
+0x3b, 0x443, 0x442, 0x43e, 0x3b, 0x441, 0x440, 0x435, 0x3b, 0x447, 0x435, 0x442,
+0x3b, 0x43f, 0x435, 0x442, 0x3b, 0x441, 0x443, 0x431, 0x43d, 0x435, 0x434, 0x458,
+0x435, 0x459, 0x430, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x435, 0x459, 0x430,
+0x43a, 0x3b, 0x443, 0x442, 0x43e, 0x440, 0x430, 0x43a, 0x3b, 0x441, 0x440, 0x438,
+0x458, 0x435, 0x434, 0x430, 0x3b, 0x447, 0x435, 0x442, 0x432, 0x440, 0x442, 0x430,
+0x43a, 0x3b, 0x43f, 0x435, 0x442, 0x430, 0x43a, 0x3b, 0x441, 0x443, 0x431, 0x43e,
+0x442, 0x430, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f,
+0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f,
+0x72, 0x61, 0x6b, 0x3b, 0x73, 0x72, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65,
+0x74, 0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b,
+0x3b, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65, 0x64, 0x3b, 0x70,
+0x6f, 0x6e, 0x3b, 0x75, 0x74, 0x6f, 0x3b, 0x73, 0x72, 0x65, 0x3b, 0x10d,
+0x65, 0x74, 0x3b, 0x70, 0x65, 0x74, 0x3b, 0x73, 0x75, 0x62, 0x6e, 0x65,
+0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x3b, 0x70, 0x6f, 0x6e, 0x65, 0x64,
+0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72, 0x61, 0x6b,
+0x3b, 0x73, 0x72, 0x69, 0x6a, 0x65, 0x64, 0x61, 0x3b, 0x10d, 0x65, 0x74,
+0x76, 0x72, 0x74, 0x61, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x61, 0x6b, 0x3b,
+0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x70,
+0x69, 0x69, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x74, 0x61, 0x74, 0x75,
+0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x61, 0x6e, 0x65, 0x3b, 0x4a, 0x75, 0x6d,
+0x61, 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d,
+0x69, 0x73, 0x69, 0x3b, 0x49, 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x3b, 0x4a,
+0x75, 0x6d, 0x61, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x4a, 0x70, 0x69, 0x3b,
+0x4a, 0x74, 0x74, 0x3b, 0x4a, 0x6d, 0x6e, 0x3b, 0x4a, 0x74, 0x6e, 0x3b,
+0x41, 0x6c, 0x68, 0x3b, 0x49, 0x6a, 0x75, 0x3b, 0x4a, 0x6d, 0x6f, 0x32,
+0x3b, 0x33, 0x3b, 0x34, 0x3b, 0x35, 0x3b, 0x41, 0x3b, 0x49, 0x3b, 0x31,
+0x53, 0x76, 0x6f, 0x6e, 0x64, 0x6f, 0x3b, 0x4d, 0x75, 0x76, 0x68, 0x75,
+0x72, 0x6f, 0x3b, 0x43, 0x68, 0x69, 0x70, 0x69, 0x72, 0x69, 0x3b, 0x43,
+0x68, 0x69, 0x74, 0x61, 0x74, 0x75, 0x3b, 0x43, 0x68, 0x69, 0x6e, 0x61,
+0x3b, 0x43, 0x68, 0x69, 0x73, 0x68, 0x61, 0x6e, 0x75, 0x3b, 0x4d, 0x75,
+0x67, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x53, 0x76, 0x6f, 0x3b, 0x4d, 0x75,
+0x76, 0x3b, 0x43, 0x68, 0x70, 0x3b, 0x43, 0x68, 0x74, 0x3b, 0x43, 0x68,
+0x6e, 0x3b, 0x43, 0x68, 0x73, 0x3b, 0x4d, 0x75, 0x67, 0x53, 0x3b, 0x4d,
+0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x43, 0x3b, 0x4d, 0xa46d, 0xa18f,
+0xa44d, 0x3b, 0xa18f, 0xa282, 0xa2cd, 0x3b, 0xa18f, 0xa282, 0xa44d, 0x3b, 0xa18f, 0xa282,
+0xa315, 0x3b, 0xa18f, 0xa282, 0xa1d6, 0x3b, 0xa18f, 0xa282, 0xa26c, 0x3b, 0xa18f, 0xa282,
+0xa0d8, 0xa46d, 0xa18f, 0x3b, 0xa18f, 0xa2cd, 0x3b, 0xa18f, 0xa44d, 0x3b, 0xa18f, 0xa315,
+0x3b, 0xa18f, 0xa1d6, 0x3b, 0xa18f, 0xa26c, 0x3b, 0xa18f, 0xa0d8, 0xa18f, 0x3b, 0xa2cd,
+0x3b, 0xa44d, 0x3b, 0xa315, 0x3b, 0xa1d6, 0x3b, 0xa26c, 0x3b, 0xa0d8, 0x64, 0x75,
+0x6d, 0xec, 0x6e, 0x69, 0x63, 0x61, 0x3b, 0x6c, 0x75, 0x6e, 0x6e, 0x69,
+0x64, 0xec, 0x61, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x69, 0x64, 0xec, 0x61,
+0x3b, 0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x69, 0x64, 0xec, 0x61, 0x3b,
+0x6a, 0x6f, 0x76, 0x69, 0x64, 0xec, 0x61, 0x3b, 0x76, 0x65, 0x6e, 0x6e,
+0x69, 0x64, 0xec, 0x61, 0x3b, 0x73, 0xe0, 0x62, 0x62, 0x61, 0x74, 0x75,
+0x53, 0x61, 0x6d, 0x62, 0x61, 0x74, 0x61, 0x3b, 0x53, 0x61, 0x6e, 0x79,
+0x6f, 0x3b, 0x4d, 0x61, 0x61, 0x6b, 0x69, 0x73, 0x61, 0x6e, 0x79, 0x6f,
+0x3b, 0x52, 0x6f, 0x6f, 0x77, 0x65, 0x3b, 0x48, 0x61, 0x6d, 0x75, 0x73,
+0x65, 0x3b, 0x41, 0x72, 0x62, 0x65, 0x3b, 0x51, 0x69, 0x64, 0x61, 0x61,
+0x6d, 0x65, 0x53, 0x61, 0x6d, 0x3b, 0x53, 0x61, 0x6e, 0x3b, 0x4d, 0x61,
+0x6b, 0x3b, 0x52, 0x6f, 0x77, 0x3b, 0x48, 0x61, 0x6d, 0x3b, 0x41, 0x72,
+0x62, 0x3b, 0x51, 0x69, 0x64, 0x53, 0x3b, 0x53, 0x3b, 0x4d, 0x3b, 0x52,
+0x3b, 0x48, 0x3b, 0x41, 0x3b, 0x51, 0x6e, 0x69, 0x79, 0x64, 0x7a, 0x69,
+0x65, 0x6c, 0x61, 0x3b, 0x70, 0x79, 0x144, 0x64, 0x7a, 0x69, 0x61, 0x142,
+0x65, 0x6b, 0x3b, 0x77, 0x74, 0x6f, 0x72, 0x65, 0x6b, 0x3b, 0x73, 0x74,
+0x72, 0x7a, 0x6f, 0x64, 0x61, 0x3b, 0x73, 0x7a, 0x74, 0x77, 0x6f, 0x72,
+0x74, 0x65, 0x6b, 0x3b, 0x70, 0x69, 0x14d, 0x6e, 0x74, 0x65, 0x6b, 0x3b,
+0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x69, 0x79, 0x3b, 0x70, 0x79,
+0x144, 0x3b, 0x77, 0x74, 0x6f, 0x3b, 0x73, 0x74, 0x72, 0x3b, 0x73, 0x7a,
+0x74, 0x3b, 0x70, 0x69, 0x14d, 0x3b, 0x73, 0x6f, 0x62, 0x622, 0x686, 0x631,
+0x3b, 0x633, 0x648, 0x645, 0x631, 0x3b, 0x627, 0x6b1, 0x627, 0x631, 0x648, 0x3b,
+0x627, 0x631, 0x628, 0x639, 0x3b, 0x62e, 0x645, 0x64a, 0x633, 0x3b, 0x62c, 0x645,
+0x639, 0x648, 0x3b, 0x687, 0x646, 0x687, 0x631, 0x622, 0x686, 0x631, 0x3b, 0x633,
+0x648, 0x3b, 0x627, 0x6b1, 0x627, 0x631, 0x648, 0x3b, 0x627, 0x631, 0x628, 0x639,
+0x3b, 0x62e, 0x645, 0x3b, 0x62c, 0x645, 0x639, 0x648, 0x3b, 0x687, 0x646, 0x687,
+0x631, 0x906, 0x930, 0x94d, 0x924, 0x3b, 0x938, 0x942, 0x3b, 0x92e, 0x902, 0x3b,
+0x92c, 0x941, 0x952, 0x927, 0x3b, 0x935, 0x93f, 0x938, 0x3b, 0x91c, 0x941, 0x92e,
+0x3b, 0x91b, 0x902, 0x91b, 0x906, 0x930, 0x94d, 0x924, 0x935, 0x93e, 0x930, 0x3b,
+0x938, 0x942, 0x92e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x941, 0x3b, 0x92c,
+0x941, 0x952, 0x927, 0x930, 0x3b, 0x935, 0x93f, 0x938, 0x94d, 0x92a, 0x924, 0x3b,
+0x91c, 0x941, 0x92e, 0x94b, 0x3b, 0x91b, 0x902, 0x91b, 0x930, 0x906, 0x3b, 0x938,
+0x942, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x927, 0x3b, 0x935, 0x93f, 0x938,
+0x3b, 0x91c, 0x941, 0x3b, 0x91b, 0x902, 0x91b, 0x906, 0x930, 0x94d, 0x924, 0x3b,
+0x938, 0x942, 0x3b, 0x92e, 0x902, 0x917, 0x3b, 0x92c, 0x941, 0x952, 0x927, 0x3b,
+0x935, 0x93f, 0x938, 0x3b, 0x91c, 0x941, 0x92e, 0x3b, 0x91b, 0x902, 0x91b, 0x906,
+0x3b, 0x938, 0x942, 0x3b, 0x92e, 0x902, 0x3b, 0x92c, 0x941, 0x952, 0x3b, 0x935,
+0x93f, 0x3b, 0x91c, 0x941, 0x3b, 0x91b, 0x902, 0xd89, 0xdbb, 0xdd2, 0xdaf, 0xdcf,
+0x3b, 0xdc3, 0xdb3, 0xdd4, 0xdaf, 0xdcf, 0x3b, 0xd85, 0xd9f, 0xdc4, 0xdbb, 0xdd4,
+0xdc0, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdb6, 0xdaf, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdb6,
+0xdca, 0x200d, 0xdbb, 0xdc4, 0xdc3, 0xdca, 0xdb4, 0xdad, 0xdd2, 0xdb1, 0xdca, 0xdaf,
+0xdcf, 0x3b, 0xdc3, 0xdd2, 0xd9a, 0xdd4, 0xdbb, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdc3,
+0xdd9, 0xdb1, 0xdc3, 0xdd4, 0xdbb, 0xdcf, 0xdaf, 0xdcf, 0xd89, 0xdbb, 0xdd2, 0xdaf,
+0xdcf, 0x3b, 0xdc3, 0xdb3, 0xdd4, 0xdaf, 0xdcf, 0x3b, 0xd85, 0xd9f, 0xdc4, 0x3b,
+0xdb6, 0xdaf, 0xdcf, 0xdaf, 0xdcf, 0x3b, 0xdb6, 0xdca, 0x200d, 0xdbb, 0xdc4, 0xdc3,
+0xdca, 0x3b, 0xdc3, 0xdd2, 0xd9a, 0xdd4, 0x3b, 0xdc3, 0xdd9, 0xdb1, 0xd89, 0x3b,
+0xdc3, 0x3b, 0xd85, 0x3b, 0xdb6, 0x3b, 0xdb6, 0xdca, 0x200d, 0xdbb, 0x3b, 0xdc3,
+0xdd2, 0x3b, 0xdc3, 0xdd9, 0x6e, 0x65, 0x64, 0x65, 0x13e, 0x61, 0x3b, 0x70,
+0x6f, 0x6e, 0x64, 0x65, 0x6c, 0x6f, 0x6b, 0x3b, 0x75, 0x74, 0x6f, 0x72,
+0x6f, 0x6b, 0x3b, 0x73, 0x74, 0x72, 0x65, 0x64, 0x61, 0x3b, 0x161, 0x74,
+0x76, 0x72, 0x74, 0x6f, 0x6b, 0x3b, 0x70, 0x69, 0x61, 0x74, 0x6f, 0x6b,
+0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65, 0x3b, 0x70, 0x6f,
+0x3b, 0x75, 0x74, 0x3b, 0x73, 0x74, 0x3b, 0x161, 0x74, 0x3b, 0x70, 0x69,
+0x3b, 0x73, 0x6f, 0x6e, 0x3b, 0x70, 0x3b, 0x75, 0x3b, 0x73, 0x3b, 0x161,
+0x3b, 0x70, 0x3b, 0x73, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x61, 0x3b,
+0x70, 0x6f, 0x6e, 0x65, 0x64, 0x65, 0x6c, 0x6a, 0x65, 0x6b, 0x3b, 0x74,
+0x6f, 0x72, 0x65, 0x6b, 0x3b, 0x73, 0x72, 0x65, 0x64, 0x61, 0x3b, 0x10d,
+0x65, 0x74, 0x72, 0x74, 0x65, 0x6b, 0x3b, 0x70, 0x65, 0x74, 0x65, 0x6b,
+0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x65, 0x64, 0x2e, 0x3b,
+0x70, 0x6f, 0x6e, 0x2e, 0x3b, 0x74, 0x6f, 0x72, 0x2e, 0x3b, 0x73, 0x72,
+0x65, 0x2e, 0x3b, 0x10d, 0x65, 0x74, 0x2e, 0x3b, 0x70, 0x65, 0x74, 0x2e,
+0x3b, 0x73, 0x6f, 0x62, 0x2e, 0x6e, 0x3b, 0x70, 0x3b, 0x74, 0x3b, 0x73,
+0x3b, 0x10d, 0x3b, 0x70, 0x3b, 0x73, 0x53, 0x61, 0x62, 0x69, 0x69, 0x74,
+0x69, 0x3b, 0x42, 0x61, 0x6c, 0x61, 0x7a, 0x61, 0x3b, 0x4f, 0x77, 0x6f,
+0x6b, 0x75, 0x62, 0x69, 0x6c, 0x69, 0x3b, 0x4f, 0x77, 0x6f, 0x6b, 0x75,
+0x73, 0x61, 0x74, 0x75, 0x3b, 0x4f, 0x6c, 0x6f, 0x6b, 0x75, 0x6e, 0x61,
+0x3b, 0x4f, 0x6c, 0x6f, 0x6b, 0x75, 0x74, 0x61, 0x61, 0x6e, 0x75, 0x3b,
+0x4f, 0x6c, 0x6f, 0x6d, 0x75, 0x6b, 0x61, 0x61, 0x67, 0x61, 0x53, 0x61,
+0x62, 0x69, 0x3b, 0x42, 0x61, 0x6c, 0x61, 0x3b, 0x4b, 0x75, 0x62, 0x69,
+0x3b, 0x4b, 0x75, 0x73, 0x61, 0x3b, 0x4b, 0x75, 0x6e, 0x61, 0x3b, 0x4b,
+0x75, 0x74, 0x61, 0x3b, 0x4d, 0x75, 0x6b, 0x61, 0x53, 0x3b, 0x42, 0x3b,
+0x42, 0x3b, 0x53, 0x3b, 0x4b, 0x3b, 0x4b, 0x3b, 0x4d, 0x41, 0x78, 0x61,
+0x64, 0x3b, 0x49, 0x73, 0x6e, 0x69, 0x69, 0x6e, 0x3b, 0x54, 0x61, 0x6c,
+0x61, 0x61, 0x64, 0x6f, 0x3b, 0x41, 0x72, 0x62, 0x61, 0x63, 0x6f, 0x3b,
+0x4b, 0x68, 0x61, 0x6d, 0x69, 0x69, 0x73, 0x3b, 0x4a, 0x69, 0x6d, 0x63,
+0x6f, 0x3b, 0x53, 0x61, 0x62, 0x74, 0x69, 0x41, 0x78, 0x64, 0x3b, 0x49,
+0x73, 0x6e, 0x3b, 0x54, 0x6c, 0x64, 0x6f, 0x3b, 0x41, 0x72, 0x62, 0x63,
+0x3b, 0x4b, 0x68, 0x6d, 0x73, 0x3b, 0x4a, 0x6d, 0x63, 0x3b, 0x53, 0x62,
+0x74, 0x69, 0x41, 0x3b, 0x49, 0x3b, 0x54, 0x3b, 0x41, 0x3b, 0x4b, 0x68,
+0x3b, 0x4a, 0x3b, 0x53, 0x53, 0x6f, 0x6e, 0x74, 0x61, 0x68, 0x61, 0x3b,
+0x4d, 0x6d, 0x61, 0x6e, 0x74, 0x61, 0x68, 0x61, 0x3b, 0x4c, 0x61, 0x62,
+0x6f, 0x62, 0x65, 0x64, 0x69, 0x3b, 0x4c, 0x61, 0x62, 0x6f, 0x72, 0x61,
+0x72, 0x75, 0x3b, 0x4c, 0x61, 0x62, 0x6f, 0x6e, 0x65, 0x3b, 0x4c, 0x61,
+0x62, 0x6f, 0x68, 0x6c, 0x61, 0x6e, 0x65, 0x3b, 0x4d, 0x6f, 0x71, 0x65,
+0x62, 0x65, 0x6c, 0x6f, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x6d, 0x61, 0x3b,
+0x42, 0x65, 0x64, 0x3b, 0x52, 0x61, 0x72, 0x3b, 0x4e, 0x65, 0x3b, 0x48,
+0x6c, 0x61, 0x3b, 0x4d, 0x6f, 0x71, 0x75, 0x53, 0x6f, 0x6e, 0x74, 0x6f,
+0x3b, 0x75, 0x4d, 0x76, 0x75, 0x6c, 0x6f, 0x3b, 0x75, 0x4c, 0x65, 0x73,
+0x69, 0x62, 0x69, 0x6c, 0x69, 0x3b, 0x4c, 0x65, 0x73, 0x69, 0x74, 0x68,
+0x61, 0x74, 0x68, 0x75, 0x3b, 0x75, 0x4c, 0x65, 0x73, 0x69, 0x6e, 0x65,
+0x3b, 0x6e, 0x67, 0x6f, 0x4c, 0x65, 0x73, 0x69, 0x68, 0x6c, 0x61, 0x6e,
+0x75, 0x3b, 0x75, 0x6d, 0x47, 0x71, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x53,
+0x6f, 0x6e, 0x3b, 0x4d, 0x76, 0x75, 0x3b, 0x42, 0x69, 0x6c, 0x3b, 0x54,
+0x68, 0x61, 0x3b, 0x4e, 0x65, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x47, 0x71,
+0x69, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x3b, 0x6c, 0x75, 0x6e,
+0x65, 0x73, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x3b, 0x6d, 0x69,
+0xe9, 0x72, 0x63, 0x6f, 0x6c, 0x65, 0x73, 0x3b, 0x6a, 0x75, 0x65, 0x76,
+0x65, 0x73, 0x3b, 0x76, 0x69, 0x65, 0x72, 0x6e, 0x65, 0x73, 0x3b, 0x73,
+0xe1, 0x62, 0x61, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x3b, 0x6c, 0x75, 0x6e,
+0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d, 0x69, 0xe9, 0x3b, 0x6a, 0x75, 0x65,
+0x3b, 0x76, 0x69, 0x65, 0x3b, 0x73, 0xe1, 0x62, 0x44, 0x3b, 0x4c, 0x3b,
+0x4d, 0x3b, 0x6d, 0x3b, 0x4a, 0x3b, 0x56, 0x3b, 0x53, 0x2d30, 0x2d59, 0x2d30,
+0x2d4e, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d62, 0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59,
+0x2d49, 0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d3d, 0x2d55, 0x2d30, 0x2d59, 0x3b, 0x2d30,
+0x2d3d, 0x2d61, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4e, 0x2d61, 0x2d30, 0x2d59,
+0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d39, 0x2d62, 0x2d30, 0x2d59, 0x2d30, 0x2d59, 0x2d30, 0x3b,
+0x2d30, 0x2d62, 0x2d4f, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x3b, 0x2d30, 0x2d3d, 0x2d55, 0x3b,
+0x2d30, 0x2d3d, 0x2d61, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4e, 0x3b, 0x2d30, 0x2d59, 0x2d49,
+0x2d39, 0x4d, 0x69, 0x6e, 0x67, 0x67, 0x75, 0x3b, 0x53, 0x65, 0x6e, 0xe9,
+0x6e, 0x3b, 0x53, 0x61, 0x6c, 0x61, 0x73, 0x61, 0x3b, 0x52, 0x65, 0x62,
+0x6f, 0x3b, 0x4b, 0x65, 0x6d, 0x69, 0x73, 0x3b, 0x4a, 0x75, 0x6d, 0x61,
+0x61, 0x68, 0x3b, 0x53, 0x61, 0x70, 0x74, 0x75, 0x4d, 0x6e, 0x67, 0x3b,
+0x53, 0x65, 0x6e, 0x3b, 0x53, 0x61, 0x6c, 0x3b, 0x52, 0x65, 0x62, 0x3b,
+0x4b, 0x65, 0x6d, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x61, 0x70, 0x4c,
+0x69, 0x73, 0x6f, 0x6e, 0x74, 0x66, 0x6f, 0x3b, 0x75, 0x4d, 0x73, 0x6f,
+0x6d, 0x62, 0x75, 0x6c, 0x75, 0x6b, 0x6f, 0x3b, 0x4c, 0x65, 0x73, 0x69,
+0x62, 0x69, 0x6c, 0x69, 0x3b, 0x4c, 0x65, 0x73, 0x69, 0x74, 0x73, 0x61,
+0x74, 0x66, 0x75, 0x3b, 0x4c, 0x65, 0x73, 0x69, 0x6e, 0x65, 0x3b, 0x4c,
+0x65, 0x73, 0x69, 0x68, 0x6c, 0x61, 0x6e, 0x75, 0x3b, 0x75, 0x4d, 0x67,
+0x63, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x73,
+0x6f, 0x3b, 0x42, 0x69, 0x6c, 0x3b, 0x54, 0x73, 0x61, 0x3b, 0x4e, 0x65,
+0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d, 0x67, 0x63, 0x73, 0xf6, 0x6e, 0x64,
+0x61, 0x67, 0x3b, 0x6d, 0xe5, 0x6e, 0x64, 0x61, 0x67, 0x3b, 0x74, 0x69,
+0x73, 0x64, 0x61, 0x67, 0x3b, 0x6f, 0x6e, 0x73, 0x64, 0x61, 0x67, 0x3b,
+0x74, 0x6f, 0x72, 0x73, 0x64, 0x61, 0x67, 0x3b, 0x66, 0x72, 0x65, 0x64,
+0x61, 0x67, 0x3b, 0x6c, 0xf6, 0x72, 0x64, 0x61, 0x67, 0x73, 0xf6, 0x6e,
+0x3b, 0x6d, 0xe5, 0x6e, 0x3b, 0x74, 0x69, 0x73, 0x3b, 0x6f, 0x6e, 0x73,
+0x3b, 0x74, 0x6f, 0x72, 0x73, 0x3b, 0x66, 0x72, 0x65, 0x3b, 0x6c, 0xf6,
+0x72, 0x53, 0x75, 0x6e, 0x6e, 0x74, 0x69, 0x67, 0x3b, 0x4d, 0xe4, 0xe4,
+0x6e, 0x74, 0x69, 0x67, 0x3b, 0x5a, 0x69, 0x69, 0x73, 0x63, 0x68, 0x74,
+0x69, 0x67, 0x3b, 0x4d, 0x69, 0x74, 0x74, 0x77, 0x75, 0x63, 0x68, 0x3b,
+0x44, 0x75, 0x6e, 0x73, 0x63, 0x68, 0x74, 0x69, 0x67, 0x3b, 0x46, 0x72,
+0x69, 0x69, 0x74, 0x69, 0x67, 0x3b, 0x53, 0x61, 0x6d, 0x73, 0x63, 0x68,
+0x74, 0x69, 0x67, 0x53, 0x75, 0x2e, 0x3b, 0x4d, 0xe4, 0x2e, 0x3b, 0x5a,
+0x69, 0x2e, 0x3b, 0x4d, 0x69, 0x2e, 0x3b, 0x44, 0x75, 0x2e, 0x3b, 0x46,
+0x72, 0x2e, 0x3b, 0x53, 0x61, 0x2e, 0x71a, 0x715, 0x712, 0x72b, 0x712, 0x710,
+0x3b, 0x72c, 0x72a, 0x71d, 0x722, 0x712, 0x72b, 0x712, 0x710, 0x3b, 0x72c, 0x720,
+0x72c, 0x712, 0x72b, 0x712, 0x710, 0x3b, 0x710, 0x72a, 0x712, 0x725, 0x712, 0x72b,
+0x712, 0x710, 0x3b, 0x71a, 0x721, 0x72b, 0x712, 0x72b, 0x712, 0x710, 0x3b, 0x725,
+0x72a, 0x718, 0x712, 0x72c, 0x710, 0x3b, 0x72b, 0x712, 0x72c, 0x710, 0x71a, 0x715,
+0x3b, 0x72c, 0x72a, 0x71d, 0x722, 0x3b, 0x72c, 0x720, 0x72c, 0x3b, 0x710, 0x72a,
+0x712, 0x725, 0x3b, 0x71a, 0x721, 0x72b, 0x3b, 0x725, 0x72a, 0x718, 0x3b, 0x72b,
+0x712, 0x72c, 0x710, 0x71a, 0x3b, 0x72c, 0x3b, 0x72c, 0x3b, 0x710, 0x3b, 0x71a,
+0x3b, 0x725, 0x3b, 0x72b, 0x2d30, 0x2d59, 0x2d30, 0x2d4e, 0x2d30, 0x2d59, 0x3b, 0x2d30,
+0x2d62, 0x2d4f, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d4f, 0x2d30, 0x2d59, 0x3b,
+0x2d30, 0x2d3d, 0x2d55, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d3d, 0x2d61, 0x2d30, 0x2d59, 0x3b,
+0x2d59, 0x2d49, 0x2d4e, 0x2d61, 0x2d30, 0x2d59, 0x3b, 0x2d30, 0x2d59, 0x2d49, 0x2d39, 0x2d62,
+0x2d30, 0x2d59, 0x61, 0x73, 0x61, 0x6d, 0x61, 0x73, 0x3b, 0x61, 0x79, 0x6e,
+0x61, 0x73, 0x3b, 0x61, 0x73, 0x69, 0x6e, 0x61, 0x73, 0x3b, 0x61, 0x6b,
+0x1e5b, 0x61, 0x73, 0x3b, 0x61, 0x6b, 0x77, 0x61, 0x73, 0x3b, 0x61, 0x73,
+0x69, 0x6d, 0x77, 0x61, 0x73, 0x3b, 0x61, 0x73, 0x69, 0x1e0d, 0x79, 0x61,
+0x73, 0x61, 0x73, 0x61, 0x3b, 0x61, 0x79, 0x6e, 0x3b, 0x61, 0x73, 0x69,
+0x3b, 0x61, 0x6b, 0x1e5b, 0x3b, 0x61, 0x6b, 0x77, 0x3b, 0x61, 0x73, 0x69,
+0x6d, 0x3b, 0x61, 0x73, 0x69, 0x1e0d, 0x49, 0x74, 0x75, 0x6b, 0x75, 0x20,
+0x6a, 0x61, 0x20, 0x6a, 0x75, 0x6d, 0x77, 0x61, 0x3b, 0x4b, 0x75, 0x72,
+0x61, 0x6d, 0x75, 0x6b, 0x61, 0x20, 0x6a, 0x69, 0x6d, 0x77, 0x65, 0x72,
+0x69, 0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x20, 0x6b,
+0x61, 0x77, 0x69, 0x3b, 0x4b, 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6b, 0x61,
+0x20, 0x6b, 0x61, 0x64, 0x61, 0x64, 0x75, 0x3b, 0x4b, 0x75, 0x72, 0x61,
+0x6d, 0x75, 0x6b, 0x61, 0x20, 0x6b, 0x61, 0x6e, 0x61, 0x3b, 0x4b, 0x75,
+0x72, 0x61, 0x6d, 0x75, 0x6b, 0x61, 0x20, 0x6b, 0x61, 0x73, 0x61, 0x6e,
+0x75, 0x3b, 0x4b, 0x69, 0x66, 0x75, 0x6c, 0x61, 0x20, 0x6e, 0x67, 0x75,
+0x77, 0x6f, 0x4a, 0x75, 0x6d, 0x3b, 0x4a, 0x69, 0x6d, 0x3b, 0x4b, 0x61,
+0x77, 0x3b, 0x4b, 0x61, 0x64, 0x3b, 0x4b, 0x61, 0x6e, 0x3b, 0x4b, 0x61,
+0x73, 0x3b, 0x4e, 0x67, 0x75, 0x4a, 0x3b, 0x4a, 0x3b, 0x4b, 0x3b, 0x4b,
+0x3b, 0x4b, 0x3b, 0x4b, 0x3b, 0x4e, 0x42f, 0x43a, 0x448, 0x430, 0x43d, 0x431,
+0x435, 0x3b, 0x414, 0x443, 0x448, 0x430, 0x43d, 0x431, 0x435, 0x3b, 0x421, 0x435,
+0x448, 0x430, 0x43d, 0x431, 0x435, 0x3b, 0x427, 0x43e, 0x440, 0x448, 0x430, 0x43d,
+0x431, 0x435, 0x3b, 0x41f, 0x430, 0x43d, 0x4b7, 0x448, 0x430, 0x43d, 0x431, 0x435,
+0x3b, 0x4b6, 0x443, 0x43c, 0x44a, 0x430, 0x3b, 0x428, 0x430, 0x43d, 0x431, 0x435,
+0x42f, 0x448, 0x431, 0x3b, 0x414, 0x448, 0x431, 0x3b, 0x421, 0x448, 0x431, 0x3b,
+0x427, 0x448, 0x431, 0x3b, 0x41f, 0x448, 0x431, 0x3b, 0x4b6, 0x43c, 0x44a, 0x3b,
+0x428, 0x43d, 0x431, 0x42f, 0x3b, 0x414, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f,
+0x3b, 0x4b6, 0x3b, 0x428, 0xb9e, 0xbbe, 0xbaf, 0xbbf, 0xbb1, 0xbc1, 0x3b, 0xba4,
+0xbbf, 0xb99, 0xbcd, 0xb95, 0xbb3, 0xbcd, 0x3b, 0xb9a, 0xbc6, 0xbb5, 0xbcd, 0xbb5,
+0xbbe, 0xbaf, 0xbcd, 0x3b, 0xbaa, 0xbc1, 0xba4, 0xba9, 0xbcd, 0x3b, 0xbb5, 0xbbf,
+0xbaf, 0xbbe, 0xbb4, 0xba9, 0xbcd, 0x3b, 0xbb5, 0xbc6, 0xbb3, 0xbcd, 0xbb3, 0xbbf,
+0x3b, 0xb9a, 0xba9, 0xbbf, 0xb9e, 0xbbe, 0xbaf, 0xbbf, 0x2e, 0x3b, 0xba4, 0xbbf,
+0xb99, 0xbcd, 0x2e, 0x3b, 0xb9a, 0xbc6, 0xbb5, 0xbcd, 0x2e, 0x3b, 0xbaa, 0xbc1,
+0xba4, 0x2e, 0x3b, 0xbb5, 0xbbf, 0xbaf, 0xbbe, 0x2e, 0x3b, 0xbb5, 0xbc6, 0xbb3,
+0xbcd, 0x2e, 0x3b, 0xb9a, 0xba9, 0xbbf, 0xb9e, 0xbbe, 0x3b, 0xba4, 0xbbf, 0x3b,
+0xb9a, 0xbc6, 0x3b, 0xbaa, 0xbc1, 0x3b, 0xbb5, 0xbbf, 0x3b, 0xbb5, 0xbc6, 0x3b,
+0xb9a, 0x4a, 0x69, 0x79, 0x61, 0x78, 0x20, 0x73, 0x6e, 0x67, 0x61, 0x79,
+0x61, 0x6e, 0x3b, 0x74, 0x67, 0x4b, 0x69, 0x6e, 0x67, 0x61, 0x6c, 0x20,
+0x6a, 0x69, 0x79, 0x61, 0x78, 0x20, 0x69, 0x79, 0x61, 0x78, 0x20, 0x73,
+0x6e, 0x67, 0x61, 0x79, 0x61, 0x6e, 0x3b, 0x74, 0x67, 0x44, 0x68, 0x61,
+0x20, 0x6a, 0x69, 0x79, 0x61, 0x78, 0x20, 0x69, 0x79, 0x61, 0x78, 0x20,
+0x73, 0x6e, 0x67, 0x61, 0x79, 0x61, 0x6e, 0x3b, 0x74, 0x67, 0x54, 0x72,
+0x75, 0x20, 0x6a, 0x69, 0x79, 0x61, 0x78, 0x20, 0x69, 0x79, 0x61, 0x78,
+0x20, 0x73, 0x6e, 0x67, 0x61, 0x79, 0x61, 0x6e, 0x3b, 0x74, 0x67, 0x53,
+0x70, 0x61, 0x63, 0x20, 0x6a, 0x69, 0x79, 0x61, 0x78, 0x20, 0x69, 0x79,
+0x61, 0x78, 0x20, 0x73, 0x6e, 0x67, 0x61, 0x79, 0x61, 0x6e, 0x3b, 0x74,
+0x67, 0x52, 0x69, 0x6d, 0x61, 0x20, 0x6a, 0x69, 0x79, 0x61, 0x78, 0x20,
+0x69, 0x79, 0x61, 0x78, 0x20, 0x73, 0x6e, 0x67, 0x61, 0x79, 0x61, 0x6e,
+0x3b, 0x74, 0x67, 0x4d, 0x61, 0x74, 0x61, 0x72, 0x75, 0x20, 0x6a, 0x69,
+0x79, 0x61, 0x78, 0x20, 0x69, 0x79, 0x61, 0x78, 0x20, 0x73, 0x6e, 0x67,
+0x61, 0x79, 0x61, 0x6e, 0x45, 0x6d, 0x70, 0x3b, 0x4b, 0x69, 0x6e, 0x3b,
+0x44, 0x68, 0x61, 0x3b, 0x54, 0x72, 0x75, 0x3b, 0x53, 0x70, 0x61, 0x3b,
+0x52, 0x69, 0x6d, 0x3b, 0x4d, 0x61, 0x74, 0x45, 0x3b, 0x4b, 0x3b, 0x44,
+0x3b, 0x54, 0x3b, 0x53, 0x3b, 0x52, 0x3b, 0x4d, 0x44f, 0x43a, 0x448, 0x4d9,
+0x43c, 0x431, 0x435, 0x3b, 0x434, 0x4af, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b,
+0x441, 0x438, 0x448, 0x4d9, 0x43c, 0x431, 0x435, 0x3b, 0x447, 0x4d9, 0x440, 0x448,
+0x4d9, 0x43c, 0x431, 0x435, 0x3b, 0x43f, 0x4d9, 0x43d, 0x497, 0x435, 0x448, 0x4d9,
+0x43c, 0x431, 0x435, 0x3b, 0x497, 0x43e, 0x43c, 0x433, 0x430, 0x3b, 0x448, 0x438,
+0x43c, 0x431, 0x4d9, 0x44f, 0x43a, 0x448, 0x2e, 0x3b, 0x434, 0x4af, 0x448, 0x2e,
+0x3b, 0x441, 0x438, 0x448, 0x2e, 0x3b, 0x447, 0x4d9, 0x440, 0x2e, 0x3b, 0x43f,
+0x4d9, 0x43d, 0x497, 0x2e, 0x3b, 0x497, 0x43e, 0x43c, 0x2e, 0x3b, 0x448, 0x438,
+0x43c, 0x2e, 0x42f, 0x3b, 0x414, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f, 0x3b,
+0x496, 0x3b, 0x428, 0xc06, 0xc26, 0xc3f, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc38,
+0xc4b, 0xc2e, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc2e, 0xc02, 0xc17, 0xc33, 0xc35,
+0xc3e, 0xc30, 0xc02, 0x3b, 0xc2c, 0xc41, 0xc27, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b,
+0xc17, 0xc41, 0xc30, 0xc41, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc36, 0xc41, 0xc15,
+0xc4d, 0xc30, 0xc35, 0xc3e, 0xc30, 0xc02, 0x3b, 0xc36, 0xc28, 0xc3f, 0xc35, 0xc3e,
+0xc30, 0xc02, 0xc06, 0xc26, 0xc3f, 0x3b, 0xc38, 0xc4b, 0xc2e, 0x3b, 0xc2e, 0xc02,
+0xc17, 0xc33, 0x3b, 0xc2c, 0xc41, 0xc27, 0x3b, 0xc17, 0xc41, 0xc30, 0xc41, 0x3b,
+0xc36, 0xc41, 0xc15, 0xc4d, 0xc30, 0x3b, 0xc36, 0xc28, 0xc3f, 0xc06, 0x3b, 0xc38,
+0xc4b, 0x3b, 0xc2e, 0x3b, 0xc2c, 0xc41, 0x3b, 0xc17, 0xc41, 0x3b, 0xc36, 0xc41,
+0x3b, 0xc36, 0x4e, 0x61, 0x6b, 0x61, 0x65, 0x6a, 0x75, 0x6d, 0x61, 0x3b,
+0x4e, 0x61, 0x6b, 0x61, 0x65, 0x62, 0x61, 0x72, 0x61, 0x73, 0x61, 0x3b,
+0x4e, 0x61, 0x6b, 0x61, 0x61, 0x72, 0x65, 0x3b, 0x4e, 0x61, 0x6b, 0x61,
+0x75, 0x6e, 0x69, 0x3b, 0x4e, 0x61, 0x6b, 0x61, 0x75, 0x6e, 0x67, 0x2019,
+0x6f, 0x6e, 0x3b, 0x4e, 0x61, 0x6b, 0x61, 0x6b, 0x61, 0x6e, 0x79, 0x3b,
+0x4e, 0x61, 0x6b, 0x61, 0x73, 0x61, 0x62, 0x69, 0x74, 0x69, 0x4a, 0x75,
+0x6d, 0x3b, 0x42, 0x61, 0x72, 0x3b, 0x41, 0x61, 0x72, 0x3b, 0x55, 0x6e,
+0x69, 0x3b, 0x55, 0x6e, 0x67, 0x3b, 0x4b, 0x61, 0x6e, 0x3b, 0x53, 0x61,
+0x62, 0x4a, 0x3b, 0x42, 0x3b, 0x41, 0x3b, 0x55, 0x3b, 0x55, 0x3b, 0x4b,
+0x3b, 0x53, 0xe27, 0xe31, 0xe19, 0xe2d, 0xe32, 0xe17, 0xe34, 0xe15, 0xe22, 0xe4c,
+0x3b, 0xe27, 0xe31, 0xe19, 0xe08, 0xe31, 0xe19, 0xe17, 0xe23, 0xe4c, 0x3b, 0xe27,
+0xe31, 0xe19, 0xe2d, 0xe31, 0xe07, 0xe04, 0xe32, 0xe23, 0x3b, 0xe27, 0xe31, 0xe19,
+0xe1e, 0xe38, 0xe18, 0x3b, 0xe27, 0xe31, 0xe19, 0xe1e, 0xe24, 0xe2b, 0xe31, 0xe2a,
+0xe1a, 0xe14, 0xe35, 0x3b, 0xe27, 0xe31, 0xe19, 0xe28, 0xe38, 0xe01, 0xe23, 0xe4c,
+0x3b, 0xe27, 0xe31, 0xe19, 0xe40, 0xe2a, 0xe32, 0xe23, 0xe4c, 0xe2d, 0xe32, 0x2e,
+0x3b, 0xe08, 0x2e, 0x3b, 0xe2d, 0x2e, 0x3b, 0xe1e, 0x2e, 0x3b, 0xe1e, 0xe24,
+0x2e, 0x3b, 0xe28, 0x2e, 0x3b, 0xe2a, 0x2e, 0xe2d, 0xe32, 0x3b, 0xe08, 0x3b,
+0xe2d, 0x3b, 0xe1e, 0x3b, 0xe1e, 0xe24, 0x3b, 0xe28, 0x3b, 0xe2a, 0xf42, 0xf5f,
+0xf60, 0xf0b, 0xf49, 0xf72, 0xf0b, 0xf58, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b,
+0xf5f, 0xfb3, 0xf0b, 0xf56, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf58, 0xf72,
+0xf42, 0xf0b, 0xf51, 0xf58, 0xf62, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf63,
+0xfb7, 0xf42, 0xf0b, 0xf54, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf55, 0xf74,
+0xf62, 0xf0b, 0xf56, 0xf74, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf54, 0xf0b,
+0xf66, 0xf44, 0xf66, 0xf0b, 0x3b, 0xf42, 0xf5f, 0xf60, 0xf0b, 0xf66, 0xfa4, 0xf7a,
+0xf53, 0xf0b, 0xf54, 0xf0b, 0xf49, 0xf72, 0xf0b, 0xf58, 0xf0b, 0x3b, 0xf5f, 0xfb3,
+0xf0b, 0xf56, 0xf0b, 0x3b, 0xf58, 0xf72, 0xf42, 0xf0b, 0xf51, 0xf58, 0xf62, 0xf0b,
+0x3b, 0xf63, 0xfb7, 0xf42, 0xf0b, 0xf54, 0xf0b, 0x3b, 0xf55, 0xf74, 0xf62, 0xf0b,
+0xf56, 0xf74, 0xf0b, 0x3b, 0xf54, 0xf0b, 0xf66, 0xf44, 0xf66, 0xf0b, 0x3b, 0xf66,
+0xfa4, 0xf7a, 0xf53, 0xf0b, 0xf54, 0xf0b, 0xf49, 0xf72, 0x3b, 0xf5f, 0xfb3, 0x3b,
+0xf58, 0xf72, 0xf42, 0x3b, 0xf63, 0xfb7, 0xf42, 0x3b, 0xf55, 0xf74, 0xf62, 0x3b,
+0xf66, 0xf44, 0xf66, 0x3b, 0xf66, 0xfa4, 0xf7a, 0xf53, 0x1230, 0x1295, 0x1260, 0x1275,
+0x20, 0x12d3, 0x1263, 0x12ed, 0x3b, 0x1230, 0x1296, 0x3b, 0x1273, 0x120b, 0x1238, 0x1296,
+0x3b, 0x12a3, 0x1228, 0x122d, 0x1263, 0x12d3, 0x3b, 0x12a8, 0x121a, 0x123d, 0x3b, 0x1305,
+0x121d, 0x12d3, 0x1275, 0x3b, 0x1230, 0x1295, 0x1260, 0x1275, 0x20, 0x1295, 0x12a2, 0x123d,
+0x1230, 0x2f, 0x12d3, 0x3b, 0x1230, 0x1296, 0x3b, 0x1273, 0x120b, 0x1238, 0x3b, 0x12a3,
+0x1228, 0x122d, 0x3b, 0x12a8, 0x121a, 0x123d, 0x3b, 0x1305, 0x121d, 0x12d3, 0x3b, 0x1230,
+0x2f, 0x1295, 0x1230, 0x3b, 0x1230, 0x3b, 0x1273, 0x3b, 0x12a3, 0x3b, 0x12a8, 0x3b,
+0x1305, 0x3b, 0x1230, 0x1230, 0x1295, 0x1260, 0x1275, 0x3b, 0x1230, 0x1291, 0x12ed, 0x3b,
+0x1230, 0x1209, 0x1235, 0x3b, 0x1228, 0x1261, 0x12d5, 0x3b, 0x1213, 0x1219, 0x1235, 0x3b,
+0x12d3, 0x122d, 0x1262, 0x3b, 0x1240, 0x12f3, 0x121d, 0x1230, 0x1295, 0x3b, 0x1230, 0x1291,
+0x3b, 0x1230, 0x1209, 0x3b, 0x1228, 0x1261, 0x3b, 0x1213, 0x1219, 0x3b, 0x12d3, 0x122d,
+0x3b, 0x1240, 0x12f3, 0x1230, 0x3b, 0x1230, 0x3b, 0x1230, 0x3b, 0x1228, 0x3b, 0x1213,
+0x3b, 0x12d3, 0x3b, 0x1240, 0x53, 0x61, 0x6e, 0x64, 0x65, 0x3b, 0x4d, 0x61,
+0x6e, 0x64, 0x65, 0x3b, 0x54, 0x75, 0x6e, 0x64, 0x65, 0x3b, 0x54, 0x72,
+0x69, 0x6e, 0x64, 0x65, 0x3b, 0x46, 0x6f, 0x6e, 0x64, 0x65, 0x3b, 0x46,
+0x72, 0x61, 0x69, 0x64, 0x65, 0x3b, 0x53, 0x61, 0x72, 0x65, 0x72, 0x65,
+0x53, 0x61, 0x6e, 0x3b, 0x4d, 0x61, 0x6e, 0x3b, 0x54, 0x75, 0x6e, 0x3b,
+0x54, 0x72, 0x69, 0x3b, 0x46, 0x6f, 0x6e, 0x3b, 0x46, 0x72, 0x61, 0x3b,
+0x53, 0x61, 0x72, 0x53, 0x101, 0x70, 0x61, 0x74, 0x65, 0x3b, 0x4d, 0x14d,
+0x6e, 0x69, 0x74, 0x65, 0x3b, 0x54, 0x16b, 0x73, 0x69, 0x74, 0x65, 0x3b,
+0x50, 0x75, 0x6c, 0x65, 0x6c, 0x75, 0x6c, 0x75, 0x3b, 0x54, 0x75, 0x2bb,
+0x61, 0x70, 0x75, 0x6c, 0x65, 0x6c, 0x75, 0x6c, 0x75, 0x3b, 0x46, 0x61,
+0x6c, 0x61, 0x69, 0x74, 0x65, 0x3b, 0x54, 0x6f, 0x6b, 0x6f, 0x6e, 0x61,
+0x6b, 0x69, 0x53, 0x101, 0x70, 0x3b, 0x4d, 0x14d, 0x6e, 0x3b, 0x54, 0x16b,
+0x73, 0x3b, 0x50, 0x75, 0x6c, 0x3b, 0x54, 0x75, 0x2bb, 0x61, 0x3b, 0x46,
+0x61, 0x6c, 0x3b, 0x54, 0x6f, 0x6b, 0x53, 0x3b, 0x4d, 0x3b, 0x54, 0x3b,
+0x50, 0x3b, 0x54, 0x3b, 0x46, 0x3b, 0x54, 0x53, 0x6f, 0x6e, 0x74, 0x61,
+0x3b, 0x4d, 0x75, 0x73, 0x75, 0x6d, 0x62, 0x68, 0x75, 0x6e, 0x75, 0x6b,
+0x75, 0x3b, 0x52, 0x61, 0x76, 0x75, 0x6d, 0x62, 0x69, 0x72, 0x68, 0x69,
+0x3b, 0x52, 0x61, 0x76, 0x75, 0x6e, 0x68, 0x61, 0x72, 0x68, 0x75, 0x3b,
+0x52, 0x61, 0x76, 0x75, 0x6d, 0x75, 0x6e, 0x65, 0x3b, 0x52, 0x61, 0x76,
+0x75, 0x6e, 0x74, 0x6c, 0x68, 0x61, 0x6e, 0x75, 0x3b, 0x4d, 0x75, 0x67,
+0x71, 0x69, 0x76, 0x65, 0x6c, 0x61, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x75,
+0x73, 0x3b, 0x42, 0x69, 0x72, 0x3b, 0x48, 0x61, 0x72, 0x3b, 0x4e, 0x65,
+0x3b, 0x54, 0x6c, 0x68, 0x3b, 0x4d, 0x75, 0x67, 0x54, 0x73, 0x68, 0x69,
+0x70, 0x69, 0x3b, 0x4d, 0x6f, 0x73, 0x6f, 0x70, 0x75, 0x6c, 0x6f, 0x67,
+0x6f, 0x3b, 0x4c, 0x61, 0x62, 0x6f, 0x62, 0x65, 0x64, 0x69, 0x3b, 0x4c,
+0x61, 0x62, 0x6f, 0x72, 0x61, 0x72, 0x6f, 0x3b, 0x4c, 0x61, 0x62, 0x6f,
+0x6e, 0x65, 0x3b, 0x4c, 0x61, 0x62, 0x6f, 0x74, 0x6c, 0x68, 0x61, 0x6e,
+0x6f, 0x3b, 0x4d, 0x61, 0x74, 0x6c, 0x68, 0x61, 0x74, 0x73, 0x6f, 0x54,
+0x73, 0x68, 0x3b, 0x4d, 0x6f, 0x73, 0x3b, 0x4c, 0x61, 0x62, 0x62, 0x3b,
+0x4c, 0x61, 0x62, 0x72, 0x3b, 0x4c, 0x61, 0x62, 0x6e, 0x3b, 0x4c, 0x61,
+0x62, 0x74, 0x3b, 0x4d, 0x61, 0x74, 0x50, 0x61, 0x7a, 0x61, 0x72, 0x3b,
+0x50, 0x61, 0x7a, 0x61, 0x72, 0x74, 0x65, 0x73, 0x69, 0x3b, 0x53, 0x61,
+0x6c, 0x131, 0x3b, 0xc7, 0x61, 0x72, 0x15f, 0x61, 0x6d, 0x62, 0x61, 0x3b,
+0x50, 0x65, 0x72, 0x15f, 0x65, 0x6d, 0x62, 0x65, 0x3b, 0x43, 0x75, 0x6d,
+0x61, 0x3b, 0x43, 0x75, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x69, 0x50,
+0x61, 0x7a, 0x3b, 0x50, 0x7a, 0x74, 0x3b, 0x53, 0x61, 0x6c, 0x3b, 0xc7,
+0x61, 0x72, 0x3b, 0x50, 0x65, 0x72, 0x3b, 0x43, 0x75, 0x6d, 0x3b, 0x43,
+0x6d, 0x74, 0x50, 0x3b, 0x50, 0x3b, 0x53, 0x3b, 0xc7, 0x3b, 0x50, 0x3b,
+0x43, 0x3b, 0x43, 0xdd, 0x65, 0x6b, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b,
+0x44, 0x75, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x53, 0x69, 0x15f, 0x65,
+0x6e, 0x62, 0x65, 0x3b, 0xc7, 0x61, 0x72, 0x15f, 0x65, 0x6e, 0x62, 0x65,
+0x3b, 0x50, 0x65, 0x6e, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x41, 0x6e,
+0x6e, 0x61, 0x3b, 0x15e, 0x65, 0x6e, 0x62, 0x65, 0xfd, 0x65, 0x6b, 0x15f,
+0x65, 0x6e, 0x62, 0x65, 0x3b, 0x64, 0x75, 0x15f, 0x65, 0x6e, 0x62, 0x65,
+0x3b, 0x73, 0x69, 0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0xe7, 0x61, 0x72,
+0x15f, 0x65, 0x6e, 0x62, 0x65, 0x3b, 0x70, 0x65, 0x6e, 0x15f, 0x65, 0x6e,
+0x62, 0x65, 0x3b, 0x61, 0x6e, 0x6e, 0x61, 0x3b, 0x15f, 0x65, 0x6e, 0x62,
+0x65, 0xdd, 0x65, 0x6b, 0x3b, 0x44, 0x75, 0x15f, 0x3b, 0x53, 0x69, 0x15f,
+0x3b, 0xc7, 0x61, 0x72, 0x3b, 0x50, 0x65, 0x6e, 0x3b, 0x41, 0x6e, 0x6e,
+0x3b, 0x15e, 0x65, 0x6e, 0xfd, 0x65, 0x6b, 0x3b, 0x64, 0x75, 0x15f, 0x3b,
+0x73, 0x69, 0x15f, 0x3b, 0xe7, 0x61, 0x72, 0x3b, 0x70, 0x65, 0x6e, 0x3b,
+0x61, 0x6e, 0x6e, 0x3b, 0x15f, 0x65, 0x6e, 0xdd, 0x3b, 0x44, 0x3b, 0x53,
+0x3b, 0xc7, 0x3b, 0x50, 0x3b, 0x41, 0x3b, 0x15e, 0x4c, 0x61, 0x64, 0x69,
+0x3b, 0x54, 0x61, 0x6e, 0x69, 0x69, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x74,
+0x61, 0x3b, 0x4c, 0x61, 0x72, 0x62, 0x61, 0x3b, 0x4c, 0x61, 0x6d, 0x69,
+0x74, 0x3b, 0x4a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x61, 0x62, 0x61,
+0x74, 0x4c, 0x61, 0x64, 0x3b, 0x54, 0x61, 0x6e, 0x3b, 0x54, 0x61, 0x6c,
+0x3b, 0x4c, 0x61, 0x72, 0x3b, 0x4c, 0x61, 0x6d, 0x3b, 0x4a, 0x75, 0x6d,
+0x3b, 0x41, 0x73, 0x61, 0x43d, 0x435, 0x434, 0x456, 0x43b, 0x44f, 0x3b, 0x43f,
+0x43e, 0x43d, 0x435, 0x434, 0x456, 0x43b, 0x43e, 0x43a, 0x3b, 0x432, 0x456, 0x432,
+0x442, 0x43e, 0x440, 0x43e, 0x43a, 0x3b, 0x441, 0x435, 0x440, 0x435, 0x434, 0x430,
+0x3b, 0x447, 0x435, 0x442, 0x432, 0x435, 0x440, 0x3b, 0x43f, 0x2bc, 0x44f, 0x442,
+0x43d, 0x438, 0x446, 0x44f, 0x3b, 0x441, 0x443, 0x431, 0x43e, 0x442, 0x430, 0x43d,
+0x435, 0x434, 0x456, 0x43b, 0x44e, 0x3b, 0x43f, 0x43e, 0x43d, 0x435, 0x434, 0x456,
+0x43b, 0x43e, 0x43a, 0x3b, 0x432, 0x456, 0x432, 0x442, 0x43e, 0x440, 0x43e, 0x43a,
+0x3b, 0x441, 0x435, 0x440, 0x435, 0x434, 0x443, 0x3b, 0x447, 0x435, 0x442, 0x432,
+0x435, 0x440, 0x3b, 0x43f, 0x2bc, 0x44f, 0x442, 0x43d, 0x438, 0x446, 0x44e, 0x3b,
+0x441, 0x443, 0x431, 0x43e, 0x442, 0x443, 0x6e, 0x6a, 0x65, 0x64, 0x17a, 0x65,
+0x6c, 0x61, 0x3b, 0x70, 0xf3, 0x6e, 0x64, 0x17a, 0x65, 0x6c, 0x61, 0x3b,
+0x77, 0x75, 0x74, 0x6f, 0x72, 0x61, 0x3b, 0x73, 0x72, 0x6a, 0x65, 0x64,
+0x61, 0x3b, 0x161, 0x74, 0x77, 0xf3, 0x72, 0x74, 0x6b, 0x3b, 0x70, 0x6a,
+0x61, 0x74, 0x6b, 0x3b, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x6e, 0x6a,
+0x65, 0x3b, 0x70, 0xf3, 0x6e, 0x3b, 0x77, 0x75, 0x74, 0x3b, 0x73, 0x72,
+0x6a, 0x3b, 0x161, 0x74, 0x77, 0x3b, 0x70, 0x6a, 0x61, 0x3b, 0x73, 0x6f,
+0x62, 0x6e, 0x3b, 0x70, 0x3b, 0x77, 0x3b, 0x73, 0x3b, 0x161, 0x3b, 0x70,
+0x3b, 0x73, 0x627, 0x62a, 0x648, 0x627, 0x631, 0x3b, 0x67e, 0x6cc, 0x631, 0x3b,
+0x645, 0x646, 0x6af, 0x644, 0x3b, 0x628, 0x62f, 0x6be, 0x3b, 0x62c, 0x645, 0x639,
+0x631, 0x627, 0x62a, 0x3b, 0x62c, 0x645, 0x639, 0x6c1, 0x3b, 0x6c1, 0x641, 0x62a,
+0x6c1, 0x64a, 0x6d5, 0x643, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x62f, 0x6c8,
+0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x633, 0x6d5, 0x64a, 0x634, 0x6d5, 0x646,
+0x628, 0x6d5, 0x3b, 0x686, 0x627, 0x631, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b,
+0x67e, 0x6d5, 0x64a, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x3b, 0x62c, 0x6c8, 0x645,
+0x6d5, 0x3b, 0x634, 0x6d5, 0x646, 0x628, 0x6d5, 0x64a, 0x6d5, 0x3b, 0x62f, 0x6c8,
+0x3b, 0x633, 0x6d5, 0x3b, 0x686, 0x627, 0x3b, 0x67e, 0x6d5, 0x3b, 0x62c, 0x6c8,
+0x3b, 0x634, 0x6d5, 0x64a, 0x3b, 0x62f, 0x3b, 0x633, 0x3b, 0x686, 0x3b, 0x67e,
+0x3b, 0x62c, 0x3b, 0x634, 0x79, 0x61, 0x6b, 0x73, 0x68, 0x61, 0x6e, 0x62,
+0x61, 0x3b, 0x64, 0x75, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x3b, 0x73,
+0x65, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x3b, 0x63, 0x68, 0x6f, 0x72,
+0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x3b, 0x70, 0x61, 0x79, 0x73, 0x68,
+0x61, 0x6e, 0x62, 0x61, 0x3b, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x73, 0x68,
+0x61, 0x6e, 0x62, 0x61, 0x59, 0x61, 0x6b, 0x3b, 0x44, 0x75, 0x73, 0x68,
+0x3b, 0x53, 0x65, 0x73, 0x68, 0x3b, 0x43, 0x68, 0x6f, 0x72, 0x3b, 0x50,
+0x61, 0x79, 0x3b, 0x4a, 0x75, 0x6d, 0x3b, 0x53, 0x68, 0x61, 0x6e, 0x59,
+0x3b, 0x44, 0x3b, 0x53, 0x3b, 0x43, 0x3b, 0x50, 0x3b, 0x4a, 0x3b, 0x53,
+0x6cc, 0x2e, 0x3b, 0x62f, 0x2e, 0x3b, 0x633, 0x2e, 0x3b, 0x686, 0x2e, 0x3b,
+0x67e, 0x2e, 0x3b, 0x62c, 0x2e, 0x3b, 0x634, 0x2e, 0x44f, 0x43a, 0x448, 0x430,
+0x43d, 0x431, 0x430, 0x3b, 0x434, 0x443, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x3b,
+0x441, 0x435, 0x448, 0x430, 0x43d, 0x431, 0x430, 0x3b, 0x447, 0x43e, 0x440, 0x448,
+0x430, 0x43d, 0x431, 0x430, 0x3b, 0x43f, 0x430, 0x439, 0x448, 0x430, 0x43d, 0x431,
+0x430, 0x3b, 0x436, 0x443, 0x43c, 0x430, 0x3b, 0x448, 0x430, 0x43d, 0x431, 0x430,
+0x44f, 0x43a, 0x448, 0x3b, 0x434, 0x443, 0x448, 0x3b, 0x441, 0x435, 0x448, 0x3b,
+0x447, 0x43e, 0x440, 0x3b, 0x43f, 0x430, 0x439, 0x3b, 0x436, 0x443, 0x43c, 0x3b,
+0x448, 0x430, 0x43d, 0x42f, 0x3b, 0x414, 0x3b, 0x421, 0x3b, 0x427, 0x3b, 0x41f,
+0x3b, 0x416, 0x3b, 0x428, 0xa55e, 0xa54c, 0xa535, 0x3b, 0xa5f3, 0xa5e1, 0xa609, 0x3b,
+0xa55a, 0xa55e, 0xa55a, 0x3b, 0xa549, 0xa55e, 0xa552, 0x3b, 0xa549, 0xa524, 0xa546, 0xa562,
+0x3b, 0xa549, 0xa524, 0xa540, 0xa56e, 0x3b, 0xa53b, 0xa52c, 0xa533, 0x6c, 0x61, 0x68,
+0x61, 0x64, 0x69, 0x3b, 0x74, 0x25b, 0x25b, 0x6e, 0x25b, 0x25b, 0x3b, 0x74,
+0x61, 0x6c, 0x61, 0x74, 0x61, 0x3b, 0x61, 0x6c, 0x61, 0x62, 0x61, 0x3b,
+0x61, 0x69, 0x6d, 0x69, 0x73, 0x61, 0x3b, 0x61, 0x69, 0x6a, 0x69, 0x6d,
+0x61, 0x3b, 0x73, 0x69, 0x253, 0x69, 0x74, 0x69, 0x53, 0x77, 0x6f, 0x6e,
+0x64, 0x61, 0x68, 0x61, 0x3b, 0x4d, 0x75, 0x73, 0x75, 0x6d, 0x62, 0x75,
+0x6c, 0x75, 0x77, 0x6f, 0x3b, 0x1e3c, 0x61, 0x76, 0x68, 0x75, 0x76, 0x68,
+0x69, 0x6c, 0x69, 0x3b, 0x1e3c, 0x61, 0x76, 0x68, 0x75, 0x72, 0x61, 0x72,
+0x75, 0x3b, 0x1e3c, 0x61, 0x76, 0x68, 0x75, 0x1e4b, 0x61, 0x3b, 0x1e3c, 0x61,
+0x76, 0x68, 0x75, 0x1e71, 0x61, 0x6e, 0x75, 0x3b, 0x4d, 0x75, 0x67, 0x69,
+0x76, 0x68, 0x65, 0x6c, 0x61, 0x53, 0x77, 0x6f, 0x3b, 0x4d, 0x75, 0x73,
+0x3b, 0x56, 0x68, 0x69, 0x3b, 0x52, 0x61, 0x72, 0x3b, 0x1e4a, 0x61, 0x3b,
+0x1e70, 0x61, 0x6e, 0x3b, 0x4d, 0x75, 0x67, 0x43, 0x68, 0x1ee7, 0x20, 0x4e,
+0x68, 0x1ead, 0x74, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x48, 0x61, 0x69, 0x3b,
+0x54, 0x68, 0x1ee9, 0x20, 0x42, 0x61, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x54,
+0x1b0, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x4e, 0x103, 0x6d, 0x3b, 0x54, 0x68,
+0x1ee9, 0x20, 0x53, 0xe1, 0x75, 0x3b, 0x54, 0x68, 0x1ee9, 0x20, 0x42, 0x1ea3,
+0x79, 0x43, 0x4e, 0x3b, 0x54, 0x68, 0x20, 0x32, 0x3b, 0x54, 0x68, 0x20,
+0x33, 0x3b, 0x54, 0x68, 0x20, 0x34, 0x3b, 0x54, 0x68, 0x20, 0x35, 0x3b,
+0x54, 0x68, 0x20, 0x36, 0x3b, 0x54, 0x68, 0x20, 0x37, 0x43, 0x4e, 0x3b,
+0x54, 0x32, 0x3b, 0x54, 0x33, 0x3b, 0x54, 0x34, 0x3b, 0x54, 0x35, 0x3b,
+0x54, 0x36, 0x3b, 0x54, 0x37, 0x73, 0x75, 0x64, 0x65, 0x6c, 0x3b, 0x6d,
+0x75, 0x64, 0x65, 0x6c, 0x3b, 0x74, 0x75, 0x64, 0x65, 0x6c, 0x3b, 0x76,
+0x65, 0x64, 0x65, 0x6c, 0x3b, 0x64, 0xf6, 0x64, 0x65, 0x6c, 0x3b, 0x66,
+0x72, 0x69, 0x64, 0x65, 0x6c, 0x3b, 0x7a, 0xe4, 0x64, 0x65, 0x6c, 0x53,
+0x75, 0x3b, 0x4d, 0x75, 0x3b, 0x54, 0x75, 0x3b, 0x56, 0x65, 0x3b, 0x44,
+0xf6, 0x3b, 0x46, 0x72, 0x3b, 0x5a, 0xe4, 0x73, 0x75, 0x2e, 0x3b, 0x6d,
+0x75, 0x2e, 0x3b, 0x74, 0x75, 0x2e, 0x3b, 0x76, 0x65, 0x2e, 0x3b, 0x64,
+0xf6, 0x2e, 0x3b, 0x66, 0x72, 0x2e, 0x3b, 0x7a, 0xe4, 0x2e, 0x53, 0x3b,
+0x4d, 0x3b, 0x54, 0x3b, 0x56, 0x3b, 0x44, 0x3b, 0x46, 0x3b, 0x5a, 0x53,
+0x75, 0x6e, 0x6e, 0x74, 0x61, 0x67, 0x3b, 0x4d, 0xe4, 0x6e, 0x74, 0x61,
+0x67, 0x3b, 0x5a, 0x69, 0x161, 0x74, 0x61, 0x67, 0x3b, 0x4d, 0x69, 0x74,
+0x74, 0x77, 0x75, 0x10d, 0x3b, 0x46, 0x72, 0xf3, 0x6e, 0x74, 0x61, 0x67,
+0x3b, 0x46, 0x72, 0x69, 0x74, 0x61, 0x67, 0x3b, 0x53, 0x61, 0x6d, 0x161,
+0x74, 0x61, 0x67, 0x53, 0x75, 0x6e, 0x3b, 0x4d, 0xe4, 0x6e, 0x3b, 0x5a,
+0x69, 0x161, 0x3b, 0x4d, 0x69, 0x74, 0x3b, 0x46, 0x72, 0xf3, 0x3b, 0x46,
+0x72, 0x69, 0x3b, 0x53, 0x61, 0x6d, 0x53, 0x3b, 0x4d, 0x3b, 0x5a, 0x3b,
+0x4d, 0x3b, 0x46, 0x3b, 0x46, 0x3b, 0x53, 0x44, 0x79, 0x64, 0x64, 0x20,
+0x53, 0x75, 0x6c, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x4c, 0x6c, 0x75,
+0x6e, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x4d, 0x61, 0x77, 0x72, 0x74,
+0x68, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x4d, 0x65, 0x72, 0x63, 0x68,
+0x65, 0x72, 0x3b, 0x44, 0x79, 0x64, 0x64, 0x20, 0x49, 0x61, 0x75, 0x3b,
+0x44, 0x79, 0x64, 0x64, 0x20, 0x47, 0x77, 0x65, 0x6e, 0x65, 0x72, 0x3b,
+0x44, 0x79, 0x64, 0x64, 0x20, 0x53, 0x61, 0x64, 0x77, 0x72, 0x6e, 0x53,
+0x75, 0x6c, 0x3b, 0x4c, 0x6c, 0x75, 0x6e, 0x3b, 0x4d, 0x61, 0x77, 0x3b,
+0x4d, 0x65, 0x72, 0x3b, 0x49, 0x61, 0x75, 0x3b, 0x47, 0x77, 0x65, 0x3b,
+0x53, 0x61, 0x64, 0x53, 0x75, 0x6c, 0x3b, 0x4c, 0x6c, 0x75, 0x6e, 0x3b,
+0x4d, 0x61, 0x77, 0x3b, 0x4d, 0x65, 0x72, 0x3b, 0x49, 0x61, 0x75, 0x3b,
+0x47, 0x77, 0x65, 0x6e, 0x3b, 0x53, 0x61, 0x64, 0x53, 0x3b, 0x4c, 0x6c,
+0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x49, 0x3b, 0x47, 0x3b, 0x53, 0x73, 0x6e,
+0x65, 0x69, 0x6e, 0x3b, 0x6d, 0x6f, 0x61, 0x6e, 0x64, 0x65, 0x69, 0x3b,
+0x74, 0x69, 0x69, 0x73, 0x64, 0x65, 0x69, 0x3b, 0x77, 0x6f, 0x61, 0x6e,
+0x73, 0x64, 0x65, 0x69, 0x3b, 0x74, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x73,
+0x64, 0x65, 0x69, 0x3b, 0x66, 0x72, 0x65, 0x65, 0x64, 0x3b, 0x73, 0x6e,
+0x65, 0x6f, 0x6e, 0x73, 0x69, 0x3b, 0x6d, 0x6f, 0x3b, 0x74, 0x69, 0x3b,
+0x77, 0x6f, 0x3b, 0x74, 0x6f, 0x3b, 0x66, 0x72, 0x3b, 0x73, 0x6f, 0x12c8,
+0x130b, 0x3b, 0x1233, 0x12ed, 0x1296, 0x3b, 0x121b, 0x1246, 0x1233, 0x129b, 0x3b, 0x12a0,
+0x1229, 0x12cb, 0x3b, 0x1203, 0x1219, 0x1233, 0x3b, 0x12a0, 0x122d, 0x1263, 0x3b, 0x1244,
+0x122b, 0x12c8, 0x3b, 0x1233, 0x3b, 0x121b, 0x3b, 0x12a0, 0x3b, 0x1203, 0x3b, 0x12a0,
+0x3b, 0x1244, 0x44, 0x69, 0x62, 0xe9, 0x65, 0x72, 0x3b, 0x41, 0x6c, 0x74,
+0x69, 0x6e, 0x65, 0x3b, 0x54, 0x61, 0x6c, 0x61, 0x61, 0x74, 0x61, 0x3b,
+0xc0, 0x6c, 0x61, 0x72, 0x62, 0x61, 0x3b, 0x41, 0x6c, 0x78, 0x61, 0x6d,
+0x69, 0x73, 0x3b, 0xc0, 0x6a, 0x6a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73,
+0x65, 0x65, 0x72, 0x44, 0x69, 0x62, 0x3b, 0x41, 0x6c, 0x74, 0x3b, 0x54,
+0x61, 0x6c, 0x3b, 0xc0, 0x6c, 0x61, 0x3b, 0x41, 0x6c, 0x78, 0x3b, 0xc0,
+0x6a, 0x6a, 0x3b, 0x41, 0x73, 0x65, 0x43, 0x61, 0x77, 0x65, 0x3b, 0x4d,
+0x76, 0x75, 0x6c, 0x6f, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x62, 0x69,
+0x6e, 0x69, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x74, 0x68, 0x61, 0x74,
+0x68, 0x75, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x6e, 0x65, 0x3b, 0x4c,
+0x77, 0x65, 0x73, 0x69, 0x68, 0x6c, 0x61, 0x6e, 0x75, 0x3b, 0x4d, 0x67,
+0x71, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x43, 0x61, 0x77, 0x3b, 0x4d, 0x76,
+0x75, 0x3b, 0x42, 0x69, 0x6e, 0x3b, 0x54, 0x68, 0x61, 0x3b, 0x53, 0x69,
+0x6e, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d, 0x67, 0x71, 0x43, 0x61, 0x77,
+0x3b, 0x4d, 0x76, 0x75, 0x3b, 0x4c, 0x77, 0x65, 0x73, 0x62, 0x3b, 0x54,
+0x68, 0x61, 0x3b, 0x53, 0x69, 0x6e, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d,
+0x67, 0x71, 0x43, 0x3b, 0x4d, 0x3b, 0x53, 0x62, 0x3b, 0x53, 0x74, 0x3b,
+0x53, 0x69, 0x6e, 0x3b, 0x48, 0x6c, 0x3b, 0x4d, 0x67, 0x71, 0x43, 0x3b,
+0x4d, 0x3b, 0x53, 0x62, 0x3b, 0x54, 0x68, 0x74, 0x3b, 0x53, 0x69, 0x6e,
+0x3b, 0x48, 0x6c, 0x3b, 0x4d, 0x67, 0x71, 0x73, 0x254, 0x301, 0x6e, 0x64,
+0x69, 0x25b, 0x3b, 0x6d, 0xf3, 0x6e, 0x64, 0x69, 0x65, 0x3b, 0x6d, 0x75,
+0xe1, 0x6e, 0x79, 0xe1, 0x14b, 0x6d, 0xf3, 0x6e, 0x64, 0x69, 0x65, 0x3b,
+0x6d, 0x65, 0x74, 0xfa, 0x6b, 0x70, 0xed, 0xe1, 0x70, 0x25b, 0x3b, 0x6b,
+0xfa, 0x70, 0xe9, 0x6c, 0x69, 0x6d, 0x65, 0x74, 0xfa, 0x6b, 0x70, 0x69,
+0x61, 0x70, 0x25b, 0x3b, 0x66, 0x65, 0x6c, 0xe9, 0x74, 0x65, 0x3b, 0x73,
+0xe9, 0x73, 0x65, 0x6c, 0xe9, 0x73, 0x64, 0x3b, 0x6d, 0x64, 0x3b, 0x6d,
+0x77, 0x3b, 0x65, 0x74, 0x3b, 0x6b, 0x6c, 0x3b, 0x66, 0x6c, 0x3b, 0x73,
+0x73, 0x73, 0x3b, 0x6d, 0x3b, 0x6d, 0x3b, 0x65, 0x3b, 0x6b, 0x3b, 0x66,
+0x3b, 0x73, 0x5d6, 0x5d5, 0x5e0, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5de, 0x5d0, 0x5b8,
+0x5e0, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5d3, 0x5d9, 0x5e0, 0x5e1, 0x5d8, 0x5d9, 0x5e7,
+0x3b, 0x5de, 0x5d9, 0x5d8, 0x5d5, 0x5d5, 0x5d0, 0x5da, 0x3b, 0x5d3, 0x5d0, 0x5e0,
+0x5e2, 0x5e8, 0x5e9, 0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5e4, 0x5bf, 0x5e8, 0x5f2, 0x5b7,
+0x5d8, 0x5d9, 0x5e7, 0x3b, 0x5e9, 0x5d1, 0x5ea, 0xc0, 0xec, 0x6b, 0xfa, 0x3b,
+0x41, 0x6a, 0xe9, 0x3b, 0xcc, 0x73, 0x1eb9, 0x301, 0x67, 0x75, 0x6e, 0x3b,
+0x1ecc, 0x6a, 0x1ecd, 0x301, 0x72, 0xfa, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x62,
+0x1ecd, 0x3b, 0x1eb8, 0x74, 0xec, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0x1eb9, 0x301,
+0x74, 0x61, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0xc0, 0xec, 0x6b, 0xfa, 0x3b,
+0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0x41, 0x6a, 0xe9, 0x3b, 0x1ecc, 0x6a, 0x1ecd,
+0x301, 0x20, 0xcc, 0x73, 0x1eb9, 0x301, 0x67, 0x75, 0x6e, 0x3b, 0x1ecc, 0x6a,
+0x1ecd, 0x301, 0x72, 0xfa, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x62, 0x1ecd, 0x3b,
+0x1ecc, 0x6a, 0x1ecd, 0x301, 0x20, 0x1eb8, 0x74, 0xec, 0x3b, 0x1ecc, 0x6a, 0x1ecd,
+0x301, 0x20, 0xc0, 0x62, 0xe1, 0x6d, 0x1eb9, 0x301, 0x74, 0x61, 0xc0, 0xec,
+0x6b, 0x3b, 0x41, 0x6a, 0x3b, 0xcc, 0x73, 0x1eb9, 0x301, 0x67, 0x3b, 0x1ecc,
+0x6a, 0x1ecd, 0x301, 0x72, 0x3b, 0x1ecc, 0x6a, 0x1ecd, 0x301, 0x62, 0x3b, 0x1eb8,
+0x74, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0xc0, 0x3b, 0x41, 0x3b, 0xcc, 0x3b,
+0x1ecc, 0x3b, 0x1ecc, 0x3b, 0x1eb8, 0x3b, 0xc0, 0xc0, 0xec, 0x6b, 0xfa, 0x3b,
+0x41, 0x6a, 0xe9, 0x3b, 0xcc, 0x73, 0x25b, 0x301, 0x67, 0x75, 0x6e, 0x3b,
+0x186, 0x6a, 0x254, 0x301, 0x72, 0xfa, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x62,
+0x254, 0x3b, 0x190, 0x74, 0xec, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0x25b, 0x301,
+0x74, 0x61, 0x186, 0x6a, 0x254, 0x301, 0x20, 0xc0, 0xec, 0x6b, 0xfa, 0x3b,
+0x186, 0x6a, 0x254, 0x301, 0x20, 0x41, 0x6a, 0xe9, 0x3b, 0x186, 0x6a, 0x254,
+0x301, 0x20, 0xcc, 0x73, 0x25b, 0x301, 0x67, 0x75, 0x6e, 0x3b, 0x186, 0x6a,
+0x254, 0x301, 0x72, 0xfa, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x62, 0x254, 0x3b,
+0x186, 0x6a, 0x254, 0x301, 0x20, 0x190, 0x74, 0xec, 0x3b, 0x186, 0x6a, 0x254,
+0x301, 0x20, 0xc0, 0x62, 0xe1, 0x6d, 0x25b, 0x301, 0x74, 0x61, 0xc0, 0xec,
+0x6b, 0x3b, 0x41, 0x6a, 0x3b, 0xcc, 0x73, 0x25b, 0x301, 0x67, 0x3b, 0x186,
+0x6a, 0x254, 0x301, 0x72, 0x3b, 0x186, 0x6a, 0x254, 0x301, 0x62, 0x3b, 0x190,
+0x74, 0x3b, 0xc0, 0x62, 0xe1, 0x6d, 0xc0, 0x3b, 0x41, 0x3b, 0xcc, 0x3b,
+0x186, 0x3b, 0x186, 0x3b, 0x190, 0x3b, 0xc0, 0x41, 0x6c, 0x68, 0x61, 0x64,
+0x69, 0x3b, 0x41, 0x74, 0x69, 0x6e, 0x6e, 0x69, 0x3b, 0x41, 0x74, 0x61,
+0x6c, 0x61, 0x61, 0x74, 0x61, 0x3b, 0x41, 0x6c, 0x61, 0x72, 0x62, 0x61,
+0x3b, 0x41, 0x6c, 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x3b, 0x41, 0x6c,
+0x7a, 0x75, 0x6d, 0x61, 0x3b, 0x41, 0x73, 0x69, 0x62, 0x74, 0x69, 0x48,
+0x3b, 0x54, 0x3b, 0x54, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x5a, 0x3b, 0x53,
+0x6e, 0x67, 0x6f, 0x65, 0x6e, 0x7a, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67,
+0x69, 0x7a, 0x3b, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67, 0x69, 0x7a, 0x69,
+0x74, 0x3b, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67, 0x69, 0x7a, 0x6e, 0x67,
+0x65, 0x69, 0x68, 0x3b, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67, 0x69, 0x7a,
+0x73, 0x61, 0x6d, 0x3b, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67, 0x69, 0x7a,
+0x73, 0x65, 0x69, 0x71, 0x3b, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67, 0x69,
+0x7a, 0x68, 0x61, 0x6a, 0x3b, 0x73, 0x69, 0x6e, 0x67, 0x68, 0x67, 0x69,
+0x7a, 0x72, 0x6f, 0x65, 0x6b, 0x49, 0x53, 0x6f, 0x6e, 0x74, 0x6f, 0x3b,
+0x55, 0x4d, 0x73, 0x6f, 0x6d, 0x62, 0x75, 0x6c, 0x75, 0x6b, 0x6f, 0x3b,
+0x55, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x3b, 0x55,
+0x4c, 0x77, 0x65, 0x73, 0x69, 0x74, 0x68, 0x61, 0x74, 0x68, 0x75, 0x3b,
+0x55, 0x4c, 0x77, 0x65, 0x73, 0x69, 0x6e, 0x65, 0x3b, 0x55, 0x4c, 0x77,
+0x65, 0x73, 0x69, 0x68, 0x6c, 0x61, 0x6e, 0x75, 0x3b, 0x55, 0x4d, 0x67,
+0x71, 0x69, 0x62, 0x65, 0x6c, 0x6f, 0x53, 0x6f, 0x6e, 0x3b, 0x4d, 0x73,
+0x6f, 0x3b, 0x42, 0x69, 0x6c, 0x3b, 0x54, 0x68, 0x61, 0x3b, 0x53, 0x69,
+0x6e, 0x3b, 0x48, 0x6c, 0x61, 0x3b, 0x4d, 0x67, 0x71, 0x53, 0x3b, 0x4d,
+0x3b, 0x42, 0x3b, 0x54, 0x3b, 0x53, 0x3b, 0x48, 0x3b, 0x4d, 0x6e, 0x75,
+0x6d, 0x129, 0x67, 0x67, 0x75, 0x3b, 0x70, 0x69, 0x72, 0x2d, 0x6b, 0x75,
+0x72, 0xe3, 0x2d, 0x68, 0xe1, 0x3b, 0x72, 0xe9, 0x67, 0x72, 0x65, 0x2d,
+0x6b, 0x75, 0x72, 0xe3, 0x2d, 0x68, 0xe1, 0x3b, 0x74, 0x1ebd, 0x67, 0x74,
+0x169, 0x2d, 0x6b, 0x75, 0x72, 0xe3, 0x2d, 0x68, 0xe1, 0x3b, 0x76, 0x1ebd,
+0x6e, 0x68, 0x6b, 0xe3, 0x67, 0x72, 0x61, 0x2d, 0x6b, 0x75, 0x72, 0xe3,
+0x2d, 0x68, 0xe1, 0x3b, 0x70, 0xe9, 0x6e, 0x6b, 0x61, 0x72, 0x2d, 0x6b,
+0x75, 0x72, 0xe3, 0x2d, 0x68, 0xe1, 0x3b, 0x73, 0x61, 0x76, 0x6e, 0x75,
+0x6e, 0x75, 0x6d, 0x2e, 0x3b, 0x70, 0x69, 0x72, 0x2e, 0x3b, 0x72, 0xe9,
+0x67, 0x2e, 0x3b, 0x74, 0x1ebd, 0x67, 0x2e, 0x3b, 0x76, 0x1ebd, 0x6e, 0x2e,
+0x3b, 0x70, 0xe9, 0x6e, 0x2e, 0x3b, 0x73, 0x61, 0x76, 0x2e, 0x4e, 0x2e,
+0x3b, 0x50, 0x2e, 0x3b, 0x52, 0x2e, 0x3b, 0x54, 0x2e, 0x3b, 0x56, 0x2e,
+0x3b, 0x50, 0x2e, 0x3b, 0x53, 0x2e, 0x6d, 0x69, 0x74, 0x75, 0xfa, 0x3b,
+0x6d, 0x75, 0x72, 0x61, 0x6b, 0x69, 0x70, 0xed, 0x3b, 0x6d, 0x75, 0x72,
+0x61, 0x6b, 0xed, 0x2d, 0x6d, 0x75, 0x6b, 0x169, 0x69, 0x3b, 0x6d, 0x75,
+0x72, 0x61, 0x6b, 0xed, 0x2d, 0x6d, 0x75, 0x73, 0x61, 0x70, 0xed, 0x72,
+0x69, 0x3b, 0x73, 0x75, 0x70, 0x61, 0x70, 0xe1, 0x3b, 0x79, 0x75, 0x6b,
+0x75, 0x61, 0x6b, 0xfa, 0x3b, 0x73, 0x61, 0x75, 0x72, 0xfa, 0x6d, 0x69,
+0x74, 0x3b, 0x6d, 0x75, 0x72, 0x3b, 0x6d, 0x6d, 0x6b, 0x3b, 0x6d, 0x6d,
+0x73, 0x3b, 0x73, 0x75, 0x70, 0x3b, 0x79, 0x75, 0x6b, 0x3b, 0x73, 0x61,
+0x75, 0x4d, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x53, 0x3b, 0x59,
+0x3b, 0x53, 0x910, 0x924, 0x935, 0x93e, 0x930, 0x3b, 0x938, 0x94b, 0x92e, 0x935,
+0x93e, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x935, 0x93e, 0x930, 0x3b, 0x92c,
+0x941, 0x927, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x943, 0x939, 0x938, 0x94d, 0x92a,
+0x924, 0x935, 0x93e, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x930, 0x935, 0x93e,
+0x930, 0x3b, 0x936, 0x928, 0x93f, 0x935, 0x93e, 0x930, 0x53, 0xf6, 0x6e, 0x64,
+0x61, 0x69, 0x3b, 0x4d, 0x75, 0x6e, 0x64, 0x61, 0x69, 0x3b, 0x54, 0x65,
+0x69, 0x73, 0x64, 0x61, 0x69, 0x3b, 0x57, 0x65, 0x65, 0x64, 0x65, 0x6e,
+0x73, 0x64, 0x61, 0x69, 0x3b, 0x54, 0xfc, 0xfc, 0x72, 0x73, 0x64, 0x61,
+0x69, 0x3b, 0x46, 0x72, 0x65, 0x69, 0x64, 0x61, 0x69, 0x3b, 0x53, 0x61,
+0x6e, 0x69, 0x6e, 0x6a, 0x53, 0xf6, 0x6e, 0x3b, 0x4d, 0x75, 0x6e, 0x3b,
+0x54, 0x65, 0x69, 0x3b, 0x57, 0x65, 0x64, 0x3b, 0x54, 0xfc, 0x72, 0x3b,
+0x46, 0x72, 0x65, 0x3b, 0x53, 0x61, 0x6e, 0x73, 0x75, 0x6e, 0x6f, 0x20,
+0x65, 0x73, 0x75, 0x6e, 0x20, 0x23, 0x37, 0x3b, 0x73, 0x75, 0x6e, 0x6f,
+0x20, 0x65, 0x73, 0x75, 0x6e, 0x20, 0x23, 0x31, 0x3b, 0x73, 0x75, 0x6e,
+0x6f, 0x20, 0x65, 0x73, 0x75, 0x6e, 0x20, 0x23, 0x32, 0x3b, 0x73, 0x75,
+0x6e, 0x6f, 0x20, 0x65, 0x73, 0x75, 0x6e, 0x20, 0x23, 0x33, 0x3b, 0x73,
+0x75, 0x6e, 0x6f, 0x20, 0x65, 0x73, 0x75, 0x6e, 0x20, 0x23, 0x34, 0x3b,
+0x73, 0x75, 0x6e, 0x6f, 0x20, 0x65, 0x73, 0x75, 0x6e, 0x20, 0x23, 0x35,
+0x3b, 0x73, 0x75, 0x6e, 0x6f, 0x20, 0x65, 0x73, 0x75, 0x6e, 0x20, 0x23,
+0x36, 0x53, 0x61, 0x6e, 0x64, 0x65, 0x3b, 0x4d, 0x61, 0x6e, 0x64, 0x65,
+0x3b, 0x54, 0x69, 0x75, 0x73, 0x64, 0x65, 0x3b, 0x57, 0x65, 0x6e, 0x65,
+0x73, 0x64, 0x65, 0x3b, 0x54, 0x6f, 0x73, 0x64, 0x65, 0x3b, 0x46, 0x72,
+0x61, 0x65, 0x64, 0x65, 0x3b, 0x53, 0x61, 0x74, 0x61, 0x64, 0x65, 0x6cc,
+0x6a9, 0x634, 0x645, 0x628, 0x647, 0x3b, 0x62f, 0x648, 0x634, 0x645, 0x628, 0x647,
+0x3b, 0x633, 0x626, 0x6cc, 0x634, 0x645, 0x628, 0x647, 0x3b, 0x686, 0x627, 0x631,
+0x634, 0x645, 0x628, 0x647, 0x3b, 0x67e, 0x646, 0x686, 0x634, 0x645, 0x628, 0x647,
+0x3b, 0x62c, 0x645, 0x647, 0x3b, 0x634, 0x645, 0x628, 0x647, 0x6cc, 0x6a9, 0x3b,
+0x62f, 0x648, 0x3b, 0x633, 0x626, 0x6d2, 0x3b, 0x686, 0x627, 0x631, 0x3b, 0x67e,
+0x646, 0x686, 0x3b, 0x62c, 0x645, 0x647, 0x3b, 0x634, 0x645, 0x59, 0x61, 0x6b,
+0x73, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x68, 0x3b, 0x44, 0x6f, 0x73, 0x68,
+0x61, 0x6d, 0x62, 0x65, 0x68, 0x3b, 0x53, 0x61, 0x79, 0x73, 0x68, 0x61,
+0x6d, 0x62, 0x65, 0x68, 0x3b, 0x43, 0x68, 0xe1, 0x72, 0x73, 0x68, 0x61,
+0x6d, 0x62, 0x65, 0x68, 0x3b, 0x50, 0x61, 0x6e, 0x63, 0x68, 0x73, 0x68,
+0x61, 0x6d, 0x62, 0x65, 0x68, 0x3b, 0x4a, 0x6f, 0x6d, 0x61, 0x68, 0x3b,
+0x53, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x68, 0x59, 0x61, 0x6b, 0x3b, 0x44,
+0x6f, 0x3b, 0x53, 0x61, 0x79, 0x3b, 0x43, 0x68, 0xe1, 0x3b, 0x50, 0x61,
+0x6e, 0x3b, 0x4a, 0x6f, 0x6d, 0x3b, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x6d,
+0x65, 0x6e, 0x65, 0x67, 0x61, 0x3b, 0x6c, 0x75, 0x6e, 0x65, 0x73, 0x64,
+0xec, 0x3b, 0x6d, 0xe4, 0x74, 0x65, 0x73, 0x64, 0xec, 0x3b, 0x6d, 0xe4,
+0x63, 0x6f, 0x72, 0x64, 0xec, 0x3b, 0x7a, 0x65, 0x75, 0x67, 0x67, 0x69,
+0x61, 0x3b, 0x76, 0x65, 0x6e, 0x61, 0x72, 0x64, 0xec, 0x3b, 0x73, 0x61,
+0x62, 0x62, 0x6f, 0x64, 0x6f, 0x6d, 0x2e, 0x3b, 0x6c, 0x75, 0x6e, 0x2e,
+0x3b, 0x6d, 0xe4, 0x74, 0x2e, 0x3b, 0x6d, 0xe4, 0x63, 0x2e, 0x3b, 0x7a,
+0x65, 0x75, 0x2e, 0x3b, 0x76, 0x65, 0x6e, 0x2e, 0x3b, 0x73, 0x61, 0x62,
+0x2e, 0x44, 0x3b, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, 0x3b, 0x5a, 0x3b, 0x56,
+0x3b, 0x53, 0x627, 0x6cc, 0x6a9, 0x634, 0x6cc, 0x645, 0x6d2, 0x3b, 0x62f, 0x64f,
+0x648, 0x634, 0x6cc, 0x645, 0x6d2, 0x3b, 0x6af, 0x6be, 0x646, 0x20, 0x622, 0x646,
+0x6af, 0x627, 0x3b, 0x686, 0x627, 0x631, 0x634, 0x6cc, 0x645, 0x6d2, 0x3b, 0x67e,
+0x64e, 0x626, 0x20, 0x634, 0x6cc, 0x645, 0x6d2, 0x3b, 0x634, 0x64f, 0x648, 0x6af,
+0x627, 0x631, 0x3b, 0x644, 0x64e, 0x648, 0x20, 0x622, 0x646, 0x6af, 0x627, 0x627,
+0x3b, 0x62f, 0x3b, 0x6af, 0x3b, 0x686, 0x3b, 0x67e, 0x3b, 0x634, 0x3b, 0x644,
+0x61, 0x6c, 0x61, 0x68, 0x61, 0x256, 0x269, 0x3b, 0x61, 0x256, 0x269, 0x74,
+0x25b, 0x6e, 0x25b, 0x25b, 0x3b, 0x61, 0x74, 0x61, 0x6c, 0x61, 0x61, 0x74,
+0x61, 0x3b, 0x61, 0x6c, 0x61, 0x61, 0x72, 0x62, 0x61, 0x3b, 0x61, 0x6c,
+0x61, 0x61, 0x6d, 0x269, 0x73, 0x68, 0x269, 0x3b, 0x61, 0x72, 0x269, 0x73,
+0x1dd, 0x6d, 0x61, 0x3b, 0x61, 0x73, 0x69, 0x69, 0x62, 0x69, 0x61, 0x6c,
+0x61, 0x68, 0x3b, 0x61, 0x256, 0x269, 0x74, 0x3b, 0x61, 0x74, 0x61, 0x6c,
+0x3b, 0x61, 0x6c, 0x61, 0x72, 0x3b, 0x61, 0x6c, 0x61, 0x6d, 0x3b, 0x61,
+0x72, 0x269, 0x73, 0x3b, 0x61, 0x73, 0x69, 0x62, 0x6c, 0x68, 0x3b, 0x256,
+0x74, 0x3b, 0x74, 0x6c, 0x3b, 0x6c, 0x72, 0x3b, 0x6c, 0x6d, 0x3b, 0x72,
+0x73, 0x3b, 0x73, 0x62, 0x924, 0x94b, 0x906, 0x930, 0x3b, 0x938, 0x94b, 0x906,
+0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x935, 0x93e, 0x930, 0x3b, 0x92c, 0x941,
+0x927, 0x935, 0x93e, 0x930, 0x3b, 0x935, 0x940, 0x930, 0x935, 0x93e, 0x930, 0x3b,
+0x936, 0x941, 0x915, 0x94d, 0x915, 0x930, 0x935, 0x93e, 0x930, 0x3b, 0x936, 0x928,
+0x93f, 0x91a, 0x94d, 0x91a, 0x930, 0x935, 0x93e, 0x930, 0x924, 0x94b, 0x906, 0x930,
+0x3b, 0x938, 0x94b, 0x906, 0x930, 0x3b, 0x92e, 0x902, 0x917, 0x932, 0x3b, 0x92c,
+0x941, 0x927, 0x3b, 0x935, 0x940, 0x930, 0x3b, 0x936, 0x941, 0x915, 0x94d, 0x915,
+0x930, 0x3b, 0x936, 0x928, 0x93f, 0x924, 0x3b, 0x938, 0x94b, 0x3b, 0x92e, 0x902,
+0x3b, 0x92c, 0x941, 0x3b, 0x935, 0x940, 0x3b, 0x936, 0x941, 0x3b, 0x936, 0x64,
+0x6f, 0x6d, 0xe9, 0x6e, 0x65, 0x67, 0x61, 0x3b, 0x6c, 0x75, 0x6e, 0x69,
+0x3b, 0x6d, 0x61, 0x72, 0x74, 0x69, 0x3b, 0x6d, 0xe8, 0x72, 0x63, 0x6f,
+0x72, 0x65, 0x3b, 0x7a, 0x6f, 0x62, 0x61, 0x3b, 0x76, 0xe8, 0x6e, 0x61,
+0x72, 0x65, 0x3b, 0x73, 0x61, 0x62, 0x6f, 0x64, 0x6f, 0x6d, 0x3b, 0x6c,
+0x75, 0x6e, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x6d, 0x65, 0x72, 0x3b, 0x7a,
+0x6f, 0x62, 0x3b, 0x76, 0xe8, 0x6e, 0x3b, 0x73, 0x61, 0x62
};
-static const char16_t byte_unit_data[] = {
-0x62, 0x79, 0x74, 0x65, 0x73, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b,
-0x45, 0x42, 0x4b, 0x69, 0x42, 0x3b, 0x4d, 0x69, 0x42, 0x3b, 0x47, 0x69, 0x42, 0x3b, 0x54, 0x69, 0x42, 0x3b, 0x50, 0x69,
-0x42, 0x3b, 0x45, 0x69, 0x42, 0x67, 0x72, 0x65, 0x65, 0x70, 0x62, 0x61, 0x6a, 0x74, 0x1263, 0x12ed, 0x1275, 0x12aa, 0x1263, 0x3b,
-0x121c, 0x130b, 0x1263, 0x12ed, 0x1275, 0x3b, 0x130a, 0x1263, 0x3b, 0x1274, 0x122b, 0x1263, 0x12ed, 0x1275, 0x3b, 0x1354, 0x1263, 0x3b, 0x45, 0x42,
-0x628, 0x627, 0x64a, 0x62a, 0x643, 0x64a, 0x644, 0x648, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x645, 0x64a, 0x63a, 0x627, 0x628, 0x627, 0x64a,
-0x62a, 0x3b, 0x63a, 0x64a, 0x63a, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x62a, 0x64a, 0x631, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b,
-0x628, 0x64a, 0x62a, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x45, 0x42, 0x562, 0x561, 0x575, 0x569, 0x565, 0x580, 0x56f, 0x532, 0x3b,
-0x544, 0x532, 0x3b, 0x533, 0x532, 0x3b, 0x54f, 0x532, 0x3b, 0x54a, 0x532, 0x3b, 0x45, 0x42, 0x9ac, 0x9be, 0x987, 0x99f, 0x995, 0x9bf,
-0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x9ae, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x997, 0x9bf, 0x983, 0x20, 0x9ac, 0x9be,
-0x983, 0x3b, 0x99f, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x79, 0x74, 0x62,
-0x79, 0x74, 0x65, 0x2d, 0x61, 0x6b, 0x6f, 0x6b, 0x74, 0x65, 0x64, 0x6f, 0xf9, 0x6b, 0x6f, 0x3b, 0x4d, 0x6f, 0x3b, 0x47,
-0x6f, 0x3b, 0x54, 0x6f, 0x3b, 0x50, 0x6f, 0x3b, 0x45, 0x6f, 0x4b, 0x69, 0x6f, 0x3b, 0x4d, 0x69, 0x6f, 0x3b, 0x47, 0x69,
-0x6f, 0x3b, 0x54, 0x69, 0x6f, 0x3b, 0x50, 0x69, 0x6f, 0x3b, 0x45, 0x69, 0x6f, 0x431, 0x430, 0x439, 0x442, 0x43e, 0x432, 0x435,
-0x1018, 0x102d, 0x102f, 0x1000, 0x103a, 0x431, 0x430, 0x439, 0x442, 0x44b, 0x41a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422,
-0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x1794, 0x17c3, 0x5b57, 0x8282, 0x5343, 0x5b57, 0x8282, 0x3b, 0x5146, 0x5b57, 0x8282, 0x3b, 0x5409,
-0x5b57, 0x8282, 0x3b, 0x592a, 0x5b57, 0x8282, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x4f4d, 0x5143, 0x7d44, 0x62, 0x61, 0x6a, 0x74, 0x6f,
-0x76, 0x69, 0x62, 0x61, 0x6a, 0x74, 0x79, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x6a, 0x62, 0x61, 0x69, 0x64, 0x69, 0x64, 0x62,
-0xfd, 0x74, 0x74, 0x61, 0x76, 0x75, 0x74, 0x6b, 0x74, 0x3b, 0x4d, 0x74, 0x3b, 0x47, 0x74, 0x3b, 0x54, 0x74, 0x3b, 0x50,
-0x74, 0x3b, 0x45, 0x74, 0x4b, 0x69, 0x74, 0x3b, 0x4d, 0x69, 0x74, 0x3b, 0x47, 0x69, 0x74, 0x3b, 0x54, 0x69, 0x74, 0x3b,
-0x50, 0x69, 0x74, 0x3b, 0x45, 0x69, 0x74, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x62, 0x61, 0x69, 0x64, 0x68, 0x74, 0x10d1,
-0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x10d9, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10db, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10d2, 0x10d1,
-0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10e2, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10de, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x45,
-0x42, 0x42, 0x79, 0x74, 0x65, 0x73, 0xaac, 0xabe, 0xa87, 0xa9f, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54,
-0x42, 0x3b, 0xaaa, 0xac0, 0xaac, 0xac0, 0x3b, 0x45, 0x42, 0x5d1, 0x5d9, 0x5d9, 0x5d8, 0x92c, 0x93e, 0x907, 0x91f, 0x62, 0xe1, 0x6a,
-0x74, 0x62, 0xe6, 0x74, 0x69, 0x62, 0x65, 0x61, 0x72, 0x74, 0x61, 0x30d0, 0x30a4, 0x30c8, 0x4b, 0x42, 0x3b, 0x4d, 0x42, 0x3b,
-0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x62, 0x69, 0x74, 0x65, 0xcac, 0xcc8, 0xc9f, 0xccd, 0x200c,
-0xc97, 0xcb3, 0xcc1, 0xc95, 0xcbf, 0x2e, 0xcac, 0xcc8, 0x2e, 0x3b, 0xcae, 0xcc6, 0x2e, 0xcac, 0xcc8, 0x2e, 0x3b, 0xc97, 0xcbf, 0x2e,
-0xcac, 0xcc8, 0x2e, 0x3b, 0xc9f, 0xcc6, 0x2e, 0xcac, 0xcc8, 0x2e, 0x3b, 0xcaa, 0xcc6, 0xcac, 0xcc8, 0x3b, 0x45, 0x42, 0x43a, 0x411,
-0x3b, 0x4d, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x54, 0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x411, 0x4b, 0x69, 0x411, 0x3b, 0x4d,
-0x69, 0x411, 0x3b, 0x47, 0x69, 0x411, 0x3b, 0x54, 0x69, 0x411, 0x3b, 0x50, 0x69, 0x411, 0x3b, 0x45, 0x69, 0x411, 0x43a, 0x411,
-0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b, 0x41f, 0x442, 0x431, 0x3b, 0x45, 0x42, 0xbc14, 0xc774, 0xd2b8, 0x62,
-0x61, 0x69, 0x74, 0x69, 0x62, 0x61, 0x69, 0x74, 0x61, 0x69, 0x431, 0x430, 0x458, 0x442, 0x438, 0xd2c, 0xd48, 0xd31, 0xd4d, 0xd31,
-0xd4d, 0xd15, 0xd46, 0xd2c, 0xd3f, 0x3b, 0xd0e, 0xd02, 0xd2c, 0xd3f, 0x3b, 0xd1c, 0xd3f, 0xd2c, 0xd3f, 0x3b, 0xd1f, 0xd3f, 0xd2c, 0xd3f,
-0x3b, 0xd2a, 0xd3f, 0xd2c, 0xd3f, 0x3b, 0x45, 0x42, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b,
-0x41f, 0x411, 0x3b, 0x45, 0x42, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x92a, 0x93f, 0x91f,
-0x93e, 0x3b, 0x45, 0x42, 0xb2c, 0xb3e, 0xb07, 0xb1f, 0xb4d, 0x628, 0x627, 0x64a, 0x67c, 0x633, 0x628, 0x627, 0x6cc, 0x62a, 0x6a9, 0x6cc,
-0x644, 0x648, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x645, 0x6af, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x6af, 0x6cc, 0x6af, 0x627, 0x628,
-0x627, 0x6cc, 0x62a, 0x3b, 0x62a, 0x631, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x67e, 0x62a, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b,
-0x45, 0x42, 0xa2c, 0xa3e, 0xa07, 0xa1f, 0x62, 0x79, 0x21b, 0x69, 0x431, 0x430, 0x458, 0x442, 0x43e, 0x432, 0x438, 0x628, 0x627, 0x626,
-0x64a, 0x67d, 0x632, 0x6aa, 0x644, 0x648, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632, 0x3b, 0x645, 0x64a, 0x6af, 0x627, 0x20, 0x628,
-0x627, 0x626, 0x64a, 0x67d, 0x632, 0x3b, 0x6af, 0x64a, 0x6af, 0x627, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632, 0x3b, 0x67d, 0x64a,
-0x631, 0x627, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632, 0x3b, 0x67e, 0x64a, 0x631, 0x627, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d,
-0x633, 0x3b, 0x45, 0x42, 0xdb6, 0xdba, 0xdd2, 0xda7, 0xdca, 0xd9a, 0xdd2, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xdb8, 0xdd9, 0xdb6,
-0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xd9c, 0xdd2, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xda7, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d,
-0x3b, 0xdb4, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x42, 0x62, 0x65, 0x79, 0x74, 0x69, 0x73, 0x6b, 0x42, 0x3b,
-0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x42, 0x42, 0x3b, 0x45, 0x42, 0x6b, 0x69, 0x6c, 0x6f, 0x62, 0x61,
-0x69, 0x74, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x7b, 0x30,
-0x7d, 0x3b, 0x74, 0x65, 0x72, 0x61, 0x62, 0x61, 0x69, 0x74, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x7b,
-0x30, 0x7d, 0x3b, 0x45, 0x42, 0xbaa, 0xbc8, 0xb9f, 0xbcd, 0xb95, 0xbb3, 0xbcd, 0xc2c, 0xc48, 0xc1f, 0xc4d, 0x200c, 0xc32, 0xc41, 0xc15,
-0xc47, 0xc2c, 0xc40, 0x3b, 0xc0e, 0xc2e, 0xc4d, 0x200c, 0xc2c, 0xc3f, 0x3b, 0xc1c, 0xc40, 0xc2c, 0xc40, 0x3b, 0xc1f, 0xc40, 0xc2c, 0xc40,
-0x3b, 0xc2a, 0xc40, 0xc2c, 0xc40, 0x3b, 0x45, 0x42, 0xe44, 0xe1a, 0xe15, 0xe4c, 0x70, 0x61, 0x69, 0x74, 0x69, 0x6b, 0x42, 0x20,
-0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20,
-0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20,
-0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x4b, 0x69, 0x42, 0x20,
-0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x69,
-0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b,
-0x50, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30,
-0x7d, 0x62, 0x61, 0xfd, 0x74, 0x431, 0x430, 0x439, 0x442, 0x438, 0x628, 0x627, 0x626, 0x679, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b,
-0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x67e, 0x6cc, 0x20, 0x628, 0x6cc, 0x3b, 0x45, 0x42, 0x62, 0x65, 0x69, 0x74, 0x69, 0x61,
-0x75, 0x92c, 0x93e, 0x92f, 0x91f, 0x61, 0x1e6d, 0x61, 0x6d, 0x1e0d, 0x61, 0x6e, 0x6b, 0x41, 0x1e6c, 0x3b, 0x4d, 0x41, 0x1e6c, 0x3b,
-0x47, 0x41, 0x1e6c, 0x3b, 0x54, 0x41, 0x1e6c, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x13d7, 0x13d3, 0x13cd, 0x13a6, 0x13b5, 0x13a9, 0x431,
-0x430, 0x430, 0x439, 0x442, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45,
-0x42, 0xd804, 0xdd1d, 0xd804, 0xdd2d, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x62, 0x79, 0x74, 0x65, 0x79, 0x6a9, 0x6cc, 0x644, 0x648, 0x628, 0x627,
-0x6cc, 0x62a, 0x3b, 0x645, 0x6af, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x6af, 0x6cc, 0x6af, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b,
-0x62a, 0x631, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x6d, 0x67, 0x61, 0x20, 0x62, 0x79, 0x74,
-0x65
+static constexpr char16_t byte_unit_data[] = {
+0x62, 0x79, 0x74, 0x65, 0x73, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47,
+0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x4b, 0x69,
+0x42, 0x3b, 0x4d, 0x69, 0x42, 0x3b, 0x47, 0x69, 0x42, 0x3b, 0x54, 0x69,
+0x42, 0x3b, 0x50, 0x69, 0x42, 0x3b, 0x45, 0x69, 0x42, 0x67, 0x72, 0x65,
+0x65, 0x70, 0x62, 0x61, 0x6a, 0x74, 0x1263, 0x12ed, 0x1275, 0x12aa, 0x1263, 0x3b,
+0x121c, 0x130b, 0x1263, 0x12ed, 0x1275, 0x3b, 0x130a, 0x1263, 0x3b, 0x1274, 0x122b, 0x1263,
+0x12ed, 0x1275, 0x3b, 0x1354, 0x1263, 0x3b, 0x45, 0x42, 0x628, 0x627, 0x64a, 0x62a,
+0x643, 0x64a, 0x644, 0x648, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x645, 0x2e, 0x628,
+0x3b, 0x63a, 0x2e, 0x628, 0x3b, 0x62a, 0x64a, 0x631, 0x627, 0x628, 0x627, 0x64a,
+0x62a, 0x3b, 0x628, 0x64a, 0x62a, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x45,
+0x42, 0x562, 0x561, 0x575, 0x569, 0x565, 0x580, 0x56f, 0x532, 0x3b, 0x544, 0x532,
+0x3b, 0x533, 0x532, 0x3b, 0x54f, 0x532, 0x3b, 0x54a, 0x532, 0x3b, 0x45, 0x42,
+0x9ac, 0x9be, 0x987, 0x99f, 0x995, 0x9bf, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b,
+0x9ae, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x997, 0x9bf, 0x983, 0x20,
+0x9ac, 0x9be, 0x983, 0x3b, 0x99f, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b,
+0x50, 0x42, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x79, 0x74, 0x62, 0x79, 0x74,
+0x65, 0x2d, 0x61, 0x6b, 0x431, 0x430, 0x439, 0x442, 0x44b, 0x41a, 0x411, 0x3b,
+0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b, 0x41f, 0x411, 0x3b,
+0x45, 0x42, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x76, 0x69, 0x6f, 0x6b, 0x74,
+0x65, 0x64, 0x6f, 0xf9, 0x6b, 0x6f, 0x3b, 0x4d, 0x6f, 0x3b, 0x47, 0x6f,
+0x3b, 0x54, 0x6f, 0x3b, 0x50, 0x6f, 0x3b, 0x45, 0x6f, 0x4b, 0x69, 0x6f,
+0x3b, 0x4d, 0x69, 0x6f, 0x3b, 0x47, 0x69, 0x6f, 0x3b, 0x54, 0x69, 0x6f,
+0x3b, 0x50, 0x69, 0x6f, 0x3b, 0x45, 0x69, 0x6f, 0x431, 0x430, 0x439, 0x442,
+0x43e, 0x432, 0x435, 0x1018, 0x102d, 0x102f, 0x1000, 0x103a, 0x6d, 0x67, 0x61, 0x20,
+0x62, 0x79, 0x74, 0x65, 0xd804, 0xdd1d, 0xd804, 0xdd2d, 0xd804, 0xdd16, 0xd804, 0xdd34,
+0x13d7, 0x13d3, 0x13cd, 0x13a6, 0x13b5, 0x13a9, 0x5b57, 0x8282, 0x4f4d, 0x5143, 0x7d44, 0x62,
+0x61, 0x6a, 0x74, 0x79, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x6a, 0x62, 0x61,
+0x69, 0x64, 0x69, 0x64, 0x62, 0xfd, 0x74, 0x74, 0x61, 0x76, 0x75, 0x74,
+0x6b, 0x74, 0x3b, 0x4d, 0x74, 0x3b, 0x47, 0x74, 0x3b, 0x54, 0x74, 0x3b,
+0x50, 0x74, 0x3b, 0x45, 0x74, 0x4b, 0x69, 0x74, 0x3b, 0x4d, 0x69, 0x74,
+0x3b, 0x47, 0x69, 0x74, 0x3b, 0x54, 0x69, 0x74, 0x3b, 0x50, 0x69, 0x74,
+0x3b, 0x45, 0x69, 0x74, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0xd83a, 0xdd36,
+0xd83a, 0xdd2b, 0xd83a, 0xdd45, 0xd83a, 0xdd3c, 0xd83a, 0xdd46, 0xd83a, 0xdd2d, 0xd83a, 0xdd33,
+0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd03, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd18, 0xd83a, 0xdd14,
+0x3b, 0xd83a, 0xdd1a, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd06, 0xd83a, 0xdd14, 0x3b, 0x45,
+0x42, 0x62, 0x61, 0x69, 0x64, 0x68, 0x74, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8,
+0x10d9, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42,
+0x3b, 0x10e2, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10de, 0x10d1, 0x10d0, 0x10d8,
+0x10e2, 0x10d8, 0x3b, 0x45, 0x42, 0x42, 0x79, 0x74, 0x65, 0x73, 0xaac, 0xabe,
+0xa87, 0xa9f, 0x6b, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42, 0x20,
+0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54,
+0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x7b, 0x30, 0x7d,
+0x3b, 0x45, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x4b, 0x69, 0x42, 0x20, 0x7b,
+0x30, 0x7d, 0x3b, 0x4d, 0x69, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47,
+0x69, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x69, 0x42, 0x20, 0x7b,
+0x30, 0x7d, 0x3b, 0x50, 0x69, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45,
+0x69, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x5d1, 0x5d9, 0x5d9, 0x5d8, 0x92c, 0x93e,
+0x907, 0x91f, 0x62, 0xe1, 0x6a, 0x74, 0x62, 0xe6, 0x74, 0x69, 0x6f, 0x63,
+0x74, 0x65, 0x74, 0x65, 0x73, 0x62, 0x65, 0x61, 0x72, 0x74, 0x61, 0x30d0,
+0x30a4, 0x30c8, 0x4b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54,
+0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x62, 0x69, 0x74, 0x65, 0x61,
+0x1e6d, 0x61, 0x6d, 0x1e0d, 0x61, 0x6e, 0x6b, 0x41, 0x1e6c, 0x3b, 0x4d, 0x41,
+0x1e6c, 0x3b, 0x47, 0x41, 0x1e6c, 0x3b, 0x54, 0x41, 0x1e6c, 0x3b, 0x50, 0x42,
+0x3b, 0x45, 0x42, 0xcac, 0xcc8, 0xc9f, 0xccd, 0x200c, 0xc97, 0xcb3, 0xcc1, 0xc95,
+0xcbf, 0x2e, 0xcac, 0xcc8, 0x2e, 0x3b, 0xcae, 0xcc6, 0x2e, 0xcac, 0xcc8, 0x2e,
+0x3b, 0xc97, 0xcbf, 0x2e, 0xcac, 0xcc8, 0x2e, 0x3b, 0xc9f, 0xcc6, 0x2e, 0xcac,
+0xcc8, 0x2e, 0x3b, 0xcaa, 0xcc6, 0xcac, 0xcc8, 0x3b, 0x45, 0x42, 0x43a, 0x411,
+0x3b, 0x4d, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x54, 0x411, 0x3b, 0x41f, 0x411,
+0x3b, 0x45, 0x411, 0x4b, 0x69, 0x411, 0x3b, 0x4d, 0x69, 0x411, 0x3b, 0x47,
+0x69, 0x411, 0x3b, 0x54, 0x69, 0x411, 0x3b, 0x50, 0x69, 0x411, 0x3b, 0x45,
+0x69, 0x411, 0x1794, 0x17c3, 0x92c, 0x93e, 0x92f, 0x91f, 0xbc14, 0xc774, 0xd2b8, 0x43a,
+0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b, 0x41f,
+0x442, 0x431, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x69, 0x74, 0x69, 0x62, 0x61,
+0x69, 0x74, 0x61, 0x69, 0x431, 0x430, 0x458, 0x442, 0x438, 0xd2c, 0xd48, 0xd31,
+0xd4d, 0xd31, 0xd4d, 0xd15, 0xd46, 0xd2c, 0xd3f, 0x3b, 0xd0e, 0xd02, 0xd2c, 0xd3f,
+0x3b, 0xd1c, 0xd3f, 0xd2c, 0xd3f, 0x3b, 0xd1f, 0xd3f, 0xd2c, 0xd3f, 0x3b, 0xd2a,
+0xd3f, 0xd2c, 0xd3f, 0x3b, 0x45, 0x42, 0x628, 0x627, 0x6cc, 0x62a, 0x6a9, 0x6cc,
+0x644, 0x648, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x645, 0x6af, 0x627, 0x628, 0x627,
+0x6cc, 0x62a, 0x3b, 0x6af, 0x6cc, 0x6af, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b,
+0x62a, 0x631, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x50, 0x42, 0x3b, 0x45,
+0x42, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411,
+0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b,
+0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x92a, 0x93f, 0x91f, 0x93e, 0x3b, 0x45,
+0x42, 0x42, 0x61, 0x69, 0x74, 0x2d, 0x64, 0x1eb9, 0x6d, 0xb2c, 0xb3e, 0xb07,
+0xb1f, 0xb4d, 0x628, 0x627, 0x64a, 0x67c, 0x633, 0xa2c, 0xa3e, 0xa07, 0xa1f, 0x62,
+0x79, 0x21b, 0x69, 0x431, 0x430, 0x430, 0x439, 0x442, 0x43a, 0x411, 0x3b, 0x41c,
+0x411, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45,
+0x42, 0x431, 0x430, 0x458, 0x442, 0x43e, 0x432, 0x438, 0x628, 0x627, 0x626, 0x64a,
+0x67d, 0x632, 0x6aa, 0x644, 0x648, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632,
+0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42,
+0x3b, 0x45, 0x42, 0xdb6, 0xdba, 0xdd2, 0xda7, 0xdca, 0xd9a, 0xdd2, 0xdb6, 0x20,
+0x7b, 0x30, 0x7d, 0x3b, 0xdb8, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b,
+0xd9c, 0xdd2, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xda7, 0xdd9, 0xdb6, 0x20,
+0x7b, 0x30, 0x7d, 0x3b, 0xdb4, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b,
+0x45, 0x42, 0x62, 0x65, 0x79, 0x74, 0x69, 0x73, 0x6b, 0x42, 0x3b, 0x4d,
+0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x42, 0x42, 0x3b, 0x45,
+0x42, 0x6b, 0x69, 0x6c, 0x6f, 0x62, 0x61, 0x69, 0x74, 0x69, 0x20, 0x7b,
+0x30, 0x7d, 0x3b, 0x4d, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42,
+0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x74, 0x65, 0x72, 0x61, 0x62, 0x61, 0x69,
+0x74, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x7b, 0x30,
+0x7d, 0x3b, 0x45, 0x42, 0x712, 0x710, 0x71d, 0x72c, 0xbaa, 0xbc8, 0xb9f, 0xbcd,
+0xb95, 0xbb3, 0xbcd, 0xc2c, 0xc48, 0xc1f, 0xc4d, 0x200c, 0xc32, 0xc41, 0xc15, 0xc47,
+0xc2c, 0xc40, 0x3b, 0xc0e, 0xc2e, 0xc4d, 0x200c, 0xc2c, 0xc3f, 0x3b, 0xc1c, 0xc40,
+0xc2c, 0xc40, 0x3b, 0xc1f, 0xc40, 0xc2c, 0xc40, 0x3b, 0xc2a, 0xc40, 0xc2c, 0xc40,
+0x3b, 0x45, 0x42, 0xe44, 0xe1a, 0xe15, 0xe4c, 0x70, 0x61, 0x69, 0x74, 0x69,
+0x6b, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42,
+0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x2bb,
+0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x42, 0x20, 0x2bb, 0x65, 0x20,
+0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30,
+0x7d, 0x3b, 0x45, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x4b,
+0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x69,
+0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x69, 0x42,
+0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x69, 0x42, 0x20,
+0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x69, 0x42, 0x20, 0x2bb,
+0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x69, 0x42, 0x20, 0x2bb, 0x65,
+0x20, 0x7b, 0x30, 0x7d, 0x62, 0x61, 0xfd, 0x74, 0x431, 0x430, 0x439, 0x442,
+0x438, 0x62, 0x79, 0x74, 0x65, 0x79, 0x628, 0x627, 0x626, 0x679, 0x6b, 0x42,
+0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x67e, 0x6cc,
+0x20, 0x628, 0x6cc, 0x3b, 0x45, 0x42, 0x62, 0x65, 0x69, 0x74, 0x69, 0x61,
+0x75, 0xe0, 0x77, 0x1ecd, 0x301, 0x6e, 0x20, 0x62, 0xe1, 0xec, 0x74, 0xec,
+0x6b, 0xe9, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x4d, 0x42, 0x3b, 0x6a,
+0xed, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x54, 0xed, 0x62, 0xe1, 0xec,
+0x74, 0xec, 0x3b, 0x50, 0xed, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x45,
+0x42, 0xe0, 0x77, 0x254, 0x301, 0x6e, 0x20, 0x62, 0xe1, 0xec, 0x74, 0xec,
+0x62, 0x79, 0x74, 0x65, 0x20, 0x61, 0x67, 0x62, 0x79, 0x74, 0x65, 0x2d,
+0x69, 0x74, 0x61
};
-static const char16_t am_data[] = {
-0x41, 0x4d, 0x57, 0x44, 0x76, 0x6d, 0x2e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x64, 0x69, 0x74, 0x65, 0x73, 0x1325, 0x12cb,
-0x1275, 0x635, 0x9aa, 0x9c2, 0x9f0, 0x9cd, 0x9ac, 0x9be, 0x9b9, 0x9cd, 0x9a8, 0x410, 0x41c, 0xf66, 0xf94, 0xf0b, 0xf46, 0xf0b, 0x41, 0x2e,
-0x4d, 0x2e, 0x43f, 0x440, 0x2e, 0x43e, 0x431, 0x2e, 0x1014, 0x1036, 0x1014, 0x1000, 0x103a, 0x61, 0x2e, 0xa0, 0x6d, 0x2e, 0x4e0a, 0x5348,
-0x64, 0x6f, 0x70, 0x2e, 0x61, 0x2e, 0x6d, 0x2e, 0x61, 0x6d, 0x61, 0x74, 0x6d, 0x61, 0x70, 0x2e, 0x6d, 0x61, 0x74, 0x69,
-0x6e, 0x3c0, 0x2e, 0x3bc, 0x2e, 0x53, 0x61, 0x66, 0x69, 0x79, 0x61, 0x5dc, 0x5e4, 0x5e0, 0x5d4, 0x5f4, 0x5e6, 0x64, 0x65, 0x2e,
-0x66, 0x2e, 0x68, 0x2e, 0x72, 0x2e, 0x6e, 0x2e, 0x5348, 0x524d, 0x49, 0x73, 0x75, 0x6b, 0xcaa, 0xcc2, 0xcb0, 0xccd, 0xcb5, 0xcbe,
-0xcb9, 0xccd, 0xca8, 0x442, 0x430, 0x4a3, 0x43a, 0x44b, 0xc624, 0xc804, 0x42, 0x4e, 0x5a, 0x2e, 0x4d, 0x55, 0x2e, 0xe81, 0xec8, 0xead,
-0xe99, 0xe97, 0xec8, 0xebd, 0xe87, 0x70, 0x72, 0x69, 0x65, 0x6b, 0x161, 0x70, 0x75, 0x73, 0x64, 0x69, 0x65, 0x6e, 0x101, 0x6e,
-0x74, 0x254, 0x301, 0x6e, 0x67, 0x254, 0x301, 0x70, 0x72, 0x69, 0x65, 0x161, 0x70, 0x69, 0x65, 0x74, 0x43f, 0x440, 0x435, 0x442,
-0x43f, 0x43b, 0x430, 0x434, 0x43d, 0x435, 0x50, 0x47, 0x92e, 0x2e, 0x92a, 0x942, 0x2e, 0x4af, 0x2e, 0x4e9, 0x2e, 0x92a, 0x942, 0x930,
-0x94d, 0x935, 0x93e, 0x939, 0x94d, 0x928, 0x63a, 0x2e, 0x645, 0x2e, 0x642, 0x628, 0x644, 0x200c, 0x627, 0x632, 0x638, 0x647, 0x631, 0x64,
-0x61, 0x20, 0x6d, 0x61, 0x6e, 0x68, 0xe3, 0xa2a, 0xa42, 0x2e, 0xa26, 0xa41, 0x2e, 0x4e, 0x44, 0x43f, 0x440, 0x435, 0x20, 0x43f,
-0x43e, 0x434, 0x43d, 0x435, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x70, 0x72, 0x65, 0x20, 0x70,
-0x6f, 0x64, 0x6e, 0x65, 0x43f, 0x440, 0x438, 0x458, 0x435, 0x20, 0x43f, 0x43e, 0x434, 0x43d, 0x435, 0x4d5, 0x43c, 0x431, 0x438, 0x441,
-0x431, 0x43e, 0x43d, 0x44b, 0x20, 0x440, 0x430, 0x437, 0x43c, 0x4d5, 0x635, 0x628, 0x62d, 0x60c, 0x20, 0x645, 0x646, 0x62c, 0x647, 0x646,
-0x62f, 0xdb4, 0xdd9, 0x2e, 0xdc0, 0x2e, 0x47, 0x48, 0x66, 0x6d, 0xbae, 0xbc1, 0xbb1, 0xbcd, 0xbaa, 0xb95, 0xbb2, 0xbcd, 0xe01, 0xe48,
-0xe2d, 0xe19, 0xe40, 0xe17, 0xe35, 0xe48, 0xe22, 0xe07, 0xf66, 0xf94, 0xf0b, 0xf51, 0xfb2, 0xf7c, 0xf0b, 0x1295, 0x1309, 0x1206, 0x20, 0x1230,
-0x12d3, 0x1270, 0x68, 0x65, 0x6e, 0x67, 0x69, 0x68, 0x65, 0x6e, 0x67, 0x69, 0xd6, 0xd6, 0x67, 0xfc, 0x6e, 0x6f, 0x72, 0x74,
-0x61, 0x64, 0x61, 0x6e, 0x20, 0xf6, 0x148, 0x686, 0x6c8, 0x634, 0x62a, 0x649, 0x646, 0x20, 0x628, 0x6c7, 0x631, 0x6c7, 0x646, 0x434,
-0x43f, 0x54, 0x4f, 0x422, 0x41e, 0x53, 0x41, 0x79, 0x62, 0x53, 0x75, 0x62, 0x5e4, 0x5bf, 0x5d0, 0x5b7, 0x5e8, 0x5de, 0x5d9, 0x5d8,
-0x5d0, 0x5b8, 0x5d2, 0xc0, 0xe1, 0x72, 0x1ecd, 0x300, 0xc0, 0xe1, 0x72, 0x254, 0x300, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x64, 0x64,
-0x61, 0x67, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x41, 0x4e, 0x4e, 0x2019, 0x1ee5, 0x74, 0x1ee5, 0x74,
-0x1ee5, 0x128, 0x79, 0x61, 0x6b, 0x77, 0x61, 0x6b, 0x79, 0x61, 0x14b, 0x64, 0x69, 0x61, 0x6d, 0x20, 0x56, 0x6f, 0x72, 0x6d,
-0x69, 0x74, 0x74, 0x61, 0x67, 0xa3b8, 0xa111, 0x69, 0x111, 0x69, 0x74, 0x62, 0x65, 0x61, 0x69, 0x76, 0x65, 0x74, 0x69, 0x62,
-0x4d, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x4c, 0x75, 0x6d, 0x61, 0x20, 0x6c, 0x77, 0x61, 0x20, 0x4b, 0x73, 0x75, 0x62, 0x61,
-0x6b, 0x61, 0x4b, 0x69, 0x72, 0x6f, 0x6b, 0x6f, 0x54, 0x65, 0x73, 0x69, 0x72, 0x61, 0x6e, 0x6b, 0x61, 0x6e, 0x67, 0x2019,
-0x61, 0x6d, 0x61, 0x2d5c, 0x2d49, 0x2d3c, 0x2d30, 0x2d61, 0x2d5c, 0x74, 0x69, 0x66, 0x61, 0x77, 0x74, 0x6e, 0x20, 0x74, 0x75, 0x66,
-0x61, 0x74, 0x70, 0x61, 0x6d, 0x69, 0x6c, 0x61, 0x75, 0x75, 0x74, 0x75, 0x6b, 0x6f, 0x4b, 0x49, 0x13cc, 0x13be, 0x13b4, 0x4d,
-0x75, 0x68, 0x69, 0x54, 0x4f, 0x4f, 0x75, 0x6c, 0x75, 0x63, 0x68, 0x65, 0x6c, 0x6f, 0x52, 0x168, 0x6b, 0x61, 0x72, 0x6f,
-0x6f, 0x6e, 0x1c1, 0x67, 0x6f, 0x61, 0x67, 0x61, 0x73, 0x55, 0x68, 0x72, 0x20, 0x76, 0xf6, 0x72, 0x6d, 0x69, 0x64, 0x64,
-0x61, 0x61, 0x63, 0x68, 0x73, 0x190, 0x6e, 0x6b, 0x61, 0x6b, 0x25b, 0x6e, 0x79, 0xe1, 0x4d, 0x75, 0x6e, 0x6b, 0x79, 0x6f,
-0x69, 0x63, 0x68, 0x65, 0x68, 0x65, 0x61, 0x76, 0x6f, 0x54, 0x61, 0x70, 0x61, 0x72, 0x61, 0x63, 0x68, 0x75, 0x41, 0x64,
-0x64, 0x75, 0x68, 0x61, 0x4f, 0x44, 0x5a, 0x64, 0x61, 0x74, 0x20, 0x61, 0x7a, 0x61, 0x6c, 0x6d, 0x61, 0x6b, 0x65, 0x6f,
-0x92b, 0x941, 0x902, 0x44, 0x69, 0x6e, 0x64, 0x61, 0x6d, 0x6f, 0x69, 0x65, 0x73, 0x61, 0x2e, 0x67, 0x49, 0x20, 0x62, 0x69,
-0x6b, 0x25b, 0x302, 0x67, 0x6c, 0xe0, 0x53, 0x75, 0x62, 0x62, 0x61, 0x61, 0x68, 0x69, 0x69, 0x64, 0x69, 0x253, 0x61, 0x6b,
-0xed, 0x6b, 0xed, 0x72, 0xed, 0x67, 0x73, 0xe1, 0x72, 0xfa, 0x77, 0xe1, 0x77, 0x69, 0x63, 0x68, 0x69, 0x73, 0x68, 0x75,
-0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6d, 0x61, 0x6e, 0xe1, 0x52, 0x57, 0x42d, 0x418, 0x4c, 0x77, 0x61, 0x6d, 0x69, 0x6c, 0x61,
-0x77, 0x75, 0x6b, 0x69, 0x25b, 0x6d, 0x25b, 0x301, 0x25b, 0x6d, 0x64, 0x65, 0x20, 0x6c, 0x61, 0x20, 0x6d, 0x61, 0xf1, 0x61,
-0x6e, 0x61, 0x6d, 0x62, 0x61, 0xa78c, 0x6d, 0x62, 0x61, 0xa78c, 0x6d, 0x62, 0x61, 0x2bc, 0xe1, 0x6d, 0x62, 0x61, 0x2bc, 0x628,
-0x2e, 0x646, 0x64, 0x6f, 0x70, 0x6f, 0x142, 0x64, 0x6e, 0x6a, 0x61, 0x69, 0x70, 0x2e
+static constexpr char16_t am_data[] = {
+0x41, 0x4d, 0x76, 0x6d, 0x2e, 0x61, 0x2e, 0x67, 0x41, 0x4e, 0x65, 0x20,
+0x70, 0x61, 0x72, 0x61, 0x64, 0x69, 0x74, 0x65, 0x73, 0x1325, 0x12cb, 0x1275,
+0x635, 0x9aa, 0x9c2, 0x9f0, 0x9cd, 0x9ac, 0x9be, 0x9b9, 0x9cd, 0x9a8, 0x64, 0x65,
+0x20, 0x6c, 0x61, 0x20, 0x6d, 0x61, 0xf1, 0x61, 0x6e, 0x61, 0x69, 0x63,
+0x68, 0x65, 0x68, 0x65, 0x61, 0x76, 0x6f, 0x410, 0x41c, 0x73, 0xe1, 0x72,
+0xfa, 0x77, 0xe1, 0x49, 0x20, 0x62, 0x69, 0x6b, 0x25b, 0x302, 0x67, 0x6c,
+0xe0, 0x75, 0x6c, 0x75, 0x63, 0x68, 0x65, 0x6c, 0x6f, 0x70, 0x61, 0x6d,
+0x69, 0x6c, 0x61, 0x75, 0x92d, 0x94b, 0x930, 0x92b, 0x941, 0x902, 0x70, 0x72,
+0x69, 0x6a, 0x65, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x43f, 0x440, 0x438, 0x458,
+0x435, 0x20, 0x43f, 0x43e, 0x434, 0x43d, 0x435, 0x41, 0x2e, 0x4d, 0x2e, 0x43f,
+0x440, 0x2e, 0x43e, 0x431, 0x2e, 0x1014, 0x1036, 0x1014, 0x1000, 0x103a, 0x4e0a, 0x5348,
+0x61, 0x2e, 0xa0, 0x6d, 0x2e, 0x5a, 0x64, 0x61, 0x74, 0x20, 0x61, 0x7a,
+0x61, 0x6c, 0x628, 0x2e, 0x646, 0x13cc, 0x13be, 0x13b4, 0x55, 0x68, 0x72, 0x20,
+0x76, 0xf6, 0x72, 0x6d, 0x69, 0x64, 0x64, 0x61, 0x61, 0x63, 0x68, 0x73,
+0x61, 0x2e, 0x6d, 0x2e, 0x64, 0x6f, 0x70, 0x2e, 0x938, 0x935, 0x947, 0x930,
+0x69, 0x64, 0x69, 0x253, 0x61, 0xf66, 0xf94, 0xf0b, 0xf46, 0xf0b, 0x4b, 0x49,
+0xd801, 0xdc08, 0xd801, 0xdc23, 0xd801, 0xdc68, 0xd801, 0xdc65, 0x61, 0x74, 0x6d, 0x14b,
+0x64, 0x69, 0x6b, 0xed, 0x6b, 0xed, 0x72, 0xed, 0x67, 0x61, 0x70, 0x2e,
+0x6d, 0x61, 0x74, 0x69, 0x6e, 0x73, 0x75, 0x62, 0x61, 0x6b, 0x61, 0xd83a,
+0xdd00, 0xd83a, 0xdd0e, 0x3c0, 0x2e, 0x3bc, 0x2e, 0x4d, 0x61, 0x6d, 0x62, 0x69,
+0x61, 0x53, 0x61, 0x66, 0x69, 0x79, 0x61, 0x5dc, 0x5e4, 0x5e0, 0x5d4, 0x5f4,
+0x5e6, 0x64, 0x65, 0x2e, 0x66, 0x2e, 0x68, 0x2e, 0x4e, 0x2019, 0x1ee5, 0x74,
+0x1ee5, 0x74, 0x1ee5, 0x69, 0x70, 0x2e, 0x61, 0x6e, 0x74, 0x65, 0x20, 0x6d,
+0x69, 0x64, 0xed, 0x72, 0x2e, 0x6e, 0x2e, 0x5348, 0x524d, 0x49, 0x73, 0x75,
+0x6b, 0x6e, 0x20, 0x74, 0x75, 0x66, 0x61, 0x74, 0x6b, 0x61, 0x72, 0x6f,
+0x6f, 0x6e, 0x128, 0x79, 0x61, 0x6b, 0x77, 0x61, 0x6b, 0x79, 0x61, 0xcaa,
+0xcc2, 0xcb0, 0xccd, 0xcb5, 0xcbe, 0xcb9, 0xccd, 0xca8, 0x627, 0x6d2, 0x20, 0x627,
+0x6cc, 0x645, 0x92f, 0x947, 0x20, 0x90f, 0x92e, 0x4b, 0x69, 0x72, 0x6f, 0x6b,
+0x6f, 0x938, 0x915, 0x93e, 0x933, 0xc624, 0xc804, 0x41, 0x64, 0x64, 0x75, 0x68,
+0x61, 0x42, 0x4e, 0x6d, 0x61, 0x6e, 0xe1, 0x442, 0x430, 0x4a3, 0x43a, 0x44b,
+0x54, 0x4f, 0x4f, 0xe81, 0xec8, 0xead, 0xe99, 0xe97, 0xec8, 0xebd, 0xe87, 0x70,
+0x72, 0x69, 0x65, 0x6b, 0x161, 0x70, 0x75, 0x73, 0x64, 0x69, 0x65, 0x6e,
+0x101, 0x6e, 0x74, 0x254, 0x301, 0x6e, 0x67, 0x254, 0x301, 0x70, 0x72, 0x69,
+0x65, 0x161, 0x70, 0x69, 0x65, 0x74, 0x64, 0x6f, 0x70, 0x6f, 0x142, 0x64,
+0x6e, 0x6a, 0x61, 0x44, 0x69, 0x6e, 0x64, 0x61, 0x4f, 0x44, 0x6d, 0x6f,
+0x69, 0x65, 0x73, 0x43f, 0x440, 0x435, 0x442, 0x43f, 0x43b, 0x2e, 0x75, 0x74,
+0x75, 0x6b, 0x6f, 0x77, 0x69, 0x63, 0x68, 0x69, 0x73, 0x68, 0x75, 0x4d,
+0x75, 0x68, 0x69, 0x50, 0x47, 0x98f, 0x20, 0x98f, 0x9ae, 0x190, 0x6e, 0x6b,
+0x61, 0x6b, 0x25b, 0x6e, 0x79, 0xe1, 0x52, 0x168, 0x4af, 0x2e, 0x4e9, 0x2e,
+0x1826, 0x1802, 0x20, 0x1825, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x1c1, 0x67, 0x6f,
+0x61, 0x67, 0x61, 0x73, 0x92a, 0x942, 0x930, 0x94d, 0x935, 0x93e, 0x939, 0x94d,
+0x928, 0x6d, 0x62, 0x61, 0x2bc, 0xe1, 0x6d, 0x62, 0x61, 0x2bc, 0x6d, 0x62,
+0x61, 0xa78c, 0x6d, 0x62, 0x61, 0xa78c, 0x46, 0x1ecd, 0x20, 0x6d, 0x1ecd, 0x301,
+0x6e, 0x69, 0x6e, 0x7db, 0x69, 0x111, 0x69, 0x74, 0x62, 0x65, 0x61, 0x69,
+0x76, 0x65, 0x74, 0x69, 0x62, 0x66, 0x2e, 0x6d, 0x2e, 0x52, 0x57, 0x57,
+0x44, 0x4d5, 0x43c, 0x431, 0x438, 0x441, 0x431, 0x43e, 0x43d, 0x44b, 0x20, 0x440,
+0x430, 0x437, 0x43c, 0x4d5, 0x63a, 0x2e, 0x645, 0x2e, 0x642, 0x628, 0x644, 0x200c,
+0x627, 0x632, 0x638, 0x647, 0x631, 0x64, 0x61, 0x20, 0x6d, 0x61, 0x6e, 0x68,
+0xe3, 0x61, 0x6e, 0x6b, 0x73, 0x74, 0x101, 0x69, 0x6e, 0x61, 0x6e, 0xa2a,
+0xa42, 0x2e, 0xa26, 0xa41, 0x2e, 0x6b, 0x61, 0x6e, 0x67, 0x2019, 0x61, 0x6d,
+0x61, 0x5a, 0x2e, 0x4d, 0x55, 0x2e, 0x42d, 0x418, 0x54, 0x65, 0x73, 0x69,
+0x72, 0x61, 0x6e, 0x4e, 0x44, 0x4c, 0x77, 0x61, 0x6d, 0x69, 0x6c, 0x61,
+0x77, 0x75, 0x1c65, 0x1c6e, 0x1c5b, 0x1c5f, 0x1c5c, 0x70, 0x72, 0x69, 0x6a, 0x65,
+0x20, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x6d, 0x61, 0x6b, 0x65, 0x6f, 0xa3b8,
+0xa111, 0x64, 0x6f, 0x20, 0x70, 0x6f, 0x142, 0x65, 0x64, 0x6e, 0x69, 0x14f,
+0x635, 0x628, 0x62d, 0x60c, 0x20, 0x645, 0x646, 0x62c, 0x647, 0x646, 0x62f, 0x938,
+0x941, 0x92c, 0x941, 0x939, 0x20, 0x91c, 0x93e, 0xdb4, 0xdd9, 0x2e, 0xdc0, 0x2e,
+0x4d, 0x75, 0x6e, 0x6b, 0x79, 0x6f, 0x47, 0x48, 0x2d5c, 0x2d49, 0x2d3c, 0x2d30,
+0x2d61, 0x2d5c, 0x66, 0x6d, 0x61, 0x6d, 0x20, 0x56, 0x6f, 0x72, 0x6d, 0x69,
+0x74, 0x74, 0x61, 0x67, 0x70f, 0x729, 0x71b, 0x200c, 0x74, 0x69, 0x66, 0x61,
+0x77, 0x74, 0x4c, 0x75, 0x6d, 0x61, 0x20, 0x6c, 0x77, 0x61, 0x20, 0x4b,
+0x53, 0x75, 0x62, 0x62, 0x61, 0x61, 0x68, 0x69, 0x54, 0x61, 0x70, 0x61,
+0x72, 0x61, 0x63, 0x68, 0x75, 0xe01, 0xe48, 0xe2d, 0xe19, 0xe40, 0xe17, 0xe35,
+0xe48, 0xe22, 0xe07, 0xf66, 0xf94, 0xf0b, 0xf51, 0xfb2, 0xf7c, 0xf0b, 0x1245, 0x2e,
+0x1240, 0x2e, 0x68, 0x65, 0x6e, 0x67, 0x69, 0x68, 0x65, 0x6e, 0x67, 0x69,
+0xd6, 0xd6, 0x67, 0xfc, 0x6e, 0x6f, 0x72, 0x74, 0x61, 0x64, 0x61, 0x6e,
+0x20, 0xf6, 0x148, 0x434, 0x43f, 0x686, 0x6c8, 0x634, 0x62a, 0x649, 0x646, 0x20,
+0x628, 0x6c7, 0x631, 0x6c7, 0x646, 0x422, 0x41e, 0x53, 0x41, 0x79, 0x62, 0x6b,
+0x69, 0x25b, 0x6d, 0x25b, 0x301, 0x25b, 0x6d, 0x5e4, 0x5bf, 0x5d0, 0x5b7, 0x5e8,
+0x5de, 0x5d9, 0x5d8, 0x5d0, 0x5b8, 0x5d2, 0xc0, 0xe1, 0x72, 0x1ecd, 0x300, 0xc0,
+0xe1, 0x72, 0x254, 0x300, 0x62, 0x61, 0x6e, 0x68, 0x61, 0x65, 0x74, 0x924,
+0x921, 0x915, 0x947, 0x938, 0x92c, 0x947, 0x930, 0x947, 0x70, 0x69, 0x20, 0x6f,
+0x70, 0x65, 0x6e, 0x20, 0x73, 0x75, 0x6e, 0x6f, 0x28a, 0x73, 0x68, 0x69,
+0x6c, 0xe8, 0x20, 0x6b, 0x28a, 0x62, 0x6f, 0x256, 0x75, 0x92d, 0x94d, 0x92f,
+0x93e, 0x917, 0x93e
};
-static const char16_t pm_data[] = {
-0x50, 0x4d, 0x57, 0x42, 0x6e, 0x6d, 0x2e, 0x65, 0x20, 0x70, 0x61, 0x73, 0x64, 0x69, 0x74, 0x65, 0x73, 0x12a8, 0x1230, 0x12d3,
-0x1275, 0x645, 0x985, 0x9aa, 0x9f0, 0x9be, 0x9b9, 0x9cd, 0x9a8, 0x41f, 0x41c, 0xf55, 0xfb1, 0xf72, 0xf0b, 0xf46, 0xf0b, 0x47, 0x2e, 0x4d,
-0x2e, 0x441, 0x43b, 0x2e, 0x43e, 0x431, 0x2e, 0x100a, 0x1014, 0x1031, 0x70, 0x2e, 0xa0, 0x6d, 0x2e, 0x4e0b, 0x5348, 0x6f, 0x64, 0x70,
-0x2e, 0x70, 0x2e, 0x6d, 0x2e, 0x70, 0x6d, 0x70, 0x74, 0x6d, 0x69, 0x70, 0x2e, 0x73, 0x6f, 0x69, 0x72, 0x66, 0x3bc, 0x2e,
-0x3bc, 0x2e, 0x59, 0x61, 0x6d, 0x6d, 0x61, 0x5d0, 0x5d7, 0x5d4, 0x5f4, 0x5e6, 0x64, 0x75, 0x2e, 0x65, 0x2e, 0x68, 0x2e, 0x69,
-0x2e, 0x6e, 0x2e, 0x5348, 0x5f8c, 0x57, 0x65, 0x6e, 0x67, 0x69, 0xc85, 0xcaa, 0xcb0, 0xcbe, 0xcb9, 0xccd, 0xca8, 0x442, 0x4af, 0x448,
-0x442, 0x4e9, 0x43d, 0x20, 0x43a, 0x438, 0x439, 0x438, 0x43d, 0x43a, 0x438, 0xc624, 0xd6c4, 0x50, 0x4e, 0x5a, 0x2e, 0x4d, 0x57, 0x2e,
-0xeab, 0xebc, 0xeb1, 0xe87, 0xe97, 0xec8, 0xebd, 0xe87, 0x70, 0x113, 0x63, 0x70, 0x75, 0x73, 0x64, 0x69, 0x65, 0x6e, 0x101, 0x6d,
-0x70, 0xf3, 0x6b, 0x77, 0x61, 0x70, 0x6f, 0x70, 0x69, 0x65, 0x74, 0x43f, 0x43e, 0x43f, 0x43b, 0x430, 0x434, 0x43d, 0x435, 0x50,
-0x54, 0x47, 0x92e, 0x2e, 0x909, 0x2e, 0x4af, 0x2e, 0x445, 0x2e, 0x905, 0x92a, 0x930, 0x93e, 0x939, 0x94d, 0x928, 0x63a, 0x2e, 0x648,
-0x2e, 0x628, 0x639, 0x62f, 0x627, 0x632, 0x638, 0x647, 0x631, 0x64, 0x61, 0x20, 0x74, 0x61, 0x72, 0x64, 0x65, 0xa2c, 0xa3e, 0x2e,
-0xa26, 0xa41, 0x2e, 0x4c, 0x4b, 0x43f, 0x43e, 0x20, 0x43f, 0x43e, 0x434, 0x43d, 0x435, 0x70, 0x6f, 0x20, 0x70, 0x6f, 0x64, 0x6e,
-0x65, 0x4d5, 0x43c, 0x431, 0x438, 0x441, 0x431, 0x43e, 0x43d, 0x44b, 0x20, 0x444, 0x4d5, 0x441, 0x442, 0x4d5, 0x645, 0x646, 0x62c, 0x647,
-0x646, 0x62f, 0x60c, 0x20, 0x634, 0x627, 0x645, 0xdb4, 0x2e, 0xdc0, 0x2e, 0x70, 0x6f, 0x70, 0x2e, 0x47, 0x44, 0x65, 0x6d, 0xbaa,
-0xbbf, 0xbb1, 0xbcd, 0xbaa, 0xb95, 0xbb2, 0xbcd, 0xe2b, 0xe25, 0xe31, 0xe07, 0xe40, 0xe17, 0xe35, 0xe48, 0xe22, 0xe07, 0xf55, 0xfb1, 0xf72,
-0xf0b, 0xf51, 0xfb2, 0xf7c, 0xf0b, 0x12f5, 0x1215, 0x122d, 0x20, 0x1230, 0x12d3, 0x1275, 0x65, 0x66, 0x69, 0x61, 0x66, 0x69, 0xd6, 0x53,
-0x67, 0xfc, 0x6e, 0x6f, 0x72, 0x74, 0x61, 0x64, 0x61, 0x6e, 0x20, 0x73, 0x6f, 0x148, 0x686, 0x6c8, 0x634, 0x62a, 0x649, 0x646,
-0x20, 0x643, 0x6d0, 0x64a, 0x649, 0x646, 0x43f, 0x43f, 0x54, 0x4b, 0x422, 0x41a, 0x43, 0x48, 0x79, 0x68, 0x4e, 0x67, 0x6f, 0x5e0,
-0x5d0, 0x5b8, 0x5db, 0x5de, 0x5d9, 0x5d8, 0x5d0, 0x5b8, 0x5d2, 0x1ecc, 0x300, 0x73, 0xe1, 0x6e, 0x186, 0x300, 0x73, 0xe1, 0x6e, 0x65,
-0x74, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x64, 0x64, 0x61, 0x67, 0x70, 0x6f, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x43f, 0x43e, 0x441,
-0x43b, 0x438, 0x458, 0x435, 0x20, 0x43f, 0x43e, 0x434, 0x43d, 0x435, 0x45, 0x57, 0x4e, 0x2019, 0x61, 0x62, 0x61, 0x6c, 0x69, 0x128,
-0x79, 0x61, 0x77, 0x129, 0x6f, 0x6f, 0x263, 0x65, 0x74, 0x72, 0x254, 0x61, 0x6d, 0x20, 0x4e, 0x61, 0x6d, 0x69, 0x74, 0x74,
-0x61, 0x67, 0xa06f, 0xa2d2, 0x65, 0x61, 0x68, 0x6b, 0x65, 0x74, 0x62, 0x65, 0x61, 0x69, 0x76, 0x65, 0x74, 0x65, 0x62, 0x4d,
-0x6f, 0x67, 0x6c, 0x75, 0x6d, 0x61, 0x20, 0x6c, 0x77, 0x61, 0x20, 0x70, 0x6b, 0x69, 0x6b, 0x69, 0x69, 0x257, 0x65, 0x48,
-0x77, 0x61, 0x129, 0x2d, 0x69, 0x6e, 0x129, 0x54, 0x65, 0x69, 0x70, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6f, 0x74, 0x6f, 0x2d5c,
-0x2d30, 0x2d37, 0x2d33, 0x2d33, 0x2d6f, 0x2d30, 0x2d5c, 0x74, 0x61, 0x64, 0x67, 0x67, 0x2b7, 0x61, 0x74, 0x6e, 0x20, 0x74, 0x6d, 0x65,
-0x64, 0x64, 0x69, 0x74, 0x70, 0x61, 0x6d, 0x75, 0x6e, 0x79, 0x69, 0x6b, 0x79, 0x69, 0x75, 0x6b, 0x6f, 0x6e, 0x79, 0x69,
-0x55, 0x54, 0x13d2, 0x13af, 0x13f1, 0x13a2, 0x13d7, 0x13e2, 0x43, 0x68, 0x69, 0x6c, 0x6f, 0x4d, 0x55, 0x55, 0x61, 0x6b, 0x61, 0x73,
-0x75, 0x62, 0x61, 0x168, 0x47, 0x6b, 0x6f, 0x6f, 0x73, 0x6b, 0x6f, 0x6c, 0x69, 0x6e, 0x79, 0x1c3, 0x75, 0x69, 0x61, 0x73,
-0x55, 0x68, 0x72, 0x20, 0x6e, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x61, 0x63, 0x68, 0x73, 0x190, 0x6e, 0x64, 0xe1,
-0x6d, 0xe2, 0x45, 0x69, 0x67, 0x75, 0x6c, 0x6f, 0x69, 0x63, 0x68, 0x61, 0x6d, 0x74, 0x68, 0x69, 0x45, 0x62, 0x6f, 0x6e,
-0x67, 0x69, 0x41, 0x6c, 0x75, 0x75, 0x6c, 0x61, 0x4f, 0x54, 0x1e0c, 0x65, 0x66, 0x66, 0x69, 0x72, 0x20, 0x61, 0x7a, 0x61,
-0x6e, 0x79, 0x69, 0x61, 0x67, 0x68, 0x75, 0x6f, 0x92c, 0x947, 0x932, 0x93e, 0x938, 0x947, 0x44, 0x69, 0x6c, 0x6f, 0x6c, 0x6f,
-0x6e, 0x6f, 0x6d, 0xeb, 0x74, 0x74, 0x65, 0x73, 0x61, 0x2e, 0x6b, 0x49, 0x20, 0x253, 0x75, 0x67, 0x61, 0x6a, 0x254, 0x70,
-0x5a, 0x61, 0x61, 0x72, 0x69, 0x6b, 0x61, 0x79, 0x20, 0x62, 0x65, 0x62, 0x79, 0xe1, 0x6d, 0x75, 0x6e, 0x67, 0x259, 0x67,
-0xf3, 0x67, 0x259, 0x6c, 0x65, 0x63, 0x25b, 0x25b, 0x301, 0x6e, 0x6b, 0x6f, 0x6d, 0x63, 0x68, 0x6f, 0x63, 0x68, 0x69, 0x6c,
-0x2019, 0x6c, 0x6c, 0x69, 0x6c, 0x6c, 0x69, 0x6b, 0x75, 0x67, 0xfa, 0x54, 0x14a, 0x42d, 0x41a, 0x50, 0x61, 0x73, 0x68, 0x61,
-0x6d, 0x69, 0x68, 0x65, 0x6b, 0x69, 0x73, 0x25b, 0x301, 0x6e, 0x64, 0x25b, 0x64, 0x65, 0x20, 0x6c, 0x61, 0x20, 0x74, 0x61,
-0x72, 0x64, 0x65, 0x14b, 0x6b, 0x61, 0x20, 0x6d, 0x62, 0x254, 0x301, 0x74, 0x20, 0x6e, 0x6a, 0x69, 0x6e, 0x63, 0x77, 0xf2,
-0x6e, 0x7a, 0xe9, 0x6d, 0x62f, 0x2e, 0x646, 0x77, 0xf3, 0x74, 0x70, 0x6f, 0x142, 0x64, 0x6e, 0x6a, 0x61, 0x70, 0x6f, 0x70,
-0x6f, 0x142, 0x64, 0x6e, 0x6a, 0x75, 0x65, 0x70, 0x2e
+static constexpr char16_t pm_data[] = {
+0x50, 0x4d, 0x6e, 0x6d, 0x2e, 0x61, 0x2e, 0x6b, 0x45, 0x57, 0x65, 0x20,
+0x70, 0x61, 0x73, 0x64, 0x69, 0x74, 0x65, 0x73, 0x12a8, 0x1230, 0x12d3, 0x1275,
+0x645, 0x985, 0x9aa, 0x9f0, 0x9be, 0x9b9, 0x9cd, 0x9a8, 0x64, 0x65, 0x20, 0x6c,
+0x61, 0x20, 0x74, 0x61, 0x72, 0x64, 0x65, 0x69, 0x63, 0x68, 0x61, 0x6d,
+0x74, 0x68, 0x69, 0x41f, 0x41c, 0x63, 0x25b, 0x25b, 0x301, 0x6e, 0x6b, 0x6f,
+0x49, 0x20, 0x253, 0x75, 0x67, 0x61, 0x6a, 0x254, 0x70, 0x61, 0x6b, 0x61,
+0x73, 0x75, 0x62, 0x61, 0x70, 0x61, 0x6d, 0x75, 0x6e, 0x79, 0x69, 0x938,
+0x93e, 0x902, 0x91d, 0x92c, 0x947, 0x932, 0x93e, 0x938, 0x947, 0x70, 0x6f, 0x70,
+0x6f, 0x64, 0x6e, 0x65, 0x43f, 0x43e, 0x441, 0x43b, 0x438, 0x458, 0x435, 0x20,
+0x43f, 0x43e, 0x434, 0x43d, 0x435, 0x47, 0x2e, 0x4d, 0x2e, 0x441, 0x43b, 0x2e,
+0x43e, 0x431, 0x2e, 0x100a, 0x1014, 0x1031, 0x4e0b, 0x5348, 0x70, 0x2e, 0xa0, 0x6d,
+0x2e, 0x1e0c, 0x65, 0x66, 0x66, 0x69, 0x72, 0x20, 0x61, 0x7a, 0x61, 0x62f,
+0x2e, 0x646, 0x13d2, 0x13af, 0x13f1, 0x13a2, 0x13d7, 0x13e2, 0x55, 0x68, 0x72, 0x20,
+0x6e, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x61, 0x63, 0x68, 0x73,
+0x70, 0x2e, 0x6d, 0x2e, 0x6f, 0x64, 0x70, 0x2e, 0x926, 0x92a, 0x948, 0x939,
+0x930, 0x20, 0x92c, 0x93e, 0x926, 0x65, 0x62, 0x79, 0xe1, 0x6d, 0x75, 0xf55,
+0xfb1, 0xf72, 0xf0b, 0xf46, 0xf0b, 0x55, 0x54, 0xd801, 0xdc11, 0xd801, 0xdc23, 0x70,
+0x6d, 0xd801, 0xdc50, 0xd801, 0xdc65, 0x70, 0x74, 0x6d, 0x263, 0x65, 0x74, 0x72,
+0x254, 0x6e, 0x67, 0x259, 0x67, 0xf3, 0x67, 0x259, 0x6c, 0x65, 0x69, 0x70,
+0x2e, 0x73, 0x6f, 0x69, 0x72, 0x6b, 0x69, 0x6b, 0x69, 0x69, 0x257, 0x65,
+0xd83a, 0xdd07, 0xd83a, 0xdd0e, 0x3bc, 0x2e, 0x3bc, 0x2e, 0x4d, 0x6f, 0x67, 0x59,
+0x61, 0x6d, 0x6d, 0x61, 0x5d0, 0x5d7, 0x5d4, 0x5f4, 0x5e6, 0x64, 0x75, 0x2e,
+0x65, 0x2e, 0x68, 0x2e, 0x4e, 0x2019, 0x61, 0x62, 0x61, 0x6c, 0x69, 0x65,
+0x70, 0x2e, 0x70, 0x6f, 0x73, 0x20, 0x6d, 0x69, 0x64, 0xed, 0x69, 0x2e,
+0x6e, 0x2e, 0x5348, 0x5f8c, 0x57, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x20, 0x74,
+0x6d, 0x65, 0x64, 0x64, 0x69, 0x74, 0x6b, 0x6f, 0x6f, 0x73, 0x6b, 0x6f,
+0x6c, 0x69, 0x6e, 0x79, 0x128, 0x79, 0x61, 0x77, 0x129, 0x6f, 0x6f, 0xc85,
+0xcaa, 0xcb0, 0xcbe, 0xcb9, 0xccd, 0xca8, 0x67e, 0x6cc, 0x20, 0x627, 0x6cc, 0x645,
+0x92a, 0x940, 0x20, 0x90f, 0x92e, 0x48, 0x77, 0x61, 0x129, 0x2d, 0x69, 0x6e,
+0x129, 0x938, 0x93e, 0x902, 0x91c, 0xc624, 0xd6c4, 0x41, 0x6c, 0x75, 0x75, 0x6c,
+0x61, 0x50, 0x4e, 0x6b, 0x75, 0x67, 0xfa, 0x442, 0x4af, 0x448, 0x442, 0x4e9,
+0x43d, 0x20, 0x43a, 0x438, 0x439, 0x438, 0x43d, 0x43a, 0x438, 0x4d, 0x55, 0x55,
+0xeab, 0xebc, 0xeb1, 0xe87, 0xe97, 0xec8, 0xebd, 0xe87, 0x70, 0x113, 0x63, 0x70,
+0x75, 0x73, 0x64, 0x69, 0x65, 0x6e, 0x101, 0x6d, 0x70, 0xf3, 0x6b, 0x77,
+0x61, 0x70, 0x6f, 0x70, 0x69, 0x65, 0x74, 0x77, 0xf3, 0x74, 0x70, 0x6f,
+0x142, 0x64, 0x6e, 0x6a, 0x61, 0x44, 0x69, 0x6c, 0x6f, 0x6c, 0x6f, 0x4f,
+0x54, 0x6e, 0x6f, 0x6d, 0xeb, 0x74, 0x74, 0x65, 0x73, 0x43f, 0x43e, 0x43f,
+0x43b, 0x2e, 0x6b, 0x79, 0x69, 0x75, 0x6b, 0x6f, 0x6e, 0x79, 0x69, 0x6d,
+0x63, 0x68, 0x6f, 0x63, 0x68, 0x69, 0x6c, 0x2019, 0x6c, 0x43, 0x68, 0x69,
+0x6c, 0x6f, 0x50, 0x54, 0x47, 0x9aa, 0x9bf, 0x20, 0x98f, 0x9ae, 0x190, 0x6e,
+0x64, 0xe1, 0x6d, 0xe2, 0x168, 0x47, 0x4af, 0x2e, 0x445, 0x2e, 0x1826, 0x1802,
+0x20, 0x182c, 0x1823, 0x6c, 0x69, 0x6c, 0x6c, 0x69, 0x1c3, 0x75, 0x69, 0x61,
+0x73, 0x905, 0x92a, 0x930, 0x93e, 0x939, 0x94d, 0x928, 0x6e, 0x63, 0x77, 0xf2,
+0x6e, 0x7a, 0xe9, 0x6d, 0x14b, 0x6b, 0x61, 0x20, 0x6d, 0x62, 0x254, 0x301,
+0x74, 0x20, 0x6e, 0x6a, 0x69, 0x46, 0x1ecd, 0x20, 0xed, 0x76, 0x6e, 0x69,
+0x6e, 0x7e5, 0x65, 0x61, 0x68, 0x6b, 0x65, 0x74, 0x62, 0x65, 0x61, 0x69,
+0x76, 0x65, 0x74, 0x65, 0x2e, 0x6d, 0x2e, 0x54, 0x14a, 0x57, 0x42, 0x4d5,
+0x43c, 0x431, 0x438, 0x441, 0x431, 0x43e, 0x43d, 0x44b, 0x20, 0x444, 0x4d5, 0x441,
+0x442, 0x4d5, 0x63a, 0x2e, 0x648, 0x2e, 0x628, 0x639, 0x62f, 0x627, 0x632, 0x638,
+0x647, 0x631, 0x64, 0x61, 0x20, 0x74, 0x61, 0x72, 0x64, 0x65, 0x70, 0x61,
+0x20, 0x70, 0x75, 0x73, 0x73, 0x69, 0x64, 0x65, 0x69, 0x6e, 0x61, 0x6e,
+0xa2c, 0xa3e, 0x2e, 0xa26, 0xa41, 0x2e, 0x6b, 0x69, 0x6e, 0x67, 0x6f, 0x74,
+0x6f, 0x5a, 0x2e, 0x4d, 0x57, 0x2e, 0x42d, 0x41a, 0x54, 0x65, 0x69, 0x70,
+0x61, 0x4c, 0x4b, 0x50, 0x61, 0x73, 0x68, 0x61, 0x6d, 0x69, 0x68, 0x65,
+0x1c67, 0x1c64, 0x1c6b, 0x1c5f, 0x1c79, 0x43f, 0x43e, 0x20, 0x43f, 0x43e, 0x434, 0x43d,
+0x435, 0x70, 0x6f, 0x20, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x6e, 0x79, 0x69,
+0x61, 0x67, 0x68, 0x75, 0x6f, 0xa06f, 0xa2d2, 0x70, 0x6f, 0x20, 0x70, 0x6f,
+0x142, 0x65, 0x64, 0x6e, 0x69, 0x75, 0x645, 0x646, 0x62c, 0x647, 0x646, 0x62f,
+0x60c, 0x20, 0x634, 0x627, 0x645, 0x936, 0x93e, 0x92e, 0x20, 0x91c, 0x93e, 0xdb4,
+0x2e, 0xdc0, 0x2e, 0x70, 0x6f, 0x70, 0x2e, 0x45, 0x69, 0x67, 0x75, 0x6c,
+0x6f, 0x47, 0x44, 0x2d5c, 0x2d30, 0x2d37, 0x2d33, 0x2d33, 0x2d6f, 0x2d30, 0x2d5c, 0x65,
+0x6d, 0x61, 0x6d, 0x20, 0x4e, 0x61, 0x6d, 0x69, 0x74, 0x74, 0x61, 0x67,
+0x70f, 0x712, 0x71b, 0x200c, 0x74, 0x61, 0x64, 0x67, 0x67, 0x2b7, 0x61, 0x74,
+0x6c, 0x75, 0x6d, 0x61, 0x20, 0x6c, 0x77, 0x61, 0x20, 0x70, 0xbaa, 0xbbf,
+0xbb1, 0xbcd, 0xbaa, 0xb95, 0xbb2, 0xbcd, 0x5a, 0x61, 0x61, 0x72, 0x69, 0x6b,
+0x61, 0x79, 0x20, 0x62, 0x45, 0x62, 0x6f, 0x6e, 0x67, 0x69, 0xe2b, 0xe25,
+0xe31, 0xe07, 0xe40, 0xe17, 0xe35, 0xe48, 0xe22, 0xe07, 0xf55, 0xfb1, 0xf72, 0xf0b,
+0xf51, 0xfb2, 0xf7c, 0xf0b, 0x12f5, 0x2e, 0x1240, 0x2e, 0x65, 0x66, 0x69, 0x61,
+0x66, 0x69, 0xd6, 0x53, 0x67, 0xfc, 0x6e, 0x6f, 0x72, 0x74, 0x61, 0x64,
+0x61, 0x6e, 0x20, 0x73, 0x6f, 0x148, 0x43f, 0x43f, 0x70, 0x6f, 0x70, 0x6f,
+0x142, 0x64, 0x6e, 0x6a, 0x75, 0x686, 0x6c8, 0x634, 0x62a, 0x649, 0x646, 0x20,
+0x643, 0x6d0, 0x64a, 0x649, 0x646, 0x54, 0x4b, 0x422, 0x41a, 0x43, 0x48, 0x79,
+0x68, 0x4e, 0x67, 0x6f, 0x6b, 0x69, 0x73, 0x25b, 0x301, 0x6e, 0x64, 0x25b,
+0x5e0, 0x5d0, 0x5b8, 0x5db, 0x5de, 0x5d9, 0x5d8, 0x5d0, 0x5b8, 0x5d2, 0x1ecc, 0x300,
+0x73, 0xe1, 0x6e, 0x186, 0x300, 0x73, 0xe1, 0x6e, 0x62, 0x61, 0x6e, 0x72,
+0x69, 0x6e, 0x67, 0x7a, 0x67, 0x76, 0x61, 0x71, 0x938, 0x93e, 0x902, 0x92e,
+0x70, 0x69, 0x20, 0x70, 0x69, 0x6e, 0x69, 0x20, 0x73, 0x75, 0x6e, 0x6f,
+0x28a, 0x73, 0x68, 0x69, 0x6c, 0xe8, 0x20, 0x6b, 0x28a, 0x73, 0x61, 0x73,
+0x28a, 0x926, 0x92a, 0x947, 0x939, 0x930, 0x93e, 0x2f, 0x938, 0x902, 0x91c, 0x93e
};
-static const char16_t currency_symbol_data[] = {
-0x42, 0x72, 0x4b, 0x73, 0x68, 0x52, 0x24, 0x4c, 0x65, 0x6b, 0xeb, 0x64, 0x65, 0x6e, 0x20ac, 0x1265, 0x122d, 0x62c, 0x2e, 0x645,
-0x2e, 0x200f, 0x62f, 0x2e, 0x62c, 0x2e, 0x200f, 0x62f, 0x2e, 0x628, 0x2e, 0x200f, 0x46, 0x43, 0x46, 0x41, 0x46, 0x64, 0x6a, 0x4e,
-0x66, 0x6b, 0x62f, 0x2e, 0x639, 0x2e, 0x200f, 0x20aa, 0x62f, 0x2e, 0x623, 0x2e, 0x200f, 0x62f, 0x2e, 0x643, 0x2e, 0x200f, 0x644, 0x2e,
-0x644, 0x2e, 0x200f, 0x62f, 0x2e, 0x644, 0x2e, 0x200f, 0x623, 0x2e, 0x645, 0x2e, 0x62f, 0x2e, 0x645, 0x2e, 0x200f, 0x631, 0x2e, 0x639,
-0x2e, 0x200f, 0x631, 0x2e, 0x642, 0x2e, 0x200f, 0x631, 0x2e, 0x633, 0x2e, 0x200f, 0x53, 0x62c, 0x2e, 0x633, 0x2e, 0x644, 0x2e, 0x633,
-0x2e, 0x200f, 0x62f, 0x2e, 0x62a, 0x2e, 0x200f, 0x62f, 0x2e, 0x625, 0x2e, 0x200f, 0x631, 0x2e, 0x64a, 0x2e, 0x200f, 0xa3, 0x58f, 0x20b9,
-0x20bc, 0x20bd, 0x9f3, 0x4e, 0x75, 0x2e, 0x43b, 0x432, 0x2e, 0x17db, 0xa5, 0x48, 0x4b, 0x24, 0x4d, 0x4f, 0x50, 0x24, 0x48, 0x52,
-0x4b, 0x4b, 0x4d, 0x4b, 0x10d, 0x6b, 0x72, 0x2e, 0x41, 0x66, 0x6c, 0x2e, 0x4e, 0x41, 0x66, 0x2e, 0x55, 0x53, 0x24, 0x46,
-0x42, 0x75, 0x44, 0x47, 0x48, 0x20b5, 0x41, 0x72, 0x52, 0x4d, 0x52, 0x73, 0x20a6, 0x20b1, 0x52, 0x46, 0x57, 0x53, 0x24, 0x53,
-0x52, 0x45, 0x54, 0x53, 0x68, 0x54, 0x24, 0x55, 0x53, 0x68, 0x41, 0x45, 0x44, 0x56, 0x54, 0x44, 0x41, 0x46, 0x43, 0x46,
-0x50, 0x46, 0x47, 0x55, 0x4d, 0x4d, 0x41, 0x44, 0x43, 0x48, 0x46, 0x4c, 0x53, 0x44, 0x54, 0x20be, 0x20b2, 0x46, 0x74, 0x49,
-0x53, 0x4b, 0x52, 0x70, 0x43, 0x41, 0x24, 0xffe5, 0x20b8, 0x441, 0x43e, 0x43c, 0x20a9, 0x4b, 0x50, 0x57, 0x20ba, 0x20ad, 0x4b, 0x7a,
-0x434, 0x435, 0x43d, 0x2e, 0x20ae, 0x43, 0x4e, 0xa5, 0x928, 0x947, 0x930, 0x942, 0x60b, 0x631, 0x6cc, 0x627, 0x644, 0x7a, 0x142, 0x200b,
-0x4d, 0x54, 0x6e, 0x44, 0x62, 0x53, 0x2f, 0x42, 0x73, 0x52, 0x4f, 0x4e, 0x20b4, 0x52, 0x53, 0x44, 0x41a, 0x41c, 0xdbb, 0xdd4,
-0x2e, 0x20a1, 0x52, 0x44, 0x24, 0x51, 0x43, 0x24, 0x42, 0x2f, 0x2e, 0x47, 0x73, 0x2e, 0x42, 0x73, 0x2e, 0x53, 0x441, 0x43e,
-0x43c, 0x2e, 0x52, 0x73, 0x2e, 0xe3f, 0x54, 0x4d, 0x54, 0x73, 0x6f, 0x2bb, 0x6d, 0x441, 0x45e, 0x43c, 0x20ab, 0x4e, 0x54, 0x24,
-0x49, 0x52, 0x52
+static constexpr char16_t currency_symbol_data[] = {
+0x20be, 0x42, 0x72, 0x46, 0x64, 0x6a, 0x4e, 0x66, 0x6b, 0x52, 0x24, 0x46,
+0x43, 0x46, 0x41, 0x47, 0x48, 0x20b5, 0x4c, 0x65, 0x6b, 0xeb, 0x20ac, 0x64,
+0x65, 0x6e, 0x1265, 0x122d, 0x62c, 0x2e, 0x645, 0x2e, 0x200f, 0x62f, 0x2e, 0x62c,
+0x2e, 0x200f, 0x62f, 0x2e, 0x628, 0x2e, 0x200f, 0x62f, 0x2e, 0x639, 0x2e, 0x200f,
+0x20aa, 0x62f, 0x2e, 0x623, 0x2e, 0x200f, 0x62f, 0x2e, 0x643, 0x2e, 0x200f, 0x644,
+0x2e, 0x644, 0x2e, 0x200f, 0x62f, 0x2e, 0x644, 0x2e, 0x200f, 0x623, 0x2e, 0x645,
+0x2e, 0x62f, 0x2e, 0x645, 0x2e, 0x200f, 0x631, 0x2e, 0x639, 0x2e, 0x200f, 0x631,
+0x2e, 0x642, 0x2e, 0x200f, 0x631, 0x2e, 0x633, 0x2e, 0x200f, 0x53, 0xa3, 0x62c,
+0x2e, 0x633, 0x2e, 0x644, 0x2e, 0x633, 0x2e, 0x200f, 0x62f, 0x2e, 0x62a, 0x2e,
+0x200f, 0x62f, 0x2e, 0x625, 0x2e, 0x200f, 0x631, 0x2e, 0x64a, 0x2e, 0x200f, 0x58f,
+0x20b9, 0x54, 0x53, 0x68, 0x20a6, 0x20bc, 0x20ba, 0x46, 0x202f, 0x43, 0x46, 0x41,
+0x9f3, 0x20bd, 0x4b, 0x4b, 0x4d, 0x41a, 0x41c, 0x43b, 0x432, 0x2e, 0x48, 0x4b,
+0x24, 0xffe5, 0x20b1, 0x55, 0x53, 0x68, 0xa5, 0x4d, 0x4f, 0x50, 0x24, 0x45,
+0x55, 0x52, 0x4b, 0x10d, 0x6b, 0x72, 0x2e, 0x783, 0x2e, 0x41, 0x66, 0x6c,
+0x2e, 0x4e, 0x41, 0x66, 0x2e, 0x4e, 0x75, 0x2e, 0x4b, 0x73, 0x68, 0x55,
+0x53, 0x24, 0x46, 0x42, 0x75, 0x44, 0x52, 0x70, 0x41, 0x72, 0x4d, 0x4b,
+0x52, 0x4d, 0x52, 0x66, 0x52, 0x73, 0x52, 0x46, 0x57, 0x53, 0x24, 0x53,
+0x52, 0x54, 0x24, 0x56, 0x54, 0x44, 0x41, 0x46, 0x43, 0x46, 0x50, 0x46,
+0x47, 0x55, 0x4d, 0x4c, 0x53, 0x44, 0x54, 0xd83a, 0xdd05, 0xd83a, 0xdd0a, 0xd83a,
+0xdd00, 0xd83a, 0xdd0a, 0xd83a, 0xdd05, 0xd83a, 0xdd0a, 0xd83a, 0xdd00, 0x20b2, 0x46, 0x74,
+0x43, 0x41, 0x24, 0x200b, 0x20b8, 0x17db, 0x51, 0x20a9, 0x43, 0x4e, 0xa5, 0x441,
+0x43e, 0x43c, 0x20ad, 0x4b, 0x7a, 0x434, 0x435, 0x43d, 0x2e, 0x4d, 0x54, 0x6e,
+0x20ae, 0x928, 0x947, 0x930, 0x942, 0x7ff, 0x60b, 0x631, 0x6cc, 0x627, 0x644, 0x7a,
+0x142, 0x44, 0x62, 0x53, 0x2f, 0x42, 0x73, 0x6c, 0x65, 0x69, 0x20b4, 0xdbb,
+0xdd4, 0x2e, 0x20a1, 0x52, 0x44, 0x24, 0x43, 0x24, 0x42, 0x2f, 0x2e, 0x47,
+0x73, 0x2e, 0x42, 0x73, 0x2e, 0x53, 0x20ab, 0x441, 0x43e, 0x43c, 0x2e, 0x52,
+0x73, 0x2e, 0x4e, 0x54, 0x24, 0xe3f, 0x73, 0x6f, 0x2bb, 0x6d, 0x441, 0x45e,
+0x43c
};
-static const char16_t currency_display_name_data[] = {
-0x49, 0x74, 0x6f, 0x6f, 0x70, 0x68, 0x69, 0x79, 0x61, 0x61, 0x20, 0x42, 0x69, 0x72, 0x72, 0x69, 0x69, 0x53, 0x75, 0x69,
-0x64, 0x2d, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x3b, 0x3b, 0x53,
-0x75, 0x69, 0x64, 0x2d, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x3b,
-0x3b, 0x3b, 0x3b, 0x53, 0x75, 0x69, 0x64, 0x2d, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x72,
-0x61, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x65, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b,
-0x3b, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x65, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b,
-0x3b, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x65, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x4c, 0x65, 0x6b,
-0x75, 0x20, 0x73, 0x68, 0x71, 0x69, 0x70, 0x74, 0x61, 0x72, 0x3b, 0x3b, 0x6c, 0x65, 0x6b, 0x20, 0x73, 0x68, 0x71, 0x69,
-0x70, 0x74, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x6c, 0x65, 0x6b, 0xeb, 0x20, 0x73, 0x68, 0x71, 0x69, 0x70, 0x74, 0x61,
-0x72, 0x44, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x20, 0x6d, 0x61, 0x71, 0x65, 0x64, 0x6f, 0x6e, 0x61, 0x73, 0x3b, 0x3b, 0x64,
-0x65, 0x6e, 0x61, 0x72, 0x20, 0x6d, 0x61, 0x71, 0x65, 0x64, 0x6f, 0x6e, 0x61, 0x73, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x65,
-0x6e, 0x61, 0x72, 0xeb, 0x20, 0x6d, 0x61, 0x71, 0x65, 0x64, 0x6f, 0x6e, 0x61, 0x73, 0x45, 0x75, 0x72, 0x6f, 0x6a, 0x61,
-0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x12e8, 0x12a2, 0x1275, 0x12ee, 0x1335, 0x12eb,
-0x20, 0x1265, 0x122d, 0x3b, 0x3b, 0x12e8, 0x12a2, 0x1275, 0x12ee, 0x1335, 0x12eb, 0x20, 0x1265, 0x122d, 0x3b, 0x3b, 0x3b, 0x3b, 0x12e8, 0x12a2,
-0x1275, 0x12ee, 0x1335, 0x12eb, 0x20, 0x1265, 0x122d, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x645, 0x635, 0x631, 0x64a, 0x3b, 0x62c, 0x646, 0x64a,
-0x647, 0x20, 0x645, 0x635, 0x631, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x645, 0x635, 0x631, 0x64a, 0x3b, 0x62c, 0x646, 0x64a,
-0x647, 0x627, 0x646, 0x20, 0x645, 0x635, 0x631, 0x64a, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x627, 0x62a, 0x20, 0x645, 0x635,
-0x631, 0x64a, 0x629, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x64b, 0x627, 0x20, 0x645, 0x635, 0x631, 0x64a, 0x64b, 0x627, 0x3b, 0x62c, 0x646,
-0x64a, 0x647, 0x20, 0x645, 0x635, 0x631, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x64a, 0x3b,
-0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62c,
-0x632, 0x627, 0x626, 0x631, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x627, 0x646, 0x20, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x64a,
-0x627, 0x646, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x627, 0x62a, 0x20, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x64a, 0x629, 0x3b, 0x62f,
-0x64a, 0x646, 0x627, 0x631, 0x64b, 0x627, 0x20, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x64a, 0x64b, 0x627, 0x3b, 0x62f, 0x64a, 0x646, 0x627,
-0x631, 0x20, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628, 0x62d, 0x631, 0x64a, 0x646, 0x64a,
-0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628, 0x62d, 0x631, 0x64a, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20,
-0x628, 0x62d, 0x631, 0x64a, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628, 0x62d, 0x631, 0x64a, 0x646, 0x64a, 0x3b,
-0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628, 0x62d, 0x631, 0x64a, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628,
-0x62d, 0x631, 0x64a, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628, 0x62d, 0x631, 0x64a, 0x646, 0x64a, 0x641, 0x631,
-0x646, 0x643, 0x20, 0x648, 0x633, 0x637, 0x20, 0x623, 0x641, 0x631, 0x64a, 0x642, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x648,
-0x633, 0x637, 0x20, 0x623, 0x641, 0x631, 0x64a, 0x642, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x648, 0x633, 0x637, 0x20, 0x623,
-0x641, 0x631, 0x64a, 0x642, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x648, 0x633, 0x637, 0x20, 0x623, 0x641, 0x631, 0x64a, 0x642,
-0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x648, 0x633, 0x637, 0x20, 0x623, 0x641, 0x631, 0x64a, 0x642, 0x64a, 0x3b, 0x641, 0x631,
-0x646, 0x643, 0x20, 0x648, 0x633, 0x637, 0x20, 0x623, 0x641, 0x631, 0x64a, 0x642, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x648,
-0x633, 0x637, 0x20, 0x623, 0x641, 0x631, 0x64a, 0x642, 0x64a, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644,
-0x642, 0x645, 0x631, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x3b, 0x641,
-0x631, 0x646, 0x643, 0x20, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c,
-0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644,
-0x642, 0x645, 0x631, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x3b, 0x641,
-0x631, 0x646, 0x643, 0x20, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x64a,
-0x628, 0x648, 0x62a, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a, 0x3b, 0x641, 0x631, 0x646,
-0x643, 0x20, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a,
-0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x64a,
-0x628, 0x648, 0x62a, 0x64a, 0x3b, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a, 0x646, 0x627, 0x643, 0x641,
-0x627, 0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x3b, 0x646, 0x627, 0x643, 0x641, 0x627, 0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631,
-0x64a, 0x3b, 0x646, 0x627, 0x643, 0x641, 0x627, 0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x3b, 0x646, 0x627, 0x643, 0x641, 0x627,
-0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x3b, 0x646, 0x627, 0x643, 0x641, 0x627, 0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a,
-0x3b, 0x646, 0x627, 0x643, 0x641, 0x627, 0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x3b, 0x646, 0x627, 0x643, 0x641, 0x627, 0x20,
-0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x639, 0x631, 0x627, 0x642, 0x64a, 0x3b, 0x62f, 0x64a,
-0x646, 0x627, 0x631, 0x20, 0x639, 0x631, 0x627, 0x642, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x639, 0x631, 0x627, 0x642,
-0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x639, 0x631, 0x627, 0x642, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20,
-0x639, 0x631, 0x627, 0x642, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x639, 0x631, 0x627, 0x642, 0x64a, 0x3b, 0x62f, 0x64a,
-0x646, 0x627, 0x631, 0x20, 0x639, 0x631, 0x627, 0x642, 0x64a, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a,
-0x644, 0x64a, 0x20, 0x62c, 0x62f, 0x64a, 0x62f, 0x3b, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644,
-0x64a, 0x20, 0x62c, 0x62f, 0x64a, 0x62f, 0x3b, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x64a,
-0x20, 0x62c, 0x62f, 0x64a, 0x62f, 0x3b, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x64a, 0x20,
-0x62c, 0x62f, 0x64a, 0x62f, 0x3b, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x64a, 0x20, 0x62c,
-0x62f, 0x64a, 0x62f, 0x3b, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x64a, 0x20, 0x62c, 0x62f,
-0x64a, 0x62f, 0x3b, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x64a, 0x20, 0x62c, 0x62f, 0x64a,
-0x62f, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623, 0x631, 0x62f, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623,
-0x631, 0x62f, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623, 0x631, 0x62f, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646,
-0x627, 0x631, 0x20, 0x623, 0x631, 0x62f, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623, 0x631, 0x62f, 0x646, 0x64a,
-0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623, 0x631, 0x62f, 0x646, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623,
-0x631, 0x62f, 0x646, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627,
-0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x3b,
-0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x643, 0x648,
-0x64a, 0x62a, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627,
-0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x3b, 0x62c,
-0x646, 0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627,
-0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20,
-0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x3b, 0x62c,
-0x646, 0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x644, 0x64a, 0x628, 0x64a,
-0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x644, 0x64a, 0x628, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x644, 0x64a,
-0x628, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x627, 0x646, 0x20, 0x644, 0x64a, 0x628, 0x64a, 0x627, 0x646, 0x3b, 0x62f, 0x64a,
-0x646, 0x627, 0x631, 0x627, 0x62a, 0x20, 0x644, 0x64a, 0x628, 0x64a, 0x629, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x64b, 0x627, 0x20,
-0x644, 0x64a, 0x628, 0x64a, 0x64b, 0x627, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x644, 0x64a, 0x628, 0x64a, 0x623, 0x648, 0x642,
-0x64a, 0x629, 0x20, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629, 0x3b, 0x623, 0x648, 0x642, 0x64a, 0x629, 0x20, 0x645,
-0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629, 0x3b, 0x623, 0x648, 0x642, 0x64a, 0x629, 0x20, 0x645, 0x648, 0x631, 0x64a, 0x62a,
-0x627, 0x646, 0x64a, 0x629, 0x3b, 0x623, 0x648, 0x642, 0x64a, 0x629, 0x20, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629,
-0x3b, 0x623, 0x648, 0x642, 0x64a, 0x629, 0x20, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629, 0x3b, 0x623, 0x648, 0x642,
-0x64a, 0x629, 0x20, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629, 0x3b, 0x623, 0x648, 0x642, 0x64a, 0x629, 0x20, 0x645,
-0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a, 0x3b, 0x62f,
-0x631, 0x647, 0x645, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a,
-0x3b, 0x62f, 0x631, 0x647, 0x645, 0x627, 0x646, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a, 0x627, 0x646, 0x3b, 0x62f, 0x631, 0x627, 0x647,
-0x645, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a, 0x629, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x64b, 0x627, 0x20, 0x645, 0x63a, 0x631, 0x628,
-0x64a, 0x64b, 0x627, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x639,
-0x645, 0x627, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644,
-0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x3b, 0x631, 0x64a,
-0x627, 0x644, 0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x3b,
-0x631, 0x64a, 0x627, 0x644, 0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x3b,
-0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x3b,
-0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x3b,
-0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x642, 0x637, 0x631, 0x64a, 0x631,
-0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648, 0x62f, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648, 0x62f, 0x64a,
-0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648, 0x62f, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648,
-0x62f, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648, 0x62f, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633,
-0x639, 0x648, 0x62f, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648, 0x62f, 0x64a, 0x634, 0x644, 0x646, 0x20, 0x635,
-0x648, 0x645, 0x627, 0x644, 0x64a, 0x3b, 0x634, 0x644, 0x646, 0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a, 0x3b, 0x634, 0x644, 0x646,
-0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a, 0x3b, 0x634, 0x644, 0x646, 0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a, 0x3b, 0x634,
-0x644, 0x646, 0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a, 0x3b, 0x634, 0x644, 0x646, 0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a,
-0x3b, 0x634, 0x644, 0x646, 0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x633, 0x648, 0x62f, 0x627,
-0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x633, 0x648, 0x62f, 0x627, 0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20,
-0x633, 0x648, 0x62f, 0x627, 0x646, 0x64a, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x633, 0x648, 0x62f, 0x627, 0x646, 0x64a, 0x3b, 0x62c,
-0x646, 0x64a, 0x647, 0x627, 0x62a, 0x20, 0x633, 0x648, 0x62f, 0x627, 0x646, 0x64a, 0x629, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x64b, 0x627,
-0x20, 0x633, 0x648, 0x62f, 0x627, 0x646, 0x64a, 0x64b, 0x627, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x633, 0x648, 0x62f, 0x627, 0x646,
-0x64a, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633, 0x648, 0x631, 0x64a, 0x629, 0x3b, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633, 0x648, 0x631,
-0x64a, 0x629, 0x3b, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633, 0x648, 0x631, 0x64a, 0x629, 0x3b, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633,
-0x648, 0x631, 0x64a, 0x629, 0x3b, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633, 0x648, 0x631, 0x64a, 0x629, 0x3b, 0x644, 0x64a, 0x631, 0x629,
-0x20, 0x633, 0x648, 0x631, 0x64a, 0x629, 0x3b, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633, 0x648, 0x631, 0x64a, 0x629, 0x62f, 0x64a, 0x646,
-0x627, 0x631, 0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a,
-0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x627, 0x646,
-0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a, 0x627, 0x646, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x627, 0x62a, 0x20, 0x62a, 0x648, 0x646,
-0x633, 0x64a, 0x629, 0x3b, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x64b, 0x627, 0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a, 0x64b, 0x627, 0x3b,
-0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x625, 0x645, 0x627, 0x631,
-0x627, 0x62a, 0x64a, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a, 0x64a, 0x3b, 0x62f, 0x631, 0x647,
-0x645, 0x20, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a, 0x64a, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x625, 0x645, 0x627, 0x631, 0x627,
-0x62a, 0x64a, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a, 0x64a, 0x3b, 0x62f, 0x631, 0x647, 0x645,
-0x20, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a, 0x64a, 0x3b, 0x62f, 0x631, 0x647, 0x645, 0x20, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a,
-0x64a, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a,
-0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a,
-0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a, 0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a,
-0x3b, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20,
-0x627, 0x644, 0x633, 0x648, 0x62f, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644,
-0x633, 0x648, 0x62f, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644, 0x633, 0x648,
-0x62f, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x627, 0x646, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644, 0x633, 0x648,
-0x62f, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x627, 0x62a, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644, 0x633, 0x648,
-0x62f, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x64b, 0x627, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644, 0x633, 0x648,
-0x62f, 0x627, 0x646, 0x3b, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644, 0x633, 0x648, 0x62f, 0x627,
-0x646, 0x570, 0x561, 0x575, 0x56f, 0x561, 0x56f, 0x561, 0x576, 0x20, 0x564, 0x580, 0x561, 0x574, 0x3b, 0x3b, 0x570, 0x561, 0x575, 0x56f,
-0x561, 0x56f, 0x561, 0x576, 0x20, 0x564, 0x580, 0x561, 0x574, 0x3b, 0x3b, 0x3b, 0x3b, 0x570, 0x561, 0x575, 0x56f, 0x561, 0x56f, 0x561,
-0x576, 0x20, 0x564, 0x580, 0x561, 0x574, 0x9ad, 0x9be, 0x9f0, 0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9f0, 0x9c1, 0x9aa, 0x9c0, 0x3b, 0x3b,
-0x9ad, 0x9be, 0x9f0, 0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9f0, 0x9c1, 0x9aa, 0x9c0, 0x3b, 0x3b, 0x3b, 0x3b, 0x9ad, 0x9be, 0x9f0, 0x9a4,
-0x9c0, 0x9af, 0x9bc, 0x20, 0x9f0, 0x9c1, 0x9aa, 0x9c0, 0x41, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e, 0x20, 0x4d,
-0x61, 0x6e, 0x61, 0x74, 0x131, 0x3b, 0x3b, 0x41, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e, 0x20, 0x6d, 0x61,
-0x6e, 0x61, 0x74, 0x131, 0x3b, 0x3b, 0x3b, 0x3b, 0x41, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e, 0x20, 0x6d,
-0x61, 0x6e, 0x61, 0x74, 0x131, 0x43c, 0x430, 0x43d, 0x430, 0x442, 0x65, 0x75, 0x72, 0x6f, 0x61, 0x3b, 0x3b, 0x65, 0x75, 0x72,
-0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x9ac, 0x9be, 0x982, 0x9b2, 0x9be, 0x9a6, 0x9c7, 0x9b6, 0x9c0, 0x20, 0x99f,
-0x9be, 0x995, 0x9be, 0x3b, 0x3b, 0x9ac, 0x9be, 0x982, 0x9b2, 0x9be, 0x9a6, 0x9c7, 0x9b6, 0x9c0, 0x20, 0x99f, 0x9be, 0x995, 0x9be, 0x3b,
-0x3b, 0x3b, 0x3b, 0x9ac, 0x9be, 0x982, 0x9b2, 0x9be, 0x9a6, 0x9c7, 0x9b6, 0x9c0, 0x20, 0x99f, 0x9be, 0x995, 0x9be, 0x9ad, 0x9be, 0x9b0,
-0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9b0, 0x9c1, 0x9aa, 0x9bf, 0x3b, 0x3b, 0x9ad, 0x9be, 0x9b0, 0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9b0,
-0x9c1, 0x9aa, 0x9bf, 0x3b, 0x3b, 0x3b, 0x3b, 0x9ad, 0x9be, 0x9b0, 0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9b0, 0x9c1, 0x9aa, 0x9bf, 0xf51,
-0xf44, 0xf74, 0xf63, 0xf0b, 0xf40, 0xfb2, 0xf58, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75,
-0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x61, 0x20, 0x65, 0x75, 0x72, 0x6f, 0x69, 0x6f, 0xf9, 0x3b, 0x65, 0x75,
-0x72, 0x6f, 0x411, 0x44a, 0x43b, 0x433, 0x430, 0x440, 0x441, 0x43a, 0x438, 0x20, 0x43b, 0x435, 0x432, 0x3b, 0x3b, 0x431, 0x44a, 0x43b,
-0x433, 0x430, 0x440, 0x441, 0x43a, 0x438, 0x20, 0x43b, 0x435, 0x432, 0x3b, 0x3b, 0x3b, 0x3b, 0x431, 0x44a, 0x43b, 0x433, 0x430, 0x440,
-0x441, 0x43a, 0x438, 0x20, 0x43b, 0x435, 0x432, 0x430, 0x1019, 0x103c, 0x1014, 0x103a, 0x1019, 0x102c, 0x20, 0x1000, 0x103b, 0x1015, 0x103a, 0x3b,
-0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x1019, 0x103c, 0x1014, 0x103a, 0x1019, 0x102c, 0x20, 0x1000, 0x103b, 0x1015, 0x103a, 0x431, 0x435, 0x43b, 0x430,
-0x440, 0x443, 0x441, 0x43a, 0x456, 0x20, 0x440, 0x443, 0x431, 0x435, 0x43b, 0x44c, 0x3b, 0x3b, 0x431, 0x435, 0x43b, 0x430, 0x440, 0x443,
-0x441, 0x43a, 0x456, 0x20, 0x440, 0x443, 0x431, 0x435, 0x43b, 0x44c, 0x3b, 0x3b, 0x431, 0x435, 0x43b, 0x430, 0x440, 0x443, 0x441, 0x43a,
-0x456, 0x44f, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x456, 0x3b, 0x431, 0x435, 0x43b, 0x430, 0x440, 0x443, 0x441, 0x43a, 0x456, 0x445, 0x20,
-0x440, 0x443, 0x431, 0x43b, 0x451, 0x45e, 0x3b, 0x431, 0x435, 0x43b, 0x430, 0x440, 0x443, 0x441, 0x43a, 0x430, 0x433, 0x430, 0x20, 0x440,
-0x443, 0x431, 0x43b, 0x44f, 0x179a, 0x17c0, 0x179b, 0x200b, 0x1780, 0x1798, 0x17d2, 0x1796, 0x17bb, 0x1787, 0x17b6, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
-0x3b, 0x179a, 0x17c0, 0x179b, 0x200b, 0x1780, 0x1798, 0x17d2, 0x1796, 0x17bb, 0x1787, 0x17b6, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75,
-0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x73, 0x4eba, 0x6c11, 0x5e01, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
-0x4eba, 0x6c11, 0x5e01, 0x6e2f, 0x5143, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x6e2f, 0x5143, 0x6fb3, 0x95e8, 0x5e01, 0x3b, 0x3b, 0x3b, 0x3b,
-0x3b, 0x3b, 0x6fb3, 0x95e8, 0x5143, 0x65b0, 0x52a0, 0x5761, 0x5143, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x65b0, 0x52a0, 0x5761, 0x5143, 0x6fb3,
-0x9580, 0x5143, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x6fb3, 0x9580, 0x5143, 0x65b0, 0x53f0, 0x5e63, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
-0x65b0, 0x53f0, 0x5e63, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x61, 0x20, 0x6b, 0x75, 0x6e, 0x61, 0x3b, 0x3b, 0x68, 0x72,
-0x76, 0x61, 0x74, 0x73, 0x6b, 0x61, 0x20, 0x6b, 0x75, 0x6e, 0x61, 0x3b, 0x3b, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b,
-0x65, 0x20, 0x6b, 0x75, 0x6e, 0x65, 0x3b, 0x3b, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, 0x68, 0x20, 0x6b, 0x75,
-0x6e, 0x61, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x72, 0x6b,
-0x61, 0x3b, 0x3b, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x72,
-0x6b, 0x61, 0x3b, 0x3b, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x65, 0x20, 0x6d, 0x61,
-0x72, 0x6b, 0x65, 0x3b, 0x3b, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x69, 0x68, 0x20,
-0x6d, 0x61, 0x72, 0x61, 0x6b, 0x61, 0x10d, 0x65, 0x73, 0x6b, 0xe1, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x6e, 0x61, 0x3b, 0x3b,
-0x10d, 0x65, 0x73, 0x6b, 0xe1, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x6e, 0x61, 0x3b, 0x3b, 0x10d, 0x65, 0x73, 0x6b, 0xe9, 0x20,
-0x6b, 0x6f, 0x72, 0x75, 0x6e, 0x79, 0x3b, 0x10d, 0x65, 0x73, 0x6b, 0xe9, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x6e, 0x79, 0x3b,
-0x10d, 0x65, 0x73, 0x6b, 0xfd, 0x63, 0x68, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x20, 0x6b,
-0x72, 0x6f, 0x6e, 0x65, 0x3b, 0x3b, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x3b, 0x3b, 0x3b,
-0x3b, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x65, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x72, 0x45, 0x75, 0x72, 0x6f, 0x3b, 0x3b,
-0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x41, 0x72, 0x75, 0x62, 0x61, 0x61, 0x6e, 0x73,
-0x65, 0x20, 0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x3b, 0x3b, 0x41, 0x72, 0x75, 0x62, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20,
-0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x41, 0x72, 0x75, 0x62, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20,
-0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x2d, 0x41, 0x6e, 0x74,
-0x69, 0x6c, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x3b, 0x3b, 0x4e, 0x65,
-0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x2d, 0x41, 0x6e, 0x74, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x73,
-0x65, 0x20, 0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e,
-0x64, 0x73, 0x2d, 0x41, 0x6e, 0x74, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x67, 0x75, 0x6c, 0x64,
-0x65, 0x6e, 0x53, 0x75, 0x72, 0x69, 0x6e, 0x61, 0x61, 0x6d, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b,
-0x3b, 0x53, 0x75, 0x72, 0x69, 0x6e, 0x61, 0x61, 0x6d, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b,
-0x3b, 0x3b, 0x53, 0x75, 0x72, 0x69, 0x6e, 0x61, 0x61, 0x6d, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b,
-0x3b, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x55,
-0x53, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x55, 0x53, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b,
-0x3b, 0x3b, 0x3b, 0x55, 0x53, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x45, 0x61, 0x73, 0x74, 0x20, 0x43, 0x61,
-0x72, 0x69, 0x62, 0x62, 0x65, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x45, 0x61, 0x73, 0x74,
-0x20, 0x43, 0x61, 0x72, 0x69, 0x62, 0x62, 0x65, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b,
-0x3b, 0x45, 0x61, 0x73, 0x74, 0x20, 0x43, 0x61, 0x72, 0x69, 0x62, 0x62, 0x65, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c,
-0x61, 0x72, 0x73, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
-0x3b, 0x3b, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b,
-0x3b, 0x3b, 0x3b, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
-0x73, 0x45, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x73,
-0x42, 0x61, 0x68, 0x61, 0x6d, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x42, 0x61, 0x68,
-0x61, 0x6d, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x42, 0x61, 0x68, 0x61,
-0x6d, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64, 0x69, 0x61,
-0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20,
-0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20,
-0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x42, 0x65, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
-0x3b, 0x3b, 0x42, 0x65, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x42,
-0x65, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x42, 0x65, 0x72, 0x6d, 0x75, 0x64, 0x61,
-0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x42, 0x65, 0x72, 0x6d, 0x75, 0x64, 0x61, 0x6e, 0x20, 0x64,
-0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x42, 0x65, 0x72, 0x6d, 0x75, 0x64, 0x61, 0x6e, 0x20, 0x64, 0x6f,
-0x6c, 0x6c, 0x61, 0x72, 0x73, 0x42, 0x6f, 0x74, 0x73, 0x77, 0x61, 0x6e, 0x61, 0x6e, 0x20, 0x50, 0x75, 0x6c, 0x61, 0x3b,
-0x3b, 0x42, 0x6f, 0x74, 0x73, 0x77, 0x61, 0x6e, 0x61, 0x6e, 0x20, 0x70, 0x75, 0x6c, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x42,
-0x6f, 0x74, 0x73, 0x77, 0x61, 0x6e, 0x61, 0x6e, 0x20, 0x70, 0x75, 0x6c, 0x61, 0x73, 0x42, 0x75, 0x72, 0x75, 0x6e, 0x64,
-0x69, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x3b, 0x3b, 0x42, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x69, 0x61, 0x6e,
-0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x3b, 0x3b, 0x3b, 0x3b, 0x42, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20,
-0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61,
-0x6e, 0x20, 0x43, 0x46, 0x41, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x3b, 0x3b, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c,
-0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x43, 0x46, 0x41, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x3b, 0x3b,
-0x3b, 0x3b, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x43, 0x46,
-0x41, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c,
-0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
-0x3b, 0x3b, 0x3b, 0x3b, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73,
-0x43, 0x61, 0x79, 0x6d, 0x61, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61,
-0x72, 0x3b, 0x3b, 0x43, 0x61, 0x79, 0x6d, 0x61, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x64, 0x6f,
-0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x43, 0x61, 0x79, 0x6d, 0x61, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e,
-0x64, 0x73, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c, 0x61, 0x6e,
-0x64, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c, 0x61, 0x6e,
-0x64, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c,
-0x61, 0x6e, 0x64, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x44, 0x61, 0x6e, 0x69, 0x73, 0x68, 0x20, 0x4b, 0x72,
-0x6f, 0x6e, 0x65, 0x3b, 0x3b, 0x44, 0x61, 0x6e, 0x69, 0x73, 0x68, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x3b, 0x3b, 0x3b,
-0x3b, 0x44, 0x61, 0x6e, 0x69, 0x73, 0x68, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x72, 0x45, 0x72, 0x69, 0x74, 0x72, 0x65,
-0x61, 0x6e, 0x20, 0x4e, 0x61, 0x6b, 0x66, 0x61, 0x3b, 0x3b, 0x45, 0x72, 0x69, 0x74, 0x72, 0x65, 0x61, 0x6e, 0x20, 0x6e,
-0x61, 0x6b, 0x66, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x45, 0x72, 0x69, 0x74, 0x72, 0x65, 0x61, 0x6e, 0x20, 0x6e, 0x61, 0x6b,
-0x66, 0x61, 0x73, 0x46, 0x61, 0x6c, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20,
-0x50, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x46, 0x61, 0x6c, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x73, 0x6c, 0x61,
-0x6e, 0x64, 0x73, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b, 0x46, 0x61, 0x6c, 0x6b, 0x6c, 0x61, 0x6e,
-0x64, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x46, 0x69, 0x6a, 0x69,
-0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x46, 0x69, 0x6a, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f,
-0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x46, 0x69, 0x6a, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61,
-0x72, 0x73, 0x55, 0x4b, 0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x55, 0x4b, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64,
-0x3b, 0x3b, 0x3b, 0x3b, 0x55, 0x4b, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x47, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x6e,
-0x20, 0x44, 0x61, 0x6c, 0x61, 0x73, 0x69, 0x3b, 0x3b, 0x47, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x61, 0x6c,
-0x61, 0x73, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x47, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x6e, 0x20, 0x64, 0x61, 0x6c, 0x61, 0x73,
-0x69, 0x73, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x69, 0x61, 0x6e, 0x20, 0x43, 0x65, 0x64, 0x69, 0x3b, 0x3b, 0x47, 0x68, 0x61,
-0x6e, 0x61, 0x69, 0x61, 0x6e, 0x20, 0x63, 0x65, 0x64, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x69,
-0x61, 0x6e, 0x20, 0x63, 0x65, 0x64, 0x69, 0x73, 0x47, 0x69, 0x62, 0x72, 0x61, 0x6c, 0x74, 0x61, 0x72, 0x20, 0x50, 0x6f,
-0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x47, 0x69, 0x62, 0x72, 0x61, 0x6c, 0x74, 0x61, 0x72, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64,
-0x3b, 0x3b, 0x3b, 0x3b, 0x47, 0x69, 0x62, 0x72, 0x61, 0x6c, 0x74, 0x61, 0x72, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73,
-0x47, 0x75, 0x79, 0x61, 0x6e, 0x61, 0x65, 0x73, 0x65, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x47, 0x75,
-0x79, 0x61, 0x6e, 0x61, 0x65, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x47, 0x75,
-0x79, 0x61, 0x6e, 0x61, 0x65, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x48, 0x6f, 0x6e, 0x67, 0x20,
-0x4b, 0x6f, 0x6e, 0x67, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f,
-0x6e, 0x67, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f,
-0x6e, 0x67, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x52, 0x75, 0x70,
-0x65, 0x65, 0x3b, 0x3b, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x3b, 0x3b, 0x3b, 0x3b,
-0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x73, 0x49, 0x73, 0x72, 0x61, 0x65, 0x6c, 0x69,
-0x20, 0x4e, 0x65, 0x77, 0x20, 0x53, 0x68, 0x65, 0x6b, 0x65, 0x6c, 0x3b, 0x3b, 0x49, 0x73, 0x72, 0x61, 0x65, 0x6c, 0x69,
-0x20, 0x6e, 0x65, 0x77, 0x20, 0x73, 0x68, 0x65, 0x6b, 0x65, 0x6c, 0x3b, 0x3b, 0x3b, 0x3b, 0x49, 0x73, 0x72, 0x61, 0x65,
-0x6c, 0x69, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x73, 0x68, 0x65, 0x6b, 0x65, 0x6c, 0x73, 0x4a, 0x61, 0x6d, 0x61, 0x69, 0x63,
-0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x4a, 0x61, 0x6d, 0x61, 0x69, 0x63, 0x61, 0x6e, 0x20,
-0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x4a, 0x61, 0x6d, 0x61, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x64,
-0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x6e, 0x20, 0x53, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e,
-0x67, 0x3b, 0x3b, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x6e, 0x20, 0x73, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x3b,
-0x3b, 0x3b, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x6e, 0x20, 0x73, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x6f,
-0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x61, 0x6e, 0x64, 0x3b, 0x3b, 0x53, 0x6f,
-0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b,
-0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x4c, 0x69,
-0x62, 0x65, 0x72, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x4c, 0x69, 0x62, 0x65, 0x72,
-0x69, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x69,
-0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x4d, 0x61, 0x63, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x50,
-0x61, 0x74, 0x61, 0x63, 0x61, 0x3b, 0x3b, 0x4d, 0x61, 0x63, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x74, 0x61,
-0x63, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x4d, 0x61, 0x63, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x74, 0x61, 0x63,
-0x61, 0x73, 0x4d, 0x61, 0x6c, 0x61, 0x67, 0x61, 0x73, 0x79, 0x20, 0x41, 0x72, 0x69, 0x61, 0x72, 0x79, 0x3b, 0x3b, 0x4d,
-0x61, 0x6c, 0x61, 0x67, 0x61, 0x73, 0x79, 0x20, 0x61, 0x72, 0x69, 0x61, 0x72, 0x79, 0x3b, 0x3b, 0x3b, 0x3b, 0x4d, 0x61,
-0x6c, 0x61, 0x67, 0x61, 0x73, 0x79, 0x20, 0x61, 0x72, 0x69, 0x61, 0x72, 0x69, 0x65, 0x73, 0x4d, 0x61, 0x6c, 0x61, 0x77,
-0x69, 0x61, 0x6e, 0x20, 0x4b, 0x77, 0x61, 0x63, 0x68, 0x61, 0x3b, 0x3b, 0x4d, 0x61, 0x6c, 0x61, 0x77, 0x69, 0x61, 0x6e,
-0x20, 0x6b, 0x77, 0x61, 0x63, 0x68, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x4d, 0x61, 0x6c, 0x61, 0x77, 0x69, 0x61, 0x6e, 0x20,
-0x6b, 0x77, 0x61, 0x63, 0x68, 0x61, 0x73, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x52, 0x69, 0x6e,
-0x67, 0x67, 0x69, 0x74, 0x3b, 0x3b, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x72, 0x69, 0x6e, 0x67,
-0x67, 0x69, 0x74, 0x3b, 0x3b, 0x3b, 0x3b, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x72, 0x69, 0x6e,
-0x67, 0x67, 0x69, 0x74, 0x73, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x52, 0x75, 0x70, 0x65, 0x65,
-0x3b, 0x3b, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x3b, 0x3b, 0x3b,
-0x3b, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x73, 0x4e, 0x61, 0x6d,
-0x69, 0x62, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69,
-0x61, 0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x61,
-0x6e, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x4e, 0x69, 0x67, 0x65, 0x72, 0x69, 0x61, 0x6e, 0x20, 0x4e, 0x61,
-0x69, 0x72, 0x61, 0x3b, 0x3b, 0x4e, 0x69, 0x67, 0x65, 0x72, 0x69, 0x61, 0x6e, 0x20, 0x6e, 0x61, 0x69, 0x72, 0x61, 0x3b,
-0x3b, 0x3b, 0x3b, 0x4e, 0x69, 0x67, 0x65, 0x72, 0x69, 0x61, 0x6e, 0x20, 0x6e, 0x61, 0x69, 0x72, 0x61, 0x73, 0x50, 0x61,
-0x6b, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x69, 0x20, 0x52, 0x75, 0x70, 0x65, 0x65, 0x3b, 0x3b, 0x50, 0x61, 0x6b, 0x69, 0x73,
-0x74, 0x61, 0x6e, 0x69, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x50, 0x61, 0x6b, 0x69, 0x73, 0x74,
-0x61, 0x6e, 0x69, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x73, 0x50, 0x61, 0x70, 0x75, 0x61, 0x20, 0x4e, 0x65, 0x77, 0x20,
-0x47, 0x75, 0x69, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x4b, 0x69, 0x6e, 0x61, 0x3b, 0x3b, 0x50, 0x61, 0x70, 0x75, 0x61, 0x20,
-0x4e, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x6b, 0x69, 0x6e, 0x61, 0x3b, 0x3b, 0x3b, 0x3b,
-0x50, 0x61, 0x70, 0x75, 0x61, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x6b, 0x69,
-0x6e, 0x61, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20, 0x50, 0x69, 0x73, 0x6f, 0x3b, 0x3b, 0x50,
-0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x69, 0x73, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x50, 0x68,
-0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x69, 0x73, 0x6f, 0x73, 0x52, 0x77, 0x61, 0x6e, 0x64, 0x61,
-0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x3b, 0x3b, 0x52, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x6e, 0x20, 0x66, 0x72, 0x61,
-0x6e, 0x63, 0x3b, 0x3b, 0x3b, 0x3b, 0x52, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x6e, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73,
-0x53, 0x61, 0x6d, 0x6f, 0x61, 0x6e, 0x20, 0x54, 0x61, 0x6c, 0x61, 0x3b, 0x3b, 0x53, 0x61, 0x6d, 0x6f, 0x61, 0x6e, 0x20,
-0x74, 0x61, 0x6c, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x61, 0x6d, 0x6f, 0x61, 0x6e, 0x20, 0x74, 0x61, 0x6c, 0x61, 0x53,
-0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x69, 0x73, 0x20, 0x52, 0x75, 0x70, 0x65, 0x65, 0x3b, 0x3b, 0x53, 0x65,
-0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x69, 0x73, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x53,
-0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x69, 0x73, 0x20, 0x72, 0x75, 0x70, 0x65, 0x65, 0x73, 0x53, 0x69, 0x65,
-0x72, 0x72, 0x61, 0x20, 0x4c, 0x65, 0x6f, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x4c, 0x65, 0x6f, 0x6e, 0x65, 0x3b, 0x3b, 0x53,
-0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x4c, 0x65, 0x6f, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x3b,
-0x3b, 0x3b, 0x3b, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x4c, 0x65, 0x6f, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x6c, 0x65,
-0x6f, 0x6e, 0x65, 0x73, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
-0x3b, 0x3b, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b,
-0x3b, 0x3b, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x53,
-0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61,
-0x72, 0x3b, 0x3b, 0x53, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x64,
-0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x20, 0x49, 0x73, 0x6c,
-0x61, 0x6e, 0x64, 0x73, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x53, 0x74, 0x20, 0x48, 0x65, 0x6c, 0x65, 0x6e,
-0x61, 0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x53, 0x74, 0x20, 0x48, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x20, 0x70,
-0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x74, 0x20, 0x48, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x20, 0x70, 0x6f,
-0x75, 0x6e, 0x64, 0x73, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b,
-0x53, 0x75, 0x64, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x75,
-0x64, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x53, 0x77, 0x61, 0x7a, 0x69, 0x20, 0x4c,
-0x69, 0x6c, 0x61, 0x6e, 0x67, 0x65, 0x6e, 0x69, 0x3b, 0x3b, 0x53, 0x77, 0x61, 0x7a, 0x69, 0x20, 0x6c, 0x69, 0x6c, 0x61,
-0x6e, 0x67, 0x65, 0x6e, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x77, 0x61, 0x7a, 0x69, 0x20, 0x65, 0x6d, 0x61, 0x6c, 0x61,
-0x6e, 0x67, 0x65, 0x6e, 0x69, 0x53, 0x77, 0x65, 0x64, 0x69, 0x73, 0x68, 0x20, 0x4b, 0x72, 0x6f, 0x6e, 0x61, 0x3b, 0x3b,
-0x53, 0x77, 0x65, 0x64, 0x69, 0x73, 0x68, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x77, 0x65,
-0x64, 0x69, 0x73, 0x68, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x6f, 0x72, 0x53, 0x77, 0x69, 0x73, 0x73, 0x20, 0x46, 0x72, 0x61,
-0x6e, 0x63, 0x3b, 0x3b, 0x53, 0x77, 0x69, 0x73, 0x73, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x3b, 0x3b, 0x3b, 0x3b, 0x53,
-0x77, 0x69, 0x73, 0x73, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x6e,
-0x20, 0x53, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x3b, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x6e,
-0x20, 0x73, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x3b, 0x3b, 0x3b, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69,
-0x61, 0x6e, 0x20, 0x73, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x54, 0x6f, 0x6e, 0x67, 0x61, 0x6e, 0x20, 0x50,
-0x61, 0x2bb, 0x61, 0x6e, 0x67, 0x61, 0x3b, 0x3b, 0x54, 0x6f, 0x6e, 0x67, 0x61, 0x6e, 0x20, 0x70, 0x61, 0x2bb, 0x61, 0x6e,
-0x67, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x54, 0x6f, 0x6e, 0x67, 0x61, 0x6e, 0x20, 0x70, 0x61, 0x2bb, 0x61, 0x6e, 0x67, 0x61,
-0x54, 0x72, 0x69, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x20, 0x26, 0x20, 0x54, 0x6f, 0x62, 0x61, 0x67, 0x6f, 0x20, 0x44, 0x6f,
-0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x54, 0x72, 0x69, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x20, 0x26, 0x20, 0x54, 0x6f, 0x62,
-0x61, 0x67, 0x6f, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x54, 0x72, 0x69, 0x6e, 0x69, 0x64,
-0x61, 0x64, 0x20, 0x26, 0x20, 0x54, 0x6f, 0x62, 0x61, 0x67, 0x6f, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x73, 0x55,
-0x67, 0x61, 0x6e, 0x64, 0x61, 0x6e, 0x20, 0x53, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x3b, 0x55, 0x67, 0x61,
-0x6e, 0x64, 0x61, 0x6e, 0x20, 0x73, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x3b, 0x3b, 0x3b, 0x55, 0x67, 0x61,
-0x6e, 0x64, 0x61, 0x6e, 0x20, 0x73, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64,
-0x20, 0x41, 0x72, 0x61, 0x62, 0x20, 0x45, 0x6d, 0x69, 0x72, 0x61, 0x74, 0x65, 0x73, 0x20, 0x44, 0x69, 0x72, 0x68, 0x61,
-0x6d, 0x3b, 0x3b, 0x55, 0x41, 0x45, 0x20, 0x64, 0x69, 0x72, 0x68, 0x61, 0x6d, 0x3b, 0x3b, 0x3b, 0x3b, 0x55, 0x41, 0x45,
-0x20, 0x64, 0x69, 0x72, 0x68, 0x61, 0x6d, 0x73, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x50, 0x6f, 0x75, 0x6e,
-0x64, 0x3b, 0x3b, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b,
-0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x56, 0x61, 0x6e, 0x75, 0x61, 0x74,
-0x75, 0x20, 0x56, 0x61, 0x74, 0x75, 0x3b, 0x3b, 0x56, 0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x20, 0x76, 0x61, 0x74, 0x75,
-0x3b, 0x3b, 0x3b, 0x3b, 0x56, 0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x20, 0x76, 0x61, 0x74, 0x75, 0x73, 0x5a, 0x61, 0x6d,
-0x62, 0x69, 0x61, 0x6e, 0x20, 0x4b, 0x77, 0x61, 0x63, 0x68, 0x61, 0x3b, 0x3b, 0x5a, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x6e,
-0x20, 0x6b, 0x77, 0x61, 0x63, 0x68, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x5a, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x6e, 0x20, 0x6b,
-0x77, 0x61, 0x63, 0x68, 0x61, 0x73, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x65, 0x73, 0x65,
-0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x65,
-0x73, 0x65, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x53, 0x75,
-0x64, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c,
-0x61, 0x6e, 0x64, 0x73, 0x20, 0x41, 0x6e, 0x74, 0x69, 0x6c, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x47, 0x75, 0x69, 0x6c, 0x64,
-0x65, 0x72, 0x3b, 0x3b, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x41, 0x6e, 0x74, 0x69,
-0x6c, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x3b, 0x3b, 0x3b, 0x3b, 0x4e, 0x65, 0x74,
-0x68, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x41, 0x6e, 0x74, 0x69, 0x6c, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x67,
-0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b,
-0x3b, 0x65, 0x75, 0x72, 0x6f, 0x74, 0x64, 0x6f, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x61, 0x3b, 0x3b, 0x64,
-0x6f, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x61,
-0x72, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x75, 0x72, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b,
-0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x61, 0x6c, 0x67, 0xe9, 0x72, 0x69, 0x65,
-0x6e, 0x3b, 0x3b, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x61, 0x6c, 0x67, 0xe9, 0x72, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x3b,
-0x3b, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x73, 0x20, 0x61, 0x6c, 0x67, 0xe9, 0x72, 0x69, 0x65, 0x6e, 0x73, 0x66, 0x72, 0x61,
-0x6e, 0x63, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e,
-0x63, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61,
-0x6e, 0x63, 0x73, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x66, 0x72, 0x61, 0x6e, 0x63,
-0x20, 0x62, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x62, 0x75,
-0x72, 0x75, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x20, 0x62, 0x75,
-0x72, 0x75, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45,
-0x41, 0x43, 0x29, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43,
-0x29, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41,
-0x43, 0x29, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x64,
-0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x6f,
-0x6c, 0x6c, 0x61, 0x72, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63,
-0x20, 0x63, 0x6f, 0x6d, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x63, 0x6f, 0x6d,
-0x6f, 0x72, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x6f,
-0x72, 0x69, 0x65, 0x6e, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x69, 0x73,
-0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x69, 0x73, 0x3b, 0x3b, 0x3b,
-0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x69, 0x73, 0x66, 0x72, 0x61,
-0x6e, 0x63, 0x20, 0x64, 0x6a, 0x69, 0x62, 0x6f, 0x75, 0x74, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63,
-0x20, 0x64, 0x6a, 0x69, 0x62, 0x6f, 0x75, 0x74, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63,
-0x73, 0x20, 0x64, 0x6a, 0x69, 0x62, 0x6f, 0x75, 0x74, 0x69, 0x65, 0x6e, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43,
-0x46, 0x50, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x50, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61,
-0x6e, 0x63, 0x73, 0x20, 0x43, 0x46, 0x50, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x67, 0x75, 0x69, 0x6e, 0xe9, 0x65, 0x6e,
-0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x67, 0x75, 0x69, 0x6e, 0xe9, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x66,
-0x72, 0x61, 0x6e, 0x63, 0x73, 0x20, 0x67, 0x75, 0x69, 0x6e, 0xe9, 0x65, 0x6e, 0x73, 0x67, 0x6f, 0x75, 0x72, 0x64, 0x65,
-0x20, 0x68, 0x61, 0xef, 0x74, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x3b, 0x3b, 0x67, 0x6f, 0x75, 0x72, 0x64, 0x65, 0x20, 0x68,
-0x61, 0xef, 0x74, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x67, 0x6f, 0x75, 0x72, 0x64, 0x65, 0x73, 0x20,
-0x68, 0x61, 0xef, 0x74, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x61, 0x72, 0x69, 0x61, 0x72, 0x79, 0x20, 0x6d, 0x61, 0x6c,
-0x67, 0x61, 0x63, 0x68, 0x65, 0x3b, 0x3b, 0x61, 0x72, 0x69, 0x61, 0x72, 0x79, 0x20, 0x6d, 0x61, 0x6c, 0x67, 0x61, 0x63,
-0x68, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x61, 0x72, 0x69, 0x61, 0x72, 0x79, 0x73, 0x20, 0x6d, 0x61, 0x6c, 0x67, 0x61, 0x63,
-0x68, 0x65, 0x73, 0x6f, 0x75, 0x67, 0x75, 0x69, 0x79, 0x61, 0x20, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x69,
-0x65, 0x6e, 0x3b, 0x3b, 0x6f, 0x75, 0x67, 0x75, 0x69, 0x79, 0x61, 0x20, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e,
-0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x6f, 0x75, 0x67, 0x75, 0x69, 0x79, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x75, 0x72,
-0x69, 0x74, 0x61, 0x6e, 0x69, 0x65, 0x6e, 0x73, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x20, 0x6d, 0x61, 0x75, 0x72, 0x69,
-0x63, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x3b, 0x3b, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x20, 0x6d, 0x61, 0x75, 0x72, 0x69,
-0x63, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x61,
-0x75, 0x72, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x64, 0x69, 0x72, 0x68, 0x61, 0x6d, 0x20, 0x6d, 0x61, 0x72,
-0x6f, 0x63, 0x61, 0x69, 0x6e, 0x3b, 0x3b, 0x64, 0x69, 0x72, 0x68, 0x61, 0x6d, 0x20, 0x6d, 0x61, 0x72, 0x6f, 0x63, 0x61,
-0x69, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x69, 0x72, 0x68, 0x61, 0x6d, 0x73, 0x20, 0x6d, 0x61, 0x72, 0x6f, 0x63, 0x61,
-0x69, 0x6e, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x72, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x3b, 0x3b, 0x66,
-0x72, 0x61, 0x6e, 0x63, 0x20, 0x72, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61,
-0x6e, 0x63, 0x73, 0x20, 0x72, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x20, 0x64,
-0x65, 0x73, 0x20, 0x53, 0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x3b, 0x3b, 0x72, 0x6f, 0x75, 0x70, 0x69,
-0x65, 0x20, 0x64, 0x65, 0x73, 0x20, 0x53, 0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x3b, 0x3b, 0x3b, 0x3b,
-0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x73, 0x20, 0x64, 0x65, 0x73, 0x20, 0x53, 0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c,
-0x65, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x73, 0x75, 0x69, 0x73, 0x73, 0x65, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e,
-0x63, 0x20, 0x73, 0x75, 0x69, 0x73, 0x73, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x73, 0x20, 0x73,
-0x75, 0x69, 0x73, 0x73, 0x65, 0x73, 0x6c, 0x69, 0x76, 0x72, 0x65, 0x20, 0x73, 0x79, 0x72, 0x69, 0x65, 0x6e, 0x6e, 0x65,
-0x3b, 0x3b, 0x6c, 0x69, 0x76, 0x72, 0x65, 0x20, 0x73, 0x79, 0x72, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x3b, 0x3b, 0x3b, 0x3b,
-0x6c, 0x69, 0x76, 0x72, 0x65, 0x73, 0x20, 0x73, 0x79, 0x72, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x64, 0x69, 0x6e, 0x61,
-0x72, 0x20, 0x74, 0x75, 0x6e, 0x69, 0x73, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x74, 0x75,
-0x6e, 0x69, 0x73, 0x69, 0x65, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x73, 0x20, 0x74, 0x75, 0x6e,
-0x69, 0x73, 0x69, 0x65, 0x6e, 0x73, 0x76, 0x61, 0x74, 0x75, 0x20, 0x76, 0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x61, 0x6e,
-0x3b, 0x3b, 0x76, 0x61, 0x74, 0x75, 0x20, 0x76, 0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x61, 0x6e, 0x3b, 0x3b, 0x3b, 0x3b,
-0x76, 0x61, 0x74, 0x75, 0x73, 0x20, 0x76, 0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x61, 0x6e, 0x73, 0x50, 0x75, 0x6e, 0x6e,
-0x64, 0x20, 0x53, 0x61, 0x73, 0x61, 0x6e, 0x6e, 0x61, 0x63, 0x68, 0x3b, 0x3b, 0x70, 0x68, 0x75, 0x6e, 0x6e, 0x64, 0x20,
-0x53, 0x61, 0x73, 0x61, 0x6e, 0x6e, 0x61, 0x63, 0x68, 0x3b, 0x70, 0x68, 0x75, 0x6e, 0x6e, 0x64, 0x20, 0x53, 0x61, 0x73,
-0x61, 0x6e, 0x6e, 0x61, 0x63, 0x68, 0x3b, 0x70, 0x75, 0x69, 0x6e, 0x6e, 0x64, 0x20, 0x53, 0x68, 0x61, 0x73, 0x61, 0x6e,
-0x6e, 0x61, 0x63, 0x68, 0x3b, 0x3b, 0x70, 0x75, 0x6e, 0x6e, 0x64, 0x20, 0x53, 0x61, 0x73, 0x61, 0x6e, 0x6e, 0x61, 0x63,
-0x68, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10e3, 0x10da, 0x10d8, 0x20, 0x10da, 0x10d0, 0x10e0, 0x10d8, 0x3b, 0x3b, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10e3,
-0x10da, 0x10d8, 0x20, 0x10da, 0x10d0, 0x10e0, 0x10d8, 0x3b, 0x3b, 0x3b, 0x3b, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10e3, 0x10da, 0x10d8, 0x20, 0x10da,
-0x10d0, 0x10e0, 0x10d8, 0x45, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x45, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x45, 0x75, 0x72,
-0x6f, 0x53, 0x63, 0x68, 0x77, 0x65, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x6e, 0x3b, 0x3b,
-0x53, 0x63, 0x68, 0x77, 0x65, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x6e, 0x3b, 0x3b, 0x3b,
-0x3b, 0x53, 0x63, 0x68, 0x77, 0x65, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x6e, 0x395, 0x3c5,
-0x3c1, 0x3ce, 0x3b, 0x3b, 0x3b5, 0x3c5, 0x3c1, 0x3ce, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b5, 0x3c5, 0x3c1, 0x3ce, 0x64, 0x61, 0x6e, 0x6d,
-0x61, 0x72, 0x6b, 0x69, 0x6d, 0x75, 0x74, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x75, 0x6e, 0x69, 0x3b, 0x3b, 0x64, 0x61, 0x6e,
-0x73, 0x6b, 0x69, 0x6e, 0x75, 0x74, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x75, 0x6e, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x61,
-0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6d, 0x75, 0x74, 0x20, 0x6b, 0x6f, 0x72, 0x75, 0x75, 0x6e, 0x69, 0xaad, 0xabe, 0xab0,
-0xaa4, 0xac0, 0xaaf, 0x20, 0xab0, 0xac2, 0xaaa, 0xabf, 0xaaf, 0xabe, 0x3b, 0x3b, 0xaad, 0xabe, 0xab0, 0xaa4, 0xac0, 0xaaf, 0x20, 0xab0,
-0xac2, 0xaaa, 0xabf, 0xaaf, 0xabe, 0x3b, 0x3b, 0x3b, 0x3b, 0xaad, 0xabe, 0xab0, 0xaa4, 0xac0, 0xaaf, 0x20, 0xab0, 0xac2, 0xaaa, 0xabf,
-0xaaf, 0xabe, 0x4e, 0x61, 0x69, 0x72, 0x61, 0x72, 0x20, 0x4e, 0x61, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x3b, 0x3b, 0x4e,
-0x61, 0x69, 0x72, 0x61, 0x72, 0x20, 0x4e, 0x61, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x4e, 0x61,
-0x69, 0x72, 0x6f, 0x72, 0x69, 0x6e, 0x20, 0x4e, 0x61, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x4b, 0x75, 0x257, 0x69, 0x6e,
-0x20, 0x53, 0x65, 0x66, 0x61, 0x20, 0x6e, 0x61, 0x20, 0x41, 0x66, 0x69, 0x72, 0x6b, 0x61, 0x20, 0x54, 0x61, 0x20, 0x59,
-0x61, 0x6d, 0x6d, 0x61, 0x5e9, 0x5e7, 0x5dc, 0x20, 0x5d7, 0x5d3, 0x5e9, 0x3b, 0x3b, 0x5e9, 0x5e7, 0x5dc, 0x20, 0x5d7, 0x5d3, 0x5e9,
-0x3b, 0x5e9, 0x5e7, 0x5dc, 0x5d9, 0x5dd, 0x20, 0x5d7, 0x5d3, 0x5e9, 0x5d9, 0x5dd, 0x3b, 0x3b, 0x5e9, 0x5e7, 0x5dc, 0x5d9, 0x5dd, 0x20,
-0x5d7, 0x5d3, 0x5e9, 0x5d9, 0x5dd, 0x3b, 0x5e9, 0x5e7, 0x5dc, 0x5d9, 0x5dd, 0x20, 0x5d7, 0x5d3, 0x5e9, 0x5d9, 0x5dd, 0x92d, 0x93e, 0x930,
-0x924, 0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a, 0x92f, 0x93e, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x941,
-0x92a, 0x92f, 0x93e, 0x3b, 0x3b, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a, 0x90f, 0x6d, 0x61,
-0x67, 0x79, 0x61, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x69, 0x6e, 0x74, 0x3b, 0x3b, 0x6d, 0x61, 0x67, 0x79, 0x61, 0x72, 0x20,
-0x66, 0x6f, 0x72, 0x69, 0x6e, 0x74, 0x3b, 0x3b, 0x3b, 0x3b, 0x6d, 0x61, 0x67, 0x79, 0x61, 0x72, 0x20, 0x66, 0x6f, 0x72,
-0x69, 0x6e, 0x74, 0xed, 0x73, 0x6c, 0x65, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x61, 0x3b, 0x3b, 0xed, 0x73,
-0x6c, 0x65, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0xed, 0x73, 0x6c, 0x65, 0x6e,
-0x73, 0x6b, 0x61, 0x72, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x75, 0x72, 0x52, 0x75, 0x70, 0x69, 0x61, 0x68, 0x20, 0x49, 0x6e,
-0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x52, 0x75, 0x70, 0x69, 0x61, 0x68, 0x20,
-0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x45, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b,
-0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x50,
-0x75, 0x6e, 0x74, 0x20, 0x53, 0x74, 0x65, 0x69, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x3b, 0x70, 0x68, 0x75, 0x6e, 0x74,
-0x20, 0x73, 0x74, 0x65, 0x69, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x70, 0x68, 0x75, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x65,
-0x69, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x70, 0x68, 0x75, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x65, 0x69, 0x72, 0x6c, 0x69,
-0x6e, 0x67, 0x3b, 0x62, 0x70, 0x75, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x65, 0x69, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x3b, 0x70,
-0x75, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x65, 0x69, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20,
-0x73, 0x76, 0x69, 0x7a, 0x7a, 0x65, 0x72, 0x6f, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x73, 0x76, 0x69,
-0x7a, 0x7a, 0x65, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x69, 0x20, 0x73, 0x76, 0x69,
-0x7a, 0x7a, 0x65, 0x72, 0x69, 0x65e5, 0x672c, 0x5186, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x5186, 0xcad, 0xcbe, 0xcb0, 0xca4, 0xcc0,
-0xcaf, 0x20, 0xcb0, 0xcc2, 0xcaa, 0xcbe, 0xcaf, 0xcbf, 0x3b, 0x3b, 0xcad, 0xcbe, 0xcb0, 0xca4, 0xcc0, 0xcaf, 0x20, 0xcb0, 0xcc2, 0xcaa,
-0xcbe, 0xcaf, 0xcbf, 0x3b, 0x3b, 0x3b, 0x3b, 0xcad, 0xcbe, 0xcb0, 0xca4, 0xcc0, 0xcaf, 0x20, 0xcb0, 0xcc2, 0xcaa, 0xcbe, 0xcaf, 0xcbf,
-0xc97, 0xcb3, 0xcc1, 0x6c1, 0x650, 0x646, 0x62f, 0x64f, 0x633, 0x62a, 0x672, 0x646, 0x6cd, 0x20, 0x631, 0x6c4, 0x67e, 0x64e, 0x6d2, 0x49a,
-0x430, 0x437, 0x430, 0x49b, 0x441, 0x442, 0x430, 0x43d, 0x20, 0x442, 0x435, 0x4a3, 0x433, 0x435, 0x441, 0x456, 0x3b, 0x3b, 0x49a, 0x430,
-0x437, 0x430, 0x49b, 0x441, 0x442, 0x430, 0x43d, 0x20, 0x442, 0x435, 0x4a3, 0x433, 0x435, 0x441, 0x456, 0x3b, 0x3b, 0x3b, 0x3b, 0x49a,
-0x430, 0x437, 0x430, 0x49b, 0x441, 0x442, 0x430, 0x43d, 0x20, 0x442, 0x435, 0x4a3, 0x433, 0x435, 0x441, 0x456, 0x41a, 0x44b, 0x440, 0x433,
-0x44b, 0x437, 0x441, 0x442, 0x430, 0x43d, 0x20, 0x441, 0x43e, 0x43c, 0x443, 0x3b, 0x3b, 0x41a, 0x44b, 0x440, 0x433, 0x44b, 0x437, 0x441,
-0x442, 0x430, 0x43d, 0x20, 0x441, 0x43e, 0x43c, 0x443, 0x3b, 0x3b, 0x3b, 0x3b, 0x41a, 0x44b, 0x440, 0x433, 0x44b, 0x437, 0x441, 0x442,
-0x430, 0x43d, 0x20, 0x441, 0x43e, 0x43c, 0x443, 0xb300, 0xd55c, 0xbbfc, 0xad6d, 0x20, 0xc6d0, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xb300,
-0xd55c, 0xbbfc, 0xad6d, 0x20, 0xc6d0, 0xc870, 0xc120, 0x20, 0xbbfc, 0xc8fc, 0xc8fc, 0xc758, 0x20, 0xc778, 0xbbfc, 0x20, 0xacf5, 0xd654, 0xad6d, 0x20,
-0xc6d0, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xc870, 0xc120, 0x20, 0xbbfc, 0xc8fc, 0xc8fc, 0xc758, 0x20, 0xc778, 0xbbfc, 0x20, 0xacf5, 0xd654,
-0xad6d, 0x20, 0xc6d0, 0x49, 0x66, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x72, 0x79, 0x2019, 0x55, 0x62, 0x75, 0x72, 0x75,
-0x6e, 0x64, 0x69, 0xea5, 0xeb2, 0xea7, 0x20, 0xe81, 0xeb5, 0xe9a, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xea5, 0xeb2, 0xea7, 0x20,
-0xe81, 0xeb5, 0xe9a, 0x65, 0x69, 0x72, 0x6f, 0x3b, 0x65, 0x69, 0x72, 0x6f, 0x3b, 0x65, 0x69, 0x72, 0x6f, 0x3b, 0x3b, 0x3b,
-0x3b, 0x65, 0x69, 0x72, 0x6f, 0x46, 0x61, 0x6c, 0xe1, 0x6e, 0x67, 0x61, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67,
-0xf3, 0x4b, 0x77, 0x61, 0x6e, 0x7a, 0x61, 0x20, 0x79, 0x61, 0x20, 0x41, 0x6e, 0x67, 0xf3, 0x6c, 0x61, 0x46, 0x61, 0x6c,
-0xe1, 0x6e, 0x67, 0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x42, 0x45, 0x41, 0x43, 0x45, 0x75, 0x72, 0x61, 0x73, 0x3b, 0x3b,
-0x65, 0x75, 0x72, 0x61, 0x73, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x61, 0x69, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75,
-0x72, 0x173, 0x41c, 0x430, 0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x435, 0x43d, 0x430, 0x440, 0x3b, 0x3b,
-0x41c, 0x430, 0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x435, 0x43d, 0x430, 0x440, 0x3b, 0x3b, 0x3b, 0x3b,
-0x41c, 0x430, 0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x435, 0x43d, 0x430, 0x440, 0x438, 0x52, 0x69, 0x6e,
-0x67, 0x67, 0x69, 0x74, 0x20, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x52,
-0x69, 0x6e, 0x67, 0x67, 0x69, 0x74, 0x20, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x44, 0x6f, 0x6c, 0x61, 0x72,
-0x20, 0x42, 0x72, 0x75, 0x6e, 0x65, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x44, 0x6f, 0x6c, 0x61, 0x72, 0x20, 0x42,
-0x72, 0x75, 0x6e, 0x65, 0x69, 0x44, 0x6f, 0x6c, 0x61, 0x72, 0x20, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x75, 0x72, 0x61,
-0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x44, 0x6f, 0x6c, 0x61, 0x72, 0x20, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x75, 0x72,
-0x61, 0xd07, 0xd28, 0xd4d, 0xd24, 0xd4d, 0xd2f, 0xd7b, 0x20, 0xd30, 0xd42, 0xd2a, 0x3b, 0x3b, 0xd07, 0xd28, 0xd4d, 0xd24, 0xd4d, 0xd2f,
-0xd7b, 0x20, 0xd30, 0xd42, 0xd2a, 0x3b, 0x3b, 0x3b, 0x3b, 0xd07, 0xd28, 0xd4d, 0xd24, 0xd4d, 0xd2f, 0xd7b, 0x20, 0xd30, 0xd42, 0xd2a,
-0x65, 0x77, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x77, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x77, 0x72, 0x6f, 0x3b, 0x65, 0x77, 0x72,
-0x6f, 0x3b, 0x65, 0x77, 0x72, 0x6f, 0x54, 0x101, 0x72, 0x61, 0x20, 0x6f, 0x20, 0x41, 0x6f, 0x74, 0x65, 0x61, 0x72, 0x6f,
-0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x74, 0x101, 0x72, 0x61, 0x20, 0x6f, 0x20, 0x41, 0x6f, 0x74, 0x65, 0x61, 0x72,
-0x6f, 0x61, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a, 0x92f, 0x93e, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924,
-0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a, 0x92f, 0x93e, 0x3b, 0x3b, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930,
-0x941, 0x92a, 0x92f, 0x947, 0x41c, 0x43e, 0x43d, 0x433, 0x43e, 0x43b, 0x20, 0x442, 0x4e9, 0x433, 0x440, 0x4e9, 0x433, 0x3b, 0x3b, 0x41c,
-0x43e, 0x43d, 0x433, 0x43e, 0x43b, 0x20, 0x442, 0x4e9, 0x433, 0x440, 0x4e9, 0x433, 0x3b, 0x3b, 0x3b, 0x3b, 0x41c, 0x43e, 0x43d, 0x433,
-0x43e, 0x43b, 0x20, 0x442, 0x4e9, 0x433, 0x440, 0x4e9, 0x433, 0x928, 0x947, 0x92a, 0x93e, 0x932, 0x940, 0x20, 0x930, 0x942, 0x92a, 0x948,
-0x92f, 0x93e, 0x901, 0x3b, 0x3b, 0x928, 0x947, 0x92a, 0x93e, 0x932, 0x940, 0x20, 0x930, 0x942, 0x92a, 0x948, 0x92f, 0x93e, 0x901, 0x3b,
-0x3b, 0x3b, 0x3b, 0x928, 0x947, 0x92a, 0x93e, 0x932, 0x940, 0x20, 0x930, 0x942, 0x92a, 0x948, 0x92f, 0x93e, 0x901, 0x92d, 0x93e, 0x930,
-0x924, 0x940, 0x92f, 0x20, 0x930, 0x942, 0x92a, 0x93f, 0x901, 0x92f, 0x93e, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20,
-0x930, 0x942, 0x92a, 0x93f, 0x901, 0x92f, 0x93e, 0x3b, 0x3b, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x942,
-0x92a, 0x93f, 0x901, 0x92f, 0x93e, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x65, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x72, 0x3b, 0x3b,
-0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x6e, 0x6f, 0x72, 0x73, 0x6b,
-0x65, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x72, 0xb2d, 0xb3e, 0xb30, 0xb24, 0xb40, 0xb5f, 0x20, 0xb1f, 0xb19, 0xb4d, 0xb15, 0xb3e,
-0x3b, 0x3b, 0xb2d, 0xb3e, 0xb30, 0xb24, 0xb40, 0xb5f, 0x20, 0xb1f, 0xb19, 0xb4d, 0xb15, 0xb3e, 0x3b, 0x3b, 0x3b, 0x3b, 0xb2d, 0xb3e,
-0xb30, 0xb24, 0xb40, 0xb5f, 0x20, 0xb1f, 0xb19, 0xb4d, 0xb15, 0xb3e, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x6cd, 0x3b, 0x3b, 0x627, 0x641,
-0x63a, 0x627, 0x646, 0x6cd, 0x3b, 0x3b, 0x3b, 0x3b, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x6cd, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627,
-0x646, 0x6cd, 0x20, 0x6a9, 0x644, 0x62f, 0x627, 0x631, 0x647, 0x3b, 0x3b, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x6cd, 0x20,
-0x6a9, 0x644, 0x62f, 0x627, 0x631, 0x647, 0x3b, 0x3b, 0x3b, 0x3b, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x6cd, 0x20, 0x6a9,
-0x644, 0x62f, 0x627, 0x631, 0x6d2, 0x631, 0x6cc, 0x627, 0x644, 0x20, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x3b, 0x3b, 0x631, 0x6cc, 0x627,
-0x644, 0x20, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x3b, 0x3b, 0x3b, 0x3b, 0x631, 0x6cc, 0x627, 0x644, 0x20, 0x627, 0x6cc, 0x631, 0x627,
-0x646, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x6cc, 0x20, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x633, 0x62a, 0x627, 0x646, 0x3b, 0x3b, 0x627,
-0x641, 0x63a, 0x627, 0x646, 0x6cc, 0x20, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x633, 0x62a, 0x627, 0x646, 0x3b, 0x3b, 0x3b, 0x3b, 0x627,
-0x641, 0x63a, 0x627, 0x646, 0x6cc, 0x20, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x633, 0x62a, 0x627, 0x646, 0x7a, 0x142, 0x6f, 0x74, 0x79,
-0x20, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x3b, 0x3b, 0x7a, 0x142, 0x6f, 0x74, 0x79, 0x20, 0x70, 0x6f, 0x6c, 0x73, 0x6b,
-0x69, 0x3b, 0x3b, 0x7a, 0x142, 0x6f, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x65, 0x3b, 0x7a, 0x142, 0x6f,
-0x74, 0x79, 0x63, 0x68, 0x20, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x63, 0x68, 0x3b, 0x7a, 0x142, 0x6f, 0x74, 0x65, 0x67,
-0x6f, 0x20, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x65, 0x67, 0x6f, 0x52, 0x65, 0x61, 0x6c, 0x20, 0x62, 0x72, 0x61, 0x73,
-0x69, 0x6c, 0x65, 0x69, 0x72, 0x6f, 0x3b, 0x3b, 0x52, 0x65, 0x61, 0x6c, 0x20, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x65,
-0x69, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x52, 0x65, 0x61, 0x69, 0x73, 0x20, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x65,
-0x69, 0x72, 0x6f, 0x73, 0x6b, 0x77, 0x61, 0x6e, 0x7a, 0x61, 0x20, 0x61, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x6f, 0x3b,
-0x3b, 0x6b, 0x77, 0x61, 0x6e, 0x7a, 0x61, 0x20, 0x61, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b,
-0x6b, 0x77, 0x61, 0x6e, 0x7a, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x73, 0x63,
-0x75, 0x64, 0x6f, 0x20, 0x63, 0x61, 0x62, 0x6f, 0x2d, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x65,
-0x73, 0x63, 0x75, 0x64, 0x6f, 0x20, 0x63, 0x61, 0x62, 0x6f, 0x2d, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x6f, 0x3b,
-0x3b, 0x3b, 0x3b, 0x65, 0x73, 0x63, 0x75, 0x64, 0x6f, 0x73, 0x20, 0x63, 0x61, 0x62, 0x6f, 0x2d, 0x76, 0x65, 0x72, 0x64,
-0x69, 0x61, 0x6e, 0x6f, 0x73, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x64, 0x6f, 0x73, 0x20, 0x45, 0x73, 0x74, 0x61, 0x64,
-0x6f, 0x73, 0x20, 0x55, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x3b, 0x3b, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x64, 0x6f, 0x73,
-0x20, 0x45, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x73, 0x20, 0x55, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x3b, 0x3b, 0x3b, 0x3b, 0x64,
-0xf3, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x20, 0x64, 0x6f, 0x73, 0x20, 0x45, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x73, 0x20, 0x55,
-0x6e, 0x69, 0x64, 0x6f, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41,
-0x43, 0x29, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43,
-0x29, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x73, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45,
-0x41, 0x43, 0x29, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f,
-0x29, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f,
-0x29, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x73, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x43,
-0x45, 0x41, 0x4f, 0x29, 0x70, 0x61, 0x74, 0x61, 0x63, 0x61, 0x20, 0x6d, 0x61, 0x63, 0x61, 0x65, 0x6e, 0x73, 0x65, 0x3b,
-0x3b, 0x70, 0x61, 0x74, 0x61, 0x63, 0x61, 0x20, 0x6d, 0x61, 0x63, 0x61, 0x65, 0x6e, 0x73, 0x65, 0x3b, 0x3b, 0x3b, 0x3b,
-0x70, 0x61, 0x74, 0x61, 0x63, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x63, 0x61, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x6d, 0x65, 0x74,
-0x69, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x6d, 0x65,
-0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b,
-0x3b, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x61, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69, 0x63, 0x61, 0x6e,
-0x6f, 0x73, 0x64, 0x6f, 0x62, 0x72, 0x61, 0x20, 0x64, 0x65, 0x20, 0x53, 0xe3, 0x6f, 0x20, 0x54, 0x6f, 0x6d, 0xe9, 0x20,
-0x65, 0x20, 0x50, 0x72, 0xed, 0x6e, 0x63, 0x69, 0x70, 0x65, 0x3b, 0x3b, 0x64, 0x6f, 0x62, 0x72, 0x61, 0x20, 0x64, 0x65,
-0x20, 0x53, 0xe3, 0x6f, 0x20, 0x54, 0x6f, 0x6d, 0xe9, 0x20, 0x65, 0x20, 0x50, 0x72, 0xed, 0x6e, 0x63, 0x69, 0x70, 0x65,
-0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0x6f, 0x62, 0x72, 0x61, 0x73, 0x20, 0x64, 0x65, 0x20, 0x53, 0xe3, 0x6f, 0x20, 0x54, 0x6f,
-0x6d, 0xe9, 0x20, 0x65, 0x20, 0x50, 0x72, 0xed, 0x6e, 0x63, 0x69, 0x70, 0x65, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20,
-0x73, 0x75, 0xed, 0xe7, 0x6f, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x73, 0x75, 0xed, 0xe7, 0x6f, 0x3b,
-0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x73, 0x20, 0x73, 0x75, 0xed, 0xe7, 0x6f, 0x73, 0xa2d, 0xa3e, 0xa30,
-0xa24, 0xa40, 0x20, 0xa30, 0xa41, 0xa2a, 0xa07, 0xa06, 0x3b, 0x3b, 0xa2d, 0xa3e, 0xa30, 0xa24, 0xa40, 0x20, 0xa30, 0xa41, 0xa2a, 0xa07,
-0xa06, 0x3b, 0x3b, 0x3b, 0x3b, 0xa2d, 0xa3e, 0xa30, 0xa24, 0xa40, 0x20, 0xa30, 0xa41, 0xa2a, 0xa0f, 0x631, 0x648, 0x67e, 0x626, 0x6cc,
-0x6c1, 0x53, 0x6f, 0x6c, 0x20, 0x50, 0x65, 0x72, 0x75, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x6f,
-0x6c, 0x20, 0x70, 0x65, 0x72, 0x75, 0x61, 0x6e, 0x6f, 0x42, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x6e, 0x6f, 0x3b, 0x3b,
-0x3b, 0x3b, 0x3b, 0x3b, 0x42, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x6e, 0x6f, 0x44, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x44, 0xf3, 0x6c, 0x61, 0x72, 0x20,
-0x61, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x73, 0x76, 0x69, 0x7a, 0x7a,
-0x65, 0x72, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x73, 0x76, 0x69, 0x7a, 0x7a, 0x65, 0x72, 0x3b, 0x3b, 0x3b,
-0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x73, 0x76, 0x69, 0x7a, 0x7a, 0x65, 0x72, 0x6c, 0x65, 0x75, 0x20, 0x72, 0x6f,
-0x6d, 0xe2, 0x6e, 0x65, 0x73, 0x63, 0x3b, 0x3b, 0x6c, 0x65, 0x75, 0x20, 0x72, 0x6f, 0x6d, 0xe2, 0x6e, 0x65, 0x73, 0x63,
-0x3b, 0x3b, 0x6c, 0x65, 0x69, 0x20, 0x72, 0x6f, 0x6d, 0xe2, 0x6e, 0x65, 0x219, 0x74, 0x69, 0x3b, 0x3b, 0x6c, 0x65, 0x69,
-0x20, 0x72, 0x6f, 0x6d, 0xe2, 0x6e, 0x65, 0x219, 0x74, 0x69, 0x6c, 0x65, 0x75, 0x20, 0x6d, 0x6f, 0x6c, 0x64, 0x6f, 0x76,
-0x65, 0x6e, 0x65, 0x73, 0x63, 0x3b, 0x3b, 0x6c, 0x65, 0x75, 0x20, 0x6d, 0x6f, 0x6c, 0x64, 0x6f, 0x76, 0x65, 0x6e, 0x65,
-0x73, 0x63, 0x3b, 0x3b, 0x6c, 0x65, 0x69, 0x20, 0x6d, 0x6f, 0x6c, 0x64, 0x6f, 0x76, 0x65, 0x6e, 0x65, 0x219, 0x74, 0x69,
-0x3b, 0x3b, 0x6c, 0x65, 0x69, 0x20, 0x6d, 0x6f, 0x6c, 0x64, 0x6f, 0x76, 0x65, 0x6e, 0x65, 0x219, 0x74, 0x69, 0x440, 0x43e,
-0x441, 0x441, 0x438, 0x439, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x44c, 0x3b, 0x3b, 0x440, 0x43e, 0x441, 0x441,
-0x438, 0x439, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x44c, 0x3b, 0x3b, 0x440, 0x43e, 0x441, 0x441, 0x438, 0x439,
-0x441, 0x43a, 0x438, 0x445, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x44f, 0x3b, 0x440, 0x43e, 0x441, 0x441, 0x438, 0x439, 0x441, 0x43a, 0x438,
-0x445, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x435, 0x439, 0x3b, 0x440, 0x43e, 0x441, 0x441, 0x438, 0x439, 0x441, 0x43a, 0x43e, 0x433, 0x43e,
-0x20, 0x440, 0x443, 0x431, 0x43b, 0x44f, 0x431, 0x435, 0x43b, 0x43e, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x440, 0x443,
-0x431, 0x43b, 0x44c, 0x3b, 0x3b, 0x431, 0x435, 0x43b, 0x43e, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x440, 0x443, 0x431,
-0x43b, 0x44c, 0x3b, 0x3b, 0x431, 0x435, 0x43b, 0x43e, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x445, 0x20, 0x440, 0x443, 0x431, 0x43b,
-0x44f, 0x3b, 0x431, 0x435, 0x43b, 0x43e, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x445, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x435, 0x439,
-0x3b, 0x431, 0x435, 0x43b, 0x43e, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x43e, 0x433, 0x43e, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x44f, 0x43a,
-0x430, 0x437, 0x430, 0x445, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x442, 0x435, 0x43d, 0x433, 0x435, 0x3b, 0x3b, 0x43a, 0x430, 0x437, 0x430,
-0x445, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x442, 0x435, 0x43d, 0x433, 0x435, 0x3b, 0x3b, 0x43a, 0x430, 0x437, 0x430, 0x445, 0x441, 0x43a,
-0x438, 0x445, 0x20, 0x442, 0x435, 0x43d, 0x433, 0x435, 0x3b, 0x43a, 0x430, 0x437, 0x430, 0x445, 0x441, 0x43a, 0x438, 0x445, 0x20, 0x442,
-0x435, 0x43d, 0x433, 0x435, 0x3b, 0x43a, 0x430, 0x437, 0x430, 0x445, 0x441, 0x43a, 0x43e, 0x433, 0x43e, 0x20, 0x442, 0x435, 0x43d, 0x433,
-0x435, 0x43a, 0x438, 0x440, 0x433, 0x438, 0x437, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x441, 0x43e, 0x43c, 0x3b, 0x3b, 0x43a, 0x438, 0x440,
-0x433, 0x438, 0x437, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x441, 0x43e, 0x43c, 0x3b, 0x3b, 0x43a, 0x438, 0x440, 0x433, 0x438, 0x437, 0x441,
-0x43a, 0x438, 0x445, 0x20, 0x441, 0x43e, 0x43c, 0x430, 0x3b, 0x43a, 0x438, 0x440, 0x433, 0x438, 0x437, 0x441, 0x43a, 0x438, 0x445, 0x20,
-0x441, 0x43e, 0x43c, 0x43e, 0x432, 0x3b, 0x43a, 0x438, 0x440, 0x433, 0x438, 0x437, 0x441, 0x43a, 0x43e, 0x433, 0x43e, 0x20, 0x441, 0x43e,
-0x43c, 0x430, 0x43c, 0x43e, 0x43b, 0x434, 0x430, 0x432, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x43b, 0x435, 0x439, 0x3b, 0x3b, 0x43c, 0x43e,
-0x43b, 0x434, 0x430, 0x432, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x43b, 0x435, 0x439, 0x3b, 0x3b, 0x43c, 0x43e, 0x43b, 0x434, 0x430, 0x432,
-0x441, 0x43a, 0x438, 0x445, 0x20, 0x43b, 0x435, 0x44f, 0x3b, 0x43c, 0x43e, 0x43b, 0x434, 0x430, 0x432, 0x441, 0x43a, 0x438, 0x445, 0x20,
-0x43b, 0x435, 0x435, 0x432, 0x3b, 0x43c, 0x43e, 0x43b, 0x434, 0x430, 0x432, 0x441, 0x43a, 0x43e, 0x433, 0x43e, 0x20, 0x43b, 0x435, 0x44f,
-0x443, 0x43a, 0x440, 0x430, 0x438, 0x43d, 0x441, 0x43a, 0x430, 0x44f, 0x20, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x430, 0x3b, 0x3b, 0x443,
-0x43a, 0x440, 0x430, 0x438, 0x43d, 0x441, 0x43a, 0x430, 0x44f, 0x20, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x430, 0x3b, 0x3b, 0x443, 0x43a,
-0x440, 0x430, 0x438, 0x43d, 0x441, 0x43a, 0x438, 0x435, 0x20, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x44b, 0x3b, 0x443, 0x43a, 0x440, 0x430,
-0x438, 0x43d, 0x441, 0x43a, 0x438, 0x445, 0x20, 0x433, 0x440, 0x438, 0x432, 0x435, 0x43d, 0x3b, 0x443, 0x43a, 0x440, 0x430, 0x438, 0x43d,
-0x441, 0x43a, 0x43e, 0x439, 0x20, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x44b, 0x66, 0x61, 0x72, 0xe2, 0x6e, 0x67, 0x61, 0x20, 0x43,
-0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43, 0x29, 0x421, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x438, 0x43d, 0x430,
-0x440, 0x3b, 0x3b, 0x441, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x438, 0x43d, 0x430, 0x440, 0x3b, 0x3b, 0x441, 0x440, 0x43f,
-0x441, 0x43a, 0x430, 0x20, 0x434, 0x438, 0x43d, 0x430, 0x440, 0x430, 0x3b, 0x3b, 0x441, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x445, 0x20,
-0x434, 0x438, 0x43d, 0x430, 0x440, 0x430, 0x42, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x2d, 0x68, 0x65, 0x72, 0x63, 0x65,
-0x67, 0x6f, 0x76, 0x61, 0x10d, 0x6b, 0x61, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e,
-0x61, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x3b, 0x3b, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x2d, 0x68, 0x65,
-0x72, 0x63, 0x65, 0x67, 0x6f, 0x76, 0x61, 0x10d, 0x6b, 0x61, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62,
-0x69, 0x6c, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x3b, 0x3b, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f,
-0x2d, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67, 0x6f, 0x76, 0x61, 0x10d, 0x6b, 0x65, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72,
-0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x3b, 0x3b, 0x62, 0x6f, 0x73, 0x61, 0x6e,
-0x73, 0x6b, 0x6f, 0x2d, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67, 0x6f, 0x76, 0x61, 0x10d, 0x6b, 0x69, 0x68, 0x20, 0x6b, 0x6f,
-0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x69, 0x68, 0x20, 0x6d, 0x61, 0x72, 0x61, 0x6b, 0x61, 0x45,
-0x76, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x76, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x76, 0x72, 0x61, 0x3b, 0x3b, 0x65, 0x76, 0x72,
-0x61, 0x53, 0x72, 0x70, 0x73, 0x6b, 0x69, 0x20, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x3b, 0x3b, 0x73, 0x72, 0x70, 0x73, 0x6b,
-0x69, 0x20, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x3b, 0x3b, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x61, 0x20, 0x64, 0x69, 0x6e, 0x61,
-0x72, 0x61, 0x3b, 0x3b, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x69, 0x68, 0x20, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x61, 0x411, 0x43e,
-0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x2d, 0x445, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x430, 0x20,
-0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x3b,
-0x3b, 0x431, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x2d, 0x445, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447,
-0x43a, 0x430, 0x20, 0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440,
-0x43a, 0x430, 0x3b, 0x3b, 0x431, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x2d, 0x445, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e,
-0x432, 0x430, 0x447, 0x43a, 0x435, 0x20, 0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d, 0x435, 0x20,
-0x43c, 0x430, 0x440, 0x43a, 0x65, 0x3b, 0x3b, 0x431, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x2d, 0x445, 0x435, 0x440, 0x446,
-0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x438, 0x445, 0x20, 0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438,
-0x43b, 0x43d, 0x438, 0x445, 0x20, 0x43c, 0x430, 0x440, 0x430, 0x43a, 0x430, 0x415, 0x432, 0x440, 0x43e, 0x3b, 0x3b, 0x435, 0x432, 0x440,
-0x43e, 0x3b, 0x3b, 0x435, 0x432, 0x440, 0x430, 0x3b, 0x3b, 0x435, 0x432, 0x440, 0x430, 0x41b, 0x430, 0x440, 0x3b, 0x3b, 0x43b, 0x430,
-0x440, 0x3b, 0x3b, 0x3b, 0x3b, 0x43b, 0x430, 0x440, 0x44b, 0x421, 0x43e, 0x43c, 0x3b, 0x3b, 0x441, 0x43e, 0x43c, 0x3b, 0x3b, 0x3b,
-0x3b, 0x441, 0x43e, 0x43c, 0x44b, 0x44, 0x6f, 0x72, 0x61, 0x20, 0x72, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x6b, 0x61,
-0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0x64a, 0x20, 0x631, 0x67e, 0x64a, 0x3b, 0x3b, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627,
-0x646, 0x64a, 0x20, 0x631, 0x67e, 0x64a, 0x3b, 0x3b, 0x3b, 0x3b, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0x64a, 0x20, 0x631,
-0x67e, 0x64a, 0xdc1, 0xdca, 0x200d, 0xdbb, 0xdd3, 0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0x20, 0xdbb, 0xdd4, 0xdb4, 0xdd2, 0xdba, 0xdbd, 0x3b,
-0x3b, 0xdc1, 0xdca, 0x200d, 0xdbb, 0xdd3, 0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0x20, 0xdbb, 0xdd4, 0xdb4, 0xdd2, 0xdba, 0xdbd, 0x3b, 0x3b,
-0x3b, 0x3b, 0xdc1, 0xdca, 0x200d, 0xdbb, 0xdd3, 0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0x20, 0xdbb, 0xdd4, 0xdb4, 0xdd2, 0xdba, 0xdbd, 0x65,
-0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0xe1, 0x3b, 0x65, 0x75, 0x72, 0x61,
-0x3b, 0x65, 0x75, 0x72, 0x65, 0x76, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x76, 0x72, 0x6f, 0x3b, 0x65, 0x76, 0x72, 0x61, 0x3b,
-0x65, 0x76, 0x72, 0x69, 0x3b, 0x3b, 0x65, 0x76, 0x72, 0x6f, 0x76, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x6b, 0x61,
-0x20, 0x53, 0x6f, 0x6f, 0x6d, 0x61, 0x61, 0x6c, 0x69, 0x79, 0x61, 0x46, 0x61, 0x72, 0x61, 0x6e, 0x20, 0x4a, 0x61, 0x62,
-0x75, 0x75, 0x74, 0x69, 0x3b, 0x3b, 0x66, 0x61, 0x72, 0x61, 0x6e, 0x6b, 0x61, 0x20, 0x4a, 0x61, 0x62, 0x75, 0x75, 0x74,
-0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x61, 0x72, 0x61, 0x6e, 0x6b, 0x61, 0x20, 0x4a, 0x61, 0x62, 0x75, 0x75, 0x74, 0x69,
-0x42, 0x69, 0x72, 0x74, 0x61, 0x20, 0x49, 0x74, 0x6f, 0x6f, 0x62, 0x62, 0x69, 0x79, 0x61, 0x3b, 0x3b, 0x62, 0x69, 0x72,
-0x74, 0x61, 0x20, 0x49, 0x74, 0x6f, 0x6f, 0x62, 0x62, 0x69, 0x79, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x62, 0x69, 0x72, 0x74,
-0x61, 0x20, 0x49, 0x74, 0x6f, 0x6f, 0x62, 0x62, 0x69, 0x79, 0x61, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x6b, 0x61,
-0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x6b, 0x61, 0x20, 0x4b, 0x65,
-0x6e, 0x79, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x6b, 0x61, 0x20, 0x4b, 0x65, 0x6e,
-0x79, 0x61, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x6f, 0x3b, 0x3b, 0x70, 0x65,
-0x73, 0x6f, 0x20, 0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f,
-0x73, 0x20, 0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x6f, 0x73, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x62, 0x65,
-0x6c, 0x69, 0x63, 0x65, 0xf1, 0x6f, 0x3b, 0x3b, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x63, 0x65,
-0xf1, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x63, 0x65,
-0xf1, 0x6f, 0x73, 0x62, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x62, 0x6f, 0x6c, 0x69, 0x76, 0x69,
-0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x62, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x6e, 0x6f, 0x73, 0x72, 0x65, 0x61,
-0x6c, 0x20, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x65, 0xf1, 0x6f, 0x3b, 0x3b, 0x72, 0x65, 0x61, 0x6c, 0x20, 0x62, 0x72,
-0x61, 0x73, 0x69, 0x6c, 0x65, 0xf1, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x72, 0x65, 0x61, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x72,
-0x61, 0x73, 0x69, 0x6c, 0x65, 0xf1, 0x6f, 0x73, 0x50, 0x65, 0x73, 0x6f, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x6e, 0x6f,
-0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70, 0x65,
-0x73, 0x6f, 0x73, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x6e, 0x6f, 0x73, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x63, 0x6f, 0x6c,
-0x6f, 0x6d, 0x62, 0x69, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6d, 0x62,
-0x69, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6d, 0x62,
-0x69, 0x61, 0x6e, 0x6f, 0x73, 0x63, 0x6f, 0x6c, 0xf3, 0x6e, 0x20, 0x63, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x69, 0x63,
-0x65, 0x6e, 0x73, 0x65, 0x3b, 0x3b, 0x63, 0x6f, 0x6c, 0xf3, 0x6e, 0x20, 0x63, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x69,
-0x63, 0x65, 0x6e, 0x73, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x65, 0x73, 0x20, 0x63, 0x6f, 0x73,
-0x74, 0x61, 0x72, 0x72, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x63, 0x75, 0x62, 0x61,
-0x6e, 0x6f, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x63, 0x75, 0x62, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70,
-0x65, 0x73, 0x6f, 0x73, 0x20, 0x63, 0x75, 0x62, 0x61, 0x6e, 0x6f, 0x73, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x64, 0x6f, 0x6d,
-0x69, 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x69,
-0x63, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x20, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x69,
-0x63, 0x61, 0x6e, 0x6f, 0x73, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x65, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x75, 0x6e, 0x69,
-0x64, 0x65, 0x6e, 0x73, 0x65, 0x3b, 0x3b, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x20, 0x65, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x75,
-0x6e, 0x69, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x64, 0xf3, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x20, 0x65,
-0x73, 0x74, 0x61, 0x64, 0x6f, 0x75, 0x6e, 0x69, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f,
-0x20, 0x43, 0x46, 0x41, 0x20, 0x64, 0x65, 0x20, 0xc1, 0x66, 0x72, 0x69, 0x63, 0x61, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x72,
-0x61, 0x6c, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41, 0x20, 0x64, 0x65, 0x20, 0xc1, 0x66,
-0x72, 0x69, 0x63, 0x61, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x72, 0x61, 0x6e,
-0x63, 0x6f, 0x73, 0x20, 0x43, 0x46, 0x41, 0x20, 0x64, 0x65, 0x20, 0xc1, 0x66, 0x72, 0x69, 0x63, 0x61, 0x20, 0x43, 0x65,
-0x6e, 0x74, 0x72, 0x61, 0x6c, 0x71, 0x75, 0x65, 0x74, 0x7a, 0x61, 0x6c, 0x3b, 0x3b, 0x71, 0x75, 0x65, 0x74, 0x7a, 0x61,
-0x6c, 0x3b, 0x3b, 0x3b, 0x3b, 0x71, 0x75, 0x65, 0x74, 0x7a, 0x61, 0x6c, 0x65, 0x73, 0x6c, 0x65, 0x6d, 0x70, 0x69, 0x72,
-0x61, 0x20, 0x68, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x65, 0xf1, 0x6f, 0x3b, 0x3b, 0x6c, 0x65, 0x6d, 0x70, 0x69, 0x72, 0x61,
-0x20, 0x68, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x65, 0xf1, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x6c, 0x65, 0x6d, 0x70, 0x69, 0x72,
-0x61, 0x73, 0x20, 0x68, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x65, 0xf1, 0x6f, 0x73, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x6d, 0x65,
-0x78, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x6d, 0x65, 0x78, 0x69, 0x63, 0x61, 0x6e,
-0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x20, 0x6d, 0x65, 0x78, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x73,
-0x63, 0xf3, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x20, 0x6e, 0x69, 0x63, 0x61, 0x72, 0x61, 0x67, 0xfc, 0x65, 0x6e, 0x73, 0x65,
-0x3b, 0x3b, 0x63, 0xf3, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x20, 0x6e, 0x69, 0x63, 0x61, 0x72, 0x61, 0x67, 0xfc, 0x65, 0x6e,
-0x73, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x63, 0xf3, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x73, 0x20, 0x6e, 0x69, 0x63, 0x61, 0x72,
-0x61, 0x67, 0xfc, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x62, 0x61, 0x6c, 0x62, 0x6f, 0x61, 0x20, 0x70, 0x61, 0x6e, 0x61, 0x6d,
-0x65, 0xf1, 0x6f, 0x3b, 0x3b, 0x62, 0x61, 0x6c, 0x62, 0x6f, 0x61, 0x20, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x65, 0xf1, 0x6f,
-0x3b, 0x3b, 0x3b, 0x3b, 0x62, 0x61, 0x6c, 0x62, 0x6f, 0x61, 0x73, 0x20, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x65, 0xf1, 0x6f,
-0x73, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0xed, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x79, 0x6f, 0x3b, 0x3b,
-0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0xed, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x79, 0x6f, 0x3b, 0x3b, 0x3b,
-0x3b, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0xed, 0x65, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x79, 0x6f,
-0x73, 0x73, 0x6f, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x75, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x73, 0x6f, 0x6c, 0x20, 0x70, 0x65,
-0x72, 0x75, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x73, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x70, 0x65, 0x72, 0x75, 0x61,
-0x6e, 0x6f, 0x73, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x6f, 0x3b, 0x3b, 0x70, 0x65,
-0x73, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x73,
-0x20, 0x66, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x6f, 0x73, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x75, 0x72, 0x75, 0x67, 0x75,
-0x61, 0x79, 0x6f, 0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x75, 0x72, 0x75, 0x67, 0x75, 0x61, 0x79, 0x6f, 0x3b, 0x3b,
-0x3b, 0x3b, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x20, 0x75, 0x72, 0x75, 0x67, 0x75, 0x61, 0x79, 0x6f, 0x73, 0x62, 0x6f, 0x6c,
-0xed, 0x76, 0x61, 0x72, 0x20, 0x73, 0x6f, 0x62, 0x65, 0x72, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x62, 0x6f, 0x6c, 0xed, 0x76,
-0x61, 0x72, 0x20, 0x73, 0x6f, 0x62, 0x65, 0x72, 0x61, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x62, 0x6f, 0x6c, 0xed, 0x76,
-0x61, 0x72, 0x65, 0x73, 0x20, 0x73, 0x6f, 0x62, 0x65, 0x72, 0x61, 0x6e, 0x6f, 0x73, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e,
-0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c,
-0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x3b, 0x3b, 0x3b, 0x3b,
-0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x7a, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61,
-0x46, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x3b, 0x3b, 0x66, 0x61,
-0x72, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x66, 0x61,
-0x72, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x7a, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e,
-0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67,
-0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e,
-0x67, 0x69, 0x20, 0x7a, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20,
-0x79, 0x61, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20,
-0x79, 0x61, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67,
-0x69, 0x20, 0x7a, 0x61, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72,
-0x6f, 0x6e, 0x61, 0x3b, 0x3b, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x61, 0x3b, 0x3b, 0x3b,
-0x3b, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, 0x61, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x6f, 0x72, 0x421, 0x43e, 0x43c, 0x43e, 0x43d,
-0x4e3, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x421, 0x43e, 0x43c, 0x43e, 0x43d, 0x4e3, 0xb87, 0xba8, 0xbcd, 0xba4, 0xbbf, 0xbaf, 0x20,
-0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd, 0x3b, 0x3b, 0xb87, 0xba8, 0xbcd, 0xba4, 0xbbf, 0xbaf, 0x20, 0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf,
-0xbcd, 0x3b, 0x3b, 0x3b, 0x3b, 0xb87, 0xba8, 0xbcd, 0xba4, 0xbbf, 0xbaf, 0x20, 0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd, 0xb95, 0xbb3,
-0xbcd, 0xbae, 0xbb2, 0xbc7, 0xbb7, 0xbbf, 0xbaf, 0xba9, 0xbcd, 0x20, 0xbb0, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbbf, 0xb9f, 0xbcd, 0x3b, 0x3b,
-0xbae, 0xbb2, 0xbc7, 0xbb7, 0xbbf, 0xbaf, 0xba9, 0xbcd, 0x20, 0xbb0, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbbf, 0xb9f, 0xbcd, 0x3b, 0x3b, 0x3b,
-0x3b, 0xbae, 0xbb2, 0xbc7, 0xbb7, 0xbbf, 0xbaf, 0xba9, 0xbcd, 0x20, 0xbb0, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbbf, 0xb9f, 0xbcd, 0xb95, 0xbb3,
-0xbcd, 0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0x20, 0xb9f, 0xbbe, 0xbb2, 0xbb0, 0xbcd, 0x3b, 0x3b,
-0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0x20, 0xb9f, 0xbbe, 0xbb2, 0xbb0, 0xbcd, 0x3b, 0x3b, 0x3b,
-0x3b, 0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0x20, 0xb9f, 0xbbe, 0xbb2, 0xbb0, 0xbcd, 0xb95, 0xbb3,
-0xbcd, 0xb87, 0xbb2, 0xb99, 0xbcd, 0xb95, 0xbc8, 0x20, 0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd, 0x3b, 0x3b, 0xb87, 0xbb2, 0xb99, 0xbcd,
-0xb95, 0xbc8, 0x20, 0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd, 0x3b, 0x3b, 0x3b, 0x3b, 0xb87, 0xbb2, 0xb99, 0xbcd, 0xb95, 0xbc8, 0x20,
-0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd, 0xb95, 0xbb3, 0xbcd, 0x420, 0x43e, 0x441, 0x441, 0x438, 0x44f, 0x20, 0x441, 0x443, 0x43c, 0x44b,
-0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x441, 0x443, 0x43c, 0xc30, 0xc42, 0xc2a, 0xc3e, 0xc2f, 0xc3f, 0x3b, 0x3b, 0xc30, 0xc42, 0xc2a,
-0xc3e, 0xc2f, 0xc3f, 0x3b, 0x3b, 0x3b, 0x3b, 0xc30, 0xc42, 0xc2a, 0xc3e, 0xc2f, 0xc32, 0xc41, 0xe1a, 0xe32, 0xe17, 0x3b, 0x3b, 0x3b,
-0x3b, 0x3b, 0x3b, 0xe1a, 0xe32, 0xe17, 0xe44, 0xe17, 0xe22, 0xf61, 0xf74, 0xf0b, 0xf68, 0xf53, 0xf0b, 0xf62, 0xf92, 0xfb1, 0xf0b, 0xf42,
-0xf62, 0xf0b, 0xf66, 0xf92, 0xf7c, 0xf62, 0xf0b, 0x50, 0x61, 0x2bb, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x66, 0x61, 0x6b, 0x61, 0x74,
-0x6f, 0x6e, 0x67, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x50, 0x61, 0x2bb, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x66, 0x61,
-0x6b, 0x61, 0x74, 0x6f, 0x6e, 0x67, 0x61, 0x54, 0xfc, 0x72, 0x6b, 0x20, 0x4c, 0x69, 0x72, 0x61, 0x73, 0x131, 0x3b, 0x3b,
-0x54, 0xfc, 0x72, 0x6b, 0x20, 0x6c, 0x69, 0x72, 0x61, 0x73, 0x131, 0x3b, 0x3b, 0x3b, 0x3b, 0x54, 0xfc, 0x72, 0x6b, 0x20,
-0x6c, 0x69, 0x72, 0x61, 0x73, 0x131, 0x54, 0xfc, 0x72, 0x6b, 0x6d, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x64, 0x79,
-0x3b, 0x3b, 0x74, 0xfc, 0x72, 0x6b, 0x6d, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x64, 0x79, 0x3b, 0x3b, 0x3b, 0x3b,
-0x74, 0xfc, 0x72, 0x6b, 0x6d, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x64, 0x79, 0x62c, 0x6c7, 0x6ad, 0x6af, 0x648, 0x20,
-0x64a, 0x6c8, 0x6d5, 0x646, 0x649, 0x3b, 0x3b, 0x62c, 0x6c7, 0x6ad, 0x6af, 0x648, 0x20, 0x64a, 0x6c8, 0x6d5, 0x646, 0x649, 0x3b, 0x3b,
-0x3b, 0x3b, 0x62c, 0x6c7, 0x6ad, 0x6af, 0x648, 0x20, 0x64a, 0x6c8, 0x6d5, 0x646, 0x649, 0x443, 0x43a, 0x440, 0x430, 0x457, 0x43d, 0x441,
-0x44c, 0x43a, 0x430, 0x20, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x44f, 0x3b, 0x3b, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x44f, 0x3b, 0x3b,
-0x433, 0x440, 0x438, 0x432, 0x43d, 0x456, 0x3b, 0x433, 0x440, 0x438, 0x432, 0x435, 0x43d, 0x44c, 0x3b, 0x433, 0x440, 0x438, 0x432, 0x43d,
-0x456, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc, 0x6c1, 0x3b, 0x3b, 0x67e, 0x627, 0x6a9,
-0x633, 0x62a, 0x627, 0x646, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc, 0x6c1, 0x3b, 0x3b, 0x3b, 0x3b, 0x67e, 0x627, 0x6a9, 0x633, 0x62a,
-0x627, 0x646, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc, 0x6c1, 0x628, 0x6be, 0x627, 0x631, 0x62a, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc,
-0x6c1, 0x3b, 0x3b, 0x628, 0x6be, 0x627, 0x631, 0x62a, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc, 0x6c1, 0x3b, 0x3b, 0x3b, 0x3b, 0x628,
-0x6be, 0x627, 0x631, 0x62a, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6d2, 0x4f, 0x2018, 0x7a, 0x62, 0x65, 0x6b, 0x69, 0x73, 0x74, 0x6f,
-0x6e, 0x20, 0x73, 0x6f, 0x2018, 0x6d, 0x69, 0x3b, 0x3b, 0x4f, 0x2018, 0x7a, 0x62, 0x65, 0x6b, 0x69, 0x73, 0x74, 0x6f, 0x6e,
-0x20, 0x73, 0x6f, 0x2018, 0x6d, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x4f, 0x2018, 0x7a, 0x62, 0x65, 0x6b, 0x69, 0x73, 0x74, 0x6f,
-0x6e, 0x20, 0x73, 0x6f, 0x2018, 0x6d, 0x69, 0x40e, 0x437, 0x431, 0x435, 0x43a, 0x438, 0x441, 0x442, 0x43e, 0x43d, 0x20, 0x441, 0x45e,
-0x43c, 0x3b, 0x3b, 0x40e, 0x437, 0x431, 0x435, 0x43a, 0x438, 0x441, 0x442, 0x43e, 0x43d, 0x20, 0x441, 0x45e, 0x43c, 0x3b, 0x3b, 0x3b,
-0x3b, 0x40e, 0x437, 0x431, 0x435, 0x43a, 0x438, 0x441, 0x442, 0x43e, 0x43d, 0x20, 0x441, 0x45e, 0x43c, 0x110, 0x1ed3, 0x6e, 0x67, 0x20,
-0x56, 0x69, 0x1ec7, 0x74, 0x20, 0x4e, 0x61, 0x6d, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x110, 0x1ed3, 0x6e, 0x67, 0x20, 0x56,
-0x69, 0x1ec7, 0x74, 0x20, 0x4e, 0x61, 0x6d, 0x50, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79, 0x64, 0x61, 0x69, 0x6e, 0x3b,
-0x70, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79, 0x64, 0x61, 0x69, 0x6e, 0x3b, 0x62, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72,
-0x79, 0x64, 0x61, 0x69, 0x6e, 0x3b, 0x62, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79, 0x64, 0x61, 0x69, 0x6e, 0x3b, 0x70,
-0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79, 0x64, 0x61, 0x69, 0x6e, 0x3b, 0x70, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79,
-0x64, 0x61, 0x69, 0x6e, 0x3b, 0x70, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79, 0x64, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x61,
-0x6e, 0x63, 0x20, 0x43, 0x46, 0x41, 0x20, 0x62, 0x75, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x20, 0x53, 0x6f, 0x77, 0x77,
-0x75, 0x2d, 0x6a, 0x61, 0x6e, 0x74, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46,
-0x41, 0x20, 0x79, 0x75, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x20, 0x53, 0x6f, 0x77, 0x77, 0x75, 0x2d, 0x6a, 0x61, 0x6e,
-0x74, 0x69, 0x52, 0x61, 0x6e, 0x64, 0x69, 0x20, 0x79, 0x61, 0x73, 0x65, 0x4d, 0x7a, 0x61, 0x6e, 0x7a, 0x69, 0x20, 0x41,
-0x66, 0x72, 0x69, 0x6b, 0x61, 0x3b, 0x3b, 0x69, 0x52, 0x61, 0x6e, 0x64, 0x69, 0x20, 0x59, 0x61, 0x73, 0x65, 0x4d, 0x7a,
-0x61, 0x6e, 0x7a, 0x69, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x3b, 0x3b, 0x3b, 0x3b, 0x69, 0x52, 0x61, 0x6e, 0x64,
-0x69, 0x20, 0x79, 0x61, 0x73, 0x65, 0x4d, 0x7a, 0x61, 0x6e, 0x7a, 0x69, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x4e,
-0xe1, 0xec, 0x72, 0xe0, 0x20, 0x74, 0x69, 0x20, 0x4f, 0x72, 0xed, 0x6c, 0x1eb9, 0x300, 0x2d, 0xe8, 0x64, 0xe8, 0x20, 0x4e,
-0xe0, 0xec, 0x6a, 0xed, 0x72, 0xed, 0xe0, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x4e, 0xe1, 0xed, 0x72, 0xe0, 0x20, 0x4e,
-0xe0, 0xec, 0x6a, 0xed, 0x72, 0xed, 0xe0, 0x46, 0x61, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x20, 0x74, 0x69, 0x20, 0x4f, 0x72,
-0xed, 0x6c, 0x25b, 0x301, 0xe8, 0x64, 0x65, 0x20, 0x42, 0x49, 0x4b, 0x45, 0x41, 0x4f, 0x69, 0x2d, 0x53, 0x6f, 0x75, 0x74,
-0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x61, 0x6e, 0x64, 0x3b, 0x3b, 0x69, 0x2d, 0x53, 0x6f,
-0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x61, 0x6e, 0x64, 0x3b, 0x3b, 0x3b, 0x3b,
-0x69, 0x2d, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x61, 0x6e, 0x64,
-0x42, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67, 0x6f, 0x76, 0x61, 0x10d, 0x6b, 0x61,
-0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x61,
-0x3b, 0x3b, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67, 0x6f, 0x76, 0x61, 0x10d,
-0x6b, 0x61, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x72,
-0x6b, 0x61, 0x3b, 0x3b, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67, 0x6f, 0x76,
-0x61, 0x10d, 0x6b, 0x65, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x65, 0x20, 0x6d,
-0x61, 0x72, 0x6b, 0x65, 0x3b, 0x3b, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67,
-0x6f, 0x76, 0x61, 0x10d, 0x6b, 0x69, 0x68, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e,
-0x69, 0x68, 0x20, 0x6d, 0x61, 0x72, 0x61, 0x6b, 0x61, 0x41a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b,
-0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x3b, 0x3b, 0x431, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x2d, 0x445,
-0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x430, 0x20, 0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438,
-0x431, 0x438, 0x43b, 0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x3b, 0x3b, 0x431, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a,
-0x43e, 0x2d, 0x445, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x435, 0x20, 0x43a, 0x43e, 0x43d, 0x432, 0x435,
-0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d, 0x435, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x435, 0x3b, 0x3b, 0x431, 0x43e, 0x441, 0x430,
-0x43d, 0x441, 0x43a, 0x43e, 0x2d, 0x445, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x438, 0x445, 0x20, 0x43a,
-0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d, 0x438, 0x445, 0x20, 0x43c, 0x430, 0x440, 0x430, 0x43a, 0x430,
-0x47, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x53, 0x69, 0x64, 0x69, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a,
-0x92f, 0x93e, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a, 0x92f, 0x93e,
-0x4e, 0x61, 0x1ecb, 0x72, 0x61, 0x53, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79,
-0x61, 0x67, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x73, 0x69, 0x256, 0x69, 0x3b, 0x3b, 0x67, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x73,
-0x69, 0x256, 0x69, 0x3b, 0x3b, 0x3b, 0x3b, 0x67, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x73, 0x69, 0x256, 0x69, 0x263, 0x65, 0x74,
-0x6f, 0x256, 0x6f, 0x66, 0x65, 0x20, 0x61, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x67, 0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x66,
-0x72, 0x61, 0x6e, 0x63, 0x20, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x3b, 0x3b, 0x263, 0x65, 0x74, 0x6f, 0x256, 0x6f, 0x66, 0x65,
-0x20, 0x61, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x67, 0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20,
-0x42, 0x43, 0x45, 0x41, 0x4f, 0x3b, 0x3b, 0x3b, 0x3b, 0x263, 0x65, 0x74, 0x6f, 0x256, 0x6f, 0x66, 0x65, 0x20, 0x61, 0x66,
-0x72, 0x69, 0x6b, 0x61, 0x67, 0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x42, 0x43, 0x45,
-0x41, 0x4f, 0x50, 0x69, 0x73, 0x6f, 0x20, 0x6e, 0x67, 0x20, 0x50, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61, 0x73, 0x3b,
-0x3b, 0x70, 0x69, 0x73, 0x6f, 0x20, 0x6e, 0x67, 0x20, 0x50, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61, 0x73, 0x3b, 0x3b,
-0x3b, 0x3b, 0x70, 0x69, 0x73, 0x6f, 0x20, 0x6e, 0x67, 0x20, 0x50, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61, 0x73, 0x53,
-0x63, 0x68, 0x77, 0x69, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x3b, 0x3b, 0x53, 0x63, 0x68,
-0x77, 0x69, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x3b, 0x3b, 0x3b, 0x3b, 0x53, 0x63, 0x68,
-0x77, 0x69, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x45, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b,
-0x3b, 0x3b, 0x3b, 0x45, 0x75, 0x72, 0x6f, 0x6e, 0x6f, 0x72, 0x67, 0x67, 0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e,
-0x6f, 0x3b, 0x3b, 0x6e, 0x6f, 0x72, 0x67, 0x67, 0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e, 0x6f, 0x3b, 0x6e, 0x6f,
-0x72, 0x67, 0x67, 0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x6e, 0x6f, 0x72, 0x67, 0x67,
-0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e, 0x6f, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b,
-0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x72, 0x75, 0x6f, 0x167, 0x167, 0x61, 0x20, 0x6b, 0x72,
-0x75, 0x76, 0x64, 0x6e, 0x6f, 0x3b, 0x3b, 0x72, 0x75, 0x6f, 0x167, 0x167, 0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e,
-0x6f, 0x3b, 0x72, 0x75, 0x6f, 0x167, 0x167, 0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e, 0x6f, 0x3b, 0x3b, 0x3b, 0x72,
-0x75, 0x6f, 0x167, 0x167, 0x61, 0x20, 0x6b, 0x72, 0x75, 0x76, 0x64, 0x6e, 0x6f, 0x4d, 0x62, 0x75, 0x75, 0x257, 0x75, 0x20,
-0x53, 0x65, 0x65, 0x66, 0x61, 0x61, 0x20, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x4d, 0x62, 0x75, 0x75, 0x257, 0x69, 0x20, 0x53,
-0x65, 0x65, 0x66, 0x61, 0x61, 0x20, 0x42, 0x45, 0x41, 0x43, 0x44, 0x61, 0x6c, 0x61, 0x73, 0x69, 0x20, 0x47, 0x61, 0x6d,
-0x6d, 0x62, 0x69, 0x44, 0x6f, 0x6c, 0x61, 0x61, 0x72, 0x20, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x69, 0x79, 0x61, 0x61, 0x55,
-0x67, 0x69, 0x79, 0x79, 0x61, 0x20, 0x4d, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x69, 0x4e, 0x61, 0x79, 0x72, 0x61, 0x61,
-0x20, 0x4e, 0x69, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x61, 0x4c, 0x65, 0x77, 0x6f, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x72,
-0x61, 0x61, 0x20, 0x4c, 0x69, 0x79, 0x6f, 0x6e, 0x43, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b,
-0x65, 0x6e, 0x79, 0x61, 0x4e, 0x6a, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x65, 0x65, 0x6c, 0x20, 0x4b, 0x65, 0x6e,
-0x79, 0x61, 0x4d, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x65, 0x20, 0x4d, 0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69,
-0x71, 0x75, 0x65, 0x44, 0x6f, 0x6c, 0x61, 0x20, 0x79, 0x61, 0x73, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x6c, 0x69, 0x6b, 0x61,
-0x68, 0x65, 0x6c, 0x65, 0x72, 0x69, 0x20, 0x73, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x2d30, 0x2d37,
-0x2d54, 0x2d49, 0x2d4e, 0x20, 0x2d4f, 0x20, 0x2d4d, 0x2d4e, 0x2d56, 0x2d54, 0x2d49, 0x2d31, 0x61, 0x64, 0x72, 0x69, 0x6d, 0x20, 0x6e, 0x20,
-0x6c, 0x6d, 0x263, 0x72, 0x69, 0x62, 0x41, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x41, 0x7a, 0x7a, 0x61, 0x79, 0x72, 0x69,
-0x3b, 0x3b, 0x41, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x6e, 0x20, 0x5a, 0x7a, 0x61, 0x79, 0x65, 0x72, 0x3b, 0x3b, 0x3b,
-0x3b, 0x49, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x65, 0x6e, 0x20, 0x6e, 0x20, 0x5a, 0x7a, 0x61, 0x79, 0x65, 0x72, 0x45, 0x73,
-0x68, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x53, 0x68, 0x69,
-0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x48, 0x75, 0x74, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x73,
-0x65, 0x66, 0x61, 0x20, 0x46, 0x72, 0x61, 0x14b, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x55, 0x53, 0x20, 0x13a0,
-0x13d5, 0x13b3, 0x3b, 0x3b, 0x55, 0x53, 0x20, 0x13a0, 0x13d5, 0x13b3, 0x3b, 0x3b, 0x3b, 0x3b, 0x55, 0x53, 0x20, 0x13a0, 0x13d5, 0x13b3,
-0x72, 0x6f, 0x75, 0x70, 0x69, 0x20, 0x6d, 0x6f, 0x72, 0x69, 0x73, 0x69, 0x65, 0x6e, 0x53, 0x68, 0x69, 0x6c, 0xed, 0x69,
-0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0xed, 0x61, 0x53, 0x69, 0x6c, 0x69,
-0x6e, 0x67, 0x69, 0x20, 0x65, 0x79, 0x61, 0x20, 0x59, 0x75, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x53, 0x6b, 0x75, 0x64, 0x75,
-0x20, 0x4b, 0x61, 0x62, 0x75, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x75, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x53,
-0x6b, 0x75, 0x64, 0x75, 0x20, 0x4b, 0x61, 0x62, 0x75, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x75, 0x53, 0x69, 0x6c,
-0x69, 0x6e, 0x67, 0x69, 0x74, 0x61, 0x62, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x4e, 0x61, 0x6d, 0x69,
-0x62, 0x69, 0x61, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x69, 0x49, 0x72, 0x6f, 0x70, 0x69, 0x79, 0x69, 0x61, 0x6e,
-0xed, 0x20, 0x65, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x49, 0x72, 0x6f, 0x70, 0x69, 0x79, 0x69, 0x61, 0x6e, 0xed, 0x20,
-0x65, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x53, 0x69, 0x72, 0x69, 0x6e, 0x6a, 0x69, 0x20, 0x79, 0x61,
-0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61,
-0x6e, 0x64, 0x68, 0x61, 0x6e, 0x69, 0x61, 0x41, 0x6e, 0x67, 0x6f, 0x2019, 0x6f, 0x74, 0x6f, 0x6c, 0x20, 0x6c, 0x6f, 0x6b,
-0x2019, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x41, 0x6e, 0x67, 0x6f, 0x2019, 0x6f, 0x74, 0x6f, 0x6c, 0x20, 0x6c, 0x6f,
-0x6b, 0x2019, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x43, 0x46, 0x41, 0x20, 0x46, 0x72, 0x61, 0x14b, 0x20, 0x28, 0x42, 0x43,
-0x45, 0x41, 0x4f, 0x29, 0x53, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x61, 0x72, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61,
-0x44, 0x65, 0x72, 0x68, 0x65, 0x6d, 0x20, 0x55, 0x6d, 0x65, 0x1e5b, 0x1e5b, 0x75, 0x6b, 0x69, 0x930, 0x93e, 0x902, 0x420, 0x43e,
-0x441, 0x441, 0x438, 0x439, 0x43d, 0x20, 0x441, 0x43e, 0x43c, 0x3b, 0x3b, 0x420, 0x43e, 0x441, 0x441, 0x438, 0x439, 0x43d, 0x20, 0x441,
-0x43e, 0x43c, 0x3b, 0x3b, 0x3b, 0x3b, 0x420, 0x43e, 0x441, 0x441, 0x438, 0x439, 0x43d, 0x20, 0x441, 0x43e, 0x44c, 0x43c, 0x430, 0x448,
-0x440, 0x461, 0x441, 0x441, 0x456, 0x301, 0x439, 0x441, 0x43a, 0x457, 0x439, 0x20, 0x440, 0xa64b, 0x301, 0x431, 0x43b, 0x44c, 0x3b, 0x3b,
-0x3b, 0x3b, 0x3b, 0x3b, 0x440, 0x461, 0x441, 0x441, 0x456, 0x301, 0x439, 0x441, 0x43a, 0x430, 0x433, 0x461, 0x20, 0x440, 0xa64b, 0x431,
-0x43b, 0x467, 0x300, 0x4e, 0x66, 0x61, 0x6c, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x75,
-0x43, 0x46, 0x41, 0x20, 0x46, 0xe0, 0x6c, 0xe2, 0x14b, 0x20, 0x42, 0x45, 0x41, 0x43, 0x46, 0x72, 0x1ce, 0x14b, 0x20, 0x43,
-0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43, 0x29, 0x73, 0x65, 0x65, 0x66, 0x61, 0x20, 0x79, 0x61, 0x74, 0x69, 0x20,
-0x42, 0x43, 0x45, 0x41, 0x4f, 0x46, 0x259, 0x6c, 0xe1, 0x14b, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43,
-0x29, 0x66, 0x72, 0xe1, 0x14b, 0x73, 0x6f, 0x6c, 0x61, 0x69, 0x20, 0x42, 0x45, 0x41, 0x43, 0x46, 0x72, 0x61, 0x14b, 0x20,
-0x43, 0x46, 0x41, 0x20, 0x42, 0x45, 0x41, 0x43, 0x410, 0x440, 0x430, 0x441, 0x441, 0x44b, 0x44b, 0x439, 0x430, 0x20, 0x441, 0x43e,
-0x43b, 0x43a, 0x443, 0x43e, 0x431, 0x430, 0x439, 0x430, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x410, 0x440, 0x430, 0x441, 0x441, 0x44b,
-0x44b, 0x439, 0x430, 0x20, 0x441, 0x43e, 0x43b, 0x43a, 0x443, 0x43e, 0x431, 0x430, 0x439, 0x430, 0x49, 0x68, 0x65, 0x6c, 0x61, 0x20,
-0x79, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x61, 0xa55e, 0xa524, 0xa52b, 0xa569, 0x20, 0xa55c, 0xa55e, 0xa54c,
-0x4c, 0x61, 0x69, 0x62, 0x68, 0x69, 0x79, 0x61, 0x20, 0x44, 0x61, 0x6c, 0x61, 0x46, 0x25b, 0x6c, 0xe2, 0x14b, 0x73, 0x68,
-0x69, 0x72, 0xe8, 0x66, 0x65, 0x6c, 0xe1, 0x14b, 0x20, 0x43, 0x46, 0x41, 0xd804, 0xdd1d, 0xd804, 0xdd01, 0xd804, 0xdd23, 0xd804, 0xdd18,
-0xd804, 0xdd2c, 0xd804, 0xdd25, 0xd804, 0xdd28, 0x20, 0xd804, 0xdd11, 0xd804, 0xdd2c, 0xd804, 0xdd0b, 0x3b, 0x3b, 0xd804, 0xdd1d, 0xd804, 0xdd01, 0xd804,
-0xdd23, 0xd804, 0xdd18, 0xd804, 0xdd2c, 0xd804, 0xdd25, 0xd804, 0xdd28, 0x20, 0xd804, 0xdd11, 0xd804, 0xdd2c, 0xd804, 0xdd0b, 0x3b, 0x3b, 0x3b, 0x3b,
-0xd804, 0xdd1d, 0xd804, 0xdd01, 0xd804, 0xdd23, 0xd804, 0xdd18, 0xd804, 0xdd2c, 0xd804, 0xdd25, 0xd804, 0xdd28, 0x20, 0xd804, 0xdd11, 0xd804, 0xdd2c, 0xd804,
-0xdd0b, 0xd804, 0xdd03, 0xd804, 0xdd28, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0xd804, 0xdd18, 0xd804, 0xdd28, 0xd804, 0xdd20, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x20,
-0xd804, 0xdd22, 0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd28, 0x3b, 0x3b, 0xd804, 0xdd03, 0xd804, 0xdd28, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0xd804, 0xdd18,
-0xd804, 0xdd28, 0xd804, 0xdd20, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x20, 0xd804, 0xdd22, 0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd28, 0x3b, 0x3b, 0x3b,
-0x3b, 0xd804, 0xdd03, 0xd804, 0xdd28, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0xd804, 0xdd18, 0xd804, 0xdd28, 0xd804, 0xdd20, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x20,
-0xd804, 0xdd22, 0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd28, 0x62f, 0x6cc, 0x646, 0x627, 0x631, 0x6cc, 0x20, 0x639, 0x6ce, 0x631, 0x627, 0x642,
-0x6cc, 0x695, 0x6cc, 0x627, 0x6b5, 0x6cc, 0x20, 0x626, 0x6ce, 0x631, 0x627, 0x646, 0x6cc, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65,
-0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x65,
-0x75, 0x72, 0x6f, 0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x3b, 0x65, 0x75, 0x72, 0x61, 0x6a, 0x3b, 0x65, 0x75, 0x72, 0x61,
-0x3b, 0x3b, 0x65, 0x75, 0x72, 0x6f, 0x77, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x20, 0x631, 0x6cc, 0x627, 0x644, 0x3b, 0x3b, 0x3b,
-0x3b, 0x3b, 0x3b, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x20, 0x631, 0x6cc, 0x627, 0x644, 0x6e2f, 0x5e63, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
-0x3b, 0x6e2f, 0x5e63, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20, 0x50, 0x69, 0x73, 0x6f, 0x3b, 0x3b,
-0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x69, 0x73, 0x6f, 0x3b, 0x3b, 0x3b, 0x3b, 0x4d,
-0x67, 0x61, 0x20, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x69, 0x73, 0x6f
+static constexpr char16_t currency_display_name_data[] = {
+0x53, 0x75, 0x69, 0x64, 0x2d, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61,
+0x6e, 0x73, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x69,
+0x62, 0x69, 0x65, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
+0x43, 0x46, 0x41, 0x20, 0x46, 0xe0, 0x6c, 0xe2, 0x14b, 0x20, 0x42, 0x45,
+0x41, 0x43, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x53, 0x69, 0x64, 0x69,
+0x46, 0x72, 0xe2, 0x6e, 0x6b, 0x65, 0x20, 0x43, 0x46, 0x41, 0x4c, 0x65,
+0x6b, 0x75, 0x20, 0x73, 0x68, 0x71, 0x69, 0x70, 0x74, 0x61, 0x72, 0x45,
+0x75, 0x72, 0x6f, 0x6a, 0x61, 0x44, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x20,
+0x6d, 0x61, 0x71, 0x65, 0x64, 0x6f, 0x6e, 0x61, 0x73, 0x12e8, 0x12a2, 0x1275,
+0x12ee, 0x1335, 0x12eb, 0x20, 0x1265, 0x122d, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x645,
+0x635, 0x631, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62c, 0x632, 0x627,
+0x626, 0x631, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x628, 0x62d, 0x631,
+0x64a, 0x646, 0x64a, 0x641, 0x631, 0x646, 0x643, 0x20, 0x648, 0x633, 0x637, 0x20,
+0x623, 0x641, 0x631, 0x64a, 0x642, 0x64a, 0x641, 0x631, 0x646, 0x643, 0x20, 0x62c,
+0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x641, 0x631, 0x646, 0x643,
+0x20, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a, 0x646, 0x627, 0x643, 0x641, 0x627,
+0x20, 0x623, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x62f, 0x64a, 0x646, 0x627, 0x631,
+0x20, 0x639, 0x631, 0x627, 0x642, 0x64a, 0x634, 0x64a, 0x643, 0x644, 0x20, 0x625,
+0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x64a, 0x20, 0x62c, 0x62f, 0x64a, 0x62f,
+0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x623, 0x631, 0x62f, 0x646, 0x64a, 0x62f,
+0x64a, 0x646, 0x627, 0x631, 0x20, 0x643, 0x648, 0x64a, 0x62a, 0x64a, 0x62c, 0x646,
+0x64a, 0x647, 0x20, 0x644, 0x628, 0x646, 0x627, 0x646, 0x64a, 0x62f, 0x64a, 0x646,
+0x627, 0x631, 0x20, 0x644, 0x64a, 0x628, 0x64a, 0x623, 0x648, 0x642, 0x64a, 0x629,
+0x20, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x629, 0x62f, 0x631,
+0x647, 0x645, 0x20, 0x645, 0x63a, 0x631, 0x628, 0x64a, 0x631, 0x64a, 0x627, 0x644,
+0x20, 0x639, 0x645, 0x627, 0x646, 0x64a, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x642,
+0x637, 0x631, 0x64a, 0x631, 0x64a, 0x627, 0x644, 0x20, 0x633, 0x639, 0x648, 0x62f,
+0x64a, 0x634, 0x644, 0x646, 0x20, 0x635, 0x648, 0x645, 0x627, 0x644, 0x64a, 0x62c,
+0x646, 0x64a, 0x647, 0x20, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644, 0x633,
+0x648, 0x62f, 0x627, 0x646, 0x62c, 0x646, 0x64a, 0x647, 0x20, 0x633, 0x648, 0x62f,
+0x627, 0x646, 0x64a, 0x644, 0x64a, 0x631, 0x629, 0x20, 0x633, 0x648, 0x631, 0x64a,
+0x629, 0x62f, 0x64a, 0x646, 0x627, 0x631, 0x20, 0x62a, 0x648, 0x646, 0x633, 0x64a,
+0x62f, 0x631, 0x647, 0x645, 0x20, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a, 0x64a,
+0x631, 0x64a, 0x627, 0x644, 0x20, 0x64a, 0x645, 0x646, 0x64a, 0x65, 0x75, 0x72,
+0x6f, 0x570, 0x561, 0x575, 0x56f, 0x561, 0x56f, 0x561, 0x576, 0x20, 0x564, 0x580,
+0x561, 0x574, 0x9ad, 0x9be, 0x9f0, 0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9f0, 0x9c1,
+0x9aa, 0x9c0, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79,
+0x61, 0x20, 0x54, 0x61, 0x6e, 0x64, 0x68, 0x61, 0x6e, 0x69, 0x61, 0x41,
+0x6d, 0x61, 0x6e, 0x41, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61,
+0x6e, 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x74, 0x131, 0x43c, 0x430, 0x43d, 0x430,
+0x442, 0x66, 0x72, 0xe1, 0x14b, 0x73, 0x65, 0x66, 0x61, 0x20, 0x46, 0x72,
+0x61, 0x14b, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x9ac, 0x9be,
+0x982, 0x9b2, 0x9be, 0x9a6, 0x9c7, 0x9b6, 0x9c0, 0x20, 0x99f, 0x9be, 0x995, 0x9be,
+0x9ad, 0x9be, 0x9b0, 0x9a4, 0x9c0, 0x9af, 0x9bc, 0x20, 0x9b0, 0x9c1, 0x9aa, 0x9bf,
+0x46, 0x72, 0x1ce, 0x14b, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45,
+0x41, 0x43, 0x29, 0x65, 0x75, 0x72, 0x6f, 0x61, 0x431, 0x435, 0x43b, 0x430,
+0x440, 0x443, 0x441, 0x43a, 0x456, 0x20, 0x440, 0x443, 0x431, 0x435, 0x43b, 0x44c,
+0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20,
+0x48, 0x75, 0x74, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x92d, 0x93e,
+0x930, 0x924, 0x928, 0x93f, 0x20, 0x930, 0x941, 0x92a, 0x940, 0x42, 0x6f, 0x73,
+0x61, 0x6e, 0x73, 0x6b, 0x6f, 0x68, 0x65, 0x72, 0x63, 0x65, 0x67, 0x6f,
+0x76, 0x61, 0x10d, 0x6b, 0x61, 0x20, 0x6b, 0x6f, 0x6e, 0x76, 0x65, 0x72,
+0x74, 0x69, 0x62, 0x69, 0x6c, 0x6e, 0x61, 0x20, 0x6d, 0x61, 0x72, 0x6b,
+0x61, 0x41a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b,
+0x43d, 0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x411, 0x44a, 0x43b, 0x433,
+0x430, 0x440, 0x441, 0x43a, 0x438, 0x20, 0x43b, 0x435, 0x432, 0x1019, 0x103c, 0x1014,
+0x103a, 0x1019, 0x102c, 0x20, 0x1000, 0x103b, 0x1015, 0x103a, 0x6e2f, 0x5e63, 0x4eba, 0x6c11,
+0x5e01, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x20,
+0x50, 0x65, 0x73, 0x6f, 0x44, 0x65, 0x72, 0x68, 0x65, 0x6d, 0x20, 0x55,
+0x6d, 0x65, 0x1e5b, 0x1e5b, 0x75, 0x6b, 0x69, 0x62f, 0x6cc, 0x646, 0x627, 0x631,
+0x6cc, 0x20, 0x639, 0x6ce, 0x631, 0x627, 0x642, 0x6cc, 0x695, 0x6cc, 0x627, 0x6b5,
+0x6cc, 0x20, 0x626, 0x6ce, 0x631, 0x627, 0x646, 0x6cc, 0xd804, 0xdd1d, 0xd804, 0xdd01,
+0xd804, 0xdd23, 0xd804, 0xdd18, 0xd804, 0xdd2c, 0xd804, 0xdd25, 0xd804, 0xdd28, 0x20, 0xd804,
+0xdd11, 0xd804, 0xdd2c, 0xd804, 0xdd0b, 0xd804, 0xdd03, 0xd804, 0xdd28, 0xd804, 0xdd1a, 0xd804,
+0xdd34, 0xd804, 0xdd18, 0xd804, 0xdd28, 0xd804, 0xdd20, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x20,
+0xd804, 0xdd22, 0xd804, 0xdd2a, 0xd804, 0xdd1b, 0xd804, 0xdd28, 0x420, 0x43e, 0x441, 0x441,
+0x438, 0x439, 0x43d, 0x20, 0x441, 0x43e, 0x43c, 0x55, 0x53, 0x20, 0x13a0, 0x13d5,
+0x13b3, 0x45, 0x73, 0x68, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79,
+0x61, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x6e2f, 0x5143, 0x6fb3, 0x95e8,
+0x5e01, 0x65b0, 0x52a0, 0x5761, 0x5143, 0x6fb3, 0x9580, 0x5143, 0x65b0, 0x53f0, 0x5e63, 0x440,
+0x461, 0x441, 0x441, 0x456, 0x301, 0x439, 0x441, 0x43a, 0x457, 0x439, 0x20, 0x440,
+0xa64b, 0x301, 0x431, 0x43b, 0x44c, 0x420, 0x430, 0x4ab, 0x4ab, 0x435, 0x439, 0x20,
+0x442, 0x435, 0x43d, 0x43a, 0x4d7, 0x10d, 0x65, 0x73, 0x6b, 0xe1, 0x20, 0x6b,
+0x6f, 0x72, 0x75, 0x6e, 0x61, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x20, 0x6b,
+0x72, 0x6f, 0x6e, 0x65, 0x92d, 0x93e, 0x930, 0x924, 0x940, 0x20, 0x930, 0x92a,
+0x947, 0x93d, 0x41, 0x72, 0x75, 0x62, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20,
+0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x6b,
+0x61, 0x61, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
+0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x2d, 0x41,
+0x6e, 0x74, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x73, 0x65, 0x20,
+0x67, 0x75, 0x6c, 0x64, 0x65, 0x6e, 0x53, 0x75, 0x72, 0x69, 0x6e, 0x61,
+0x61, 0x6d, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0xf51,
+0xf44, 0xf74, 0xf63, 0xf0b, 0xf40, 0xfb2, 0xf58, 0x53, 0x68, 0x69, 0x6c, 0x69,
+0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61,
+0x55, 0x53, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x45, 0x61, 0x73,
+0x74, 0x20, 0x43, 0x61, 0x72, 0x69, 0x62, 0x62, 0x65, 0x61, 0x6e, 0x20,
+0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61,
+0x6c, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x42,
+0x61, 0x68, 0x61, 0x6d, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c,
+0x61, 0x72, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20,
+0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x42, 0x65, 0x6c, 0x69, 0x7a, 0x65,
+0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x42, 0x65, 0x72, 0x6d, 0x75,
+0x64, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x42,
+0x6f, 0x74, 0x73, 0x77, 0x61, 0x6e, 0x61, 0x6e, 0x20, 0x50, 0x75, 0x6c,
+0x61, 0x42, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x46,
+0x72, 0x61, 0x6e, 0x63, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x20,
+0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x43, 0x46, 0x41, 0x20,
+0x46, 0x72, 0x61, 0x6e, 0x63, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61,
+0x6e, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x43, 0x61, 0x79, 0x6d,
+0x61, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x44,
+0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61,
+0x6c, 0x61, 0x6e, 0x64, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x44,
+0x61, 0x6e, 0x69, 0x73, 0x68, 0x20, 0x4b, 0x72, 0x6f, 0x6e, 0x65, 0x45,
+0x72, 0x69, 0x74, 0x72, 0x65, 0x61, 0x6e, 0x20, 0x4e, 0x61, 0x6b, 0x66,
+0x61, 0x53, 0x77, 0x61, 0x7a, 0x69, 0x20, 0x4c, 0x69, 0x6c, 0x61, 0x6e,
+0x67, 0x65, 0x6e, 0x69, 0x46, 0x61, 0x6c, 0x6b, 0x6c, 0x61, 0x6e, 0x64,
+0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x50, 0x6f, 0x75,
+0x6e, 0x64, 0x46, 0x69, 0x6a, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c,
+0x6c, 0x61, 0x72, 0x47, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x6e, 0x20, 0x44,
+0x61, 0x6c, 0x61, 0x73, 0x69, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x69, 0x61,
+0x6e, 0x20, 0x43, 0x65, 0x64, 0x69, 0x47, 0x69, 0x62, 0x72, 0x61, 0x6c,
+0x74, 0x61, 0x72, 0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x4b, 0x20,
+0x50, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x75, 0x79, 0x61, 0x6e, 0x61, 0x65,
+0x73, 0x65, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x48, 0x6f, 0x6e,
+0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61,
+0x72, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x52, 0x75, 0x70, 0x65,
+0x65, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x6e, 0x20,
+0x52, 0x75, 0x70, 0x69, 0x61, 0x68, 0x49, 0x73, 0x72, 0x61, 0x65, 0x6c,
+0x69, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x53, 0x68, 0x65, 0x6b, 0x65, 0x6c,
+0x4a, 0x61, 0x6d, 0x61, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c,
+0x6c, 0x61, 0x72, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x6e, 0x20, 0x53, 0x68,
+0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20,
+0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x61, 0x6e, 0x64,
+0x4c, 0x69, 0x62, 0x65, 0x72, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f, 0x6c,
+0x6c, 0x61, 0x72, 0x4d, 0x61, 0x63, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20,
+0x50, 0x61, 0x74, 0x61, 0x63, 0x61, 0x4d, 0x61, 0x6c, 0x61, 0x67, 0x61,
+0x73, 0x79, 0x20, 0x41, 0x72, 0x69, 0x61, 0x72, 0x79, 0x4d, 0x61, 0x6c,
+0x61, 0x77, 0x69, 0x61, 0x6e, 0x20, 0x4b, 0x77, 0x61, 0x63, 0x68, 0x61,
+0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x52, 0x69,
+0x6e, 0x67, 0x67, 0x69, 0x74, 0x4d, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x69,
+0x61, 0x6e, 0x20, 0x52, 0x75, 0x66, 0x69, 0x79, 0x61, 0x61, 0x4d, 0x61,
+0x75, 0x72, 0x69, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x52, 0x75, 0x70, 0x65,
+0x65, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x61, 0x6e, 0x20, 0x44, 0x6f,
+0x6c, 0x6c, 0x61, 0x72, 0x4e, 0x69, 0x67, 0x65, 0x72, 0x69, 0x61, 0x6e,
+0x20, 0x4e, 0x61, 0x69, 0x72, 0x61, 0x50, 0x61, 0x6b, 0x69, 0x73, 0x74,
+0x61, 0x6e, 0x69, 0x20, 0x52, 0x75, 0x70, 0x65, 0x65, 0x50, 0x61, 0x70,
+0x75, 0x61, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6e, 0x65,
+0x61, 0x6e, 0x20, 0x4b, 0x69, 0x6e, 0x61, 0x52, 0x77, 0x61, 0x6e, 0x64,
+0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x53, 0x74, 0x20, 0x48,
+0x65, 0x6c, 0x65, 0x6e, 0x61, 0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x53,
+0x61, 0x6d, 0x6f, 0x61, 0x6e, 0x20, 0x54, 0x61, 0x6c, 0x61, 0x53, 0x65,
+0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x69, 0x73, 0x20, 0x52, 0x75,
+0x70, 0x65, 0x65, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x4c, 0x65,
+0x6f, 0x6e, 0x65, 0x61, 0x6e, 0x20, 0x4c, 0x65, 0x6f, 0x6e, 0x65, 0x53,
+0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x20, 0x44, 0x6f, 0x6c,
+0x6c, 0x61, 0x72, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, 0x61, 0x6e,
+0x64, 0x73, 0x20, 0x41, 0x6e, 0x74, 0x69, 0x6c, 0x6c, 0x65, 0x61, 0x6e,
+0x20, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x53, 0x6f, 0x6c, 0x6f,
+0x6d, 0x6f, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x20,
+0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20,
+0x53, 0x75, 0x64, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x50, 0x6f, 0x75,
+0x6e, 0x64, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x20, 0x50,
+0x6f, 0x75, 0x6e, 0x64, 0x53, 0x77, 0x65, 0x64, 0x69, 0x73, 0x68, 0x20,
+0x4b, 0x72, 0x6f, 0x6e, 0x61, 0x53, 0x77, 0x69, 0x73, 0x73, 0x20, 0x46,
+0x72, 0x61, 0x6e, 0x63, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61,
+0x6e, 0x20, 0x53, 0x68, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x6f,
+0x6e, 0x67, 0x61, 0x6e, 0x20, 0x50, 0x61, 0x2bb, 0x61, 0x6e, 0x67, 0x61,
+0x54, 0x72, 0x69, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x20, 0x26, 0x20, 0x54,
+0x6f, 0x62, 0x61, 0x67, 0x6f, 0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
+0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x6e, 0x20, 0x53, 0x68, 0x69, 0x6c,
+0x6c, 0x69, 0x6e, 0x67, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x41,
+0x72, 0x61, 0x62, 0x20, 0x45, 0x6d, 0x69, 0x72, 0x61, 0x74, 0x65, 0x73,
+0x20, 0x44, 0x69, 0x72, 0x68, 0x61, 0x6d, 0x42, 0x72, 0x69, 0x74, 0x69,
+0x73, 0x68, 0x20, 0x50, 0x6f, 0x75, 0x6e, 0x64, 0x56, 0x61, 0x6e, 0x75,
+0x61, 0x74, 0x75, 0x20, 0x56, 0x61, 0x74, 0x75, 0x5a, 0x61, 0x6d, 0x62,
+0x69, 0x61, 0x6e, 0x20, 0x4b, 0x77, 0x61, 0x63, 0x68, 0x61, 0x67, 0x68,
+0x61, 0x6e, 0x61, 0x20, 0x73, 0x69, 0x256, 0x69, 0x263, 0x65, 0x74, 0x6f,
+0x256, 0x6f, 0x66, 0x65, 0x20, 0x61, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x67,
+0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20,
+0x42, 0x43, 0x45, 0x41, 0x4f, 0x46, 0x259, 0x6c, 0xe1, 0x14b, 0x20, 0x43,
+0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43, 0x29, 0x64, 0x6f, 0x6e,
+0x73, 0x6b, 0x20, 0x6b, 0x72, 0xf3, 0x6e, 0x61, 0x50, 0x69, 0x73, 0x6f,
+0x20, 0x6e, 0x67, 0x20, 0x50, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61,
+0x73, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x61, 0x6c, 0x67, 0xe9, 0x72,
+0x69, 0x65, 0x6e, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x41,
+0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x66, 0x72, 0x61, 0x6e,
+0x63, 0x20, 0x62, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x61, 0x69, 0x73, 0x66,
+0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45,
+0x41, 0x43, 0x29, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x61,
+0x6e, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20,
+0x63, 0x6f, 0x6d, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x66, 0x72, 0x61, 0x6e,
+0x63, 0x20, 0x63, 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x69, 0x73, 0x66,
+0x72, 0x61, 0x6e, 0x63, 0x20, 0x64, 0x6a, 0x69, 0x62, 0x6f, 0x75, 0x74,
+0x69, 0x65, 0x6e, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x50,
+0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x67, 0x75, 0x69, 0x6e, 0xe9, 0x65,
+0x6e, 0x67, 0x6f, 0x75, 0x72, 0x64, 0x65, 0x20, 0x68, 0x61, 0xef, 0x74,
+0x69, 0x65, 0x6e, 0x6e, 0x65, 0x61, 0x72, 0x69, 0x61, 0x72, 0x79, 0x20,
+0x6d, 0x61, 0x6c, 0x67, 0x61, 0x63, 0x68, 0x65, 0x6f, 0x75, 0x67, 0x75,
+0x69, 0x79, 0x61, 0x20, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e,
+0x69, 0x65, 0x6e, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x20, 0x6d, 0x61,
+0x75, 0x72, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x6e, 0x65, 0x64, 0x69, 0x72,
+0x68, 0x61, 0x6d, 0x20, 0x6d, 0x61, 0x72, 0x6f, 0x63, 0x61, 0x69, 0x6e,
+0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x72, 0x77, 0x61, 0x6e, 0x64, 0x61,
+0x69, 0x73, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x65, 0x20, 0x64, 0x65, 0x73,
+0x20, 0x53, 0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x66,
+0x72, 0x61, 0x6e, 0x63, 0x20, 0x73, 0x75, 0x69, 0x73, 0x73, 0x65, 0x6c,
+0x69, 0x76, 0x72, 0x65, 0x20, 0x73, 0x79, 0x72, 0x69, 0x65, 0x6e, 0x6e,
+0x65, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x74, 0x75, 0x6e, 0x69, 0x73,
+0x69, 0x65, 0x6e, 0x76, 0x61, 0x74, 0x75, 0x20, 0x76, 0x61, 0x6e, 0x75,
+0x61, 0x74, 0x75, 0x61, 0x6e, 0x4d, 0x62, 0x75, 0x75, 0x257, 0x75, 0x20,
+0x53, 0x65, 0x65, 0x66, 0x61, 0x61, 0x20, 0x42, 0x43, 0x45, 0x41, 0x4f,
+0xd83a, 0xdd0a, 0xd83a, 0xdd22, 0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0x20, 0xd83a,
+0xdd05, 0xd83a, 0xdd0a, 0xd83a, 0xdd00, 0x20, 0xd83a, 0xdd16, 0xd83a, 0xdd2d, 0xd83a, 0xdd45,
+0xd83a, 0xdd2a, 0xd83a, 0xdd32, 0xd83a, 0xdd22, 0xd83a, 0xdd44, 0xd83a, 0xdd32, 0xd83a, 0xdd3a,
+0xd83a, 0xdd2b, 0x20, 0xd83a, 0xdd00, 0xd83a, 0xdd2c, 0xd83a, 0xdd2a, 0xd83a, 0xdd2d, 0xd83a,
+0xdd33, 0xd83a, 0xdd22, 0xd83a, 0xdd0a, 0xd83a, 0xdd22, 0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0xd83a,
+0xdd32, 0x20, 0xd83a, 0xdd1a, 0xd83a, 0xdd35, 0xd83a, 0xdd26, 0xd83a, 0xdd2e, 0xd83a, 0xdd45,
+0xd83a, 0xdd2a, 0xd83a, 0xdd2d, 0x20, 0xd83a, 0xdd00, 0xd83a, 0xdd2c, 0xd83a, 0xdd2a, 0xd83a,
+0xdd2d, 0xd83a, 0xdd33, 0xd83a, 0xdd2d, 0xd83a, 0xdd32, 0xd83a, 0xdd33, 0xd83a, 0xdd2e, 0xd83a,
+0xdd01, 0xd83a, 0xdd22, 0xd83a, 0xdd24, 0xd83a, 0xdd22, 0xd83a, 0xdd27, 0xd83a, 0xdd2d, 0x20,
+0xd83a, 0xdd18, 0xd83a, 0xdd22, 0xd83a, 0xdd25, 0xd83a, 0xdd26, 0xd83a, 0xdd2d, 0xd83a, 0xdd32,
+0xd83a, 0xdd33, 0xd83a, 0xdd2e, 0xd83a, 0xdd05, 0xd83a, 0xdd2d, 0xd83a, 0xdd23, 0xd83a, 0xdd2d,
+0x20, 0xd83a, 0xdd18, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0xd83a,
+0xdd33, 0xd83a, 0xdd2e, 0xd83a, 0xdd0a, 0xd83a, 0xdd22, 0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0xd83a,
+0xdd32, 0x20, 0xd83a, 0xdd18, 0xd83a, 0xdd2d, 0xd83a, 0xdd32, 0xd83a, 0xdd2b, 0xd83a, 0xdd32,
+0xd83a, 0xdd33, 0xd83a, 0xdd2e, 0xd83a, 0xdd01, 0xd83a, 0xdd22, 0xd83a, 0xdd24, 0xd83a, 0xdd22,
+0x20, 0xd83a, 0xdd02, 0xd83a, 0xdd2d, 0xd83a, 0xdd26, 0xd83a, 0xdd2b, 0xd83a, 0xdd2a, 0xd83a,
+0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0xd83a, 0xdd33, 0xd83a, 0xdd2e, 0xd83a,
+0xdd13, 0xd83a, 0xdd3a, 0xd83a, 0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22, 0x20, 0xd83a, 0xdd03,
+0xd83a, 0xdd2e, 0xd83a, 0xdd2a, 0xd83a, 0xdd2d, 0xd83a, 0xdd3c, 0xd83a, 0xdd22, 0xd83a, 0xdd32,
+0xd83a, 0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0xd83a, 0xdd33, 0xd83a, 0xdd2e,
+0xd83a, 0xdd10, 0xd83a, 0xdd22, 0xd83a, 0xdd34, 0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0x20, 0xd83a,
+0xdd10, 0xd83a, 0xdd22, 0xd83a, 0xdd36, 0xd83a, 0xdd2d, 0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0xd83a,
+0xdd34, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0xd83a, 0xdd33, 0xd83a, 0xdd2e, 0xd83a, 0xdd02, 0xd83a,
+0xdd2b, 0xd83a, 0xdd34, 0xd83a, 0xdd2e, 0xd83a, 0xdd32, 0x20, 0xd83a, 0xdd05, 0xd83a, 0xdd2b,
+0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0xd83a, 0xdd24, 0xd83a, 0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22,
+0xd83a, 0xdd32, 0xd83a, 0xdd33, 0xd83a, 0xdd2e, 0x4d, 0x62, 0x75, 0x75, 0x257, 0x69,
+0x20, 0x53, 0x65, 0x65, 0x66, 0x61, 0x61, 0x20, 0x42, 0x45, 0x41, 0x43,
+0x44, 0x61, 0x6c, 0x61, 0x73, 0x69, 0x20, 0x47, 0x61, 0x6d, 0x6d, 0x62,
+0x69, 0x44, 0x6f, 0x6c, 0x61, 0x61, 0x72, 0x20, 0x4c, 0x69, 0x62, 0x65,
+0x72, 0x69, 0x79, 0x61, 0x61, 0x55, 0x67, 0x69, 0x79, 0x79, 0x61, 0x20,
+0x4d, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x69, 0x4e, 0x61, 0x79, 0x72,
+0x61, 0x61, 0x20, 0x4e, 0x69, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x61,
+0x4c, 0x65, 0x77, 0x6f, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x61, 0x61,
+0x20, 0x4c, 0x69, 0x79, 0x6f, 0x6e, 0x50, 0x75, 0x6e, 0x6e, 0x64, 0x20,
+0x53, 0x61, 0x73, 0x61, 0x6e, 0x6e, 0x61, 0x63, 0x68, 0x53, 0x69, 0x6c,
+0x69, 0x6e, 0x67, 0x69, 0x20, 0x65, 0x79, 0x61, 0x20, 0x59, 0x75, 0x67,
+0x61, 0x6e, 0x64, 0x61, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10e3, 0x10da, 0x10d8, 0x20,
+0x10da, 0x10d0, 0x10e0, 0x10d8, 0x53, 0x63, 0x68, 0x77, 0x65, 0x69, 0x7a, 0x65,
+0x72, 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x6e, 0x395, 0x3c5, 0x3c1,
+0x3ce, 0xaad, 0xabe, 0xab0, 0xaa4, 0xac0, 0xaaf, 0x20, 0xab0, 0xac2, 0xaaa, 0xabf,
+0xaaf, 0xabe, 0x4e, 0x61, 0x69, 0x72, 0x61, 0x72, 0x20, 0x4e, 0x61, 0x6a,
+0x65, 0x72, 0x69, 0x79, 0x61, 0x646, 0x64e, 0x64a, 0x652, 0x631, 0x64e, 0x53,
+0x69, 0x64, 0x69, 0x20, 0x6e, 0x61, 0x20, 0x47, 0x68, 0x61, 0x6e, 0x61,
+0x4b, 0x75, 0x257, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x66, 0x61, 0x20, 0x6e,
+0x61, 0x20, 0x41, 0x66, 0x69, 0x72, 0x6b, 0x61, 0x20, 0x54, 0x61, 0x20,
+0x59, 0x61, 0x6d, 0x6d, 0x61, 0x5e9, 0x5e7, 0x5dc, 0x20, 0x5d7, 0x5d3, 0x5e9,
+0x92d, 0x93e, 0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x941, 0x92a, 0x92f, 0x93e,
+0x6d, 0x61, 0x67, 0x79, 0x61, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x69, 0x6e,
+0x74, 0xed, 0x73, 0x6c, 0x65, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0xf3,
+0x6e, 0x61, 0x4e, 0x61, 0x1ecb, 0x72, 0x61, 0x52, 0x75, 0x70, 0x69, 0x61,
+0x68, 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x50,
+0x75, 0x6e, 0x74, 0x20, 0x53, 0x74, 0x65, 0x69, 0x72, 0x6c, 0x69, 0x6e,
+0x67, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x73, 0x76, 0x69, 0x7a,
+0x7a, 0x65, 0x72, 0x6f, 0x65e5, 0x672c, 0x5186, 0x41, 0x331, 0x6e, 0x61, 0x69,
+0x72, 0x61, 0x73, 0x65, 0x65, 0x66, 0x61, 0x20, 0x79, 0x61, 0x74, 0x69,
+0x20, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x53, 0x6b, 0x75, 0x64, 0x75, 0x20,
+0x4b, 0x61, 0x62, 0x75, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x75,
+0x41, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x20, 0x41, 0x7a, 0x7a, 0x61, 0x79,
+0x72, 0x69, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x43, 0x46, 0x41, 0x64,
+0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6d, 0x75, 0x74, 0x20, 0x6b,
+0x6f, 0x72, 0x75, 0x75, 0x6e, 0x69, 0x53, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+0x69, 0x74, 0x61, 0x62, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79,
+0x61, 0x53, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20,
+0x4b, 0x65, 0x6e, 0x79, 0x61, 0xcad, 0xcbe, 0xcb0, 0xca4, 0xcc0, 0xcaf, 0x20,
+0xcb0, 0xcc2, 0xcaa, 0xcbe, 0xcaf, 0xcbf, 0x6c1, 0x650, 0x646, 0x62f, 0x64f, 0x633,
+0x62a, 0x672, 0x646, 0x6cd, 0x20, 0x631, 0x6c4, 0x67e, 0x64e, 0x6d2, 0x907, 0x902,
+0x921, 0x93f, 0x92f, 0x928, 0x20, 0x930, 0x942, 0x92a, 0x940, 0x49a, 0x430, 0x437,
+0x430, 0x49b, 0x441, 0x442, 0x430, 0x43d, 0x20, 0x442, 0x435, 0x4a3, 0x433, 0x435,
+0x441, 0x456, 0x179a, 0x17c0, 0x179b, 0x200b, 0x1780, 0x1798, 0x17d2, 0x1796, 0x17bb, 0x1787,
+0x17b6, 0x43, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20,
+0x4b, 0x65, 0x6e, 0x79, 0x61, 0xb300, 0xd55c, 0xbbfc, 0xad6d, 0x20, 0xc6d0, 0xc911,
+0xad6d, 0x20, 0xc704, 0xc548, 0xd654, 0xc870, 0xc120, 0x20, 0xbbfc, 0xc8fc, 0xc8fc, 0xc758,
+0x20, 0xc778, 0xbbfc, 0x20, 0xacf5, 0xd654, 0xad6d, 0x20, 0xc6d0, 0x43, 0x46, 0x41,
+0x20, 0x46, 0x72, 0x61, 0x14b, 0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f,
+0x29, 0x6c, 0xee, 0x72, 0x65, 0x79, 0xea, 0x20, 0x74, 0x69, 0x72, 0x6b,
+0xee, 0x46, 0x72, 0x61, 0x14b, 0x20, 0x43, 0x46, 0x41, 0x20, 0x42, 0x45,
+0x41, 0x43, 0x41a, 0x44b, 0x440, 0x433, 0x44b, 0x437, 0x441, 0x442, 0x430, 0x43d,
+0x20, 0x441, 0x43e, 0x43c, 0x443, 0x53, 0x68, 0x69, 0x6c, 0xed, 0x69, 0x6e,
+0x67, 0x69, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61, 0x61, 0x6e, 0x73, 0x61,
+0x6e, 0xed, 0x61, 0xea5, 0xeb2, 0xea7, 0x20, 0xe81, 0xeb5, 0xe9a, 0x65, 0x69,
+0x72, 0x6f, 0x46, 0x61, 0x6c, 0xe1, 0x6e, 0x67, 0x61, 0x20, 0x79, 0x61,
+0x20, 0x4b, 0x6f, 0x6e, 0x67, 0xf3, 0x4b, 0x77, 0x61, 0x6e, 0x7a, 0x61,
+0x20, 0x79, 0x61, 0x20, 0x41, 0x6e, 0x67, 0xf3, 0x6c, 0x61, 0x46, 0x61,
+0x6c, 0xe1, 0x6e, 0x67, 0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x42, 0x45,
+0x41, 0x43, 0x45, 0x75, 0x72, 0x61, 0x73, 0x4e, 0x66, 0x61, 0x6c, 0x61,
+0x6e, 0x67, 0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x75,
+0x53, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x61, 0x72, 0x20, 0x4b,
+0x65, 0x6e, 0x79, 0x61, 0x53, 0x69, 0x72, 0x69, 0x6e, 0x6a, 0x69, 0x20,
+0x79, 0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x41c, 0x430, 0x43a, 0x435,
+0x434, 0x43e, 0x43d, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x435, 0x43d, 0x430, 0x440,
+0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x61, 0x20,
+0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0xd07, 0xd28, 0xd4d, 0xd24,
+0xd4d, 0xd2f, 0xd7b, 0x20, 0xd30, 0xd42, 0xd2a, 0x52, 0x69, 0x6e, 0x67, 0x67,
+0x69, 0x74, 0x20, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x62f,
+0x648, 0x644, 0x631, 0x20, 0x628, 0x631, 0x648, 0x646, 0x64a, 0x631, 0x64a, 0x6a0,
+0x762, 0x64a, 0x62a, 0x20, 0x645, 0x644, 0x64a, 0x633, 0x64a, 0x627, 0x44, 0x6f,
+0x6c, 0x61, 0x72, 0x20, 0x42, 0x72, 0x75, 0x6e, 0x65, 0x69, 0x44, 0x6f,
+0x6c, 0x61, 0x72, 0x20, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x75, 0x72,
+0x61, 0x65, 0x77, 0x72, 0x6f, 0x987, 0x9a8, 0x9cd, 0x9a6, 0x9bf, 0x9af, 0x9bc,
+0x9be, 0x9a8, 0x20, 0x9b0, 0x9c1, 0x9aa, 0x9c0, 0x54, 0x101, 0x72, 0x61, 0x20,
+0x6f, 0x20, 0x41, 0x6f, 0x74, 0x65, 0x61, 0x72, 0x6f, 0x61, 0x49, 0x72,
+0x6f, 0x70, 0x69, 0x79, 0x69, 0x61, 0x6e, 0xed, 0x20, 0x65, 0x20, 0x4b,
+0x65, 0x6e, 0x79, 0x61, 0x49, 0x72, 0x6f, 0x70, 0x69, 0x79, 0x69, 0x61,
+0x6e, 0xed, 0x20, 0x65, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69,
+0x61, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x20, 0x631, 0x6cc, 0x627, 0x644, 0x73,
+0x68, 0x69, 0x72, 0xe8, 0x41c, 0x43e, 0x43d, 0x433, 0x43e, 0x43b, 0x20, 0x442,
+0x4e9, 0x433, 0x440, 0x4e9, 0x433, 0x44e, 0x430, 0x43d, 0x44c, 0x1833, 0x1825, 0x182c,
+0x1825, 0x1837, 0x1822, 0x182d, 0x180c, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x20, 0x6d,
+0x6f, 0x72, 0x69, 0x73, 0x69, 0x65, 0x6e, 0x73, 0x6f, 0x6c, 0x61, 0x69,
+0x20, 0x42, 0x45, 0x41, 0x43, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x61,
+0x20, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x69, 0x928, 0x947, 0x92a, 0x93e,
+0x932, 0x940, 0x20, 0x930, 0x942, 0x92a, 0x948, 0x92f, 0x93e, 0x901, 0x92d, 0x93e,
+0x930, 0x924, 0x940, 0x92f, 0x20, 0x930, 0x942, 0x92a, 0x93f, 0x901, 0x92f, 0x93e,
+0x66, 0x65, 0x6c, 0xe1, 0x14b, 0x20, 0x43, 0x46, 0x41, 0x46, 0x25b, 0x6c,
+0xe2, 0x14b, 0x4e, 0x61, 0x69, 0x6a, 0xed, 0x72, 0x69, 0xe1, 0x20, 0x4e,
+0x61, 0xed, 0x72, 0x61, 0x7d6, 0x7cc, 0x7ec, 0x7e3, 0x7cd, 0x7ec, 0x7de, 0x7ca,
+0x20, 0x7df, 0x7ce, 0x7ec, 0x20, 0x7df, 0x7ca, 0x7eb, 0x20, 0x7dd, 0x7ca, 0x7d9,
+0x7ca, 0x7f2, 0x6e, 0x6f, 0x72, 0x67, 0x67, 0x61, 0x20, 0x6b, 0x72, 0x75,
+0x76, 0x64, 0x6e, 0x6f, 0x72, 0x75, 0x6f, 0x167, 0x167, 0x61, 0x20, 0x6b,
+0x72, 0x75, 0x76, 0x64, 0x6e, 0x6f, 0x44, 0x6f, 0x6c, 0x61, 0x20, 0x79,
+0x61, 0x73, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x6c, 0x69, 0x6b, 0x61, 0x6e,
+0x6f, 0x72, 0x73, 0x6b, 0x65, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x65, 0x72,
+0xb2d, 0xb3e, 0xb30, 0xb24, 0xb40, 0xb5f, 0x20, 0xb1f, 0xb19, 0xb4d, 0xb15, 0xb3e,
+0x49, 0x74, 0x6f, 0x6f, 0x70, 0x68, 0x69, 0x79, 0x61, 0x61, 0x20, 0x42,
+0x69, 0x72, 0x72, 0x69, 0x69, 0x41b, 0x430, 0x440, 0x421, 0x43e, 0x43c, 0x46,
+0x6c, 0x6f, 0x72, 0x69, 0x6e, 0x46, 0x6c, 0x6f, 0x72, 0x69, 0x6e, 0x20,
+0x64, 0x69, 0x20, 0x41, 0x72, 0x75, 0x62, 0x61, 0x627, 0x641, 0x63a, 0x627,
+0x646, 0x6cd, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x6cd, 0x20, 0x6a9,
+0x644, 0x62f, 0x627, 0x631, 0x647, 0x631, 0x6cc, 0x627, 0x644, 0x20, 0x627, 0x6cc,
+0x631, 0x627, 0x646, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x6cc, 0x20, 0x627, 0x641,
+0x63a, 0x627, 0x646, 0x633, 0x62a, 0x627, 0x646, 0x7a, 0x142, 0x6f, 0x74, 0x79,
+0x20, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x52, 0x65, 0x61, 0x6c, 0x20,
+0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x65, 0x69, 0x72, 0x6f, 0x6b, 0x77,
+0x61, 0x6e, 0x7a, 0x61, 0x20, 0x61, 0x6e, 0x67, 0x6f, 0x6c, 0x61, 0x6e,
+0x6f, 0x65, 0x73, 0x63, 0x75, 0x64, 0x6f, 0x20, 0x63, 0x61, 0x62, 0x6f,
+0x2d, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x6f, 0x66, 0x72, 0x61,
+0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41,
+0x43, 0x29, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x43, 0x46, 0x41,
+0x20, 0x28, 0x42, 0x43, 0x45, 0x41, 0x4f, 0x29, 0x70, 0x61, 0x74, 0x61,
+0x63, 0x61, 0x20, 0x6d, 0x61, 0x63, 0x61, 0x65, 0x6e, 0x73, 0x65, 0x6d,
+0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x6f, 0xe7, 0x61, 0x6d,
+0x62, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x64, 0x6f, 0x62, 0x72, 0x61, 0x20,
+0x64, 0x65, 0x20, 0x53, 0xe3, 0x6f, 0x20, 0x54, 0x6f, 0x6d, 0xe9, 0x20,
+0x65, 0x20, 0x50, 0x72, 0xed, 0x6e, 0x63, 0x69, 0x70, 0x65, 0x66, 0x72,
+0x61, 0x6e, 0x63, 0x6f, 0x20, 0x73, 0x75, 0xed, 0xe7, 0x6f, 0x64, 0xf3,
+0x6c, 0x61, 0x72, 0x20, 0x64, 0x6f, 0x73, 0x20, 0x45, 0x73, 0x74, 0x61,
+0x64, 0x6f, 0x73, 0x20, 0x55, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0xa2d, 0xa3e,
+0xa30, 0xa24, 0xa40, 0x20, 0xa30, 0xa41, 0xa2a, 0xa07, 0xa06, 0x631, 0x648, 0x67e,
+0x626, 0x6cc, 0x6c1, 0x53, 0x6f, 0x6c, 0x20, 0x50, 0x65, 0x72, 0x75, 0x61,
+0x6e, 0x6f, 0x42, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x6e, 0x6f, 0x44,
+0xf3, 0x6c, 0x61, 0x72, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
+0x6e, 0x6f, 0x6c, 0x65, 0x75, 0x20, 0x72, 0x6f, 0x6d, 0xe2, 0x6e, 0x65,
+0x73, 0x63, 0x6c, 0x65, 0x75, 0x20, 0x6d, 0x6f, 0x6c, 0x64, 0x6f, 0x76,
+0x65, 0x6e, 0x65, 0x73, 0x63, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x20, 0x73,
+0x76, 0x69, 0x7a, 0x7a, 0x65, 0x72, 0x68, 0x65, 0x6c, 0x65, 0x72, 0x69,
+0x20, 0x73, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61,
+0x49, 0x66, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x72, 0x79, 0x2019,
+0x55, 0x62, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x69, 0x440, 0x43e, 0x441, 0x441,
+0x438, 0x439, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x440, 0x443, 0x431, 0x43b, 0x44c,
+0x431, 0x435, 0x43b, 0x43e, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x439, 0x20,
+0x440, 0x443, 0x431, 0x43b, 0x44c, 0x43a, 0x430, 0x437, 0x430, 0x445, 0x441, 0x43a,
+0x438, 0x439, 0x20, 0x442, 0x435, 0x43d, 0x433, 0x435, 0x43a, 0x438, 0x440, 0x433,
+0x438, 0x437, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x441, 0x43e, 0x43c, 0x43c, 0x43e,
+0x43b, 0x434, 0x430, 0x432, 0x441, 0x43a, 0x438, 0x439, 0x20, 0x43b, 0x435, 0x439,
+0x443, 0x43a, 0x440, 0x430, 0x438, 0x43d, 0x441, 0x43a, 0x430, 0x44f, 0x20, 0x433,
+0x440, 0x438, 0x432, 0x43d, 0x430, 0x410, 0x440, 0x430, 0x441, 0x441, 0x44b, 0x44b,
+0x439, 0x430, 0x20, 0x441, 0x43e, 0x43b, 0x43a, 0x443, 0x43e, 0x431, 0x430, 0x439,
+0x430, 0x4e, 0x6a, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x65, 0x65,
+0x6c, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x66, 0x61, 0x72, 0xe2, 0x6e,
+0x67, 0x61, 0x20, 0x43, 0x46, 0x41, 0x20, 0x28, 0x42, 0x45, 0x41, 0x43,
+0x29, 0x49, 0x68, 0x65, 0x6c, 0x61, 0x20, 0x79, 0x61, 0x20, 0x54, 0x61,
+0x6e, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x92d, 0x93e, 0x930, 0x924, 0x940,
+0x92f, 0x20, 0x930, 0x942, 0x92a, 0x94d, 0x92f, 0x915, 0x92e, 0x94d, 0x1c65, 0x1c64,
+0x1c67, 0x1c5a, 0x1c5b, 0x20, 0x1c68, 0x1c6e, 0x1c71, 0x1c5f, 0x1c5c, 0x20, 0x1c74, 0x1c5f,
+0x1c60, 0x1c5f, 0xe8, 0x75, 0x72, 0x6f, 0x4d, 0x65, 0x74, 0x69, 0x63, 0x61,
+0x6c, 0x20, 0x64, 0x65, 0x20, 0x4d, 0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69,
+0x71, 0x75, 0x65, 0x441, 0x440, 0x43f, 0x441, 0x43a, 0x438, 0x20, 0x434, 0x438,
+0x43d, 0x430, 0x440, 0x411, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x43e, 0x445,
+0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x430, 0x447, 0x43a, 0x430, 0x20,
+0x43a, 0x43e, 0x43d, 0x432, 0x435, 0x440, 0x442, 0x438, 0x431, 0x438, 0x43b, 0x43d,
+0x430, 0x20, 0x43c, 0x430, 0x440, 0x43a, 0x430, 0x415, 0x432, 0x440, 0x43e, 0x45,
+0x76, 0x72, 0x6f, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x69, 0x20, 0x64, 0x69,
+0x6e, 0x61, 0x72, 0x73, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x20,
+0x79, 0x61, 0x20, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x44,
+0x6f, 0x72, 0x61, 0x20, 0x72, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x6b, 0x61, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0x64a, 0x20, 0x631,
+0x67e, 0x64a, 0x939, 0x93f, 0x902, 0x926, 0x941, 0x938, 0x94d, 0x924, 0x93e, 0x928,
+0x940, 0x20, 0x930, 0x941, 0x92a, 0x92f, 0x94b, 0xdc1, 0xdca, 0x200d, 0xdbb, 0xdd3,
+0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0x20, 0xdbb, 0xdd4, 0xdb4, 0xdd2, 0xdba, 0xdbd,
+0x65, 0x76, 0x72, 0x6f, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x6b,
+0x61, 0x20, 0x53, 0x6f, 0x6f, 0x6d, 0x61, 0x61, 0x6c, 0x69, 0x79, 0x61,
+0x46, 0x61, 0x72, 0x61, 0x6e, 0x20, 0x4a, 0x61, 0x62, 0x75, 0x75, 0x74,
+0x69, 0x42, 0x69, 0x72, 0x74, 0x61, 0x20, 0x49, 0x74, 0x6f, 0x6f, 0x62,
+0x62, 0x69, 0x79, 0x61, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x6b,
+0x61, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x70, 0x65, 0x73, 0x6f, 0x20,
+0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x6f, 0x64, 0xf3, 0x6c,
+0x61, 0x72, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x63, 0x65, 0xf1, 0x6f, 0x62,
+0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x6e, 0x6f, 0x72, 0x65, 0x61, 0x6c,
+0x20, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x65, 0xf1, 0x6f, 0x50, 0x65,
+0x73, 0x6f, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x6e, 0x6f, 0x70, 0x65,
+0x73, 0x6f, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x69, 0x61, 0x6e,
+0x6f, 0x63, 0x6f, 0x6c, 0xf3, 0x6e, 0x20, 0x63, 0x6f, 0x73, 0x74, 0x61,
+0x72, 0x72, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x70, 0x65, 0x73, 0x6f,
+0x20, 0x63, 0x75, 0x62, 0x61, 0x6e, 0x6f, 0x70, 0x65, 0x73, 0x6f, 0x20,
+0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x64, 0xf3,
+0x6c, 0x61, 0x72, 0x20, 0x65, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x75, 0x6e,
+0x69, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x6f,
+0x20, 0x43, 0x46, 0x41, 0x20, 0x64, 0x65, 0x20, 0xc1, 0x66, 0x72, 0x69,
+0x63, 0x61, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x71, 0x75,
+0x65, 0x74, 0x7a, 0x61, 0x6c, 0x6c, 0x65, 0x6d, 0x70, 0x69, 0x72, 0x61,
+0x20, 0x68, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x65, 0xf1, 0x6f, 0x70, 0x65,
+0x73, 0x6f, 0x20, 0x6d, 0x65, 0x78, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x63,
+0xf3, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x20, 0x6e, 0x69, 0x63, 0x61, 0x72,
+0x61, 0x67, 0xfc, 0x65, 0x6e, 0x73, 0x65, 0x62, 0x61, 0x6c, 0x62, 0x6f,
+0x61, 0x20, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x65, 0xf1, 0x6f, 0x67, 0x75,
+0x61, 0x72, 0x61, 0x6e, 0xed, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x75,
+0x61, 0x79, 0x6f, 0x73, 0x6f, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x75, 0x61,
+0x6e, 0x6f, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x69, 0x70,
+0x69, 0x6e, 0x6f, 0x70, 0x65, 0x73, 0x6f, 0x20, 0x75, 0x72, 0x75, 0x67,
+0x75, 0x61, 0x79, 0x6f, 0x62, 0x6f, 0x6c, 0xed, 0x76, 0x61, 0x72, 0x20,
+0x73, 0x6f, 0x62, 0x65, 0x72, 0x61, 0x6e, 0x6f, 0x2d30, 0x2d37, 0x2d54, 0x2d49,
+0x2d4e, 0x20, 0x2d4f, 0x20, 0x2d4d, 0x2d4e, 0x2d56, 0x2d54, 0x2d49, 0x2d31, 0x52, 0x75,
+0x70, 0x65, 0x65, 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0xe9, 0x73, 0x69,
+0x61, 0x46, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x61, 0x20, 0x79, 0x61, 0x20,
+0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x53, 0x68, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+0x69, 0x20, 0x79, 0x61, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x73,
+0x76, 0x65, 0x6e, 0x73, 0x6b, 0x20, 0x6b, 0x72, 0x6f, 0x6e, 0x61, 0x53,
+0x63, 0x68, 0x77, 0x69, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x46, 0x72, 0x61,
+0x6e, 0x6b, 0x65, 0x61, 0x64, 0x72, 0x69, 0x6d, 0x20, 0x6e, 0x20, 0x6c,
+0x6d, 0x263, 0x72, 0x69, 0x62, 0x421, 0x43e, 0x43c, 0x43e, 0x43d, 0x4e3, 0xb87,
+0xba8, 0xbcd, 0xba4, 0xbbf, 0xbaf, 0x20, 0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd,
+0xbae, 0xbb2, 0xbc7, 0xbb7, 0xbbf, 0xbaf, 0xba9, 0xbcd, 0x20, 0xbb0, 0xbbf, 0xb99,
+0xbcd, 0xb95, 0xbbf, 0xb9f, 0xbcd, 0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd,
+0xbaa, 0xbc2, 0xbb0, 0xbcd, 0x20, 0xb9f, 0xbbe, 0xbb2, 0xbb0, 0xbcd, 0xb87, 0xbb2,
+0xb99, 0xbcd, 0xb95, 0xbc8, 0x20, 0xbb0, 0xbc2, 0xbaa, 0xbbe, 0xbaf, 0xbcd, 0x70,
+0x69, 0x6c, 0x61, 0x20, 0x54, 0x61, 0x69, 0x77, 0x61, 0x6e, 0x420, 0x43e,
+0x441, 0x441, 0x438, 0x44f, 0x20, 0x441, 0x443, 0x43c, 0x44b, 0xc2d, 0xc3e, 0xc30,
+0xc24, 0xc26, 0xc47, 0xc36, 0x20, 0xc30, 0xc42, 0xc2a, 0xc3e, 0xc2f, 0xc3f, 0x41,
+0x6e, 0x67, 0x6f, 0x2019, 0x6f, 0x74, 0x6f, 0x6c, 0x20, 0x6c, 0x6f, 0x6b,
+0x2019, 0x20, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x41, 0x6e, 0x67, 0x6f,
+0x2019, 0x6f, 0x74, 0x6f, 0x6c, 0x20, 0x6c, 0x6f, 0x6b, 0x2019, 0x20, 0x4b,
+0x65, 0x6e, 0x79, 0x61, 0xe1a, 0xe32, 0xe17, 0xf61, 0xf74, 0xf0b, 0xf68, 0xf53,
+0xf0b, 0xf62, 0xf92, 0xfb1, 0xf0b, 0xf42, 0xf62, 0xf0b, 0xf66, 0xf92, 0xf7c, 0xf62,
+0xf0b, 0x1293, 0x1255, 0x134b, 0x50, 0x61, 0x2bb, 0x61, 0x6e, 0x67, 0x61, 0x20,
+0x66, 0x61, 0x6b, 0x61, 0x74, 0x6f, 0x6e, 0x67, 0x61, 0x54, 0xfc, 0x72,
+0x6b, 0x20, 0x6c, 0x69, 0x72, 0x61, 0x73, 0x131, 0x54, 0xfc, 0x72, 0x6b,
+0x6d, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x64, 0x79, 0x4e, 0x65,
+0x72, 0x61, 0x443, 0x43a, 0x440, 0x430, 0x457, 0x43d, 0x441, 0x44c, 0x43a, 0x430,
+0x20, 0x433, 0x440, 0x438, 0x432, 0x43d, 0x44f, 0x67e, 0x627, 0x6a9, 0x633, 0x62a,
+0x627, 0x646, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc, 0x6c1, 0x628, 0x6be, 0x627,
+0x631, 0x62a, 0x6cc, 0x20, 0x631, 0x648, 0x67e, 0x6cc, 0x6c1, 0x62c, 0x6c7, 0x6ad,
+0x6af, 0x648, 0x20, 0x64a, 0x6c8, 0x6d5, 0x646, 0x649, 0x4f, 0x2018, 0x7a, 0x62,
+0x65, 0x6b, 0x69, 0x73, 0x74, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x2018, 0x6d,
+0x69, 0x40e, 0x437, 0x431, 0x435, 0x43a, 0x438, 0x441, 0x442, 0x43e, 0x43d, 0x20,
+0x441, 0x45e, 0x43c, 0xa55e, 0xa524, 0xa52b, 0xa569, 0x20, 0xa55c, 0xa55e, 0xa54c, 0x4c,
+0x61, 0x69, 0x62, 0x68, 0x69, 0x79, 0x61, 0x20, 0x44, 0x61, 0x6c, 0x61,
+0x110, 0x1ed3, 0x6e, 0x67, 0x20, 0x56, 0x69, 0x1ec7, 0x74, 0x20, 0x4e, 0x61,
+0x6d, 0x50, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x79, 0x64, 0x61, 0x69,
+0x6e, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x626, 0x20, 0x631, 0x648,
+0x67e, 0x6cc, 0x627, 0x648, 0x6af, 0x627, 0x646, 0x633, 0x62a, 0x627, 0x646, 0x626,
+0x20, 0x627, 0x648, 0x6af, 0x627, 0x646, 0x6cc, 0x627, 0x6cc, 0x631, 0x627, 0x646,
+0x626, 0x20, 0x631, 0x6cc, 0x627, 0x644, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x20,
+0x43, 0x46, 0x41, 0x20, 0x62, 0x75, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b,
+0x20, 0x53, 0x6f, 0x77, 0x77, 0x75, 0x2d, 0x6a, 0x61, 0x6e, 0x74, 0x49,
+0x52, 0x61, 0x6e, 0x64, 0x69, 0x20, 0x79, 0x61, 0x73, 0x65, 0x4d, 0x7a,
+0x61, 0x6e, 0x74, 0x73, 0x69, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61,
+0x4e, 0xe1, 0xed, 0x72, 0xe0, 0x20, 0x4e, 0xe0, 0xec, 0x6a, 0xed, 0x72,
+0xed, 0xe0, 0x46, 0x61, 0x72, 0x61, 0x6e, 0x73, 0xec, 0x20, 0xec, 0x77,
+0x254, 0x300, 0x2d, 0x6f, 0x6f, 0x72, 0xf9, 0x6e, 0x20, 0x41, 0x66, 0xed,
+0x72, 0xed, 0x6b, 0xe0, 0x79, 0x69, 0x6e, 0x7a, 0x6d, 0x69, 0x6e, 0x7a,
+0x62, 0x69, 0x69, 0x2d, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66,
+0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x61, 0x6e, 0x64, 0x4d, 0x72,
+0x61, 0x73, 0x69, 0x72, 0x20, 0x52, 0x65, 0x6a, 0x61, 0x72, 0x52, 0x65,
+0x61, 0x75, 0x20, 0x42, 0x72, 0x61, 0x73, 0x69, 0x75, 0x77, 0x61, 0x72,
+0x61, 0x50, 0x65, 0x73, 0x6f, 0x20, 0x4b, 0x75, 0x72, 0x169, 0x62, 0x69,
+0x79, 0x61, 0x77, 0x61, 0x72, 0x61, 0x42, 0x75, 0x72, 0x69, 0x77, 0x61,
+0x72, 0x69, 0x20, 0x57, 0x65, 0x6e, 0x65, 0x73, 0x75, 0x65, 0x72, 0x61,
+0x77, 0x61, 0x72, 0x61, 0x50, 0xe1, 0x6b, 0x65, 0x73, 0x74, 0xe1, 0x6e,
+0x69, 0x20, 0x72, 0x75, 0x70, 0x69, 0x47, 0x61, 0x72, 0x269, 0x256, 0x6f,
+0x6e, 0x74, 0x1dd, 0x6e, 0x61, 0x20, 0x67, 0x269, 0x74, 0x65, 0x14b, 0x73,
+0x68, 0x69, 0x6c, 0x65, 0x6c, 0x61, 0x14b, 0x20, 0x6b, 0x61, 0x73, 0x25b,
+0x25b, 0x66, 0x61, 0x92d, 0x93e, 0x930, 0x924, 0x947, 0x20, 0x926, 0x93e, 0x20,
+0x930, 0x941, 0x92a, 0x92f, 0x93e
};
-static const char16_t currency_format_data[] = {
-0x25, 0x31, 0x25, 0x32, 0x25, 0x32, 0x25, 0x31, 0x25, 0x32, 0xa0, 0x25, 0x31, 0x28, 0x25, 0x32, 0x25, 0x31, 0x29, 0x25,
-0x31, 0xa0, 0x25, 0x32, 0x28, 0x25, 0x31, 0xa0, 0x25, 0x32, 0x29, 0x28, 0x25, 0x31, 0x25, 0x32, 0x29, 0x28, 0x25, 0x32,
-0xa0, 0x25, 0x31, 0x29, 0x25, 0x32, 0x2d, 0x25, 0x31, 0x25, 0x32, 0x2212, 0x25, 0x31, 0x200e, 0x25, 0x32, 0xa0, 0x25, 0x31,
-0x200e, 0x28, 0x25, 0x32, 0xa0, 0x25, 0x31, 0x29, 0x25, 0x32, 0x2d, 0xa0, 0x25, 0x31
+static constexpr char16_t currency_format_data[] = {
+0x25, 0x31, 0x25, 0x32, 0x25, 0x31, 0xa0, 0x25, 0x32, 0x28, 0x25, 0x32,
+0x25, 0x31, 0x29, 0x25, 0x32, 0xa0, 0x25, 0x31, 0x28, 0x25, 0x31, 0xa0,
+0x25, 0x32, 0x29, 0x200f, 0x25, 0x31, 0xa0, 0x25, 0x32, 0x61c, 0x25, 0x31,
+0x25, 0x32, 0x28, 0x61c, 0x25, 0x31, 0x25, 0x32, 0x29, 0x28, 0x25, 0x31,
+0x25, 0x32, 0x29, 0x28, 0x25, 0x31, 0x29, 0xa0, 0x25, 0x32, 0x28, 0x25,
+0x32, 0xa0, 0x25, 0x31, 0x29, 0x25, 0x32, 0x2d, 0x25, 0x31, 0x200f, 0x25,
+0x31, 0xa0, 0x200f, 0x25, 0x32, 0x200f, 0x200e, 0x2d, 0x25, 0x31, 0xa0, 0x200f,
+0x25, 0x32, 0x25, 0x32, 0xa0, 0x2d, 0x25, 0x31, 0x25, 0x32, 0x2212, 0x25,
+0x31, 0x25, 0x32, 0x2d, 0xa0, 0x25, 0x31, 0x200e, 0x25, 0x32, 0xa0, 0x25,
+0x31, 0x200e, 0x28, 0x25, 0x32, 0xa0, 0x25, 0x31, 0x29, 0x25, 0x31, 0x202f,
+0x25, 0x32
};
-static const char16_t endonyms_data[] = {
-0x4f, 0x72, 0x6f, 0x6d, 0x6f, 0x6f, 0x49, 0x74, 0x6f, 0x6f, 0x70, 0x68, 0x69, 0x79, 0x61, 0x61, 0x4b, 0x65, 0x65, 0x6e,
-0x69, 0x79, 0x61, 0x61, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, 0x6e, 0x73, 0x53, 0x75, 0x69, 0x64, 0x2d, 0x41, 0x66,
-0x72, 0x69, 0x6b, 0x61, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0xeb, 0x73, 0x68, 0x71, 0x69, 0x70, 0x53, 0x68, 0x71, 0x69,
-0x70, 0xeb, 0x72, 0x69, 0x4d, 0x61, 0x71, 0x65, 0x64, 0x6f, 0x6e, 0x69, 0x61, 0x20, 0x65, 0x20, 0x56, 0x65, 0x72, 0x69,
-0x75, 0x74, 0x4b, 0x6f, 0x73, 0x6f, 0x76, 0xeb, 0x12a0, 0x121b, 0x122d, 0x129b, 0x12a2, 0x1275, 0x12ee, 0x1335, 0x12eb, 0x627, 0x644, 0x639,
-0x631, 0x628, 0x64a, 0x629, 0x645, 0x635, 0x631, 0x627, 0x644, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x627, 0x644, 0x628, 0x62d, 0x631, 0x64a,
-0x646, 0x62a, 0x634, 0x627, 0x62f, 0x62c, 0x632, 0x631, 0x20, 0x627, 0x644, 0x642, 0x645, 0x631, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a,
-0x625, 0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x627, 0x627, 0x644, 0x639, 0x631, 0x627, 0x642, 0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644,
-0x627, 0x644, 0x623, 0x631, 0x62f, 0x646, 0x627, 0x644, 0x643, 0x648, 0x64a, 0x62a, 0x644, 0x628, 0x646, 0x627, 0x646, 0x644, 0x64a, 0x628,
-0x64a, 0x627, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646, 0x64a, 0x627, 0x627, 0x644, 0x645, 0x63a, 0x631, 0x628, 0x639, 0x64f, 0x645,
-0x627, 0x646, 0x627, 0x644, 0x623, 0x631, 0x627, 0x636, 0x64a, 0x20, 0x627, 0x644, 0x641, 0x644, 0x633, 0x637, 0x64a, 0x646, 0x64a, 0x629,
-0x642, 0x637, 0x631, 0x627, 0x644, 0x645, 0x645, 0x644, 0x643, 0x629, 0x20, 0x627, 0x644, 0x639, 0x631, 0x628, 0x64a, 0x629, 0x20, 0x627,
-0x644, 0x633, 0x639, 0x648, 0x62f, 0x64a, 0x629, 0x627, 0x644, 0x635, 0x648, 0x645, 0x627, 0x644, 0x627, 0x644, 0x633, 0x648, 0x62f, 0x627,
-0x646, 0x633, 0x648, 0x631, 0x64a, 0x627, 0x62a, 0x648, 0x646, 0x633, 0x627, 0x644, 0x625, 0x645, 0x627, 0x631, 0x627, 0x62a, 0x20, 0x627,
-0x644, 0x639, 0x631, 0x628, 0x64a, 0x629, 0x20, 0x627, 0x644, 0x645, 0x62a, 0x62d, 0x62f, 0x629, 0x627, 0x644, 0x635, 0x62d, 0x631, 0x627,
-0x621, 0x20, 0x627, 0x644, 0x63a, 0x631, 0x628, 0x64a, 0x629, 0x627, 0x644, 0x64a, 0x645, 0x646, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627,
-0x644, 0x633, 0x648, 0x62f, 0x627, 0x646, 0x627, 0x644, 0x639, 0x631, 0x628, 0x64a, 0x629, 0x20, 0x627, 0x644, 0x641, 0x635, 0x62d, 0x649,
-0x20, 0x627, 0x644, 0x62d, 0x62f, 0x64a, 0x62b, 0x629, 0x627, 0x644, 0x639, 0x627, 0x644, 0x645, 0x570, 0x561, 0x575, 0x565, 0x580, 0x565,
-0x576, 0x540, 0x561, 0x575, 0x561, 0x57d, 0x57f, 0x561, 0x576, 0x985, 0x9b8, 0x9ae, 0x9c0, 0x9af, 0x9bc, 0x9be, 0x9ad, 0x9be, 0x9f0, 0x9a4,
-0x61, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e, 0x41, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e,
-0x430, 0x437, 0x4d9, 0x440, 0x431, 0x430, 0x458, 0x4b9, 0x430, 0x43d, 0x410, 0x437, 0x4d9, 0x440, 0x431, 0x430, 0x458, 0x4b9, 0x430, 0x43d,
-0x65, 0x75, 0x73, 0x6b, 0x61, 0x72, 0x61, 0x45, 0x73, 0x70, 0x61, 0x69, 0x6e, 0x69, 0x61, 0x9ac, 0x9be, 0x982, 0x9b2, 0x9be,
-0x9ac, 0x9be, 0x982, 0x9b2, 0x9be, 0x9a6, 0x9c7, 0x9b6, 0x9ad, 0x9be, 0x9b0, 0x9a4, 0xf62, 0xfab, 0xf7c, 0xf44, 0xf0b, 0xf41, 0xf60, 0xf56,
-0xfb2, 0xf74, 0xf42, 0x62, 0x72, 0x65, 0x7a, 0x68, 0x6f, 0x6e, 0x65, 0x67, 0x46, 0x72, 0x61, 0xf1, 0x73, 0x431, 0x44a, 0x43b,
-0x433, 0x430, 0x440, 0x441, 0x43a, 0x438, 0x411, 0x44a, 0x43b, 0x433, 0x430, 0x440, 0x438, 0x44f, 0x1019, 0x103c, 0x1014, 0x103a, 0x1019, 0x102c,
-0x431, 0x435, 0x43b, 0x430, 0x440, 0x443, 0x441, 0x43a, 0x430, 0x44f, 0x411, 0x435, 0x43b, 0x430, 0x440, 0x443, 0x441, 0x44c, 0x1781, 0x17d2,
-0x1798, 0x17c2, 0x179a, 0x1780, 0x1798, 0x17d2, 0x1796, 0x17bb, 0x1787, 0x17b6, 0x63, 0x61, 0x74, 0x61, 0x6c, 0xe0, 0x45, 0x73, 0x70, 0x61,
-0x6e, 0x79, 0x61, 0x41, 0x6e, 0x64, 0x6f, 0x72, 0x72, 0x61, 0x46, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x49, 0x74, 0xe0, 0x6c,
-0x69, 0x61, 0x7b80, 0x4f53, 0x4e2d, 0x6587, 0x4e2d, 0x56fd, 0x4e2d, 0x56fd, 0x9999, 0x6e2f, 0x7279, 0x522b, 0x884c, 0x653f, 0x533a, 0x4e2d, 0x56fd, 0x6fb3,
-0x95e8, 0x7279, 0x522b, 0x884c, 0x653f, 0x533a, 0x65b0, 0x52a0, 0x5761, 0x7e41, 0x9ad4, 0x4e2d, 0x6587, 0x4e2d, 0x570b, 0x9999, 0x6e2f, 0x7279, 0x5225, 0x884c,
-0x653f, 0x5340, 0x4e2d, 0x570b, 0x6fb3, 0x9580, 0x7279, 0x5225, 0x884c, 0x653f, 0x5340, 0x53f0, 0x7063, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b,
-0x69, 0x48, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x61, 0x42, 0x6f, 0x73, 0x6e, 0x61, 0x20, 0x69, 0x20, 0x48, 0x65, 0x72,
-0x63, 0x65, 0x67, 0x6f, 0x76, 0x69, 0x6e, 0x61, 0x10d, 0x65, 0x161, 0x74, 0x69, 0x6e, 0x61, 0x10c, 0x65, 0x73, 0x6b, 0x6f,
-0x64, 0x61, 0x6e, 0x73, 0x6b, 0x44, 0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x47, 0x72, 0xf8, 0x6e, 0x6c, 0x61, 0x6e, 0x64,
-0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x41, 0x72, 0x75, 0x62, 0x61, 0x42, 0x65, 0x6c, 0x67, 0x69,
-0xeb, 0x43, 0x75, 0x72, 0x61, 0xe7, 0x61, 0x6f, 0x53, 0x75, 0x72, 0x69, 0x6e, 0x61, 0x6d, 0x65, 0x43, 0x61, 0x72, 0x69,
-0x62, 0x69, 0x73, 0x63, 0x68, 0x20, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x2d,
-0x4d, 0x61, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x45, 0x6e, 0x67, 0x6c,
-0x69, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x41, 0x6d, 0x65, 0x72,
-0x69, 0x63, 0x61, 0x6e, 0x20, 0x53, 0x61, 0x6d, 0x6f, 0x61, 0x41, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61, 0x41, 0x6e,
-0x74, 0x69, 0x67, 0x75, 0x61, 0x20, 0x26, 0x20, 0x42, 0x61, 0x72, 0x62, 0x75, 0x64, 0x61, 0x41, 0x75, 0x73, 0x74, 0x72,
-0x61, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x41, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61,
-0x42, 0x61, 0x68, 0x61, 0x6d, 0x61, 0x73, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64, 0x6f, 0x73, 0x42, 0x65, 0x6c, 0x67, 0x69,
-0x75, 0x6d, 0x42, 0x65, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x65, 0x72, 0x6d, 0x75, 0x64, 0x61, 0x42, 0x6f, 0x74, 0x73, 0x77,
-0x61, 0x6e, 0x61, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x4f, 0x63,
-0x65, 0x61, 0x6e, 0x20, 0x54, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x75, 0x72, 0x75, 0x6e, 0x64, 0x69,
-0x43, 0x61, 0x6d, 0x65, 0x72, 0x6f, 0x6f, 0x6e, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x45, 0x6e, 0x67,
-0x6c, 0x69, 0x73, 0x68, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x43, 0x61, 0x79, 0x6d, 0x61, 0x6e, 0x20, 0x49, 0x73, 0x6c,
-0x61, 0x6e, 0x64, 0x73, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6d, 0x61, 0x73, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64,
-0x43, 0x6f, 0x63, 0x6f, 0x73, 0x20, 0x28, 0x4b, 0x65, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x49, 0x73, 0x6c, 0x61,
-0x6e, 0x64, 0x73, 0x43, 0x6f, 0x6f, 0x6b, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x43, 0x79, 0x70, 0x72, 0x75,
-0x73, 0x44, 0x65, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x45, 0x72, 0x69, 0x74,
-0x72, 0x65, 0x61, 0x46, 0x61, 0x6c, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x46,
-0x69, 0x6a, 0x69, 0x46, 0x69, 0x6e, 0x6c, 0x61, 0x6e, 0x64, 0x47, 0x75, 0x65, 0x72, 0x6e, 0x73, 0x65, 0x79, 0x47, 0x61,
-0x6d, 0x62, 0x69, 0x61, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x79, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x47, 0x69, 0x62, 0x72,
-0x61, 0x6c, 0x74, 0x61, 0x72, 0x47, 0x72, 0x65, 0x6e, 0x61, 0x64, 0x61, 0x47, 0x75, 0x61, 0x6d, 0x47, 0x75, 0x79, 0x61,
-0x6e, 0x61, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x20, 0x53, 0x41, 0x52, 0x20, 0x43, 0x68, 0x69, 0x6e,
-0x61, 0x49, 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x49, 0x73, 0x72, 0x61, 0x65, 0x6c, 0x4a, 0x61, 0x6d, 0x61, 0x69, 0x63,
-0x61, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x4b, 0x69, 0x72, 0x69, 0x62, 0x61, 0x74, 0x69, 0x4c, 0x65, 0x73, 0x6f, 0x74, 0x68,
-0x6f, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x69, 0x61, 0x4d, 0x61, 0x63, 0x61, 0x6f, 0x20, 0x53, 0x41, 0x52, 0x20, 0x43, 0x68,
-0x69, 0x6e, 0x61, 0x4d, 0x61, 0x64, 0x61, 0x67, 0x61, 0x73, 0x63, 0x61, 0x72, 0x4d, 0x61, 0x6c, 0x61, 0x77, 0x69, 0x4d,
-0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x4d, 0x61, 0x6c, 0x74, 0x61, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x6c,
-0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69, 0x75, 0x73, 0x4d, 0x69, 0x63,
-0x72, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x4d, 0x6f, 0x6e, 0x74, 0x73, 0x65, 0x72, 0x72, 0x61, 0x74, 0x4e, 0x61, 0x6d,
-0x69, 0x62, 0x69, 0x61, 0x4e, 0x61, 0x75, 0x72, 0x75, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73,
-0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c, 0x61, 0x6e, 0x64, 0x4e, 0x69, 0x67, 0x65, 0x72, 0x69, 0x61, 0x4e, 0x69,
-0x75, 0x65, 0x4e, 0x6f, 0x72, 0x66, 0x6f, 0x6c, 0x6b, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x4e, 0x6f, 0x72, 0x74,
-0x68, 0x65, 0x72, 0x6e, 0x20, 0x4d, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x61, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73,
-0x50, 0x61, 0x6b, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x50, 0x61, 0x6c, 0x61, 0x75, 0x50, 0x61, 0x70, 0x75, 0x61, 0x20, 0x4e,
-0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6e, 0x65, 0x61, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73,
-0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x50, 0x75, 0x65, 0x72,
-0x74, 0x6f, 0x20, 0x52, 0x69, 0x63, 0x6f, 0x52, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x53, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x74,
-0x73, 0x20, 0x26, 0x20, 0x4e, 0x65, 0x76, 0x69, 0x73, 0x53, 0x74, 0x20, 0x4c, 0x75, 0x63, 0x69, 0x61, 0x53, 0x74, 0x20,
-0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x26, 0x20, 0x47, 0x72, 0x65, 0x6e, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73,
-0x53, 0x65, 0x79, 0x63, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x4c, 0x65, 0x6f,
-0x6e, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x53, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x69, 0x61, 0x53,
-0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20,
-0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x53, 0x74, 0x20, 0x48, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x53, 0x75, 0x64, 0x61, 0x6e,
-0x45, 0x73, 0x77, 0x61, 0x74, 0x69, 0x6e, 0x69, 0x53, 0x77, 0x65, 0x64, 0x65, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x7a, 0x65,
-0x72, 0x6c, 0x61, 0x6e, 0x64, 0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x54, 0x6f, 0x6b, 0x65, 0x6c, 0x61, 0x75,
-0x54, 0x6f, 0x6e, 0x67, 0x61, 0x54, 0x72, 0x69, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x20, 0x26, 0x20, 0x54, 0x6f, 0x62, 0x61,
-0x67, 0x6f, 0x54, 0x75, 0x72, 0x6b, 0x73, 0x20, 0x26, 0x20, 0x43, 0x61, 0x69, 0x63, 0x6f, 0x73, 0x20, 0x49, 0x73, 0x6c,
-0x61, 0x6e, 0x64, 0x73, 0x54, 0x75, 0x76, 0x61, 0x6c, 0x75, 0x55, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x55, 0x6e, 0x69, 0x74,
-0x65, 0x64, 0x20, 0x41, 0x72, 0x61, 0x62, 0x20, 0x45, 0x6d, 0x69, 0x72, 0x61, 0x74, 0x65, 0x73, 0x42, 0x72, 0x69, 0x74,
-0x69, 0x73, 0x68, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, 0x69,
-0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x55, 0x2e, 0x53, 0x2e, 0x20, 0x4f, 0x75, 0x74, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x49,
-0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x56, 0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68,
-0x20, 0x56, 0x69, 0x72, 0x67, 0x69, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x55, 0x2e, 0x53, 0x2e, 0x20,
-0x56, 0x69, 0x72, 0x67, 0x69, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x5a, 0x61, 0x6d, 0x62, 0x69, 0x61,
-0x5a, 0x69, 0x6d, 0x62, 0x61, 0x62, 0x77, 0x65, 0x44, 0x69, 0x65, 0x67, 0x6f, 0x20, 0x47, 0x61, 0x72, 0x63, 0x69, 0x61,
-0x49, 0x73, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x6e, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x53, 0x6f, 0x75,
-0x74, 0x68, 0x20, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x53, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x61, 0x61, 0x72, 0x74, 0x65, 0x6e,
-0x57, 0x6f, 0x72, 0x6c, 0x64, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x65, 0x73, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x74, 0x6f,
-0x4d, 0x6f, 0x6e, 0x64, 0x6f, 0x65, 0x65, 0x73, 0x74, 0x69, 0x45, 0x65, 0x73, 0x74, 0x69, 0x66, 0xf8, 0x72, 0x6f, 0x79,
-0x73, 0x6b, 0x74, 0x46, 0xf8, 0x72, 0x6f, 0x79, 0x61, 0x72, 0x73, 0x75, 0x6f, 0x6d, 0x69, 0x53, 0x75, 0x6f, 0x6d, 0x69,
-0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69, 0x73, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x6c, 0x67, 0xe9, 0x72, 0x69,
-0x65, 0x42, 0x65, 0x6c, 0x67, 0x69, 0x71, 0x75, 0x65, 0x42, 0xe9, 0x6e, 0x69, 0x6e, 0x42, 0x75, 0x72, 0x6b, 0x69, 0x6e,
-0x61, 0x20, 0x46, 0x61, 0x73, 0x6f, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61,
-0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x52, 0xe9, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x71, 0x75,
-0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x66, 0x72, 0x69, 0x63, 0x61, 0x69, 0x6e, 0x65, 0x54, 0x63, 0x68, 0x61,
-0x64, 0x43, 0x6f, 0x6d, 0x6f, 0x72, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x67, 0x6f, 0x2d, 0x4b, 0x69, 0x6e, 0x73, 0x68, 0x61,
-0x73, 0x61, 0x43, 0x6f, 0x6e, 0x67, 0x6f, 0x2d, 0x42, 0x72, 0x61, 0x7a, 0x7a, 0x61, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x43,
-0xf4, 0x74, 0x65, 0x20, 0x64, 0x2019, 0x49, 0x76, 0x6f, 0x69, 0x72, 0x65, 0x44, 0x6a, 0x69, 0x62, 0x6f, 0x75, 0x74, 0x69,
-0x47, 0x75, 0x69, 0x6e, 0xe9, 0x65, 0x20, 0xe9, 0x71, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x47, 0x75,
-0x79, 0x61, 0x6e, 0x65, 0x20, 0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69, 0x73, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6e, 0xe9,
-0x73, 0x69, 0x65, 0x20, 0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69, 0x73, 0x65, 0x47, 0x61, 0x62, 0x6f, 0x6e, 0x47, 0x75,
-0x61, 0x64, 0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65, 0x48, 0x61, 0xef, 0x74, 0x69, 0x4c, 0x75, 0x78, 0x65, 0x6d, 0x62, 0x6f,
-0x75, 0x72, 0x67, 0x4d, 0x61, 0x6c, 0x69, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4d, 0x61, 0x75,
-0x72, 0x69, 0x74, 0x61, 0x6e, 0x69, 0x65, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x79, 0x6f, 0x74, 0x74,
-0x65, 0x4d, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x4d, 0x61, 0x72, 0x6f, 0x63, 0x4e, 0x6f, 0x75, 0x76, 0x65, 0x6c, 0x6c, 0x65,
-0x2d, 0x43, 0x61, 0x6c, 0xe9, 0x64, 0x6f, 0x6e, 0x69, 0x65, 0x4c, 0x61, 0x20, 0x52, 0xe9, 0x75, 0x6e, 0x69, 0x6f, 0x6e,
-0x53, 0xe9, 0x6e, 0xe9, 0x67, 0x61, 0x6c, 0x53, 0x61, 0x69, 0x6e, 0x74, 0x2d, 0x50, 0x69, 0x65, 0x72, 0x72, 0x65, 0x2d,
-0x65, 0x74, 0x2d, 0x4d, 0x69, 0x71, 0x75, 0x65, 0x6c, 0x6f, 0x6e, 0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69, 0x73, 0x20,
-0x73, 0x75, 0x69, 0x73, 0x73, 0x65, 0x53, 0x75, 0x69, 0x73, 0x73, 0x65, 0x53, 0x79, 0x72, 0x69, 0x65, 0x54, 0x6f, 0x67,
-0x6f, 0x54, 0x75, 0x6e, 0x69, 0x73, 0x69, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x2d, 0x65, 0x74, 0x2d, 0x46, 0x75,
-0x74, 0x75, 0x6e, 0x61, 0x53, 0x61, 0x69, 0x6e, 0x74, 0x2d, 0x42, 0x61, 0x72, 0x74, 0x68, 0xe9, 0x6c, 0x65, 0x6d, 0x79,
-0x53, 0x61, 0x69, 0x6e, 0x74, 0x2d, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x46, 0x72, 0x79, 0x73, 0x6b, 0x4e, 0x65, 0x64,
-0x65, 0x72, 0x6c, 0xe2, 0x6e, 0x47, 0xe0, 0x69, 0x64, 0x68, 0x6c, 0x69, 0x67, 0x41, 0x6e, 0x20, 0x52, 0xec, 0x6f, 0x67,
-0x68, 0x61, 0x63, 0x68, 0x64, 0x20, 0x41, 0x6f, 0x6e, 0x61, 0x69, 0x63, 0x68, 0x74, 0x65, 0x67, 0x61, 0x6c, 0x65, 0x67,
-0x6f, 0x45, 0x73, 0x70, 0x61, 0xf1, 0x61, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10e3, 0x10da, 0x10d8, 0x10e1, 0x10d0, 0x10e5, 0x10d0, 0x10e0, 0x10d7,
-0x10d5, 0x10d4, 0x10da, 0x10dd, 0x44, 0x65, 0x75, 0x74, 0x73, 0x63, 0x68, 0x44, 0x65, 0x75, 0x74, 0x73, 0x63, 0x68, 0x6c, 0x61,
-0x6e, 0x64, 0xd6, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x69, 0x63, 0x68, 0x69, 0x73, 0x63, 0x68, 0x65, 0x73, 0x20, 0x44,
-0x65, 0x75, 0x74, 0x73, 0x63, 0x68, 0x42, 0x65, 0x6c, 0x67, 0x69, 0x65, 0x6e, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x65, 0x6e,
-0x4c, 0x69, 0x65, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x73, 0x74, 0x65, 0x69, 0x6e, 0x4c, 0x75, 0x78, 0x65, 0x6d, 0x62, 0x75,
-0x72, 0x67, 0x53, 0x63, 0x68, 0x77, 0x65, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x48, 0x6f, 0x63, 0x68, 0x64, 0x65, 0x75, 0x74,
-0x73, 0x63, 0x68, 0x395, 0x3bb, 0x3bb, 0x3b7, 0x3bd, 0x3b9, 0x3ba, 0x3ac, 0x395, 0x3bb, 0x3bb, 0x3ac, 0x3b4, 0x3b1, 0x39a, 0x3cd, 0x3c0,
-0x3c1, 0x3bf, 0x3c2, 0x6b, 0x61, 0x6c, 0x61, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x75, 0x74, 0x4b, 0x61, 0x6c, 0x61, 0x61, 0x6c,
-0x6c, 0x69, 0x74, 0x20, 0x4e, 0x75, 0x6e, 0x61, 0x61, 0x74, 0xa97, 0xac1, 0xa9c, 0xab0, 0xabe, 0xaa4, 0xac0, 0xaad, 0xabe, 0xab0,
-0xaa4, 0x48, 0x61, 0x75, 0x73, 0x61, 0x4e, 0x61, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x47, 0x61, 0x6e, 0x61, 0x4e, 0x69,
-0x6a, 0x61, 0x72, 0x5e2, 0x5d1, 0x5e8, 0x5d9, 0x5ea, 0x5d9, 0x5e9, 0x5e8, 0x5d0, 0x5dc, 0x939, 0x93f, 0x928, 0x94d, 0x926, 0x940, 0x92d,
-0x93e, 0x930, 0x924, 0x6d, 0x61, 0x67, 0x79, 0x61, 0x72, 0x4d, 0x61, 0x67, 0x79, 0x61, 0x72, 0x6f, 0x72, 0x73, 0x7a, 0xe1,
-0x67, 0xed, 0x73, 0x6c, 0x65, 0x6e, 0x73, 0x6b, 0x61, 0xcd, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x64, 0x6f, 0x6e,
-0x65, 0x73, 0x69, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x4d, 0x75, 0x6e, 0x64, 0x6f,
-0x47, 0x61, 0x65, 0x69, 0x6c, 0x67, 0x65, 0xc9, 0x69, 0x72, 0x65, 0x61, 0x6e, 0x20, 0x52, 0xed, 0x6f, 0x63, 0x68, 0x74,
-0x20, 0x41, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x74, 0x68, 0x65, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x49, 0x74,
-0x61, 0x6c, 0x69, 0x61, 0x53, 0x61, 0x6e, 0x20, 0x4d, 0x61, 0x72, 0x69, 0x6e, 0x6f, 0x53, 0x76, 0x69, 0x7a, 0x7a, 0x65,
-0x72, 0x61, 0x43, 0x69, 0x74, 0x74, 0xe0, 0x20, 0x64, 0x65, 0x6c, 0x20, 0x56, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6e, 0x6f,
-0x65e5, 0x672c, 0x8a9e, 0x4a, 0x61, 0x77, 0x61, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0xe9, 0x73, 0x69, 0x61, 0xc95, 0xca8, 0xccd, 0xca8,
-0xca1, 0xcad, 0xcbe, 0xcb0, 0xca4, 0x6a9, 0x672, 0x634, 0x64f, 0x631, 0x6c1, 0x650, 0x646, 0x62f, 0x648, 0x633, 0x62a, 0x627, 0x646, 0x49b,
-0x430, 0x437, 0x430, 0x49b, 0x20, 0x442, 0x456, 0x43b, 0x456, 0x49a, 0x430, 0x437, 0x430, 0x49b, 0x441, 0x442, 0x430, 0x43d, 0x4b, 0x69,
-0x6e, 0x79, 0x61, 0x72, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x55, 0x20, 0x52, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x43a, 0x44b, 0x440,
-0x433, 0x44b, 0x437, 0x447, 0x430, 0x41a, 0x44b, 0x440, 0x433, 0x44b, 0x437, 0x441, 0x442, 0x430, 0x43d, 0xd55c, 0xad6d, 0xc5b4, 0xb300, 0xd55c,
-0xbbfc, 0xad6d, 0xc870, 0xc120, 0xbbfc, 0xc8fc, 0xc8fc, 0xc758, 0xc778, 0xbbfc, 0xacf5, 0xd654, 0xad6d, 0x6b, 0x75, 0x72, 0x64, 0xee, 0x54, 0x69,
-0x72, 0x6b, 0x69, 0x79, 0x65, 0x49, 0x6b, 0x69, 0x72, 0x75, 0x6e, 0x64, 0x69, 0x55, 0x62, 0x75, 0x72, 0x75, 0x6e, 0x64,
-0x69, 0xea5, 0xeb2, 0xea7, 0x6c, 0x61, 0x74, 0x76, 0x69, 0x65, 0x161, 0x75, 0x4c, 0x61, 0x74, 0x76, 0x69, 0x6a, 0x61, 0x6c,
-0x69, 0x6e, 0x67, 0xe1, 0x6c, 0x61, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0xed, 0x6b, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b,
-0x6f, 0x6e, 0x67, 0xf3, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x6b, 0x72, 0x61, 0x74, 0xed, 0x6b, 0x69, 0x41, 0x6e, 0x67, 0xf3,
-0x6c, 0x61, 0x52, 0x65, 0x70, 0x69, 0x62, 0x69, 0x6b, 0x69, 0x20, 0x79, 0x61, 0x20, 0x41, 0x66, 0x72, 0xed, 0x6b, 0x61,
-0x20, 0x79, 0x61, 0x20, 0x4b, 0xe1, 0x74, 0x69, 0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x69, 0x65, 0x74, 0x75, 0x76, 0x69,
-0x173, 0x4c, 0x69, 0x65, 0x74, 0x75, 0x76, 0x61, 0x43c, 0x430, 0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x441, 0x43a, 0x438, 0x421, 0x435,
-0x432, 0x435, 0x440, 0x43d, 0x430, 0x20, 0x41c, 0x430, 0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x438, 0x458, 0x430, 0x4d, 0x61, 0x6c, 0x61,
-0x67, 0x61, 0x73, 0x79, 0x4d, 0x61, 0x64, 0x61, 0x67, 0x61, 0x73, 0x69, 0x6b, 0x61, 0x72, 0x61, 0x4d, 0x65, 0x6c, 0x61,
-0x79, 0x75, 0x42, 0x72, 0x75, 0x6e, 0x65, 0x69, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x75, 0x72, 0x61, 0xd2e, 0xd32, 0xd2f,
-0xd3e, 0xd33, 0xd02, 0xd07, 0xd28, 0xd4d, 0xd24, 0xd4d, 0xd2f, 0x4d, 0x61, 0x6c, 0x74, 0x69, 0x4d, 0x101, 0x6f, 0x72, 0x69, 0x41,
-0x6f, 0x74, 0x65, 0x61, 0x72, 0x6f, 0x61, 0x92e, 0x930, 0x93e, 0x920, 0x940, 0x43c, 0x43e, 0x43d, 0x433, 0x43e, 0x43b, 0x41c, 0x43e,
-0x43d, 0x433, 0x43e, 0x43b, 0x928, 0x947, 0x92a, 0x93e, 0x932, 0x940, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x62, 0x6f, 0x6b, 0x6d,
-0xe5, 0x6c, 0x4e, 0x6f, 0x72, 0x67, 0x65, 0x53, 0x76, 0x61, 0x6c, 0x62, 0x61, 0x72, 0x64, 0x20, 0x6f, 0x67, 0x20, 0x4a,
-0x61, 0x6e, 0x20, 0x4d, 0x61, 0x79, 0x65, 0x6e, 0xb13, 0xb21, 0xb3c, 0xb3f, 0xb06, 0xb2d, 0xb3e, 0xb30, 0xb24, 0x67e, 0x69a, 0x62a,
-0x648, 0x627, 0x641, 0x63a, 0x627, 0x646, 0x633, 0x62a, 0x627, 0x646, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x641, 0x627, 0x631,
-0x633, 0x6cc, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x62f, 0x631, 0x6cc, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x50, 0x6f, 0x6c, 0x73,
-0x6b, 0x61, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xea, 0x73, 0x42, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x41, 0x6e, 0x67,
-0x6f, 0x6c, 0x61, 0x43, 0x61, 0x62, 0x6f, 0x20, 0x56, 0x65, 0x72, 0x64, 0x65, 0x54, 0x69, 0x6d, 0x6f, 0x72, 0x2d, 0x4c,
-0x65, 0x73, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6e, 0xe9, 0x20, 0x45, 0x71, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c,
-0x47, 0x75, 0x69, 0x6e, 0xe9, 0x2d, 0x42, 0x69, 0x73, 0x73, 0x61, 0x75, 0x4c, 0x75, 0x78, 0x65, 0x6d, 0x62, 0x75, 0x72,
-0x67, 0x6f, 0x4d, 0x61, 0x63, 0x61, 0x75, 0x2c, 0x20, 0x52, 0x41, 0x45, 0x20, 0x64, 0x61, 0x20, 0x43, 0x68, 0x69, 0x6e,
-0x61, 0x4d, 0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69, 0x71, 0x75, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xea, 0x73,
-0x20, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x75, 0x50, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x61, 0x6c, 0x53, 0xe3, 0x6f, 0x20,
-0x54, 0x6f, 0x6d, 0xe9, 0x20, 0x65, 0x20, 0x50, 0x72, 0xed, 0x6e, 0x63, 0x69, 0x70, 0x65, 0x53, 0x75, 0xed, 0xe7, 0x61,
-0xa2a, 0xa70, 0xa1c, 0xa3e, 0xa2c, 0xa40, 0xa2d, 0xa3e, 0xa30, 0xa24, 0x67e, 0x646, 0x62c, 0x627, 0x628, 0x6cc, 0x52, 0x75, 0x6e, 0x61,
-0x73, 0x69, 0x6d, 0x69, 0x50, 0x65, 0x72, 0xfa, 0x42, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x45, 0x63, 0x75, 0x61, 0x64,
-0x6f, 0x72, 0x72, 0x75, 0x6d, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x68, 0x53, 0x76, 0x69, 0x7a, 0x72, 0x61, 0x72, 0x6f, 0x6d,
-0xe2, 0x6e, 0x103, 0x52, 0x6f, 0x6d, 0xe2, 0x6e, 0x69, 0x61, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x20,
-0x4d, 0x6f, 0x6c, 0x64, 0x6f, 0x76, 0x61, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x439, 0x420, 0x43e, 0x441, 0x441, 0x438, 0x44f,
-0x41a, 0x430, 0x437, 0x430, 0x445, 0x441, 0x442, 0x430, 0x43d, 0x41a, 0x438, 0x440, 0x433, 0x438, 0x437, 0x438, 0x44f, 0x41c, 0x43e, 0x43b,
-0x434, 0x43e, 0x432, 0x430, 0x423, 0x43a, 0x440, 0x430, 0x438, 0x43d, 0x430, 0x53, 0xe4, 0x6e, 0x67, 0xf6, 0x4b, 0xf6, 0x64, 0xf6,
-0x72, 0xf6, 0x73, 0xea, 0x73, 0x65, 0x20, 0x74, 0xee, 0x20, 0x42, 0xea, 0x61, 0x66, 0x72, 0xee, 0x6b, 0x61, 0x441, 0x440,
-0x43f, 0x441, 0x43a, 0x438, 0x421, 0x440, 0x431, 0x438, 0x458, 0x430, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x69, 0x43, 0x72, 0x6e, 0x61,
-0x20, 0x47, 0x6f, 0x72, 0x61, 0x53, 0x72, 0x62, 0x69, 0x6a, 0x61, 0x411, 0x43e, 0x441, 0x43d, 0x430, 0x20, 0x438, 0x20, 0x425,
-0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x438, 0x43d, 0x430, 0x426, 0x440, 0x43d, 0x430, 0x20, 0x413, 0x43e, 0x440, 0x430, 0x41a,
-0x43e, 0x441, 0x43e, 0x432, 0x43e, 0x4b, 0x6f, 0x73, 0x6f, 0x76, 0x6f, 0x438, 0x440, 0x43e, 0x43d, 0x413, 0x443, 0x44b, 0x440, 0x434,
-0x437, 0x44b, 0x441, 0x442, 0x43e, 0x43d, 0x423, 0x4d5, 0x440, 0x4d5, 0x441, 0x435, 0x63, 0x68, 0x69, 0x53, 0x68, 0x6f, 0x6e, 0x61,
-0x633, 0x646, 0x68c, 0x64a, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0xdc3, 0xdd2, 0xd82, 0xdc4, 0xdbd, 0xdc1, 0xdca, 0x200d, 0xdbb,
-0xdd3, 0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0xdc0, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x10d, 0x69, 0x6e, 0x61, 0x53, 0x6c, 0x6f,
-0x76, 0x65, 0x6e, 0x73, 0x6b, 0x6f, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x161, 0x10d, 0x69, 0x6e, 0x61, 0x53, 0x6c, 0x6f,
-0x76, 0x65, 0x6e, 0x69, 0x6a, 0x61, 0x53, 0x6f, 0x6f, 0x6d, 0x61, 0x61, 0x6c, 0x69, 0x53, 0x6f, 0x6f, 0x6d, 0x61, 0x61,
-0x6c, 0x69, 0x79, 0x61, 0x4a, 0x61, 0x62, 0x75, 0x75, 0x74, 0x69, 0x49, 0x74, 0x6f, 0x6f, 0x62, 0x69, 0x79, 0x61, 0x65,
-0x73, 0x70, 0x61, 0xf1, 0x6f, 0x6c, 0x20, 0x64, 0x65, 0x20, 0x45, 0x73, 0x70, 0x61, 0xf1, 0x61, 0x41, 0x72, 0x67, 0x65,
-0x6e, 0x74, 0x69, 0x6e, 0x61, 0x42, 0x65, 0x6c, 0x69, 0x63, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f,
-0x6d, 0x62, 0x69, 0x61, 0x43, 0x6f, 0x73, 0x74, 0x61, 0x20, 0x52, 0x69, 0x63, 0x61, 0x43, 0x75, 0x62, 0x61, 0x52, 0x65,
-0x70, 0xfa, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x20, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x61, 0x45, 0x6c,
-0x20, 0x53, 0x61, 0x6c, 0x76, 0x61, 0x64, 0x6f, 0x72, 0x47, 0x75, 0x69, 0x6e, 0x65, 0x61, 0x20, 0x45, 0x63, 0x75, 0x61,
-0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x47, 0x75, 0x61, 0x74, 0x65, 0x6d, 0x61, 0x6c, 0x61, 0x48, 0x6f, 0x6e, 0x64, 0x75,
-0x72, 0x61, 0x73, 0x65, 0x73, 0x70, 0x61, 0xf1, 0x6f, 0x6c, 0x20, 0x64, 0x65, 0x20, 0x4d, 0xe9, 0x78, 0x69, 0x63, 0x6f,
-0x4d, 0xe9, 0x78, 0x69, 0x63, 0x6f, 0x4e, 0x69, 0x63, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x50, 0x61, 0x6e, 0x61, 0x6d,
-0xe1, 0x50, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x79, 0x46, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61, 0x73, 0x45, 0x73,
-0x74, 0x61, 0x64, 0x6f, 0x73, 0x20, 0x55, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x55, 0x72, 0x75, 0x67, 0x75, 0x61, 0x79, 0x56,
-0x65, 0x6e, 0x65, 0x7a, 0x75, 0x65, 0x6c, 0x61, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x69, 0x61, 0x73, 0x65, 0x73, 0x70, 0x61,
-0xf1, 0x6f, 0x6c, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x6f, 0x61, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x4c,
-0x61, 0x74, 0x69, 0x6e, 0x6f, 0x61, 0x6d, 0xe9, 0x72, 0x69, 0x63, 0x61, 0x43, 0x65, 0x75, 0x74, 0x61, 0x20, 0x79, 0x20,
-0x4d, 0x65, 0x6c, 0x69, 0x6c, 0x6c, 0x61, 0x4b, 0x69, 0x73, 0x77, 0x61, 0x68, 0x69, 0x6c, 0x69, 0x4a, 0x61, 0x6d, 0x68,
-0x75, 0x72, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x69, 0x64, 0x65, 0x6d, 0x6f, 0x6b, 0x72, 0x61, 0x73, 0x69, 0x61, 0x20,
-0x79, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, 0x61, 0x53, 0x76, 0x65, 0x72, 0x69,
-0x67, 0x65, 0xc5, 0x6c, 0x61, 0x6e, 0x64, 0x442, 0x43e, 0x4b7, 0x438, 0x43a, 0x4e3, 0x422, 0x43e, 0x4b7, 0x438, 0x43a, 0x438, 0x441,
-0x442, 0x43e, 0x43d, 0xba4, 0xbae, 0xbbf, 0xbb4, 0xbcd, 0xb87, 0xba8, 0xbcd, 0xba4, 0xbbf, 0xbaf, 0xbbe, 0xbae, 0xbb2, 0xbc7, 0xb9a, 0xbbf,
-0xbaf, 0xbbe, 0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0xb87, 0xbb2, 0xb99, 0xbcd, 0xb95, 0xbc8, 0x442,
-0x430, 0x442, 0x430, 0x440, 0xc24, 0xc46, 0xc32, 0xc41, 0xc17, 0xc41, 0xc2d, 0xc3e, 0xc30, 0xc24, 0xc26, 0xc47, 0xc36, 0xc02, 0xe44, 0xe17,
-0xe22, 0xf56, 0xf7c, 0xf51, 0xf0b, 0xf66, 0xf90, 0xf51, 0xf0b, 0xf62, 0xf92, 0xfb1, 0xf0b, 0xf53, 0xf42, 0xf62, 0xf92, 0xfb1, 0xf0b, 0xf42,
-0xf62, 0xf0b, 0x1275, 0x130d, 0x122d, 0x129b, 0x12a4, 0x122d, 0x1275, 0x122b, 0x6c, 0x65, 0x61, 0x20, 0x66, 0x61, 0x6b, 0x61, 0x74, 0x6f,
-0x6e, 0x67, 0x61, 0x54, 0xfc, 0x72, 0x6b, 0xe7, 0x65, 0x54, 0xfc, 0x72, 0x6b, 0x69, 0x79, 0x65, 0x4b, 0x131, 0x62, 0x72,
-0x131, 0x73, 0x74, 0xfc, 0x72, 0x6b, 0x6d, 0x65, 0x6e, 0x20, 0x64, 0x69, 0x6c, 0x69, 0x54, 0xfc, 0x72, 0x6b, 0x6d, 0x65,
-0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x626, 0x6c7, 0x64a, 0x63a, 0x6c7, 0x631, 0x686, 0x6d5, 0x62c, 0x6c7, 0x6ad, 0x6af, 0x648, 0x443,
-0x43a, 0x440, 0x430, 0x457, 0x43d, 0x441, 0x44c, 0x43a, 0x430, 0x423, 0x43a, 0x440, 0x430, 0x457, 0x43d, 0x430, 0x627, 0x631, 0x62f, 0x648,
-0x628, 0x6be, 0x627, 0x631, 0x62a, 0x6f, 0x2018, 0x7a, 0x62, 0x65, 0x6b, 0x4f, 0x2bb, 0x7a, 0x62, 0x65, 0x6b, 0x69, 0x73, 0x74,
-0x6f, 0x6e, 0x627, 0x648, 0x632, 0x628, 0x6cc, 0x6a9, 0x45e, 0x437, 0x431, 0x435, 0x43a, 0x447, 0x430, 0x40e, 0x437, 0x431, 0x435, 0x43a,
-0x438, 0x441, 0x442, 0x43e, 0x43d, 0x54, 0x69, 0x1ebf, 0x6e, 0x67, 0x20, 0x56, 0x69, 0x1ec7, 0x74, 0x56, 0x69, 0x1ec7, 0x74, 0x20,
-0x4e, 0x61, 0x6d, 0x56, 0x6f, 0x6c, 0x61, 0x70, 0xfc, 0x6b, 0x43, 0x79, 0x6d, 0x72, 0x61, 0x65, 0x67, 0x59, 0x20, 0x44,
-0x65, 0x79, 0x72, 0x6e, 0x61, 0x73, 0x20, 0x55, 0x6e, 0x65, 0x64, 0x69, 0x67, 0x57, 0x6f, 0x6c, 0x6f, 0x66, 0x53, 0x65,
-0x6e, 0x65, 0x67, 0x61, 0x61, 0x6c, 0x69, 0x73, 0x69, 0x58, 0x68, 0x6f, 0x73, 0x61, 0x65, 0x4d, 0x7a, 0x61, 0x6e, 0x74,
-0x73, 0x69, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x5d9, 0x5d9, 0x5b4, 0x5d3, 0x5d9, 0x5e9, 0x5d5, 0x5d5, 0x5e2, 0x5dc, 0x5d8,
-0xc8, 0x64, 0xe8, 0x20, 0x59, 0x6f, 0x72, 0xf9, 0x62, 0xe1, 0x4f, 0x72, 0x69, 0x6c, 0x1eb9, 0x300, 0x2d, 0xe8, 0x64, 0xe8,
-0x20, 0x4e, 0xe0, 0xec, 0x6a, 0xed, 0x72, 0xed, 0xe0, 0x4f, 0x72, 0xed, 0x6c, 0x25b, 0x301, 0xe8, 0x64, 0x65, 0x20, 0x42,
-0x25b, 0x300, 0x6e, 0x25b, 0x300, 0x69, 0x73, 0x69, 0x5a, 0x75, 0x6c, 0x75, 0x69, 0x4e, 0x69, 0x6e, 0x67, 0x69, 0x7a, 0x69,
-0x6d, 0x75, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x6e, 0x79, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x4e, 0x6f, 0x72, 0x65,
-0x67, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73, 0x6b, 0x69, 0x431, 0x43e, 0x441, 0x430, 0x43d, 0x441, 0x43a, 0x438, 0x47, 0x61, 0x65,
-0x6c, 0x67, 0x45, 0x6c, 0x6c, 0x61, 0x6e, 0x20, 0x56, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x77,
-0x65, 0x6b, 0x52, 0x79, 0x77, 0x76, 0x61, 0x6e, 0x65, 0x74, 0x68, 0x20, 0x55, 0x6e, 0x79, 0x73, 0x41, 0x6b, 0x61, 0x6e,
-0x47, 0x61, 0x61, 0x6e, 0x61, 0x915, 0x94b, 0x902, 0x915, 0x923, 0x940, 0x41, 0x73, 0x1ee5, 0x73, 0x1ee5, 0x20, 0x49, 0x67, 0x62,
-0x6f, 0x4e, 0x61, 0x1ecb, 0x6a, 0x1ecb, 0x72, 0x1ecb, 0x61, 0x4b, 0x69, 0x6b, 0x61, 0x6d, 0x62, 0x61, 0x66, 0x75, 0x72, 0x6c,
-0x61, 0x6e, 0x45, 0x28b, 0x65, 0x67, 0x62, 0x65, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x6e, 0x75, 0x74, 0x6f, 0x6d, 0x65,
-0x54, 0x6f, 0x67, 0x6f, 0x20, 0x6e, 0x75, 0x74, 0x6f, 0x6d, 0x65, 0x2bb, 0x14c, 0x6c, 0x65, 0x6c, 0x6f, 0x20, 0x48, 0x61,
-0x77, 0x61, 0x69, 0x2bb, 0x69, 0x2bb, 0x41, 0x6d, 0x65, 0x6c, 0x69, 0x6b, 0x61, 0x20, 0x48, 0x75, 0x69, 0x20, 0x50, 0x16b,
-0x20, 0x2bb, 0x49, 0x61, 0x46, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x6f, 0x50, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61,
-0x73, 0x53, 0x63, 0x68, 0x77, 0x69, 0x69, 0x7a, 0x65, 0x72, 0x74, 0xfc, 0xfc, 0x74, 0x73, 0x63, 0x68, 0x46, 0x72, 0x61,
-0x6e, 0x6b, 0x72, 0x69, 0x69, 0x63, 0x68, 0x4c, 0x69, 0xe4, 0x63, 0x68, 0x74, 0x65, 0x73, 0x63, 0x68, 0x74, 0xe4, 0x69,
-0xa188, 0xa320, 0xa259, 0xa34f, 0xa1e9, 0x4e, 0x65, 0x64, 0x64, 0x65, 0x72, 0x73, 0x61, 0x73, 0x73, 0x2019, 0x73, 0x63, 0x68, 0x44,
-0xfc, 0xfc, 0x74, 0x73, 0x63, 0x68, 0x6c, 0x61, 0x6e, 0x64, 0x4e, 0x65, 0x64, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x6e,
-0x65, 0x6e, 0x64, 0x61, 0x76, 0x76, 0x69, 0x73, 0xe1, 0x6d, 0x65, 0x67, 0x69, 0x65, 0x6c, 0x6c, 0x61, 0x4e, 0x6f, 0x72,
-0x67, 0x61, 0x53, 0x75, 0x6f, 0x70, 0x6d, 0x61, 0x52, 0x75, 0x6f, 0x167, 0x167, 0x61, 0x45, 0x6b, 0x65, 0x67, 0x75, 0x73,
-0x69, 0x69, 0x4b, 0x69, 0x74, 0x61, 0x69, 0x74, 0x61, 0x50, 0x75, 0x6c, 0x61, 0x61, 0x72, 0x42, 0x75, 0x72, 0x6b, 0x69,
-0x62, 0x61, 0x61, 0x20, 0x46, 0x61, 0x61, 0x73, 0x6f, 0x4b, 0x61, 0x6d, 0x65, 0x72, 0x75, 0x75, 0x6e, 0x47, 0x61, 0x6d,
-0x6d, 0x62, 0x69, 0x47, 0x61, 0x6e, 0x61, 0x61, 0x47, 0x69, 0x6e, 0x65, 0x47, 0x69, 0x6e, 0x65, 0x2d, 0x42, 0x69, 0x73,
-0x61, 0x61, 0x77, 0x6f, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x69, 0x79, 0x61, 0x61, 0x4d, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e,
-0x69, 0x4e, 0x69, 0x6a, 0x65, 0x65, 0x72, 0x4e, 0x69, 0x6a, 0x65, 0x72, 0x69, 0x79, 0x61, 0x61, 0x53, 0x65, 0x72, 0x61,
-0x61, 0x20, 0x6c, 0x69, 0x79, 0x6f, 0x6e, 0x47, 0x69, 0x6b, 0x75, 0x79, 0x75, 0x4b, 0x69, 0x73, 0x61, 0x6d, 0x70, 0x75,
-0x72, 0x73, 0x65, 0x6e, 0x61, 0x69, 0x73, 0x69, 0x4e, 0x64, 0x65, 0x62, 0x65, 0x6c, 0x65, 0x4b, 0x69, 0x68, 0x6f, 0x72,
-0x6f, 0x6d, 0x62, 0x6f, 0x2d5c, 0x2d30, 0x2d5b, 0x2d4d, 0x2d43, 0x2d49, 0x2d5c, 0x2d4d, 0x2d4e, 0x2d56, 0x2d54, 0x2d49, 0x2d31, 0x54, 0x61, 0x73,
-0x68, 0x65, 0x6c, 0x1e25, 0x69, 0x79, 0x74, 0x6c, 0x6d, 0x263, 0x72, 0x69, 0x62, 0x54, 0x61, 0x71, 0x62, 0x61, 0x79, 0x6c,
-0x69, 0x74, 0x4c, 0x65, 0x7a, 0x7a, 0x61, 0x79, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x79, 0x61, 0x6e, 0x6b, 0x6f, 0x72, 0x65,
-0x48, 0x69, 0x62, 0x65, 0x6e, 0x61, 0x48, 0x75, 0x74, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x4b, 0x79, 0x69, 0x76,
-0x75, 0x6e, 0x6a, 0x6f, 0x62, 0x61, 0x6d, 0x61, 0x6e, 0x61, 0x6b, 0x61, 0x6e, 0x4b, 0x129, 0x65, 0x6d, 0x62, 0x75, 0x13e3,
-0x13b3, 0x13a9, 0x13cc, 0x13ca, 0x20, 0x13a2, 0x13f3, 0x13be, 0x13b5, 0x13cd, 0x13d4, 0x13c5, 0x20, 0x13cd, 0x13a6, 0x13da, 0x13a9, 0x6b, 0x72, 0x65,
-0x6f, 0x6c, 0x20, 0x6d, 0x6f, 0x72, 0x69, 0x73, 0x69, 0x65, 0x6e, 0x4d, 0x6f, 0x72, 0x69, 0x73, 0x43, 0x68, 0x69, 0x6d,
-0x61, 0x6b, 0x6f, 0x6e, 0x64, 0x65, 0x4b, 0x268, 0x6c, 0x61, 0x61, 0x6e, 0x67, 0x69, 0x54, 0x61, 0x61, 0x6e, 0x73, 0x61,
-0x6e, 0xed, 0x61, 0x4c, 0x75, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x59, 0x75, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x49, 0x63, 0x68,
-0x69, 0x62, 0x65, 0x6d, 0x62, 0x61, 0x6b, 0x61, 0x62, 0x75, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x75, 0x4b, 0x61,
-0x62, 0x75, 0x20, 0x56, 0x65, 0x72, 0x64, 0x69, 0x4b, 0x129, 0x6d, 0x129, 0x72, 0x169, 0x4b, 0x61, 0x6c, 0x65, 0x6e, 0x6a,
-0x69, 0x6e, 0x45, 0x6d, 0x65, 0x74, 0x61, 0x62, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x4b, 0x68, 0x6f, 0x65, 0x6b, 0x68,
-0x6f, 0x65, 0x67, 0x6f, 0x77, 0x61, 0x62, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x61, 0x62, 0x4b, 0x69, 0x6d, 0x61, 0x63,
-0x68, 0x61, 0x6d, 0x65, 0x4b, 0xf6, 0x6c, 0x73, 0x63, 0x68, 0x44, 0x6f, 0xfc, 0x74, 0x73, 0x63, 0x68, 0x6c, 0x61, 0x6e,
-0x64, 0x54, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x69, 0x61, 0x4f, 0x6c, 0x75, 0x73, 0x6f, 0x67, 0x61, 0x4c, 0x75, 0x6c, 0x75,
-0x68, 0x69, 0x61, 0x4b, 0x69, 0x70, 0x61, 0x72, 0x65, 0x54, 0x61, 0x64, 0x68, 0x61, 0x6e, 0x69, 0x61, 0x4b, 0x69, 0x74,
-0x65, 0x73, 0x6f, 0x4b, 0x65, 0x6e, 0x69, 0x61, 0x4b, 0x6f, 0x79, 0x72, 0x61, 0x20, 0x63, 0x69, 0x69, 0x6e, 0x69, 0x4d,
-0x61, 0x61, 0x6c, 0x69, 0x4b, 0x69, 0x72, 0x75, 0x77, 0x61, 0x44, 0x68, 0x6f, 0x6c, 0x75, 0x6f, 0x52, 0x75, 0x6b, 0x69,
-0x67, 0x61, 0x54, 0x61, 0x6d, 0x61, 0x7a, 0x69, 0x263, 0x74, 0x20, 0x6e, 0x20, 0x6c, 0x61, 0x1e6d, 0x6c, 0x61, 0x1e63, 0x4d,
-0x65, 0x1e5b, 0x1e5b, 0x75, 0x6b, 0x4b, 0x6f, 0x79, 0x72, 0x61, 0x62, 0x6f, 0x72, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x6e, 0x69,
-0x4b, 0x69, 0x73, 0x68, 0x61, 0x6d, 0x62, 0x61, 0x61, 0x92c, 0x921, 0x93c, 0x94b, 0x43d, 0x43e, 0x445, 0x447, 0x438, 0x439, 0x43d,
-0x446, 0x435, 0x440, 0x43a, 0x43e, 0x432, 0x43d, 0x43e, 0x441, 0x43b, 0x43e, 0x432, 0x435, 0x301, 0x43d, 0x441, 0x43a, 0x457, 0x439, 0x440,
-0x461, 0x441, 0x441, 0x456, 0x301, 0x430, 0x54, 0x73, 0x68, 0x69, 0x6c, 0x75, 0x62, 0x61, 0x44, 0x69, 0x74, 0x75, 0x6e, 0x67,
-0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x75, 0x4c, 0xeb, 0x74, 0x7a, 0x65, 0x62, 0x75, 0x65, 0x72, 0x67,
-0x65, 0x73, 0x63, 0x68, 0x41, 0x67, 0x68, 0x65, 0x6d, 0x4b, 0xe0, 0x6d, 0xe0, 0x6c, 0xfb, 0x14b, 0x181, 0xe0, 0x73, 0xe0,
-0x61, 0x4b, 0xe0, 0x6d, 0x25b, 0x300, 0x72, 0xfb, 0x6e, 0x5a, 0x61, 0x72, 0x6d, 0x61, 0x63, 0x69, 0x69, 0x6e, 0x65, 0x4e,
-0x69, 0x17e, 0x65, 0x72, 0x64, 0x75, 0xe1, 0x6c, 0xe1, 0x6a, 0x6f, 0x6f, 0x6c, 0x61, 0x53, 0x65, 0x6e, 0x65, 0x67, 0x61,
-0x6c, 0x65, 0x77, 0x6f, 0x6e, 0x64, 0x6f, 0x4b, 0x61, 0x6d, 0x259, 0x72, 0xfa, 0x6e, 0x72, 0x69, 0x6b, 0x70, 0x61, 0x6b,
-0x61, 0x6d, 0x25b, 0x72, 0xfa, 0x6e, 0x4d, 0x61, 0x6b, 0x75, 0x61, 0x55, 0x6d, 0x6f, 0x7a, 0x61, 0x6d, 0x62, 0x69, 0x6b,
-0x69, 0x4d, 0x55, 0x4e, 0x44, 0x41, 0x14a, 0x6b, 0x61, 0x6d, 0x65, 0x72, 0x75, 0x14b, 0x4b, 0x77, 0x61, 0x73, 0x69, 0x6f,
-0x4b, 0x61, 0x6d, 0x65, 0x72, 0x75, 0x6e, 0x54, 0x68, 0x6f, 0x6b, 0x20, 0x4e, 0x61, 0x74, 0x68, 0x441, 0x430, 0x445, 0x430,
-0x20, 0x442, 0x44b, 0x43b, 0x430, 0x410, 0x440, 0x430, 0x441, 0x441, 0x44b, 0x44b, 0x439, 0x430, 0x49, 0x73, 0x68, 0x69, 0x73, 0x61,
-0x6e, 0x67, 0x75, 0x54, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x54, 0x61, 0x73, 0x61, 0x77, 0x61, 0x71, 0x20,
-0x73, 0x65, 0x6e, 0x6e, 0x69, 0xa559, 0xa524, 0xa55e, 0xa524, 0xa52b, 0xa569, 0x56, 0x61, 0x69, 0x4c, 0x61, 0x69, 0x62, 0x68, 0x69,
-0x79, 0x61, 0x57, 0x61, 0x6c, 0x73, 0x65, 0x72, 0x53, 0x63, 0x68, 0x77, 0x69, 0x7a, 0x6e, 0x75, 0x61, 0x73, 0x75, 0x65,
-0x4b, 0x65, 0x6d, 0x65, 0x6c, 0xfa, 0x6e, 0x61, 0x73, 0x74, 0x75, 0x72, 0x69, 0x61, 0x6e, 0x75, 0x4e, 0x64, 0x61, 0xa78c,
-0x61, 0x4b, 0x61, 0x6d, 0x25b, 0x6c, 0xfb, 0x6e, 0x6b, 0x61, 0x6b, 0x254, 0x4b, 0x61, 0x6d, 0x25b, 0x72, 0x75, 0x6e, 0x6d,
-0x65, 0x74, 0x61, 0x2bc, 0x4b, 0x61, 0x6d, 0x61, 0x6c, 0x75, 0x6e, 0x53, 0x68, 0x77, 0xf3, 0x14b, 0xf2, 0x20, 0x6e, 0x67,
-0x69, 0x65, 0x6d, 0x62, 0x254, 0x254, 0x6e, 0x4b, 0xe0, 0x6d, 0x61, 0x6c, 0xfb, 0x6d, 0xd804, 0xdd0c, 0xd804, 0xdd0b, 0xd804, 0xdd34,
-0xd804, 0xdd1f, 0xd804, 0xdd33, 0xd804, 0xdd26, 0xd804, 0xdd1d, 0xd804, 0xdd01, 0xd804, 0xdd23, 0xd804, 0xdd18, 0xd804, 0xdd2c, 0xd804, 0xdd0c, 0xd804, 0xdd34,
-0xd804, 0xdd1e, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x4c, 0x61, 0x6b, 0x21f, 0xf3, 0x6c, 0x2bc, 0x69, 0x79, 0x61,
-0x70, 0x69, 0x4d, 0xed, 0x6c, 0x61, 0x68, 0x61, 0x14b, 0x73, 0x6b, 0x61, 0x20, 0x54, 0x21f, 0x61, 0x6d, 0xe1, 0x6b, 0x21f,
-0x6f, 0x10d, 0x68, 0x65, 0x2d5c, 0x2d30, 0x2d4e, 0x2d30, 0x2d63, 0x2d49, 0x2d56, 0x2d5c, 0x6a9, 0x648, 0x631, 0x62f, 0x6cc, 0x6cc, 0x20, 0x646,
-0x627, 0x648, 0x6d5, 0x646, 0x62f, 0x6cc, 0x639, 0x6ce, 0x631, 0x627, 0x642, 0x626, 0x6ce, 0x631, 0x627, 0x646, 0x64, 0x6f, 0x6c, 0x6e,
-0x6f, 0x73, 0x65, 0x72, 0x62, 0x161, 0x107, 0x69, 0x6e, 0x61, 0x4e, 0x69, 0x6d, 0x73, 0x6b, 0x61, 0x68, 0x6f, 0x72, 0x6e,
-0x6a, 0x6f, 0x73, 0x65, 0x72, 0x62, 0x161, 0x107, 0x69, 0x6e, 0x61, 0x4e, 0x11b, 0x6d, 0x73, 0x6b, 0x61, 0x70, 0x72, 0x16b,
-0x73, 0x69, 0x73, 0x6b, 0x61, 0x6e, 0x73, 0x77, 0x12b, 0x74, 0x61, 0x69, 0x61, 0x6e, 0x61, 0x72, 0xe2, 0x161, 0x6b, 0x69,
-0x65, 0x6c, 0xe2, 0x53, 0x75, 0x6f, 0x6d, 0xe2, 0x645, 0x627, 0x632, 0x631, 0x648, 0x646, 0x6cc, 0x644, 0x6ca, 0x631, 0x6cc, 0x20,
-0x634, 0x648, 0x645, 0x627, 0x644, 0x6cc, 0x7cb5, 0x8a9e, 0x4e2d, 0x83ef, 0x4eba, 0x6c11, 0x5171, 0x548c, 0x570b, 0x9999, 0x6e2f, 0x7279, 0x5225, 0x884c,
-0x653f, 0x5340, 0x7ca4, 0x8bed, 0x4e2d, 0x534e, 0x4eba, 0x6c11, 0x5171, 0x548c, 0x56fd, 0x42, 0x69, 0x6e, 0x69, 0x73, 0x61, 0x79, 0x61
+static constexpr char16_t endonyms_data[] = {
+0x410, 0x525, 0x441, 0x448, 0x4d9, 0x430, 0x49a, 0x44b, 0x440, 0x4ad, 0x442, 0x4d9,
+0x44b, 0x43b, 0x430, 0x51, 0x61, 0x66, 0x61, 0x72, 0x4f, 0x74, 0x6f, 0x62,
+0x62, 0x69, 0x61, 0x59, 0x61, 0x62, 0x75, 0x75, 0x74, 0x69, 0x45, 0x72,
+0x65, 0x74, 0x72, 0x69, 0x61, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61,
+0x6e, 0x73, 0x53, 0x75, 0x69, 0x64, 0x2d, 0x41, 0x66, 0x72, 0x69, 0x6b,
+0x61, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0xeb, 0x41, 0x67, 0x68, 0x65,
+0x6d, 0x4b, 0xe0, 0x6d, 0xe0, 0x6c, 0xfb, 0x14b, 0x41, 0x6b, 0x61, 0x6e,
+0x47, 0x61, 0x61, 0x6e, 0x61, 0x41, 0x6b, 0x6f, 0x6f, 0x73, 0x65, 0x4b,
+0x61, 0x6d, 0x65, 0x72, 0xfb, 0x6e, 0x73, 0x68, 0x71, 0x69, 0x70, 0x53,
+0x68, 0x71, 0x69, 0x70, 0xeb, 0x72, 0x69, 0x4b, 0x6f, 0x73, 0x6f, 0x76,
+0xeb, 0x4d, 0x61, 0x71, 0x65, 0x64, 0x6f, 0x6e, 0x69, 0x61, 0x20, 0x65,
+0x20, 0x56, 0x65, 0x72, 0x69, 0x75, 0x74, 0x12a0, 0x121b, 0x122d, 0x129b, 0x12a2,
+0x1275, 0x12ee, 0x1335, 0x12eb, 0x627, 0x644, 0x639, 0x631, 0x628, 0x64a, 0x629, 0x645,
+0x635, 0x631, 0x627, 0x644, 0x62c, 0x632, 0x627, 0x626, 0x631, 0x627, 0x644, 0x628,
+0x62d, 0x631, 0x64a, 0x646, 0x62a, 0x634, 0x627, 0x62f, 0x62c, 0x632, 0x631, 0x20,
+0x627, 0x644, 0x642, 0x645, 0x631, 0x62c, 0x64a, 0x628, 0x648, 0x62a, 0x64a, 0x625,
+0x631, 0x64a, 0x62a, 0x631, 0x64a, 0x627, 0x627, 0x644, 0x639, 0x631, 0x627, 0x642,
+0x625, 0x633, 0x631, 0x627, 0x626, 0x64a, 0x644, 0x627, 0x644, 0x623, 0x631, 0x62f,
+0x646, 0x627, 0x644, 0x643, 0x648, 0x64a, 0x62a, 0x644, 0x628, 0x646, 0x627, 0x646,
+0x644, 0x64a, 0x628, 0x64a, 0x627, 0x645, 0x648, 0x631, 0x64a, 0x62a, 0x627, 0x646,
+0x64a, 0x627, 0x627, 0x644, 0x645, 0x63a, 0x631, 0x628, 0x639, 0x64f, 0x645, 0x627,
+0x646, 0x627, 0x644, 0x623, 0x631, 0x627, 0x636, 0x64a, 0x20, 0x627, 0x644, 0x641,
+0x644, 0x633, 0x637, 0x64a, 0x646, 0x64a, 0x629, 0x642, 0x637, 0x631, 0x627, 0x644,
+0x645, 0x645, 0x644, 0x643, 0x629, 0x20, 0x627, 0x644, 0x639, 0x631, 0x628, 0x64a,
+0x629, 0x20, 0x627, 0x644, 0x633, 0x639, 0x648, 0x62f, 0x64a, 0x629, 0x627, 0x644,
+0x635, 0x648, 0x645, 0x627, 0x644, 0x62c, 0x646, 0x648, 0x628, 0x20, 0x627, 0x644,
+0x633, 0x648, 0x62f, 0x627, 0x646, 0x627, 0x644, 0x633, 0x648, 0x62f, 0x627, 0x646,
+0x633, 0x648, 0x631, 0x64a, 0x627, 0x62a, 0x648, 0x646, 0x633, 0x627, 0x644, 0x625,
+0x645, 0x627, 0x631, 0x627, 0x62a, 0x20, 0x627, 0x644, 0x639, 0x631, 0x628, 0x64a,
+0x629, 0x20, 0x627, 0x644, 0x645, 0x62a, 0x62d, 0x62f, 0x629, 0x627, 0x644, 0x635,
+0x62d, 0x631, 0x627, 0x621, 0x20, 0x627, 0x644, 0x63a, 0x631, 0x628, 0x64a, 0x629,
+0x627, 0x644, 0x639, 0x631, 0x628, 0x64a, 0x629, 0x20, 0x627, 0x644, 0x641, 0x635,
+0x62d, 0x649, 0x20, 0x627, 0x644, 0x62d, 0x62f, 0x64a, 0x62b, 0x629, 0x627, 0x644,
+0x639, 0x627, 0x644, 0x645, 0x627, 0x644, 0x64a, 0x645, 0x646, 0x61, 0x72, 0x61,
+0x67, 0x6f, 0x6e, 0xe9, 0x73, 0x45, 0x73, 0x70, 0x61, 0x6e, 0x79, 0x61,
+0x570, 0x561, 0x575, 0x565, 0x580, 0x565, 0x576, 0x540, 0x561, 0x575, 0x561, 0x57d,
+0x57f, 0x561, 0x576, 0x985, 0x9b8, 0x9ae, 0x9c0, 0x9af, 0x9bc, 0x9be, 0x9ad, 0x9be,
+0x9f0, 0x9a4, 0x61, 0x73, 0x74, 0x75, 0x72, 0x69, 0x61, 0x6e, 0x75, 0x45,
+0x73, 0x70, 0x61, 0xf1, 0x61, 0x4b, 0x69, 0x70, 0x61, 0x72, 0x65, 0x54,
+0x61, 0x64, 0x68, 0x61, 0x6e, 0x69, 0x61, 0x41, 0x74, 0x73, 0x61, 0x6d,
+0x61, 0x7a, 0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e, 0x41, 0x7a,
+0x259, 0x72, 0x62, 0x61, 0x79, 0x63, 0x61, 0x6e, 0x62a, 0x6c6, 0x631, 0x6a9,
+0x62c, 0x647, 0x430, 0x437, 0x4d9, 0x440, 0x431, 0x430, 0x458, 0x4b9, 0x430, 0x43d,
+0x410, 0x437, 0x4d9, 0x440, 0x431, 0x430, 0x458, 0x4b9, 0x430, 0x43d, 0x72, 0x69,
+0x6b, 0x70, 0x61, 0x6b, 0x61, 0x6d, 0x25b, 0x72, 0xfa, 0x6e, 0x62, 0x61,
+0x6d, 0x61, 0x6e, 0x61, 0x6b, 0x61, 0x6e, 0x4d, 0x61, 0x6c, 0x69, 0x9ac,
+0x9be, 0x982, 0x9b2, 0x9be, 0x9ac, 0x9be, 0x982, 0x9b2, 0x9be, 0x9a6, 0x9c7, 0x9b6,
+0x9ad, 0x9be, 0x9b0, 0x9a4, 0x181, 0xe0, 0x73, 0xe0, 0x61, 0x4b, 0xe0, 0x6d,
+0x25b, 0x300, 0x72, 0xfb, 0x6e, 0x431, 0x430, 0x448, 0x4a1, 0x43e, 0x440, 0x442,
+0x20, 0x442, 0x435, 0x43b, 0x435, 0x65, 0x75, 0x73, 0x6b, 0x61, 0x72, 0x61,
+0x45, 0x73, 0x70, 0x61, 0x69, 0x6e, 0x69, 0x61, 0x431, 0x435, 0x43b, 0x430,
+0x440, 0x443, 0x441, 0x43a, 0x430, 0x44f, 0x411, 0x435, 0x43b, 0x430, 0x440, 0x443,
+0x441, 0x44c, 0x49, 0x63, 0x68, 0x69, 0x62, 0x65, 0x6d, 0x62, 0x61, 0x5a,
+0x61, 0x6d, 0x62, 0x69, 0x61, 0x48, 0x69, 0x62, 0x65, 0x6e, 0x61, 0x48,
+0x75, 0x74, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x92d, 0x94b, 0x91c,
+0x92a, 0x941, 0x930, 0x940, 0x92d, 0x93e, 0x930, 0x924, 0x1265, 0x120a, 0x1295, 0x12a4,
+0x122d, 0x1275, 0x122b, 0x92c, 0x930, 0x2019, 0x62, 0x6f, 0x73, 0x61, 0x6e, 0x73,
+0x6b, 0x69, 0x42, 0x6f, 0x73, 0x6e, 0x61, 0x20, 0x69, 0x20, 0x48, 0x65,
+0x72, 0x63, 0x65, 0x67, 0x6f, 0x76, 0x69, 0x6e, 0x61, 0x431, 0x43e, 0x441,
+0x430, 0x43d, 0x441, 0x43a, 0x438, 0x411, 0x43e, 0x441, 0x43d, 0x430, 0x20, 0x438,
+0x20, 0x425, 0x435, 0x440, 0x446, 0x435, 0x433, 0x43e, 0x432, 0x438, 0x43d, 0x430,
+0x62, 0x72, 0x65, 0x7a, 0x68, 0x6f, 0x6e, 0x65, 0x67, 0x46, 0x72, 0x61,
+0xf1, 0x73, 0x431, 0x44a, 0x43b, 0x433, 0x430, 0x440, 0x441, 0x43a, 0x438, 0x411,
+0x44a, 0x43b, 0x433, 0x430, 0x440, 0x438, 0x44f, 0x1019, 0x103c, 0x1014, 0x103a, 0x1019,
+0x102c, 0x7cb5, 0x8a9e, 0x4e2d, 0x83ef, 0x4eba, 0x6c11, 0x5171, 0x548c, 0x570b, 0x9999, 0x6e2f,
+0x7279, 0x5225, 0x884c, 0x653f, 0x5340, 0x7ca4, 0x8bed, 0x4e2d, 0x534e, 0x4eba, 0x6c11, 0x5171,
+0x548c, 0x56fd, 0x63, 0x61, 0x74, 0x61, 0x6c, 0xe0, 0x41, 0x6e, 0x64, 0x6f,
+0x72, 0x72, 0x61, 0x46, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x49, 0x74, 0xe0,
+0x6c, 0x69, 0x61, 0x43, 0x65, 0x62, 0x75, 0x61, 0x6e, 0x6f, 0x50, 0x69,
+0x6c, 0x69, 0x70, 0x69, 0x6e, 0x61, 0x73, 0x54, 0x61, 0x6d, 0x61, 0x7a,
+0x69, 0x263, 0x74, 0x20, 0x6e, 0x20, 0x6c, 0x61, 0x1e6d, 0x6c, 0x61, 0x1e63,
+0x4d, 0x65, 0x1e5b, 0x1e5b, 0x75, 0x6b, 0x6a9, 0x648, 0x631, 0x62f, 0x6cc, 0x6cc,
+0x20, 0x646, 0x627, 0x648, 0x6d5, 0x646, 0x62f, 0x6cc, 0x639, 0x6ce, 0x631, 0x627,
+0x642, 0x626, 0x6ce, 0x631, 0x627, 0x646, 0xd804, 0xdd0c, 0xd804, 0xdd0b, 0xd804, 0xdd34,
+0xd804, 0xdd1f, 0xd804, 0xdd33, 0xd804, 0xdd26, 0xd804, 0xdd1d, 0xd804, 0xdd01, 0xd804, 0xdd23,
+0xd804, 0xdd18, 0xd804, 0xdd2c, 0xd804, 0xdd0c, 0xd804, 0xdd34, 0xd804, 0xdd1e, 0xd804, 0xdd22,
+0xd804, 0xdd27, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x43d, 0x43e, 0x445, 0x447, 0x438, 0x439,
+0x43d, 0x420, 0x43e, 0x441, 0x441, 0x438, 0x13e3, 0x13b3, 0x13a9, 0x13cc, 0x13ca, 0x20,
+0x13a2, 0x13f3, 0x13be, 0x13b5, 0x13cd, 0x13d4, 0x13c5, 0x20, 0x13cd, 0x13a6, 0x13da, 0x13a9,
+0x43, 0x68, 0x69, 0x6b, 0x61, 0x73, 0x68, 0x73, 0x68, 0x61, 0x6e, 0x6f,
+0x6d, 0x70, 0x61, 0x2bc, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x53,
+0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x75, 0x6b, 0x69, 0x67, 0x61, 0x55,
+0x67, 0x61, 0x6e, 0x64, 0x61, 0x7b80, 0x4f53, 0x4e2d, 0x6587, 0x4e2d, 0x56fd, 0x4e2d,
+0x56fd, 0x9999, 0x6e2f, 0x7279, 0x522b, 0x884c, 0x653f, 0x533a, 0x4e2d, 0x56fd, 0x6fb3, 0x95e8,
+0x7279, 0x522b, 0x884c, 0x653f, 0x533a, 0x65b0, 0x52a0, 0x5761, 0x7e41, 0x9ad4, 0x4e2d, 0x6587,
+0x4e2d, 0x570b, 0x9999, 0x6e2f, 0x7279, 0x5225, 0x884c, 0x653f, 0x5340, 0x4e2d, 0x570b, 0x6fb3,
+0x9580, 0x7279, 0x5225, 0x884c, 0x653f, 0x5340, 0x53f0, 0x7063, 0x446, 0x435, 0x440, 0x43a,
+0x43e, 0x432, 0x43d, 0x43e, 0x441, 0x43b, 0x43e, 0x432, 0x435, 0x301, 0x43d, 0x441,
+0x43a, 0x457, 0x439, 0x440, 0x461, 0x441, 0x441, 0x456, 0x301, 0x430, 0x447, 0x4d1,
+0x432, 0x430, 0x448, 0x420, 0x430, 0x4ab, 0x4ab, 0x435, 0x439, 0x4b, 0xf6, 0x6c,
+0x73, 0x63, 0x68, 0x44, 0x6f, 0xfc, 0x74, 0x73, 0x63, 0x68, 0x6c, 0x61,
+0x6e, 0x64, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x77, 0x65, 0x6b, 0x52, 0x79,
+0x77, 0x76, 0x61, 0x6e, 0x65, 0x74, 0x68, 0x20, 0x55, 0x6e, 0x79, 0x73,
+0x63, 0x6f, 0x72, 0x73, 0x75, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x61,
+0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, 0x48, 0x72, 0x76, 0x61,
+0x74, 0x73, 0x6b, 0x61, 0x10d, 0x65, 0x161, 0x74, 0x69, 0x6e, 0x61, 0x10c,
+0x65, 0x73, 0x6b, 0x6f, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x44, 0x61, 0x6e,
+0x6d, 0x61, 0x72, 0x6b, 0x47, 0x72, 0xf8, 0x6e, 0x6c, 0x61, 0x6e, 0x64,
+0x78b, 0x7a8, 0x788, 0x7ac, 0x780, 0x7a8, 0x784, 0x7a6, 0x790, 0x7b0, 0x78b, 0x7a8,
+0x788, 0x7ac, 0x780, 0x7a8, 0x20, 0x783, 0x7a7, 0x787, 0x7b0, 0x796, 0x7ac, 0x921,
+0x94b, 0x917, 0x930, 0x940, 0x64, 0x75, 0xe1, 0x6c, 0xe1, 0x43, 0x61, 0x6d,
+0x65, 0x72, 0x6f, 0x75, 0x6e, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61,
+0x6e, 0x64, 0x73, 0x41, 0x72, 0x75, 0x62, 0x61, 0x56, 0x6c, 0x61, 0x61,
+0x6d, 0x73, 0x42, 0x65, 0x6c, 0x67, 0x69, 0xeb, 0x43, 0x61, 0x72, 0x69,
+0x62, 0x69, 0x73, 0x63, 0x68, 0x20, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c,
+0x61, 0x6e, 0x64, 0x43, 0x75, 0x72, 0x61, 0xe7, 0x61, 0x6f, 0x53, 0x69,
+0x6e, 0x74, 0x2d, 0x4d, 0x61, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x53, 0x75,
+0x72, 0x69, 0x6e, 0x61, 0x6d, 0x65, 0xf62, 0xfab, 0xf7c, 0xf44, 0xf0b, 0xf41,
+0xf60, 0xf56, 0xfb2, 0xf74, 0xf42, 0x4b, 0x129, 0x65, 0x6d, 0x62, 0x75, 0x4b,
+0x65, 0x6e, 0x79, 0x61, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e,
+0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0xd801, 0xdc00, 0xd801, 0xdc4d,
+0xd801, 0xdc4a, 0xd801, 0xdc2e, 0xd801, 0xdc47, 0xd801, 0xdc0f, 0xd801, 0xdc2d, 0xd801, 0xdc4c,
+0xd801, 0xdc34, 0xd801, 0xdc3b, 0xd801, 0xdc32, 0xd801, 0xdc3c, 0x20, 0xd801, 0xdc1d, 0xd801,
+0xdc3b, 0xd801, 0xdc29, 0xd801, 0xdc3b, 0xd801, 0xdc45, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x6e, 0x20, 0x53, 0x61, 0x6d, 0x6f, 0x61, 0x41, 0x6e, 0x67,
+0x75, 0x69, 0x6c, 0x6c, 0x61, 0x41, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x61,
+0x20, 0x26, 0x20, 0x42, 0x61, 0x72, 0x62, 0x75, 0x64, 0x61, 0x41, 0x75,
+0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x45, 0x6e, 0x67,
+0x6c, 0x69, 0x73, 0x68, 0x41, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x42,
+0x61, 0x68, 0x61, 0x6d, 0x61, 0x73, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64,
+0x6f, 0x73, 0x42, 0x65, 0x6c, 0x67, 0x69, 0x75, 0x6d, 0x42, 0x65, 0x6c,
+0x69, 0x7a, 0x65, 0x42, 0x65, 0x72, 0x6d, 0x75, 0x64, 0x61, 0x42, 0x6f,
+0x74, 0x73, 0x77, 0x61, 0x6e, 0x61, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73,
+0x68, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x4f, 0x63, 0x65,
+0x61, 0x6e, 0x20, 0x54, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, 0x72, 0x79,
+0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x56, 0x69, 0x72, 0x67,
+0x69, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x42, 0x75,
+0x72, 0x75, 0x6e, 0x64, 0x69, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x6f, 0x6f,
+0x6e, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x45, 0x6e,
+0x67, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x43,
+0x61, 0x79, 0x6d, 0x61, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64,
+0x73, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6d, 0x61, 0x73, 0x20, 0x49,
+0x73, 0x6c, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x63, 0x6f, 0x73, 0x20, 0x28,
+0x4b, 0x65, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x49, 0x73, 0x6c,
+0x61, 0x6e, 0x64, 0x73, 0x43, 0x6f, 0x6f, 0x6b, 0x20, 0x49, 0x73, 0x6c,
+0x61, 0x6e, 0x64, 0x73, 0x43, 0x79, 0x70, 0x72, 0x75, 0x73, 0x44, 0x65,
+0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x44, 0x69, 0x65, 0x67, 0x6f, 0x20, 0x47,
+0x61, 0x72, 0x63, 0x69, 0x61, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63,
+0x61, 0x45, 0x72, 0x69, 0x74, 0x72, 0x65, 0x61, 0x45, 0x73, 0x77, 0x61,
+0x74, 0x69, 0x6e, 0x69, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x46, 0x61,
+0x6c, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e,
+0x64, 0x73, 0x46, 0x69, 0x6a, 0x69, 0x46, 0x69, 0x6e, 0x6c, 0x61, 0x6e,
+0x64, 0x47, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x47, 0x65, 0x72, 0x6d, 0x61,
+0x6e, 0x79, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x47, 0x69, 0x62, 0x72, 0x61,
+0x6c, 0x74, 0x61, 0x72, 0x47, 0x72, 0x65, 0x6e, 0x61, 0x64, 0x61, 0x47,
+0x75, 0x61, 0x6d, 0x47, 0x75, 0x65, 0x72, 0x6e, 0x73, 0x65, 0x79, 0x47,
+0x75, 0x79, 0x61, 0x6e, 0x61, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f,
+0x6e, 0x67, 0x20, 0x53, 0x41, 0x52, 0x20, 0x43, 0x68, 0x69, 0x6e, 0x61,
+0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x49, 0x72, 0x65,
+0x6c, 0x61, 0x6e, 0x64, 0x49, 0x73, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20,
+0x4d, 0x61, 0x6e, 0x49, 0x73, 0x72, 0x61, 0x65, 0x6c, 0x4a, 0x61, 0x6d,
+0x61, 0x69, 0x63, 0x61, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x4b, 0x69,
+0x72, 0x69, 0x62, 0x61, 0x74, 0x69, 0x4c, 0x65, 0x73, 0x6f, 0x74, 0x68,
+0x6f, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x69, 0x61, 0x4d, 0x61, 0x63, 0x61,
+0x6f, 0x20, 0x53, 0x41, 0x52, 0x20, 0x43, 0x68, 0x69, 0x6e, 0x61, 0x4d,
+0x61, 0x64, 0x61, 0x67, 0x61, 0x73, 0x63, 0x61, 0x72, 0x4d, 0x61, 0x6c,
+0x61, 0x77, 0x69, 0x4d, 0x61, 0x6c, 0x61, 0x79, 0x73, 0x69, 0x61, 0x4d,
+0x61, 0x6c, 0x64, 0x69, 0x76, 0x65, 0x73, 0x4d, 0x61, 0x6c, 0x74, 0x61,
+0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x49, 0x73, 0x6c,
+0x61, 0x6e, 0x64, 0x73, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69, 0x75,
+0x73, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x4d,
+0x6f, 0x6e, 0x74, 0x73, 0x65, 0x72, 0x72, 0x61, 0x74, 0x4e, 0x61, 0x6d,
+0x69, 0x62, 0x69, 0x61, 0x4e, 0x61, 0x75, 0x72, 0x75, 0x4e, 0x65, 0x74,
+0x68, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x4e, 0x65, 0x77, 0x20,
+0x5a, 0x65, 0x61, 0x6c, 0x61, 0x6e, 0x64, 0x4e, 0x69, 0x67, 0x65, 0x72,
+0x69, 0x61, 0x4e, 0x69, 0x75, 0x65, 0x4e, 0x6f, 0x72, 0x66, 0x6f, 0x6c,
+0x6b, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x4e, 0x6f, 0x72, 0x74,
+0x68, 0x65, 0x72, 0x6e, 0x20, 0x4d, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x61,
+0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x50, 0x61, 0x6b, 0x69,
+0x73, 0x74, 0x61, 0x6e, 0x50, 0x61, 0x6c, 0x61, 0x75, 0x50, 0x61, 0x70,
+0x75, 0x61, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6e, 0x65,
+0x61, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x65, 0x73,
+0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e, 0x20, 0x49, 0x73, 0x6c,
+0x61, 0x6e, 0x64, 0x73, 0x50, 0x75, 0x65, 0x72, 0x74, 0x6f, 0x20, 0x52,
+0x69, 0x63, 0x6f, 0x52, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x53, 0x74, 0x20,
+0x48, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x53, 0x74, 0x20, 0x4b, 0x69, 0x74,
+0x74, 0x73, 0x20, 0x26, 0x20, 0x4e, 0x65, 0x76, 0x69, 0x73, 0x53, 0x74,
+0x20, 0x4c, 0x75, 0x63, 0x69, 0x61, 0x53, 0x74, 0x20, 0x56, 0x69, 0x6e,
+0x63, 0x65, 0x6e, 0x74, 0x20, 0x26, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47,
+0x72, 0x65, 0x6e, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x53, 0x65, 0x79,
+0x63, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x53, 0x69, 0x65, 0x72, 0x72,
+0x61, 0x20, 0x4c, 0x65, 0x6f, 0x6e, 0x65, 0x53, 0x69, 0x6e, 0x67, 0x61,
+0x70, 0x6f, 0x72, 0x65, 0x53, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x61, 0x61,
+0x72, 0x74, 0x65, 0x6e, 0x53, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x69, 0x61,
+0x53, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61,
+0x6e, 0x64, 0x73, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72,
+0x69, 0x63, 0x61, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x53, 0x75, 0x64,
+0x61, 0x6e, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x53, 0x77, 0x65, 0x64, 0x65,
+0x6e, 0x53, 0x77, 0x69, 0x74, 0x7a, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64,
+0x54, 0x61, 0x6e, 0x7a, 0x61, 0x6e, 0x69, 0x61, 0x54, 0x6f, 0x6b, 0x65,
+0x6c, 0x61, 0x75, 0x54, 0x6f, 0x6e, 0x67, 0x61, 0x54, 0x72, 0x69, 0x6e,
+0x69, 0x64, 0x61, 0x64, 0x20, 0x26, 0x20, 0x54, 0x6f, 0x62, 0x61, 0x67,
+0x6f, 0x54, 0x75, 0x72, 0x6b, 0x73, 0x20, 0x26, 0x20, 0x43, 0x61, 0x69,
+0x63, 0x6f, 0x73, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x54,
+0x75, 0x76, 0x61, 0x6c, 0x75, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20,
+0x41, 0x72, 0x61, 0x62, 0x20, 0x45, 0x6d, 0x69, 0x72, 0x61, 0x74, 0x65,
+0x73, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x45, 0x6e, 0x67,
+0x6c, 0x69, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b,
+0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x55, 0x2e, 0x53, 0x2e, 0x20, 0x4f,
+0x75, 0x74, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x73, 0x6c, 0x61,
+0x6e, 0x64, 0x73, 0x55, 0x2e, 0x53, 0x2e, 0x20, 0x56, 0x69, 0x72, 0x67,
+0x69, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x56, 0x61,
+0x6e, 0x75, 0x61, 0x74, 0x75, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5a, 0x69,
+0x6d, 0x62, 0x61, 0x62, 0x77, 0x65, 0x44d, 0x440, 0x437, 0x44f, 0x43d, 0x44c,
+0x20, 0x43a, 0x435, 0x43b, 0x44c, 0x420, 0x443, 0x437, 0x43e, 0x43d, 0x44c, 0x20,
+0x43c, 0x430, 0x441, 0x442, 0x43e, 0x440, 0x45, 0x73, 0x70, 0x65, 0x72, 0x61,
+0x6e, 0x74, 0x6f, 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x65, 0x65, 0x73, 0x74,
+0x69, 0x45, 0x65, 0x73, 0x74, 0x69, 0x45, 0x28b, 0x65, 0x67, 0x62, 0x65,
+0x47, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x6e, 0x75, 0x74, 0x6f, 0x6d, 0x65,
+0x54, 0x6f, 0x67, 0x6f, 0x20, 0x6e, 0x75, 0x74, 0x6f, 0x6d, 0x65, 0x65,
+0x77, 0x6f, 0x6e, 0x64, 0x6f, 0x4b, 0x61, 0x6d, 0x259, 0x72, 0xfa, 0x6e,
+0x66, 0xf8, 0x72, 0x6f, 0x79, 0x73, 0x6b, 0x74, 0x46, 0xf8, 0x72, 0x6f,
+0x79, 0x61, 0x72, 0x46, 0x69, 0x6c, 0x69, 0x70, 0x69, 0x6e, 0x6f, 0x73,
+0x75, 0x6f, 0x6d, 0x69, 0x53, 0x75, 0x6f, 0x6d, 0x69, 0x66, 0x72, 0x61,
+0x6e, 0xe7, 0x61, 0x69, 0x73, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x41,
+0x6c, 0x67, 0xe9, 0x72, 0x69, 0x65, 0x42, 0x65, 0x6c, 0x67, 0x69, 0x71,
+0x75, 0x65, 0x42, 0xe9, 0x6e, 0x69, 0x6e, 0x42, 0x75, 0x72, 0x6b, 0x69,
+0x6e, 0x61, 0x20, 0x46, 0x61, 0x73, 0x6f, 0x66, 0x72, 0x61, 0x6e, 0xe7,
+0x61, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x65, 0x6e,
+0x52, 0xe9, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x71, 0x75, 0x65, 0x20, 0x63,
+0x65, 0x6e, 0x74, 0x72, 0x61, 0x66, 0x72, 0x69, 0x63, 0x61, 0x69, 0x6e,
+0x65, 0x54, 0x63, 0x68, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x6f, 0x72, 0x65,
+0x73, 0x43, 0x6f, 0x6e, 0x67, 0x6f, 0x2d, 0x42, 0x72, 0x61, 0x7a, 0x7a,
+0x61, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x67, 0x6f, 0x2d,
+0x4b, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x73, 0x61, 0x44, 0x6a, 0x69, 0x62,
+0x6f, 0x75, 0x74, 0x69, 0x47, 0x75, 0x69, 0x6e, 0xe9, 0x65, 0x20, 0xe9,
+0x71, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x47, 0x75,
+0x79, 0x61, 0x6e, 0x65, 0x20, 0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69,
+0x73, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6e, 0xe9, 0x73, 0x69, 0x65, 0x20,
+0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69, 0x73, 0x65, 0x47, 0x61, 0x62,
+0x6f, 0x6e, 0x47, 0x75, 0x61, 0x64, 0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65,
+0x48, 0x61, 0xef, 0x74, 0x69, 0x43, 0xf4, 0x74, 0x65, 0x20, 0x64, 0x2019,
+0x49, 0x76, 0x6f, 0x69, 0x72, 0x65, 0x4c, 0x75, 0x78, 0x65, 0x6d, 0x62,
+0x6f, 0x75, 0x72, 0x67, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69, 0x71,
+0x75, 0x65, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x69, 0x65,
+0x4d, 0x61, 0x75, 0x72, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x79, 0x6f, 0x74,
+0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x4d, 0x61, 0x72, 0x6f,
+0x63, 0x4e, 0x6f, 0x75, 0x76, 0x65, 0x6c, 0x6c, 0x65, 0x2d, 0x43, 0x61,
+0x6c, 0xe9, 0x64, 0x6f, 0x6e, 0x69, 0x65, 0x4c, 0x61, 0x20, 0x52, 0xe9,
+0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x69, 0x6e, 0x74, 0x2d, 0x42,
+0x61, 0x72, 0x74, 0x68, 0xe9, 0x6c, 0x65, 0x6d, 0x79, 0x53, 0x61, 0x69,
+0x6e, 0x74, 0x2d, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x53, 0x61, 0x69,
+0x6e, 0x74, 0x2d, 0x50, 0x69, 0x65, 0x72, 0x72, 0x65, 0x2d, 0x65, 0x74,
+0x2d, 0x4d, 0x69, 0x71, 0x75, 0x65, 0x6c, 0x6f, 0x6e, 0x53, 0xe9, 0x6e,
+0xe9, 0x67, 0x61, 0x6c, 0x66, 0x72, 0x61, 0x6e, 0xe7, 0x61, 0x69, 0x73,
+0x20, 0x73, 0x75, 0x69, 0x73, 0x73, 0x65, 0x53, 0x75, 0x69, 0x73, 0x73,
+0x65, 0x53, 0x79, 0x72, 0x69, 0x65, 0x54, 0x75, 0x6e, 0x69, 0x73, 0x69,
+0x65, 0x57, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x2d, 0x65, 0x74, 0x2d, 0x46,
+0x75, 0x74, 0x75, 0x6e, 0x61, 0x66, 0x75, 0x72, 0x6c, 0x61, 0x6e, 0x49,
+0x74, 0x61, 0x6c, 0x69, 0x65, 0x50, 0x75, 0x6c, 0x61, 0x61, 0x72, 0x53,
+0x65, 0x6e, 0x65, 0x67, 0x61, 0x61, 0x6c, 0xd83a, 0xdd06, 0xd83a, 0xdd35, 0xd83a,
+0xdd24, 0xd83a, 0xdd22, 0xd83a, 0xdd2a, 0xd83a, 0xdd04, 0xd83a, 0xdd35, 0xd83a, 0xdd2a, 0xd83a,
+0xdd33, 0xd83a, 0xdd2d, 0xd83a, 0xdd32, 0xd83a, 0xdd22, 0x20, 0xd83a, 0xdd0a, 0xd83a, 0xdd22,
+0xd83a, 0xdd27, 0xd83a, 0xdd2e, 0xd83a, 0xdd45, 0xd83a, 0xdd11, 0xd83a, 0xdd22, 0xd83a, 0xdd25,
+0xd83a, 0xdd22, 0xd83a, 0xdd2a, 0xd83a, 0xdd35, 0xd83a, 0xdd45, 0xd83a, 0xdd32, 0xd83a, 0xdd18,
+0xd83a, 0xdd22, 0xd83a, 0xdd25, 0xd83a, 0xdd26, 0xd83a, 0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22,
+0xd83a, 0xdd18, 0xd83a, 0xdd22, 0xd83a, 0xdd32, 0xd83a, 0xdd22, 0xd83a, 0xdd18, 0xd83a, 0xdd2d,
+0xd83a, 0xdd32, 0xd83a, 0xdd2b, 0x2d, 0xd83a, 0xdd04, 0xd83a, 0xdd2d, 0xd83a, 0xdd27, 0xd83a,
+0xdd22, 0xd83a, 0xdd31, 0xd83a, 0xdd2e, 0xd83a, 0xdd45, 0xd83a, 0xdd02, 0xd83a, 0xdd22, 0xd83a,
+0xdd26, 0xd83a, 0xdd2d, 0xd83a, 0xdd2a, 0xd83a, 0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22, 0xd83a,
+0xdd44, 0xd83a, 0xdd03, 0xd83a, 0xdd2e, 0xd83a, 0xdd2a, 0xd83a, 0xdd3c, 0xd83a, 0xdd22, 0xd83a,
+0xdd32, 0xd83a, 0xdd2d, 0xd83a, 0xdd45, 0xd83a, 0xdd10, 0xd83a, 0xdd22, 0xd83a, 0xdd36, 0xd83a,
+0xdd2b, 0xd83a, 0xdd2a, 0xd83a, 0xdd2d, 0xd83a, 0xdd34, 0xd83a, 0xdd22, 0xd83a, 0xdd44, 0xd83a,
+0xdd10, 0xd83a, 0xdd2d, 0xd83a, 0xdd45, 0xd83a, 0xdd36, 0xd83a, 0xdd2b, 0xd83a, 0xdd2a, 0xd83a,
+0xdd05, 0xd83a, 0xdd2b, 0xd83a, 0xdd32, 0xd83a, 0xdd2b, 0xd83a, 0xdd3a, 0xd83a, 0xdd22, 0xd83a,
+0xdd44, 0xd83a, 0xdd24, 0xd83a, 0xdd05, 0xd83a, 0xdd22, 0xd83a, 0xdd2a, 0xd83a, 0xdd22, 0xd83a,
+0xdd24, 0xd83a, 0xdd2e, 0xd83a, 0xdd32, 0x42, 0x75, 0x72, 0x6b, 0x69, 0x62, 0x61,
+0x61, 0x20, 0x46, 0x61, 0x61, 0x73, 0x6f, 0x4b, 0x61, 0x6d, 0x65, 0x72,
+0x75, 0x75, 0x6e, 0x47, 0x61, 0x6d, 0x6d, 0x62, 0x69, 0x47, 0x61, 0x6e,
+0x61, 0x61, 0x47, 0x69, 0x6e, 0x65, 0x2d, 0x42, 0x69, 0x73, 0x61, 0x61,
+0x77, 0x6f, 0x4c, 0x69, 0x62, 0x65, 0x72, 0x69, 0x79, 0x61, 0x61, 0x4d,
+0x75, 0x72, 0x69, 0x74, 0x61, 0x6e, 0x69, 0x4e, 0x69, 0x6a, 0x65, 0x72,
+0x69, 0x79, 0x61, 0x61, 0x4e, 0x69, 0x6a, 0x65, 0x65, 0x72, 0x53, 0x65,
+0x72, 0x61, 0x61, 0x20, 0x6c, 0x69, 0x79, 0x6f, 0x6e, 0x47, 0xe0, 0x69,
+0x64, 0x68, 0x6c, 0x69, 0x67, 0x41, 0x6e, 0x20, 0x52, 0xec, 0x6f, 0x67,
+0x68, 0x61, 0x63, 0x68, 0x64, 0x20, 0x41, 0x6f, 0x6e, 0x61, 0x69, 0x63,
+0x68, 0x74, 0x65, 0x47, 0xe3, 0x67, 0x61, 0x6c, 0x65, 0x67, 0x6f, 0x4c,
+0x75, 0x67, 0x61, 0x6e, 0x64, 0x61, 0x59, 0x75, 0x67, 0x61, 0x6e, 0x64,
+0x61, 0x130d, 0x12d5, 0x12dd, 0x129b, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10e3, 0x10da, 0x10d8,
+0x10e1, 0x10d0, 0x10e5, 0x10d0, 0x10e0, 0x10d7, 0x10d5, 0x10d4, 0x10da, 0x10dd, 0x44, 0x65,
+0x75, 0x74, 0x73, 0x63, 0x68, 0x44, 0x65, 0x75, 0x74, 0x73, 0x63, 0x68,
+0x6c, 0x61, 0x6e, 0x64, 0xd6, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x69,
+0x63, 0x68, 0x69, 0x73, 0x63, 0x68, 0x65, 0x73, 0x20, 0x44, 0x65, 0x75,
+0x74, 0x73, 0x63, 0x68, 0x42, 0x65, 0x6c, 0x67, 0x69, 0x65, 0x6e, 0x49,
+0x74, 0x61, 0x6c, 0x69, 0x65, 0x6e, 0x4c, 0x69, 0x65, 0x63, 0x68, 0x74,
+0x65, 0x6e, 0x73, 0x74, 0x65, 0x69, 0x6e, 0x4c, 0x75, 0x78, 0x65, 0x6d,
+0x62, 0x75, 0x72, 0x67, 0x53, 0x63, 0x68, 0x77, 0x65, 0x69, 0x7a, 0x65,
+0x72, 0x20, 0x48, 0x6f, 0x63, 0x68, 0x64, 0x65, 0x75, 0x74, 0x73, 0x63,
+0x68, 0x395, 0x3bb, 0x3bb, 0x3b7, 0x3bd, 0x3b9, 0x3ba, 0x3ac, 0x395, 0x3bb, 0x3bb,
+0x3ac, 0x3b4, 0x3b1, 0x39a, 0x3cd, 0x3c0, 0x3c1, 0x3bf, 0x3c2, 0x61, 0x76, 0x61,
+0xf1, 0x65, 0x2019, 0x1ebd, 0x50, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x69,
+0xa97, 0xac1, 0xa9c, 0xab0, 0xabe, 0xaa4, 0xac0, 0xaad, 0xabe, 0xab0, 0xaa4, 0x45,
+0x6b, 0x65, 0x67, 0x75, 0x73, 0x69, 0x69, 0x48, 0x61, 0x75, 0x73, 0x61,
+0x4e, 0x69, 0x6a, 0x61, 0x72, 0x2bb, 0x14c, 0x6c, 0x65, 0x6c, 0x6f, 0x20,
+0x48, 0x61, 0x77, 0x61, 0x69, 0x2bb, 0x69, 0x2bb, 0x41, 0x6d, 0x65, 0x6c,
+0x69, 0x6b, 0x61, 0x20, 0x48, 0x75, 0x69, 0x20, 0x50, 0x16b, 0x20, 0x2bb,
+0x49, 0x61, 0x5e2, 0x5d1, 0x5e8, 0x5d9, 0x5ea, 0x5d9, 0x5e9, 0x5e8, 0x5d0, 0x5dc,
+0x939, 0x93f, 0x928, 0x94d, 0x926, 0x940, 0x48, 0x69, 0x6e, 0x64, 0x69, 0x20,
+0x28, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x29, 0x6d, 0x61, 0x67, 0x79, 0x61,
+0x72, 0x4d, 0x61, 0x67, 0x79, 0x61, 0x72, 0x6f, 0x72, 0x73, 0x7a, 0xe1,
+0x67, 0xed, 0x73, 0x6c, 0x65, 0x6e, 0x73, 0x6b, 0x61, 0xcd, 0x73, 0x6c,
+0x61, 0x6e, 0x64, 0x49, 0x64, 0x6f, 0x49, 0x67, 0x62, 0x6f, 0x4e, 0x61,
+0x1ecb, 0x6a, 0x1ecb, 0x72, 0x1ecb, 0x61, 0x61, 0x6e, 0x61, 0x72, 0xe2, 0x161,
+0x6b, 0x69, 0x65, 0x6c, 0xe2, 0x53, 0x75, 0x6f, 0x6d, 0xe2, 0x69, 0x6e,
+0x74, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x4d, 0x75, 0x6e,
+0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x75,
+0x65, 0x45, 0x73, 0x74, 0x6f, 0x6e, 0x69, 0x61, 0x1403, 0x14c4, 0x1483, 0x144e,
+0x1450, 0x1466, 0x1472, 0x14c7, 0x1455, 0x14a5, 0x47, 0x61, 0x65, 0x69, 0x6c, 0x67,
+0x65, 0xc9, 0x69, 0x72, 0x65, 0x61, 0x6e, 0x20, 0x52, 0xed, 0x6f, 0x63,
+0x68, 0x74, 0x20, 0x41, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x74, 0x68, 0x65,
+0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x49, 0x74, 0x61, 0x6c,
+0x69, 0x61, 0x53, 0x61, 0x6e, 0x20, 0x4d, 0x61, 0x72, 0x69, 0x6e, 0x6f,
+0x53, 0x76, 0x69, 0x7a, 0x7a, 0x65, 0x72, 0x61, 0x43, 0x69, 0x74, 0x74,
+0xe0, 0x20, 0x64, 0x65, 0x6c, 0x20, 0x56, 0x61, 0x74, 0x69, 0x63, 0x61,
+0x6e, 0x6f, 0x65e5, 0x672c, 0x8a9e, 0x4a, 0x61, 0x77, 0x61, 0x49, 0x6e, 0x64,
+0x6f, 0x6e, 0xe9, 0x73, 0x69, 0x61, 0x4b, 0x61, 0x6a, 0x65, 0x6a, 0x6f,
+0x6f, 0x6c, 0x61, 0x53, 0x65, 0x6e, 0x65, 0x67, 0x61, 0x6c, 0x6b, 0x61,
+0x62, 0x75, 0x76, 0x65, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x75, 0x4b, 0x61,
+0x62, 0x75, 0x20, 0x56, 0x65, 0x72, 0x64, 0x69, 0x54, 0x61, 0x71, 0x62,
+0x61, 0x79, 0x6c, 0x69, 0x74, 0x4c, 0x65, 0x7a, 0x7a, 0x61, 0x79, 0x65,
+0x72, 0x6b, 0x61, 0x6b, 0x254, 0x4b, 0x61, 0x6d, 0x25b, 0x72, 0x75, 0x6e,
+0x6b, 0x61, 0x6c, 0x61, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x75, 0x74, 0x4b,
+0x61, 0x6c, 0x61, 0x61, 0x6c, 0x6c, 0x69, 0x74, 0x20, 0x4e, 0x75, 0x6e,
+0x61, 0x61, 0x74, 0x4b, 0x61, 0x6c, 0x65, 0x6e, 0x6a, 0x69, 0x6e, 0x45,
+0x6d, 0x65, 0x74, 0x61, 0x62, 0x20, 0x4b, 0x65, 0x6e, 0x79, 0x61, 0x4b,
+0x69, 0x6b, 0x61, 0x6d, 0x62, 0x61, 0xc95, 0xca8, 0xccd, 0xca8, 0xca1, 0xcad,
+0xcbe, 0xcb0, 0xca4, 0x6a9, 0x672, 0x634, 0x64f, 0x631, 0x6c1, 0x650, 0x646, 0x62f,
+0x648, 0x633, 0x62a, 0x627, 0x646, 0x915, 0x949, 0x936, 0x941, 0x930, 0x939, 0x93f,
+0x902, 0x926, 0x94b, 0x938, 0x94d, 0x924, 0x93e, 0x928, 0x49b, 0x430, 0x437, 0x430,
+0x49b, 0x20, 0x442, 0x456, 0x43b, 0x456, 0x49a, 0x430, 0x437, 0x430, 0x49b, 0x441,
+0x442, 0x430, 0x43d, 0x4b, 0x25b, 0x6e, 0x79, 0x61, 0x14b, 0x1781, 0x17d2, 0x1798,
+0x17c2, 0x179a, 0x1780, 0x1798, 0x17d2, 0x1796, 0x17bb, 0x1787, 0x17b6, 0x4b, 0x2bc, 0x69,
+0x63, 0x68, 0x65, 0x2bc, 0x47, 0x69, 0x6b, 0x75, 0x79, 0x75, 0x4b, 0x69,
+0x6e, 0x79, 0x61, 0x72, 0x77, 0x61, 0x6e, 0x64, 0x61, 0x55, 0x20, 0x52,
+0x77, 0x61, 0x6e, 0x64, 0x61, 0x915, 0x94b, 0x902, 0x915, 0x923, 0x940, 0xd55c,
+0xad6d, 0xc5b4, 0xb300, 0xd55c, 0xbbfc, 0xad6d, 0xc911, 0xad6d, 0xc870, 0xc120, 0xbbfc, 0xc8fc,
+0xc8fc, 0xc758, 0xc778, 0xbbfc, 0xacf5, 0xd654, 0xad6d, 0x4b, 0x6f, 0x79, 0x72, 0x61,
+0x62, 0x6f, 0x72, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x6e, 0x69, 0x4d, 0x61,
+0x61, 0x6c, 0x69, 0x4b, 0x6f, 0x79, 0x72, 0x61, 0x20, 0x63, 0x69, 0x69,
+0x6e, 0x69, 0x4b, 0x70, 0x25b, 0x6c, 0x25b, 0x25b, 0x6b, 0x75, 0x72, 0x64,
+0xee, 0x20, 0x28, 0x6b, 0x75, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0xee, 0x29,
+0x54, 0x69, 0x72, 0x6b, 0x69, 0x79, 0x65, 0x4b, 0x77, 0x61, 0x73, 0x69,
+0x6f, 0x4b, 0x61, 0x6d, 0x65, 0x72, 0x75, 0x6e, 0x43a, 0x44b, 0x440, 0x433,
+0x44b, 0x437, 0x447, 0x430, 0x41a, 0x44b, 0x440, 0x433, 0x44b, 0x437, 0x441, 0x442,
+0x430, 0x43d, 0x4c, 0x61, 0x6b, 0x21f, 0xf3, 0x6c, 0x2bc, 0x69, 0x79, 0x61,
+0x70, 0x69, 0x4d, 0xed, 0x6c, 0x61, 0x68, 0x61, 0x14b, 0x73, 0x6b, 0x61,
+0x20, 0x54, 0x21f, 0x61, 0x6d, 0xe1, 0x6b, 0x21f, 0x6f, 0x10d, 0x68, 0x65,
+0x4b, 0x268, 0x6c, 0x61, 0x61, 0x6e, 0x67, 0x69, 0x54, 0x61, 0x61, 0x6e,
+0x73, 0x61, 0x6e, 0xed, 0x61, 0xea5, 0xeb2, 0xea7, 0x4c, 0x61, 0x74, 0x69,
+0x6e, 0x61, 0x43, 0x69, 0x76, 0x69, 0x74, 0x61, 0x73, 0x20, 0x56, 0x61,
+0x74, 0x69, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x61, 0x74, 0x76, 0x69, 0x65,
+0x161, 0x75, 0x4c, 0x61, 0x74, 0x76, 0x69, 0x6a, 0x61, 0x6c, 0x69, 0x6e,
+0x67, 0xe1, 0x6c, 0x61, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0xed, 0x6b,
+0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0xf3, 0x20, 0x44,
+0x65, 0x6d, 0x6f, 0x6b, 0x72, 0x61, 0x74, 0xed, 0x6b, 0x69, 0x41, 0x6e,
+0x67, 0xf3, 0x6c, 0x61, 0x52, 0x65, 0x70, 0x69, 0x62, 0x69, 0x6b, 0x69,
+0x20, 0x79, 0x61, 0x20, 0x41, 0x66, 0x72, 0xed, 0x6b, 0x61, 0x20, 0x79,
+0x61, 0x20, 0x4b, 0xe1, 0x74, 0x69, 0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x6c,
+0x69, 0x65, 0x74, 0x75, 0x76, 0x69, 0x173, 0x4c, 0x69, 0x65, 0x74, 0x75,
+0x76, 0x61, 0x6c, 0x61, 0x20, 0x2e, 0x6c, 0x6f, 0x6a, 0x62, 0x61, 0x6e,
+0x2e, 0x64, 0x6f, 0x6c, 0x6e, 0x6f, 0x73, 0x65, 0x72, 0x62, 0x161, 0x107,
+0x69, 0x6e, 0x61, 0x4e, 0x69, 0x6d, 0x73, 0x6b, 0x61, 0x4e, 0x65, 0x64,
+0x64, 0x65, 0x72, 0x73, 0x61, 0x73, 0x73, 0x2019, 0x73, 0x63, 0x68, 0x44,
+0xfc, 0xfc, 0x74, 0x73, 0x63, 0x68, 0x6c, 0x61, 0x6e, 0x64, 0x4e, 0x65,
+0x64, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x6e, 0x54, 0x73,
+0x68, 0x69, 0x6c, 0x75, 0x62, 0x61, 0x44, 0x69, 0x74, 0x75, 0x6e, 0x67,
+0x61, 0x20, 0x77, 0x61, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x75, 0x6a, 0x75,
+0x6c, 0x65, 0x76, 0x73, 0xe1, 0x6d, 0x65, 0x67, 0x69, 0x65, 0x6c, 0x6c,
+0x61, 0x44, 0x68, 0x6f, 0x6c, 0x75, 0x6f, 0x4c, 0xeb, 0x74, 0x7a, 0x65,
+0x62, 0x75, 0x65, 0x72, 0x67, 0x65, 0x73, 0x63, 0x68, 0x4c, 0x75, 0x6c,
+0x75, 0x68, 0x69, 0x61, 0x43c, 0x430, 0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x441,
+0x43a, 0x438, 0x421, 0x435, 0x432, 0x435, 0x440, 0x43d, 0x430, 0x20, 0x41c, 0x430,
+0x43a, 0x435, 0x434, 0x43e, 0x43d, 0x438, 0x458, 0x430, 0x4b, 0x69, 0x6d, 0x61,
+0x63, 0x68, 0x61, 0x6d, 0x65, 0x92e, 0x948, 0x925, 0x93f, 0x932, 0x940, 0x4d,
+0x61, 0x6b, 0x75, 0x61, 0x55, 0x6d, 0x6f, 0x7a, 0x61, 0x6d, 0x62, 0x69,
+0x6b, 0x69, 0x43, 0x68, 0x69, 0x6d, 0x61, 0x6b, 0x6f, 0x6e, 0x64, 0x65,
+0x4d, 0x61, 0x6c, 0x61, 0x67, 0x61, 0x73, 0x79, 0x4d, 0x61, 0x64, 0x61,
+0x67, 0x61, 0x73, 0x69, 0x6b, 0x61, 0x72, 0x61, 0xd2e, 0xd32, 0xd2f, 0xd3e,
+0xd33, 0xd02, 0xd07, 0xd28, 0xd4d, 0xd24, 0xd4d, 0xd2f, 0x4d, 0x65, 0x6c, 0x61,
+0x79, 0x75, 0x628, 0x647, 0x627, 0x633, 0x20, 0x645, 0x644, 0x627, 0x64a, 0x648,
+0x628, 0x631, 0x648, 0x646, 0x64a, 0x645, 0x644, 0x64a, 0x633, 0x64a, 0x627, 0x42,
+0x72, 0x75, 0x6e, 0x65, 0x69, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x75,
+0x72, 0x61, 0x4d, 0x61, 0x6c, 0x74, 0x69, 0x9ae, 0x9c8, 0x9a4, 0x9c8, 0x9b2,
+0x9cb, 0x9a8, 0x9cd, 0x987, 0x9a8, 0x9cd, 0x9a6, 0x9bf, 0x9af, 0x9bc, 0x9be, 0xabc3,
+0xabe4, 0xabc7, 0xabe9, 0xabc2, 0xabe3, 0xabdf, 0x47, 0x61, 0x65, 0x6c, 0x67, 0x45,
+0x6c, 0x6c, 0x61, 0x6e, 0x20, 0x56, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x4d,
+0x101, 0x6f, 0x72, 0x69, 0x41, 0x6f, 0x74, 0x65, 0x61, 0x72, 0x6f, 0x61,
+0x4d, 0x61, 0x70, 0x75, 0x64, 0x75, 0x6e, 0x67, 0x75, 0x6e, 0x92e, 0x930,
+0x93e, 0x920, 0x940, 0x54, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x69, 0x61, 0x645,
+0x627, 0x632, 0x631, 0x648, 0x646, 0x6cc, 0x627, 0x6cc, 0x631, 0x627, 0x646, 0x4b,
+0x129, 0x6d, 0x129, 0x72, 0x169, 0x6d, 0x65, 0x74, 0x61, 0x2bc, 0x4b, 0x61,
+0x6d, 0x61, 0x6c, 0x75, 0x6e, 0x4b, 0x61, 0x6e, 0x69, 0x65, 0x6e, 0x2bc,
+0x6b, 0xe9, 0x68, 0x61, 0x43c, 0x43e, 0x43d, 0x433, 0x43e, 0x43b, 0x41c, 0x43e,
+0x43d, 0x433, 0x43e, 0x43b, 0x182e, 0x1823, 0x1829, 0x182d, 0x1823, 0x182f, 0x6b, 0x72,
+0x65, 0x6f, 0x6c, 0x20, 0x6d, 0x6f, 0x72, 0x69, 0x73, 0x69, 0x65, 0x6e,
+0x4d, 0x6f, 0x72, 0x69, 0x73, 0x4d, 0x55, 0x4e, 0x44, 0x41, 0x14a, 0x6b,
+0x61, 0x6d, 0x65, 0x72, 0x75, 0x14b, 0x4d, 0x76, 0x73, 0x6b, 0x6f, 0x6b,
+0x65, 0x4b, 0x68, 0x6f, 0x65, 0x6b, 0x68, 0x6f, 0x65, 0x67, 0x6f, 0x77,
+0x61, 0x62, 0x4e, 0x61, 0x6d, 0x69, 0x62, 0x69, 0x61, 0x62, 0x44, 0x69,
+0x6e, 0xe9, 0x20, 0x42, 0x69, 0x7a, 0x61, 0x61, 0x64, 0x928, 0x947, 0x92a,
+0x93e, 0x932, 0x940, 0x53, 0x68, 0x77, 0xf3, 0x14b, 0xf2, 0x20, 0x6e, 0x67,
+0x69, 0x65, 0x6d, 0x62, 0x254, 0x254, 0x6e, 0x4b, 0xe0, 0x6d, 0x61, 0x6c,
+0xfb, 0x6d, 0x4e, 0x64, 0x61, 0xa78c, 0x61, 0x4b, 0x61, 0x6d, 0x25b, 0x6c,
+0xfb, 0x6e, 0x4e, 0x61, 0x69, 0x6a, 0xed, 0x72, 0x69, 0xe1, 0x20, 0x50,
+0xed, 0x6a, 0x69, 0x6e, 0x4e, 0x61, 0x69, 0x6a, 0xed, 0x72, 0x69, 0x61,
+0x7d2, 0x7de, 0x7cf, 0x7d6, 0x7cc, 0x7ec, 0x7e3, 0x7cd, 0x7eb, 0x644, 0x6ca, 0x631,
+0x6cc, 0x20, 0x634, 0x648, 0x645, 0x627, 0x644, 0x6cc, 0x64, 0x61, 0x76, 0x76,
+0x69, 0x73, 0xe1, 0x6d, 0x65, 0x67, 0x69, 0x65, 0x6c, 0x6c, 0x61, 0x4e,
+0x6f, 0x72, 0x67, 0x61, 0x53, 0x75, 0x6f, 0x70, 0x6d, 0x61, 0x52, 0x75,
+0x6f, 0x167, 0x167, 0x61, 0x53, 0x65, 0x73, 0x6f, 0x74, 0x68, 0x6f, 0x20,
+0x73, 0x61, 0x20, 0x4c, 0x65, 0x62, 0x6f, 0x61, 0x41, 0x66, 0x72, 0x69,
+0x6b, 0x61, 0x20, 0x42, 0x6f, 0x72, 0x77, 0x61, 0x69, 0x73, 0x69, 0x4e,
+0x64, 0x65, 0x62, 0x65, 0x6c, 0x65, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20,
+0x62, 0x6f, 0x6b, 0x6d, 0xe5, 0x6c, 0x4e, 0x6f, 0x72, 0x67, 0x65, 0x53,
+0x76, 0x61, 0x6c, 0x62, 0x61, 0x72, 0x64, 0x20, 0x6f, 0x67, 0x20, 0x4a,
+0x61, 0x6e, 0x20, 0x4d, 0x61, 0x79, 0x65, 0x6e, 0x6e, 0x6f, 0x72, 0x73,
+0x6b, 0x20, 0x6e, 0x79, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x4e, 0x6f, 0x72,
+0x65, 0x67, 0x54, 0x68, 0x6f, 0x6b, 0x20, 0x4e, 0x61, 0x74, 0x68, 0x4e,
+0x79, 0x61, 0x6e, 0x6a, 0x61, 0x52, 0x75, 0x6e, 0x79, 0x61, 0x6e, 0x6b,
+0x6f, 0x72, 0x65, 0x6f, 0x63, 0x63, 0x69, 0x74, 0x61, 0x6e, 0x45, 0x73,
+0x70, 0x61, 0x6e, 0x68, 0x61, 0xb13, 0xb21, 0xb3c, 0xb3f, 0xb06, 0xb2d, 0xb3e,
+0xb30, 0xb24, 0x4f, 0x72, 0x6f, 0x6d, 0x6f, 0x6f, 0x49, 0x74, 0x6f, 0x6f,
+0x70, 0x68, 0x69, 0x79, 0x61, 0x61, 0x4b, 0x65, 0x65, 0x6e, 0x69, 0x79,
+0x61, 0x61, 0xd801, 0xdccf, 0xd801, 0xdcd8, 0xd801, 0xdcfb, 0xd801, 0xdcd8, 0xd801, 0xdcfb,
+0xd801, 0xdcdf, 0x438, 0x440, 0x43e, 0x43d, 0x413, 0x443, 0x44b, 0x440, 0x434, 0x437,
+0x44b, 0x441, 0x442, 0x43e, 0x43d, 0x423, 0x4d5, 0x440, 0x4d5, 0x441, 0x435, 0x50,
+0x61, 0x70, 0x69, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x4b, 0xf2, 0x72,
+0x73, 0x6f, 0x75, 0x67e, 0x69a, 0x62a, 0x648, 0x627, 0x641, 0x63a, 0x627, 0x646,
+0x633, 0x62a, 0x627, 0x646, 0x67e, 0x627, 0x6a9, 0x633, 0x62a, 0x627, 0x646, 0x641,
+0x627, 0x631, 0x633, 0x6cc, 0x62f, 0x631, 0x6cc, 0x70, 0x6f, 0x6c, 0x73, 0x6b,
+0x69, 0x50, 0x6f, 0x6c, 0x73, 0x6b, 0x61, 0x70, 0x6f, 0x72, 0x74, 0x75,
+0x67, 0x75, 0xea, 0x73, 0x42, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x41, 0x6e,
+0x67, 0x6f, 0x6c, 0x61, 0x43, 0x61, 0x62, 0x6f, 0x20, 0x56, 0x65, 0x72,
+0x64, 0x65, 0x47, 0x75, 0x69, 0x6e, 0xe9, 0x20, 0x45, 0x71, 0x75, 0x61,
+0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x47, 0x75, 0x69, 0x6e, 0xe9, 0x2d,
+0x42, 0x69, 0x73, 0x73, 0x61, 0x75, 0x4c, 0x75, 0x78, 0x65, 0x6d, 0x62,
+0x75, 0x72, 0x67, 0x6f, 0x4d, 0x61, 0x63, 0x61, 0x75, 0x2c, 0x20, 0x52,
+0x41, 0x45, 0x20, 0x64, 0x61, 0x20, 0x43, 0x68, 0x69, 0x6e, 0x61, 0x4d,
+0x6f, 0xe7, 0x61, 0x6d, 0x62, 0x69, 0x71, 0x75, 0x65, 0x70, 0x6f, 0x72,
+0x74, 0x75, 0x67, 0x75, 0xea, 0x73, 0x20, 0x65, 0x75, 0x72, 0x6f, 0x70,
+0x65, 0x75, 0x50, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x61, 0x6c, 0x53, 0xe3,
+0x6f, 0x20, 0x54, 0x6f, 0x6d, 0xe9, 0x20, 0x65, 0x20, 0x50, 0x72, 0xed,
+0x6e, 0x63, 0x69, 0x70, 0x65, 0x53, 0x75, 0xed, 0xe7, 0x61, 0x54, 0x69,
+0x6d, 0x6f, 0x72, 0x2d, 0x4c, 0x65, 0x73, 0x74, 0x65, 0x70, 0x72, 0x16b,
+0x73, 0x69, 0x73, 0x6b, 0x61, 0x6e, 0x50, 0x14d, 0x6c, 0x69, 0xa2a, 0xa70,
+0xa1c, 0xa3e, 0xa2c, 0xa40, 0xa2d, 0xa3e, 0xa30, 0xa24, 0x67e, 0x646, 0x62c, 0x627,
+0x628, 0x6cc, 0x52, 0x75, 0x6e, 0x61, 0x73, 0x69, 0x6d, 0x69, 0x50, 0x65,
+0x72, 0xfa, 0x42, 0x6f, 0x6c, 0x69, 0x76, 0x69, 0x61, 0x45, 0x63, 0x75,
+0x61, 0x64, 0x6f, 0x72, 0x72, 0x6f, 0x6d, 0xe2, 0x6e, 0x103, 0x52, 0x6f,
+0x6d, 0xe2, 0x6e, 0x69, 0x61, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69,
+0x63, 0x61, 0x20, 0x4d, 0x6f, 0x6c, 0x64, 0x6f, 0x76, 0x61, 0x72, 0x75,
+0x6d, 0x61, 0x6e, 0x74, 0x73, 0x63, 0x68, 0x53, 0x76, 0x69, 0x7a, 0x72,
+0x61, 0x4b, 0x69, 0x68, 0x6f, 0x72, 0x6f, 0x6d, 0x62, 0x6f, 0x49, 0x6b,
+0x69, 0x72, 0x75, 0x6e, 0x64, 0x69, 0x55, 0x62, 0x75, 0x72, 0x75, 0x6e,
+0x64, 0x69, 0x440, 0x443, 0x441, 0x441, 0x43a, 0x438, 0x439, 0x420, 0x43e, 0x441,
+0x441, 0x438, 0x44f, 0x41a, 0x430, 0x437, 0x430, 0x445, 0x441, 0x442, 0x430, 0x43d,
+0x41a, 0x438, 0x440, 0x433, 0x438, 0x437, 0x438, 0x44f, 0x41c, 0x43e, 0x43b, 0x434,
+0x43e, 0x432, 0x430, 0x423, 0x43a, 0x440, 0x430, 0x438, 0x43d, 0x430, 0x4b, 0x69,
+0x72, 0x75, 0x77, 0x61, 0x53, 0x61, 0x68, 0x6f, 0x441, 0x430, 0x445, 0x430,
+0x20, 0x442, 0x44b, 0x43b, 0x430, 0x410, 0x440, 0x430, 0x441, 0x441, 0x44b, 0x44b,
+0x439, 0x430, 0x4b, 0x69, 0x73, 0x61, 0x6d, 0x70, 0x75, 0x72, 0x53, 0xe4,
+0x6e, 0x67, 0xf6, 0x4b, 0xf6, 0x64, 0xf6, 0x72, 0xf6, 0x73, 0xea, 0x73,
+0x65, 0x20, 0x74, 0xee, 0x20, 0x42, 0xea, 0x61, 0x66, 0x72, 0xee, 0x6b,
+0x61, 0x49, 0x73, 0x68, 0x69, 0x73, 0x61, 0x6e, 0x67, 0x75, 0x54, 0x61,
+0x6e, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x938, 0x902, 0x938, 0x94d, 0x915,
+0x943, 0x924, 0x20, 0x92d, 0x93e, 0x937, 0x93e, 0x92d, 0x93e, 0x930, 0x924, 0x903,
+0x1c65, 0x1c5f, 0x1c71, 0x1c5b, 0x1c5f, 0x1c72, 0x1c64, 0x1c64, 0x1c71, 0x1c70, 0x1c64, 0x1c6d,
+0x1c5f, 0x938, 0x93e, 0x928, 0x924, 0x93e, 0x921, 0x93c, 0x940, 0x73, 0x61, 0x72,
+0x64, 0x75, 0x73, 0x65, 0x6e, 0x61, 0x441, 0x440, 0x43f, 0x441, 0x43a, 0x438,
+0x421, 0x440, 0x431, 0x438, 0x458, 0x430, 0x41a, 0x43e, 0x441, 0x43e, 0x432, 0x43e,
+0x426, 0x440, 0x43d, 0x430, 0x20, 0x413, 0x43e, 0x440, 0x430, 0x73, 0x72, 0x70,
+0x73, 0x6b, 0x69, 0x4b, 0x6f, 0x73, 0x6f, 0x76, 0x6f, 0x43, 0x72, 0x6e,
+0x61, 0x20, 0x47, 0x6f, 0x72, 0x61, 0x53, 0x72, 0x62, 0x69, 0x6a, 0x61,
+0x4b, 0x69, 0x73, 0x68, 0x61, 0x6d, 0x62, 0x61, 0x61, 0x63, 0x68, 0x69,
+0x53, 0x68, 0x6f, 0x6e, 0x61, 0xa188, 0xa320, 0xa259, 0xa34f, 0xa1e9, 0x73, 0x69,
+0x63, 0x69, 0x6c, 0x69, 0x61, 0x6e, 0x75, 0x53, 0x69, 0x64, 0x61, 0x61,
+0x6d, 0x75, 0x20, 0x41, 0x66, 0x6f, 0x49, 0x74, 0x69, 0x79, 0x6f, 0x6f,
+0x70, 0x68, 0x69, 0x79, 0x61, 0x15b, 0x6c, 0x14d, 0x6e, 0x73, 0x6b, 0x69,
+0x633, 0x646, 0x68c, 0x64a, 0x67e, 0x627, 0x6aa, 0x633, 0x62a, 0x627, 0x646, 0x938,
+0x93f, 0x928, 0x94d, 0x927, 0x940, 0xdc3, 0xdd2, 0xd82, 0xdc4, 0xdbd, 0xdc1, 0xdca,
+0x200d, 0xdbb, 0xdd3, 0x20, 0xdbd, 0xd82, 0xd9a, 0xdcf, 0xdc0, 0x73, 0xe4, 0xe4,
+0x2b9, 0x6d, 0x1e9, 0x69, 0xf5, 0x6c, 0x6c, 0x4c, 0xe4, 0xe4, 0x2b9, 0x64,
+0x64, 0x6a, 0xe2, 0x6e, 0x6e, 0x61, 0x6d, 0x73, 0x6c, 0x6f, 0x76, 0x65,
+0x6e, 0x10d, 0x69, 0x6e, 0x61, 0x53, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x73,
+0x6b, 0x6f, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x161, 0x10d, 0x69, 0x6e,
+0x61, 0x53, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0x69, 0x6a, 0x61, 0x4f, 0x6c,
+0x75, 0x73, 0x6f, 0x67, 0x61, 0x53, 0x6f, 0x6f, 0x6d, 0x61, 0x61, 0x6c,
+0x69, 0x53, 0x6f, 0x6f, 0x6d, 0x61, 0x61, 0x6c, 0x69, 0x79, 0x61, 0x4a,
+0x61, 0x62, 0x75, 0x75, 0x74, 0x69, 0x49, 0x74, 0x6f, 0x6f, 0x62, 0x69,
+0x79, 0x61, 0x6a9, 0x648, 0x631, 0x62f, 0x6cc, 0x20, 0x62e, 0x648, 0x627, 0x631,
+0x6af, 0xc5, 0x61, 0x72, 0x6a, 0x65, 0x6c, 0x73, 0x61, 0x65, 0x6d, 0x69,
+0x65, 0x6e, 0x20, 0x67, 0xef, 0x65, 0x6c, 0x65, 0x65, 0x73, 0x70, 0x61,
+0xf1, 0x6f, 0x6c, 0x20, 0x64, 0x65, 0x20, 0x45, 0x73, 0x70, 0x61, 0xf1,
+0x61, 0x41, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x61, 0x42, 0x65,
+0x6c, 0x69, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x69, 0x61, 0x73,
+0x43, 0x65, 0x75, 0x74, 0x61, 0x20, 0x79, 0x20, 0x4d, 0x65, 0x6c, 0x69,
+0x6c, 0x6c, 0x61, 0x43, 0x68, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f,
+0x6d, 0x62, 0x69, 0x61, 0x43, 0x6f, 0x73, 0x74, 0x61, 0x20, 0x52, 0x69,
+0x63, 0x61, 0x43, 0x75, 0x62, 0x61, 0x52, 0x65, 0x70, 0xfa, 0x62, 0x6c,
+0x69, 0x63, 0x61, 0x20, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61,
+0x6e, 0x61, 0x45, 0x6c, 0x20, 0x53, 0x61, 0x6c, 0x76, 0x61, 0x64, 0x6f,
+0x72, 0x47, 0x75, 0x69, 0x6e, 0x65, 0x61, 0x20, 0x45, 0x63, 0x75, 0x61,
+0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x47, 0x75, 0x61, 0x74, 0x65, 0x6d,
+0x61, 0x6c, 0x61, 0x48, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x61, 0x73, 0x65,
+0x73, 0x70, 0x61, 0xf1, 0x6f, 0x6c, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e,
+0x6f, 0x61, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x6f, 0x4c, 0x61,
+0x74, 0x69, 0x6e, 0x6f, 0x61, 0x6d, 0xe9, 0x72, 0x69, 0x63, 0x61, 0x65,
+0x73, 0x70, 0x61, 0xf1, 0x6f, 0x6c, 0x20, 0x64, 0x65, 0x20, 0x4d, 0xe9,
+0x78, 0x69, 0x63, 0x6f, 0x4d, 0xe9, 0x78, 0x69, 0x63, 0x6f, 0x4e, 0x69,
+0x63, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x50, 0x61, 0x6e, 0x61, 0x6d,
+0xe1, 0x50, 0x61, 0x72, 0x61, 0x67, 0x75, 0x61, 0x79, 0x46, 0x69, 0x6c,
+0x69, 0x70, 0x69, 0x6e, 0x61, 0x73, 0x45, 0x73, 0x74, 0x61, 0x64, 0x6f,
+0x73, 0x20, 0x55, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x55, 0x72, 0x75, 0x67,
+0x75, 0x61, 0x79, 0x56, 0x65, 0x6e, 0x65, 0x7a, 0x75, 0x65, 0x6c, 0x61,
+0x2d5c, 0x2d30, 0x2d4e, 0x2d30, 0x2d63, 0x2d49, 0x2d56, 0x2d5c, 0x2d4d, 0x2d4e, 0x2d56, 0x2d54,
+0x2d49, 0x2d31, 0x42, 0x61, 0x73, 0x61, 0x20, 0x53, 0x75, 0x6e, 0x64, 0x61,
+0x4b, 0x69, 0x73, 0x77, 0x61, 0x68, 0x69, 0x6c, 0x69, 0x4a, 0x61, 0x6d,
+0x68, 0x75, 0x72, 0x69, 0x20, 0x79, 0x61, 0x20, 0x4b, 0x69, 0x64, 0x65,
+0x6d, 0x6f, 0x6b, 0x72, 0x61, 0x73, 0x69, 0x61, 0x20, 0x79, 0x61, 0x20,
+0x4b, 0x6f, 0x6e, 0x67, 0x6f, 0x73, 0x69, 0x53, 0x77, 0x61, 0x74, 0x69,
+0x65, 0x53, 0x77, 0x61, 0x74, 0x69, 0x6e, 0x69, 0x73, 0x76, 0x65, 0x6e,
+0x73, 0x6b, 0x61, 0x53, 0x76, 0x65, 0x72, 0x69, 0x67, 0x65, 0xc5, 0x6c,
+0x61, 0x6e, 0x64, 0x53, 0x63, 0x68, 0x77, 0x69, 0x69, 0x7a, 0x65, 0x72,
+0x74, 0xfc, 0xfc, 0x74, 0x73, 0x63, 0x68, 0x46, 0x72, 0x61, 0x6e, 0x6b,
+0x72, 0x69, 0x69, 0x63, 0x68, 0x4c, 0x69, 0xe4, 0x63, 0x68, 0x74, 0x65,
+0x73, 0x63, 0x68, 0x74, 0xe4, 0x69, 0x723, 0x718, 0x72a, 0x71d, 0x71d, 0x710,
+0x725, 0x71d, 0x72a, 0x729, 0x723, 0x718, 0x72a, 0x71d, 0x710, 0x2d5c, 0x2d30, 0x2d5b,
+0x2d4d, 0x2d43, 0x2d49, 0x2d5c, 0x54, 0x61, 0x73, 0x68, 0x65, 0x6c, 0x1e25, 0x69,
+0x79, 0x74, 0x6c, 0x6d, 0x263, 0x72, 0x69, 0x62, 0xaabc, 0xaa95, 0xaa92, 0xaabe,
+0x4b, 0x69, 0x74, 0x61, 0x69, 0x74, 0x61, 0x442, 0x43e, 0x4b7, 0x438, 0x43a,
+0x4e3, 0x422, 0x43e, 0x4b7, 0x438, 0x43a, 0x438, 0x441, 0x442, 0x43e, 0x43d, 0xba4,
+0xbae, 0xbbf, 0xbb4, 0xbcd, 0xb87, 0xba8, 0xbcd, 0xba4, 0xbbf, 0xbaf, 0xbbe, 0xbae,
+0xbb2, 0xbc7, 0xb9a, 0xbbf, 0xbaf, 0xbbe, 0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa,
+0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0xb87, 0xbb2, 0xb99, 0xbcd, 0xb95, 0xbc8, 0x70,
+0x61, 0x74, 0x61, 0x73, 0x20, 0x54, 0x61, 0x72, 0x6f, 0x6b, 0x6f, 0x54,
+0x61, 0x73, 0x61, 0x77, 0x61, 0x71, 0x20, 0x73, 0x65, 0x6e, 0x6e, 0x69,
+0x4e, 0x69, 0x17e, 0x65, 0x72, 0x442, 0x430, 0x442, 0x430, 0x440, 0xc24, 0xc46,
+0xc32, 0xc41, 0xc17, 0xc41, 0xc2d, 0xc3e, 0xc30, 0xc24, 0xc26, 0xc47, 0xc36, 0xc02,
+0x4b, 0x69, 0x74, 0x65, 0x73, 0x6f, 0x4b, 0x65, 0x6e, 0x69, 0x61, 0xe44,
+0xe17, 0xe22, 0xf56, 0xf7c, 0xf51, 0xf0b, 0xf66, 0xf90, 0xf51, 0xf0b, 0xf62, 0xf92,
+0xfb1, 0xf0b, 0xf53, 0xf42, 0xf62, 0xf92, 0xfb1, 0xf0b, 0xf42, 0xf62, 0xf0b, 0x1275,
+0x130d, 0x1228, 0x1275, 0x130d, 0x122d, 0x129b, 0x54, 0x6f, 0x6b, 0x20, 0x50, 0x69,
+0x73, 0x69, 0x6e, 0x50, 0x61, 0x70, 0x75, 0x61, 0x20, 0x4e, 0x69, 0x75,
+0x67, 0x69, 0x6e, 0x69, 0x6c, 0x65, 0x61, 0x20, 0x66, 0x61, 0x6b, 0x61,
+0x74, 0x6f, 0x6e, 0x67, 0x61, 0x58, 0x69, 0x74, 0x73, 0x6f, 0x6e, 0x67,
+0x61, 0x53, 0x65, 0x74, 0x73, 0x77, 0x61, 0x6e, 0x61, 0x41, 0x66, 0x6f,
+0x72, 0x69, 0x6b, 0x61, 0x20, 0x42, 0x6f, 0x72, 0x77, 0x61, 0x54, 0xfc,
+0x72, 0x6b, 0xe7, 0x65, 0x54, 0xfc, 0x72, 0x6b, 0x69, 0x79, 0x65, 0x4b,
+0x131, 0x62, 0x72, 0x131, 0x73, 0x74, 0xfc, 0x72, 0x6b, 0x6d, 0x65, 0x6e,
+0x20, 0x64, 0x69, 0x6c, 0x69, 0x54, 0xfc, 0x72, 0x6b, 0x6d, 0x65, 0x6e,
+0x69, 0x73, 0x74, 0x61, 0x6e, 0x4b, 0x61, 0x74, 0x61, 0x62, 0x443, 0x43a,
+0x440, 0x430, 0x457, 0x43d, 0x441, 0x44c, 0x43a, 0x430, 0x423, 0x43a, 0x440, 0x430,
+0x457, 0x43d, 0x430, 0x68, 0x6f, 0x72, 0x6e, 0x6a, 0x6f, 0x73, 0x65, 0x72,
+0x62, 0x161, 0x107, 0x69, 0x6e, 0x61, 0x4e, 0x11b, 0x6d, 0x73, 0x6b, 0x61,
+0x627, 0x631, 0x62f, 0x648, 0x628, 0x6be, 0x627, 0x631, 0x62a, 0x626, 0x6c7, 0x64a,
+0x63a, 0x6c7, 0x631, 0x686, 0x6d5, 0x62c, 0x6c7, 0x6ad, 0x6af, 0x648, 0x6f, 0x2018,
+0x7a, 0x62, 0x65, 0x6b, 0x4f, 0x2bb, 0x7a, 0x62, 0x65, 0x6b, 0x69, 0x73,
+0x74, 0x6f, 0x6e, 0x627, 0x648, 0x632, 0x628, 0x6cc, 0x6a9, 0x45e, 0x437, 0x431,
+0x435, 0x43a, 0x447, 0x430, 0x40e, 0x437, 0x431, 0x435, 0x43a, 0x438, 0x441, 0x442,
+0x43e, 0x43d, 0xa559, 0xa524, 0xa55e, 0xa524, 0xa52b, 0xa569, 0x56, 0x61, 0x69, 0x4c,
+0x61, 0x69, 0x62, 0x68, 0x69, 0x79, 0x61, 0x54, 0x73, 0x68, 0x69, 0x76,
+0x65, 0x6e, 0x1e13, 0x61, 0x54, 0x69, 0x1ebf, 0x6e, 0x67, 0x20, 0x56, 0x69,
+0x1ec7, 0x74, 0x56, 0x69, 0x1ec7, 0x74, 0x20, 0x4e, 0x61, 0x6d, 0x56, 0x6f,
+0x6c, 0x61, 0x70, 0xfc, 0x6b, 0x4b, 0x79, 0x69, 0x76, 0x75, 0x6e, 0x6a,
+0x6f, 0x77, 0x61, 0x6c, 0x6f, 0x6e, 0x57, 0x61, 0x6c, 0x73, 0x65, 0x72,
+0x53, 0x63, 0x68, 0x77, 0x69, 0x7a, 0x57, 0x61, 0x72, 0x6c, 0x70, 0x69,
+0x72, 0x69, 0x43, 0x79, 0x6d, 0x72, 0x61, 0x65, 0x67, 0x59, 0x20, 0x44,
+0x65, 0x79, 0x72, 0x6e, 0x61, 0x73, 0x20, 0x55, 0x6e, 0x65, 0x64, 0x69,
+0x67, 0x628, 0x644, 0x648, 0x686, 0x6cc, 0x20, 0x28, 0x631, 0x62e, 0x634, 0x627,
+0x646, 0x6cc, 0x29, 0x626, 0x648, 0x645, 0x627, 0x646, 0x645, 0x62a, 0x62d, 0x62f,
+0x6cc, 0x646, 0x20, 0x639, 0x631, 0x628, 0x6cc, 0x646, 0x20, 0x627, 0x645, 0x627,
+0x631, 0x627, 0x62a, 0x46, 0x72, 0x79, 0x73, 0x6b, 0x4e, 0x65, 0x64, 0x65,
+0x72, 0x6c, 0xe2, 0x6e, 0x12c8, 0x120b, 0x12ed, 0x1273, 0x1271, 0x57, 0x6f, 0x6c,
+0x6f, 0x66, 0x49, 0x73, 0x69, 0x58, 0x68, 0x6f, 0x73, 0x61, 0x45, 0x4d,
+0x7a, 0x61, 0x6e, 0x74, 0x73, 0x69, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b,
+0x61, 0x6e, 0x75, 0x61, 0x73, 0x75, 0x65, 0x4b, 0x65, 0x6d, 0x65, 0x6c,
+0xfa, 0x6e, 0x5d9, 0x5d9, 0x5b4, 0x5d3, 0x5d9, 0x5e9, 0x5d0, 0x5d5, 0x5e7, 0x5e8,
+0x5d0, 0x5b7, 0x5d9, 0x5e0, 0x5e2, 0xc8, 0x64, 0xe8, 0x20, 0x59, 0x6f, 0x72,
+0xf9, 0x62, 0xe1, 0x4e, 0xe0, 0xec, 0x6a, 0xed, 0x72, 0xed, 0xe0, 0x42,
+0x25b, 0x300, 0x6e, 0x25b, 0x300, 0x5a, 0x61, 0x72, 0x6d, 0x61, 0x63, 0x69,
+0x69, 0x6e, 0x65, 0x56, 0x61, 0x68, 0x63, 0x75, 0x65, 0x6e, 0x67, 0x68,
+0x43, 0x75, 0x6e, 0x67, 0x68, 0x67, 0x6f, 0x7a, 0x69, 0x73, 0x69, 0x5a,
+0x75, 0x6c, 0x75, 0x69, 0x4e, 0x69, 0x6e, 0x67, 0x69, 0x7a, 0x69, 0x6d,
+0x75, 0x20, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x6b, 0x61, 0x6e, 0x68,
+0x67, 0xe1, 0x67, 0x4d, 0x72, 0x61, 0x73, 0x69, 0x72, 0x6e, 0x68, 0x65,
+0x1ebd, 0x67, 0x61, 0x74, 0x75, 0x42, 0x72, 0x61, 0x73, 0x69, 0x75, 0xf1,
+0x65, 0x6e, 0x67, 0x61, 0x74, 0xfa, 0x4b, 0x75, 0x72, 0x169, 0x62, 0x69,
+0x79, 0x61, 0x57, 0x65, 0x6e, 0x65, 0x73, 0x75, 0x65, 0x72, 0x61, 0x939,
+0x930, 0x93f, 0x92f, 0x93e, 0x923, 0x935, 0x940, 0x4e, 0x6f, 0x72, 0x64, 0x66,
+0x72, 0x69, 0x69, 0x73, 0x6b, 0x54, 0x6a, 0x69, 0x69, 0x73, 0x6b, 0x6c,
+0x75, 0x6e, 0x930, 0x93e, 0x91c, 0x938, 0x94d, 0x925, 0x93e, 0x928, 0x940, 0x43c,
+0x43e, 0x43a, 0x448, 0x435, 0x43d, 0x44c, 0x20, 0x43a, 0x44f, 0x43b, 0x44c, 0x74,
+0x6f, 0x6b, 0x69, 0x20, 0x70, 0x6f, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x61,
+0x6c, 0x65, 0x50, 0x69, 0x6a, 0x69, 0x6e, 0x53, 0x6f, 0x6c, 0x6f, 0x6d,
+0x6f, 0x6e, 0x20, 0x41, 0x65, 0x6c, 0x61, 0x6e, 0x4f, 0x62, 0x6f, 0x6c,
+0x6f, 0x628, 0x644, 0x6c6, 0x686, 0x6cc, 0x42, 0x61, 0x6c, 0xf3, 0x63, 0x68,
+0x69, 0x50, 0xe1, 0x6b, 0x65, 0x73, 0x74, 0xe1, 0x6e, 0x6c, 0x69, 0x67,
+0x75, 0x72, 0x65, 0xd803, 0xdd0c, 0xd803, 0xdd17, 0xd803, 0xdd25, 0xd803, 0xdd1d, 0xd803,
+0xdd19, 0xd803, 0xdd1a, 0xd803, 0xdd12, 0xd803, 0xdd19, 0xd803, 0xdd1d, 0x62a, 0x648, 0x631,
+0x648, 0x627, 0x644, 0x6cc, 0x61, 0x6e, 0x69, 0x69, 0x20, 0x6b, 0x61, 0x67,
+0x269, 0x6a, 0x61, 0x42, 0x65, 0x6e, 0x25b, 0x25b, 0x915, 0x93e, 0x902, 0x917,
+0x921, 0x93c, 0x940, 0x76, 0x65, 0x6e, 0x65, 0x74, 0x6f
};
-static const char language_name_list[] =
+static constexpr char language_name_list[] =
"Default\0"
"C\0"
"Abkhazian\0"
-"Oromo\0"
"Afar\0"
"Afrikaans\0"
+"Aghem\0"
+"Akan\0"
+"Akkadian\0"
+"Akoose\0"
"Albanian\0"
+"American Sign Language\0"
"Amharic\0"
+"Ancient Egyptian\0"
+"Ancient Greek\0"
"Arabic\0"
+"Aragonese\0"
+"Aramaic\0"
"Armenian\0"
"Assamese\0"
+"Asturian\0"
+"Asu\0"
+"Atsam\0"
+"Avaric\0"
+"Avestan\0"
"Aymara\0"
"Azerbaijani\0"
+"Bafia\0"
+"Balinese\0"
+"Bambara\0"
+"Bamun\0"
+"Bangla\0"
+"Basaa\0"
"Bashkir\0"
"Basque\0"
-"Bengali\0"
-"Dzongkha\0"
-"Bihari\0"
+"Batak Toba\0"
+"Belarusian\0"
+"Bemba\0"
+"Bena\0"
+"Bhojpuri\0"
"Bislama\0"
+"Blin\0"
+"Bodo\0"
+"Bosnian\0"
"Breton\0"
+"Buginese\0"
"Bulgarian\0"
"Burmese\0"
-"Belarusian\0"
-"Khmer\0"
+"Cantonese\0"
"Catalan\0"
+"Cebuano\0"
+"Central Atlas Tamazight\0"
+"Central Kurdish\0"
+"Chakma\0"
+"Chamorro\0"
+"Chechen\0"
+"Cherokee\0"
+"Chickasaw\0"
+"Chiga\0"
"Chinese\0"
+"Church Slavic\0"
+"Chuvash\0"
+"Colognian\0"
+"Coptic\0"
+"Cornish\0"
"Corsican\0"
+"Cree\0"
"Croatian\0"
"Czech\0"
"Danish\0"
+"Divehi\0"
+"Dogri\0"
+"Duala\0"
"Dutch\0"
+"Dzongkha\0"
+"Embu\0"
"English\0"
+"Erzya\0"
"Esperanto\0"
"Estonian\0"
+"Ewe\0"
+"Ewondo\0"
"Faroese\0"
"Fijian\0"
+"Filipino\0"
"Finnish\0"
"French\0"
-"Western Frisian\0"
-"Gaelic\0"
+"Friulian\0"
+"Fula\0" // Fulah
+"Scottish Gaelic\0"
+"Ga\0"
"Galician\0"
+"Ganda\0"
+"Geez\0"
"Georgian\0"
"German\0"
+"Gothic\0"
"Greek\0"
-"Greenlandic\0"
"Guarani\0"
"Gujarati\0"
+"Gusii\0"
+"Haitian Creole\0"
"Hausa\0"
+"Hawaiian\0"
"Hebrew\0"
+"Herero\0"
"Hindi\0"
+"Hiri Motu\0"
"Hungarian\0"
"Icelandic\0"
+"Ido\0"
+"Igbo\0"
+"Inari Sami\0"
"Indonesian\0"
+"Ingush\0"
"Interlingua\0"
"Interlingue\0"
"Inuktitut\0"
-"Inupiak\0"
+"Inupiaq\0"
"Irish\0"
"Italian\0"
"Japanese\0"
"Javanese\0"
+"Jju\0"
+"Jola-Fonyi\0"
+"Kabuverdianu\0"
+"Kabyle\0"
+"Kako\0"
+"Kalaallisut\0"
+"Kalenjin\0"
+"Kamba\0"
"Kannada\0"
+"Kanuri\0"
"Kashmiri\0"
"Kazakh\0"
+"Kenyang\0"
+"Khmer\0"
+"Kʼicheʼ\0"
+"Kikuyu\0"
"Kinyarwanda\0"
-"Kirghiz\0"
+"Komi\0"
+"Kongo\0"
+"Konkani\0"
"Korean\0"
+"Koro\0"
+"Koyraboro Senni\0"
+"Koyra Chiini\0"
+"Kpelle\0"
+"Kuanyama\0"
"Kurdish\0"
-"Rundi\0"
+"Kwasio\0"
+"Kyrgyz\0"
+"Lakota\0"
+"Langi\0"
"Lao\0"
"Latin\0"
"Latvian\0"
+"Lezghian\0"
+"Limburgish\0"
"Lingala\0"
+"Literary Chinese\0"
"Lithuanian\0"
+"Lojban\0"
+"Lower Sorbian\0"
+"Low German\0"
+"Luba-Katanga\0"
+"Lule Sami\0"
+"Luo\0"
+"Luxembourgish\0"
+"Luyia\0"
"Macedonian\0"
+"Machame\0"
+"Maithili\0"
+"Makhuwa-Meetto\0"
+"Makonde\0"
"Malagasy\0"
-"Malay\0"
"Malayalam\0"
+"Malay\0"
"Maltese\0"
-"Maori\0"
+"Mandingo\0"
+"Manipuri\0"
+"Manx\0"
+"Māori\0"
+"Mapuche\0"
"Marathi\0"
"Marshallese\0"
+"Masai\0"
+"Mazanderani\0"
+"Mende\0"
+"Meru\0"
+"Metaʼ\0"
+"Mohawk\0"
"Mongolian\0"
+"Morisyen\0"
+"Mundang\0"
+"Muscogee\0"
+"Nama\0"
"Nauru\0"
+"Navajo\0"
+"Ndonga\0"
"Nepali\0"
-"Norwegian Bokmal\0"
+"Newari\0"
+"Ngiemboon\0"
+"Ngomba\0"
+"Nigerian Pidgin\0"
+"N’Ko\0"
+"Northern Luri\0"
+"Northern Sami\0"
+"Northern Sotho\0"
+"North Ndebele\0"
+"Norwegian Bokmål\0"
+"Norwegian Nynorsk\0"
+"Nuer\0"
+"Nyanja\0"
+"Nyankole\0"
"Occitan\0"
-"Oriya\0"
+"Odia\0"
+"Ojibwa\0"
+"Old Irish\0"
+"Old Norse\0"
+"Old Persian\0"
+"Oromo\0"
+"Osage\0"
+"Ossetic\0"
+"Pahlavi\0"
+"Palauan\0"
+"Pali\0"
+"Papiamento\0"
"Pashto\0"
"Persian\0"
+"Phoenician\0"
"Polish\0"
"Portuguese\0"
+"Prussian\0"
"Punjabi\0"
"Quechua\0"
-"Romansh\0"
"Romanian\0"
+"Romansh\0"
+"Rombo\0"
+"Rundi\0"
"Russian\0"
+"Rwa\0"
+"Saho\0"
+"Yakut\0" // Sakha
+"Samburu\0"
"Samoan\0"
"Sango\0"
+"Sangu\0"
"Sanskrit\0"
+"Santali\0"
+"Sardinian\0"
+"Saurashtra\0"
+"Sena\0"
"Serbian\0"
-"Ossetic\0"
-"Southern Sotho\0"
-"Tswana\0"
+"Shambala\0"
"Shona\0"
+"Sichuan Yi\0"
+"Sicilian\0"
+"Sidamo\0"
+"Silesian\0"
"Sindhi\0"
"Sinhala\0"
-"Swati\0"
+"Skolt Sami\0"
"Slovak\0"
"Slovenian\0"
+"Soga\0"
"Somali\0"
+"Southern Kurdish\0"
+"Southern Sami\0"
+"Southern Sotho\0"
+"South Ndebele\0"
"Spanish\0"
+"Standard Moroccan Tamazight\0"
"Sundanese\0"
"Swahili\0"
+"Swati\0"
"Swedish\0"
-"Sardinian\0"
+"Swiss German\0"
+"Syriac\0"
+"Tachelhit\0"
+"Tahitian\0"
+"Tai Dam\0"
+"Taita\0"
"Tajik\0"
"Tamil\0"
+"Taroko\0"
+"Tasawaq\0"
"Tatar\0"
"Telugu\0"
+"Teso\0"
"Thai\0"
"Tibetan\0"
+"Tigre\0"
"Tigrinya\0"
+"Tokelau\0"
+"Tok Pisin\0"
"Tongan\0"
"Tsonga\0"
+"Tswana\0"
"Turkish\0"
"Turkmen\0"
-"Tahitian\0"
-"Uighur\0"
+"Tuvalu\0"
+"Tyap\0"
+"Ugaritic\0"
"Ukrainian\0"
+"Upper Sorbian\0"
"Urdu\0"
+"Uyghur\0"
"Uzbek\0"
+"Vai\0"
+"Venda\0"
"Vietnamese\0"
-"Volapuk\0"
+"Volapük\0"
+"Vunjo\0"
+"Walloon\0"
+"Walser\0"
+"Warlpiri\0"
"Welsh\0"
+"Western Balochi\0"
+"Western Frisian\0"
+"Wolaytta\0"
"Wolof\0"
"Xhosa\0"
+"Yangben\0"
"Yiddish\0"
"Yoruba\0"
+"Zarma\0"
"Zhuang\0"
"Zulu\0"
-"Norwegian Nynorsk\0"
-"Bosnian\0"
-"Divehi\0"
-"Manx\0"
-"Cornish\0"
-"Akan\0"
-"Konkani\0"
-"Ga\0"
-"Igbo\0"
-"Kamba\0"
-"Syriac\0"
-"Blin\0"
-"Geez\0"
-"Koro\0"
-"Sidamo\0"
-"Atsam\0"
-"Tigre\0"
-"Jju\0"
-"Friulian\0"
-"Venda\0"
-"Ewe\0"
-"Walamo\0"
-"Hawaiian\0"
-"Tyap\0"
-"Nyanja\0"
-"Filipino\0"
-"Swiss German\0"
-"Sichuan Yi\0"
-"Kpelle\0"
-"Low German\0"
-"South Ndebele\0"
-"Northern Sotho\0"
-"Northern Sami\0"
-"Taroko\0"
-"Gusii\0"
-"Taita\0"
-"Fulah\0"
-"Kikuyu\0"
-"Samburu\0"
-"Sena\0"
-"North Ndebele\0"
-"Rombo\0"
-"Tachelhit\0"
-"Kabyle\0"
-"Nyankole\0"
-"Bena\0"
-"Vunjo\0"
-"Bambara\0"
-"Embu\0"
-"Cherokee\0"
-"Morisyen\0"
-"Makonde\0"
-"Langi\0"
-"Ganda\0"
-"Bemba\0"
-"Kabuverdianu\0"
-"Meru\0"
-"Kalenjin\0"
-"Nama\0"
-"Machame\0"
-"Colognian\0"
-"Masai\0"
-"Soga\0"
-"Luyia\0"
-"Asu\0"
-"Teso\0"
-"Saho\0"
-"Koyra Chiini\0"
-"Rwa\0"
-"Luo\0"
-"Chiga\0"
-"Central Morocco Tamazight\0"
-"Koyraboro Senni\0"
-"Shambala\0"
-"Bodo\0"
-"Avaric\0"
-"Chamorro\0"
-"Chechen\0"
-"Church\0"
-"Chuvash\0"
-"Cree\0"
-"Haitian\0"
-"Herero\0"
-"Hiri Motu\0"
-"Kanuri\0"
-"Komi\0"
-"Kongo\0"
-"Kwanyama\0"
-"Limburgish\0"
-"Luba Katanga\0"
-"Luxembourgish\0"
-"Navaho\0"
-"Ndonga\0"
-"Ojibwa\0"
-"Pali\0"
-"Walloon\0"
-"Aghem\0"
-"Basaa\0"
-"Zarma\0"
-"Duala\0"
-"Jola Fonyi\0"
-"Ewondo\0"
-"Bafia\0"
-"Makhuwa Meetto\0"
-"Mundang\0"
-"Kwasio\0"
-"Nuer\0"
-"Sakha\0"
-"Sangu\0"
-"Congo Swahili\0"
-"Tasawaq\0"
-"Vai\0"
-"Walser\0"
-"Yangben\0"
-"Avestan\0"
-"Asturian\0"
-"Ngomba\0"
-"Kako\0"
-"Meta\0"
-"Ngiemboon\0"
-"Aragonese\0"
-"Akkadian\0"
-"Ancient Egyptian\0"
-"Ancient Greek\0"
-"Aramaic\0"
-"Balinese\0"
-"Bamun\0"
-"Batak Toba\0"
-"Buginese\0"
-"Buhid\0"
-"Carian\0"
-"Chakma\0"
-"Classical Mandaic\0"
-"Coptic\0"
-"Dogri\0"
-"Eastern Cham\0"
-"Eastern Kayah\0"
-"Etruscan\0"
-"Gothic\0"
-"Hanunoo\0"
-"Ingush\0"
-"Large Flowery Miao\0"
-"Lepcha\0"
-"Limbu\0"
-"Lisu\0"
-"Lu\0"
-"Lycian\0"
-"Lydian\0"
-"Mandingo\0"
-"Manipuri\0"
-"Meroitic\0"
-"Northern Thai\0"
-"Old Irish\0"
-"Old Norse\0"
-"Old Persian\0"
-"Old Turkish\0"
-"Pahlavi\0"
-"Parthian\0"
-"Phoenician\0"
-"Prakrit Language\0"
-"Rejang\0"
-"Sabaean\0"
-"Samaritan\0"
-"Santali\0"
-"Saurashtra\0"
-"Sora\0"
-"Sylheti\0"
-"Tagbanwa\0"
-"Tai Dam\0"
-"Tai Nua\0"
-"Ugaritic\0"
-"Akoose\0"
-"Lakota\0"
-"Standard Moroccan Tamazight\0"
-"Mapuche\0"
-"Central Kurdish\0"
-"Lower Sorbian\0"
-"Upper Sorbian\0"
-"Kenyang\0"
-"Mohawk\0"
-"Nko\0"
-"Prussian\0"
-"Kiche\0"
-"Southern Sami\0"
-"Lule Sami\0"
-"Inari Sami\0"
-"Skolt Sami\0"
-"Warlpiri\0"
-"Manichaean Middle Persian\0"
-"Mende\0"
-"Ancient North Arabian\0"
-"Linear A\0"
-"Hmong Njua\0"
-"Ho\0"
-"Lezghian\0"
-"Bassa\0"
-"Mono\0"
-"Tedim Chin\0"
-"Maithili\0"
-"Ahom\0"
-"American Sign Language\0"
-"Ardhamagadhi Prakrit\0"
-"Bhojpuri\0"
-"Hieroglyphic Luwian\0"
-"Literary Chinese\0"
-"Mazanderani\0"
-"Mru\0"
-"Newari\0"
-"Northern Luri\0"
-"Palauan\0"
-"Papiamento\0"
-"Saraiki\0"
-"Tokelau\0"
-"Tok Pisin\0"
-"Tuvalu\0"
-"Uncoded Languages\0"
-"Cantonese\0"
-"Osage\0"
-"Tangut\0"
-"Ido\0"
-"Lojban\0"
-"Sicilian\0"
-"Southern Kurdish\0"
-"Western Balochi\0"
-"Cebuano\0"
-"Erzya\0"
-"Chickasaw\0"
-"Muscogee\0"
-"Silesian\0"
+"Kaingang\0"
+"Nheengatu\0"
+"Haryanvi\0"
+"Northern Frisian\0"
+"Rajasthani\0"
+"Moksha\0"
+"Toki Pona\0"
+"Pijin\0"
+"Obolo\0"
+"Baluchi\0"
+"Ligurian\0"
+"Rohingya\0"
+"Torwali\0"
+"Anii\0"
+"Kangri\0"
+"Venetian\0"
;
-static const quint16 language_name_index[] = {
+static constexpr quint16 language_name_index[] = {
0, // AnyLanguage
8, // C
10, // Abkhazian
- 20, // Oromo
- 26, // Afar
- 31, // Afrikaans
- 41, // Albanian
- 50, // Amharic
- 58, // Arabic
- 65, // Armenian
- 74, // Assamese
- 83, // Aymara
- 90, // Azerbaijani
- 102, // Bashkir
- 110, // Basque
- 117, // Bengali
- 125, // Dzongkha
- 134, // Bihari
- 141, // Bislama
- 149, // Breton
- 156, // Bulgarian
- 166, // Burmese
- 174, // Belarusian
- 185, // Khmer
- 191, // Catalan
- 199, // Chinese
- 207, // Corsican
- 216, // Croatian
- 225, // Czech
- 231, // Danish
- 238, // Dutch
- 244, // English
- 252, // Esperanto
- 262, // Estonian
- 271, // Faroese
- 279, // Fijian
- 286, // Finnish
- 294, // French
- 301, // Western Frisian
- 317, // Gaelic
- 324, // Galician
- 333, // Georgian
- 342, // German
- 349, // Greek
- 355, // Greenlandic
- 367, // Guarani
- 375, // Gujarati
- 384, // Hausa
- 390, // Hebrew
- 397, // Hindi
- 403, // Hungarian
- 413, // Icelandic
- 423, // Indonesian
- 434, // Interlingua
- 446, // Interlingue
- 458, // Inuktitut
- 468, // Inupiak
- 476, // Irish
- 482, // Italian
- 490, // Japanese
- 499, // Javanese
- 508, // Kannada
- 516, // Kashmiri
- 525, // Kazakh
- 532, // Kinyarwanda
- 544, // Kirghiz
- 552, // Korean
- 559, // Kurdish
- 567, // Rundi
- 573, // Lao
- 577, // Latin
- 583, // Latvian
- 591, // Lingala
- 599, // Lithuanian
- 610, // Macedonian
- 621, // Malagasy
- 630, // Malay
- 636, // Malayalam
- 646, // Maltese
- 654, // Maori
- 660, // Marathi
- 668, // Marshallese
- 680, // Mongolian
- 690, // Nauru
- 696, // Nepali
- 703, // Norwegian Bokmal
- 720, // Occitan
- 728, // Oriya
- 734, // Pashto
- 741, // Persian
- 749, // Polish
- 756, // Portuguese
- 767, // Punjabi
- 775, // Quechua
- 783, // Romansh
- 791, // Romanian
- 800, // Russian
- 808, // Samoan
- 815, // Sango
- 821, // Sanskrit
- 830, // Serbian
- 838, // Ossetic
- 846, // Southern Sotho
- 861, // Tswana
- 868, // Shona
- 874, // Sindhi
- 881, // Sinhala
- 889, // Swati
- 895, // Slovak
- 902, // Slovenian
- 912, // Somali
- 919, // Spanish
- 927, // Sundanese
- 937, // Swahili
- 945, // Swedish
- 953, // Sardinian
- 963, // Tajik
- 969, // Tamil
- 975, // Tatar
- 981, // Telugu
- 988, // Thai
- 993, // Tibetan
- 1001, // Tigrinya
- 1010, // Tongan
- 1017, // Tsonga
- 1024, // Turkish
- 1032, // Turkmen
- 1040, // Tahitian
- 1049, // Uighur
- 1056, // Ukrainian
- 1066, // Urdu
- 1071, // Uzbek
- 1077, // Vietnamese
- 1088, // Volapuk
- 1096, // Welsh
- 1102, // Wolof
- 1108, // Xhosa
- 1114, // Yiddish
- 1122, // Yoruba
- 1129, // Zhuang
- 1136, // Zulu
- 1141, // Norwegian Nynorsk
- 1159, // Bosnian
- 1167, // Divehi
- 1174, // Manx
- 1179, // Cornish
- 1187, // Akan
- 1192, // Konkani
- 1200, // Ga
- 1203, // Igbo
- 1208, // Kamba
- 1214, // Syriac
- 1221, // Blin
- 1226, // Geez
- 1231, // Koro
- 1236, // Sidamo
- 1243, // Atsam
- 1249, // Tigre
- 1255, // Jju
- 1259, // Friulian
- 1268, // Venda
- 1274, // Ewe
- 1278, // Walamo
- 1285, // Hawaiian
- 1294, // Tyap
- 1299, // Nyanja
- 1306, // Filipino
- 1315, // Swiss German
- 1328, // Sichuan Yi
- 1339, // Kpelle
- 1346, // Low German
- 1357, // South Ndebele
- 1371, // Northern Sotho
- 1386, // Northern Sami
- 1400, // Taroko
- 1407, // Gusii
- 1413, // Taita
- 1419, // Fulah
- 1425, // Kikuyu
- 1432, // Samburu
- 1440, // Sena
- 1445, // North Ndebele
- 1459, // Rombo
- 1465, // Tachelhit
- 1475, // Kabyle
- 1482, // Nyankole
- 1491, // Bena
- 1496, // Vunjo
- 1502, // Bambara
- 1510, // Embu
- 1515, // Cherokee
- 1524, // Morisyen
- 1533, // Makonde
- 1541, // Langi
- 1547, // Ganda
- 1553, // Bemba
- 1559, // Kabuverdianu
- 1572, // Meru
- 1577, // Kalenjin
- 1586, // Nama
- 1591, // Machame
- 1599, // Colognian
- 1609, // Masai
- 1615, // Soga
- 1620, // Luyia
- 1626, // Asu
- 1630, // Teso
- 1635, // Saho
- 1640, // Koyra Chiini
- 1653, // Rwa
- 1657, // Luo
- 1661, // Chiga
- 1667, // Central Morocco Tamazight
- 1693, // Koyraboro Senni
- 1709, // Shambala
- 1718, // Bodo
- 1723, // Avaric
- 1730, // Chamorro
- 1739, // Chechen
- 1747, // Church
- 1754, // Chuvash
- 1762, // Cree
- 1767, // Haitian
- 1775, // Herero
- 1782, // Hiri Motu
- 1792, // Kanuri
- 1799, // Komi
- 1804, // Kongo
- 1810, // Kwanyama
- 1819, // Limburgish
- 1830, // Luba Katanga
- 1843, // Luxembourgish
- 1857, // Navaho
- 1864, // Ndonga
- 1871, // Ojibwa
- 1878, // Pali
- 1883, // Walloon
- 1891, // Aghem
- 1897, // Basaa
- 1903, // Zarma
- 1909, // Duala
- 1915, // Jola Fonyi
- 1926, // Ewondo
- 1933, // Bafia
- 1939, // Makhuwa Meetto
- 1954, // Mundang
- 1962, // Kwasio
- 1969, // Nuer
- 1974, // Sakha
- 1980, // Sangu
- 1986, // Congo Swahili
- 2000, // Tasawaq
- 2008, // Vai
- 2012, // Walser
- 2019, // Yangben
- 2027, // Avestan
- 2035, // Asturian
- 2044, // Ngomba
- 2051, // Kako
- 2056, // Meta
- 2061, // Ngiemboon
- 2071, // Aragonese
- 2081, // Akkadian
- 2090, // Ancient Egyptian
- 2107, // Ancient Greek
- 2121, // Aramaic
- 2129, // Balinese
- 2138, // Bamun
- 2144, // Batak Toba
- 2155, // Buginese
- 2164, // Buhid
- 2170, // Carian
- 2177, // Chakma
- 2184, // Classical Mandaic
- 2202, // Coptic
- 2209, // Dogri
- 2215, // Eastern Cham
- 2228, // Eastern Kayah
- 2242, // Etruscan
- 2251, // Gothic
- 2258, // Hanunoo
- 2266, // Ingush
- 2273, // Large Flowery Miao
- 2292, // Lepcha
- 2299, // Limbu
- 2305, // Lisu
- 2310, // Lu
- 2313, // Lycian
- 2320, // Lydian
- 2327, // Mandingo
- 2336, // Manipuri
- 2345, // Meroitic
- 2354, // Northern Thai
- 2368, // Old Irish
- 2378, // Old Norse
- 2388, // Old Persian
- 2400, // Old Turkish
- 2412, // Pahlavi
- 2420, // Parthian
- 2429, // Phoenician
- 2440, // Prakrit Language
- 2457, // Rejang
- 2464, // Sabaean
- 2472, // Samaritan
- 2482, // Santali
- 2490, // Saurashtra
- 2501, // Sora
- 2506, // Sylheti
- 2514, // Tagbanwa
- 2523, // Tai Dam
- 2531, // Tai Nua
- 2539, // Ugaritic
- 2548, // Akoose
- 2555, // Lakota
- 2562, // Standard Moroccan Tamazight
- 2590, // Mapuche
- 2598, // Central Kurdish
- 2614, // Lower Sorbian
- 2628, // Upper Sorbian
- 2642, // Kenyang
- 2650, // Mohawk
- 2657, // Nko
- 2661, // Prussian
- 2670, // Kiche
- 2676, // Southern Sami
- 2690, // Lule Sami
- 2700, // Inari Sami
- 2711, // Skolt Sami
- 2722, // Warlpiri
- 2731, // Manichaean Middle Persian
- 2757, // Mende
- 2763, // Ancient North Arabian
- 2785, // Linear A
- 2794, // Hmong Njua
- 2805, // Ho
- 2808, // Lezghian
- 2817, // Bassa
- 2823, // Mono
- 2828, // Tedim Chin
- 2839, // Maithili
- 2848, // Ahom
- 2853, // American Sign Language
- 2876, // Ardhamagadhi Prakrit
- 2897, // Bhojpuri
- 2906, // Hieroglyphic Luwian
- 2926, // Literary Chinese
- 2943, // Mazanderani
- 2955, // Mru
- 2959, // Newari
- 2966, // Northern Luri
- 2980, // Palauan
- 2988, // Papiamento
- 2999, // Saraiki
- 3007, // Tokelau
- 3015, // Tok Pisin
- 3025, // Tuvalu
- 3032, // Uncoded Languages
- 3050, // Cantonese
- 3060, // Osage
- 3066, // Tangut
- 3073, // Ido
- 3077, // Lojban
- 3084, // Sicilian
- 3093, // Southern Kurdish
- 3110, // Western Balochi
- 3126, // Cebuano
- 3134, // Erzya
- 3140, // Chickasaw
- 3150, // Muscogee
- 3159, // Silesian
+ 20, // Afar
+ 25, // Afrikaans
+ 35, // Aghem
+ 41, // Akan
+ 46, // Akkadian
+ 55, // Akoose
+ 62, // Albanian
+ 71, // American Sign Language
+ 94, // Amharic
+ 102, // Ancient Egyptian
+ 119, // Ancient Greek
+ 133, // Arabic
+ 140, // Aragonese
+ 150, // Aramaic
+ 158, // Armenian
+ 167, // Assamese
+ 176, // Asturian
+ 185, // Asu
+ 189, // Atsam
+ 195, // Avaric
+ 202, // Avestan
+ 210, // Aymara
+ 217, // Azerbaijani
+ 229, // Bafia
+ 235, // Balinese
+ 244, // Bambara
+ 252, // Bamun
+ 258, // Bangla
+ 265, // Basaa
+ 271, // Bashkir
+ 279, // Basque
+ 286, // Batak Toba
+ 297, // Belarusian
+ 308, // Bemba
+ 314, // Bena
+ 319, // Bhojpuri
+ 328, // Bislama
+ 336, // Blin
+ 341, // Bodo
+ 346, // Bosnian
+ 354, // Breton
+ 361, // Buginese
+ 370, // Bulgarian
+ 380, // Burmese
+ 388, // Cantonese
+ 398, // Catalan
+ 406, // Cebuano
+ 414, // Central Atlas Tamazight
+ 438, // Central Kurdish
+ 454, // Chakma
+ 461, // Chamorro
+ 470, // Chechen
+ 478, // Cherokee
+ 487, // Chickasaw
+ 497, // Chiga
+ 503, // Chinese
+ 511, // Church
+ 525, // Chuvash
+ 533, // Colognian
+ 543, // Coptic
+ 550, // Cornish
+ 558, // Corsican
+ 567, // Cree
+ 572, // Croatian
+ 581, // Czech
+ 587, // Danish
+ 594, // Divehi
+ 601, // Dogri
+ 607, // Duala
+ 613, // Dutch
+ 619, // Dzongkha
+ 628, // Embu
+ 633, // English
+ 641, // Erzya
+ 647, // Esperanto
+ 657, // Estonian
+ 666, // Ewe
+ 670, // Ewondo
+ 677, // Faroese
+ 685, // Fijian
+ 692, // Filipino
+ 701, // Finnish
+ 709, // French
+ 716, // Friulian
+ 725, // Fulah
+ 730, // Gaelic
+ 746, // Ga
+ 749, // Galician
+ 758, // Ganda
+ 764, // Geez
+ 769, // Georgian
+ 778, // German
+ 785, // Gothic
+ 792, // Greek
+ 798, // Guarani
+ 806, // Gujarati
+ 815, // Gusii
+ 821, // Haitian
+ 836, // Hausa
+ 842, // Hawaiian
+ 851, // Hebrew
+ 858, // Herero
+ 865, // Hindi
+ 871, // Hiri Motu
+ 881, // Hungarian
+ 891, // Icelandic
+ 901, // Ido
+ 905, // Igbo
+ 910, // Inari Sami
+ 921, // Indonesian
+ 932, // Ingush
+ 939, // Interlingua
+ 951, // Interlingue
+ 963, // Inuktitut
+ 973, // Inupiaq
+ 981, // Irish
+ 987, // Italian
+ 995, // Japanese
+ 1004, // Javanese
+ 1013, // Jju
+ 1017, // Jola-Fonyi
+ 1028, // Kabuverdianu
+ 1041, // Kabyle
+ 1048, // Kako
+ 1053, // Kalaallisut
+ 1065, // Kalenjin
+ 1074, // Kamba
+ 1080, // Kannada
+ 1088, // Kanuri
+ 1095, // Kashmiri
+ 1104, // Kazakh
+ 1111, // Kenyang
+ 1119, // Khmer
+ 1125, // Kiche
+ 1135, // Kikuyu
+ 1142, // Kinyarwanda
+ 1154, // Komi
+ 1159, // Kongo
+ 1165, // Konkani
+ 1173, // Korean
+ 1180, // Koro
+ 1185, // Koyraboro Senni
+ 1201, // Koyra Chiini
+ 1214, // Kpelle
+ 1221, // Kuanyama
+ 1230, // Kurdish
+ 1238, // Kwasio
+ 1245, // Kyrgyz
+ 1252, // Lakota
+ 1259, // Langi
+ 1265, // Lao
+ 1269, // Latin
+ 1275, // Latvian
+ 1283, // Lezghian
+ 1292, // Limburgish
+ 1303, // Lingala
+ 1311, // Literary Chinese
+ 1328, // Lithuanian
+ 1339, // Lojban
+ 1346, // Lower Sorbian
+ 1360, // Low German
+ 1371, // Luba-Katanga
+ 1384, // Lule Sami
+ 1394, // Luo
+ 1398, // Luxembourgish
+ 1412, // Luyia
+ 1418, // Macedonian
+ 1429, // Machame
+ 1437, // Maithili
+ 1446, // Makhuwa-Meetto
+ 1461, // Makonde
+ 1469, // Malagasy
+ 1478, // Malayalam
+ 1488, // Malay
+ 1494, // Maltese
+ 1502, // Mandingo
+ 1511, // Manipuri
+ 1520, // Manx
+ 1525, // Maori
+ 1532, // Mapuche
+ 1540, // Marathi
+ 1548, // Marshallese
+ 1560, // Masai
+ 1566, // Mazanderani
+ 1578, // Mende
+ 1584, // Meru
+ 1589, // Meta
+ 1596, // Mohawk
+ 1603, // Mongolian
+ 1613, // Morisyen
+ 1622, // Mundang
+ 1630, // Muscogee
+ 1639, // Nama
+ 1644, // Nauru
+ 1650, // Navajo
+ 1657, // Ndonga
+ 1664, // Nepali
+ 1671, // Newari
+ 1678, // Ngiemboon
+ 1688, // Ngomba
+ 1695, // Nigerian Pidgin
+ 1711, // Nko
+ 1718, // Northern Luri
+ 1732, // Northern Sami
+ 1746, // Northern Sotho
+ 1761, // North Ndebele
+ 1775, // Norwegian Bokmal
+ 1793, // Norwegian Nynorsk
+ 1811, // Nuer
+ 1816, // Nyanja
+ 1823, // Nyankole
+ 1832, // Occitan
+ 1840, // Odia
+ 1845, // Ojibwa
+ 1852, // Old Irish
+ 1862, // Old Norse
+ 1872, // Old Persian
+ 1884, // Oromo
+ 1890, // Osage
+ 1896, // Ossetic
+ 1904, // Pahlavi
+ 1912, // Palauan
+ 1920, // Pali
+ 1925, // Papiamento
+ 1936, // Pashto
+ 1943, // Persian
+ 1951, // Phoenician
+ 1962, // Polish
+ 1969, // Portuguese
+ 1980, // Prussian
+ 1989, // Punjabi
+ 1997, // Quechua
+ 2005, // Romanian
+ 2014, // Romansh
+ 2022, // Rombo
+ 2028, // Rundi
+ 2034, // Russian
+ 2042, // Rwa
+ 2046, // Saho
+ 2051, // Sakha
+ 2057, // Samburu
+ 2065, // Samoan
+ 2072, // Sango
+ 2078, // Sangu
+ 2084, // Sanskrit
+ 2093, // Santali
+ 2101, // Sardinian
+ 2111, // Saurashtra
+ 2122, // Sena
+ 2127, // Serbian
+ 2135, // Shambala
+ 2144, // Shona
+ 2150, // Sichuan Yi
+ 2161, // Sicilian
+ 2170, // Sidamo
+ 2177, // Silesian
+ 2186, // Sindhi
+ 2193, // Sinhala
+ 2201, // Skolt Sami
+ 2212, // Slovak
+ 2219, // Slovenian
+ 2229, // Soga
+ 2234, // Somali
+ 2241, // Southern Kurdish
+ 2258, // Southern Sami
+ 2272, // Southern Sotho
+ 2287, // South Ndebele
+ 2301, // Spanish
+ 2309, // Standard Moroccan Tamazight
+ 2337, // Sundanese
+ 2347, // Swahili
+ 2355, // Swati
+ 2361, // Swedish
+ 2369, // Swiss German
+ 2382, // Syriac
+ 2389, // Tachelhit
+ 2399, // Tahitian
+ 2408, // Tai Dam
+ 2416, // Taita
+ 2422, // Tajik
+ 2428, // Tamil
+ 2434, // Taroko
+ 2441, // Tasawaq
+ 2449, // Tatar
+ 2455, // Telugu
+ 2462, // Teso
+ 2467, // Thai
+ 2472, // Tibetan
+ 2480, // Tigre
+ 2486, // Tigrinya
+ 2495, // Tokelau
+ 2503, // Tok Pisin
+ 2513, // Tongan
+ 2520, // Tsonga
+ 2527, // Tswana
+ 2534, // Turkish
+ 2542, // Turkmen
+ 2550, // Tuvalu
+ 2557, // Tyap
+ 2562, // Ugaritic
+ 2571, // Ukrainian
+ 2581, // Upper Sorbian
+ 2595, // Urdu
+ 2600, // Uyghur
+ 2607, // Uzbek
+ 2613, // Vai
+ 2617, // Venda
+ 2623, // Vietnamese
+ 2634, // Volapuk
+ 2643, // Vunjo
+ 2649, // Walloon
+ 2657, // Walser
+ 2664, // Warlpiri
+ 2673, // Welsh
+ 2679, // Western Balochi
+ 2695, // Western Frisian
+ 2711, // Wolaytta
+ 2720, // Wolof
+ 2726, // Xhosa
+ 2732, // Yangben
+ 2740, // Yiddish
+ 2748, // Yoruba
+ 2755, // Zarma
+ 2761, // Zhuang
+ 2768, // Zulu
+ 2773, // Kaingang
+ 2782, // Nheengatu
+ 2792, // Haryanvi
+ 2801, // Northern Frisian
+ 2818, // Rajasthani
+ 2829, // Moksha
+ 2836, // Toki Pona
+ 2846, // Pijin
+ 2852, // Obolo
+ 2858, // Baluchi
+ 2866, // Ligurian
+ 2875, // Rohingya
+ 2884, // Torwali
+ 2892, // Anii
+ 2897, // Kangri
+ 2904, // Venetian
};
-static const char script_name_list[] =
+static constexpr char script_name_list[] =
"Default\0"
+"Adlam\0"
+"Ahom\0"
+"Anatolian Hieroglyphs\0"
"Arabic\0"
-"Cyrillic\0"
-"Deseret\0"
-"Gurmukhi\0"
-"Simplified Han\0"
-"Traditional Han\0"
-"Latin\0"
-"Mongolian\0"
-"Tifinagh\0"
"Armenian\0"
-"Bengali\0"
-"Cherokee\0"
-"Devanagari\0"
-"Ethiopic\0"
-"Georgian\0"
-"Greek\0"
-"Gujarati\0"
-"Hebrew\0"
-"Japanese\0"
-"Khmer\0"
-"Kannada\0"
-"Korean\0"
-"Lao\0"
-"Malayalam\0"
-"Myanmar\0"
-"Oriya\0"
-"Tamil\0"
-"Telugu\0"
-"Thaana\0"
-"Thai\0"
-"Tibetan\0"
-"Sinhala\0"
-"Syriac\0"
-"Yi\0"
-"Vai\0"
"Avestan\0"
"Balinese\0"
"Bamum\0"
+"Bangla\0"
+"Bassa Vah\0"
"Batak\0"
+"Bhaiksuki\0"
"Bopomofo\0"
"Brahmi\0"
+"Braille\0"
"Buginese\0"
"Buhid\0"
-"Canadian Aboriginal\0"
+"Unified Canadian Aboriginal Syllabics\0"
"Carian\0"
+"Caucasian Albanian\0"
"Chakma\0"
"Cham\0"
+"Cherokee\0"
"Coptic\0"
+"Sumero-Akkadian Cuneiform\0"
"Cypriot\0"
-"Egyptian Hieroglyphs\0"
+"Cyrillic\0"
+"Deseret\0"
+"Devanagari\0"
+"Duployan shorthand\0"
+"Egyptian hieroglyphs\0"
+"Elbasan\0"
+"Ethiopic\0"
"Fraser\0"
+"Georgian\0"
"Glagolitic\0"
"Gothic\0"
-"Han\0"
+"Grantha\0"
+"Greek\0"
+"Gujarati\0"
+"Gurmukhi\0"
"Hangul\0"
+"Han\0"
"Hanunoo\0"
+"Han with Bopomofo\0"
+"Hatran\0"
+"Hebrew\0"
+"Hiragana\0"
"Imperial Aramaic\0"
"Inscriptional Pahlavi\0"
"Inscriptional Parthian\0"
+"Jamo\0"
+"Japanese\0"
"Javanese\0"
"Kaithi\0"
+"Kannada\0"
"Katakana\0"
"Kayah Li\0"
"Kharoshthi\0"
+"Khmer\0"
+"Khojki\0"
+"Khudawadi\0"
+"Korean\0"
"Lanna\0"
+"Lao\0"
+"Latin\0"
"Lepcha\0"
"Limbu\0"
+"Linear A\0"
"Linear B\0"
"Lycian\0"
"Lydian\0"
+"Mahajani\0"
+"Malayalam\0"
"Mandaean\0"
+"Manichaean\0"
+"Marchen\0"
"Meitei Mayek\0"
-"Meroitic\0"
+"Mende\0"
"Meroitic Cursive\0"
-"Nko\0"
+"Meroitic\0"
+"Modi\0"
+"Mongolian\0"
+"Mro\0"
+"Multani\0"
+"Myanmar\0"
+"Nabataean\0"
+"Newa\0"
"New Tai Lue\0"
+"N’Ko\0"
+"Odia\0"
"Ogham\0"
"Ol Chiki\0"
+"Old Hungarian\0"
"Old Italic\0"
+"Old North Arabian\0"
+"Old Permic\0"
"Old Persian\0"
"Old South Arabian\0"
"Orkhon\0"
+"Osage\0"
"Osmanya\0"
-"Phags Pa\0"
+"Pahawh Hmong\0"
+"Palmyrene\0"
+"Pau Cin Hau\0"
+"Phags-pa\0"
"Phoenician\0"
"Pollard Phonetic\0"
+"Psalter Pahlavi\0"
"Rejang\0"
"Runic\0"
"Samaritan\0"
"Saurashtra\0"
"Sharada\0"
"Shavian\0"
+"Siddham\0"
+"SignWriting\0"
+"Simplified Han\0"
+"Sinhala\0"
"Sora Sompeng\0"
-"Cuneiform\0"
"Sundanese\0"
"Syloti Nagri\0"
+"Syriac\0"
"Tagalog\0"
"Tagbanwa\0"
"Tai Le\0"
"Tai Viet\0"
"Takri\0"
-"Ugaritic\0"
-"Braille\0"
-"Hiragana\0"
-"Caucasian Albanian\0"
-"Bassa Vah\0"
-"Duployan\0"
-"Elbasan\0"
-"Grantha\0"
-"Pahawh Hmong\0"
-"Khojki\0"
-"Linear A\0"
-"Mahajani\0"
-"Manichaean\0"
-"Mende Kikakui\0"
-"Modi\0"
-"Mro\0"
-"Old North Arabian\0"
-"Nabataean\0"
-"Palmyrene\0"
-"Pau Cin Hau\0"
-"Old Permic\0"
-"Psalter Pahlavi\0"
-"Siddham\0"
-"Khudawadi\0"
+"Tamil\0"
+"Tangut\0"
+"Telugu\0"
+"Thaana\0"
+"Thai\0"
+"Tibetan\0"
+"Tifinagh\0"
"Tirhuta\0"
+"Traditional Han\0"
+"Ugaritic\0"
+"Vai\0"
"Varang Kshiti\0"
-"Ahom\0"
-"Anatolian Hieroglyphs\0"
-"Hatran\0"
-"Multani\0"
-"Old Hungarian\0"
-"Sign Writing\0"
-"Adlam\0"
-"Bhaiksuki\0"
-"Marchen\0"
-"Newa\0"
-"Osage\0"
-"Tangut\0"
-"Han with Bopomofo\0"
-"Jamo\0"
+"Yi\0"
+"Hanifi Rohingya\0"
;
-static const quint16 script_name_index[] = {
+static constexpr quint16 script_name_index[] = {
0, // AnyScript
- 8, // Arabic
- 15, // Cyrillic
- 24, // Deseret
- 32, // Gurmukhi
- 41, // Simplified Han
- 56, // Traditional Han
- 72, // Latin
- 78, // Mongolian
- 88, // Tifinagh
- 97, // Armenian
- 106, // Bengali
- 114, // Cherokee
- 123, // Devanagari
- 134, // Ethiopic
- 143, // Georgian
- 152, // Greek
- 158, // Gujarati
- 167, // Hebrew
- 174, // Japanese
- 183, // Khmer
- 189, // Kannada
- 197, // Korean
- 204, // Lao
- 208, // Malayalam
- 218, // Myanmar
- 226, // Oriya
- 232, // Tamil
- 238, // Telugu
- 245, // Thaana
- 252, // Thai
- 257, // Tibetan
- 265, // Sinhala
- 273, // Syriac
- 280, // Yi
- 283, // Vai
- 287, // Avestan
- 295, // Balinese
- 304, // Bamum
- 310, // Batak
- 316, // Bopomofo
- 325, // Brahmi
- 332, // Buginese
- 341, // Buhid
- 347, // Canadian Aboriginal
- 367, // Carian
- 374, // Chakma
- 381, // Cham
- 386, // Coptic
- 393, // Cypriot
- 401, // Egyptian Hieroglyphs
- 422, // Fraser
- 429, // Glagolitic
- 440, // Gothic
- 447, // Han
- 451, // Hangul
- 458, // Hanunoo
- 466, // Imperial Aramaic
- 483, // Inscriptional Pahlavi
- 505, // Inscriptional Parthian
- 528, // Javanese
- 537, // Kaithi
- 544, // Katakana
- 553, // Kayah Li
- 562, // Kharoshthi
- 573, // Lanna
- 579, // Lepcha
- 586, // Limbu
- 592, // Linear B
- 601, // Lycian
- 608, // Lydian
- 615, // Mandaean
- 624, // Meitei Mayek
- 637, // Meroitic
- 646, // Meroitic Cursive
- 663, // Nko
- 667, // New Tai Lue
- 679, // Ogham
- 685, // Ol Chiki
- 694, // Old Italic
- 705, // Old Persian
- 717, // Old South Arabian
- 735, // Orkhon
- 742, // Osmanya
- 750, // Phags Pa
- 759, // Phoenician
- 770, // Pollard Phonetic
- 787, // Rejang
- 794, // Runic
- 800, // Samaritan
- 810, // Saurashtra
- 821, // Sharada
- 829, // Shavian
- 837, // Sora Sompeng
- 850, // Cuneiform
- 860, // Sundanese
- 870, // Syloti Nagri
- 883, // Tagalog
- 891, // Tagbanwa
- 900, // Tai Le
- 907, // Tai Viet
- 916, // Takri
- 922, // Ugaritic
- 931, // Braille
- 939, // Hiragana
- 948, // Caucasian Albanian
- 967, // Bassa Vah
- 977, // Duployan
- 986, // Elbasan
- 994, // Grantha
- 1002, // Pahawh Hmong
- 1015, // Khojki
- 1022, // Linear A
- 1031, // Mahajani
- 1040, // Manichaean
- 1051, // Mende Kikakui
- 1065, // Modi
- 1070, // Mro
- 1074, // Old North Arabian
- 1092, // Nabataean
- 1102, // Palmyrene
- 1112, // Pau Cin Hau
- 1124, // Old Permic
- 1135, // Psalter Pahlavi
- 1151, // Siddham
- 1159, // Khudawadi
- 1169, // Tirhuta
- 1177, // Varang Kshiti
- 1191, // Ahom
- 1196, // Anatolian Hieroglyphs
- 1218, // Hatran
- 1225, // Multani
- 1233, // Old Hungarian
- 1247, // Sign Writing
- 1260, // Adlam
- 1266, // Bhaiksuki
- 1276, // Marchen
- 1284, // Newa
- 1289, // Osage
- 1295, // Tangut
- 1302, // Han with Bopomofo
- 1320, // Jamo
+ 8, // Adlam
+ 14, // Ahom
+ 19, // Anatolian Hieroglyphs
+ 41, // Arabic
+ 48, // Armenian
+ 57, // Avestan
+ 65, // Balinese
+ 74, // Bamum
+ 80, // Bangla
+ 87, // Bassa Vah
+ 97, // Batak
+ 103, // Bhaiksuki
+ 113, // Bopomofo
+ 122, // Brahmi
+ 129, // Braille
+ 137, // Buginese
+ 146, // Buhid
+ 152, // Canadian Aboriginal
+ 190, // Carian
+ 197, // Caucasian Albanian
+ 216, // Chakma
+ 223, // Cham
+ 228, // Cherokee
+ 237, // Coptic
+ 244, // Cuneiform
+ 270, // Cypriot
+ 278, // Cyrillic
+ 287, // Deseret
+ 295, // Devanagari
+ 306, // Duployan
+ 325, // Egyptian hieroglyphs
+ 346, // Elbasan
+ 354, // Ethiopic
+ 363, // Fraser
+ 370, // Georgian
+ 379, // Glagolitic
+ 390, // Gothic
+ 397, // Grantha
+ 405, // Greek
+ 411, // Gujarati
+ 420, // Gurmukhi
+ 429, // Hangul
+ 436, // Han
+ 440, // Hanunoo
+ 448, // Han with Bopomofo
+ 466, // Hatran
+ 473, // Hebrew
+ 480, // Hiragana
+ 489, // Imperial Aramaic
+ 506, // Inscriptional Pahlavi
+ 528, // Inscriptional Parthian
+ 551, // Jamo
+ 556, // Japanese
+ 565, // Javanese
+ 574, // Kaithi
+ 581, // Kannada
+ 589, // Katakana
+ 598, // Kayah Li
+ 607, // Kharoshthi
+ 618, // Khmer
+ 624, // Khojki
+ 631, // Khudawadi
+ 641, // Korean
+ 648, // Lanna
+ 654, // Lao
+ 658, // Latin
+ 664, // Lepcha
+ 671, // Limbu
+ 677, // Linear A
+ 686, // Linear B
+ 695, // Lycian
+ 702, // Lydian
+ 709, // Mahajani
+ 718, // Malayalam
+ 728, // Mandaean
+ 737, // Manichaean
+ 748, // Marchen
+ 756, // Meitei Mayek
+ 769, // Mende
+ 775, // Meroitic Cursive
+ 792, // Meroitic
+ 801, // Modi
+ 806, // Mongolian
+ 816, // Mro
+ 820, // Multani
+ 828, // Myanmar
+ 836, // Nabataean
+ 846, // Newa
+ 851, // New Tai Lue
+ 863, // Nko
+ 870, // Odia
+ 875, // Ogham
+ 881, // Ol Chiki
+ 890, // Old Hungarian
+ 904, // Old Italic
+ 915, // Old North Arabian
+ 933, // Old Permic
+ 944, // Old Persian
+ 956, // Old South Arabian
+ 974, // Orkhon
+ 981, // Osage
+ 987, // Osmanya
+ 995, // Pahawh Hmong
+ 1008, // Palmyrene
+ 1018, // Pau Cin Hau
+ 1030, // Phags-pa
+ 1039, // Phoenician
+ 1050, // Pollard Phonetic
+ 1067, // Psalter Pahlavi
+ 1083, // Rejang
+ 1090, // Runic
+ 1096, // Samaritan
+ 1106, // Saurashtra
+ 1117, // Sharada
+ 1125, // Shavian
+ 1133, // Siddham
+ 1141, // SignWriting
+ 1153, // Simplified Han
+ 1168, // Sinhala
+ 1176, // Sora Sompeng
+ 1189, // Sundanese
+ 1199, // Syloti Nagri
+ 1212, // Syriac
+ 1219, // Tagalog
+ 1227, // Tagbanwa
+ 1236, // Tai Le
+ 1243, // Tai Viet
+ 1252, // Takri
+ 1258, // Tamil
+ 1264, // Tangut
+ 1271, // Telugu
+ 1278, // Thaana
+ 1285, // Thai
+ 1290, // Tibetan
+ 1298, // Tifinagh
+ 1307, // Tirhuta
+ 1315, // Traditional Han
+ 1331, // Ugaritic
+ 1340, // Vai
+ 1344, // Varang Kshiti
+ 1358, // Yi
+ 1361, // Hanifi
};
-static const char country_name_list[] =
+static constexpr char territory_name_list[] =
"Default\0"
"Afghanistan\0"
+"Åland Islands\0"
"Albania\0"
"Algeria\0"
"American Samoa\0"
@@ -5500,10 +7190,11 @@ static const char country_name_list[] =
"Angola\0"
"Anguilla\0"
"Antarctica\0"
-"Antigua And Barbuda\0"
+"Antigua & Barbuda\0"
"Argentina\0"
"Armenia\0"
"Aruba\0"
+"Ascension Island\0"
"Australia\0"
"Austria\0"
"Azerbaijan\0"
@@ -5518,11 +7209,12 @@ static const char country_name_list[] =
"Bermuda\0"
"Bhutan\0"
"Bolivia\0"
-"Bosnia And Herzegowina\0"
+"Bosnia & Herzegovina\0"
"Botswana\0"
"Bouvet Island\0"
"Brazil\0"
"British Indian Ocean Territory\0"
+"British Virgin Islands\0"
"Brunei\0"
"Bulgaria\0"
"Burkina Faso\0"
@@ -5530,43 +7222,49 @@ static const char country_name_list[] =
"Cambodia\0"
"Cameroon\0"
"Canada\0"
+"Canary Islands\0"
"Cape Verde\0"
+"Caribbean Netherlands\0"
"Cayman Islands\0"
"Central African Republic\0"
+"Ceuta & Melilla\0"
"Chad\0"
"Chile\0"
"China\0"
"Christmas Island\0"
-"Cocos Islands\0"
+"Clipperton Island\0"
+"Cocos (Keeling) Islands\0"
"Colombia\0"
"Comoros\0"
-"Congo Kinshasa\0"
-"Congo Brazzaville\0"
+"Congo - Brazzaville\0"
+"Congo - Kinshasa\0"
"Cook Islands\0"
"Costa Rica\0"
-"Ivory Coast\0"
"Croatia\0"
"Cuba\0"
+"Curaçao\0"
"Cyprus\0"
-"Czech Republic\0"
+"Czechia\0"
"Denmark\0"
+"Diego Garcia\0"
"Djibouti\0"
"Dominica\0"
"Dominican Republic\0"
-"East Timor\0"
"Ecuador\0"
"Egypt\0"
"El Salvador\0"
"Equatorial Guinea\0"
"Eritrea\0"
"Estonia\0"
+"Eswatini\0"
"Ethiopia\0"
+"Europe\0"
+"European Union\0"
"Falkland Islands\0"
"Faroe Islands\0"
"Fiji\0"
"Finland\0"
"France\0"
-"Guernsey\0"
"French Guiana\0"
"French Polynesia\0"
"French Southern Territories\0"
@@ -5582,13 +7280,14 @@ static const char country_name_list[] =
"Guadeloupe\0"
"Guam\0"
"Guatemala\0"
+"Guernsey\0"
+"Guinea-Bissau\0"
"Guinea\0"
-"Guinea Bissau\0"
"Guyana\0"
"Haiti\0"
-"Heard And McDonald Islands\0"
+"Heard & McDonald Islands\0"
"Honduras\0"
-"Hong Kong\0"
+"Hong Kong SAR China\0"
"Hungary\0"
"Iceland\0"
"India\0"
@@ -5596,19 +7295,22 @@ static const char country_name_list[] =
"Iran\0"
"Iraq\0"
"Ireland\0"
+"Isle of Man\0"
"Israel\0"
"Italy\0"
+"Côte d’Ivoire\0" // Ivory Coast
"Jamaica\0"
"Japan\0"
+"Jersey\0"
"Jordan\0"
"Kazakhstan\0"
"Kenya\0"
"Kiribati\0"
-"North Korea\0"
-"South Korea\0"
+"Kosovo\0"
"Kuwait\0"
"Kyrgyzstan\0"
"Laos\0"
+"Latin America\0"
"Latvia\0"
"Lebanon\0"
"Lesotho\0"
@@ -5617,8 +7319,8 @@ static const char country_name_list[] =
"Liechtenstein\0"
"Lithuania\0"
"Luxembourg\0"
-"Macau\0"
-"Macedonia\0"
+"Macao SAR China\0"
+"North Macedonia\0"
"Madagascar\0"
"Malawi\0"
"Malaysia\0"
@@ -5635,25 +7337,27 @@ static const char country_name_list[] =
"Moldova\0"
"Monaco\0"
"Mongolia\0"
+"Montenegro\0"
"Montserrat\0"
"Morocco\0"
"Mozambique\0"
-"Myanmar\0"
+"Myanmar (Burma)\0"
"Namibia\0"
"Nauru\0"
"Nepal\0"
"Netherlands\0"
-"Cura Sao\0"
"New Caledonia\0"
"New Zealand\0"
"Nicaragua\0"
-"Niger\0"
"Nigeria\0"
+"Niger\0"
"Niue\0"
"Norfolk Island\0"
"Northern Mariana Islands\0"
+"North Korea\0"
"Norway\0"
"Oman\0"
+"Outlying Oceania\0"
"Pakistan\0"
"Palau\0"
"Palestinian Territories\0"
@@ -5662,40 +7366,45 @@ static const char country_name_list[] =
"Paraguay\0"
"Peru\0"
"Philippines\0"
-"Pitcairn\0"
+"Pitcairn Islands\0"
"Poland\0"
"Portugal\0"
"Puerto Rico\0"
"Qatar\0"
-"Reunion\0"
+"Réunion\0"
"Romania\0"
"Russia\0"
"Rwanda\0"
-"Saint Kitts And Nevis\0"
-"Saint Lucia\0"
-"Saint Vincent And The Grenadines\0"
+"St. Barthélemy\0"
+"St. Helena\0"
+"St. Kitts & Nevis\0"
+"St. Lucia\0"
+"St. Martin\0"
+"St. Pierre & Miquelon\0"
+"St. Vincent & Grenadines\0"
"Samoa\0"
"San Marino\0"
-"Sao Tome And Principe\0"
+"São Tomé & Príncipe\0"
"Saudi Arabia\0"
"Senegal\0"
+"Serbia\0"
"Seychelles\0"
"Sierra Leone\0"
"Singapore\0"
+"Sint Maarten\0"
"Slovakia\0"
"Slovenia\0"
"Solomon Islands\0"
"Somalia\0"
"South Africa\0"
-"South Georgia And The South Sandwich Islands\0"
+"South Georgia & South Sandwich Islands\0"
+"South Korea\0"
+"South Sudan\0"
"Spain\0"
"Sri Lanka\0"
-"Saint Helena\0"
-"Saint Pierre And Miquelon\0"
"Sudan\0"
"Suriname\0"
-"Svalbard And Jan Mayen Islands\0"
-"Swaziland\0"
+"Svalbard & Jan Mayen\0"
"Sweden\0"
"Switzerland\0"
"Syria\0"
@@ -5703,844 +7412,800 @@ static const char country_name_list[] =
"Tajikistan\0"
"Tanzania\0"
"Thailand\0"
+"Timor-Leste\0"
"Togo\0"
"Tokelau\0"
"Tonga\0"
-"Trinidad And Tobago\0"
+"Trinidad & Tobago\0"
+"Tristan da Cunha\0"
"Tunisia\0"
-"Turkey\0"
+"Türkiye\0" // Turkey
"Turkmenistan\0"
-"Turks And Caicos Islands\0"
+"Turks & Caicos Islands\0"
"Tuvalu\0"
"Uganda\0"
"Ukraine\0"
"United Arab Emirates\0"
"United Kingdom\0"
+"U.S. Outlying Islands\0"
"United States\0"
-"United States Minor Outlying Islands\0"
+"U.S. Virgin Islands\0"
"Uruguay\0"
"Uzbekistan\0"
"Vanuatu\0"
-"Vatican City State\0"
+"Vatican City\0"
"Venezuela\0"
"Vietnam\0"
-"British Virgin Islands\0"
-"United States Virgin Islands\0"
-"Wallis And Futuna Islands\0"
+"Wallis & Futuna\0"
"Western Sahara\0"
+"world\0"
"Yemen\0"
-"Canary Islands\0"
"Zambia\0"
"Zimbabwe\0"
-"Clipperton Island\0"
-"Montenegro\0"
-"Serbia\0"
-"Saint Barthelemy\0"
-"Saint Martin\0"
-"Latin America\0"
-"Ascension Island\0"
-"Aland Islands\0"
-"Diego Garcia\0"
-"Ceuta And Melilla\0"
-"Isle Of Man\0"
-"Jersey\0"
-"Tristan Da Cunha\0"
-"South Sudan\0"
-"Bonaire\0"
-"Sint Maarten\0"
-"Kosovo\0"
-"European Union\0"
-"Outlying Oceania\0"
-"World\0"
-"Europe\0"
;
-static const quint16 country_name_index[] = {
- 0, // AnyCountry
+static constexpr quint16 territory_name_index[] = {
+ 0, // AnyTerritory
8, // Afghanistan
- 20, // Albania
- 28, // Algeria
- 36, // American Samoa
- 51, // Andorra
- 59, // Angola
- 66, // Anguilla
- 75, // Antarctica
- 86, // Antigua And Barbuda
- 106, // Argentina
- 116, // Armenia
- 124, // Aruba
- 130, // Australia
- 140, // Austria
- 148, // Azerbaijan
- 159, // Bahamas
- 167, // Bahrain
- 175, // Bangladesh
- 186, // Barbados
- 195, // Belarus
- 203, // Belgium
- 211, // Belize
- 218, // Benin
- 224, // Bermuda
- 232, // Bhutan
- 239, // Bolivia
- 247, // Bosnia And Herzegowina
- 270, // Botswana
- 279, // Bouvet Island
- 293, // Brazil
- 300, // British Indian Ocean Territory
- 331, // Brunei
- 338, // Bulgaria
- 347, // Burkina Faso
- 360, // Burundi
- 368, // Cambodia
- 377, // Cameroon
- 386, // Canada
- 393, // Cape Verde
- 404, // Cayman Islands
- 419, // Central African Republic
- 444, // Chad
- 449, // Chile
- 455, // China
- 461, // Christmas Island
- 478, // Cocos Islands
- 492, // Colombia
- 501, // Comoros
- 509, // Congo Kinshasa
- 524, // Congo Brazzaville
- 542, // Cook Islands
- 555, // Costa Rica
- 566, // Ivory Coast
- 578, // Croatia
- 586, // Cuba
- 591, // Cyprus
- 598, // Czech Republic
- 613, // Denmark
- 621, // Djibouti
- 630, // Dominica
- 639, // Dominican Republic
- 658, // East Timor
- 669, // Ecuador
- 677, // Egypt
- 683, // El Salvador
- 695, // Equatorial Guinea
- 713, // Eritrea
- 721, // Estonia
- 729, // Ethiopia
- 738, // Falkland Islands
- 755, // Faroe Islands
- 769, // Fiji
- 774, // Finland
- 782, // France
- 789, // Guernsey
- 798, // French Guiana
- 812, // French Polynesia
- 829, // French Southern Territories
- 857, // Gabon
- 863, // Gambia
- 870, // Georgia
- 878, // Germany
- 886, // Ghana
- 892, // Gibraltar
- 902, // Greece
- 909, // Greenland
- 919, // Grenada
- 927, // Guadeloupe
- 938, // Guam
- 943, // Guatemala
- 953, // Guinea
- 960, // Guinea Bissau
- 974, // Guyana
- 981, // Haiti
- 987, // Heard And McDonald Islands
- 1014, // Honduras
- 1023, // Hong Kong
- 1033, // Hungary
- 1041, // Iceland
- 1049, // India
- 1055, // Indonesia
- 1065, // Iran
- 1070, // Iraq
- 1075, // Ireland
- 1083, // Israel
- 1090, // Italy
- 1096, // Jamaica
- 1104, // Japan
- 1110, // Jordan
- 1117, // Kazakhstan
- 1128, // Kenya
- 1134, // Kiribati
- 1143, // North Korea
- 1155, // South Korea
- 1167, // Kuwait
- 1174, // Kyrgyzstan
- 1185, // Laos
- 1190, // Latvia
- 1197, // Lebanon
- 1205, // Lesotho
- 1213, // Liberia
- 1221, // Libya
- 1227, // Liechtenstein
- 1241, // Lithuania
- 1251, // Luxembourg
- 1262, // Macau
- 1268, // Macedonia
- 1278, // Madagascar
- 1289, // Malawi
- 1296, // Malaysia
- 1305, // Maldives
- 1314, // Mali
- 1319, // Malta
- 1325, // Marshall Islands
- 1342, // Martinique
- 1353, // Mauritania
- 1364, // Mauritius
- 1374, // Mayotte
- 1382, // Mexico
- 1389, // Micronesia
- 1400, // Moldova
- 1408, // Monaco
- 1415, // Mongolia
- 1424, // Montserrat
- 1435, // Morocco
- 1443, // Mozambique
- 1454, // Myanmar
- 1462, // Namibia
- 1470, // Nauru
- 1476, // Nepal
- 1482, // Netherlands
- 1494, // Cura Sao
- 1503, // New Caledonia
- 1517, // New Zealand
- 1529, // Nicaragua
- 1539, // Niger
- 1545, // Nigeria
- 1553, // Niue
- 1558, // Norfolk Island
- 1573, // Northern Mariana Islands
- 1598, // Norway
- 1605, // Oman
- 1610, // Pakistan
- 1619, // Palau
- 1625, // Palestinian Territories
- 1649, // Panama
- 1656, // Papua New Guinea
- 1673, // Paraguay
- 1682, // Peru
- 1687, // Philippines
- 1699, // Pitcairn
- 1708, // Poland
- 1715, // Portugal
- 1724, // Puerto Rico
- 1736, // Qatar
- 1742, // Reunion
- 1750, // Romania
- 1758, // Russia
- 1765, // Rwanda
- 1772, // Saint Kitts And Nevis
- 1794, // Saint Lucia
- 1806, // Saint Vincent And The Grenadines
- 1839, // Samoa
- 1845, // San Marino
- 1856, // Sao Tome And Principe
- 1878, // Saudi Arabia
- 1891, // Senegal
- 1899, // Seychelles
- 1910, // Sierra Leone
- 1923, // Singapore
- 1933, // Slovakia
- 1942, // Slovenia
- 1951, // Solomon Islands
- 1967, // Somalia
- 1975, // South Africa
- 1988, // South Georgia And The South Sandwich Islands
- 2033, // Spain
- 2039, // Sri Lanka
- 2049, // Saint Helena
- 2062, // Saint Pierre And Miquelon
- 2088, // Sudan
- 2094, // Suriname
- 2103, // Svalbard And Jan Mayen Islands
- 2134, // Swaziland
- 2144, // Sweden
- 2151, // Switzerland
- 2163, // Syria
- 2169, // Taiwan
- 2176, // Tajikistan
- 2187, // Tanzania
- 2196, // Thailand
- 2205, // Togo
- 2210, // Tokelau
- 2218, // Tonga
- 2224, // Trinidad And Tobago
- 2244, // Tunisia
- 2252, // Turkey
- 2259, // Turkmenistan
- 2272, // Turks And Caicos Islands
- 2297, // Tuvalu
- 2304, // Uganda
- 2311, // Ukraine
- 2319, // United Arab Emirates
- 2340, // United Kingdom
- 2355, // United States
- 2369, // United States Minor Outlying Islands
- 2406, // Uruguay
- 2414, // Uzbekistan
- 2425, // Vanuatu
- 2433, // Vatican City State
- 2452, // Venezuela
- 2462, // Vietnam
- 2470, // British Virgin Islands
- 2493, // United States Virgin Islands
- 2522, // Wallis And Futuna Islands
- 2548, // Western Sahara
- 2563, // Yemen
- 2569, // Canary Islands
- 2584, // Zambia
- 2591, // Zimbabwe
- 2600, // Clipperton Island
- 2618, // Montenegro
- 2629, // Serbia
- 2636, // Saint Barthelemy
- 2653, // Saint Martin
- 2666, // Latin America
- 2680, // Ascension Island
- 2697, // Aland Islands
- 2711, // Diego Garcia
- 2724, // Ceuta And Melilla
- 2742, // Isle Of Man
- 2754, // Jersey
- 2761, // Tristan Da Cunha
- 2778, // South Sudan
- 2790, // Bonaire
- 2798, // Sint Maarten
- 2811, // Kosovo
- 2818, // European Union
- 2833, // Outlying Oceania
- 2850, // World
- 2856, // Europe
+ 20, // Aland Islands
+ 35, // Albania
+ 43, // Algeria
+ 51, // American Samoa
+ 66, // Andorra
+ 74, // Angola
+ 81, // Anguilla
+ 90, // Antarctica
+ 101, // Antigua and Barbuda
+ 119, // Argentina
+ 129, // Armenia
+ 137, // Aruba
+ 143, // Ascension Island
+ 160, // Australia
+ 170, // Austria
+ 178, // Azerbaijan
+ 189, // Bahamas
+ 197, // Bahrain
+ 205, // Bangladesh
+ 216, // Barbados
+ 225, // Belarus
+ 233, // Belgium
+ 241, // Belize
+ 248, // Benin
+ 254, // Bermuda
+ 262, // Bhutan
+ 269, // Bolivia
+ 277, // Bosnia and Herzegovina
+ 298, // Botswana
+ 307, // Bouvet Island
+ 321, // Brazil
+ 328, // British Indian Ocean Territory
+ 359, // British Virgin Islands
+ 382, // Brunei
+ 389, // Bulgaria
+ 398, // Burkina Faso
+ 411, // Burundi
+ 419, // Cambodia
+ 428, // Cameroon
+ 437, // Canada
+ 444, // Canary Islands
+ 459, // Cape Verde
+ 470, // Caribbean Netherlands
+ 492, // Cayman Islands
+ 507, // Central African Republic
+ 532, // Ceuta and Melilla
+ 548, // Chad
+ 553, // Chile
+ 559, // China
+ 565, // Christmas Island
+ 582, // Clipperton Island
+ 600, // Cocos Islands
+ 624, // Colombia
+ 633, // Comoros
+ 641, // Congo - Brazzaville
+ 661, // Congo - Kinshasa
+ 678, // Cook Islands
+ 691, // Costa Rica
+ 702, // Croatia
+ 710, // Cuba
+ 715, // Curacao
+ 724, // Cyprus
+ 731, // Czechia
+ 739, // Denmark
+ 747, // Diego Garcia
+ 760, // Djibouti
+ 769, // Dominica
+ 778, // Dominican Republic
+ 797, // Ecuador
+ 805, // Egypt
+ 811, // El Salvador
+ 823, // Equatorial Guinea
+ 841, // Eritrea
+ 849, // Estonia
+ 857, // Eswatini
+ 866, // Ethiopia
+ 875, // Europe
+ 882, // European Union
+ 897, // Falkland Islands
+ 914, // Faroe Islands
+ 928, // Fiji
+ 933, // Finland
+ 941, // France
+ 948, // French Guiana
+ 962, // French Polynesia
+ 979, // French Southern Territories
+ 1007, // Gabon
+ 1013, // Gambia
+ 1020, // Georgia
+ 1028, // Germany
+ 1036, // Ghana
+ 1042, // Gibraltar
+ 1052, // Greece
+ 1059, // Greenland
+ 1069, // Grenada
+ 1077, // Guadeloupe
+ 1088, // Guam
+ 1093, // Guatemala
+ 1103, // Guernsey
+ 1112, // Guinea-Bissau
+ 1126, // Guinea
+ 1133, // Guyana
+ 1140, // Haiti
+ 1146, // Heard and McDonald Islands
+ 1171, // Honduras
+ 1180, // Hong Kong
+ 1200, // Hungary
+ 1208, // Iceland
+ 1216, // India
+ 1222, // Indonesia
+ 1232, // Iran
+ 1237, // Iraq
+ 1242, // Ireland
+ 1250, // Isle of Man
+ 1262, // Israel
+ 1269, // Italy
+ 1275, // Ivory Coast
+ 1292, // Jamaica
+ 1300, // Japan
+ 1306, // Jersey
+ 1313, // Jordan
+ 1320, // Kazakhstan
+ 1331, // Kenya
+ 1337, // Kiribati
+ 1346, // Kosovo
+ 1353, // Kuwait
+ 1360, // Kyrgyzstan
+ 1371, // Laos
+ 1376, // Latin America
+ 1390, // Latvia
+ 1397, // Lebanon
+ 1405, // Lesotho
+ 1413, // Liberia
+ 1421, // Libya
+ 1427, // Liechtenstein
+ 1441, // Lithuania
+ 1451, // Luxembourg
+ 1462, // Macao
+ 1478, // Macedonia
+ 1494, // Madagascar
+ 1505, // Malawi
+ 1512, // Malaysia
+ 1521, // Maldives
+ 1530, // Mali
+ 1535, // Malta
+ 1541, // Marshall Islands
+ 1558, // Martinique
+ 1569, // Mauritania
+ 1580, // Mauritius
+ 1590, // Mayotte
+ 1598, // Mexico
+ 1605, // Micronesia
+ 1616, // Moldova
+ 1624, // Monaco
+ 1631, // Mongolia
+ 1640, // Montenegro
+ 1651, // Montserrat
+ 1662, // Morocco
+ 1670, // Mozambique
+ 1681, // Myanmar
+ 1697, // Namibia
+ 1705, // Nauru
+ 1711, // Nepal
+ 1717, // Netherlands
+ 1729, // New Caledonia
+ 1743, // New Zealand
+ 1755, // Nicaragua
+ 1765, // Nigeria
+ 1773, // Niger
+ 1779, // Niue
+ 1784, // Norfolk Island
+ 1799, // Northern Mariana Islands
+ 1824, // North Korea
+ 1836, // Norway
+ 1843, // Oman
+ 1848, // Outlying Oceania
+ 1865, // Pakistan
+ 1874, // Palau
+ 1880, // Palestinian Territories
+ 1904, // Panama
+ 1911, // Papua New Guinea
+ 1928, // Paraguay
+ 1937, // Peru
+ 1942, // Philippines
+ 1954, // Pitcairn
+ 1971, // Poland
+ 1978, // Portugal
+ 1987, // Puerto Rico
+ 1999, // Qatar
+ 2005, // Reunion
+ 2014, // Romania
+ 2022, // Russia
+ 2029, // Rwanda
+ 2036, // Saint Barthelemy
+ 2052, // Saint Helena
+ 2063, // Saint Kitts and Nevis
+ 2081, // Saint Lucia
+ 2091, // Saint Martin
+ 2102, // Saint Pierre and Miquelon
+ 2124, // Saint Vincent and Grenadines
+ 2149, // Samoa
+ 2155, // San Marino
+ 2166, // Sao Tome and Principe
+ 2189, // Saudi Arabia
+ 2202, // Senegal
+ 2210, // Serbia
+ 2217, // Seychelles
+ 2228, // Sierra Leone
+ 2241, // Singapore
+ 2251, // Sint Maarten
+ 2264, // Slovakia
+ 2273, // Slovenia
+ 2282, // Solomon Islands
+ 2298, // Somalia
+ 2306, // South Africa
+ 2319, // South Georgia and South Sandwich Islands
+ 2358, // South Korea
+ 2370, // South Sudan
+ 2382, // Spain
+ 2388, // Sri Lanka
+ 2398, // Sudan
+ 2404, // Suriname
+ 2413, // Svalbard and Jan Mayen
+ 2434, // Sweden
+ 2441, // Switzerland
+ 2453, // Syria
+ 2459, // Taiwan
+ 2466, // Tajikistan
+ 2477, // Tanzania
+ 2486, // Thailand
+ 2495, // Timor-Leste
+ 2507, // Togo
+ 2512, // Tokelau
+ 2520, // Tonga
+ 2526, // Trinidad and Tobago
+ 2544, // Tristan da Cunha
+ 2561, // Tunisia
+ 2569, // Turkey
+ 2578, // Turkmenistan
+ 2591, // Turks and Caicos Islands
+ 2614, // Tuvalu
+ 2621, // Uganda
+ 2628, // Ukraine
+ 2636, // United Arab Emirates
+ 2657, // United Kingdom
+ 2672, // United States Outlying Islands
+ 2694, // United States
+ 2708, // United States Virgin Islands
+ 2728, // Uruguay
+ 2736, // Uzbekistan
+ 2747, // Vanuatu
+ 2755, // Vatican City
+ 2768, // Venezuela
+ 2778, // Vietnam
+ 2786, // Wallis and Futuna
+ 2802, // Western Sahara
+ 2817, // world
+ 2823, // Yemen
+ 2829, // Zambia
+ 2836, // Zimbabwe
};
-static const unsigned char language_code_list[] =
-" \0" // AnyLanguage
-" \0" // C
-"ab\0" // Abkhazian
-"om\0" // Oromo
-"aa\0" // Afar
-"af\0" // Afrikaans
-"sq\0" // Albanian
-"am\0" // Amharic
-"ar\0" // Arabic
-"hy\0" // Armenian
-"as\0" // Assamese
-"ay\0" // Aymara
-"az\0" // Azerbaijani
-"ba\0" // Bashkir
-"eu\0" // Basque
-"bn\0" // Bengali
-"dz\0" // Dzongkha
-"bh\0" // Bihari
-"bi\0" // Bislama
-"br\0" // Breton
-"bg\0" // Bulgarian
-"my\0" // Burmese
-"be\0" // Belarusian
-"km\0" // Khmer
-"ca\0" // Catalan
-"zh\0" // Chinese
-"co\0" // Corsican
-"hr\0" // Croatian
-"cs\0" // Czech
-"da\0" // Danish
-"nl\0" // Dutch
-"en\0" // English
-"eo\0" // Esperanto
-"et\0" // Estonian
-"fo\0" // Faroese
-"fj\0" // Fijian
-"fi\0" // Finnish
-"fr\0" // French
-"fy\0" // Western Frisian
-"gd\0" // Gaelic
-"gl\0" // Galician
-"ka\0" // Georgian
-"de\0" // German
-"el\0" // Greek
-"kl\0" // Greenlandic
-"gn\0" // Guarani
-"gu\0" // Gujarati
-"ha\0" // Hausa
-"he\0" // Hebrew
-"hi\0" // Hindi
-"hu\0" // Hungarian
-"is\0" // Icelandic
-"id\0" // Indonesian
-"ia\0" // Interlingua
-"ie\0" // Interlingue
-"iu\0" // Inuktitut
-"ik\0" // Inupiak
-"ga\0" // Irish
-"it\0" // Italian
-"ja\0" // Japanese
-"jv\0" // Javanese
-"kn\0" // Kannada
-"ks\0" // Kashmiri
-"kk\0" // Kazakh
-"rw\0" // Kinyarwanda
-"ky\0" // Kirghiz
-"ko\0" // Korean
-"ku\0" // Kurdish
-"rn\0" // Rundi
-"lo\0" // Lao
-"la\0" // Latin
-"lv\0" // Latvian
-"ln\0" // Lingala
-"lt\0" // Lithuanian
-"mk\0" // Macedonian
-"mg\0" // Malagasy
-"ms\0" // Malay
-"ml\0" // Malayalam
-"mt\0" // Maltese
-"mi\0" // Maori
-"mr\0" // Marathi
-"mh\0" // Marshallese
-"mn\0" // Mongolian
-"na\0" // Nauru
-"ne\0" // Nepali
-"nb\0" // Norwegian Bokmal
-"oc\0" // Occitan
-"or\0" // Oriya
-"ps\0" // Pashto
-"fa\0" // Persian
-"pl\0" // Polish
-"pt\0" // Portuguese
-"pa\0" // Punjabi
-"qu\0" // Quechua
-"rm\0" // Romansh
-"ro\0" // Romanian
-"ru\0" // Russian
-"sm\0" // Samoan
-"sg\0" // Sango
-"sa\0" // Sanskrit
-"sr\0" // Serbian
-"os\0" // Ossetic
-"st\0" // Southern Sotho
-"tn\0" // Tswana
-"sn\0" // Shona
-"sd\0" // Sindhi
-"si\0" // Sinhala
-"ss\0" // Swati
-"sk\0" // Slovak
-"sl\0" // Slovenian
-"so\0" // Somali
-"es\0" // Spanish
-"su\0" // Sundanese
-"sw\0" // Swahili
-"sv\0" // Swedish
-"sc\0" // Sardinian
-"tg\0" // Tajik
-"ta\0" // Tamil
-"tt\0" // Tatar
-"te\0" // Telugu
-"th\0" // Thai
-"bo\0" // Tibetan
-"ti\0" // Tigrinya
-"to\0" // Tongan
-"ts\0" // Tsonga
-"tr\0" // Turkish
-"tk\0" // Turkmen
-"ty\0" // Tahitian
-"ug\0" // Uighur
-"uk\0" // Ukrainian
-"ur\0" // Urdu
-"uz\0" // Uzbek
-"vi\0" // Vietnamese
-"vo\0" // Volapuk
-"cy\0" // Welsh
-"wo\0" // Wolof
-"xh\0" // Xhosa
-"yi\0" // Yiddish
-"yo\0" // Yoruba
-"za\0" // Zhuang
-"zu\0" // Zulu
-"nn\0" // Norwegian Nynorsk
-"bs\0" // Bosnian
-"dv\0" // Divehi
-"gv\0" // Manx
-"kw\0" // Cornish
-"ak\0" // Akan
-"kok" // Konkani
-"gaa" // Ga
-"ig\0" // Igbo
-"kam" // Kamba
-"syr" // Syriac
-"byn" // Blin
-"gez" // Geez
-"kfo" // Koro
-"sid" // Sidamo
-"cch" // Atsam
-"tig" // Tigre
-"kaj" // Jju
-"fur" // Friulian
-"ve\0" // Venda
-"ee\0" // Ewe
-"wal" // Walamo
-"haw" // Hawaiian
-"kcg" // Tyap
-"ny\0" // Nyanja
-"fil" // Filipino
-"gsw" // Swiss German
-"ii\0" // Sichuan Yi
-"kpe" // Kpelle
-"nds" // Low German
-"nr\0" // South Ndebele
-"nso" // Northern Sotho
-"se\0" // Northern Sami
-"trv" // Taroko
-"guz" // Gusii
-"dav" // Taita
-"ff\0" // Fulah
-"ki\0" // Kikuyu
-"saq" // Samburu
-"seh" // Sena
-"nd\0" // North Ndebele
-"rof" // Rombo
-"shi" // Tachelhit
-"kab" // Kabyle
-"nyn" // Nyankole
-"bez" // Bena
-"vun" // Vunjo
-"bm\0" // Bambara
-"ebu" // Embu
-"chr" // Cherokee
-"mfe" // Morisyen
-"kde" // Makonde
-"lag" // Langi
-"lg\0" // Ganda
-"bem" // Bemba
-"kea" // Kabuverdianu
-"mer" // Meru
-"kln" // Kalenjin
-"naq" // Nama
-"jmc" // Machame
-"ksh" // Colognian
-"mas" // Masai
-"xog" // Soga
-"luy" // Luyia
-"asa" // Asu
-"teo" // Teso
-"ssy" // Saho
-"khq" // Koyra Chiini
-"rwk" // Rwa
-"luo" // Luo
-"cgg" // Chiga
-"tzm" // Central Morocco Tamazight
-"ses" // Koyraboro Senni
-"ksb" // Shambala
-"brx" // Bodo
-"av\0" // Avaric
-"ch\0" // Chamorro
-"ce\0" // Chechen
-"cu\0" // Church
-"cv\0" // Chuvash
-"cr\0" // Cree
-"ht\0" // Haitian
-"hz\0" // Herero
-"ho\0" // Hiri Motu
-"kr\0" // Kanuri
-"kv\0" // Komi
-"kg\0" // Kongo
-"kj\0" // Kwanyama
-"li\0" // Limburgish
-"lu\0" // Luba Katanga
-"lb\0" // Luxembourgish
-"nv\0" // Navaho
-"ng\0" // Ndonga
-"oj\0" // Ojibwa
-"pi\0" // Pali
-"wa\0" // Walloon
-"agq" // Aghem
-"bas" // Basaa
-"dje" // Zarma
-"dua" // Duala
-"dyo" // Jola Fonyi
-"ewo" // Ewondo
-"ksf" // Bafia
-"mgh" // Makhuwa Meetto
-"mua" // Mundang
-"nmg" // Kwasio
-"nus" // Nuer
-"sah" // Sakha
-"sbp" // Sangu
-"swc" // Congo Swahili
-"twq" // Tasawaq
-"vai" // Vai
-"wae" // Walser
-"yav" // Yangben
-"ae\0" // Avestan
-"ast" // Asturian
-"jgo" // Ngomba
-"kkj" // Kako
-"mgo" // Meta
-"nnh" // Ngiemboon
-"an\0" // Aragonese
-"akk" // Akkadian
-"egy" // Ancient Egyptian
-"grc" // Ancient Greek
-"arc" // Aramaic
-"ban" // Balinese
-"bax" // Bamun
-"bbc" // Batak Toba
-"bug" // Buginese
-"bku" // Buhid
-"xcr" // Carian
-"ccp" // Chakma
-"myz" // Classical Mandaic
-"cop" // Coptic
-"doi" // Dogri
-"cjm" // Eastern Cham
-"eky" // Eastern Kayah
-"ett" // Etruscan
-"got" // Gothic
-"hnn" // Hanunoo
-"inh" // Ingush
-"hmd" // Large Flowery Miao
-"lep" // Lepcha
-"lif" // Limbu
-"lis" // Lisu
-"khb" // Lu
-"xlc" // Lycian
-"xld" // Lydian
-"man" // Mandingo
-"mni" // Manipuri
-"xmr" // Meroitic
-"nod" // Northern Thai
-"sga" // Old Irish
-"non" // Old Norse
-"peo" // Old Persian
-"otk" // Old Turkish
-"pal" // Pahlavi
-"xpr" // Parthian
-"phn" // Phoenician
-"pra" // Prakrit Language
-"rej" // Rejang
-"xsa" // Sabaean
-"smp" // Samaritan
-"sat" // Santali
-"saz" // Saurashtra
-"srb" // Sora
-"syl" // Sylheti
-"tbw" // Tagbanwa
-"blt" // Tai Dam
-"tdd" // Tai Nua
-"uga" // Ugaritic
-"bss" // Akoose
-"lkt" // Lakota
-"zgh" // Standard Moroccan Tamazight
-"arn" // Mapuche
-"ckb" // Central Kurdish
-"dsb" // Lower Sorbian
-"hsb" // Upper Sorbian
-"ken" // Kenyang
-"moh" // Mohawk
-"nqo" // Nko
-"prg" // Prussian
-"quc" // Kiche
-"sma" // Southern Sami
-"smj" // Lule Sami
-"smn" // Inari Sami
-"sms" // Skolt Sami
-"wbp" // Warlpiri
-"xmn" // Manichaean Middle Persian
-"men" // Mende
-"xna" // Ancient North Arabian
-"lab" // Linear A
-"hnj" // Hmong Njua
-"hoc" // Ho
-"lez" // Lezghian
-"bsq" // Bassa
-"mru" // Mono
-"ctd" // Tedim Chin
-"mai" // Maithili
-"aho" // Ahom
-"ase" // American Sign Language
-"pka" // Ardhamagadhi Prakrit
-"bho" // Bhojpuri
-"hlu" // Hieroglyphic Luwian
-"lzh" // Literary Chinese
-"mzn" // Mazanderani
-"mro" // Mru
-"new" // Newari
-"lrc" // Northern Luri
-"pau" // Palauan
-"pap" // Papiamento
-"skr" // Saraiki
-"tkl" // Tokelau
-"tpi" // Tok Pisin
-"tvl" // Tuvalu
-"mis" // Uncoded Languages
-"yue" // Cantonese
-"osa" // Osage
-"txg" // Tangut
-"io\0" // Ido
-"jbo" // Lojban
-"scn" // Sicilian
-"sdh" // Southern Kurdish
-"bgn" // Western Balochi
-"ceb" // Cebuano
-"myv" // Erzya
-"cic" // Chickasaw
-"mus" // Muscogee
-"szl" // Silesian
-;
+constexpr std::array<LanguageCodeEntry, 344> languageCodeList {
+ LanguageCodeEntry {{}, {'u', 'n', 'd'}, {'u', 'n', 'd'}, {'u', 'n', 'd'}}, // AnyLanguage
+ LanguageCodeEntry {{}, {'u', 'n', 'd'}, {'u', 'n', 'd'}, {'u', 'n', 'd'}}, // C
+ LanguageCodeEntry {{'a', 'b'}, {'a', 'b', 'k'}, {'a', 'b', 'k'}, {'a', 'b', 'k'}}, // Abkhazian
+ LanguageCodeEntry {{'a', 'a'}, {'a', 'a', 'r'}, {'a', 'a', 'r'}, {'a', 'a', 'r'}}, // Afar
+ LanguageCodeEntry {{'a', 'f'}, {'a', 'f', 'r'}, {'a', 'f', 'r'}, {'a', 'f', 'r'}}, // Afrikaans
+ LanguageCodeEntry {{}, {}, {}, {'a', 'g', 'q'}}, // Aghem
+ LanguageCodeEntry {{'a', 'k'}, {'a', 'k', 'a'}, {'a', 'k', 'a'}, {'a', 'k', 'a'}}, // Akan
+ LanguageCodeEntry {{}, {'a', 'k', 'k'}, {'a', 'k', 'k'}, {'a', 'k', 'k'}}, // Akkadian
+ LanguageCodeEntry {{}, {}, {}, {'b', 's', 's'}}, // Akoose
+ LanguageCodeEntry {{'s', 'q'}, {'a', 'l', 'b'}, {'s', 'q', 'i'}, {'s', 'q', 'i'}}, // Albanian
+ LanguageCodeEntry {{}, {}, {}, {'a', 's', 'e'}}, // American Sign Language
+ LanguageCodeEntry {{'a', 'm'}, {'a', 'm', 'h'}, {'a', 'm', 'h'}, {'a', 'm', 'h'}}, // Amharic
+ LanguageCodeEntry {{}, {'e', 'g', 'y'}, {'e', 'g', 'y'}, {'e', 'g', 'y'}}, // Ancient Egyptian
+ LanguageCodeEntry {{}, {'g', 'r', 'c'}, {'g', 'r', 'c'}, {'g', 'r', 'c'}}, // Ancient Greek
+ LanguageCodeEntry {{'a', 'r'}, {'a', 'r', 'a'}, {'a', 'r', 'a'}, {'a', 'r', 'a'}}, // Arabic
+ LanguageCodeEntry {{'a', 'n'}, {'a', 'r', 'g'}, {'a', 'r', 'g'}, {'a', 'r', 'g'}}, // Aragonese
+ LanguageCodeEntry {{}, {'a', 'r', 'c'}, {'a', 'r', 'c'}, {'a', 'r', 'c'}}, // Aramaic
+ LanguageCodeEntry {{'h', 'y'}, {'a', 'r', 'm'}, {'h', 'y', 'e'}, {'h', 'y', 'e'}}, // Armenian
+ LanguageCodeEntry {{'a', 's'}, {'a', 's', 'm'}, {'a', 's', 'm'}, {'a', 's', 'm'}}, // Assamese
+ LanguageCodeEntry {{}, {'a', 's', 't'}, {'a', 's', 't'}, {'a', 's', 't'}}, // Asturian
+ LanguageCodeEntry {{}, {}, {}, {'a', 's', 'a'}}, // Asu
+ LanguageCodeEntry {{}, {}, {}, {'c', 'c', 'h'}}, // Atsam
+ LanguageCodeEntry {{'a', 'v'}, {'a', 'v', 'a'}, {'a', 'v', 'a'}, {'a', 'v', 'a'}}, // Avaric
+ LanguageCodeEntry {{'a', 'e'}, {'a', 'v', 'e'}, {'a', 'v', 'e'}, {'a', 'v', 'e'}}, // Avestan
+ LanguageCodeEntry {{'a', 'y'}, {'a', 'y', 'm'}, {'a', 'y', 'm'}, {'a', 'y', 'm'}}, // Aymara
+ LanguageCodeEntry {{'a', 'z'}, {'a', 'z', 'e'}, {'a', 'z', 'e'}, {'a', 'z', 'e'}}, // Azerbaijani
+ LanguageCodeEntry {{}, {}, {}, {'k', 's', 'f'}}, // Bafia
+ LanguageCodeEntry {{}, {'b', 'a', 'n'}, {'b', 'a', 'n'}, {'b', 'a', 'n'}}, // Balinese
+ LanguageCodeEntry {{'b', 'm'}, {'b', 'a', 'm'}, {'b', 'a', 'm'}, {'b', 'a', 'm'}}, // Bambara
+ LanguageCodeEntry {{}, {}, {}, {'b', 'a', 'x'}}, // Bamun
+ LanguageCodeEntry {{'b', 'n'}, {'b', 'e', 'n'}, {'b', 'e', 'n'}, {'b', 'e', 'n'}}, // Bangla
+ LanguageCodeEntry {{}, {'b', 'a', 's'}, {'b', 'a', 's'}, {'b', 'a', 's'}}, // Basaa
+ LanguageCodeEntry {{'b', 'a'}, {'b', 'a', 'k'}, {'b', 'a', 'k'}, {'b', 'a', 'k'}}, // Bashkir
+ LanguageCodeEntry {{'e', 'u'}, {'b', 'a', 'q'}, {'e', 'u', 's'}, {'e', 'u', 's'}}, // Basque
+ LanguageCodeEntry {{}, {}, {}, {'b', 'b', 'c'}}, // Batak Toba
+ LanguageCodeEntry {{'b', 'e'}, {'b', 'e', 'l'}, {'b', 'e', 'l'}, {'b', 'e', 'l'}}, // Belarusian
+ LanguageCodeEntry {{}, {'b', 'e', 'm'}, {'b', 'e', 'm'}, {'b', 'e', 'm'}}, // Bemba
+ LanguageCodeEntry {{}, {}, {}, {'b', 'e', 'z'}}, // Bena
+ LanguageCodeEntry {{}, {'b', 'h', 'o'}, {'b', 'h', 'o'}, {'b', 'h', 'o'}}, // Bhojpuri
+ LanguageCodeEntry {{'b', 'i'}, {'b', 'i', 's'}, {'b', 'i', 's'}, {'b', 'i', 's'}}, // Bislama
+ LanguageCodeEntry {{}, {'b', 'y', 'n'}, {'b', 'y', 'n'}, {'b', 'y', 'n'}}, // Blin
+ LanguageCodeEntry {{}, {}, {}, {'b', 'r', 'x'}}, // Bodo
+ LanguageCodeEntry {{'b', 's'}, {'b', 'o', 's'}, {'b', 'o', 's'}, {'b', 'o', 's'}}, // Bosnian
+ LanguageCodeEntry {{'b', 'r'}, {'b', 'r', 'e'}, {'b', 'r', 'e'}, {'b', 'r', 'e'}}, // Breton
+ LanguageCodeEntry {{}, {'b', 'u', 'g'}, {'b', 'u', 'g'}, {'b', 'u', 'g'}}, // Buginese
+ LanguageCodeEntry {{'b', 'g'}, {'b', 'u', 'l'}, {'b', 'u', 'l'}, {'b', 'u', 'l'}}, // Bulgarian
+ LanguageCodeEntry {{'m', 'y'}, {'b', 'u', 'r'}, {'m', 'y', 'a'}, {'m', 'y', 'a'}}, // Burmese
+ LanguageCodeEntry {{}, {}, {}, {'y', 'u', 'e'}}, // Cantonese
+ LanguageCodeEntry {{'c', 'a'}, {'c', 'a', 't'}, {'c', 'a', 't'}, {'c', 'a', 't'}}, // Catalan
+ LanguageCodeEntry {{}, {'c', 'e', 'b'}, {'c', 'e', 'b'}, {'c', 'e', 'b'}}, // Cebuano
+ LanguageCodeEntry {{}, {}, {}, {'t', 'z', 'm'}}, // Central Atlas Tamazight
+ LanguageCodeEntry {{}, {}, {}, {'c', 'k', 'b'}}, // Central Kurdish
+ LanguageCodeEntry {{}, {}, {}, {'c', 'c', 'p'}}, // Chakma
+ LanguageCodeEntry {{'c', 'h'}, {'c', 'h', 'a'}, {'c', 'h', 'a'}, {'c', 'h', 'a'}}, // Chamorro
+ LanguageCodeEntry {{'c', 'e'}, {'c', 'h', 'e'}, {'c', 'h', 'e'}, {'c', 'h', 'e'}}, // Chechen
+ LanguageCodeEntry {{}, {'c', 'h', 'r'}, {'c', 'h', 'r'}, {'c', 'h', 'r'}}, // Cherokee
+ LanguageCodeEntry {{}, {}, {}, {'c', 'i', 'c'}}, // Chickasaw
+ LanguageCodeEntry {{}, {}, {}, {'c', 'g', 'g'}}, // Chiga
+ LanguageCodeEntry {{'z', 'h'}, {'c', 'h', 'i'}, {'z', 'h', 'o'}, {'z', 'h', 'o'}}, // Chinese
+ LanguageCodeEntry {{'c', 'u'}, {'c', 'h', 'u'}, {'c', 'h', 'u'}, {'c', 'h', 'u'}}, // Church
+ LanguageCodeEntry {{'c', 'v'}, {'c', 'h', 'v'}, {'c', 'h', 'v'}, {'c', 'h', 'v'}}, // Chuvash
+ LanguageCodeEntry {{}, {}, {}, {'k', 's', 'h'}}, // Colognian
+ LanguageCodeEntry {{}, {'c', 'o', 'p'}, {'c', 'o', 'p'}, {'c', 'o', 'p'}}, // Coptic
+ LanguageCodeEntry {{'k', 'w'}, {'c', 'o', 'r'}, {'c', 'o', 'r'}, {'c', 'o', 'r'}}, // Cornish
+ LanguageCodeEntry {{'c', 'o'}, {'c', 'o', 's'}, {'c', 'o', 's'}, {'c', 'o', 's'}}, // Corsican
+ LanguageCodeEntry {{'c', 'r'}, {'c', 'r', 'e'}, {'c', 'r', 'e'}, {'c', 'r', 'e'}}, // Cree
+ LanguageCodeEntry {{'h', 'r'}, {'h', 'r', 'v'}, {'h', 'r', 'v'}, {'h', 'r', 'v'}}, // Croatian
+ LanguageCodeEntry {{'c', 's'}, {'c', 'z', 'e'}, {'c', 'e', 's'}, {'c', 'e', 's'}}, // Czech
+ LanguageCodeEntry {{'d', 'a'}, {'d', 'a', 'n'}, {'d', 'a', 'n'}, {'d', 'a', 'n'}}, // Danish
+ LanguageCodeEntry {{'d', 'v'}, {'d', 'i', 'v'}, {'d', 'i', 'v'}, {'d', 'i', 'v'}}, // Divehi
+ LanguageCodeEntry {{}, {'d', 'o', 'i'}, {'d', 'o', 'i'}, {'d', 'o', 'i'}}, // Dogri
+ LanguageCodeEntry {{}, {'d', 'u', 'a'}, {'d', 'u', 'a'}, {'d', 'u', 'a'}}, // Duala
+ LanguageCodeEntry {{'n', 'l'}, {'d', 'u', 't'}, {'n', 'l', 'd'}, {'n', 'l', 'd'}}, // Dutch
+ LanguageCodeEntry {{'d', 'z'}, {'d', 'z', 'o'}, {'d', 'z', 'o'}, {'d', 'z', 'o'}}, // Dzongkha
+ LanguageCodeEntry {{}, {}, {}, {'e', 'b', 'u'}}, // Embu
+ LanguageCodeEntry {{'e', 'n'}, {'e', 'n', 'g'}, {'e', 'n', 'g'}, {'e', 'n', 'g'}}, // English
+ LanguageCodeEntry {{}, {'m', 'y', 'v'}, {'m', 'y', 'v'}, {'m', 'y', 'v'}}, // Erzya
+ LanguageCodeEntry {{'e', 'o'}, {'e', 'p', 'o'}, {'e', 'p', 'o'}, {'e', 'p', 'o'}}, // Esperanto
+ LanguageCodeEntry {{'e', 't'}, {'e', 's', 't'}, {'e', 's', 't'}, {'e', 's', 't'}}, // Estonian
+ LanguageCodeEntry {{'e', 'e'}, {'e', 'w', 'e'}, {'e', 'w', 'e'}, {'e', 'w', 'e'}}, // Ewe
+ LanguageCodeEntry {{}, {'e', 'w', 'o'}, {'e', 'w', 'o'}, {'e', 'w', 'o'}}, // Ewondo
+ LanguageCodeEntry {{'f', 'o'}, {'f', 'a', 'o'}, {'f', 'a', 'o'}, {'f', 'a', 'o'}}, // Faroese
+ LanguageCodeEntry {{'f', 'j'}, {'f', 'i', 'j'}, {'f', 'i', 'j'}, {'f', 'i', 'j'}}, // Fijian
+ LanguageCodeEntry {{}, {'f', 'i', 'l'}, {'f', 'i', 'l'}, {'f', 'i', 'l'}}, // Filipino
+ LanguageCodeEntry {{'f', 'i'}, {'f', 'i', 'n'}, {'f', 'i', 'n'}, {'f', 'i', 'n'}}, // Finnish
+ LanguageCodeEntry {{'f', 'r'}, {'f', 'r', 'e'}, {'f', 'r', 'a'}, {'f', 'r', 'a'}}, // French
+ LanguageCodeEntry {{}, {'f', 'u', 'r'}, {'f', 'u', 'r'}, {'f', 'u', 'r'}}, // Friulian
+ LanguageCodeEntry {{'f', 'f'}, {'f', 'u', 'l'}, {'f', 'u', 'l'}, {'f', 'u', 'l'}}, // Fulah
+ LanguageCodeEntry {{'g', 'd'}, {'g', 'l', 'a'}, {'g', 'l', 'a'}, {'g', 'l', 'a'}}, // Gaelic
+ LanguageCodeEntry {{}, {'g', 'a', 'a'}, {'g', 'a', 'a'}, {'g', 'a', 'a'}}, // Ga
+ LanguageCodeEntry {{'g', 'l'}, {'g', 'l', 'g'}, {'g', 'l', 'g'}, {'g', 'l', 'g'}}, // Galician
+ LanguageCodeEntry {{'l', 'g'}, {'l', 'u', 'g'}, {'l', 'u', 'g'}, {'l', 'u', 'g'}}, // Ganda
+ LanguageCodeEntry {{}, {'g', 'e', 'z'}, {'g', 'e', 'z'}, {'g', 'e', 'z'}}, // Geez
+ LanguageCodeEntry {{'k', 'a'}, {'g', 'e', 'o'}, {'k', 'a', 't'}, {'k', 'a', 't'}}, // Georgian
+ LanguageCodeEntry {{'d', 'e'}, {'g', 'e', 'r'}, {'d', 'e', 'u'}, {'d', 'e', 'u'}}, // German
+ LanguageCodeEntry {{}, {'g', 'o', 't'}, {'g', 'o', 't'}, {'g', 'o', 't'}}, // Gothic
+ LanguageCodeEntry {{'e', 'l'}, {'g', 'r', 'e'}, {'e', 'l', 'l'}, {'e', 'l', 'l'}}, // Greek
+ LanguageCodeEntry {{'g', 'n'}, {'g', 'r', 'n'}, {'g', 'r', 'n'}, {'g', 'r', 'n'}}, // Guarani
+ LanguageCodeEntry {{'g', 'u'}, {'g', 'u', 'j'}, {'g', 'u', 'j'}, {'g', 'u', 'j'}}, // Gujarati
+ LanguageCodeEntry {{}, {}, {}, {'g', 'u', 'z'}}, // Gusii
+ LanguageCodeEntry {{'h', 't'}, {'h', 'a', 't'}, {'h', 'a', 't'}, {'h', 'a', 't'}}, // Haitian
+ LanguageCodeEntry {{'h', 'a'}, {'h', 'a', 'u'}, {'h', 'a', 'u'}, {'h', 'a', 'u'}}, // Hausa
+ LanguageCodeEntry {{}, {'h', 'a', 'w'}, {'h', 'a', 'w'}, {'h', 'a', 'w'}}, // Hawaiian
+ LanguageCodeEntry {{'h', 'e'}, {'h', 'e', 'b'}, {'h', 'e', 'b'}, {'h', 'e', 'b'}}, // Hebrew
+ LanguageCodeEntry {{'h', 'z'}, {'h', 'e', 'r'}, {'h', 'e', 'r'}, {'h', 'e', 'r'}}, // Herero
+ LanguageCodeEntry {{'h', 'i'}, {'h', 'i', 'n'}, {'h', 'i', 'n'}, {'h', 'i', 'n'}}, // Hindi
+ LanguageCodeEntry {{'h', 'o'}, {'h', 'm', 'o'}, {'h', 'm', 'o'}, {'h', 'm', 'o'}}, // Hiri Motu
+ LanguageCodeEntry {{'h', 'u'}, {'h', 'u', 'n'}, {'h', 'u', 'n'}, {'h', 'u', 'n'}}, // Hungarian
+ LanguageCodeEntry {{'i', 's'}, {'i', 'c', 'e'}, {'i', 's', 'l'}, {'i', 's', 'l'}}, // Icelandic
+ LanguageCodeEntry {{'i', 'o'}, {'i', 'd', 'o'}, {'i', 'd', 'o'}, {'i', 'd', 'o'}}, // Ido
+ LanguageCodeEntry {{'i', 'g'}, {'i', 'b', 'o'}, {'i', 'b', 'o'}, {'i', 'b', 'o'}}, // Igbo
+ LanguageCodeEntry {{}, {'s', 'm', 'n'}, {'s', 'm', 'n'}, {'s', 'm', 'n'}}, // Inari Sami
+ LanguageCodeEntry {{'i', 'd'}, {'i', 'n', 'd'}, {'i', 'n', 'd'}, {'i', 'n', 'd'}}, // Indonesian
+ LanguageCodeEntry {{}, {'i', 'n', 'h'}, {'i', 'n', 'h'}, {'i', 'n', 'h'}}, // Ingush
+ LanguageCodeEntry {{'i', 'a'}, {'i', 'n', 'a'}, {'i', 'n', 'a'}, {'i', 'n', 'a'}}, // Interlingua
+ LanguageCodeEntry {{'i', 'e'}, {'i', 'l', 'e'}, {'i', 'l', 'e'}, {'i', 'l', 'e'}}, // Interlingue
+ LanguageCodeEntry {{'i', 'u'}, {'i', 'k', 'u'}, {'i', 'k', 'u'}, {'i', 'k', 'u'}}, // Inuktitut
+ LanguageCodeEntry {{'i', 'k'}, {'i', 'p', 'k'}, {'i', 'p', 'k'}, {'i', 'p', 'k'}}, // Inupiaq
+ LanguageCodeEntry {{'g', 'a'}, {'g', 'l', 'e'}, {'g', 'l', 'e'}, {'g', 'l', 'e'}}, // Irish
+ LanguageCodeEntry {{'i', 't'}, {'i', 't', 'a'}, {'i', 't', 'a'}, {'i', 't', 'a'}}, // Italian
+ LanguageCodeEntry {{'j', 'a'}, {'j', 'p', 'n'}, {'j', 'p', 'n'}, {'j', 'p', 'n'}}, // Japanese
+ LanguageCodeEntry {{'j', 'v'}, {'j', 'a', 'v'}, {'j', 'a', 'v'}, {'j', 'a', 'v'}}, // Javanese
+ LanguageCodeEntry {{}, {}, {}, {'k', 'a', 'j'}}, // Jju
+ LanguageCodeEntry {{}, {}, {}, {'d', 'y', 'o'}}, // Jola-Fonyi
+ LanguageCodeEntry {{}, {}, {}, {'k', 'e', 'a'}}, // Kabuverdianu
+ LanguageCodeEntry {{}, {'k', 'a', 'b'}, {'k', 'a', 'b'}, {'k', 'a', 'b'}}, // Kabyle
+ LanguageCodeEntry {{}, {}, {}, {'k', 'k', 'j'}}, // Kako
+ LanguageCodeEntry {{'k', 'l'}, {'k', 'a', 'l'}, {'k', 'a', 'l'}, {'k', 'a', 'l'}}, // Kalaallisut
+ LanguageCodeEntry {{}, {}, {}, {'k', 'l', 'n'}}, // Kalenjin
+ LanguageCodeEntry {{}, {'k', 'a', 'm'}, {'k', 'a', 'm'}, {'k', 'a', 'm'}}, // Kamba
+ LanguageCodeEntry {{'k', 'n'}, {'k', 'a', 'n'}, {'k', 'a', 'n'}, {'k', 'a', 'n'}}, // Kannada
+ LanguageCodeEntry {{'k', 'r'}, {'k', 'a', 'u'}, {'k', 'a', 'u'}, {'k', 'a', 'u'}}, // Kanuri
+ LanguageCodeEntry {{'k', 's'}, {'k', 'a', 's'}, {'k', 'a', 's'}, {'k', 'a', 's'}}, // Kashmiri
+ LanguageCodeEntry {{'k', 'k'}, {'k', 'a', 'z'}, {'k', 'a', 'z'}, {'k', 'a', 'z'}}, // Kazakh
+ LanguageCodeEntry {{}, {}, {}, {'k', 'e', 'n'}}, // Kenyang
+ LanguageCodeEntry {{'k', 'm'}, {'k', 'h', 'm'}, {'k', 'h', 'm'}, {'k', 'h', 'm'}}, // Khmer
+ LanguageCodeEntry {{}, {}, {}, {'q', 'u', 'c'}}, // Kiche
+ LanguageCodeEntry {{'k', 'i'}, {'k', 'i', 'k'}, {'k', 'i', 'k'}, {'k', 'i', 'k'}}, // Kikuyu
+ LanguageCodeEntry {{'r', 'w'}, {'k', 'i', 'n'}, {'k', 'i', 'n'}, {'k', 'i', 'n'}}, // Kinyarwanda
+ LanguageCodeEntry {{'k', 'v'}, {'k', 'o', 'm'}, {'k', 'o', 'm'}, {'k', 'o', 'm'}}, // Komi
+ LanguageCodeEntry {{'k', 'g'}, {'k', 'o', 'n'}, {'k', 'o', 'n'}, {'k', 'o', 'n'}}, // Kongo
+ LanguageCodeEntry {{}, {'k', 'o', 'k'}, {'k', 'o', 'k'}, {'k', 'o', 'k'}}, // Konkani
+ LanguageCodeEntry {{'k', 'o'}, {'k', 'o', 'r'}, {'k', 'o', 'r'}, {'k', 'o', 'r'}}, // Korean
+ LanguageCodeEntry {{}, {}, {}, {'k', 'f', 'o'}}, // Koro
+ LanguageCodeEntry {{}, {}, {}, {'s', 'e', 's'}}, // Koyraboro Senni
+ LanguageCodeEntry {{}, {}, {}, {'k', 'h', 'q'}}, // Koyra Chiini
+ LanguageCodeEntry {{}, {'k', 'p', 'e'}, {'k', 'p', 'e'}, {'k', 'p', 'e'}}, // Kpelle
+ LanguageCodeEntry {{'k', 'j'}, {'k', 'u', 'a'}, {'k', 'u', 'a'}, {'k', 'u', 'a'}}, // Kuanyama
+ LanguageCodeEntry {{'k', 'u'}, {'k', 'u', 'r'}, {'k', 'u', 'r'}, {'k', 'u', 'r'}}, // Kurdish
+ LanguageCodeEntry {{}, {}, {}, {'n', 'm', 'g'}}, // Kwasio
+ LanguageCodeEntry {{'k', 'y'}, {'k', 'i', 'r'}, {'k', 'i', 'r'}, {'k', 'i', 'r'}}, // Kyrgyz
+ LanguageCodeEntry {{}, {}, {}, {'l', 'k', 't'}}, // Lakota
+ LanguageCodeEntry {{}, {}, {}, {'l', 'a', 'g'}}, // Langi
+ LanguageCodeEntry {{'l', 'o'}, {'l', 'a', 'o'}, {'l', 'a', 'o'}, {'l', 'a', 'o'}}, // Lao
+ LanguageCodeEntry {{'l', 'a'}, {'l', 'a', 't'}, {'l', 'a', 't'}, {'l', 'a', 't'}}, // Latin
+ LanguageCodeEntry {{'l', 'v'}, {'l', 'a', 'v'}, {'l', 'a', 'v'}, {'l', 'a', 'v'}}, // Latvian
+ LanguageCodeEntry {{}, {'l', 'e', 'z'}, {'l', 'e', 'z'}, {'l', 'e', 'z'}}, // Lezghian
+ LanguageCodeEntry {{'l', 'i'}, {'l', 'i', 'm'}, {'l', 'i', 'm'}, {'l', 'i', 'm'}}, // Limburgish
+ LanguageCodeEntry {{'l', 'n'}, {'l', 'i', 'n'}, {'l', 'i', 'n'}, {'l', 'i', 'n'}}, // Lingala
+ LanguageCodeEntry {{}, {}, {}, {'l', 'z', 'h'}}, // Literary Chinese
+ LanguageCodeEntry {{'l', 't'}, {'l', 'i', 't'}, {'l', 'i', 't'}, {'l', 'i', 't'}}, // Lithuanian
+ LanguageCodeEntry {{}, {'j', 'b', 'o'}, {'j', 'b', 'o'}, {'j', 'b', 'o'}}, // Lojban
+ LanguageCodeEntry {{}, {'d', 's', 'b'}, {'d', 's', 'b'}, {'d', 's', 'b'}}, // Lower Sorbian
+ LanguageCodeEntry {{}, {'n', 'd', 's'}, {'n', 'd', 's'}, {'n', 'd', 's'}}, // Low German
+ LanguageCodeEntry {{'l', 'u'}, {'l', 'u', 'b'}, {'l', 'u', 'b'}, {'l', 'u', 'b'}}, // Luba-Katanga
+ LanguageCodeEntry {{}, {'s', 'm', 'j'}, {'s', 'm', 'j'}, {'s', 'm', 'j'}}, // Lule Sami
+ LanguageCodeEntry {{}, {'l', 'u', 'o'}, {'l', 'u', 'o'}, {'l', 'u', 'o'}}, // Luo
+ LanguageCodeEntry {{'l', 'b'}, {'l', 't', 'z'}, {'l', 't', 'z'}, {'l', 't', 'z'}}, // Luxembourgish
+ LanguageCodeEntry {{}, {}, {}, {'l', 'u', 'y'}}, // Luyia
+ LanguageCodeEntry {{'m', 'k'}, {'m', 'a', 'c'}, {'m', 'k', 'd'}, {'m', 'k', 'd'}}, // Macedonian
+ LanguageCodeEntry {{}, {}, {}, {'j', 'm', 'c'}}, // Machame
+ LanguageCodeEntry {{}, {'m', 'a', 'i'}, {'m', 'a', 'i'}, {'m', 'a', 'i'}}, // Maithili
+ LanguageCodeEntry {{}, {}, {}, {'m', 'g', 'h'}}, // Makhuwa-Meetto
+ LanguageCodeEntry {{}, {}, {}, {'k', 'd', 'e'}}, // Makonde
+ LanguageCodeEntry {{'m', 'g'}, {'m', 'l', 'g'}, {'m', 'l', 'g'}, {'m', 'l', 'g'}}, // Malagasy
+ LanguageCodeEntry {{'m', 'l'}, {'m', 'a', 'l'}, {'m', 'a', 'l'}, {'m', 'a', 'l'}}, // Malayalam
+ LanguageCodeEntry {{'m', 's'}, {'m', 'a', 'y'}, {'m', 's', 'a'}, {'m', 's', 'a'}}, // Malay
+ LanguageCodeEntry {{'m', 't'}, {'m', 'l', 't'}, {'m', 'l', 't'}, {'m', 'l', 't'}}, // Maltese
+ LanguageCodeEntry {{}, {'m', 'a', 'n'}, {'m', 'a', 'n'}, {'m', 'a', 'n'}}, // Mandingo
+ LanguageCodeEntry {{}, {'m', 'n', 'i'}, {'m', 'n', 'i'}, {'m', 'n', 'i'}}, // Manipuri
+ LanguageCodeEntry {{'g', 'v'}, {'g', 'l', 'v'}, {'g', 'l', 'v'}, {'g', 'l', 'v'}}, // Manx
+ LanguageCodeEntry {{'m', 'i'}, {'m', 'a', 'o'}, {'m', 'r', 'i'}, {'m', 'r', 'i'}}, // Maori
+ LanguageCodeEntry {{}, {'a', 'r', 'n'}, {'a', 'r', 'n'}, {'a', 'r', 'n'}}, // Mapuche
+ LanguageCodeEntry {{'m', 'r'}, {'m', 'a', 'r'}, {'m', 'a', 'r'}, {'m', 'a', 'r'}}, // Marathi
+ LanguageCodeEntry {{'m', 'h'}, {'m', 'a', 'h'}, {'m', 'a', 'h'}, {'m', 'a', 'h'}}, // Marshallese
+ LanguageCodeEntry {{}, {'m', 'a', 's'}, {'m', 'a', 's'}, {'m', 'a', 's'}}, // Masai
+ LanguageCodeEntry {{}, {}, {}, {'m', 'z', 'n'}}, // Mazanderani
+ LanguageCodeEntry {{}, {'m', 'e', 'n'}, {'m', 'e', 'n'}, {'m', 'e', 'n'}}, // Mende
+ LanguageCodeEntry {{}, {}, {}, {'m', 'e', 'r'}}, // Meru
+ LanguageCodeEntry {{}, {}, {}, {'m', 'g', 'o'}}, // Meta
+ LanguageCodeEntry {{}, {'m', 'o', 'h'}, {'m', 'o', 'h'}, {'m', 'o', 'h'}}, // Mohawk
+ LanguageCodeEntry {{'m', 'n'}, {'m', 'o', 'n'}, {'m', 'o', 'n'}, {'m', 'o', 'n'}}, // Mongolian
+ LanguageCodeEntry {{}, {}, {}, {'m', 'f', 'e'}}, // Morisyen
+ LanguageCodeEntry {{}, {}, {}, {'m', 'u', 'a'}}, // Mundang
+ LanguageCodeEntry {{}, {'m', 'u', 's'}, {'m', 'u', 's'}, {'m', 'u', 's'}}, // Muscogee
+ LanguageCodeEntry {{}, {}, {}, {'n', 'a', 'q'}}, // Nama
+ LanguageCodeEntry {{'n', 'a'}, {'n', 'a', 'u'}, {'n', 'a', 'u'}, {'n', 'a', 'u'}}, // Nauru
+ LanguageCodeEntry {{'n', 'v'}, {'n', 'a', 'v'}, {'n', 'a', 'v'}, {'n', 'a', 'v'}}, // Navajo
+ LanguageCodeEntry {{'n', 'g'}, {'n', 'd', 'o'}, {'n', 'd', 'o'}, {'n', 'd', 'o'}}, // Ndonga
+ LanguageCodeEntry {{'n', 'e'}, {'n', 'e', 'p'}, {'n', 'e', 'p'}, {'n', 'e', 'p'}}, // Nepali
+ LanguageCodeEntry {{}, {'n', 'e', 'w'}, {'n', 'e', 'w'}, {'n', 'e', 'w'}}, // Newari
+ LanguageCodeEntry {{}, {}, {}, {'n', 'n', 'h'}}, // Ngiemboon
+ LanguageCodeEntry {{}, {}, {}, {'j', 'g', 'o'}}, // Ngomba
+ LanguageCodeEntry {{}, {}, {}, {'p', 'c', 'm'}}, // Nigerian Pidgin
+ LanguageCodeEntry {{}, {'n', 'q', 'o'}, {'n', 'q', 'o'}, {'n', 'q', 'o'}}, // Nko
+ LanguageCodeEntry {{}, {}, {}, {'l', 'r', 'c'}}, // Northern Luri
+ LanguageCodeEntry {{'s', 'e'}, {'s', 'm', 'e'}, {'s', 'm', 'e'}, {'s', 'm', 'e'}}, // Northern Sami
+ LanguageCodeEntry {{}, {'n', 's', 'o'}, {'n', 's', 'o'}, {'n', 's', 'o'}}, // Northern Sotho
+ LanguageCodeEntry {{'n', 'd'}, {'n', 'd', 'e'}, {'n', 'd', 'e'}, {'n', 'd', 'e'}}, // North Ndebele
+ LanguageCodeEntry {{'n', 'b'}, {'n', 'o', 'b'}, {'n', 'o', 'b'}, {'n', 'o', 'b'}}, // Norwegian Bokmal
+ LanguageCodeEntry {{'n', 'n'}, {'n', 'n', 'o'}, {'n', 'n', 'o'}, {'n', 'n', 'o'}}, // Norwegian Nynorsk
+ LanguageCodeEntry {{}, {}, {}, {'n', 'u', 's'}}, // Nuer
+ LanguageCodeEntry {{'n', 'y'}, {'n', 'y', 'a'}, {'n', 'y', 'a'}, {'n', 'y', 'a'}}, // Nyanja
+ LanguageCodeEntry {{}, {'n', 'y', 'n'}, {'n', 'y', 'n'}, {'n', 'y', 'n'}}, // Nyankole
+ LanguageCodeEntry {{'o', 'c'}, {'o', 'c', 'i'}, {'o', 'c', 'i'}, {'o', 'c', 'i'}}, // Occitan
+ LanguageCodeEntry {{'o', 'r'}, {'o', 'r', 'i'}, {'o', 'r', 'i'}, {'o', 'r', 'i'}}, // Odia
+ LanguageCodeEntry {{'o', 'j'}, {'o', 'j', 'i'}, {'o', 'j', 'i'}, {'o', 'j', 'i'}}, // Ojibwa
+ LanguageCodeEntry {{}, {'s', 'g', 'a'}, {'s', 'g', 'a'}, {'s', 'g', 'a'}}, // Old Irish
+ LanguageCodeEntry {{}, {'n', 'o', 'n'}, {'n', 'o', 'n'}, {'n', 'o', 'n'}}, // Old Norse
+ LanguageCodeEntry {{}, {'p', 'e', 'o'}, {'p', 'e', 'o'}, {'p', 'e', 'o'}}, // Old Persian
+ LanguageCodeEntry {{'o', 'm'}, {'o', 'r', 'm'}, {'o', 'r', 'm'}, {'o', 'r', 'm'}}, // Oromo
+ LanguageCodeEntry {{}, {'o', 's', 'a'}, {'o', 's', 'a'}, {'o', 's', 'a'}}, // Osage
+ LanguageCodeEntry {{'o', 's'}, {'o', 's', 's'}, {'o', 's', 's'}, {'o', 's', 's'}}, // Ossetic
+ LanguageCodeEntry {{}, {'p', 'a', 'l'}, {'p', 'a', 'l'}, {'p', 'a', 'l'}}, // Pahlavi
+ LanguageCodeEntry {{}, {'p', 'a', 'u'}, {'p', 'a', 'u'}, {'p', 'a', 'u'}}, // Palauan
+ LanguageCodeEntry {{'p', 'i'}, {'p', 'l', 'i'}, {'p', 'l', 'i'}, {'p', 'l', 'i'}}, // Pali
+ LanguageCodeEntry {{}, {'p', 'a', 'p'}, {'p', 'a', 'p'}, {'p', 'a', 'p'}}, // Papiamento
+ LanguageCodeEntry {{'p', 's'}, {'p', 'u', 's'}, {'p', 'u', 's'}, {'p', 'u', 's'}}, // Pashto
+ LanguageCodeEntry {{'f', 'a'}, {'p', 'e', 'r'}, {'f', 'a', 's'}, {'f', 'a', 's'}}, // Persian
+ LanguageCodeEntry {{}, {'p', 'h', 'n'}, {'p', 'h', 'n'}, {'p', 'h', 'n'}}, // Phoenician
+ LanguageCodeEntry {{'p', 'l'}, {'p', 'o', 'l'}, {'p', 'o', 'l'}, {'p', 'o', 'l'}}, // Polish
+ LanguageCodeEntry {{'p', 't'}, {'p', 'o', 'r'}, {'p', 'o', 'r'}, {'p', 'o', 'r'}}, // Portuguese
+ LanguageCodeEntry {{}, {}, {}, {'p', 'r', 'g'}}, // Prussian
+ LanguageCodeEntry {{'p', 'a'}, {'p', 'a', 'n'}, {'p', 'a', 'n'}, {'p', 'a', 'n'}}, // Punjabi
+ LanguageCodeEntry {{'q', 'u'}, {'q', 'u', 'e'}, {'q', 'u', 'e'}, {'q', 'u', 'e'}}, // Quechua
+ LanguageCodeEntry {{'r', 'o'}, {'r', 'u', 'm'}, {'r', 'o', 'n'}, {'r', 'o', 'n'}}, // Romanian
+ LanguageCodeEntry {{'r', 'm'}, {'r', 'o', 'h'}, {'r', 'o', 'h'}, {'r', 'o', 'h'}}, // Romansh
+ LanguageCodeEntry {{}, {}, {}, {'r', 'o', 'f'}}, // Rombo
+ LanguageCodeEntry {{'r', 'n'}, {'r', 'u', 'n'}, {'r', 'u', 'n'}, {'r', 'u', 'n'}}, // Rundi
+ LanguageCodeEntry {{'r', 'u'}, {'r', 'u', 's'}, {'r', 'u', 's'}, {'r', 'u', 's'}}, // Russian
+ LanguageCodeEntry {{}, {}, {}, {'r', 'w', 'k'}}, // Rwa
+ LanguageCodeEntry {{}, {}, {}, {'s', 's', 'y'}}, // Saho
+ LanguageCodeEntry {{}, {'s', 'a', 'h'}, {'s', 'a', 'h'}, {'s', 'a', 'h'}}, // Sakha
+ LanguageCodeEntry {{}, {}, {}, {'s', 'a', 'q'}}, // Samburu
+ LanguageCodeEntry {{'s', 'm'}, {'s', 'm', 'o'}, {'s', 'm', 'o'}, {'s', 'm', 'o'}}, // Samoan
+ LanguageCodeEntry {{'s', 'g'}, {'s', 'a', 'g'}, {'s', 'a', 'g'}, {'s', 'a', 'g'}}, // Sango
+ LanguageCodeEntry {{}, {}, {}, {'s', 'b', 'p'}}, // Sangu
+ LanguageCodeEntry {{'s', 'a'}, {'s', 'a', 'n'}, {'s', 'a', 'n'}, {'s', 'a', 'n'}}, // Sanskrit
+ LanguageCodeEntry {{}, {'s', 'a', 't'}, {'s', 'a', 't'}, {'s', 'a', 't'}}, // Santali
+ LanguageCodeEntry {{'s', 'c'}, {'s', 'r', 'd'}, {'s', 'r', 'd'}, {'s', 'r', 'd'}}, // Sardinian
+ LanguageCodeEntry {{}, {}, {}, {'s', 'a', 'z'}}, // Saurashtra
+ LanguageCodeEntry {{}, {}, {}, {'s', 'e', 'h'}}, // Sena
+ LanguageCodeEntry {{'s', 'r'}, {'s', 'r', 'p'}, {'s', 'r', 'p'}, {'s', 'r', 'p'}}, // Serbian
+ LanguageCodeEntry {{}, {}, {}, {'k', 's', 'b'}}, // Shambala
+ LanguageCodeEntry {{'s', 'n'}, {'s', 'n', 'a'}, {'s', 'n', 'a'}, {'s', 'n', 'a'}}, // Shona
+ LanguageCodeEntry {{'i', 'i'}, {'i', 'i', 'i'}, {'i', 'i', 'i'}, {'i', 'i', 'i'}}, // Sichuan Yi
+ LanguageCodeEntry {{}, {'s', 'c', 'n'}, {'s', 'c', 'n'}, {'s', 'c', 'n'}}, // Sicilian
+ LanguageCodeEntry {{}, {'s', 'i', 'd'}, {'s', 'i', 'd'}, {'s', 'i', 'd'}}, // Sidamo
+ LanguageCodeEntry {{}, {}, {}, {'s', 'z', 'l'}}, // Silesian
+ LanguageCodeEntry {{'s', 'd'}, {'s', 'n', 'd'}, {'s', 'n', 'd'}, {'s', 'n', 'd'}}, // Sindhi
+ LanguageCodeEntry {{'s', 'i'}, {'s', 'i', 'n'}, {'s', 'i', 'n'}, {'s', 'i', 'n'}}, // Sinhala
+ LanguageCodeEntry {{}, {'s', 'm', 's'}, {'s', 'm', 's'}, {'s', 'm', 's'}}, // Skolt Sami
+ LanguageCodeEntry {{'s', 'k'}, {'s', 'l', 'o'}, {'s', 'l', 'k'}, {'s', 'l', 'k'}}, // Slovak
+ LanguageCodeEntry {{'s', 'l'}, {'s', 'l', 'v'}, {'s', 'l', 'v'}, {'s', 'l', 'v'}}, // Slovenian
+ LanguageCodeEntry {{}, {}, {}, {'x', 'o', 'g'}}, // Soga
+ LanguageCodeEntry {{'s', 'o'}, {'s', 'o', 'm'}, {'s', 'o', 'm'}, {'s', 'o', 'm'}}, // Somali
+ LanguageCodeEntry {{}, {}, {}, {'s', 'd', 'h'}}, // Southern Kurdish
+ LanguageCodeEntry {{}, {'s', 'm', 'a'}, {'s', 'm', 'a'}, {'s', 'm', 'a'}}, // Southern Sami
+ LanguageCodeEntry {{'s', 't'}, {'s', 'o', 't'}, {'s', 'o', 't'}, {'s', 'o', 't'}}, // Southern Sotho
+ LanguageCodeEntry {{'n', 'r'}, {'n', 'b', 'l'}, {'n', 'b', 'l'}, {'n', 'b', 'l'}}, // South Ndebele
+ LanguageCodeEntry {{'e', 's'}, {'s', 'p', 'a'}, {'s', 'p', 'a'}, {'s', 'p', 'a'}}, // Spanish
+ LanguageCodeEntry {{}, {'z', 'g', 'h'}, {'z', 'g', 'h'}, {'z', 'g', 'h'}}, // Standard Moroccan Tamazight
+ LanguageCodeEntry {{'s', 'u'}, {'s', 'u', 'n'}, {'s', 'u', 'n'}, {'s', 'u', 'n'}}, // Sundanese
+ LanguageCodeEntry {{'s', 'w'}, {'s', 'w', 'a'}, {'s', 'w', 'a'}, {'s', 'w', 'a'}}, // Swahili
+ LanguageCodeEntry {{'s', 's'}, {'s', 's', 'w'}, {'s', 's', 'w'}, {'s', 's', 'w'}}, // Swati
+ LanguageCodeEntry {{'s', 'v'}, {'s', 'w', 'e'}, {'s', 'w', 'e'}, {'s', 'w', 'e'}}, // Swedish
+ LanguageCodeEntry {{}, {'g', 's', 'w'}, {'g', 's', 'w'}, {'g', 's', 'w'}}, // Swiss German
+ LanguageCodeEntry {{}, {'s', 'y', 'r'}, {'s', 'y', 'r'}, {'s', 'y', 'r'}}, // Syriac
+ LanguageCodeEntry {{}, {}, {}, {'s', 'h', 'i'}}, // Tachelhit
+ LanguageCodeEntry {{'t', 'y'}, {'t', 'a', 'h'}, {'t', 'a', 'h'}, {'t', 'a', 'h'}}, // Tahitian
+ LanguageCodeEntry {{}, {}, {}, {'b', 'l', 't'}}, // Tai Dam
+ LanguageCodeEntry {{}, {}, {}, {'d', 'a', 'v'}}, // Taita
+ LanguageCodeEntry {{'t', 'g'}, {'t', 'g', 'k'}, {'t', 'g', 'k'}, {'t', 'g', 'k'}}, // Tajik
+ LanguageCodeEntry {{'t', 'a'}, {'t', 'a', 'm'}, {'t', 'a', 'm'}, {'t', 'a', 'm'}}, // Tamil
+ LanguageCodeEntry {{}, {}, {}, {'t', 'r', 'v'}}, // Taroko
+ LanguageCodeEntry {{}, {}, {}, {'t', 'w', 'q'}}, // Tasawaq
+ LanguageCodeEntry {{'t', 't'}, {'t', 'a', 't'}, {'t', 'a', 't'}, {'t', 'a', 't'}}, // Tatar
+ LanguageCodeEntry {{'t', 'e'}, {'t', 'e', 'l'}, {'t', 'e', 'l'}, {'t', 'e', 'l'}}, // Telugu
+ LanguageCodeEntry {{}, {}, {}, {'t', 'e', 'o'}}, // Teso
+ LanguageCodeEntry {{'t', 'h'}, {'t', 'h', 'a'}, {'t', 'h', 'a'}, {'t', 'h', 'a'}}, // Thai
+ LanguageCodeEntry {{'b', 'o'}, {'t', 'i', 'b'}, {'b', 'o', 'd'}, {'b', 'o', 'd'}}, // Tibetan
+ LanguageCodeEntry {{}, {'t', 'i', 'g'}, {'t', 'i', 'g'}, {'t', 'i', 'g'}}, // Tigre
+ LanguageCodeEntry {{'t', 'i'}, {'t', 'i', 'r'}, {'t', 'i', 'r'}, {'t', 'i', 'r'}}, // Tigrinya
+ LanguageCodeEntry {{}, {'t', 'k', 'l'}, {'t', 'k', 'l'}, {'t', 'k', 'l'}}, // Tokelau
+ LanguageCodeEntry {{}, {'t', 'p', 'i'}, {'t', 'p', 'i'}, {'t', 'p', 'i'}}, // Tok Pisin
+ LanguageCodeEntry {{'t', 'o'}, {'t', 'o', 'n'}, {'t', 'o', 'n'}, {'t', 'o', 'n'}}, // Tongan
+ LanguageCodeEntry {{'t', 's'}, {'t', 's', 'o'}, {'t', 's', 'o'}, {'t', 's', 'o'}}, // Tsonga
+ LanguageCodeEntry {{'t', 'n'}, {'t', 's', 'n'}, {'t', 's', 'n'}, {'t', 's', 'n'}}, // Tswana
+ LanguageCodeEntry {{'t', 'r'}, {'t', 'u', 'r'}, {'t', 'u', 'r'}, {'t', 'u', 'r'}}, // Turkish
+ LanguageCodeEntry {{'t', 'k'}, {'t', 'u', 'k'}, {'t', 'u', 'k'}, {'t', 'u', 'k'}}, // Turkmen
+ LanguageCodeEntry {{}, {'t', 'v', 'l'}, {'t', 'v', 'l'}, {'t', 'v', 'l'}}, // Tuvalu
+ LanguageCodeEntry {{}, {}, {}, {'k', 'c', 'g'}}, // Tyap
+ LanguageCodeEntry {{}, {'u', 'g', 'a'}, {'u', 'g', 'a'}, {'u', 'g', 'a'}}, // Ugaritic
+ LanguageCodeEntry {{'u', 'k'}, {'u', 'k', 'r'}, {'u', 'k', 'r'}, {'u', 'k', 'r'}}, // Ukrainian
+ LanguageCodeEntry {{}, {'h', 's', 'b'}, {'h', 's', 'b'}, {'h', 's', 'b'}}, // Upper Sorbian
+ LanguageCodeEntry {{'u', 'r'}, {'u', 'r', 'd'}, {'u', 'r', 'd'}, {'u', 'r', 'd'}}, // Urdu
+ LanguageCodeEntry {{'u', 'g'}, {'u', 'i', 'g'}, {'u', 'i', 'g'}, {'u', 'i', 'g'}}, // Uyghur
+ LanguageCodeEntry {{'u', 'z'}, {'u', 'z', 'b'}, {'u', 'z', 'b'}, {'u', 'z', 'b'}}, // Uzbek
+ LanguageCodeEntry {{}, {'v', 'a', 'i'}, {'v', 'a', 'i'}, {'v', 'a', 'i'}}, // Vai
+ LanguageCodeEntry {{'v', 'e'}, {'v', 'e', 'n'}, {'v', 'e', 'n'}, {'v', 'e', 'n'}}, // Venda
+ LanguageCodeEntry {{'v', 'i'}, {'v', 'i', 'e'}, {'v', 'i', 'e'}, {'v', 'i', 'e'}}, // Vietnamese
+ LanguageCodeEntry {{'v', 'o'}, {'v', 'o', 'l'}, {'v', 'o', 'l'}, {'v', 'o', 'l'}}, // Volapuk
+ LanguageCodeEntry {{}, {}, {}, {'v', 'u', 'n'}}, // Vunjo
+ LanguageCodeEntry {{'w', 'a'}, {'w', 'l', 'n'}, {'w', 'l', 'n'}, {'w', 'l', 'n'}}, // Walloon
+ LanguageCodeEntry {{}, {}, {}, {'w', 'a', 'e'}}, // Walser
+ LanguageCodeEntry {{}, {}, {}, {'w', 'b', 'p'}}, // Warlpiri
+ LanguageCodeEntry {{'c', 'y'}, {'w', 'e', 'l'}, {'c', 'y', 'm'}, {'c', 'y', 'm'}}, // Welsh
+ LanguageCodeEntry {{}, {}, {}, {'b', 'g', 'n'}}, // Western Balochi
+ LanguageCodeEntry {{'f', 'y'}, {'f', 'r', 'y'}, {'f', 'r', 'y'}, {'f', 'r', 'y'}}, // Western Frisian
+ LanguageCodeEntry {{}, {'w', 'a', 'l'}, {'w', 'a', 'l'}, {'w', 'a', 'l'}}, // Wolaytta
+ LanguageCodeEntry {{'w', 'o'}, {'w', 'o', 'l'}, {'w', 'o', 'l'}, {'w', 'o', 'l'}}, // Wolof
+ LanguageCodeEntry {{'x', 'h'}, {'x', 'h', 'o'}, {'x', 'h', 'o'}, {'x', 'h', 'o'}}, // Xhosa
+ LanguageCodeEntry {{}, {}, {}, {'y', 'a', 'v'}}, // Yangben
+ LanguageCodeEntry {{'y', 'i'}, {'y', 'i', 'd'}, {'y', 'i', 'd'}, {'y', 'i', 'd'}}, // Yiddish
+ LanguageCodeEntry {{'y', 'o'}, {'y', 'o', 'r'}, {'y', 'o', 'r'}, {'y', 'o', 'r'}}, // Yoruba
+ LanguageCodeEntry {{}, {}, {}, {'d', 'j', 'e'}}, // Zarma
+ LanguageCodeEntry {{'z', 'a'}, {'z', 'h', 'a'}, {'z', 'h', 'a'}, {'z', 'h', 'a'}}, // Zhuang
+ LanguageCodeEntry {{'z', 'u'}, {'z', 'u', 'l'}, {'z', 'u', 'l'}, {'z', 'u', 'l'}}, // Zulu
+ LanguageCodeEntry {{}, {}, {}, {'k', 'g', 'p'}}, // Kaingang
+ LanguageCodeEntry {{}, {}, {}, {'y', 'r', 'l'}}, // Nheengatu
+ LanguageCodeEntry {{}, {}, {}, {'b', 'g', 'c'}}, // Haryanvi
+ LanguageCodeEntry {{}, {'f', 'r', 'r'}, {'f', 'r', 'r'}, {'f', 'r', 'r'}}, // Northern Frisian
+ LanguageCodeEntry {{}, {'r', 'a', 'j'}, {'r', 'a', 'j'}, {'r', 'a', 'j'}}, // Rajasthani
+ LanguageCodeEntry {{}, {'m', 'd', 'f'}, {'m', 'd', 'f'}, {'m', 'd', 'f'}}, // Moksha
+ LanguageCodeEntry {{}, {}, {}, {'t', 'o', 'k'}}, // Toki Pona
+ LanguageCodeEntry {{}, {}, {}, {'p', 'i', 's'}}, // Pijin
+ LanguageCodeEntry {{}, {}, {}, {'a', 'n', 'n'}}, // Obolo
+ LanguageCodeEntry {{}, {'b', 'a', 'l'}, {'b', 'a', 'l'}, {'b', 'a', 'l'}}, // Baluchi
+ LanguageCodeEntry {{}, {}, {}, {'l', 'i', 'j'}}, // Ligurian
+ LanguageCodeEntry {{}, {}, {}, {'r', 'h', 'g'}}, // Rohingya
+ LanguageCodeEntry {{}, {}, {}, {'t', 'r', 'w'}}, // Torwali
+ LanguageCodeEntry {{}, {}, {}, {'b', 'l', 'o'}}, // Anii
+ LanguageCodeEntry {{}, {}, {}, {'x', 'n', 'r'}}, // Kangri
+ LanguageCodeEntry {{}, {}, {}, {'v', 'e', 'c'}}, // Venetian
+};
-static const unsigned char script_code_list[] =
+static constexpr unsigned char script_code_list[] =
"Zzzz" // AnyScript
+"Adlm" // Adlam
+"Ahom" // Ahom
+"Hluw" // Anatolian Hieroglyphs
"Arab" // Arabic
-"Cyrl" // Cyrillic
-"Dsrt" // Deseret
-"Guru" // Gurmukhi
-"Hans" // Simplified Han
-"Hant" // Traditional Han
-"Latn" // Latin
-"Mong" // Mongolian
-"Tfng" // Tifinagh
"Armn" // Armenian
-"Beng" // Bengali
-"Cher" // Cherokee
-"Deva" // Devanagari
-"Ethi" // Ethiopic
-"Geor" // Georgian
-"Grek" // Greek
-"Gujr" // Gujarati
-"Hebr" // Hebrew
-"Jpan" // Japanese
-"Khmr" // Khmer
-"Knda" // Kannada
-"Kore" // Korean
-"Laoo" // Lao
-"Mlym" // Malayalam
-"Mymr" // Myanmar
-"Orya" // Oriya
-"Taml" // Tamil
-"Telu" // Telugu
-"Thaa" // Thaana
-"Thai" // Thai
-"Tibt" // Tibetan
-"Sinh" // Sinhala
-"Syrc" // Syriac
-"Yiii" // Yi
-"Vaii" // Vai
"Avst" // Avestan
"Bali" // Balinese
"Bamu" // Bamum
+"Beng" // Bangla
+"Bass" // Bassa Vah
"Batk" // Batak
+"Bhks" // Bhaiksuki
"Bopo" // Bopomofo
"Brah" // Brahmi
+"Brai" // Braille
"Bugi" // Buginese
"Buhd" // Buhid
"Cans" // Canadian Aboriginal
"Cari" // Carian
+"Aghb" // Caucasian Albanian
"Cakm" // Chakma
"Cham" // Cham
+"Cher" // Cherokee
"Copt" // Coptic
+"Xsux" // Cuneiform
"Cprt" // Cypriot
-"Egyp" // Egyptian Hieroglyphs
+"Cyrl" // Cyrillic
+"Dsrt" // Deseret
+"Deva" // Devanagari
+"Dupl" // Duployan
+"Egyp" // Egyptian hieroglyphs
+"Elba" // Elbasan
+"Ethi" // Ethiopic
"Lisu" // Fraser
+"Geor" // Georgian
"Glag" // Glagolitic
"Goth" // Gothic
-"Hani" // Han
+"Gran" // Grantha
+"Grek" // Greek
+"Gujr" // Gujarati
+"Guru" // Gurmukhi
"Hang" // Hangul
+"Hani" // Han
"Hano" // Hanunoo
+"Hanb" // Han with Bopomofo
+"Hatr" // Hatran
+"Hebr" // Hebrew
+"Hira" // Hiragana
"Armi" // Imperial Aramaic
"Phli" // Inscriptional Pahlavi
"Prti" // Inscriptional Parthian
+"Jamo" // Jamo
+"Jpan" // Japanese
"Java" // Javanese
"Kthi" // Kaithi
+"Knda" // Kannada
"Kana" // Katakana
"Kali" // Kayah Li
"Khar" // Kharoshthi
+"Khmr" // Khmer
+"Khoj" // Khojki
+"Sind" // Khudawadi
+"Kore" // Korean
"Lana" // Lanna
+"Laoo" // Lao
+"Latn" // Latin
"Lepc" // Lepcha
"Limb" // Limbu
+"Lina" // Linear A
"Linb" // Linear B
"Lyci" // Lycian
"Lydi" // Lydian
+"Mahj" // Mahajani
+"Mlym" // Malayalam
"Mand" // Mandaean
+"Mani" // Manichaean
+"Marc" // Marchen
"Mtei" // Meitei Mayek
-"Mero" // Meroitic
+"Mend" // Mende
"Merc" // Meroitic Cursive
-"Nkoo" // Nko
+"Mero" // Meroitic
+"Modi" // Modi
+"Mong" // Mongolian
+"Mroo" // Mro
+"Mult" // Multani
+"Mymr" // Myanmar
+"Nbat" // Nabataean
+"Newa" // Newa
"Talu" // New Tai Lue
+"Nkoo" // Nko
+"Orya" // Odia
"Ogam" // Ogham
"Olck" // Ol Chiki
+"Hung" // Old Hungarian
"Ital" // Old Italic
+"Narb" // Old North Arabian
+"Perm" // Old Permic
"Xpeo" // Old Persian
"Sarb" // Old South Arabian
"Orkh" // Orkhon
+"Osge" // Osage
"Osma" // Osmanya
-"Phag" // Phags Pa
+"Hmng" // Pahawh Hmong
+"Palm" // Palmyrene
+"Pauc" // Pau Cin Hau
+"Phag" // Phags-pa
"Phnx" // Phoenician
"Plrd" // Pollard Phonetic
+"Phlp" // Psalter Pahlavi
"Rjng" // Rejang
"Runr" // Runic
"Samr" // Samaritan
"Saur" // Saurashtra
"Shrd" // Sharada
"Shaw" // Shavian
+"Sidd" // Siddham
+"Sgnw" // SignWriting
+"Hans" // Simplified Han
+"Sinh" // Sinhala
"Sora" // Sora Sompeng
-"Xsux" // Cuneiform
"Sund" // Sundanese
"Sylo" // Syloti Nagri
+"Syrc" // Syriac
"Tglg" // Tagalog
"Tagb" // Tagbanwa
"Tale" // Tai Le
"Tavt" // Tai Viet
"Takr" // Takri
-"Ugar" // Ugaritic
-"Brai" // Braille
-"Hira" // Hiragana
-"Aghb" // Caucasian Albanian
-"Bass" // Bassa Vah
-"Dupl" // Duployan
-"Elba" // Elbasan
-"Gran" // Grantha
-"Hmng" // Pahawh Hmong
-"Khoj" // Khojki
-"Lina" // Linear A
-"Mahj" // Mahajani
-"Mani" // Manichaean
-"Mend" // Mende Kikakui
-"Modi" // Modi
-"Mroo" // Mro
-"Narb" // Old North Arabian
-"Nbat" // Nabataean
-"Palm" // Palmyrene
-"Pauc" // Pau Cin Hau
-"Perm" // Old Permic
-"Phlp" // Psalter Pahlavi
-"Sidd" // Siddham
-"Sind" // Khudawadi
+"Taml" // Tamil
+"Tang" // Tangut
+"Telu" // Telugu
+"Thaa" // Thaana
+"Thai" // Thai
+"Tibt" // Tibetan
+"Tfng" // Tifinagh
"Tirh" // Tirhuta
+"Hant" // Traditional Han
+"Ugar" // Ugaritic
+"Vaii" // Vai
"Wara" // Varang Kshiti
-"Ahom" // Ahom
-"Hluw" // Anatolian Hieroglyphs
-"Hatr" // Hatran
-"Mult" // Multani
-"Hung" // Old Hungarian
-"Sgnw" // Sign Writing
-"Adlm" // Adlam
-"Bhks" // Bhaiksuki
-"Marc" // Marchen
-"Newa" // Newa
-"Osge" // Osage
-"Tang" // Tangut
-"Hanb" // Han with Bopomofo
-"Jamo" // Jamo
+"Yiii" // Yi
+"Rohg" // Hanifi
;
-static const unsigned char country_code_list[] =
-"ZZ\0" // AnyCountry
+static constexpr unsigned char territory_code_list[] =
+"ZZ\0" // AnyTerritory
"AF\0" // Afghanistan
+"AX\0" // Aland Islands
"AL\0" // Albania
"DZ\0" // Algeria
"AS\0" // American Samoa
@@ -6548,10 +8213,11 @@ static const unsigned char country_code_list[] =
"AO\0" // Angola
"AI\0" // Anguilla
"AQ\0" // Antarctica
-"AG\0" // Antigua And Barbuda
+"AG\0" // Antigua and Barbuda
"AR\0" // Argentina
"AM\0" // Armenia
"AW\0" // Aruba
+"AC\0" // Ascension Island
"AU\0" // Australia
"AT\0" // Austria
"AZ\0" // Azerbaijan
@@ -6566,11 +8232,12 @@ static const unsigned char country_code_list[] =
"BM\0" // Bermuda
"BT\0" // Bhutan
"BO\0" // Bolivia
-"BA\0" // Bosnia And Herzegowina
+"BA\0" // Bosnia and Herzegovina
"BW\0" // Botswana
"BV\0" // Bouvet Island
"BR\0" // Brazil
"IO\0" // British Indian Ocean Territory
+"VG\0" // British Virgin Islands
"BN\0" // Brunei
"BG\0" // Bulgaria
"BF\0" // Burkina Faso
@@ -6578,43 +8245,49 @@ static const unsigned char country_code_list[] =
"KH\0" // Cambodia
"CM\0" // Cameroon
"CA\0" // Canada
+"IC\0" // Canary Islands
"CV\0" // Cape Verde
+"BQ\0" // Caribbean Netherlands
"KY\0" // Cayman Islands
"CF\0" // Central African Republic
+"EA\0" // Ceuta and Melilla
"TD\0" // Chad
"CL\0" // Chile
"CN\0" // China
"CX\0" // Christmas Island
+"CP\0" // Clipperton Island
"CC\0" // Cocos Islands
"CO\0" // Colombia
"KM\0" // Comoros
-"CD\0" // Congo Kinshasa
-"CG\0" // Congo Brazzaville
+"CG\0" // Congo - Brazzaville
+"CD\0" // Congo - Kinshasa
"CK\0" // Cook Islands
"CR\0" // Costa Rica
-"CI\0" // Ivory Coast
"HR\0" // Croatia
"CU\0" // Cuba
+"CW\0" // Curacao
"CY\0" // Cyprus
-"CZ\0" // Czech Republic
+"CZ\0" // Czechia
"DK\0" // Denmark
+"DG\0" // Diego Garcia
"DJ\0" // Djibouti
"DM\0" // Dominica
"DO\0" // Dominican Republic
-"TL\0" // East Timor
"EC\0" // Ecuador
"EG\0" // Egypt
"SV\0" // El Salvador
"GQ\0" // Equatorial Guinea
"ER\0" // Eritrea
"EE\0" // Estonia
+"SZ\0" // Eswatini
"ET\0" // Ethiopia
+"150" // Europe
+"EU\0" // European Union
"FK\0" // Falkland Islands
"FO\0" // Faroe Islands
"FJ\0" // Fiji
"FI\0" // Finland
"FR\0" // France
-"GG\0" // Guernsey
"GF\0" // French Guiana
"PF\0" // French Polynesia
"TF\0" // French Southern Territories
@@ -6630,11 +8303,12 @@ static const unsigned char country_code_list[] =
"GP\0" // Guadeloupe
"GU\0" // Guam
"GT\0" // Guatemala
+"GG\0" // Guernsey
+"GW\0" // Guinea-Bissau
"GN\0" // Guinea
-"GW\0" // Guinea Bissau
"GY\0" // Guyana
"HT\0" // Haiti
-"HM\0" // Heard And McDonald Islands
+"HM\0" // Heard and McDonald Islands
"HN\0" // Honduras
"HK\0" // Hong Kong
"HU\0" // Hungary
@@ -6644,19 +8318,22 @@ static const unsigned char country_code_list[] =
"IR\0" // Iran
"IQ\0" // Iraq
"IE\0" // Ireland
+"IM\0" // Isle of Man
"IL\0" // Israel
"IT\0" // Italy
+"CI\0" // Ivory Coast
"JM\0" // Jamaica
"JP\0" // Japan
+"JE\0" // Jersey
"JO\0" // Jordan
"KZ\0" // Kazakhstan
"KE\0" // Kenya
"KI\0" // Kiribati
-"KP\0" // North Korea
-"KR\0" // South Korea
+"XK\0" // Kosovo
"KW\0" // Kuwait
"KG\0" // Kyrgyzstan
"LA\0" // Laos
+"419" // Latin America
"LV\0" // Latvia
"LB\0" // Lebanon
"LS\0" // Lesotho
@@ -6665,7 +8342,7 @@ static const unsigned char country_code_list[] =
"LI\0" // Liechtenstein
"LT\0" // Lithuania
"LU\0" // Luxembourg
-"MO\0" // Macau
+"MO\0" // Macao
"MK\0" // Macedonia
"MG\0" // Madagascar
"MW\0" // Malawi
@@ -6683,6 +8360,7 @@ static const unsigned char country_code_list[] =
"MD\0" // Moldova
"MC\0" // Monaco
"MN\0" // Mongolia
+"ME\0" // Montenegro
"MS\0" // Montserrat
"MA\0" // Morocco
"MZ\0" // Mozambique
@@ -6691,17 +8369,18 @@ static const unsigned char country_code_list[] =
"NR\0" // Nauru
"NP\0" // Nepal
"NL\0" // Netherlands
-"CW\0" // Cura Sao
"NC\0" // New Caledonia
"NZ\0" // New Zealand
"NI\0" // Nicaragua
-"NE\0" // Niger
"NG\0" // Nigeria
+"NE\0" // Niger
"NU\0" // Niue
"NF\0" // Norfolk Island
"MP\0" // Northern Mariana Islands
+"KP\0" // North Korea
"NO\0" // Norway
"OM\0" // Oman
+"QO\0" // Outlying Oceania
"PK\0" // Pakistan
"PW\0" // Palau
"PS\0" // Palestinian Territories
@@ -6719,31 +8398,36 @@ static const unsigned char country_code_list[] =
"RO\0" // Romania
"RU\0" // Russia
"RW\0" // Rwanda
-"KN\0" // Saint Kitts And Nevis
+"BL\0" // Saint Barthelemy
+"SH\0" // Saint Helena
+"KN\0" // Saint Kitts and Nevis
"LC\0" // Saint Lucia
-"VC\0" // Saint Vincent And The Grenadines
+"MF\0" // Saint Martin
+"PM\0" // Saint Pierre and Miquelon
+"VC\0" // Saint Vincent and Grenadines
"WS\0" // Samoa
"SM\0" // San Marino
-"ST\0" // Sao Tome And Principe
+"ST\0" // Sao Tome and Principe
"SA\0" // Saudi Arabia
"SN\0" // Senegal
+"RS\0" // Serbia
"SC\0" // Seychelles
"SL\0" // Sierra Leone
"SG\0" // Singapore
+"SX\0" // Sint Maarten
"SK\0" // Slovakia
"SI\0" // Slovenia
"SB\0" // Solomon Islands
"SO\0" // Somalia
"ZA\0" // South Africa
-"GS\0" // South Georgia And The South Sandwich Islands
+"GS\0" // South Georgia and South Sandwich Islands
+"KR\0" // South Korea
+"SS\0" // South Sudan
"ES\0" // Spain
"LK\0" // Sri Lanka
-"SH\0" // Saint Helena
-"PM\0" // Saint Pierre And Miquelon
"SD\0" // Sudan
"SR\0" // Suriname
-"SJ\0" // Svalbard And Jan Mayen Islands
-"SZ\0" // Swaziland
+"SJ\0" // Svalbard and Jan Mayen
"SE\0" // Sweden
"CH\0" // Switzerland
"SY\0" // Syria
@@ -6751,56 +8435,36 @@ static const unsigned char country_code_list[] =
"TJ\0" // Tajikistan
"TZ\0" // Tanzania
"TH\0" // Thailand
+"TL\0" // Timor-Leste
"TG\0" // Togo
"TK\0" // Tokelau
"TO\0" // Tonga
-"TT\0" // Trinidad And Tobago
+"TT\0" // Trinidad and Tobago
+"TA\0" // Tristan da Cunha
"TN\0" // Tunisia
"TR\0" // Turkey
"TM\0" // Turkmenistan
-"TC\0" // Turks And Caicos Islands
+"TC\0" // Turks and Caicos Islands
"TV\0" // Tuvalu
"UG\0" // Uganda
"UA\0" // Ukraine
"AE\0" // United Arab Emirates
"GB\0" // United Kingdom
+"UM\0" // United States Outlying Islands
"US\0" // United States
-"UM\0" // United States Minor Outlying Islands
+"VI\0" // United States Virgin Islands
"UY\0" // Uruguay
"UZ\0" // Uzbekistan
"VU\0" // Vanuatu
-"VA\0" // Vatican City State
+"VA\0" // Vatican City
"VE\0" // Venezuela
"VN\0" // Vietnam
-"VG\0" // British Virgin Islands
-"VI\0" // United States Virgin Islands
-"WF\0" // Wallis And Futuna Islands
+"WF\0" // Wallis and Futuna
"EH\0" // Western Sahara
+"001" // world
"YE\0" // Yemen
-"IC\0" // Canary Islands
"ZM\0" // Zambia
"ZW\0" // Zimbabwe
-"CP\0" // Clipperton Island
-"ME\0" // Montenegro
-"RS\0" // Serbia
-"BL\0" // Saint Barthelemy
-"MF\0" // Saint Martin
-"419" // Latin America
-"AC\0" // Ascension Island
-"AX\0" // Aland Islands
-"DG\0" // Diego Garcia
-"EA\0" // Ceuta And Melilla
-"IM\0" // Isle Of Man
-"JE\0" // Jersey
-"TA\0" // Tristan Da Cunha
-"SS\0" // South Sudan
-"BQ\0" // Bonaire
-"SX\0" // Sint Maarten
-"XK\0" // Kosovo
-"EU\0" // European Union
-"QO\0" // Outlying Oceania
-"001" // World
-"150" // Europe
;
// GENERATED PART ENDS HERE
diff --git a/src/corelib/text/qlocale_icu.cpp b/src/corelib/text/qlocale_icu.cpp
index afe0aae583..55231286a0 100644
--- a/src/corelib/text/qlocale_icu.cpp
+++ b/src/corelib/text/qlocale_icu.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qglobal.h"
#include "qdebug.h"
diff --git a/src/corelib/text/qlocale_mac.mm b/src/corelib/text/qlocale_mac.mm
index 586b68b4d8..89339be2eb 100644
--- a/src/corelib/text/qlocale_mac.mm
+++ b/src/corelib/text/qlocale_mac.mm
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qlocale_p.h"
@@ -43,49 +7,71 @@
#include "qvariant.h"
#include "qdatetime.h"
+#include "private/qstringiterator_p.h"
+#include "private/qgregoriancalendar_p.h"
#ifdef Q_OS_DARWIN
#include "private/qcore_mac_p.h"
#include <CoreFoundation/CoreFoundation.h>
#endif
+#include <QtCore/qloggingcategory.h>
+#include <QtCore/qcoreapplication.h>
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/******************************************************************************
** Wrappers for Mac locale system functions
*/
-static QByteArray envVarLocale()
+Q_LOGGING_CATEGORY(lcLocale, "qt.core.locale")
+
+static void printLocalizationInformation()
{
- QByteArray
-#ifdef Q_OS_UNIX
- lang = qgetenv("LC_ALL");
- if (lang.isEmpty())
- lang = qgetenv("LC_NUMERIC");
- if (lang.isEmpty())
+ if (!lcLocale().isDebugEnabled())
+ return;
+
+#if defined(Q_OS_MACOS)
+ // Trigger initialization of standard user defaults, so that Foundation picks
+ // up -AppleLanguages and -AppleLocale passed on the command line.
+ Q_UNUSED(NSUserDefaults.standardUserDefaults);
#endif
- lang = qgetenv("LANG");
- return lang;
+
+ auto singleLineDescription = [](NSArray *array) {
+ NSString *str = [array description];
+ str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];
+ return [str stringByReplacingOccurrencesOfString:@" " withString:@""];
+ };
+
+ bool allowMixedLocalizations = [NSBundle.mainBundle.infoDictionary[@"CFBundleAllowMixedLocalizations"] boolValue];
+
+ NSBundle *foundation = [NSBundle bundleForClass:NSBundle.class];
+ qCDebug(lcLocale).nospace() << "Launched with locale \"" << NSLocale.currentLocale.localeIdentifier
+ << "\" based on user's preferred languages " << singleLineDescription(NSLocale.preferredLanguages)
+ << ", main bundle localizations " << singleLineDescription(NSBundle.mainBundle.localizations)
+ << ", and allowing mixed localizations " << allowMixedLocalizations
+ << "; resulting in main bundle preferred localizations "
+ << singleLineDescription(NSBundle.mainBundle.preferredLocalizations)
+ << " and Foundation preferred localizations "
+ << singleLineDescription(foundation.preferredLocalizations);
+ qCDebug(lcLocale) << "Reflected by Qt as system locale"
+ << QLocale::system() << "with UI languges " << QLocale::system().uiLanguages();
}
+Q_COREAPP_STARTUP_FUNCTION(printLocalizationInformation);
static QString getMacLocaleName()
{
- QString result = QString::fromLocal8Bit(envVarLocale());
-
- QString lang, script, cntry;
- if (result.isEmpty()
- || (result != QLatin1String("C") && !qt_splitLocaleName(result, lang, script, cntry))) {
- QCFType<CFLocaleRef> l = CFLocaleCopyCurrent();
- CFStringRef locale = CFLocaleGetIdentifier(l);
- result = QString::fromCFString(locale);
- }
- return result;
+ QCFType<CFLocaleRef> l = CFLocaleCopyCurrent();
+ CFStringRef locale = CFLocaleGetIdentifier(l);
+ return QString::fromCFString(locale);
}
-static QString macMonthName(int month, QSystemLocale::QueryType type)
+static QVariant macMonthName(int month, QSystemLocale::QueryType type)
{
month -= 1;
if (month < 0 || month > 11)
- return QString();
+ return {};
QCFType<CFDateFormatterRef> formatter
= CFDateFormatterCreate(0, QCFType<CFLocaleRef>(CFLocaleCopyCurrent()),
@@ -99,15 +85,21 @@ static QString macMonthName(int month, QSystemLocale::QueryType type)
case QSystemLocale::MonthNameShort:
formatterType = kCFDateFormatterShortMonthSymbols;
break;
+ case QSystemLocale::MonthNameNarrow:
+ formatterType = kCFDateFormatterVeryShortMonthSymbols;
+ break;
case QSystemLocale::StandaloneMonthNameLong:
formatterType = kCFDateFormatterStandaloneMonthSymbols;
break;
case QSystemLocale::StandaloneMonthNameShort:
formatterType = kCFDateFormatterShortStandaloneMonthSymbols;
break;
+ case QSystemLocale::StandaloneMonthNameNarrow:
+ formatterType = kCFDateFormatterVeryShortStandaloneMonthSymbols;
+ break;
default:
qWarning("macMonthName: Unsupported query type %d", type);
- return QString();
+ return {};
}
QCFType<CFArrayRef> values
= static_cast<CFArrayRef>(CFDateFormatterCopyProperty(formatter, formatterType));
@@ -116,40 +108,188 @@ static QString macMonthName(int month, QSystemLocale::QueryType type)
CFStringRef cfstring = static_cast<CFStringRef>(CFArrayGetValueAtIndex(values, month));
return QString::fromCFString(cfstring);
}
- return QString();
+ return {};
}
-static QString macDayName(int day, bool short_format)
+static QVariant macDayName(int day, QSystemLocale::QueryType type)
{
if (day < 1 || day > 7)
- return QString();
+ return {};
QCFType<CFDateFormatterRef> formatter
= CFDateFormatterCreate(0, QCFType<CFLocaleRef>(CFLocaleCopyCurrent()),
kCFDateFormatterNoStyle, kCFDateFormatterNoStyle);
- QCFType<CFArrayRef> values = static_cast<CFArrayRef>(CFDateFormatterCopyProperty(formatter,
- short_format ? kCFDateFormatterShortWeekdaySymbols
- : kCFDateFormatterWeekdaySymbols));
+
+ CFDateFormatterKey formatterType;
+ switch (type) {
+ case QSystemLocale::DayNameLong:
+ formatterType = kCFDateFormatterWeekdaySymbols;
+ break;
+ case QSystemLocale::DayNameShort:
+ formatterType = kCFDateFormatterShortWeekdaySymbols;
+ break;
+ case QSystemLocale::DayNameNarrow:
+ formatterType = kCFDateFormatterVeryShortWeekdaySymbols;
+ break;
+ case QSystemLocale::StandaloneDayNameLong:
+ formatterType = kCFDateFormatterStandaloneWeekdaySymbols;
+ break;
+ case QSystemLocale::StandaloneDayNameShort:
+ formatterType = kCFDateFormatterShortStandaloneWeekdaySymbols;
+ break;
+ case QSystemLocale::StandaloneDayNameNarrow:
+ formatterType = kCFDateFormatterVeryShortStandaloneWeekdaySymbols;
+ break;
+ default:
+ qWarning("macDayName: Unsupported query type %d", type);
+ return {};
+ }
+ QCFType<CFArrayRef> values =
+ static_cast<CFArrayRef>(CFDateFormatterCopyProperty(formatter, formatterType));
+
if (values != 0) {
CFStringRef cfstring = static_cast<CFStringRef>(CFArrayGetValueAtIndex(values, day % 7));
return QString::fromCFString(cfstring);
}
- return QString();
+ return {};
+}
+
+static QString macZeroDigit()
+{
+ static QString cachedZeroDigit;
+
+ if (cachedZeroDigit.isNull()) {
+ QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
+ QCFType<CFNumberFormatterRef> numberFormatter =
+ CFNumberFormatterCreate(nullptr, locale, kCFNumberFormatterNoStyle);
+ const int zeroDigit = 0;
+ QCFType<CFStringRef> value
+ = CFNumberFormatterCreateStringWithValue(nullptr, numberFormatter,
+ kCFNumberIntType, &zeroDigit);
+ cachedZeroDigit = QString::fromCFString(value);
+ }
+
+ static QMacNotificationObserver localeChangeObserver = QMacNotificationObserver(
+ nil, NSCurrentLocaleDidChangeNotification, [&] {
+ qCDebug(lcLocale) << "System locale changed";
+ cachedZeroDigit = QString();
+ });
+
+ return cachedZeroDigit;
+}
+
+static QString zeroPad(QString &&number, qsizetype minDigits, const QString &zero)
+{
+ // Need to pad with zeros, possibly after a sign.
+ qsizetype insert = -1, digits = 0;
+ auto it = QStringIterator(number);
+ while (it.hasNext()) {
+ qsizetype here = it.index();
+ if (QChar::isDigit(it.next())) {
+ if (insert < 0)
+ insert = here;
+ ++digits;
+ } // else: assume we're stepping over a sign (or maybe grouping separator)
+ }
+ Q_ASSERT(digits > 0);
+ Q_ASSERT(insert >= 0);
+ while (digits++ < minDigits)
+ number.insert(insert, zero);
+
+ return std::move(number);
+}
+
+static QString trimTwoDigits(QString &&number)
+{
+ // Retain any sign, but remove all but the last two digits.
+ // We know number has at least four digits - it came from fourDigitYear().
+ // Note that each digit might be a surrogate pair.
+ qsizetype first = -1, prev = -1, last = -1;
+ auto it = QStringIterator(number);
+ while (it.hasNext()) {
+ qsizetype here = it.index();
+ if (QChar::isDigit(it.next())) {
+ if (first == -1)
+ last = first = here;
+ else if (last != -1)
+ prev = std::exchange(last, here);
+ }
+ }
+ Q_ASSERT(first >= 0);
+ Q_ASSERT(prev > first);
+ Q_ASSERT(last > prev);
+ number.remove(first, prev - first);
+ return std::move(number);
+}
+
+static QString fourDigitYear(int year, const QString &zero)
+{
+ // Return year formatted as an (at least) four digit number:
+ QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
+ QCFType<CFNumberFormatterRef> numberFormatter =
+ CFNumberFormatterCreate(nullptr, locale, kCFNumberFormatterNoStyle);
+ QCFType<CFStringRef> value = CFNumberFormatterCreateStringWithValue(nullptr, numberFormatter,
+ kCFNumberIntType, &year);
+ auto text = QString::fromCFString(value);
+ if (year > -1000 && year < 1000)
+ text = zeroPad(std::move(text), 4, zero);
+ return text;
}
-static QString macDateToString(QDate date, bool short_format)
+static QString macDateToStringImpl(QDate date, CFDateFormatterStyle style)
{
- QCFType<CFDateRef> myDate = QDateTime(date, QTime()).toCFDate();
+ // Use noon on the given date, to avoid complications that can arise for
+ // dates before 1900 (see QTBUG-54955) using different UTC offset than
+ // QDateTime extrapolates backwards from time_t functions that only work
+ // back to 1900. (Alaska and Phillipines may still be borked, though.)
+ QCFType<CFDateRef> myDate = QDateTime(date, QTime(12, 0)).toCFDate();
QCFType<CFLocaleRef> mylocale = CFLocaleCopyCurrent();
- CFDateFormatterStyle style = short_format ? kCFDateFormatterShortStyle : kCFDateFormatterLongStyle;
QCFType<CFDateFormatterRef> myFormatter
- = CFDateFormatterCreate(kCFAllocatorDefault,
- mylocale, style,
+ = CFDateFormatterCreate(kCFAllocatorDefault, mylocale, style,
kCFDateFormatterNoStyle);
- return QCFString(CFDateFormatterCreateStringWithDate(0, myFormatter, myDate));
+ QCFType<CFStringRef> text = CFDateFormatterCreateStringWithDate(nullptr, myFormatter, myDate);
+ return QString::fromCFString(text);
+}
+
+static QVariant macDateToString(QDate date, bool short_format)
+{
+ const int year = date.year();
+ QString fakeYear, trueYear;
+ if (year < 1583) {
+ // System API (in macOS 11.0, at least) discards sign :-(
+ // Simply negating the year won't do as the resulting year typically has
+ // a different pattern of week-days.
+ // Furthermore (see QTBUG-54955), Darwin uses the Julian calendar for
+ // dates before 1582-10-15, leading to discrepancies.
+ int matcher = QGregorianCalendar::yearSharingWeekDays(date);
+ Q_ASSERT(matcher >= 1583);
+ Q_ASSERT(matcher % 100 != date.month());
+ Q_ASSERT(matcher % 100 != date.day());
+ // i.e. there can't be any confusion between the two-digit year and
+ // month or day-of-month in the formatted date.
+ QString zero = macZeroDigit();
+ fakeYear = fourDigitYear(matcher, zero);
+ trueYear = fourDigitYear(year, zero);
+ date = QDate(matcher, date.month(), date.day());
+ }
+ QString text = macDateToStringImpl(date, short_format
+ ? kCFDateFormatterShortStyle
+ : kCFDateFormatterLongStyle);
+ if (year < 1583) {
+ if (text.contains(fakeYear))
+ return std::move(text).replace(fakeYear, trueYear);
+ // Cope with two-digit year:
+ fakeYear = trimTwoDigits(std::move(fakeYear));
+ trueYear = trimTwoDigits(std::move(trueYear));
+ if (text.contains(fakeYear))
+ return std::move(text).replace(fakeYear, trueYear);
+ // That should have worked.
+ qWarning("Failed to fix up year when formatting a date in year %d", year);
+ }
+ return text;
}
-static QString macTimeToString(QTime time, bool short_format)
+static QVariant macTimeToString(QTime time, bool short_format)
{
QCFType<CFDateRef> myDate = QDateTime(QDate::currentDate(), time).toCFDate();
QCFType<CFLocaleRef> mylocale = CFLocaleCopyCurrent();
@@ -158,7 +298,8 @@ static QString macTimeToString(QTime time, bool short_format)
mylocale,
kCFDateFormatterNoStyle,
style);
- return QCFString(CFDateFormatterCreateStringWithDate(0, myFormatter, myDate));
+ QCFType<CFStringRef> text = CFDateFormatterCreateStringWithDate(0, myFormatter, myDate);
+ return QString::fromCFString(text);
}
// Mac uses the Unicode CLDR format codes
@@ -166,126 +307,132 @@ static QString macTimeToString(QTime time, bool short_format)
// See also qtbase/util/locale_database/dateconverter.py
// Makes the assumption that input formats are always well formed and consecutive letters
// never exceed the maximum for the format code.
-static QString macToQtFormat(QStringView sys_fmt)
+static QVariant macToQtFormat(QStringView sys_fmt)
{
QString result;
- int i = 0;
+ qsizetype i = 0;
while (i < sys_fmt.size()) {
if (sys_fmt.at(i).unicode() == '\'') {
QString text = qt_readEscapedFormatString(sys_fmt, &i);
- if (text == QLatin1String("'"))
- result += QLatin1String("''");
+ if (text == "'"_L1)
+ result += "''"_L1;
else
- result += QLatin1Char('\'') + text + QLatin1Char('\'');
+ result += u'\'' + text + u'\'';
continue;
}
QChar c = sys_fmt.at(i);
- int repeat = qt_repeatCount(sys_fmt.mid(i));
+ qsizetype repeat = qt_repeatCount(sys_fmt.sliced(i));
switch (c.unicode()) {
// Qt does not support the following options
- case 'G': // Era (1..5): 4 = long, 1..3 = short, 5 = narrow
- case 'Y': // Year of Week (1..n): 1..n = padded number
- case 'U': // Cyclic Year Name (1..5): 4 = long, 1..3 = short, 5 = narrow
- case 'Q': // Quarter (1..4): 4 = long, 3 = short, 1..2 = padded number
- case 'q': // Standalone Quarter (1..4): 4 = long, 3 = short, 1..2 = padded number
- case 'w': // Week of Year (1..2): 1..2 = padded number
- case 'W': // Week of Month (1): 1 = number
- case 'D': // Day of Year (1..3): 1..3 = padded number
- case 'F': // Day of Week in Month (1): 1 = number
- case 'g': // Modified Julian Day (1..n): 1..n = padded number
- case 'A': // Milliseconds in Day (1..n): 1..n = padded number
- break;
-
- case 'y': // Year (1..n): 2 = short year, 1 & 3..n = padded number
- case 'u': // Extended Year (1..n): 2 = short year, 1 & 3..n = padded number
- // Qt only supports long (4) or short (2) year, use long for all others
- if (repeat == 2)
- result += QLatin1String("yy");
- else
- result += QLatin1String("yyyy");
- break;
- case 'M': // Month (1..5): 4 = long, 3 = short, 1..2 = number, 5 = narrow
- case 'L': // Standalone Month (1..5): 4 = long, 3 = short, 1..2 = number, 5 = narrow
- // Qt only supports long, short and number, use short for narrow
- if (repeat == 5)
- result += QLatin1String("MMM");
- else
- result += QString(repeat, QLatin1Char('M'));
- break;
- case 'd': // Day of Month (1..2): 1..2 padded number
- result += QString(repeat, c);
- break;
- case 'E': // Day of Week (1..6): 4 = long, 1..3 = short, 5..6 = narrow
- // Qt only supports long, short and padded number, use short for narrow
- if (repeat == 4)
- result += QLatin1String("dddd");
- else
- result += QLatin1String("ddd");
- break;
- case 'e': // Local Day of Week (1..6): 4 = long, 3 = short, 5..6 = narrow, 1..2 padded number
- case 'c': // Standalone Local Day of Week (1..6): 4 = long, 3 = short, 5..6 = narrow, 1..2 padded number
- // Qt only supports long, short and padded number, use short for narrow
- if (repeat >= 5)
- result += QLatin1String("ddd");
- else
- result += QString(repeat, QLatin1Char('d'));
- break;
- case 'a': // AM/PM (1): 1 = short
- // Translate to Qt uppercase AM/PM
- result += QLatin1String("AP");
- break;
- case 'h': // Hour [1..12] (1..2): 1..2 = padded number
- case 'K': // Hour [0..11] (1..2): 1..2 = padded number
- case 'j': // Local Hour [12 or 24] (1..2): 1..2 = padded number
- // Qt h is local hour
- result += QString(repeat, QLatin1Char('h'));
- break;
- case 'H': // Hour [0..23] (1..2): 1..2 = padded number
- case 'k': // Hour [1..24] (1..2): 1..2 = padded number
- // Qt H is 0..23 hour
- result += QString(repeat, QLatin1Char('H'));
- break;
- case 'm': // Minutes (1..2): 1..2 = padded number
- case 's': // Seconds (1..2): 1..2 = padded number
+ case 'A': // Milliseconds in Day (1..n): 1..n = padded number
+ case 'C': // Input skeleton symbol.
+ case 'D': // Day of Year (1..3): 1..3 = padded number
+ case 'F': // Day of Week in Month (1): 1 = number
+ case 'g': // Modified Julian Day (1..n): 1..n = padded number
+ case 'G': // Era (1..5): 4 = long, 1..3 = short, 5 = narrow
+ case 'j': // Input skeleton symbol.
+ case 'J': // Input skeleton symbol.
+ case 'l': // Deprecated Chinese leap month indicator.
+ case 'q': // Standalone Quarter (1..4): 4 = long, 3 = short, 1,2 = padded number
+ case 'Q': // Quarter (1..4): 4 = long, 3 = short, 1,2 = padded number
+ case 'U': // Cyclic Year Name (1..5): 4 = long, 1..3 = short, 5 = narrow
+ case 'w': // Week of Year (1,2): 1,2 = padded number
+ case 'W': // Week of Month (1): 1 = number
+ case 'Y': // Year for Week-of-year calendars (1..n): 1..n = padded number
+ break;
+
+ case 'u': // Extended Year (1..n), padded number.
+ // Explicitly has no special case for 'uu' as only the last two digits.
+ result += "yyyy"_L1;
+ break;
+ case 'y': // Year (1..n): 2 = short year, 1 & 3..n = padded number
+ // Qt only supports long (4) or short (2) year, use long for all others
+ if (repeat == 2)
+ result += "yy"_L1;
+ else
+ result += "yyyy"_L1;
+ break;
+ case 'L': // Standalone Month (1..5): 4 = long, 3 = short, 1,2 = number, 5 = narrow
+ case 'M': // Month (1..5): 4 = long, 3 = short, 1,2 = number, 5 = narrow
+ // Qt only supports long, short and number, use short for narrow
+ if (repeat == 5)
+ result += "MMM"_L1;
+ else
+ result += QString(repeat, u'M');
+ break;
+ case 'd': // Day of Month (1,2): 1,2 padded number
+ result += QString(repeat, c);
+ break;
+ case 'c': // Standalone version of 'e'
+ case 'e': // Local Day of Week (1..6): 4 = long, 3 = short, 5,6 = narrow, 1,2 padded number
+ // "Local" only affects numeric form: depends on locale's start-day of the week.
+ case 'E': // Day of Week (1..6): 4 = long, 1..3 = short, 5,6 = narrow
+ // Qt only supports long, short: use short for narrow and padded number.
+ if (repeat == 4)
+ result += "dddd"_L1;
+ else
+ result += "ddd"_L1;
+ break;
+ case 'a': // AM/PM (1..n): Qt supports no distinctions
+ case 'b': // Like a, but also distinguishing noon, midnight (ignore difference).
+ case 'B': // Flexible day period (at night, &c.)
+ // Translate to Qt AM/PM, using locale-appropriate case:
+ result += "Ap"_L1;
+ break;
+ case 'h': // Hour [1..12] (1,2): 1,2 = padded number
+ case 'K': // Hour [0..11] (1,2): 1,2 = padded number
+ result += QString(repeat, 'h'_L1);
+ break;
+ case 'H': // Hour [0..23] (1,2): 1,2 = padded number
+ case 'k': // Hour [1..24] (1,2): 1,2 = padded number
+ // Qt H is 0..23 hour
+ result += QString(repeat, 'H'_L1);
+ break;
+ case 'm': // Minutes (1,2): 1,2 = padded number
+ case 's': // Seconds (1,2): 1,2 = padded number
+ result += QString(repeat, c);
+ break;
+ case 'S': // Fractional second (1..n): 1..n = truncates to decimal places
+ // Qt uses msecs either unpadded or padded to 3 places
+ if (repeat < 3)
+ result += u'z';
+ else
+ result += "zzz"_L1;
+ break;
+ case 'O': // Time Zone (1, 4)
+ result += u't';
+ break;
+ case 'v': // Time Zone (1, 4)
+ case 'V': // Time Zone (1..4)
+ result += "tttt"_L1;
+ break;
+ case 'x': // Time Zone (1..5)
+ case 'X': // Time Zone (1..5)
+ result += (repeat > 1 && (repeat & 1)) ? "ttt"_L1 : "tt"_L1;
+ break;
+ case 'z': // Time Zone (1..4)
+ case 'Z': // Time Zone (1..5)
+ result += repeat < 4 ? "tt"_L1 : repeat > 4 ? "ttt"_L1 : "t"_L1;
+ break;
+ default:
+ // a..z and A..Z are reserved for format codes, so any occurrence of these not
+ // already processed are not known and so unsupported formats to be ignored.
+ // All other chars are allowed as literals.
+ if (c < u'A' || c > u'z' || (c > u'Z' && c < u'a'))
result += QString(repeat, c);
- break;
- case 'S': // Fractional second (1..n): 1..n = truncates to decimal places
- // Qt uses msecs either unpadded or padded to 3 places
- if (repeat < 3)
- result += QLatin1Char('z');
- else
- result += QLatin1String("zzz");
- break;
- case 'z': // Time Zone (1..4)
- case 'Z': // Time Zone (1..5)
- case 'O': // Time Zone (1, 4)
- case 'v': // Time Zone (1, 4)
- case 'V': // Time Zone (1..4)
- case 'X': // Time Zone (1..5)
- case 'x': // Time Zone (1..5)
- result += QLatin1Char('t');
- break;
- default:
- // a..z and A..Z are reserved for format codes, so any occurrence of these not
- // already processed are not known and so unsupported formats to be ignored.
- // All other chars are allowed as literals.
- if (c < QLatin1Char('A') || c > QLatin1Char('z') ||
- (c > QLatin1Char('Z') && c < QLatin1Char('a'))) {
- result += QString(repeat, c);
- }
- break;
+ break;
}
i += repeat;
}
- return result;
+ return !result.isEmpty() ? QVariant::fromValue(result) : QVariant();
}
-QString getMacDateFormat(CFDateFormatterStyle style)
+static QVariant getMacDateFormat(CFDateFormatterStyle style)
{
QCFType<CFLocaleRef> l = CFLocaleCopyCurrent();
QCFType<CFDateFormatterRef> formatter = CFDateFormatterCreate(kCFAllocatorDefault,
@@ -293,7 +440,7 @@ QString getMacDateFormat(CFDateFormatterStyle style)
return macToQtFormat(QString::fromCFString(CFDateFormatterGetFormat(formatter)));
}
-static QString getMacTimeFormat(CFDateFormatterStyle style)
+static QVariant getMacTimeFormat(CFDateFormatterStyle style)
{
QCFType<CFLocaleRef> l = CFLocaleCopyCurrent();
QCFType<CFDateFormatterRef> formatter = CFDateFormatterCreate(kCFAllocatorDefault,
@@ -310,11 +457,11 @@ static QVariant getCFLocaleValue(CFStringRef key)
return QString::fromCFString(CFStringRef(static_cast<CFTypeRef>(value)));
}
-static QLocale::MeasurementSystem macMeasurementSystem()
+static QVariant macMeasurementSystem()
{
QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
CFStringRef system = static_cast<CFStringRef>(CFLocaleGetValue(locale, kCFLocaleMeasurementSystem));
- if (QString::fromCFString(system) == QLatin1String("Metric")) {
+ if (QString::fromCFString(system) == "Metric"_L1) {
return QLocale::MetricSystem;
} else {
return QLocale::ImperialSystem;
@@ -331,7 +478,7 @@ static quint8 macFirstDayOfWeek()
return day;
}
-static QString macCurrencySymbol(QLocale::CurrencySymbolFormat format)
+static QVariant macCurrencySymbol(QLocale::CurrencySymbolFormat format)
{
QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
switch (format) {
@@ -347,44 +494,33 @@ static QString macCurrencySymbol(QLocale::CurrencySymbolFormat format)
default:
break;
}
- return QString();
-}
-
-static QString macZeroDigit()
-{
- QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
- QCFType<CFNumberFormatterRef> numberFormatter =
- CFNumberFormatterCreate(nullptr, locale, kCFNumberFormatterNoStyle);
- static const int zeroDigit = 0;
- QCFType<CFStringRef> value = CFNumberFormatterCreateStringWithValue(nullptr, numberFormatter,
- kCFNumberIntType, &zeroDigit);
- return QString::fromCFString(value);
+ return {};
}
#ifndef QT_NO_SYSTEMLOCALE
-static QString macFormatCurrency(const QSystemLocale::CurrencyToStringArgument &arg)
+static QVariant macFormatCurrency(const QSystemLocale::CurrencyToStringArgument &arg)
{
QCFType<CFNumberRef> value;
- switch (arg.value.type()) {
- case QVariant::Int:
- case QVariant::UInt: {
+ switch (arg.value.metaType().id()) {
+ case QMetaType::Int:
+ case QMetaType::UInt: {
int v = arg.value.toInt();
value = CFNumberCreate(NULL, kCFNumberIntType, &v);
break;
}
- case QVariant::Double: {
+ case QMetaType::Double: {
double v = arg.value.toDouble();
value = CFNumberCreate(NULL, kCFNumberDoubleType, &v);
break;
}
- case QVariant::LongLong:
- case QVariant::ULongLong: {
+ case QMetaType::LongLong:
+ case QMetaType::ULongLong: {
qint64 v = arg.value.toLongLong();
value = CFNumberCreate(NULL, kCFNumberLongLongType, &v);
break;
}
default:
- return QString();
+ return {};
}
QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
@@ -420,17 +556,42 @@ static QVariant macQuoteString(QSystemLocale::QueryType type, QStringView str)
#ifndef QT_NO_SYSTEMLOCALE
-QLocale QSystemLocale::fallbackUiLocale() const
+QLocale QSystemLocale::fallbackLocale() const
{
return QLocale(getMacLocaleName());
}
-QVariant QSystemLocale::query(QueryType type, QVariant in) const
+template <auto CodeToValueFunction>
+static QVariant getLocaleValue(CFStringRef key)
+{
+ if (auto code = getCFLocaleValue(key); !code.isNull()) {
+ // If an invalid locale is requested with -AppleLocale, the system APIs
+ // will report invalid or empty locale values back to us, which codeToLanguage()
+ // and friends will fail to parse, resulting in returning QLocale::Any{L/C/S}.
+ // If this is the case, we fall down and return a null-variant, which
+ // QLocale's updateSystemPrivate() will interpret to use fallback logic.
+ if (auto value = CodeToValueFunction(code.toString()))
+ return value;
+ }
+ return QVariant();
+}
+
+static QLocale::Language codeToLanguage(QStringView s)
+{
+ return QLocalePrivate::codeToLanguage(s);
+}
+
+QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
{
QMacAutoReleasePool pool;
+
switch(type) {
-// case Name:
-// return getMacLocaleName();
+ case LanguageId:
+ return getLocaleValue<codeToLanguage>(kCFLocaleLanguageCode);
+ case TerritoryId:
+ return getLocaleValue<QLocalePrivate::codeToTerritory>(kCFLocaleCountryCode);
+ case ScriptId:
+ return getLocaleValue<QLocalePrivate::codeToScript>(kCFLocaleScriptCode);
case DecimalPoint:
return getCFLocaleValue(kCFLocaleDecimalSeparator);
case GroupSeparator:
@@ -447,11 +608,17 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
: kCFDateFormatterLongStyle);
case DayNameLong:
case DayNameShort:
- return macDayName(in.toInt(), (type == DayNameShort));
+ case DayNameNarrow:
+ case StandaloneDayNameLong:
+ case StandaloneDayNameShort:
+ case StandaloneDayNameNarrow:
+ return macDayName(in.toInt(), type);
case MonthNameLong:
case MonthNameShort:
+ case MonthNameNarrow:
case StandaloneMonthNameLong:
case StandaloneMonthNameShort:
+ case StandaloneMonthNameNarrow:
return macMonthName(in.toInt(), type);
case DateToStringShort:
case DateToStringLong:
@@ -464,10 +631,10 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
case PositiveSign:
break;
case ZeroDigit:
- return QVariant(macZeroDigit());
+ return macZeroDigit();
case MeasurementSystem:
- return QVariant(static_cast<int>(macMeasurementSystem()));
+ return macMeasurementSystem();
case AMText:
case PMText: {
@@ -480,33 +647,18 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
case FirstDayOfWeek:
return QVariant(macFirstDayOfWeek());
case CurrencySymbol:
- return QVariant(macCurrencySymbol(QLocale::CurrencySymbolFormat(in.toUInt())));
+ return macCurrencySymbol(QLocale::CurrencySymbolFormat(in.toUInt()));
case CurrencyToString:
- return macFormatCurrency(in.value<QSystemLocale::CurrencyToStringArgument>());
+ return macFormatCurrency(in.value<CurrencyToStringArgument>());
case UILanguages: {
- QCFType<CFPropertyListRef> languages = CFPreferencesCopyValue(
- CFSTR("AppleLanguages"),
- kCFPreferencesAnyApplication,
- kCFPreferencesCurrentUser,
- kCFPreferencesAnyHost);
QStringList result;
- if (!languages)
- return QVariant(result);
-
- CFTypeID typeId = CFGetTypeID(languages);
- if (typeId == CFArrayGetTypeID()) {
- const int cnt = CFArrayGetCount(languages.as<CFArrayRef>());
- result.reserve(cnt);
- for (int i = 0; i < cnt; ++i) {
- const QString lang = QString::fromCFString(
- static_cast<CFStringRef>(CFArrayGetValueAtIndex(languages.as<CFArrayRef>(), i)));
- result.append(lang);
- }
- } else if (typeId == CFStringGetTypeID()) {
- result = QStringList(QString::fromCFString(languages.as<CFStringRef>()));
- } else {
- qWarning("QLocale::uiLanguages(): CFPreferencesCopyValue returned unhandled type \"%ls\"; please report to http://bugreports.qt.io",
- qUtf16Printable(QString::fromCFString(CFCopyTypeIDDescription(typeId))));
+ QCFType<CFArrayRef> languages = CFLocaleCopyPreferredLanguages();
+ const CFIndex cnt = CFArrayGetCount(languages);
+ result.reserve(cnt);
+ for (CFIndex i = 0; i < cnt; ++i) {
+ const QString lang = QString::fromCFString(
+ static_cast<CFStringRef>(CFArrayGetValueAtIndex(languages, i)));
+ result.append(lang);
}
return QVariant(result);
}
diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h
index 56af6b0a38..3044d137b9 100644
--- a/src/corelib/text/qlocale_p.h
+++ b/src/corelib/text/qlocale_p.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QLOCALE_P_H
#define QLOCALE_P_H
@@ -52,24 +16,98 @@
// We mean it.
//
-#include <QtCore/private/qglobal_p.h>
-#include "QtCore/qstring.h"
-#include "QtCore/qvarlengtharray.h"
-#include "QtCore/qvariant.h"
-#include "QtCore/qnumeric.h"
-#include <QtCore/qcalendar.h>
-
#include "qlocale.h"
+#include <QtCore/qcalendar.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qnumeric.h>
+#include <QtCore/private/qnumeric_p.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qvariant.h>
+#include <QtCore/qvarlengtharray.h>
+#ifdef Q_OS_WASM
+#include <private/qstdweb_p.h>
+#endif
+
#include <limits>
#include <cmath>
+#include <string_view>
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_SYSTEMLOCALE
+template <typename T> struct QSimpleParsedNumber
+{
+ T result;
+ // When used < 0, -used is how much was used, but it was an error.
+ qsizetype used;
+ bool ok() const { return used > 0; }
+};
+
+template <typename MaskType, uchar Lowest> struct QCharacterSetMatch
+{
+ static constexpr int MaxRange = std::numeric_limits<MaskType>::digits;
+ MaskType mask;
+
+ constexpr QCharacterSetMatch(std::string_view set)
+ : mask(0)
+ {
+ for (char c : set) {
+ int idx = uchar(c) - Lowest;
+ mask |= MaskType(1) << idx;
+ }
+ }
+
+ constexpr bool matches(uchar c) const
+ {
+ unsigned idx = c - Lowest;
+ if (idx >= MaxRange)
+ return false;
+ return (mask >> idx) & 1;
+ }
+};
+
+namespace QtPrivate {
+inline constexpr char ascii_space_chars[] =
+ "\t" // 9: HT - horizontal tab
+ "\n" // 10: LF - line feed
+ "\v" // 11: VT - vertical tab
+ "\f" // 12: FF - form feed
+ "\r" // 13: CR - carriage return
+ " "; // 32: space
+
+template <const char *Set, int ForcedLowest = -1>
+inline constexpr auto makeCharacterSetMatch()
+{
+ constexpr auto view = std::string_view(Set);
+ constexpr uchar MinElement = *std::min_element(view.begin(), view.end());
+ constexpr uchar MaxElement = *std::max_element(view.begin(), view.end());
+ constexpr int Range = MaxElement - MinElement;
+ static_assert(Range < 64, "Characters in the set are 64 or more values apart");
+
+ if constexpr (ForcedLowest >= 0) {
+ // use the force
+ static_assert(ForcedLowest <= int(MinElement), "The force is not with you");
+ using MaskType = std::conditional_t<MaxElement - ForcedLowest < 32, quint32, quint64>;
+ return QCharacterSetMatch<MaskType, ForcedLowest>(view);
+ } else if constexpr (MaxElement < std::numeric_limits<qregisteruint>::digits) {
+ // if we can use a Lowest of zero, we can remove a subtraction
+ // from the matches() code at runtime
+ using MaskType = std::conditional_t<(MaxElement < 32), quint32, qregisteruint>;
+ return QCharacterSetMatch<MaskType, 0>(view);
+ } else {
+ using MaskType = std::conditional_t<(Range < 32), quint32, quint64>;
+ return QCharacterSetMatch<MaskType, MinElement>(view);
+ }
+}
+} // QtPrivate
+
struct QLocaleData;
+// Subclassed by Android platform plugin:
class Q_CORE_EXPORT QSystemLocale
{
+ Q_DISABLE_COPY_MOVE(QSystemLocale)
+ QSystemLocale *next = nullptr; // Maintains a stack.
+
public:
QSystemLocale();
virtual ~QSystemLocale();
@@ -85,7 +123,7 @@ public:
enum QueryType {
LanguageId, // uint
- CountryId, // uint
+ TerritoryId, // uint
DecimalPoint, // QString
GroupSeparator, // QString (empty QString means: don't group digits)
ZeroDigit, // QString
@@ -96,8 +134,10 @@ public:
TimeFormatShort, // QString
DayNameLong, // QString, in: int
DayNameShort, // QString, in: int
+ DayNameNarrow, // QString, in: int
MonthNameLong, // QString, in: int
MonthNameShort, // QString, in: int
+ MonthNameNarrow, // QString, in: int
DateToStringLong, // QString, in: QDate
DateToStringShort, // QString in: QDate
TimeToStringLong, // QString in: QTime
@@ -122,21 +162,21 @@ public:
ListToSeparatedString, // QString
LocaleChanged, // system locale changed
NativeLanguageName, // QString
- NativeCountryName, // QString
+ NativeTerritoryName, // QString
StandaloneMonthNameLong, // QString, in: int
- StandaloneMonthNameShort // QString, in: int
+ StandaloneMonthNameShort, // QString, in: int
+ StandaloneMonthNameNarrow, // QString, in: int
+ StandaloneDayNameLong, // QString, in: int
+ StandaloneDayNameShort, // QString, in: int
+ StandaloneDayNameNarrow // QString, in: int
};
- virtual QVariant query(QueryType type, QVariant in = QVariant()) const;
- virtual QLocale fallbackUiLocale() const;
+ virtual QVariant query(QueryType type, QVariant &&in = QVariant()) const;
- inline const QLocaleData *fallbackUiLocaleData() const;
-private:
- QSystemLocale(bool);
- friend class QSystemLocaleSingleton;
+ virtual QLocale fallbackLocale() const;
+ inline qsizetype fallbackLocaleIndex() const;
};
Q_DECLARE_TYPEINFO(QSystemLocale::QueryType, Q_PRIMITIVE_TYPE);
-Q_DECLARE_TYPEINFO(QSystemLocale::CurrencyToStringArgument, Q_MOVABLE_TYPE);
-#endif
+Q_DECLARE_TYPEINFO(QSystemLocale::CurrencyToStringArgument, Q_RELOCATABLE_TYPE);
#if QT_CONFIG(icu)
namespace QIcu {
@@ -148,39 +188,64 @@ namespace QIcu {
struct QLocaleId
{
- // bypass constructors
- static inline QLocaleId fromIds(ushort language, ushort script, ushort country)
+ [[nodiscard]] Q_AUTOTEST_EXPORT static QLocaleId fromName(QStringView name);
+ [[nodiscard]] inline bool operator==(QLocaleId other) const
+ { return language_id == other.language_id && script_id == other.script_id && territory_id == other.territory_id; }
+ [[nodiscard]] inline bool operator!=(QLocaleId other) const
+ { return !operator==(other); }
+ [[nodiscard]] inline bool isValid() const
{
- const QLocaleId localeId = { language, script, country };
- return localeId;
+ return language_id <= QLocale::LastLanguage && script_id <= QLocale::LastScript
+ && territory_id <= QLocale::LastTerritory;
+ }
+ [[nodiscard]] inline bool matchesAll() const
+ {
+ return !language_id && !script_id && !territory_id;
+ }
+ // Use as: filter.accept...(candidate)
+ [[nodiscard]] inline bool acceptLanguage(quint16 lang) const
+ {
+ // Always reject AnyLanguage (only used for last entry in locale_data array).
+ // So, when searching for AnyLanguage, accept everything *but* AnyLanguage.
+ return language_id ? lang == language_id : lang;
+ }
+ [[nodiscard]] inline bool acceptScriptTerritory(QLocaleId other) const
+ {
+ return (!territory_id || other.territory_id == territory_id)
+ && (!script_id || other.script_id == script_id);
}
- inline bool operator==(QLocaleId other) const
- { return language_id == other.language_id && script_id == other.script_id && country_id == other.country_id; }
- inline bool operator!=(QLocaleId other) const
- { return !operator==(other); }
-
- QLocaleId withLikelySubtagsAdded() const;
- QLocaleId withLikelySubtagsRemoved() const;
+ [[nodiscard]] QLocaleId withLikelySubtagsAdded() const;
+ [[nodiscard]] QLocaleId withLikelySubtagsRemoved() const;
- QByteArray name(char separator = '-') const;
+ [[nodiscard]] QByteArray name(char separator = '-') const;
- ushort language_id, script_id, country_id;
+ ushort language_id = 0, script_id = 0, territory_id = 0;
};
Q_DECLARE_TYPEINFO(QLocaleId, Q_PRIMITIVE_TYPE);
+
+using CharBuff = QVarLengthArray<char, 256>;
+
+struct ParsingResult
+{
+ enum State { // A duplicate of QValidator::State
+ Invalid,
+ Intermediate,
+ Acceptable
+ };
+
+ State state = Invalid;
+ CharBuff buff;
+};
+
struct QLocaleData
{
public:
- // TODO: Remove this?
- static const QLocaleData *findLocaleData(QLocale::Language language,
- QLocale::Script script,
- QLocale::Country country);
- // Having an offset of current locale, enables us to have multiple sources of data, i.e. user-provided calendar locales
- static uint findLocaleOffset(QLocale::Language language,
- QLocale::Script script,
- QLocale::Country country);
- static const QLocaleData *c();
+ // Having an index for each locale enables us to have diverse sources of
+ // data, e.g. calendar locales, as well as the main CLDR-derived data.
+ [[nodiscard]] static qsizetype findLocaleIndex(QLocaleId localeId);
+ [[nodiscard]] static const QLocaleData *c();
enum DoubleForm {
DFExponent = 0,
@@ -207,8 +272,6 @@ public:
enum NumberMode { IntegerMode, DoubleStandardMode, DoubleScientificMode };
- typedef QVarLengthArray<char, 256> CharBuff;
-
private:
enum PrecisionMode {
PMDecimalDigits = 0x01,
@@ -216,100 +279,146 @@ private:
PMChopTrailingZeros = 0x03
};
- QString decimalForm(QString &&digits, int decpt, int precision,
- PrecisionMode pm, bool mustMarkDecimal,
- bool groupDigits) const;
- QString exponentForm(QString &&digits, int decpt, int precision,
- PrecisionMode pm, bool mustMarkDecimal,
- int minExponentDigits) const;
- QString signPrefix(bool negative, unsigned flags) const;
- QString applyIntegerFormatting(QString &&numStr, bool negative, int precision,
- int base, int width, unsigned flags) const;
+ [[nodiscard]] QString decimalForm(QString &&digits, int decpt, int precision,
+ PrecisionMode pm, bool mustMarkDecimal,
+ bool groupDigits) const;
+ [[nodiscard]] QString exponentForm(QString &&digits, int decpt, int precision,
+ PrecisionMode pm, bool mustMarkDecimal,
+ int minExponentDigits) const;
+ [[nodiscard]] QString signPrefix(bool negative, unsigned flags) const;
+ [[nodiscard]] QString applyIntegerFormatting(QString &&numStr, bool negative, int precision,
+ int base, int width, unsigned flags) const;
public:
- QString doubleToString(double d,
- int precision = -1,
- DoubleForm form = DFSignificantDigits,
- int width = -1,
- unsigned flags = NoFlags) const;
- QString longLongToString(qint64 l, int precision = -1,
- int base = 10,
- int width = -1,
- unsigned flags = NoFlags) const;
- QString unsLongLongToString(quint64 l, int precision = -1,
- int base = 10,
- int width = -1,
- unsigned flags = NoFlags) const;
+ [[nodiscard]] QString doubleToString(double d,
+ int precision = -1,
+ DoubleForm form = DFSignificantDigits,
+ int width = -1,
+ unsigned flags = NoFlags) const;
+ [[nodiscard]] QString longLongToString(qint64 l, int precision = -1,
+ int base = 10,
+ int width = -1,
+ unsigned flags = NoFlags) const;
+ [[nodiscard]] QString unsLongLongToString(quint64 l, int precision = -1,
+ int base = 10,
+ int width = -1,
+ unsigned flags = NoFlags) const;
// this function is meant to be called with the result of stringToDouble or bytearrayToDouble
- static float convertDoubleToFloat(double d, bool *ok)
+ // so *ok must have been properly set (if not null)
+ [[nodiscard]] static float convertDoubleToFloat(double d, bool *ok)
{
- if (qIsInf(d))
- return float(d);
- if (std::fabs(d) > std::numeric_limits<float>::max()) {
- if (ok)
- *ok = false;
- const float huge = std::numeric_limits<float>::infinity();
- return d < 0 ? -huge : huge;
- }
- if (d != 0 && float(d) == 0) {
- // Values that underflow double already failed. Match them:
- if (ok)
- *ok = false;
- return 0;
- }
- return float(d);
+ float result;
+ bool b = convertDoubleTo<float>(d, &result);
+ if (ok && *ok)
+ *ok = b;
+ return result;
}
- double stringToDouble(QStringView str, bool *ok, QLocale::NumberOptions options) const;
- qint64 stringToLongLong(QStringView str, int base, bool *ok, QLocale::NumberOptions options) const;
- quint64 stringToUnsLongLong(QStringView str, int base, bool *ok, QLocale::NumberOptions options) const;
+ [[nodiscard]] double stringToDouble(QStringView str, bool *ok,
+ QLocale::NumberOptions options) const;
+ [[nodiscard]] QSimpleParsedNumber<qint64>
+ stringToLongLong(QStringView str, int base, QLocale::NumberOptions options) const;
+ [[nodiscard]] QSimpleParsedNumber<quint64>
+ stringToUnsLongLong(QStringView str, int base, QLocale::NumberOptions options) const;
// this function is used in QIntValidator (QtGui)
- Q_CORE_EXPORT static qint64 bytearrayToLongLong(const char *num, int base, bool *ok);
- static quint64 bytearrayToUnsLongLong(const char *num, int base, bool *ok);
+ [[nodiscard]] Q_CORE_EXPORT
+ static QSimpleParsedNumber<qint64> bytearrayToLongLong(QByteArrayView num, int base);
+ [[nodiscard]] static QSimpleParsedNumber<quint64>
+ bytearrayToUnsLongLong(QByteArrayView num, int base);
- bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options,
- CharBuff *result) const;
- inline char numericToCLocale(QStringView in) const;
+ [[nodiscard]] bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options,
+ NumberMode mode, CharBuff *result) const;
+
+ struct NumericData
+ {
+#ifndef QT_NO_SYSTEMLOCALE
+ // Only used for the system locale, to store data for the view to look at:
+ QString sysDecimal, sysGroup, sysMinus, sysPlus;
+#endif
+ QStringView decimal, group, minus, plus, exponent;
+ char32_t zeroUcs = 0;
+ qint8 zeroLen = 0;
+ bool isC = false; // C locale sets this and nothing else.
+ bool exponentCyrillic = false; // True only for floating-point parsing of Cyrillic.
+ void setZero(QStringView zero)
+ {
+ // No known locale has digits that are more than one Unicode
+ // code-point, so we can safely deal with digits as plain char32_t.
+ switch (zero.size()) {
+ case 1:
+ Q_ASSERT(!zero.at(0).isSurrogate());
+ zeroUcs = zero.at(0).unicode();
+ zeroLen = 1;
+ break;
+ case 2:
+ Q_ASSERT(zero.at(0).isHighSurrogate());
+ zeroUcs = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
+ zeroLen = 2;
+ break;
+ default:
+ Q_ASSERT(zero.size() == 0); // i.e. we got no value to use
+ break;
+ }
+ }
+ [[nodiscard]] bool isValid(NumberMode mode) const // Asserted as a sanity check.
+ {
+ if (isC)
+ return true;
+ if (exponentCyrillic && exponent != u"E" && exponent != u"\u0415")
+ return false;
+ return (zeroLen == 1 || zeroLen == 2) && zeroUcs > 0
+ && (mode == IntegerMode || !decimal.isEmpty())
+ // group may be empty (user config in system locale)
+ && !minus.isEmpty() && !plus.isEmpty()
+ && (mode != DoubleScientificMode || !exponent.isEmpty());
+ }
+ };
+ [[nodiscard]] inline NumericData numericData(NumberMode mode) const;
// this function is used in QIntValidator (QtGui)
- Q_CORE_EXPORT bool validateChars(QStringView str, NumberMode numMode, QByteArray *buff, int decDigits = -1,
- QLocale::NumberOptions number_options = QLocale::DefaultNumberOptions) const;
-
- QString decimalPoint() const;
- QString groupSeparator() const;
- QString listSeparator() const;
- QString percentSign() const;
- QString zeroDigit() const;
- char32_t zeroUcs() const;
- QString positiveSign() const;
- QString negativeSign() const;
- QString exponentSeparator() const;
+ [[nodiscard]] Q_CORE_EXPORT ParsingResult
+ validateChars(QStringView str, NumberMode numMode, int decDigits = -1,
+ QLocale::NumberOptions number_options = QLocale::DefaultNumberOptions) const;
+
+ // Access to assorted data members:
+ [[nodiscard]] QLocaleId id() const
+ { return QLocaleId { m_language_id, m_script_id, m_territory_id }; }
+
+ [[nodiscard]] QString decimalPoint() const;
+ [[nodiscard]] QString groupSeparator() const;
+ [[nodiscard]] QString listSeparator() const;
+ [[nodiscard]] QString percentSign() const;
+ [[nodiscard]] QString zeroDigit() const;
+ [[nodiscard]] char32_t zeroUcs() const;
+ [[nodiscard]] QString positiveSign() const;
+ [[nodiscard]] QString negativeSign() const;
+ [[nodiscard]] QString exponentSeparator() const;
struct DataRange
{
quint16 offset;
quint16 size;
- QString getData(const char16_t *table) const
+ [[nodiscard]] QString getData(const char16_t *table) const
{
return size > 0
? QString::fromRawData(reinterpret_cast<const QChar *>(table + offset), size)
: QString();
}
- QStringView viewData(const char16_t *table) const
+ [[nodiscard]] QStringView viewData(const char16_t *table) const
{
return { reinterpret_cast<const QChar *>(table + offset), size };
}
- QString getListEntry(const char16_t *table, int index) const
+ [[nodiscard]] QString getListEntry(const char16_t *table, qsizetype index) const
{
return listEntry(table, index).getData(table);
}
- QStringView viewListEntry(const char16_t *table, int index) const
+ [[nodiscard]] QStringView viewListEntry(const char16_t *table, qsizetype index) const
{
return listEntry(table, index).viewData(table);
}
- char32_t ucsFirst(const char16_t *table) const
+ [[nodiscard]] char32_t ucsFirst(const char16_t *table) const
{
if (size && !QChar::isSurrogate(table[offset]))
return table[offset];
@@ -318,7 +427,7 @@ public:
return 0;
}
private:
- DataRange listEntry(const char16_t *table, int index) const
+ [[nodiscard]] DataRange listEntry(const char16_t *table, qsizetype index) const
{
const char16_t separator = ';';
quint16 i = 0;
@@ -346,15 +455,15 @@ public:
X(byteCount) X(byteAmountSI) X(byteAmountIEC) \
X(currencySymbol) X(currencyDisplayName) \
X(currencyFormat) X(currencyFormatNegative) \
- X(endonymLanguage) X(endonymCountry)
+ X(endonymLanguage) X(endonymTerritory)
#define rangeGetter(name) \
- DataRange name() const { return { m_ ## name ## _idx, m_ ## name ## _size }; }
+ [[nodiscard]] DataRange name() const { return { m_ ## name ## _idx, m_ ## name ## _size }; }
ForEachQLocaleRange(rangeGetter)
#undef rangeGetter
public:
- quint16 m_language_id, m_script_id, m_country_id;
+ quint16 m_language_id, m_script_id, m_territory_id;
// Offsets, then sizes, for each range:
#define rangeIndex(name) quint16 m_ ## name ## _idx;
@@ -373,58 +482,60 @@ public:
quint8 m_first_day_of_week : 3;
quint8 m_weekend_start : 3;
quint8 m_weekend_end : 3;
- quint8 m_grouping_top : 2; // Must have this many before the first grouping separator
+ quint8 m_grouping_top : 2; // Don't group until more significant group has this many digits.
quint8 m_grouping_higher : 3; // Number of digits between grouping separators
quint8 m_grouping_least : 3; // Number of digits after last grouping separator (before decimal).
};
-class Q_CORE_EXPORT QLocalePrivate // A POD type
+class QLocalePrivate
{
public:
- static QLocalePrivate *create(
- const QLocaleData *data, const uint data_offset = 0,
- QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions)
- {
- auto *retval = new QLocalePrivate;
- retval->m_data = data;
- retval->ref.storeRelaxed(0);
- retval->m_data_offset = data_offset;
- retval->m_numberOptions = numberOptions;
- return retval;
- }
-
- static QLocalePrivate *get(QLocale &l) { return l.d; }
- static const QLocalePrivate *get(const QLocale &l) { return l.d; }
+ constexpr QLocalePrivate(const QLocaleData *data, qsizetype index,
+ QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions,
+ int refs = 0)
+ : m_data(data), ref Q_BASIC_ATOMIC_INITIALIZER(refs),
+ m_index(index), m_numberOptions(numberOptions) {}
- quint16 languageId() const { return m_data->m_language_id; }
- quint16 countryId() const { return m_data->m_country_id; }
+ [[nodiscard]] quint16 languageId() const { return m_data->m_language_id; }
+ [[nodiscard]] quint16 territoryId() const { return m_data->m_territory_id; }
- QByteArray bcp47Name(char separator = '-') const;
- QByteArray rawName(char separator = '-') const;
+ [[nodiscard]] QByteArray bcp47Name(char separator = '-') const;
- inline QLatin1String languageCode() const { return languageToCode(QLocale::Language(m_data->m_language_id)); }
- inline QLatin1String scriptCode() const { return scriptToCode(QLocale::Script(m_data->m_script_id)); }
- inline QLatin1String countryCode() const { return countryToCode(QLocale::Country(m_data->m_country_id)); }
-
- static QLatin1String languageToCode(QLocale::Language language);
- static QLatin1String scriptToCode(QLocale::Script script);
- static QLatin1String countryToCode(QLocale::Country country);
- static QLocale::Language codeToLanguage(QStringView code) noexcept;
- static QLocale::Script codeToScript(QStringView code) noexcept;
- static QLocale::Country codeToCountry(QStringView code) noexcept;
- static void getLangAndCountry(const QString &name, QLocale::Language &lang,
- QLocale::Script &script, QLocale::Country &cntry);
-
- QLocale::MeasurementSystem measurementSystem() const;
-
- const QLocaleData *m_data;
+ [[nodiscard]] inline std::array<char, 4>
+ languageCode(QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode) const
+ {
+ return languageToCode(QLocale::Language(m_data->m_language_id), codeTypes);
+ }
+ [[nodiscard]] inline QLatin1StringView scriptCode() const
+ { return scriptToCode(QLocale::Script(m_data->m_script_id)); }
+ [[nodiscard]] inline QLatin1StringView territoryCode() const
+ { return territoryToCode(QLocale::Territory(m_data->m_territory_id)); }
+
+ [[nodiscard]] static const QLocalePrivate *get(const QLocale &l) { return l.d; }
+ [[nodiscard]] static std::array<char, 4>
+ languageToCode(QLocale::Language language,
+ QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode);
+ [[nodiscard]] static QLatin1StringView scriptToCode(QLocale::Script script);
+ [[nodiscard]] static QLatin1StringView territoryToCode(QLocale::Territory territory);
+ [[nodiscard]] static QLocale::Language
+ codeToLanguage(QStringView code,
+ QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode) noexcept;
+ [[nodiscard]] static QLocale::Script codeToScript(QStringView code) noexcept;
+ [[nodiscard]] static QLocale::Territory codeToTerritory(QStringView code) noexcept;
+
+ [[nodiscard]] QLocale::MeasurementSystem measurementSystem() const;
+
+ // System locale has an m_data all its own; all others have m_data = locale_data + m_index
+ const QLocaleData *const m_data;
QBasicAtomicInt ref;
- uint m_data_offset;
+ qsizetype m_index; // System locale needs this updated when m_data->id() changes.
QLocale::NumberOptions m_numberOptions;
+
+ static QBasicAtomicInt s_generation;
};
#ifndef QT_NO_SYSTEMLOCALE
-const QLocaleData *QSystemLocale::fallbackUiLocaleData() const { return fallbackUiLocale().d->m_data; }
+qsizetype QSystemLocale::fallbackLocaleIndex() const { return fallbackLocale().d->m_index; }
#endif
template <>
@@ -432,92 +543,29 @@ inline QLocalePrivate *QSharedDataPointer<QLocalePrivate>::clone()
{
// cannot use QLocalePrivate's copy constructor
// since it is deleted in C++11
- return QLocalePrivate::create(d->m_data, d->m_data_offset, d->m_numberOptions);
+ return new QLocalePrivate(d->m_data, d->m_index, d->m_numberOptions);
}
-inline char QLocaleData::numericToCLocale(QStringView in) const
-{
- Q_ASSERT(in.size() == 1 || (in.size() == 2 && in.at(0).isHighSurrogate()));
-
- if (in == positiveSign() || in == u"+")
- return '+';
-
- if (in == negativeSign() || in == u"-" || in == u"\x2212")
- return '-';
-
- if (in == decimalPoint())
- return '.';
-
- if (in.compare(exponentSeparator(), Qt::CaseInsensitive) == 0)
- return 'e';
-
- const QString group = groupSeparator();
- if (in == group)
- return ',';
-
- // In several languages group() is a non-breaking space (U+00A0) or its thin
- // version (U+202f), which look like spaces. People (and thus some of our
- // tests) use a regular space instead and complain if it doesn't work.
- // Should this be extended generally to any case where group is a space ?
- if ((group == u"\xa0" || group == u"\x202f") && in == u" ")
- return ',';
-
- const char32_t inUcs4 = in.size() == 2
- ? QChar::surrogateToUcs4(in.at(0), in.at(1)) : in.at(0).unicode();
- const char32_t zeroUcs4 = zeroUcs();
- // Must match qlocale_tools.h's unicodeForDigit()
- if (zeroUcs4 == u'\u3007') {
- // QTBUG-85409: Suzhou's digits aren't contiguous !
- if (inUcs4 == zeroUcs4)
- return '0';
- if (inUcs4 > u'\u3020' && inUcs4 <= u'\u3029')
- return inUcs4 - u'\u3020';
- } else if (zeroUcs4 <= inUcs4 && inUcs4 < zeroUcs4 + 10) {
- return '0' + inUcs4 - zeroUcs4;
- }
- if ('0' <= inUcs4 && inUcs4 <= '9')
- return inUcs4;
-
- return 0;
-}
+// Also used to merely skip over an escape in a format string, advancint idx to
+// point after it (so not [[nodiscard]]):
+QString qt_readEscapedFormatString(QStringView format, qsizetype *idx);
+[[nodiscard]] bool qt_splitLocaleName(QStringView name, QStringView *lang = nullptr,
+ QStringView *script = nullptr, QStringView *cntry = nullptr);
+[[nodiscard]] qsizetype qt_repeatCount(QStringView s);
-QString qt_readEscapedFormatString(QStringView format, int *idx);
-bool qt_splitLocaleName(const QString &name, QString &lang, QString &script, QString &cntry);
-int qt_repeatCount(QStringView s);
-
-enum { AsciiSpaceMask = (1u << (' ' - 1)) |
- (1u << ('\t' - 1)) | // 9: HT - horizontal tab
- (1u << ('\n' - 1)) | // 10: LF - line feed
- (1u << ('\v' - 1)) | // 11: VT - vertical tab
- (1u << ('\f' - 1)) | // 12: FF - form feed
- (1u << ('\r' - 1)) }; // 13: CR - carriage return
-constexpr inline bool ascii_isspace(uchar c)
+[[nodiscard]] constexpr inline bool ascii_isspace(uchar c)
{
- return c >= 1u && c <= 32u && (AsciiSpaceMask >> uint(c - 1)) & 1u;
+ constexpr auto matcher = QtPrivate::makeCharacterSetMatch<QtPrivate::ascii_space_chars>();
+ return matcher.matches(c);
}
-#if defined(Q_COMPILER_CONSTEXPR)
-static_assert(ascii_isspace(' '));
-static_assert(ascii_isspace('\t'));
-static_assert(ascii_isspace('\n'));
-static_assert(ascii_isspace('\v'));
-static_assert(ascii_isspace('\f'));
-static_assert(ascii_isspace('\r'));
-static_assert(!ascii_isspace('\0'));
-static_assert(!ascii_isspace('\a'));
-static_assert(!ascii_isspace('a'));
-static_assert(!ascii_isspace('\177'));
-static_assert(!ascii_isspace(uchar('\200')));
-static_assert(!ascii_isspace(uchar('\xA0')));
-static_assert(!ascii_isspace(uchar('\377')));
-#endif
-
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QStringView)
-Q_DECLARE_METATYPE(QList<Qt::DayOfWeek>)
+// ### move to qnamespace.h
+QT_DECL_METATYPE_EXTERN_TAGGED(QList<Qt::DayOfWeek>, QList_Qt__DayOfWeek, Q_CORE_EXPORT)
#ifndef QT_NO_SYSTEMLOCALE
-Q_DECLARE_METATYPE(QSystemLocale::CurrencyToStringArgument)
+QT_DECL_METATYPE_EXTERN_TAGGED(QSystemLocale::CurrencyToStringArgument,
+ QSystemLocale__CurrencyToStringArgument, Q_CORE_EXPORT)
#endif
#endif // QLOCALE_P_H
diff --git a/src/corelib/text/qlocale_tools.cpp b/src/corelib/text/qlocale_tools.cpp
index cad2ce7353..b6639bcb71 100644
--- a/src/corelib/text/qlocale_tools.cpp
+++ b/src/corelib/text/qlocale_tools.cpp
@@ -1,48 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qlocale_tools_p.h"
#include "qdoublescanprint_p.h"
#include "qlocale_p.h"
#include "qstring.h"
+#include <private/qtools_p.h>
#include <private/qnumeric_p.h>
#include <ctype.h>
@@ -53,6 +18,9 @@
#include <stdlib.h>
#include <time.h>
+#include <limits>
+#include <charconv>
+
#if defined(Q_OS_LINUX) && !defined(__UCLIBC__)
# include <fenv.h>
#endif
@@ -70,12 +38,12 @@
QT_BEGIN_NAMESPACE
-#include "../../3rdparty/freebsd/strtoull.c"
-#include "../../3rdparty/freebsd/strtoll.c"
+using namespace QtMiscUtils;
QT_CLOCALE_HOLDER
-void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, char *buf, int bufSize,
+void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision,
+ char *buf, qsizetype bufSize,
bool &sign, int &length, int &decpt)
{
if (bufSize == 0) {
@@ -129,7 +97,12 @@ void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, cha
} else {
mode = double_conversion::DoubleToStringConverter::FIXED;
}
- double_conversion::DoubleToStringConverter::DoubleToAscii(d, mode, precision, buf, bufSize,
+ // libDoubleConversion is limited to 32-bit lengths. It's ok to cap the buffer size,
+ // though, because the library will never write 2GiB of chars as output
+ // (the length out-parameter is just an int, too).
+ const auto boundedBufferSize = static_cast<int>((std::min)(bufSize, qsizetype(INT_MAX)));
+ double_conversion::DoubleToStringConverter::DoubleToAscii(d, mode, precision, buf,
+ boundedBufferSize,
&sign, &length, &decpt);
#else // QT_NO_DOUBLECONVERSION || QT_BOOTSTRAPPED
@@ -221,11 +194,10 @@ void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, cha
// which case the missing digits are zeroes. In the 'e' case decptInTarget is always 1,
// as variants of snprintf always generate numbers with one digit before the '.' then.
// This is why the final decimal point is offset by 1, relative to the number after 'e'.
- bool ok;
- const char *endptr;
- decpt = qstrtoll(target.data() + eSign + 1, &endptr, 10, &ok) + 1;
- Q_ASSERT(ok);
- Q_ASSERT(endptr - target.data() <= length);
+ auto r = qstrntoll(target.data() + eSign + 1, length - eSign - 1, 10);
+ decpt = r.result + 1;
+ Q_ASSERT(r.ok());
+ Q_ASSERT(r.used + eSign + 1 <= length);
} else {
// No 'e' found, so it's the 'f' form. Variants of snprintf generate numbers with
// potentially multiple digits before the '.', but without decimal exponent then. So we
@@ -278,48 +250,50 @@ void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, cha
--length;
}
-double qt_asciiToDouble(const char *num, qsizetype numLen, bool &ok, int &processed,
- StrayCharacterMode strayCharMode)
+QSimpleParsedNumber<double> qt_asciiToDouble(const char *num, qsizetype numLen,
+ StrayCharacterMode strayCharMode)
{
- auto string_equals = [](const char *needle, const char *haystack, qsizetype haystackLen) {
- qsizetype needleLen = strlen(needle);
- return needleLen == haystackLen && memcmp(needle, haystack, haystackLen) == 0;
- };
-
- if (numLen == 0) {
- ok = false;
- processed = 0;
- return 0.0;
- }
-
- ok = true;
+ if (numLen <= 0)
+ return {};
// We have to catch NaN before because we need NaN as marker for "garbage" in the
// libdouble-conversion case and, in contrast to libdouble-conversion or sscanf, we don't allow
// "-nan" or "+nan"
- if (string_equals("nan", num, numLen)) {
- processed = 3;
- return qt_qnan();
- } else if (string_equals("+nan", num, numLen) || string_equals("-nan", num, numLen)) {
- processed = 0;
- ok = false;
- return 0.0;
- }
+ if (char c = *num; numLen >= 3
+ && (c == '-' || c == '+' || c == 'I' || c == 'i' || c == 'N' || c == 'n')) {
+ bool negative = (c == '-');
+ bool hasSign = negative || (c == '+');
+ qptrdiff offset = 0;
+ if (hasSign) {
+ offset = 1;
+ c = num[offset];
+ }
- // Infinity values are implementation defined in the sscanf case. In the libdouble-conversion
- // case we need infinity as overflow marker.
- if (string_equals("+inf", num, numLen)) {
- processed = 4;
- return qt_inf();
- } else if (string_equals("inf", num, numLen)) {
- processed = 3;
- return qt_inf();
- } else if (string_equals("-inf", num, numLen)) {
- processed = 4;
- return -qt_inf();
+ if (c > '9') {
+ auto lowered = [](char c) {
+ // this will mangle non-letters, but none can become a letter
+ return c | 0x20;
+ };
+
+ // Found a non-digit, so this MUST be either "inf", "+inf", "-inf"
+ // or "nan". Anything else is an invalid parse and we don't need to
+ // feed it to the converter below.
+ if (numLen != offset + 3)
+ return {};
+
+ c = lowered(c);
+ char c2 = lowered(num[offset + 1]);
+ char c3 = lowered(num[offset + 2]);
+ if (c == 'i' && c2 == 'n' && c3 == 'f')
+ return { negative ? -qt_inf() : qt_inf(), offset + 3 };
+ else if (c == 'n' && c2 == 'a' && c3 == 'n' && !hasSign)
+ return { qt_qnan(), 3 };
+ return {};
+ }
}
double d = 0.0;
+ int processed;
#if !defined(QT_NO_DOUBLECONVERSION) && !defined(QT_BOOTSTRAPPED)
int conv_flags = double_conversion::StringToDoubleConverter::NO_FLAGS;
if (strayCharMode == TrailingJunkAllowed) {
@@ -331,63 +305,47 @@ double qt_asciiToDouble(const char *num, qsizetype numLen, bool &ok, int &proces
double_conversion::StringToDoubleConverter conv(conv_flags, 0.0, qt_qnan(), nullptr, nullptr);
if (int(numLen) != numLen) {
// a number over 2 GB in length is silly, just assume it isn't valid
- ok = false;
- processed = 0;
- return 0.0;
+ return {};
} else {
- d = conv.StringToDouble(num, numLen, &processed);
+ d = conv.StringToDouble(num, int(numLen), &processed);
}
- if (!qIsFinite(d)) {
- ok = false;
- if (qIsNaN(d)) {
+ if (!qt_is_finite(d)) {
+ if (qt_is_nan(d)) {
// Garbage found. We don't accept it and return 0.
- processed = 0;
- return 0.0;
+ return {};
} else {
// Overflow. That's not OK, but we still return infinity.
- return d;
+ return { d, -processed };
}
}
#else
- // need to ensure that our input is null-terminated for sscanf
- // (this is a QVarLengthArray<char, 128> but this code here is too low-level for QVLA)
- char reasonableBuffer[128];
- char *buffer;
- if (numLen < qsizetype(sizeof(reasonableBuffer)) - 1)
- buffer = reasonableBuffer;
- else
- buffer = static_cast<char *>(malloc(numLen + 1));
- memcpy(buffer, num, numLen);
- buffer[numLen] = '\0';
-
- if (qDoubleSscanf(buffer, QT_CLOCALE, "%lf%n", &d, &processed) < 1)
- processed = 0;
+ // ::digits10 is 19, but ::max() is 18'446'744'073'709'551'615ULL - go, figure...
+ constexpr auto maxDigitsForULongLong = 1 + std::numeric_limits<unsigned long long>::digits10;
+ // need to ensure that we don't read more than numLen of input:
+ char fmt[1 + maxDigitsForULongLong + 4 + 1];
+ qsnprintf(fmt, sizeof fmt, "%s%llu%s", "%", static_cast<unsigned long long>(numLen), "lf%n");
- if (buffer != reasonableBuffer)
- free(buffer);
+ if (qDoubleSscanf(num, QT_CLOCALE, fmt, &d, &processed) < 1)
+ processed = 0;
- if ((strayCharMode == TrailingJunkProhibited && processed != numLen) || qIsNaN(d)) {
+ if ((strayCharMode == TrailingJunkProhibited && processed != numLen) || qt_is_nan(d)) {
// Implementation defined nan symbol or garbage found. We don't accept it.
- processed = 0;
- ok = false;
- return 0.0;
+ return {};
}
- if (!qIsFinite(d)) {
+ if (!qt_is_finite(d)) {
// Overflow. Check for implementation-defined infinity symbols and reject them.
// We assume that any infinity symbol has to contain a character that cannot be part of a
// "normal" number (that is 0-9, ., -, +, e).
- ok = false;
for (int i = 0; i < processed; ++i) {
char c = num[i];
if ((c < '0' || c > '9') && c != '.' && c != '-' && c != '+' && c != 'e' && c != 'E') {
// Garbage found
- processed = 0;
- return 0.0;
+ return {};
}
}
- return d;
+ return { d, -processed };
}
#endif // !defined(QT_NO_DOUBLECONVERSION) && !defined(QT_BOOTSTRAPPED)
@@ -399,60 +357,164 @@ double qt_asciiToDouble(const char *num, qsizetype numLen, bool &ok, int &proces
for (int i = 0; i < processed; ++i) {
if (num[i] >= '1' && num[i] <= '9') {
// if a digit before any 'e' is not 0, then a non-zero number was intended.
- ok = false;
- return 0.0;
+ return {d, -processed};
} else if (num[i] == 'e' || num[i] == 'E') {
break;
}
}
}
- return d;
+ return { d, processed };
}
-unsigned long long
-qstrtoull(const char * nptr, const char **endptr, int base, bool *ok)
+/* Detect base if 0 and, if base is hex or bin, skip over 0x/0b prefixes */
+static auto scanPrefix(const char *p, const char *stop, int base)
{
- // strtoull accepts negative numbers. We don't.
- // Use a different variable so we pass the original nptr to strtoul
- // (we need that so endptr may be nptr in case of failure)
- const char *begin = nptr;
- while (ascii_isspace(*begin))
- ++begin;
- if (*begin == '-') {
- *ok = false;
- return 0;
+ struct R
+ {
+ const char *next;
+ int base;
+ };
+ if (p < stop && isAsciiDigit(*p)) {
+ if (*p == '0') {
+ const char *x_or_b = p + 1;
+ if (x_or_b < stop) {
+ switch (*x_or_b) {
+ case 'b':
+ case 'B':
+ if (base == 0)
+ base = 2;
+ if (base == 2)
+ p += 2;
+ return R{p, base};
+ case 'x':
+ case 'X':
+ if (base == 0)
+ base = 16;
+ if (base == 16)
+ p += 2;
+ return R{p, base};
+ }
+ }
+ if (base == 0)
+ base = 8;
+ } else if (base == 0) {
+ base = 10;
+ }
+ Q_ASSERT(base);
}
+ return R{p, base};
+}
- *ok = true;
- errno = 0;
- char *endptr2 = nullptr;
- unsigned long long result = qt_strtoull(nptr, &endptr2, base);
- if (endptr)
- *endptr = endptr2;
- if ((result == 0 || result == std::numeric_limits<unsigned long long>::max())
- && (errno || endptr2 == nptr)) {
- *ok = false;
- return 0;
+static bool isDigitForBase(char d, int base)
+{
+ if (d < '0')
+ return false;
+ if (d - '0' < qMin(base, 10))
+ return true;
+ if (base > 10) {
+ d |= 0x20; // tolower
+ return d >= 'a' && d < 'a' + base - 10;
}
- return result;
+ return false;
}
-long long
-qstrtoll(const char * nptr, const char **endptr, int base, bool *ok)
+QSimpleParsedNumber<qulonglong> qstrntoull(const char *begin, qsizetype size, int base)
{
- *ok = true;
- errno = 0;
- char *endptr2 = nullptr;
- long long result = qt_strtoll(nptr, &endptr2, base);
- if (endptr)
- *endptr = endptr2;
- if ((result == 0 || result == std::numeric_limits<long long>::min()
- || result == std::numeric_limits<long long>::max())
- && (errno || nptr == endptr2)) {
- *ok = false;
- return 0;
+ const char *p = begin, *const stop = begin + size;
+ while (p < stop && ascii_isspace(*p))
+ ++p;
+ unsigned long long result = 0;
+ if (p >= stop || *p == '-')
+ return { };
+ const auto prefix = scanPrefix(*p == '+' ? p + 1 : p, stop, base);
+ if (!prefix.base || prefix.next >= stop)
+ return { };
+
+ const auto res = std::from_chars(prefix.next, stop, result, prefix.base);
+ if (res.ec != std::errc{})
+ return { };
+ return { result, res.ptr == prefix.next ? 0 : res.ptr - begin };
+}
+
+QSimpleParsedNumber<qlonglong> qstrntoll(const char *begin, qsizetype size, int base)
+{
+ const char *p = begin, *const stop = begin + size;
+ while (p < stop && ascii_isspace(*p))
+ ++p;
+ // Frustratingly, std::from_chars() doesn't cope with a 0x prefix that might
+ // be between the sign and digits, so we have to handle that for it, which
+ // means we can't use its ability to read LLONG_MIN directly; see below.
+ const bool negate = p < stop && *p == '-';
+ if (negate || (p < stop && *p == '+'))
+ ++p;
+
+ const auto prefix = scanPrefix(p, stop, base);
+ // Must check for digit, as from_chars() will accept a sign, which would be
+ // a second sign, that we should reject.
+ if (!prefix.base || prefix.next >= stop || !isDigitForBase(*prefix.next, prefix.base))
+ return { };
+
+ long long result = 0;
+ auto res = std::from_chars(prefix.next, stop, result, prefix.base);
+ if (negate && res.ec == std::errc::result_out_of_range) {
+ // Maybe LLONG_MIN:
+ unsigned long long check = 0;
+ res = std::from_chars(prefix.next, stop, check, prefix.base);
+ if (res.ec == std::errc{} && check + std::numeric_limits<long long>::min() == 0)
+ return { std::numeric_limits<long long>::min(), res.ptr - begin };
+ return { };
+ }
+ if (res.ec != std::errc{})
+ return { };
+ return { negate ? -result : result, res.ptr - begin };
+}
+
+template <typename Char>
+static Q_ALWAYS_INLINE void qulltoString_helper(qulonglong number, int base, Char *&p)
+{
+ // Performance-optimized code. Compiler can generate faster code when base is known.
+ switch (base) {
+#define BIG_BASE_LOOP(b) \
+ do { \
+ const int r = number % b; \
+ *--p = Char((r < 10 ? '0' : 'a' - 10) + r); \
+ number /= b; \
+ } while (number)
+#ifndef __OPTIMIZE_SIZE__
+# define SMALL_BASE_LOOP(b) \
+ do { \
+ *--p = Char('0' + number % b); \
+ number /= b; \
+ } while (number)
+
+ case 2: SMALL_BASE_LOOP(2); break;
+ case 8: SMALL_BASE_LOOP(8); break;
+ case 10: SMALL_BASE_LOOP(10); break;
+ case 16: BIG_BASE_LOOP(16); break;
+#undef SMALL_BASE_LOOP
+#endif
+ default: BIG_BASE_LOOP(base); break;
+#undef BIG_BASE_LOOP
}
- return result;
+}
+
+// This is technically "qulonglong to ascii", but that name's taken
+QString qulltoBasicLatin(qulonglong number, int base, bool negative)
+{
+ if (number == 0)
+ return QStringLiteral("0");
+ // Length of MIN_LLONG with the sign in front is 65; we never need surrogate pairs.
+ // We do not need a terminator.
+ const unsigned maxlen = 65;
+ static_assert(CHAR_BIT * sizeof(number) + 1 <= maxlen);
+ char16_t buff[maxlen];
+ char16_t *const end = buff + maxlen, *p = end;
+
+ qulltoString_helper<char16_t>(number, base, p);
+ if (negative)
+ *--p = u'-';
+
+ return QString(reinterpret_cast<QChar *>(p), end - p);
}
QString qulltoa(qulonglong number, int base, const QStringView zero)
@@ -465,11 +527,7 @@ QString qulltoa(qulonglong number, int base, const QStringView zero)
char16_t *const end = buff + maxlen, *p = end;
if (base != 10 || zero == u"0") {
- while (number != 0) {
- int c = number % base;
- *--p = c < 10 ? '0' + c : c - 10 + 'a';
- number /= base;
- }
+ qulltoString_helper<char16_t>(number, base, p);
} else if (zero.size() && !zero.at(0).isSurrogate()) {
const char16_t zeroUcs2 = zero.at(0).unicode();
while (number != 0) {
@@ -487,8 +545,8 @@ QString qulltoa(qulonglong number, int base, const QStringView zero)
number /= base;
}
- } else {
- return QString();
+ } else { // zero should always be either a non-surrogate or a surrogate pair:
+ Q_UNREACHABLE_RETURN(QString());
}
return QString(reinterpret_cast<QChar *>(p), end - p);
@@ -497,18 +555,18 @@ QString qulltoa(qulonglong number, int base, const QStringView zero)
/*!
\internal
- Converts the initial portion of the string pointed to by \a s00 to a double, using the 'C' locale.
+ Converts the initial portion of the string pointed to by \a s00 to a double,
+ using the 'C' locale. The function sets the pointer pointed to by \a se to
+ point to the character past the last character converted.
*/
double qstrntod(const char *s00, qsizetype len, const char **se, bool *ok)
{
- int processed = 0;
- bool nonNullOk = false;
- double d = qt_asciiToDouble(s00, len, nonNullOk, processed, TrailingJunkAllowed);
+ auto r = qt_asciiToDouble(s00, len, TrailingJunkAllowed);
if (se)
- *se = s00 + processed;
+ *se = s00 + (r.used < 0 ? -r.used : r.used);
if (ok)
- *ok = nonNullOk;
- return d;
+ *ok = r.ok();
+ return r.result;
}
QString qdtoa(qreal d, int *decpt, int *sign)
@@ -518,7 +576,7 @@ QString qdtoa(qreal d, int *decpt, int *sign)
int length = 0;
// Some versions of libdouble-conversion like an extra digit, probably for '\0'
- constexpr int digits = std::numeric_limits<double>::max_digits10 + 1;
+ constexpr qsizetype digits = std::numeric_limits<double>::max_digits10 + 1;
char result[digits];
qt_doubleToAscii(d, QLocaleData::DFSignificantDigits, QLocale::FloatingPointShortest,
result, digits, nonNullSign, length, nonNullDecpt);
@@ -528,7 +586,213 @@ QString qdtoa(qreal d, int *decpt, int *sign)
if (decpt)
*decpt = nonNullDecpt;
- return QLatin1String(result, length);
+ return QLatin1StringView(result, length);
+}
+
+static QLocaleData::DoubleForm resolveFormat(int precision, int decpt, qsizetype length)
+{
+ bool useDecimal;
+ if (precision == QLocale::FloatingPointShortest) {
+ // Find out which representation is shorter.
+ // Set bias to everything added to exponent form but not
+ // decimal, minus the converse.
+
+ // Exponent adds separator, sign and two exponents:
+ int bias = 2 + 2;
+ if (length <= decpt && length > 1)
+ ++bias;
+ else if (length == 1 && decpt <= 0)
+ --bias;
+
+ // When 0 < decpt <= length, the forms have equal digit
+ // counts, plus things bias has taken into account;
+ // otherwise decimal form's digit count is right-padded with
+ // zeros to decpt, when decpt is positive, otherwise it's
+ // left-padded with 1 - decpt zeros.
+ if (decpt <= 0)
+ useDecimal = 1 - decpt <= bias;
+ else if (decpt <= length)
+ useDecimal = true;
+ else
+ useDecimal = decpt <= length + bias;
+ } else {
+ // X == decpt - 1, POSIX's P; -4 <= X < P iff -4 < decpt <= P
+ Q_ASSERT(precision >= 0);
+ useDecimal = decpt > -4 && decpt <= (precision ? precision : 1);
+ }
+ return useDecimal ? QLocaleData::DFDecimal : QLocaleData::DFExponent;
+}
+
+static constexpr int digits(int number)
+{
+ Q_ASSERT(number >= 0);
+ if (Q_LIKELY(number < 1000))
+ return number < 10 ? 1 : number < 100 ? 2 : 3;
+ int i = 3;
+ for (number /= 1000; number; number /= 10)
+ ++i;
+ return i;
+}
+
+// Used generically for both QString and QByteArray
+template <typename T>
+static T dtoString(double d, QLocaleData::DoubleForm form, int precision, bool uppercase)
+{
+ // Undocumented: aside from F.P.Shortest, precision < 0 is treated as
+ // default, 6 - same as printf().
+ if (precision != QLocale::FloatingPointShortest && precision < 0)
+ precision = 6;
+
+ using D = std::numeric_limits<double>;
+ // 1 is for the null-terminator
+ constexpr int MaxDigits = 1 + qMax(D::max_exponent10, D::digits10 - D::min_exponent10);
+
+ // "maxDigits" above is a reasonable estimate, though we may need more due to extra precision
+ int bufSize = 1;
+ if (precision == QLocale::FloatingPointShortest)
+ bufSize += D::max_digits10;
+ else if (form == QLocaleData::DFDecimal && qt_is_finite(d))
+ bufSize += wholePartSpace(qAbs(d)) + precision;
+ else // Add extra digit due to different interpretations of precision.
+ bufSize += qMax(2, precision) + 1; // Must also be big enough for "nan" or "inf"
+
+ // Reserve `MaxDigits` on the stack, which is a reasonable estimate;
+ // but we may need more due to extra precision, which we cannot know at compile-time.
+ QVarLengthArray<char, MaxDigits> buffer(bufSize);
+ bool negative = false;
+ int length = 0;
+ int decpt = 0;
+ qt_doubleToAscii(d, form, precision, buffer.data(), buffer.size(), negative, length, decpt);
+ QLatin1StringView view(buffer.data(), length);
+ const bool succinct = form == QLocaleData::DFSignificantDigits;
+ qsizetype total = (negative ? 1 : 0) + length;
+ if (qt_is_finite(d)) {
+ if (succinct)
+ form = resolveFormat(precision, decpt, view.size());
+
+ switch (form) {
+ case QLocaleData::DFExponent:
+ total += 3; // (.e+) The '.' may not be needed, but we would only overestimate by 1 char
+ // Exponents: we guarantee at least 2
+ total += std::max(2, digits(std::abs(decpt - 1)));
+ // "length - 1" because one of the digits will always be before the decimal point
+ if (int extraPrecision = precision - (length - 1); extraPrecision > 0 && !succinct)
+ total += extraPrecision; // some requested zero-padding
+ break;
+ case QLocaleData::DFDecimal:
+ if (decpt <= 0) // leading "0." and zeros
+ total += 2 - decpt;
+ else if (decpt < length) // just the dot
+ total += 1;
+ else // trailing zeros (and no dot, unless we require extra precision):
+ total += decpt - length;
+
+ if (precision > 0 && !succinct) {
+ // May need trailing zeros to satisfy precision:
+ if (decpt < length)
+ total += std::max(0, precision - length + decpt);
+ else // and a dot to separate them:
+ total += 1 + precision;
+ }
+ break;
+ case QLocaleData::DFSignificantDigits:
+ Q_UNREACHABLE(); // Handled earlier
+ }
+ }
+
+ constexpr bool IsQString = std::is_same_v<T, QString>;
+ using Char = std::conditional_t<IsQString, char16_t, char>;
+
+ T result;
+ result.reserve(total);
+
+ if (negative && !isZero(d)) // We don't return "-0"
+ result.append(Char('-'));
+ if (!qt_is_finite(d)) {
+ result.append(view);
+ if (uppercase)
+ result = std::move(result).toUpper();
+ } else {
+ switch (form) {
+ case QLocaleData::DFExponent: {
+ result.append(view.first(1));
+ view = view.sliced(1);
+ if (!view.isEmpty() || (!succinct && precision > 0)) {
+ result.append(Char('.'));
+ result.append(view);
+ if (qsizetype pad = precision - view.size(); !succinct && pad > 0) {
+ for (int i = 0; i < pad; ++i)
+ result.append(Char('0'));
+ }
+ }
+ int exponent = decpt - 1;
+ result.append(Char(uppercase ? 'E' : 'e'));
+ result.append(Char(exponent < 0 ? '-' : '+'));
+ exponent = std::abs(exponent);
+ Q_ASSERT(exponent <= D::max_exponent10 + D::max_digits10);
+ int exponentDigits = digits(exponent);
+ // C's printf guarantees a two-digit exponent, and so do we:
+ if (exponentDigits == 1)
+ result.append(Char('0'));
+ result.resize(result.size() + exponentDigits);
+ auto location = reinterpret_cast<Char *>(result.end());
+ qulltoString_helper<Char>(exponent, 10, location);
+ break;
+ }
+ case QLocaleData::DFDecimal:
+ if (decpt < 0) {
+ if constexpr (IsQString)
+ result.append(u"0.0");
+ else
+ result.append("0.0");
+ while (++decpt < 0)
+ result.append(Char('0'));
+ result.append(view);
+ if (!succinct) {
+ auto numDecimals = result.size() - 2 - (negative ? 1 : 0);
+ for (qsizetype i = numDecimals; i < precision; ++i)
+ result.append(Char('0'));
+ }
+ } else {
+ if (decpt > view.size()) {
+ result.append(view);
+ const int sign = negative ? 1 : 0;
+ while (result.size() - sign < decpt)
+ result.append(Char('0'));
+ view = {};
+ } else if (decpt) {
+ result.append(view.first(decpt));
+ view = view.sliced(decpt);
+ } else {
+ result.append(Char('0'));
+ }
+ if (!view.isEmpty() || (!succinct && view.size() < precision)) {
+ result.append(Char('.'));
+ result.append(view);
+ if (!succinct) {
+ for (qsizetype i = view.size(); i < precision; ++i)
+ result.append(Char('0'));
+ }
+ }
+ }
+ break;
+ case QLocaleData::DFSignificantDigits:
+ Q_UNREACHABLE(); // taken care of earlier
+ break;
+ }
+ }
+ Q_ASSERT(total >= result.size()); // No reallocations are needed
+ return result;
+}
+
+QString qdtoBasicLatin(double d, QLocaleData::DoubleForm form, int precision, bool uppercase)
+{
+ return dtoString<QString>(d, form, precision, uppercase);
+}
+
+QByteArray qdtoAscii(double d, QLocaleData::DoubleForm form, int precision, bool uppercase)
+{
+ return dtoString<QByteArray>(d, form, precision, uppercase);
}
QT_END_NAMESPACE
diff --git a/src/corelib/text/qlocale_tools_p.h b/src/corelib/text/qlocale_tools_p.h
index e10408741e..9b02403ea4 100644
--- a/src/corelib/text/qlocale_tools_p.h
+++ b/src/corelib/text/qlocale_tools_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QLOCALE_TOOLS_P_H
#define QLOCALE_TOOLS_P_H
@@ -63,26 +27,28 @@ enum StrayCharacterMode {
};
// API note: this function can't process a number with more than 2.1 billion digits
-double qt_asciiToDouble(const char *num, qsizetype numLen, bool &ok, int &processed,
- StrayCharacterMode strayCharMode = TrailingJunkProhibited);
-void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, char *buf, int bufSize,
+[[nodiscard]] QSimpleParsedNumber<double>
+qt_asciiToDouble(const char *num, qsizetype numLen,
+ StrayCharacterMode strayCharMode = TrailingJunkProhibited);
+void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision,
+ char *buf, qsizetype bufSize,
bool &sign, int &length, int &decpt);
-QString qulltoa(qulonglong l, int base, const QStringView zero);
-Q_CORE_EXPORT QString qdtoa(qreal d, int *decpt, int *sign);
+[[nodiscard]] QString qulltoBasicLatin(qulonglong l, int base, bool negative);
+[[nodiscard]] QString qulltoa(qulonglong l, int base, const QStringView zero);
+[[nodiscard]] Q_CORE_EXPORT QString qdtoa(qreal d, int *decpt, int *sign);
+[[nodiscard]] QString qdtoBasicLatin(double d, QLocaleData::DoubleForm form,
+ int precision, bool uppercase);
+[[nodiscard]] QByteArray qdtoAscii(double d, QLocaleData::DoubleForm form,
+ int precision, bool uppercase);
-inline bool isZero(double d)
+[[nodiscard]] constexpr inline bool isZero(double d)
{
- uchar *ch = (uchar *)&d;
- if (QSysInfo::ByteOrder == QSysInfo::BigEndian) {
- return !(ch[0] & 0x7F || ch[1] || ch[2] || ch[3] || ch[4] || ch[5] || ch[6] || ch[7]);
- } else {
- return !(ch[7] & 0x7F || ch[6] || ch[5] || ch[4] || ch[3] || ch[2] || ch[1] || ch[0]);
- }
+ return d == 0; // Amusingly, compilers do not grumble.
}
// Enough space for the digits before the decimal separator:
-inline int wholePartSpace(double d)
+[[nodiscard]] inline int wholePartSpace(double d)
{
Q_ASSERT(d >= 0); // caller should call qAbs() if needed
// Optimize for numbers between -512k and 512k - otherwise, use the
@@ -92,30 +58,33 @@ inline int wholePartSpace(double d)
// Returns code-point of same kind (UCS2 or UCS4) as zero; digit is 0 through 9
template <typename UcsInt>
-inline UcsInt unicodeForDigit(uint digit, UcsInt zero)
+[[nodiscard]] inline UcsInt unicodeForDigit(uint digit, UcsInt zero)
{
- // Must match QLocaleData::numericToCLocale()'s digit-digestion.
+ // Must match qlocale.cpp's NumberTokenizer's digit-digestion.
Q_ASSERT(digit < 10);
if (!digit)
return zero;
- // See QTBUG-85409: Suzhou's digits are U+3007, U+2021, ..., U+3029
+ // See QTBUG-85409: Suzhou's digits are U+3007, U+3021, ..., U+3029
if (zero == u'\u3007')
return u'\u3020' + digit;
- // At CLDR 36.1, no other number system's digits were discontinuous.
+ // In util/locale_database/ldml.py, LocaleScanner.numericData() asserts no
+ // other number system in CLDR has discontinuous digits.
return zero + digit;
}
-Q_CORE_EXPORT double qstrntod(const char *s00, qsizetype len, char const **se, bool *ok);
-inline double qstrtod(const char *s00, char const **se, bool *ok)
+[[nodiscard]] Q_CORE_EXPORT double qstrntod(const char *s00, qsizetype len,
+ char const **se, bool *ok);
+[[nodiscard]] inline double qstrtod(const char *s00, char const **se, bool *ok)
{
qsizetype len = qsizetype(strlen(s00));
return qstrntod(s00, len, se, ok);
}
-qlonglong qstrtoll(const char *nptr, const char **endptr, int base, bool *ok);
-qulonglong qstrtoull(const char *nptr, const char **endptr, int base, bool *ok);
+[[nodiscard]] Q_AUTOTEST_EXPORT
+QSimpleParsedNumber<qlonglong> qstrntoll(const char *nptr, qsizetype size, int base);
+[[nodiscard]] QSimpleParsedNumber<qulonglong> qstrntoull(const char *nptr, qsizetype size, int base);
QT_END_NAMESPACE
diff --git a/src/corelib/text/qlocale_unix.cpp b/src/corelib/text/qlocale_unix.cpp
index 51b23f1559..a934f24c01 100644
--- a/src/corelib/text/qlocale_unix.cpp
+++ b/src/corelib/text/qlocale_unix.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qlocale_p.h"
@@ -47,6 +11,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#ifndef QT_NO_SYSTEMLOCALE
struct QSystemLocaleData
{
@@ -77,6 +43,8 @@ void QSystemLocaleData::readEnvironment()
{
QWriteLocker locker(&lock);
+ // See https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_02
+ // for the semantics of each of these:
QByteArray all = qgetenv("LC_ALL");
QByteArray numeric = all.isEmpty() ? qgetenv("LC_NUMERIC") : all;
QByteArray time = all.isEmpty() ? qgetenv("LC_TIME") : all;
@@ -111,7 +79,7 @@ Q_GLOBAL_STATIC(QSystemLocaleData, qSystemLocaleData)
#ifndef QT_NO_SYSTEMLOCALE
-static bool contradicts(const QString &maybe, const QString &known)
+static bool contradicts(QStringView maybe, const QString &known)
{
if (maybe.isEmpty())
return false;
@@ -128,17 +96,12 @@ static bool contradicts(const QString &maybe, const QString &known)
Belarusian. There are many more such prefixings between two- and
three-letter codes.)
*/
- QLocale::Language langm, langk;
- QLocale::Script scriptm, scriptk;
- QLocale::Country landm, landk;
- QLocalePrivate::getLangAndCountry(maybe, langm, scriptm, landm);
- QLocalePrivate::getLangAndCountry(known, langk, scriptk, landk);
- return (langm != QLocale::AnyLanguage && langm != langk)
- || (scriptm != QLocale::AnyScript && scriptm != scriptk)
- || (landm != QLocale::AnyCountry && landm != landk);
+ QLocaleId knownId = QLocaleId::fromName(known);
+ QLocaleId maybeId = QLocaleId::fromName(maybe);
+ return !(maybeId.acceptLanguage(knownId.language_id) && maybeId.acceptScriptTerritory(knownId));
}
-QLocale QSystemLocale::fallbackUiLocale() const
+QLocale QSystemLocale::fallbackLocale() const
{
// See man 7 locale for precedence - LC_ALL beats LC_MESSAGES beats LANG:
QString lang = qEnvironmentVariable("LC_ALL");
@@ -147,22 +110,21 @@ QLocale QSystemLocale::fallbackUiLocale() const
if (lang.isEmpty())
lang = qEnvironmentVariable("LANG");
// if the locale is the "C" locale, then we can return the language we found here:
- if (lang.isEmpty() || lang == QLatin1String("C") || lang == QLatin1String("POSIX"))
+ if (lang.isEmpty() || lang == "C"_L1 || lang == "POSIX"_L1)
return QLocale(lang);
// ... otherwise, if the first part of LANGUAGE says more than or
// contradicts what we have, use that:
- QString language = qEnvironmentVariable("LANGUAGE");
- if (!language.isEmpty()) {
- language = language.split(QLatin1Char(':')).constFirst();
+ for (const auto &language : qEnvironmentVariable("LANGUAGE").tokenize(u':')) {
if (contradicts(language, lang))
return QLocale(language);
+ break; // We only look at the first entry.
}
return QLocale(lang);
}
-QVariant QSystemLocale::query(QueryType type, QVariant in) const
+QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
{
QSystemLocaleData *d = qSystemLocaleData();
@@ -199,14 +161,26 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
return lc_time.dayName(in.toInt(), QLocale::LongFormat);
case DayNameShort:
return lc_time.dayName(in.toInt(), QLocale::ShortFormat);
+ case DayNameNarrow:
+ return lc_time.dayName(in.toInt(), QLocale::NarrowFormat);
+ case StandaloneDayNameLong:
+ return lc_time.standaloneDayName(in.toInt(), QLocale::LongFormat);
+ case StandaloneDayNameShort:
+ return lc_time.standaloneDayName(in.toInt(), QLocale::ShortFormat);
+ case StandaloneDayNameNarrow:
+ return lc_time.standaloneDayName(in.toInt(), QLocale::NarrowFormat);
case MonthNameLong:
return lc_time.monthName(in.toInt(), QLocale::LongFormat);
case MonthNameShort:
return lc_time.monthName(in.toInt(), QLocale::ShortFormat);
+ case MonthNameNarrow:
+ return lc_time.monthName(in.toInt(), QLocale::NarrowFormat);
case StandaloneMonthNameLong:
return lc_time.standaloneMonthName(in.toInt(), QLocale::LongFormat);
case StandaloneMonthNameShort:
return lc_time.standaloneMonthName(in.toInt(), QLocale::ShortFormat);
+ case StandaloneMonthNameNarrow:
+ return lc_time.standaloneMonthName(in.toInt(), QLocale::NarrowFormat);
case DateToStringLong:
return lc_time.toString(in.toDate(), QLocale::LongFormat);
case DateToStringShort:
@@ -252,9 +226,9 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
}
case MeasurementSystem: {
const QString meas_locale = QString::fromLatin1(d->lc_measurement_var);
- if (meas_locale.compare(QLatin1String("Metric"), Qt::CaseInsensitive) == 0)
+ if (meas_locale.compare("Metric"_L1, Qt::CaseInsensitive) == 0)
return QLocale::MetricSystem;
- if (meas_locale.compare(QLatin1String("Other"), Qt::CaseInsensitive) == 0)
+ if (meas_locale.compare("Other"_L1, Qt::CaseInsensitive) == 0)
return QLocale::MetricSystem;
return QVariant((int)QLocale(meas_locale).measurementSystem());
}
@@ -268,28 +242,31 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
if (languages.isEmpty())
lst.append(QString::fromLatin1(d->lc_messages_var));
else
- lst = languages.split(QLatin1Char(':'));
+ lst = languages.split(u':');
- for (int i = 0; i < lst.size(); ++i) {
- const QString &name = lst.at(i);
- QString lang, script, cntry;
- if (qt_splitLocaleName(name, lang, script, cntry)) {
- if (!cntry.length())
- d->uiLanguages.append(lang);
- else
- d->uiLanguages.append(lang % QLatin1Char('-') % cntry);
+ for (const QString &e : std::as_const(lst)) {
+ QStringView language, script, territory;
+ if (qt_splitLocaleName(e, &language, &script, &territory)) {
+ QString joined = language.isEmpty() ? u"und"_s : language.toString();
+ if (!script.isEmpty())
+ joined += u'-' + script;
+ if (!territory.isEmpty())
+ joined += u'-' + territory;
+ d->uiLanguages.append(joined);
}
}
return d->uiLanguages.isEmpty() ? QVariant() : QVariant(d->uiLanguages);
}
case StringToStandardQuotation:
- return lc_messages.quoteString(qvariant_cast<QStringView>(in));
+ return lc_messages.quoteString(qvariant_cast<QStringView>(std::move(in)));
case StringToAlternateQuotation:
- return lc_messages.quoteString(qvariant_cast<QStringView>(in), QLocale::AlternateQuotation);
+ return lc_messages.quoteString(qvariant_cast<QStringView>(std::move(in)),
+ QLocale::AlternateQuotation);
case ListToSeparatedString:
return lc_messages.createSeparatedList(in.toStringList());
case LocaleChanged:
Q_ASSERT(false);
+ [[fallthrough]];
default:
break;
}
diff --git a/src/corelib/text/qlocale_wasm.cpp b/src/corelib/text/qlocale_wasm.cpp
new file mode 100644
index 0000000000..6b011af4a7
--- /dev/null
+++ b/src/corelib/text/qlocale_wasm.cpp
@@ -0,0 +1,54 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qlocale_p.h"
+
+#include <emscripten/val.h>
+
+#include <string>
+#include <vector>
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_NO_SYSTEMLOCALE
+
+namespace {
+
+QStringList navigatorLanguages()
+{
+ using emscripten::val;
+ const val navigator = val::global("navigator");
+ const auto languages = emscripten::vecFromJSArray<std::string>(navigator["languages"]);
+ QStringList qtLanguages;
+ for (const std::string& language : languages)
+ qtLanguages.append(QString::fromStdString(language));
+ return qtLanguages;
+}
+
+}
+
+QVariant QSystemLocale::query(QueryType query, QVariant &&in) const
+{
+ Q_UNUSED(in);
+
+ switch (query) {
+ case QSystemLocale::UILanguages:
+ return QVariant(navigatorLanguages());
+ default:
+ break;
+ }
+
+ return QVariant();
+}
+
+QLocale QSystemLocale::fallbackLocale() const
+{
+ const QStringList languages = navigatorLanguages();
+ if (languages.isEmpty())
+ return QLocale(u"en-US");
+ return QLocale(languages[0]);
+}
+
+#endif // QT_NO_SYSTEMLOCALE
+
+QT_END_NAMESPACE
diff --git a/src/corelib/text/qlocale_win.cpp b/src/corelib/text/qlocale_win.cpp
index d74ae40313..9fdb46a4c9 100644
--- a/src/corelib/text/qlocale_win.cpp
+++ b/src/corelib/text/qlocale_win.cpp
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qlocale_p.h"
#include "qlocale_tools_p.h"
@@ -46,16 +10,62 @@
#include "qdatetime.h"
#include "qdebug.h"
-#ifdef Q_OS_WIN
-# include <qt_windows.h>
-# include <time.h>
-#endif
+#include "QtCore/private/qgregoriancalendar_p.h" // for yearSharingWeekDays()
+
+#include <q20algorithm.h>
+
+// TODO QTBUG-121193: port away from the use of LCID to always use names.
+#include <qt_windows.h>
+#include <time.h>
+
+#if QT_CONFIG(cpp_winrt)
+# include <QtCore/private/qt_winrtbase_p.h>
+
+# include <winrt/Windows.Foundation.h>
+# include <winrt/Windows.Foundation.Collections.h>
+# include <winrt/Windows.System.UserProfile.h>
+#endif // QT_CONFIG(cpp_winrt)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+// Shared interpretation of %LANG%
+static auto scanLangEnv()
+{
+ struct R
+ {
+ QByteArray name; // empty means unknown; lookup from id may work
+ LCID id = 0; // 0 means unknown; lookup from name may work
+ } result;
+ const QByteArray lang = qgetenv("LANG");
+ if (lang.size() && (lang == "C" || qt_splitLocaleName(QString::fromLocal8Bit(lang)))) {
+ // See if we have a Windows locale code instead of a locale name:
+ const auto [id, used] = qstrntoll(lang.data(), lang.size(), 0);
+ if (used > 0 && id && INT_MIN <= id && id <= INT_MAX)
+ return R {QByteArray(), static_cast<LCID>(id)};
+ return R {lang, 0};
+ }
+ return R{};
+}
+
+static auto getDefaultWinId()
+{
+ const auto [name, id] = scanLangEnv();
+ if (id)
+ return id;
+
+ if (!name.isEmpty()) {
+ LCID id = LocaleNameToLCID(static_cast<LPCWSTR>(
+ QString::fromUtf8(name).toStdWString().data()), 0);
+ if (id)
+ return id;
+ }
+
+ return GetUserDefaultLCID();
+}
+
static QByteArray getWinLocaleName(LCID id = LOCALE_USER_DEFAULT);
-static QString winIso639LangName(LCID id = LOCALE_USER_DEFAULT);
-static QString winIso3116CtryName(LCID id = LOCALE_USER_DEFAULT);
#ifndef QT_NO_SYSTEMLOCALE
@@ -81,6 +91,17 @@ static QString winIso3116CtryName(LCID id = LOCALE_USER_DEFAULT);
# define LOCALE_SSHORTTIME 0x00000079
#endif
+namespace {
+template <typename T>
+static QVariant nullIfEmpty(T &&value)
+{
+ // For use where we should fall back to CLDR if we got an empty value.
+ if (value.isEmpty())
+ return {};
+ return std::move(value);
+}
+}
+
struct QSystemLocalePrivate
{
QSystemLocalePrivate();
@@ -94,6 +115,7 @@ struct QSystemLocalePrivate
QVariant timeFormat(QLocale::FormatType);
QVariant dateTimeFormat(QLocale::FormatType);
QVariant dayName(int, QLocale::FormatType);
+ QVariant standaloneMonthName(int, QLocale::FormatType);
QVariant monthName(int, QLocale::FormatType);
QVariant toString(QDate, QLocale::FormatType);
QVariant toString(QTime, QLocale::FormatType);
@@ -107,7 +129,7 @@ struct QSystemLocalePrivate
QVariant toCurrencyString(const QSystemLocale::CurrencyToStringArgument &);
QVariant uiLanguages();
QVariant nativeLanguageName();
- QVariant nativeCountryName();
+ QVariant nativeTerritoryName();
void update();
@@ -121,7 +143,7 @@ private:
// cached values:
LCID lcid;
- SubstitutionType substitutionType;
+ SubstitutionType substitutionType = SUnknown;
QString zero; // cached value for zeroDigit()
int getLocaleInfo(LCTYPE type, LPWSTR data, int size);
@@ -134,6 +156,8 @@ private:
SubstitutionType substitution();
QString substituteDigits(QString &&string);
+ QString correctDigits(QString &&string);
+ QString yearFix(int year, int fakeYear, QString &&formatted);
static QString winToQtFormat(QStringView sys_fmt);
@@ -141,9 +165,8 @@ private:
Q_GLOBAL_STATIC(QSystemLocalePrivate, systemLocalePrivate)
QSystemLocalePrivate::QSystemLocalePrivate()
- : substitutionType(SUnknown)
+ : lcid(getDefaultWinId())
{
- lcid = GetUserDefaultLCID();
}
inline int QSystemLocalePrivate::getCurrencyFormat(DWORD flags, LPCWSTR value, const CURRENCYFMTW *format, LPWSTR data, int size)
@@ -195,10 +218,11 @@ QVariant QSystemLocalePrivate::getLocaleInfo(LCTYPE type)
int QSystemLocalePrivate::getLocaleInfo_int(LCTYPE type)
{
- const QString str = getLocaleInfo(type).toString();
- bool ok = false;
- const int v = str.toInt(&ok);
- return ok ? v : 0;
+ DWORD value;
+ int r = GetLocaleInfo(lcid, type | LOCALE_RETURN_NUMBER,
+ reinterpret_cast<wchar_t *>(&value),
+ sizeof(value) / sizeof(wchar_t));
+ return r == sizeof(value) / sizeof(wchar_t) ? value : 0;
}
QSystemLocalePrivate::SubstitutionType QSystemLocalePrivate::substitution()
@@ -206,25 +230,25 @@ QSystemLocalePrivate::SubstitutionType QSystemLocalePrivate::substitution()
if (substitutionType == SUnknown) {
wchar_t buf[8];
if (!getLocaleInfo(LOCALE_IDIGITSUBSTITUTION, buf, 8)) {
- substitutionType = QSystemLocalePrivate::SNever;
+ substitutionType = SNever;
return substitutionType;
}
if (buf[0] == '1')
- substitutionType = QSystemLocalePrivate::SNever;
+ substitutionType = SNever;
else if (buf[0] == '0')
- substitutionType = QSystemLocalePrivate::SContext;
+ substitutionType = SContext;
else if (buf[0] == '2')
- substitutionType = QSystemLocalePrivate::SAlways;
+ substitutionType = SAlways;
else {
wchar_t digits[11]; // See zeroDigit() for why 11.
if (!getLocaleInfo(LOCALE_SNATIVEDIGITS, digits, 11)) {
- substitutionType = QSystemLocalePrivate::SNever;
+ substitutionType = SNever;
return substitutionType;
}
if (buf[0] == digits[0] + 2)
- substitutionType = QSystemLocalePrivate::SAlways;
+ substitutionType = SAlways;
else
- substitutionType = QSystemLocalePrivate::SNever;
+ substitutionType = SNever;
}
}
return substitutionType;
@@ -240,7 +264,7 @@ QString QSystemLocalePrivate::substituteDigits(QString &&string)
break;
Q_ASSERT(z > '9');
ushort *const qch = reinterpret_cast<ushort *>(string.data());
- for (int i = 0, stop = string.size(); i < stop; ++i) {
+ for (qsizetype i = 0, stop = string.size(); i < stop; ++i) {
ushort &ch = qch[i];
if (ch >= '0' && ch <= '9')
ch = unicodeForDigit(ch - '0', z);
@@ -249,9 +273,9 @@ QString QSystemLocalePrivate::substituteDigits(QString &&string)
}
case 2: {
// Surrogate pair (high, low):
- uint z = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
+ char32_t z = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
for (int i = 0; i < 10; i++) {
- uint digit = unicodeForDigit(i, z);
+ char32_t digit = unicodeForDigit(i, z);
const QChar s[2] = { QChar::highSurrogate(digit), QChar::lowSurrogate(digit) };
string.replace(QString(QLatin1Char('0' + i)), QString(s, 2));
}
@@ -265,6 +289,11 @@ QString QSystemLocalePrivate::substituteDigits(QString &&string)
return std::move(string);
}
+QString QSystemLocalePrivate::correctDigits(QString &&string)
+{
+ return substitution() == SAlways ? substituteDigits(std::move(string)) : std::move(string);
+}
+
QVariant QSystemLocalePrivate::zeroDigit()
{
if (zero.isEmpty()) {
@@ -282,36 +311,36 @@ QVariant QSystemLocalePrivate::zeroDigit()
zero = QString::fromWCharArray(digits, 1);
}
}
- return zero;
+ return nullIfEmpty(zero); // Do not std::move().
}
QVariant QSystemLocalePrivate::decimalPoint()
{
- return getLocaleInfo(LOCALE_SDECIMAL);
+ return nullIfEmpty(getLocaleInfo(LOCALE_SDECIMAL).toString());
}
QVariant QSystemLocalePrivate::groupSeparator()
{
- return getLocaleInfo(LOCALE_STHOUSAND);
+ return getLocaleInfo(LOCALE_STHOUSAND); // Empty means don't group digits.
}
QVariant QSystemLocalePrivate::negativeSign()
{
- return getLocaleInfo(LOCALE_SNEGATIVESIGN);
+ return nullIfEmpty(getLocaleInfo(LOCALE_SNEGATIVESIGN).toString());
}
QVariant QSystemLocalePrivate::positiveSign()
{
- return getLocaleInfo(LOCALE_SPOSITIVESIGN);
+ return nullIfEmpty(getLocaleInfo(LOCALE_SPOSITIVESIGN).toString());
}
QVariant QSystemLocalePrivate::dateFormat(QLocale::FormatType type)
{
switch (type) {
case QLocale::ShortFormat:
- return winToQtFormat(getLocaleInfo(LOCALE_SSHORTDATE).toString());
+ return nullIfEmpty(winToQtFormat(getLocaleInfo(LOCALE_SSHORTDATE).toString()));
case QLocale::LongFormat:
- return winToQtFormat(getLocaleInfo(LOCALE_SLONGDATE).toString());
+ return nullIfEmpty(winToQtFormat(getLocaleInfo(LOCALE_SLONGDATE).toString()));
case QLocale::NarrowFormat:
break;
}
@@ -322,96 +351,173 @@ QVariant QSystemLocalePrivate::timeFormat(QLocale::FormatType type)
{
switch (type) {
case QLocale::ShortFormat:
- return winToQtFormat(getLocaleInfo(LOCALE_SSHORTTIME).toString());
+ return nullIfEmpty(winToQtFormat(getLocaleInfo(LOCALE_SSHORTTIME).toString()));
case QLocale::LongFormat:
- return winToQtFormat(getLocaleInfo(LOCALE_STIMEFORMAT).toString());
+ return nullIfEmpty(winToQtFormat(getLocaleInfo(LOCALE_STIMEFORMAT).toString()));
case QLocale::NarrowFormat:
break;
}
- return QVariant();
+ return {};
}
QVariant QSystemLocalePrivate::dateTimeFormat(QLocale::FormatType type)
{
- return QString(dateFormat(type).toString() + QLatin1Char(' ') + timeFormat(type).toString());
+ QVariant d = dateFormat(type), t = timeFormat(type);
+ if (d.typeId() == QMetaType::QString && t.typeId() == QMetaType::QString)
+ return QString(d.toString() + u' ' + t.toString());
+ return {};
}
QVariant QSystemLocalePrivate::dayName(int day, QLocale::FormatType type)
{
if (day < 1 || day > 7)
- return QString();
+ return {};
- static const LCTYPE short_day_map[]
+ static constexpr LCTYPE short_day_map[]
= { LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2,
LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5,
LOCALE_SABBREVDAYNAME6, LOCALE_SABBREVDAYNAME7 };
- static const LCTYPE long_day_map[]
+ static constexpr LCTYPE long_day_map[]
= { LOCALE_SDAYNAME1, LOCALE_SDAYNAME2,
LOCALE_SDAYNAME3, LOCALE_SDAYNAME4, LOCALE_SDAYNAME5,
LOCALE_SDAYNAME6, LOCALE_SDAYNAME7 };
- static const LCTYPE narrow_day_map[]
+ static constexpr LCTYPE narrow_day_map[]
= { LOCALE_SSHORTESTDAYNAME1, LOCALE_SSHORTESTDAYNAME2,
LOCALE_SSHORTESTDAYNAME3, LOCALE_SSHORTESTDAYNAME4,
LOCALE_SSHORTESTDAYNAME5, LOCALE_SSHORTESTDAYNAME6,
LOCALE_SSHORTESTDAYNAME7 };
- day -= 1;
-
- if (type == QLocale::LongFormat)
- return getLocaleInfo(long_day_map[day]);
- if (type == QLocale::NarrowFormat)
- return getLocaleInfo(narrow_day_map[day]);
- return getLocaleInfo(short_day_map[day]);
+ return nullIfEmpty(getLocaleInfo(
+ (type == QLocale::LongFormat ? long_day_map
+ : type == QLocale::NarrowFormat ? narrow_day_map
+ : short_day_map)[day - 1]).toString());
}
-QVariant QSystemLocalePrivate::monthName(int month, QLocale::FormatType type)
+QVariant QSystemLocalePrivate::standaloneMonthName(int month, QLocale::FormatType type)
{
- static const LCTYPE short_month_map[]
+ static constexpr LCTYPE short_month_map[]
= { LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3,
LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6,
LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9,
LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12 };
- static const LCTYPE long_month_map[]
+ static constexpr LCTYPE long_month_map[]
= { LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3,
LOCALE_SMONTHNAME4, LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6,
LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8, LOCALE_SMONTHNAME9,
LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12 };
- month -= 1;
- if (month < 0 || month > 11)
- return QString();
+ if (month < 1 || month > 12)
+ return {};
- LCTYPE lctype = (type == QLocale::ShortFormat || type == QLocale::NarrowFormat)
- ? short_month_map[month] : long_month_map[month];
- return getLocaleInfo(lctype);
+ // Month is Jan = 1, ... Dec = 12; adjust by 1 to match array indexing from 0:
+ return nullIfEmpty(getLocaleInfo(
+ (type == QLocale::LongFormat ? long_month_map : short_month_map)[month - 1]).toString());
+}
+
+QVariant QSystemLocalePrivate::monthName(int month, QLocale::FormatType type)
+{
+ SYSTEMTIME st = {};
+ st.wYear = 2001;
+ st.wMonth = month;
+ st.wDay = 10;
+
+ const DWORD flags{}; // Must be clear when passing a format string.
+ // MS's docs for the LOCALE_SMONTHNAME* say to include the day in a format.
+ // Educated guess: this works for the LOCALE_SABBREVMONTHNAME*, too, in so
+ // far as the abbreviated plain name might differ from abbreviated
+ // standalone one.
+ const wchar_t *const format = type == QLocale::LongFormat ? L"ddMMMM" : L"ddMMM";
+ wchar_t buf[255];
+ if (getDateFormat(flags, &st, format, buf, 255) > 2) {
+ // Elide the two digits of day number
+ return nullIfEmpty(correctDigits(QString::fromWCharArray(buf + 2)));
+ }
+ return {};
+}
+
+static QString fourDigitYear(int year)
+{
+ // Return year formatted as an (at least) four digit number:
+ return QStringLiteral("%1").arg(year, 4, 10, QChar(u'0'));
+}
+
+QString QSystemLocalePrivate::yearFix(int year, int fakeYear, QString &&formatted)
+{
+ // Replace our ersatz fakeYear (that MS formats faithfully) with the correct
+ // form of year. We know the two-digit short form of fakeYear can not be
+ // mistaken for the month or day-of-month in the formatted date.
+ Q_ASSERT(fakeYear >= 1970 && fakeYear <= 2400);
+ const bool matchTwo = year >= 0 && year % 100 == fakeYear % 100;
+ auto yearUsed = fourDigitYear(fakeYear);
+ QString sign(year < 0 ? 1 : 0, u'-');
+ auto trueYear = fourDigitYear(year < 0 ? -year : year);
+ if (formatted.contains(yearUsed))
+ return std::move(formatted).replace(yearUsed, sign + trueYear);
+
+ auto tail = QStringView{yearUsed}.last(2);
+ Q_ASSERT(!matchTwo || tail == QString(sign + trueYear.last(2)));
+ if (formatted.contains(tail)) {
+ if (matchTwo)
+ return std::move(formatted);
+ return std::move(formatted).replace(tail.toString(), sign + trueYear.last(2));
+ }
+
+ // Localized digits (regardless of SAlways), perhaps ?
+ // First call to substituteDigits() ensures zero is initialized:
+ trueYear = substituteDigits(std::move(trueYear));
+ if (zero != u'0') {
+ yearUsed = substituteDigits(std::move(yearUsed));
+ if (year < 0)
+ sign = negativeSign().toString();
+
+ if (formatted.contains(yearUsed))
+ return std::move(formatted).replace(yearUsed, sign + trueYear);
+
+ const qsizetype twoDigits = 2 * zero.size();
+ tail = QStringView{yearUsed}.last(twoDigits);
+ if (formatted.contains(tail)) {
+ if (matchTwo)
+ return std::move(formatted);
+ return std::move(formatted).replace(tail.toString(), sign + trueYear.last(twoDigits));
+ }
+ }
+ qWarning("Failed to fix up year in formatted date-string using %d for %d", fakeYear, year);
+ return std::move(formatted);
}
QVariant QSystemLocalePrivate::toString(QDate date, QLocale::FormatType type)
{
- SYSTEMTIME st;
- memset(&st, 0, sizeof(SYSTEMTIME));
- st.wYear = date.year();
+ SYSTEMTIME st = {};
+ const int year = date.year();
+ // st.wYear is unsigned; and GetDateFormat() is documented to not handle
+ // dates before 1601.
+ const bool fixup = year < 1601;
+ st.wYear = fixup ? QGregorianCalendar::yearSharingWeekDays(date) : year;
st.wMonth = date.month();
st.wDay = date.day();
+ Q_ASSERT(!fixup || st.wYear % 100 != st.wMonth);
+ Q_ASSERT(!fixup || st.wYear % 100 != st.wDay);
+ // i.e. yearFix() can trust a match of its fakeYear's last two digits to not
+ // be the month or day part of the formatted date.
+
DWORD flags = (type == QLocale::LongFormat ? DATE_LONGDATE : DATE_SHORTDATE);
wchar_t buf[255];
if (getDateFormat(flags, &st, NULL, buf, 255)) {
- QString format = QString::fromWCharArray(buf);
- if (substitution() == SAlways)
- format = substituteDigits(std::move(format));
- return format;
+ QString text = QString::fromWCharArray(buf);
+ if (fixup)
+ text = yearFix(year, st.wYear, std::move(text));
+ return nullIfEmpty(correctDigits(std::move(text)));
}
- return QString();
+ return {};
}
QVariant QSystemLocalePrivate::toString(QTime time, QLocale::FormatType type)
{
- SYSTEMTIME st;
- memset(&st, 0, sizeof(SYSTEMTIME));
+ SYSTEMTIME st = {};
st.wHour = time.hour();
st.wMinute = time.minute();
st.wSecond = time.second();
@@ -419,22 +525,23 @@ QVariant QSystemLocalePrivate::toString(QTime time, QLocale::FormatType type)
DWORD flags = 0;
// keep the same conditional as timeFormat() above
- if (type == QLocale::ShortFormat)
- flags = TIME_NOSECONDS;
+ const QString format = type == QLocale::ShortFormat
+ ? getLocaleInfo(LOCALE_SSHORTTIME).toString()
+ : QString();
+ auto formatStr = reinterpret_cast<const wchar_t *>(format.isEmpty() ? nullptr : format.utf16());
wchar_t buf[255];
- if (getTimeFormat(flags, &st, NULL, buf, 255)) {
- QString format = QString::fromWCharArray(buf);
- if (substitution() == SAlways)
- format = substituteDigits(std::move(format));
- return format;
- }
- return QString();
+ if (getTimeFormat(flags, &st, formatStr, buf, int(std::size(buf))))
+ return nullIfEmpty(correctDigits(QString::fromWCharArray(buf)));
+ return {};
}
QVariant QSystemLocalePrivate::toString(const QDateTime &dt, QLocale::FormatType type)
{
- return QString(toString(dt.date(), type).toString() + QLatin1Char(' ') + toString(dt.time(), type).toString());
+ QVariant d = toString(dt.date(), type), t = toString(dt.time(), type);
+ if (d.typeId() == QMetaType::QString && t.typeId() == QMetaType::QString)
+ return QString(d.toString() + u' ' + t.toString());
+ return {};
}
QVariant QSystemLocalePrivate::measurementSystem()
@@ -442,10 +549,8 @@ QVariant QSystemLocalePrivate::measurementSystem()
wchar_t output[2];
if (getLocaleInfo(LOCALE_IMEASURE, output, 2)) {
- QString iMeasure = QString::fromWCharArray(output);
- if (iMeasure == QLatin1String("1")) {
+ if (output[0] == L'1' && !output[1])
return QLocale::ImperialSystem;
- }
}
return QLocale::MetricSystem;
@@ -461,7 +566,7 @@ QVariant QSystemLocalePrivate::amText()
wchar_t output[15]; // maximum length including terminating zero character for Win2003+
if (getLocaleInfo(LOCALE_S1159, output, 15))
- return QString::fromWCharArray(output);
+ return nullIfEmpty(QString::fromWCharArray(output));
return QVariant();
}
@@ -471,7 +576,7 @@ QVariant QSystemLocalePrivate::pmText()
wchar_t output[15]; // maximum length including terminating zero character for Win2003+
if (getLocaleInfo(LOCALE_S2359, output, 15))
- return QString::fromWCharArray(output);
+ return nullIfEmpty(QString::fromWCharArray(output));
return QVariant();
}
@@ -491,12 +596,14 @@ QVariant QSystemLocalePrivate::currencySymbol(QLocale::CurrencySymbolFormat form
wchar_t buf[13];
switch (format) {
case QLocale::CurrencySymbol:
+ // Some locales do have empty currency symbol. All the same, fall back
+ // to CLDR for confirmation if MS claims that applies.
if (getLocaleInfo(LOCALE_SCURRENCY, buf, 13))
- return QString::fromWCharArray(buf);
+ return nullIfEmpty(QString::fromWCharArray(buf));
break;
case QLocale::CurrencyIsoCode:
if (getLocaleInfo(LOCALE_SINTLSYMBOL, buf, 9))
- return QString::fromWCharArray(buf);
+ return nullIfEmpty(QString::fromWCharArray(buf));
break;
case QLocale::CurrencyDisplayName: {
QVarLengthArray<wchar_t, 64> buf(64);
@@ -507,7 +614,7 @@ QVariant QSystemLocalePrivate::currencySymbol(QLocale::CurrencySymbolFormat form
if (!getLocaleInfo(LOCALE_SNATIVECURRNAME, buf.data(), buf.size()))
break;
}
- return QString::fromWCharArray(buf.data());
+ return nullIfEmpty(QString::fromWCharArray(buf.data()));
}
default:
break;
@@ -518,24 +625,24 @@ QVariant QSystemLocalePrivate::currencySymbol(QLocale::CurrencySymbolFormat form
QVariant QSystemLocalePrivate::toCurrencyString(const QSystemLocale::CurrencyToStringArgument &arg)
{
QString value;
- switch (arg.value.type()) {
- case QVariant::Int:
+ switch (arg.value.typeId()) {
+ case QMetaType::Int:
value = QLocaleData::c()->longLongToString(
arg.value.toInt(), -1, 10, -1, QLocale::OmitGroupSeparator);
break;
- case QVariant::UInt:
+ case QMetaType::UInt:
value = QLocaleData::c()->unsLongLongToString(
arg.value.toUInt(), -1, 10, -1, QLocale::OmitGroupSeparator);
break;
- case QVariant::Double:
+ case QMetaType::Double:
value = QLocaleData::c()->doubleToString(
arg.value.toDouble(), -1, QLocaleData::DFDecimal, -1, QLocale::OmitGroupSeparator);
break;
- case QVariant::LongLong:
+ case QMetaType::LongLong:
value = QLocaleData::c()->longLongToString(
arg.value.toLongLong(), -1, 10, -1, QLocale::OmitGroupSeparator);
break;
- case QVariant::ULongLong:
+ case QMetaType::ULongLong:
value = QLocaleData::c()->unsLongLongToString(
arg.value.toULongLong(), -1, 10, -1, QLocale::OmitGroupSeparator);
break;
@@ -567,7 +674,7 @@ QVariant QSystemLocalePrivate::toCurrencyString(const QSystemLocale::CurrencyToS
// int(32) == "12,34,56,789.00" == string("3;2;0")
// int(320)== "1234,56,789.00" == string("3;2")
QString groupingStr = getLocaleInfo(LOCALE_SMONGROUPING).toString();
- format.Grouping = groupingStr.remove(QLatin1Char(';')).toInt();
+ format.Grouping = groupingStr.remove(u';').toInt();
if (format.Grouping % 10 == 0) // magic
format.Grouping /= 10;
else
@@ -585,17 +692,29 @@ QVariant QSystemLocalePrivate::toCurrencyString(const QSystemLocale::CurrencyToS
pformat, out.data(), out.size());
}
- value = QString::fromWCharArray(out.data());
- if (substitution() == SAlways)
- value = substituteDigits(std::move(value));
- return value;
+ return nullIfEmpty(correctDigits(QString::fromWCharArray(out.data())));
}
QVariant QSystemLocalePrivate::uiLanguages()
{
+ QStringList result;
+#if QT_CONFIG(cpp_winrt)
+ using namespace winrt;
+ using namespace Windows::System::UserProfile;
+ QT_TRY {
+ auto languages = GlobalizationPreferences::Languages();
+ for (const auto &lang : languages)
+ result << QString::fromStdString(winrt::to_string(lang));
+ } QT_CATCH(...) {
+ // pass, just fall back to WIN32 API implementation
+ }
+ if (!result.isEmpty())
+ return result; // else just fall back to WIN32 API implementation
+#endif // QT_CONFIG(cpp_winrt)
+ // mingw and clang still have to use Win32 API
unsigned long cnt = 0;
QVarLengthArray<wchar_t, 64> buf(64);
-# if !defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE) // Not present in MinGW 4.9/bootstrap builds.
+# if !defined(QT_BOOTSTRAPPED) // Not present in MinGW 4.9/bootstrap builds.
unsigned long size = buf.size();
if (!GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &cnt, buf.data(), &size)) {
size = 0;
@@ -603,11 +722,10 @@ QVariant QSystemLocalePrivate::uiLanguages()
GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &cnt, NULL, &size)) {
buf.resize(size);
if (!GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &cnt, buf.data(), &size))
- return QStringList();
+ return {};
}
}
-# endif // !QT_BOOTSTRAPPED && !QT_BUILD_QMAKE
- QStringList result;
+# endif // !QT_BOOTSTRAPPED
result.reserve(cnt);
const wchar_t *str = buf.constData();
for (; cnt > 0; --cnt) {
@@ -617,7 +735,7 @@ QVariant QSystemLocalePrivate::uiLanguages()
result.append(s);
str += s.size() + 1;
}
- return result;
+ return nullIfEmpty(std::move(result));
}
QVariant QSystemLocalePrivate::nativeLanguageName()
@@ -625,7 +743,7 @@ QVariant QSystemLocalePrivate::nativeLanguageName()
return getLocaleInfo(LOCALE_SNATIVELANGUAGENAME);
}
-QVariant QSystemLocalePrivate::nativeCountryName()
+QVariant QSystemLocalePrivate::nativeTerritoryName()
{
return getLocaleInfo(LOCALE_SNATIVECOUNTRYNAME);
}
@@ -633,7 +751,7 @@ QVariant QSystemLocalePrivate::nativeCountryName()
void QSystemLocalePrivate::update()
{
- lcid = GetUserDefaultLCID();
+ lcid = getDefaultWinId();
substitutionType = SUnknown;
zero.resize(0);
}
@@ -641,20 +759,20 @@ void QSystemLocalePrivate::update()
QString QSystemLocalePrivate::winToQtFormat(QStringView sys_fmt)
{
QString result;
- int i = 0;
+ qsizetype i = 0;
while (i < sys_fmt.size()) {
- if (sys_fmt.at(i).unicode() == QLatin1Char('\'')) {
+ if (sys_fmt.at(i).unicode() == u'\'') {
QString text = qt_readEscapedFormatString(sys_fmt, &i);
- if (text == QLatin1String("'"))
- result += QLatin1String("''");
+ if (text == "'"_L1)
+ result += "''"_L1;
else
- result += QLatin1Char('\'') + text + QLatin1Char('\'');
+ result += u'\'' + text + u'\'';
continue;
}
QChar c = sys_fmt.at(i);
- int repeat = qt_repeatCount(sys_fmt.mid(i));
+ qsizetype repeat = qt_repeatCount(sys_fmt.mid(i));
switch (c.unicode()) {
// Date
@@ -665,13 +783,13 @@ QString QSystemLocalePrivate::winToQtFormat(QStringView sys_fmt)
repeat = 2;
switch (repeat) {
case 1:
- result += QLatin1String("yy"); // "y" unsupported by Qt, use "yy"
+ result += "yy"_L1; // "y" unsupported by Qt, use "yy"
break;
case 5:
- result += QLatin1String("yyyy"); // "yyyyy" same as "yyyy" on Windows
+ result += "yyyy"_L1; // "yyyyy" same as "yyyy" on Windows
break;
default:
- result += QString(repeat, QLatin1Char('y'));
+ result += QString(repeat, u'y');
break;
}
break;
@@ -682,14 +800,14 @@ QString QSystemLocalePrivate::winToQtFormat(QStringView sys_fmt)
case 2:
break; // no equivalent of "gg" in Qt
default:
- result += QLatin1Char('g');
+ result += u'g';
break;
}
break;
case 't':
if (repeat > 2)
repeat = 2;
- result += QLatin1String("AP"); // "t" unsupported, use "AP"
+ result += "AP"_L1; // "t" unsupported, use "AP"
break;
default:
result += QString(repeat, c);
@@ -702,12 +820,12 @@ QString QSystemLocalePrivate::winToQtFormat(QStringView sys_fmt)
return result;
}
-QLocale QSystemLocale::fallbackUiLocale() const
+QLocale QSystemLocale::fallbackLocale() const
{
return QLocale(QString::fromLatin1(getWinLocaleName()));
}
-QVariant QSystemLocale::query(QueryType type, QVariant in) const
+QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
{
QSystemLocalePrivate *d = systemLocalePrivate();
switch(type) {
@@ -735,12 +853,25 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
return d->dayName(in.toInt(), QLocale::LongFormat);
case DayNameShort:
return d->dayName(in.toInt(), QLocale::ShortFormat);
+ case DayNameNarrow:
+ return d->dayName(in.toInt(), QLocale::NarrowFormat);
+ case StandaloneDayNameLong:
+ case StandaloneDayNameShort:
+ case StandaloneDayNameNarrow:
+ // Windows does not provide standalone day names, so fall back to CLDR
+ return QVariant();
case MonthNameLong:
- case StandaloneMonthNameLong:
return d->monthName(in.toInt(), QLocale::LongFormat);
+ case StandaloneMonthNameLong:
+ return d->standaloneMonthName(in.toInt(), QLocale::LongFormat);
case MonthNameShort:
- case StandaloneMonthNameShort:
return d->monthName(in.toInt(), QLocale::ShortFormat);
+ case StandaloneMonthNameShort:
+ return d->standaloneMonthName(in.toInt(), QLocale::ShortFormat);
+ case MonthNameNarrow:
+ case StandaloneMonthNameNarrow:
+ // Windows provides no narrow month names, so we fall back to CLDR
+ return QVariant();
case DateToStringShort:
return d->toString(in.toDate(), QLocale::ShortFormat);
case DateToStringLong:
@@ -757,17 +888,13 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
return d->zeroDigit();
case LanguageId:
case ScriptId:
- case CountryId: {
- QString locale = QString::fromLatin1(getWinLocaleName());
- QLocale::Language lang;
- QLocale::Script script;
- QLocale::Country cntry;
- QLocalePrivate::getLangAndCountry(locale, lang, script, cntry);
+ case TerritoryId: {
+ QLocaleId lid = QLocaleId::fromName(QString::fromLatin1(getWinLocaleName()));
if (type == LanguageId)
- return lang;
+ return lid.language_id;
if (type == ScriptId)
- return script == QLocale::AnyScript ? fallbackUiLocale().script() : script;
- return cntry == QLocale::AnyCountry ? fallbackUiLocale().country() : cntry;
+ return lid.script_id ? lid.script_id : ushort(fallbackLocale().script());
+ return lid.territory_id ? lid.territory_id : ushort(fallbackLocale().territory());
}
case MeasurementSystem:
return d->measurementSystem();
@@ -782,7 +909,7 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
case CurrencySymbol:
return d->currencySymbol(QLocale::CurrencySymbolFormat(in.toUInt()));
case CurrencyToString:
- return d->toCurrencyString(in.value<QSystemLocale::CurrencyToStringArgument>());
+ return d->toCurrencyString(in.value<CurrencyToStringArgument>());
case UILanguages:
return d->uiLanguages();
case LocaleChanged:
@@ -790,8 +917,8 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
break;
case NativeLanguageName:
return d->nativeLanguageName();
- case NativeCountryName:
- return d->nativeCountryName();
+ case NativeTerritoryName:
+ return d->nativeTerritoryName();
default:
break;
}
@@ -804,8 +931,18 @@ struct WindowsToISOListElt {
char iso_name[6];
};
-/* NOTE: This array should be sorted by the first column! */
-static const WindowsToISOListElt windows_to_iso_list[] = {
+namespace {
+struct ByWindowsCode {
+ constexpr bool operator()(int lhs, WindowsToISOListElt rhs) const noexcept
+ { return lhs < int(rhs.windows_code); }
+ constexpr bool operator()(WindowsToISOListElt lhs, int rhs) const noexcept
+ { return int(lhs.windows_code) < rhs; }
+ constexpr bool operator()(WindowsToISOListElt lhs, WindowsToISOListElt rhs) const noexcept
+ { return lhs.windows_code < rhs.windows_code; }
+};
+} // unnamed namespace
+
+static constexpr WindowsToISOListElt windows_to_iso_list[] = {
{ 0x0401, "ar_SA" },
{ 0x0402, "bg\0 " },
{ 0x0403, "ca\0 " },
@@ -916,40 +1053,33 @@ static const WindowsToISOListElt windows_to_iso_list[] = {
{ 0x500a, "es_PR" }
};
-static const int windows_to_iso_count
- = sizeof(windows_to_iso_list)/sizeof(WindowsToISOListElt);
+static_assert(q20::is_sorted(std::begin(windows_to_iso_list), std::end(windows_to_iso_list),
+ ByWindowsCode{}));
static const char *winLangCodeToIsoName(int code)
{
int cmp = code - windows_to_iso_list[0].windows_code;
if (cmp < 0)
- return 0;
+ return nullptr;
if (cmp == 0)
return windows_to_iso_list[0].iso_name;
- int begin = 0;
- int end = windows_to_iso_count;
+ const auto it = std::lower_bound(std::begin(windows_to_iso_list),
+ std::end(windows_to_iso_list),
+ code,
+ ByWindowsCode{});
+ if (it != std::end(windows_to_iso_list) && !ByWindowsCode{}(code, *it))
+ return it->iso_name;
- while (end - begin > 1) {
- uint mid = (begin + end)/2;
-
- const WindowsToISOListElt *elt = windows_to_iso_list + mid;
- int cmp = code - elt->windows_code;
- if (cmp < 0)
- end = mid;
- else if (cmp > 0)
- begin = mid;
- else
- return elt->iso_name;
- }
-
- return 0;
+ return nullptr;
}
LCID qt_inIsoNametoLCID(const char *name)
{
+ if (!name)
+ return LOCALE_USER_DEFAULT;
// handle norwegian manually, the list above will fail
if (!strncmp(name, "nb", 2))
return 0x0414;
@@ -986,14 +1116,12 @@ static QString winIso639LangName(LCID id)
lang_code = QString::fromWCharArray(out);
if (!lang_code.isEmpty()) {
- const char *endptr;
- bool ok;
- QByteArray latin1_lang_code = std::move(lang_code).toLatin1();
- int i = qstrtoull(latin1_lang_code, &endptr, 16, &ok);
- if (ok && *endptr == '\0') {
+ const QByteArray latin1 = std::move(lang_code).toLatin1();
+ const auto [i, used] = qstrntoull(latin1.data(), latin1.size(), 16);
+ if (used >= latin1.size() || (used > 0 && latin1[used] == '\0')) {
switch (i) {
case 0x814:
- result = QLatin1String("nn"); // Nynorsk
+ result = u"nn"_s; // Nynorsk
break;
default:
break;
@@ -1026,30 +1154,24 @@ static QByteArray getWinLocaleName(LCID id)
{
QByteArray result;
if (id == LOCALE_USER_DEFAULT) {
- static QByteArray langEnvVar = qgetenv("LANG");
- result = langEnvVar;
- QString lang, script, cntry;
- if ( result == "C" || (!result.isEmpty()
- && qt_splitLocaleName(QString::fromLocal8Bit(result), lang, script, cntry)) ) {
- long id = 0;
- bool ok = false;
- id = qstrtoll(result.data(), 0, 0, &ok);
- if ( !ok || id == 0 || id < INT_MIN || id > INT_MAX )
- return result;
- return winLangCodeToIsoName(int(id));
- }
- }
+ const auto [name, lcid] = scanLangEnv();
+ if (!name.isEmpty())
+ return name;
+ if (lcid)
+ return winLangCodeToIsoName(lcid);
- if (id == LOCALE_USER_DEFAULT)
id = GetUserDefaultLCID();
+ }
+
QString resultusage = winIso639LangName(id);
QString country = winIso3116CtryName(id);
if (!country.isEmpty())
- resultusage += QLatin1Char('_') + country;
+ resultusage += u'_' + country;
return std::move(resultusage).toLatin1();
}
+// Helper for plugins/platforms/windows/
Q_CORE_EXPORT QLocale qt_localeFromLCID(LCID id)
{
return QLocale(QString::fromLatin1(getWinLocaleName(id)));
diff --git a/src/corelib/text/qregularexpression.cpp b/src/corelib/text/qregularexpression.cpp
index bfd483b9e2..67c422568b 100644
--- a/src/corelib/text/qregularexpression.cpp
+++ b/src/corelib/text/qregularexpression.cpp
@@ -1,43 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Giuseppe D'Angelo <dangelog@gmail.com>.
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Giuseppe D'Angelo <dangelog@gmail.com>.
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qregularexpression.h"
@@ -47,17 +11,22 @@
#include <QtCore/qmutex.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdebug.h>
-#include <QtCore/qthreadstorage.h>
#include <QtCore/qglobal.h>
#include <QtCore/qatomic.h>
#include <QtCore/qdatastream.h>
+#if defined(Q_OS_MACOS)
+#include <QtCore/private/qcore_mac_p.h>
+#endif
+
#define PCRE2_CODE_UNIT_WIDTH 16
#include <pcre2.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/*!
\class QRegularExpression
\inmodule QtCore
@@ -105,9 +74,9 @@ QT_BEGIN_NAMESPACE
\list
\li \e {Mastering Regular Expressions} (Third Edition) by Jeffrey E. F.
Friedl, ISBN 0-596-52812-4;
- \li the \l{http://pcre.org/pcre.txt} {pcrepattern(3)} man page, describing
- the pattern syntax supported by PCRE (the reference implementation of
- Perl-compatible regular expressions);
+ \li the \l{https://pcre.org/original/doc/html/pcrepattern.html}
+ {pcrepattern(3)} man page, describing the pattern syntax supported by PCRE
+ (the reference implementation of Perl-compatible regular expressions);
\li the \l{http://perldoc.perl.org/perlre.html} {Perl's regular expression
documentation} and the \l{http://perldoc.perl.org/perlretut.html} {Perl's
regular expression tutorial}.
@@ -140,6 +109,14 @@ QT_BEGIN_NAMESPACE
\snippet code/src_corelib_text_qregularexpression.cpp 2
+ Alternatively, you can use a
+ \l {https://en.cppreference.com/w/cpp/language/string_literal} {raw string literal},
+ in which case you don't need to escape backslashes in the pattern, all characters
+ between \c {R"(...)"} are considered raw characters. As you can see in the following
+ example, this simplifies writing patterns:
+
+ \snippet code/src_corelib_text_qregularexpression.cpp 35
+
The pattern() function returns the pattern that is currently set for a
QRegularExpression object:
@@ -260,6 +237,12 @@ QT_BEGIN_NAMESPACE
You can also use \l{QRegularExpressionMatchIterator::}{peekNext()} to get
the next result without advancing the iterator.
+ It is also possible to simply use the result of
+ QRegularExpression::globalMatch in a range-based for loop, for instance
+ like this:
+
+ \snippet code/src_corelib_text_qregularexpression.cpp 34
+
It is possible to pass a starting offset and one or more match options to
the globalMatch() function, exactly like normal matching with match().
@@ -535,6 +518,12 @@ QT_BEGIN_NAMESPACE
Moreover, QRegularExpressionMatchIterator offers a peekNext() function
to get the next result \e{without} advancing the iterator.
+ Starting with Qt 6.0, it is also possible to simply use the result of
+ QRegularExpression::globalMatch in a range-based for loop, for instance
+ like this:
+
+ \snippet code/src_corelib_text_qregularexpression.cpp 34
+
You can retrieve the QRegularExpression object the subject string was
matched against by calling the regularExpression() function; the
match type and the match options are available as well by calling
@@ -608,16 +597,6 @@ QT_BEGIN_NAMESPACE
\c{\w} to match any character with either the Unicode L (letter) or N
(digit) property, plus underscore, and so on. This option corresponds
to the \c{/u} modifier in Perl regular expressions.
-
- \value OptimizeOnFirstUsageOption
- This option is ignored. A regular expression is automatically optimized
- (including JIT compiling) the first time it is used. This enum value
- was introduced in Qt 5.4.
-
- \value DontAutomaticallyOptimizeOption
- This option is ignored. A regular expression is automatically optimized
- (including JIT compiling) the first time it is used. This enum value
- was introduced in Qt 5.4.
*/
/*!
@@ -742,7 +721,7 @@ struct QRegularExpressionPrivate : QSharedData
CheckSubjectStringOption checkSubjectStringOption = CheckSubjectString,
const QRegularExpressionMatchPrivate *previous = nullptr) const;
- int captureIndexForName(QStringView name) const;
+ int captureIndexForName(QAnyStringView name) const;
// sizeof(QSharedData) == 4, so start our members with an enum
QRegularExpression::PatternOptions patternOptions;
@@ -812,6 +791,24 @@ struct QRegularExpressionMatchIteratorPrivate : QSharedData
/*!
\internal
+
+ Used to centralize the warning about using an invalid QRegularExpression.
+ In case the pattern is an illegal UTF-16 string, we can't pass print it
+ (pass it to qUtf16Printable, etc.), so we need to check for that.
+*/
+Q_DECL_COLD_FUNCTION
+void qtWarnAboutInvalidRegularExpression(const QString &pattern, const char *where)
+{
+ if (pattern.isValidUtf16()) {
+ qWarning("%s(): called on an invalid QRegularExpression object "
+ "(pattern is '%ls')", where, qUtf16Printable(pattern));
+ } else {
+ qWarning("%s(): called on an invalid QRegularExpression object", where);
+ }
+}
+
+/*!
+ \internal
*/
QRegularExpression::QRegularExpression(QRegularExpressionPrivate &dd)
: d(&dd)
@@ -896,8 +893,8 @@ void QRegularExpressionPrivate::compilePattern()
options |= PCRE2_UTF;
PCRE2_SIZE patternErrorOffset;
- compiledPattern = pcre2_compile_16(reinterpret_cast<PCRE2_SPTR16>(pattern.utf16()),
- pattern.length(),
+ compiledPattern = pcre2_compile_16(reinterpret_cast<PCRE2_SPTR16>(pattern.constData()),
+ pattern.size(),
options,
&errorCode,
&patternErrorOffset,
@@ -948,43 +945,24 @@ void QRegularExpressionPrivate::getPatternInfo()
Simple "smartpointer" wrapper around a pcre2_jit_stack_16, to be used with
QThreadStorage.
*/
-class QPcreJitStackPointer
+namespace {
+struct PcreJitStackFree
{
- Q_DISABLE_COPY(QPcreJitStackPointer)
-
-public:
- /*!
- \internal
- */
- QPcreJitStackPointer()
- {
- // The default JIT stack size in PCRE is 32K,
- // we allocate from 32K up to 512K.
- stack = pcre2_jit_stack_create_16(32 * 1024, 512 * 1024, nullptr);
- }
- /*!
- \internal
- */
- ~QPcreJitStackPointer()
+ void operator()(pcre2_jit_stack_16 *stack)
{
if (stack)
pcre2_jit_stack_free_16(stack);
}
-
- pcre2_jit_stack_16 *stack;
};
-
-Q_GLOBAL_STATIC(QThreadStorage<QPcreJitStackPointer *>, jitStacks)
+Q_CONSTINIT static thread_local std::unique_ptr<pcre2_jit_stack_16, PcreJitStackFree> jitStacks;
+}
/*!
\internal
*/
static pcre2_jit_stack_16 *qtPcreCallback(void *)
{
- if (jitStacks()->hasLocalData())
- return jitStacks()->localData()->stack;
-
- return nullptr;
+ return jitStacks.get();
}
/*!
@@ -1001,6 +979,8 @@ static bool isJitEnabled()
#ifdef QT_DEBUG
return false;
+#elif defined(Q_OS_MACOS)
+ return !qt_mac_runningUnderRosetta();
#else
return true;
#endif
@@ -1033,7 +1013,7 @@ void QRegularExpressionPrivate::optimizePattern()
Returns the capturing group number for the given name. Duplicated names for
capturing groups are not supported.
*/
-int QRegularExpressionPrivate::captureIndexForName(QStringView name) const
+int QRegularExpressionPrivate::captureIndexForName(QAnyStringView name) const
{
Q_ASSERT(!name.isEmpty());
@@ -1078,9 +1058,10 @@ static int safe_pcre2_match_16(const pcre2_code_16 *code,
int result = pcre2_match_16(code, subject, length,
startOffset, options, matchData, matchContext);
- if (result == PCRE2_ERROR_JIT_STACKLIMIT && !jitStacks()->hasLocalData()) {
- QPcreJitStackPointer *p = new QPcreJitStackPointer;
- jitStacks()->setLocalData(p);
+ if (result == PCRE2_ERROR_JIT_STACKLIMIT && !jitStacks) {
+ // The default JIT stack size in PCRE is 32K,
+ // we allocate from 32K up to 512K.
+ jitStacks.reset(pcre2_jit_stack_create_16(32 * 1024, 512 * 1024, NULL));
result = pcre2_match_16(code, subject, length,
startOffset, options, matchData, matchContext);
@@ -1123,7 +1104,7 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv,
const QRegularExpressionMatchPrivate *previous) const
{
Q_ASSERT(priv);
- Q_ASSUME(priv != previous);
+ Q_ASSERT(priv != previous);
const qsizetype subjectLength = priv->subject.size();
@@ -1134,7 +1115,7 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv,
return;
if (Q_UNLIKELY(!compiledPattern)) {
- qWarning("QRegularExpressionPrivate::doMatch(): called on an invalid QRegularExpression object");
+ qtWarnAboutInvalidRegularExpression(pattern, "QRegularExpressionPrivate::doMatch");
return;
}
@@ -1164,7 +1145,19 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv,
pcre2_jit_stack_assign_16(matchContext, &qtPcreCallback, nullptr);
pcre2_match_data_16 *matchData = pcre2_match_data_create_from_pattern_16(compiledPattern, nullptr);
- const char16_t * const subjectUtf16 = priv->subject.utf16();
+ // PCRE does not accept a null pointer as subject string, even if
+ // its length is zero. We however allow it in input: a QStringView
+ // subject may have data == nullptr. In this case, to keep PCRE
+ // happy, pass a pointer to a dummy character.
+ const char16_t dummySubject = 0;
+ const char16_t * const subjectUtf16 = [&]()
+ {
+ const auto subjectUtf16 = priv->subject.utf16();
+ if (subjectUtf16)
+ return subjectUtf16;
+ Q_ASSERT(subjectLength == 0);
+ return &dummySubject;
+ }();
int result;
@@ -1184,8 +1177,8 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv,
if (usingCrLfNewlines
&& offset < subjectLength
- && subjectUtf16[offset - 1] == QLatin1Char('\r')
- && subjectUtf16[offset] == QLatin1Char('\n')) {
+ && subjectUtf16[offset - 1] == u'\r'
+ && subjectUtf16[offset] == u'\n') {
++offset;
} else if (offset < subjectLength
&& QChar::isLowSurrogate(subjectUtf16[offset])) {
@@ -1237,6 +1230,12 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv,
PCRE2_SIZE *ovector = pcre2_get_ovector_pointer_16(matchData);
qsizetype *const capturedOffsets = priv->capturedOffsets.data();
+ // We rely on the fact that capturing groups that did not
+ // capture anything have offset -1, but PCRE technically
+ // returns "PCRE2_UNSET". Test that out, better safe than
+ // sorry...
+ static_assert(qsizetype(PCRE2_UNSET) == qsizetype(-1), "Internal error: PCRE2 changed its API");
+
for (int i = 0; i < priv->capturedCount * 2; ++i)
capturedOffsets[i] = qsizetype(ovector[i]);
@@ -1355,10 +1354,21 @@ QRegularExpression::QRegularExpression(const QString &pattern, PatternOptions op
\sa operator=()
*/
-QRegularExpression::QRegularExpression(const QRegularExpression &re)
- : d(re.d)
-{
-}
+QRegularExpression::QRegularExpression(const QRegularExpression &re) noexcept = default;
+
+/*!
+ \fn QRegularExpression::QRegularExpression(QRegularExpression &&re)
+
+ \since 6.1
+
+ Constructs a QRegularExpression object by moving from \a re.
+
+ Note that a moved-from QRegularExpression can only be destroyed or
+ assigned to. The effect of calling other functions than the destructor
+ or one of the assignment operators is undefined.
+
+ \sa operator=()
+*/
/*!
Destroys the QRegularExpression object.
@@ -1367,15 +1377,13 @@ QRegularExpression::~QRegularExpression()
{
}
+QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QRegularExpressionPrivate)
+
/*!
Assigns the regular expression \a re to this object, and returns a reference
to the copy. Both the pattern and the pattern options are copied.
*/
-QRegularExpression &QRegularExpression::operator=(const QRegularExpression &re)
-{
- d = re.d;
- return *this;
-}
+QRegularExpression &QRegularExpression::operator=(const QRegularExpression &re) noexcept = default;
/*!
\fn void QRegularExpression::swap(QRegularExpression &other)
@@ -1402,6 +1410,8 @@ QString QRegularExpression::pattern() const
*/
void QRegularExpression::setPattern(const QString &pattern)
{
+ if (d->pattern == pattern)
+ return;
d.detach();
d->isDirty = true;
d->pattern = pattern;
@@ -1425,6 +1435,8 @@ QRegularExpression::PatternOptions QRegularExpression::patternOptions() const
*/
void QRegularExpression::setPatternOptions(PatternOptions options)
{
+ if (d->patternOptions == options)
+ return;
d.detach();
d->isDirty = true;
d->patternOptions = options;
@@ -1496,7 +1508,7 @@ QStringList QRegularExpression::namedCaptureGroups() const
reinterpret_cast<const char16_t *>(namedCapturingTable) + namedCapturingTableEntrySize * i;
const int index = *currentNamedCapturingTableRow;
- result[index] = QString::fromUtf16(currentNamedCapturingTableRow + 1);
+ result[index] = QStringView(currentNamedCapturingTableRow + 1).toString();
}
return result;
@@ -1528,10 +1540,10 @@ QString QRegularExpression::errorString() const
QString errorString;
int errorStringLength;
do {
- errorString.resize(errorString.length() + 64);
+ errorString.resize(errorString.size() + 64);
errorStringLength = pcre2_get_error_message_16(d->errorCode,
reinterpret_cast<ushort *>(errorString.data()),
- errorString.length());
+ errorString.size());
} while (errorStringLength < 0);
errorString.resize(errorStringLength);
@@ -1542,7 +1554,7 @@ QString QRegularExpression::errorString() const
#endif
}
#ifdef QT_NO_TRANSLATION
- return QLatin1String("no error");
+ return u"no error"_s;
#else
return QCoreApplication::translate("QRegularExpression", "no error");
#endif
@@ -1579,16 +1591,33 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject,
d.data()->compilePattern();
auto priv = new QRegularExpressionMatchPrivate(*this,
subject,
- qToStringViewIgnoringNull(subject),
+ QStringView(subject),
matchType,
matchOptions);
d->doMatch(priv, offset);
return QRegularExpressionMatch(*priv);
}
+#if QT_DEPRECATED_SINCE(6, 8)
/*!
\since 6.0
\overload
+ \obsolete
+
+ Use matchView() instead.
+*/
+QRegularExpressionMatch QRegularExpression::match(QStringView subjectView,
+ qsizetype offset,
+ MatchType matchType,
+ MatchOptions matchOptions) const
+{
+ return matchView(subjectView, offset, matchType, matchOptions);
+}
+#endif // QT_DEPRECATED_SINCE(6, 8)
+
+/*!
+ \since 6.5
+ \overload
Attempts to match the regular expression against the given \a subjectView
string view, starting at the position \a offset inside the subject, using a
@@ -1602,10 +1631,10 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject,
\sa QRegularExpressionMatch, {normal matching}
*/
-QRegularExpressionMatch QRegularExpression::match(QStringView subjectView,
- qsizetype offset,
- MatchType matchType,
- MatchOptions matchOptions) const
+QRegularExpressionMatch QRegularExpression::matchView(QStringView subjectView,
+ qsizetype offset,
+ MatchType matchType,
+ MatchOptions matchOptions) const
{
d.data()->compilePattern();
auto priv = new QRegularExpressionMatchPrivate(*this,
@@ -1642,9 +1671,26 @@ QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QString &s
return QRegularExpressionMatchIterator(*priv);
}
+#if QT_DEPRECATED_SINCE(6, 8)
/*!
\since 6.0
\overload
+ \obsolete
+
+ Use globalMatchView() instead.
+*/
+QRegularExpressionMatchIterator QRegularExpression::globalMatch(QStringView subjectView,
+ qsizetype offset,
+ MatchType matchType,
+ MatchOptions matchOptions) const
+{
+ return globalMatchView(subjectView, offset, matchType, matchOptions);
+}
+#endif // QT_DEPRECATED_SINCE(6, 8)
+
+/*!
+ \since 6.5
+ \overload
Attempts to perform a global match of the regular expression against the
given \a subjectView string view, starting at the position \a offset inside the
@@ -1660,16 +1706,16 @@ QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QString &s
\sa QRegularExpressionMatchIterator, {global matching}
*/
-QRegularExpressionMatchIterator QRegularExpression::globalMatch(QStringView subjectView,
- qsizetype offset,
- MatchType matchType,
- MatchOptions matchOptions) const
+QRegularExpressionMatchIterator QRegularExpression::globalMatchView(QStringView subjectView,
+ qsizetype offset,
+ MatchType matchType,
+ MatchOptions matchOptions) const
{
QRegularExpressionMatchIteratorPrivate *priv =
new QRegularExpressionMatchIteratorPrivate(*this,
matchType,
matchOptions,
- match(subjectView, offset, matchType, matchOptions));
+ matchView(subjectView, offset, matchType, matchOptions));
return QRegularExpressionMatchIterator(*priv);
}
@@ -1703,8 +1749,12 @@ bool QRegularExpression::operator==(const QRegularExpression &re) const
/*!
\fn QRegularExpression & QRegularExpression::operator=(QRegularExpression && re)
- Move-assigns the regular expression \a re to this object, and returns a reference
- to the copy. Both the pattern and the pattern options are copied.
+ Move-assigns the regular expression \a re to this object, and returns a
+ reference to the result. Both the pattern and the pattern options are copied.
+
+ Note that a moved-from QRegularExpression can only be destroyed or
+ assigned to. The effect of calling other functions than the destructor
+ or one of the assignment operators is undefined.
*/
/*!
@@ -1728,12 +1778,10 @@ size_t qHash(const QRegularExpression &key, size_t seed) noexcept
return qHashMulti(seed, key.d->pattern, key.d->patternOptions);
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\fn QString QRegularExpression::escape(const QString &str)
\overload
*/
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\since 5.15
@@ -1770,14 +1818,13 @@ QString QRegularExpression::escape(QStringView str)
// unlike Perl, a literal NUL must be escaped with
// "\\0" (backslash + 0) and not "\\\0" (backslash + NUL),
// because pcre16_compile uses a NUL-terminated string
- result.append(QLatin1Char('\\'));
- result.append(QLatin1Char('0'));
- } else if ( (current < QLatin1Char('a') || current > QLatin1Char('z')) &&
- (current < QLatin1Char('A') || current > QLatin1Char('Z')) &&
- (current < QLatin1Char('0') || current > QLatin1Char('9')) &&
- current != QLatin1Char('_') )
- {
- result.append(QLatin1Char('\\'));
+ result.append(u'\\');
+ result.append(u'0');
+ } else if ((current < u'a' || current > u'z') &&
+ (current < u'A' || current > u'Z') &&
+ (current < u'0' || current > u'9') &&
+ current != u'_') {
+ result.append(u'\\');
result.append(current);
if (current.isHighSurrogate() && i < (count - 1))
result.append(str.at(++i));
@@ -1790,13 +1837,11 @@ QString QRegularExpression::escape(QStringView str)
return result;
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\since 5.12
\fn QString QRegularExpression::wildcardToRegularExpression(const QString &pattern, WildcardConversionOptions options)
\overload
*/
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\since 6.0
@@ -1811,22 +1856,30 @@ QString QRegularExpression::escape(QStringView str)
\value UnanchoredWildcardConversion
The conversion will not anchor the pattern. This allows for partial string matches of
wildcard expressions.
+
+ \value [since 6.6] NonPathWildcardConversion
+ The conversion will \e{not} interpret the pattern as filepath globbing.
+
+ \sa QRegularExpression::wildcardToRegularExpression
*/
/*!
\since 5.15
Returns a regular expression representation of the given glob \a pattern.
- The transformation is targeting file path globbing, which means in particular
- that path separators receive special treatment. This implies that it is not
- just a basic translation from "*" to ".*".
+
+ There are two transformations possible, one that targets file path
+ globbing, and another one which is more generic.
+
+ By default, the transformation is targeting file path globbing,
+ which means in particular that path separators receive special
+ treatment. This implies that it is not just a basic translation
+ from "*" to ".*" and similar.
\snippet code/src_corelib_text_qregularexpression.cpp 31
- By default, the returned regular expression is fully anchored. In other
- words, there is no need of calling anchoredPattern() again on the
- result. To get an a regular expression that is not anchored, pass
- UnanchoredWildcardConversion as the conversion \a options.
+ The more generic globbing transformation is available by passing
+ \c NonPathWildcardConversion in the conversion \a options.
This implementation follows closely the definition
of wildcard for glob patterns:
@@ -1835,10 +1888,12 @@ QString QRegularExpression::escape(QStringView str)
\li Any character represents itself apart from those mentioned
below. Thus \b{c} matches the character \e c.
\row \li \b{?}
- \li Matches any single character. It is the same as
- \b{.} in full regexps.
+ \li Matches any single character, except for a path separator
+ (in case file path globbing has been selected). It is the
+ same as b{.} in full regexps.
\row \li \b{*}
- \li Matches zero or more of any characters. It is the
+ \li Matches zero or more of any characters, except for path
+ separators (in case file path globbing has been selected). It is the
same as \b{.*} in full regexps.
\row \li \b{[abc]}
\li Matches one character given in the bracket.
@@ -1852,9 +1907,10 @@ QString QRegularExpression::escape(QStringView str)
bracket. It is the same as \b{[^a-c]} in full regexp.
\endtable
- \note The backslash (\\) character is \e not an escape char in this context.
- In order to match one of the special characters, place it in square brackets
- (for example, \c{[?]}).
+ \note For historical reasons, a backslash (\\) character is \e not
+ an escape char in this context. In order to match one of the
+ special characters, place it in square brackets (for example,
+ \c{[?]}).
More information about the implementation can be found in:
\list
@@ -1862,6 +1918,11 @@ QString QRegularExpression::escape(QStringView str)
\li \c {man 7 glob}
\endlist
+ By default, the returned regular expression is fully anchored. In other
+ words, there is no need of calling anchoredPattern() again on the
+ result. To get a regular expression that is not anchored, pass
+ UnanchoredWildcardConversion in the conversion \a options.
+
\sa escape()
*/
QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, WildcardConversionOptions options)
@@ -1872,29 +1933,51 @@ QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, Wil
qsizetype i = 0;
const QChar *wc = pattern.data();
+ struct GlobSettings {
+ char16_t nativePathSeparator;
+ QStringView starEscape;
+ QStringView questionMarkEscape;
+ };
+
+ const GlobSettings settings = [options]() {
+ if (options.testFlag(NonPathWildcardConversion)) {
+ // using [\d\D] to mean "match everything";
+ // dot doesn't match newlines, unless in /s mode
+ return GlobSettings{ u'\0', u"[\\d\\D]*", u"[\\d\\D]" };
+ } else {
#ifdef Q_OS_WIN
- const QLatin1Char nativePathSeparator('\\');
- const QLatin1String starEscape("[^/\\\\]*");
- const QLatin1String questionMarkEscape("[^/\\\\]");
+ return GlobSettings{ u'\\', u"[^/\\\\]*", u"[^/\\\\]" };
#else
- const QLatin1Char nativePathSeparator('/');
- const QLatin1String starEscape("[^/]*");
- const QLatin1String questionMarkEscape("[^/]");
+ return GlobSettings{ u'/', u"[^/]*", u"[^/]" };
#endif
+ }
+ }();
while (i < wclen) {
const QChar c = wc[i++];
switch (c.unicode()) {
case '*':
- rx += starEscape;
+ rx += settings.starEscape;
break;
case '?':
- rx += questionMarkEscape;
+ rx += settings.questionMarkEscape;
break;
+ // When not using filepath globbing: \ is escaped, / is itself
+ // When using filepath globbing:
+ // * Unix: \ gets escaped. / is itself
+ // * Windows: \ and / can match each other -- they become [/\\] in regexp
case '\\':
#ifdef Q_OS_WIN
+ if (options.testFlag(NonPathWildcardConversion))
+ rx += u"\\\\";
+ else
+ rx += u"[/\\\\]";
+ break;
case '/':
- rx += QLatin1String("[/\\\\]");
+ if (options.testFlag(NonPathWildcardConversion))
+ rx += u'/';
+ else
+ rx += u"[/\\\\]";
break;
#endif
case '$':
@@ -1906,29 +1989,31 @@ QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, Wil
case '{':
case '|':
case '}':
- rx += QLatin1Char('\\');
+ rx += u'\\';
rx += c;
break;
case '[':
rx += c;
// Support for the [!abc] or [!a-c] syntax
if (i < wclen) {
- if (wc[i] == QLatin1Char('!')) {
- rx += QLatin1Char('^');
+ if (wc[i] == u'!') {
+ rx += u'^';
++i;
}
- if (i < wclen && wc[i] == QLatin1Char(']'))
+ if (i < wclen && wc[i] == u']')
rx += wc[i++];
- while (i < wclen && wc[i] != QLatin1Char(']')) {
- // The '/' appearing in a character class invalidates the
- // regular expression parsing. It also concerns '\\' on
- // Windows OS types.
- if (wc[i] == QLatin1Char('/') || wc[i] == nativePathSeparator)
- return rx;
- if (wc[i] == QLatin1Char('\\'))
- rx += QLatin1Char('\\');
+ while (i < wclen && wc[i] != u']') {
+ if (!options.testFlag(NonPathWildcardConversion)) {
+ // The '/' appearing in a character class invalidates the
+ // regular expression parsing. It also concerns '\\' on
+ // Windows OS types.
+ if (wc[i] == u'/' || wc[i] == settings.nativePathSeparator)
+ return rx;
+ }
+ if (wc[i] == u'\\')
+ rx += u'\\';
rx += wc[i++];
}
}
@@ -1966,13 +2051,11 @@ QRegularExpression QRegularExpression::fromWildcard(QStringView pattern, Qt::Cas
return QRegularExpression(wildcardToRegularExpression(pattern, options), reOptions);
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\fn QRegularExpression::anchoredPattern(const QString &expression)
\since 5.12
\overload
*/
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\since 5.15
@@ -1983,9 +2066,9 @@ QRegularExpression QRegularExpression::fromWildcard(QStringView pattern, Qt::Cas
QString QRegularExpression::anchoredPattern(QStringView expression)
{
return QString()
- + QLatin1String("\\A(?:")
+ + "\\A(?:"_L1
+ expression
- + QLatin1String(")\\z");
+ + ")\\z"_L1;
}
/*!
@@ -2016,6 +2099,8 @@ QRegularExpressionMatch::~QRegularExpressionMatch()
{
}
+QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QRegularExpressionMatchPrivate)
+
/*!
Constructs a match result by copying the result of the given \a match.
@@ -2027,6 +2112,20 @@ QRegularExpressionMatch::QRegularExpressionMatch(const QRegularExpressionMatch &
}
/*!
+ \fn QRegularExpressionMatch::QRegularExpressionMatch(QRegularExpressionMatch &&match)
+
+ \since 6.1
+
+ Constructs a match result by moving the result from the given \a match.
+
+ Note that a moved-from QRegularExpressionMatch can only be destroyed or
+ assigned to. The effect of calling other functions than the destructor
+ or one of the assignment operators is undefined.
+
+ \sa operator=()
+*/
+
+/*!
Assigns the match result \a match to this object, and returns a reference
to the copy.
*/
@@ -2039,8 +2138,12 @@ QRegularExpressionMatch &QRegularExpressionMatch::operator=(const QRegularExpres
/*!
\fn QRegularExpressionMatch &QRegularExpressionMatch::operator=(QRegularExpressionMatch &&match)
- Move-assigns the match result \a match to this object, and returns a reference
- to the copy.
+ Move-assigns the match result \a match to this object, and returns a
+ reference to the result.
+
+ Note that a moved-from QRegularExpressionMatch can only be destroyed or
+ assigned to. The effect of calling other functions than the destructor
+ or one of the assignment operators is undefined.
*/
/*!
@@ -2106,7 +2209,7 @@ QRegularExpression::MatchOptions QRegularExpressionMatch::matchOptions() const
If the regular expression did not match, this function returns -1.
- \sa captured(), capturedStart(), capturedEnd(), capturedLength()
+ \sa hasCaptured(), captured(), capturedStart(), capturedEnd(), capturedLength()
*/
int QRegularExpressionMatch::lastCapturedIndex() const
{
@@ -2114,6 +2217,65 @@ int QRegularExpressionMatch::lastCapturedIndex() const
}
/*!
+ \fn bool QRegularExpressionMatch::hasCaptured(QAnyStringView name) const
+ \since 6.3
+
+ Returns true if the capturing group named \a name captured something
+ in the subject string, and false otherwise (or if there is no
+ capturing group called \a name).
+
+ \note Some capturing groups in a regular expression may not have
+ captured anything even if the regular expression matched. This may
+ happen, for instance, if a conditional operator is used in the
+ pattern:
+
+ \snippet code/src_corelib_text_qregularexpression.cpp 36
+
+ Similarly, a capturing group may capture a substring of length 0;
+ this function will return \c{true} for such a capturing group.
+
+ \note In Qt versions prior to 6.8, this function took QString or
+ QStringView, not QAnyStringView.
+
+ \sa captured(), hasMatch()
+*/
+bool QRegularExpressionMatch::hasCaptured(QAnyStringView name) const
+{
+ const int nth = d->regularExpression.d->captureIndexForName(name);
+ return hasCaptured(nth);
+}
+
+/*!
+ \since 6.3
+
+ Returns true if the \a nth capturing group captured something
+ in the subject string, and false otherwise (or if there is no
+ such capturing group).
+
+ \note The implicit capturing group number 0 captures the substring
+ matched by the entire pattern.
+
+ \note Some capturing groups in a regular expression may not have
+ captured anything even if the regular expression matched. This may
+ happen, for instance, if a conditional operator is used in the
+ pattern:
+
+ \snippet code/src_corelib_text_qregularexpression.cpp 36
+
+ Similarly, a capturing group may capture a substring of length 0;
+ this function will return \c{true} for such a capturing group.
+
+ \sa captured(), lastCapturedIndex(), hasMatch()
+*/
+bool QRegularExpressionMatch::hasCaptured(int nth) const
+{
+ if (nth < 0 || nth > lastCapturedIndex())
+ return false;
+
+ return d->capturedOffsets.at(nth * 2) != -1;
+}
+
+/*!
Returns the substring captured by the \a nth capturing group.
If the \a nth capturing group did not capture a string, or if there is no
@@ -2146,7 +2308,7 @@ QString QRegularExpressionMatch::captured(int nth) const
*/
QStringView QRegularExpressionMatch::capturedView(int nth) const
{
- if (nth < 0 || nth > lastCapturedIndex())
+ if (!hasCaptured(nth))
return QStringView();
qsizetype start = capturedStart(nth);
@@ -2157,19 +2319,6 @@ QStringView QRegularExpressionMatch::capturedView(int nth) const
return d->subject.mid(start, capturedLength(nth));
}
-#if QT_STRINGVIEW_LEVEL < 2
-/*! \fn QString QRegularExpressionMatch::captured(const QString &name) const
-
- Returns the substring captured by the capturing group named \a name.
-
- If the named capturing group \a name did not capture a string, or if
- there is no capturing group named \a name, returns a null QString.
-
- \sa capturedView(), capturedStart(), capturedEnd(), capturedLength(),
- QString::isNull()
-*/
-#endif // QT_STRINGVIEW_LEVEL < 2
-
/*!
\since 5.10
@@ -2178,10 +2327,13 @@ QStringView QRegularExpressionMatch::capturedView(int nth) const
If the named capturing group \a name did not capture a string, or if
there is no capturing group named \a name, returns a null QString.
+ \note In Qt versions prior to 6.8, this function took QString or
+ QStringView, not QAnyStringView.
+
\sa capturedView(), capturedStart(), capturedEnd(), capturedLength(),
QString::isNull()
*/
-QString QRegularExpressionMatch::captured(QStringView name) const
+QString QRegularExpressionMatch::captured(QAnyStringView name) const
{
if (name.isEmpty()) {
qWarning("QRegularExpressionMatch::captured: empty capturing group name passed");
@@ -2200,10 +2352,13 @@ QString QRegularExpressionMatch::captured(QStringView name) const
If the named capturing group \a name did not capture a string, or if
there is no capturing group named \a name, returns a null QStringView.
+ \note In Qt versions prior to 6.8, this function took QString or
+ QStringView, not QAnyStringView.
+
\sa captured(), capturedStart(), capturedEnd(), capturedLength(),
QStringView::isNull()
*/
-QStringView QRegularExpressionMatch::capturedView(QStringView name) const
+QStringView QRegularExpressionMatch::capturedView(QAnyStringView name) const
{
if (name.isEmpty()) {
qWarning("QRegularExpressionMatch::capturedView: empty capturing group name passed");
@@ -2240,7 +2395,7 @@ QStringList QRegularExpressionMatch::capturedTexts() const
*/
qsizetype QRegularExpressionMatch::capturedStart(int nth) const
{
- if (nth < 0 || nth > lastCapturedIndex())
+ if (!hasCaptured(nth))
return -1;
return d->capturedOffsets.at(nth * 2);
@@ -2269,45 +2424,12 @@ qsizetype QRegularExpressionMatch::capturedLength(int nth) const
*/
qsizetype QRegularExpressionMatch::capturedEnd(int nth) const
{
- if (nth < 0 || nth > lastCapturedIndex())
+ if (!hasCaptured(nth))
return -1;
return d->capturedOffsets.at(nth * 2 + 1);
}
-#if QT_STRINGVIEW_LEVEL < 2
-/*! \fn qsizetype QRegularExpressionMatch::capturedStart(const QString &name) const
-
- Returns the offset inside the subject string corresponding to the starting
- position of the substring captured by the capturing group named \a name.
- If the capturing group named \a name did not capture a string or doesn't
- exist, returns -1.
-
- \sa capturedEnd(), capturedLength(), captured()
-*/
-
-/*! \fn qsizetype QRegularExpressionMatch::capturedLength(const QString &name) const
-
- Returns the length of the substring captured by the capturing group named
- \a name.
-
- \note This function returns 0 if the capturing group named \a name did not
- capture a string or doesn't exist.
-
- \sa capturedStart(), capturedEnd(), captured()
-*/
-
-/*! \fn qsizetype QRegularExpressionMatch::capturedEnd(const QString &name) const
-
- Returns the offset inside the subject string immediately after the ending
- position of the substring captured by the capturing group named \a name. If
- the capturing group named \a name did not capture a string or doesn't
- exist, returns -1.
-
- \sa capturedStart(), capturedLength(), captured()
-*/
-#endif // QT_STRINGVIEW_LEVEL < 2
-
/*!
\since 5.10
@@ -2316,9 +2438,12 @@ qsizetype QRegularExpressionMatch::capturedEnd(int nth) const
If the capturing group named \a name did not capture a string or doesn't
exist, returns -1.
+ \note In Qt versions prior to 6.8, this function took QString or
+ QStringView, not QAnyStringView.
+
\sa capturedEnd(), capturedLength(), captured()
*/
-qsizetype QRegularExpressionMatch::capturedStart(QStringView name) const
+qsizetype QRegularExpressionMatch::capturedStart(QAnyStringView name) const
{
if (name.isEmpty()) {
qWarning("QRegularExpressionMatch::capturedStart: empty capturing group name passed");
@@ -2339,9 +2464,12 @@ qsizetype QRegularExpressionMatch::capturedStart(QStringView name) const
\note This function returns 0 if the capturing group named \a name did not
capture a string or doesn't exist.
+ \note In Qt versions prior to 6.8, this function took QString or
+ QStringView, not QAnyStringView.
+
\sa capturedStart(), capturedEnd(), captured()
*/
-qsizetype QRegularExpressionMatch::capturedLength(QStringView name) const
+qsizetype QRegularExpressionMatch::capturedLength(QAnyStringView name) const
{
if (name.isEmpty()) {
qWarning("QRegularExpressionMatch::capturedLength: empty capturing group name passed");
@@ -2361,9 +2489,12 @@ qsizetype QRegularExpressionMatch::capturedLength(QStringView name) const
the capturing group named \a name did not capture a string or doesn't
exist, returns -1.
+ \note In Qt versions prior to 6.8, this function took QString or
+ QStringView, not QAnyStringView.
+
\sa capturedStart(), capturedLength(), captured()
*/
-qsizetype QRegularExpressionMatch::capturedEnd(QStringView name) const
+qsizetype QRegularExpressionMatch::capturedEnd(QAnyStringView name) const
{
if (name.isEmpty()) {
qWarning("QRegularExpressionMatch::capturedEnd: empty capturing group name passed");
@@ -2448,6 +2579,8 @@ QRegularExpressionMatchIterator::~QRegularExpressionMatchIterator()
{
}
+QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QRegularExpressionMatchIteratorPrivate)
+
/*!
Constructs a QRegularExpressionMatchIterator object as a copy of \a
iterator.
@@ -2460,6 +2593,20 @@ QRegularExpressionMatchIterator::QRegularExpressionMatchIterator(const QRegularE
}
/*!
+ \fn QRegularExpressionMatchIterator::QRegularExpressionMatchIterator(QRegularExpressionMatchIterator &&iterator)
+
+ \since 6.1
+
+ Constructs a QRegularExpressionMatchIterator object by moving from \a iterator.
+
+ Note that a moved-from QRegularExpressionMatchIterator can only be destroyed
+ or assigned to. The effect of calling other functions than the destructor
+ or one of the assignment operators is undefined.
+
+ \sa operator=()
+*/
+
+/*!
Assigns the iterator \a iterator to this object, and returns a reference to
the copy.
*/
@@ -2472,7 +2619,12 @@ QRegularExpressionMatchIterator &QRegularExpressionMatchIterator::operator=(cons
/*!
\fn QRegularExpressionMatchIterator &QRegularExpressionMatchIterator::operator=(QRegularExpressionMatchIterator &&iterator)
- Move-assigns the \a iterator to this object.
+ Move-assigns the \a iterator to this object, and returns a reference to the
+ result.
+
+ Note that a moved-from QRegularExpressionMatchIterator can only be destroyed
+ or assigned to. The effect of calling other functions than the destructor
+ or one of the assignment operators is undefined.
*/
/*!
@@ -2530,12 +2682,11 @@ QRegularExpressionMatch QRegularExpressionMatchIterator::next()
{
if (!hasNext()) {
qWarning("QRegularExpressionMatchIterator::next() called on an iterator already at end");
- return d->next;
+ return d.constData()->next;
}
- QRegularExpressionMatch current = d->next;
- d->next = d->next.d.constData()->nextMatch();
- return current;
+ d.detach();
+ return std::exchange(d->next, d->next.d.constData()->nextMatch());
}
/*!
@@ -2573,6 +2724,19 @@ QRegularExpression::MatchOptions QRegularExpressionMatchIterator::matchOptions()
return d->matchOptions;
}
+/*!
+ \internal
+*/
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
+{
+ return QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator(iterator);
+}
+
+/*!
+ \fn QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel end(const QRegularExpressionMatchIterator &)
+ \internal
+*/
+
#ifndef QT_NO_DATASTREAM
/*!
\relates QRegularExpression
@@ -2583,7 +2747,7 @@ QRegularExpression::MatchOptions QRegularExpressionMatchIterator::matchOptions()
*/
QDataStream &operator<<(QDataStream &out, const QRegularExpression &re)
{
- out << re.pattern() << quint32(re.patternOptions());
+ out << re.pattern() << quint32(re.patternOptions().toInt());
return out;
}
@@ -2600,7 +2764,7 @@ QDataStream &operator>>(QDataStream &in, QRegularExpression &re)
quint32 patternOptions;
in >> pattern >> patternOptions;
re.setPattern(pattern);
- re.setPatternOptions(QRegularExpression::PatternOptions(patternOptions));
+ re.setPatternOptions(QRegularExpression::PatternOptions::fromInt(patternOptions));
return in;
}
#endif
@@ -2911,7 +3075,8 @@ static const char *pcreCompileErrorCodes[] =
QT_TRANSLATE_NOOP("QRegularExpression", "heap limit exceeded"),
QT_TRANSLATE_NOOP("QRegularExpression", "invalid syntax"),
QT_TRANSLATE_NOOP("QRegularExpression", "internal error - duplicate substitution match"),
- QT_TRANSLATE_NOOP("QRegularExpression", "PCRE2_MATCH_INVALID_UTF is not supported for DFA matching")
+ QT_TRANSLATE_NOOP("QRegularExpression", "PCRE2_MATCH_INVALID_UTF is not supported for DFA matching"),
+ QT_TRANSLATE_NOOP("QRegularExpression", "INTERNAL ERROR: invalid substring offset")
};
#endif // #if 0
diff --git a/src/corelib/text/qregularexpression.h b/src/corelib/text/qregularexpression.h
index 22b63a2252..2b51b94b15 100644
--- a/src/corelib/text/qregularexpression.h
+++ b/src/corelib/text/qregularexpression.h
@@ -1,42 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Giuseppe D'Angelo <dangelog@gmail.com>.
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Giuseppe D'Angelo <dangelog@gmail.com>.
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QREGULAREXPRESSION_H
#define QREGULAREXPRESSION_H
@@ -47,17 +12,19 @@
#include <QtCore/qshareddata.h>
#include <QtCore/qvariant.h>
+#include <iterator>
+
QT_REQUIRE_CONFIG(regularexpression);
QT_BEGIN_NAMESPACE
-class QLatin1String;
-
class QRegularExpressionMatch;
class QRegularExpressionMatchIterator;
struct QRegularExpressionPrivate;
class QRegularExpression;
+QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QRegularExpressionPrivate, Q_CORE_EXPORT)
+
Q_CORE_EXPORT size_t qHash(const QRegularExpression &key, size_t seed = 0) noexcept;
class Q_CORE_EXPORT QRegularExpression
@@ -83,17 +50,18 @@ public:
QRegularExpression();
explicit QRegularExpression(const QString &pattern, PatternOptions options = NoPatternOption);
- QRegularExpression(const QRegularExpression &re);
+ QRegularExpression(const QRegularExpression &re) noexcept;
+ QRegularExpression(QRegularExpression &&re) = default;
~QRegularExpression();
- QRegularExpression &operator=(const QRegularExpression &re);
- QRegularExpression &operator=(QRegularExpression &&re) noexcept
- { d.swap(re.d); return *this; }
+ QRegularExpression &operator=(const QRegularExpression &re) noexcept;
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QRegularExpression)
void swap(QRegularExpression &other) noexcept { d.swap(other.d); }
QString pattern() const;
void setPattern(const QString &pattern);
+ [[nodiscard]]
bool isValid() const;
qsizetype patternErrorOffset() const;
QString errorString() const;
@@ -117,35 +85,57 @@ public:
};
Q_DECLARE_FLAGS(MatchOptions, MatchOption)
+ [[nodiscard]]
QRegularExpressionMatch match(const QString &subject,
qsizetype offset = 0,
MatchType matchType = NormalMatch,
MatchOptions matchOptions = NoMatchOption) const;
+#if QT_DEPRECATED_SINCE(6, 8)
+ [[nodiscard]]
+ QT_DEPRECATED_VERSION_X_6_8("Use matchView instead.")
QRegularExpressionMatch match(QStringView subjectView,
qsizetype offset = 0,
MatchType matchType = NormalMatch,
MatchOptions matchOptions = NoMatchOption) const;
+#endif
+ [[nodiscard]]
+ QRegularExpressionMatch matchView(QStringView subjectView,
+ qsizetype offset = 0,
+ MatchType matchType = NormalMatch,
+ MatchOptions matchOptions = NoMatchOption) const;
+
+ [[nodiscard]]
QRegularExpressionMatchIterator globalMatch(const QString &subject,
qsizetype offset = 0,
MatchType matchType = NormalMatch,
MatchOptions matchOptions = NoMatchOption) const;
+#if QT_DEPRECATED_SINCE(6, 8)
+ [[nodiscard]]
+ QT_DEPRECATED_VERSION_X_6_8("Use globalMatchView instead.")
QRegularExpressionMatchIterator globalMatch(QStringView subjectView,
qsizetype offset = 0,
MatchType matchType = NormalMatch,
MatchOptions matchOptions = NoMatchOption) const;
+#endif
+
+ [[nodiscard]]
+ QRegularExpressionMatchIterator globalMatchView(QStringView subjectView,
+ qsizetype offset = 0,
+ MatchType matchType = NormalMatch,
+ MatchOptions matchOptions = NoMatchOption) const;
void optimize() const;
enum WildcardConversionOption {
DefaultWildcardConversion = 0x0,
- UnanchoredWildcardConversion = 0x1
+ UnanchoredWildcardConversion = 0x1,
+ NonPathWildcardConversion = 0x2,
};
Q_DECLARE_FLAGS(WildcardConversionOptions, WildcardConversionOption)
-#if QT_STRINGVIEW_LEVEL < 2
static QString escape(const QString &str)
{
return escape(qToStringViewIgnoringNull(str));
@@ -160,7 +150,6 @@ public:
{
return anchoredPattern(qToStringViewIgnoringNull(expression));
}
-#endif
static QString escape(QStringView str);
static QString wildcardToRegularExpression(QStringView str, WildcardConversionOptions options = DefaultWildcardConversion);
@@ -186,6 +175,7 @@ private:
Q_DECLARE_SHARED(QRegularExpression)
Q_DECLARE_OPERATORS_FOR_FLAGS(QRegularExpression::PatternOptions)
Q_DECLARE_OPERATORS_FOR_FLAGS(QRegularExpression::MatchOptions)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QRegularExpression::WildcardConversionOptions)
#ifndef QT_NO_DATASTREAM
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const QRegularExpression &re);
@@ -198,6 +188,7 @@ Q_CORE_EXPORT QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions
#endif
struct QRegularExpressionMatchPrivate;
+QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QRegularExpressionMatchPrivate, Q_CORE_EXPORT)
class Q_CORE_EXPORT QRegularExpressionMatch
{
@@ -205,6 +196,7 @@ public:
QRegularExpressionMatch();
~QRegularExpressionMatch();
QRegularExpressionMatch(const QRegularExpressionMatch &match);
+ QRegularExpressionMatch(QRegularExpressionMatch &&match) = default;
QRegularExpressionMatch &operator=(const QRegularExpressionMatch &match);
QRegularExpressionMatch &operator=(QRegularExpressionMatch &&match) noexcept
{ d.swap(match.d); return *this; }
@@ -221,16 +213,26 @@ public:
int lastCapturedIndex() const;
+#if QT_CORE_REMOVED_SINCE(6, 8)
+ bool hasCaptured(const QString &name) const
+ { return hasCaptured(qToAnyStringViewIgnoringNull(name)); }
+ bool hasCaptured(QStringView name) const;
+#endif
+ bool hasCaptured(QAnyStringView name) const;
+ bool hasCaptured(int nth) const;
+
QString captured(int nth = 0) const;
QStringView capturedView(int nth = 0) const;
-#if QT_STRINGVIEW_LEVEL < 2
+#if QT_CORE_REMOVED_SINCE(6, 8)
QString captured(const QString &name) const
- { return captured(QStringView(name)); }
-#endif
+ { return captured(qToAnyStringViewIgnoringNull(name)); }
QString captured(QStringView name) const;
QStringView capturedView(QStringView name) const;
+#endif
+ QString captured(QAnyStringView name) const;
+ QStringView capturedView(QAnyStringView name) const;
QStringList capturedTexts() const;
@@ -238,18 +240,21 @@ public:
qsizetype capturedLength(int nth = 0) const;
qsizetype capturedEnd(int nth = 0) const;
-#if QT_STRINGVIEW_LEVEL < 2
+#if QT_CORE_REMOVED_SINCE(6, 8)
qsizetype capturedStart(const QString &name) const
- { return capturedStart(QStringView(name)); }
+ { return capturedStart(qToAnyStringViewIgnoringNull(name)); }
qsizetype capturedLength(const QString &name) const
- { return capturedLength(QStringView(name)); }
+ { return capturedLength(qToAnyStringViewIgnoringNull(name)); }
qsizetype capturedEnd(const QString &name) const
- { return capturedEnd(QStringView(name)); }
-#endif
+ { return capturedEnd(qToAnyStringViewIgnoringNull(name)); }
qsizetype capturedStart(QStringView name) const;
qsizetype capturedLength(QStringView name) const;
qsizetype capturedEnd(QStringView name) const;
+#endif
+ qsizetype capturedStart(QAnyStringView name) const;
+ qsizetype capturedLength(QAnyStringView name) const;
+ qsizetype capturedEnd(QAnyStringView name) const;
private:
friend class QRegularExpression;
@@ -257,7 +262,7 @@ private:
friend class QRegularExpressionMatchIterator;
QRegularExpressionMatch(QRegularExpressionMatchPrivate &dd);
- QSharedDataPointer<QRegularExpressionMatchPrivate> d;
+ QExplicitlySharedDataPointer<QRegularExpressionMatchPrivate> d;
};
Q_DECLARE_SHARED(QRegularExpressionMatch)
@@ -266,7 +271,13 @@ Q_DECLARE_SHARED(QRegularExpressionMatch)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QRegularExpressionMatch &match);
#endif
+namespace QtPrivate {
+class QRegularExpressionMatchIteratorRangeBasedForIterator;
+class QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel {};
+}
+
struct QRegularExpressionMatchIteratorPrivate;
+QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QRegularExpressionMatchIteratorPrivate, Q_CORE_EXPORT)
class Q_CORE_EXPORT QRegularExpressionMatchIterator
{
@@ -274,6 +285,7 @@ public:
QRegularExpressionMatchIterator();
~QRegularExpressionMatchIterator();
QRegularExpressionMatchIterator(const QRegularExpressionMatchIterator &iterator);
+ QRegularExpressionMatchIterator(QRegularExpressionMatchIterator &&iterator) = default;
QRegularExpressionMatchIterator &operator=(const QRegularExpressionMatchIterator &iterator);
QRegularExpressionMatchIterator &operator=(QRegularExpressionMatchIterator &&iterator) noexcept
{ d.swap(iterator.d); return *this; }
@@ -291,11 +303,100 @@ public:
private:
friend class QRegularExpression;
+ friend Q_CORE_EXPORT QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator);
+ friend QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel end(const QRegularExpressionMatchIterator &) { return {}; }
QRegularExpressionMatchIterator(QRegularExpressionMatchIteratorPrivate &dd);
- QSharedDataPointer<QRegularExpressionMatchIteratorPrivate> d;
+ QExplicitlySharedDataPointer<QRegularExpressionMatchIteratorPrivate> d;
};
+namespace QtPrivate {
+
+// support for range-based for loop
+class QRegularExpressionMatchIteratorRangeBasedForIterator
+{
+public:
+ using value_type = QRegularExpressionMatch;
+ using difference_type = int;
+ using reference_type = const QRegularExpressionMatch &;
+ using pointer_type = const QRegularExpressionMatch *;
+ using iterator_category = std::forward_iterator_tag;
+
+ QRegularExpressionMatchIteratorRangeBasedForIterator()
+ : m_atEnd(true)
+ {
+ }
+
+ explicit QRegularExpressionMatchIteratorRangeBasedForIterator(const QRegularExpressionMatchIterator &iterator)
+ : m_matchIterator(iterator),
+ m_currentMatch(),
+ m_atEnd(false)
+ {
+ ++*this;
+ }
+
+ const QRegularExpressionMatch &operator*() const
+ {
+ Q_ASSERT_X(!m_atEnd, Q_FUNC_INFO, "operator* called on an iterator already at the end");
+ return m_currentMatch;
+ }
+
+ QRegularExpressionMatchIteratorRangeBasedForIterator &operator++()
+ {
+ Q_ASSERT_X(!m_atEnd, Q_FUNC_INFO, "operator++ called on an iterator already at the end");
+ if (m_matchIterator.hasNext()) {
+ m_currentMatch = m_matchIterator.next();
+ } else {
+ m_currentMatch = QRegularExpressionMatch();
+ m_atEnd = true;
+ }
+
+ return *this;
+ }
+
+ QRegularExpressionMatchIteratorRangeBasedForIterator operator++(int)
+ {
+ QRegularExpressionMatchIteratorRangeBasedForIterator i = *this;
+ ++*this;
+ return i;
+ }
+
+private:
+ // [input.iterators] imposes operator== on us. Unfortunately, it's not
+ // trivial to implement, so just do the bare minimum to satifisfy
+ // Cpp17EqualityComparable.
+ friend bool operator==(const QRegularExpressionMatchIteratorRangeBasedForIterator &lhs,
+ const QRegularExpressionMatchIteratorRangeBasedForIterator &rhs) noexcept
+ {
+ return (&lhs == &rhs);
+ }
+
+ friend bool operator!=(const QRegularExpressionMatchIteratorRangeBasedForIterator &lhs,
+ const QRegularExpressionMatchIteratorRangeBasedForIterator &rhs) noexcept
+ {
+ return !(lhs == rhs);
+ }
+
+ // This is what we really use in a range-based for.
+ friend bool operator==(const QRegularExpressionMatchIteratorRangeBasedForIterator &lhs,
+ QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel) noexcept
+ {
+ return lhs.m_atEnd;
+ }
+
+ friend bool operator!=(const QRegularExpressionMatchIteratorRangeBasedForIterator &lhs,
+ QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel) noexcept
+ {
+ return !lhs.m_atEnd;
+ }
+
+ QRegularExpressionMatchIterator m_matchIterator;
+ QRegularExpressionMatch m_currentMatch;
+ bool m_atEnd;
+};
+
+} // namespace QtPrivate
+
Q_DECLARE_SHARED(QRegularExpressionMatchIterator)
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstaticlatin1stringmatcher.h b/src/corelib/text/qstaticlatin1stringmatcher.h
new file mode 100644
index 0000000000..d80ebd8547
--- /dev/null
+++ b/src/corelib/text/qstaticlatin1stringmatcher.h
@@ -0,0 +1,140 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QSTATICLATIN1STRINGMATCHER_H
+#define QSTATICLATIN1STRINGMATCHER_H
+
+#include <functional>
+#include <iterator>
+#include <limits>
+
+#include <QtCore/q20algorithm.h>
+#include <QtCore/qlatin1stringmatcher.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+#ifdef Q_CC_GHS
+# define QT_STATIC_BOYER_MOORE_NOT_SUPPORTED
+#else
+namespace QtPrivate {
+template <class RandomIt1,
+ class Hash = std::hash<typename std::iterator_traits<RandomIt1>::value_type>,
+ class BinaryPredicate = std::equal_to<>>
+class q_boyer_moore_searcher
+{
+public:
+ constexpr q_boyer_moore_searcher(RandomIt1 pat_first, RandomIt1 pat_last) : m_skiptable{}
+ {
+ const size_t n = std::distance(pat_first, pat_last);
+ constexpr auto uchar_max = (std::numeric_limits<uchar>::max)();
+ uchar max = n > uchar_max ? uchar_max : uchar(n);
+ q20::fill(std::begin(m_skiptable), std::end(m_skiptable), max);
+ Hash hf;
+ RandomIt1 pattern = std::next(pat_first, n - max);
+ while (max--)
+ m_skiptable[hf(*pattern++)] = max;
+ }
+
+ template <class RandomIt2>
+ constexpr auto operator()(RandomIt2 first, RandomIt2 last, RandomIt1 pat_first,
+ RandomIt1 pat_last) const
+ {
+ struct R
+ {
+ RandomIt2 begin, end;
+ };
+ Hash hf;
+ BinaryPredicate pred;
+ auto pat_length = std::distance(pat_first, pat_last);
+ if (pat_length == 0)
+ return R{ first, first };
+
+ auto haystack_length = std::distance(first, last);
+ if (haystack_length < pat_length)
+ return R{ last, last };
+
+ const qsizetype pl_minus_one = qsizetype(pat_length - 1);
+ RandomIt2 current = first + pl_minus_one;
+
+ qsizetype skip = 0;
+ while (current < last - skip) {
+ current += skip;
+ skip = m_skiptable[hf(*current)];
+ if (!skip) {
+ // possible match
+ while (skip < pat_length) {
+ if (!pred(hf(*(current - skip)), hf(pat_first[pl_minus_one - skip])))
+ break;
+ skip++;
+ }
+ if (skip > pl_minus_one) { // we have a match
+ auto match = current + 1 - skip;
+ return R{ match, match + pat_length };
+ }
+
+ // If we don't have a match we are a bit inefficient as we only skip by one
+ // when we have the non matching char in the string.
+ if (m_skiptable[hf(*(current - skip))] == pat_length)
+ skip = pat_length - skip;
+ else
+ skip = 1;
+ }
+ }
+
+ return R{ last, last };
+ }
+
+private:
+ alignas(16) uchar m_skiptable[256];
+};
+} // namespace QtPrivate
+
+template <Qt::CaseSensitivity CS, size_t N>
+class QStaticLatin1StringMatcher
+{
+ static_assert(N > 2,
+ "QStaticLatin1StringMatcher makes no sense for finding a single-char pattern");
+
+ QLatin1StringView m_pattern;
+ using Hasher = std::conditional_t<CS == Qt::CaseSensitive, QtPrivate::QCaseSensitiveLatin1Hash,
+ QtPrivate::QCaseInsensitiveLatin1Hash>;
+ QtPrivate::q_boyer_moore_searcher<const char *, Hasher> m_searcher;
+
+public:
+ explicit constexpr QStaticLatin1StringMatcher(QLatin1StringView patternToMatch) noexcept
+ : m_pattern(patternToMatch),
+ m_searcher(patternToMatch.begin(), patternToMatch.begin() + N - 1)
+ {
+ }
+
+ constexpr qsizetype indexIn(QLatin1StringView haystack, qsizetype from = 0) const noexcept
+ {
+ if (from >= haystack.size())
+ return -1;
+ const char *begin = haystack.begin() + from;
+ const char *end = haystack.end();
+ const auto r = m_searcher(begin, end, m_pattern.begin(), m_pattern.end());
+ return r.begin == end ? -1 : std::distance(haystack.begin(), r.begin);
+ }
+};
+
+template <size_t N>
+constexpr auto qMakeStaticCaseSensitiveLatin1StringMatcher(const char (&patternToMatch)[N]) noexcept
+{
+ return QStaticLatin1StringMatcher<Qt::CaseSensitive, N>(
+ QLatin1StringView(patternToMatch, qsizetype(N) - 1));
+}
+
+template <size_t N>
+constexpr auto
+qMakeStaticCaseInsensitiveLatin1StringMatcher(const char (&patternToMatch)[N]) noexcept
+{
+ return QStaticLatin1StringMatcher<Qt::CaseInsensitive, N>(
+ QLatin1StringView(patternToMatch, qsizetype(N) - 1));
+}
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QSTATICLATIN1STRINGMATCHER_H
diff --git a/src/corelib/text/qstaticlatin1stringmatcher.qdoc b/src/corelib/text/qstaticlatin1stringmatcher.qdoc
new file mode 100644
index 0000000000..6577f985b2
--- /dev/null
+++ b/src/corelib/text/qstaticlatin1stringmatcher.qdoc
@@ -0,0 +1,86 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*! \class QStaticLatin1StringMatcher
+ \inmodule QtCore
+ \brief The QStaticLatin1StringMatcher class is a compile-time version
+ of QLatin1StringMatcher.
+
+ \since 6.7
+ \ingroup tools
+ \ingroup string-processing
+
+ This class is useful when your code needs to search efficiently
+ in Latin-1 strings for a substring that's known at compile-time.
+ This is common, for example, in parsers. Using a matcher
+ object's indexIn() is faster than using the indexOf() member method of
+ the string you are searching in, especially when the string to
+ be found will be searched for repeatedly or within a large
+ Latin-1 string that may contain many matches to prefixes of the
+ substring to be found.
+
+ Unlike QLatin1StringMatcher, this class calculates the internal
+ representation at \e{compile-time}, so it can be beneficial even if you
+ are doing one-off Latin-1 string matches.
+
+ Create the QStaticLatin1StringMatcher by calling
+ qMakeStaticCaseSensitiveLatin1StringMatcher() or
+ qMakeStaticCaseInsensitiveLatin1StringMatcher() passing the Latin-1
+ string to search for as a C string literal. Store the return value of
+ that function in a \c{static constexpr auto} variable, so you don't
+ need to pass the \c{N} template parameter explicitly.
+
+ Then call indexIn() on the QLatin1StringView in which you want to search,
+ just like with QLatin1StringMatcher.
+
+ Since this class is designed to do all the up-front calculations at
+ compile-time, it does not offer setPattern() or setCaseSensitivity()
+ methods.
+
+ \note INTEGRITY operating system is currently not supported.
+
+ \sa QLatin1StringMatcher, QStaticByteArrayMatcher, QByteArrayMatcher
+*/
+
+/*!
+ \fn template<Qt::CaseSensitivity CS, size_t N> constexpr qsizetype QStaticLatin1StringMatcher<CS, N>::indexIn(QLatin1StringView haystack, qsizetype from) const
+
+ Searches the QLatin1StringView \a haystack, from byte position \a from
+ (default 0, i.e. from the first byte), for QLatin1StringView pattern()
+ that was set in the constructor. Using the case sensitivity that was also
+ set in the constructor.
+
+ Returns the position where the pattern() matched in \a haystack, or -1 if no match was found.
+*/
+
+/*!
+ \fn template<size_t N> constexpr auto qMakeStaticCaseSensitiveLatin1StringMatcher(const char
+ (&patternToMatch)[N])
+
+ \since 6.7
+ \relates QStaticLatin1StringMatcher
+
+ Return a QStaticLatin1StringMatcher with the correct \c{N} determined
+ automatically from the \a patternToMatch passed, and with case sensitivity.
+
+ To take full advantage of this function, assign the result to a
+ \c{static constexpr auto} variable:
+
+ \snippet code/src_corelib_text_qstaticlatin1stringmatcher.cpp 0
+*/
+
+/*!
+ \fn template<size_t N> constexpr auto qMakeStaticCaseInsensitiveLatin1StringMatcher(const char
+ (&patternToMatch)[N])
+
+ \since 6.7
+ \relates QStaticLatin1StringMatcher
+
+ Return a QStaticLatin1StringMatcher with the correct \c{N} determined
+ automatically from the \a patternToMatch passed, and without case sensitivity.
+
+ To take full advantage of this function, assign the result to a
+ \c{static constexpr auto} variable:
+
+ \snippet code/src_corelib_text_qstaticlatin1stringmatcher.cpp 1
+*/
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index 422e1f8419..f0bf0c50a3 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -1,43 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** Copyright (C) 2019 Mail.ru Group.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// Copyright (C) 2019 Mail.ru Group.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qstringlist.h"
#if QT_CONFIG(regularexpression)
@@ -45,6 +9,7 @@
#endif
#include "qunicodetables_p.h"
#include <private/qstringconverter_p.h>
+#include <private/qtools_p.h>
#include "qlocale_tools_p.h"
#include "private/qsimd_p.h"
#include <qnumeric.h>
@@ -52,14 +17,16 @@
#include <qlist.h>
#include "qlocale.h"
#include "qlocale_p.h"
+#include "qspan.h"
#include "qstringbuilder.h"
#include "qstringmatcher.h"
#include "qvarlengtharray.h"
#include "qdebug.h"
#include "qendian.h"
#include "qcollator.h"
+#include "qttypetraits.h"
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
#include <private/qcore_mac_p.h>
#endif
@@ -73,40 +40,286 @@
#include <wchar.h>
#include "qchar.cpp"
+#include "qlatin1stringmatcher.h"
#include "qstringmatcher.cpp"
#include "qstringiterator_p.h"
#include "qstringalgorithms_p.h"
#include "qthreadstorage.h"
+#include <algorithm>
+#include <functional>
+
#ifdef Q_OS_WIN
# include <qt_windows.h>
+# if !defined(QT_BOOTSTRAPPED) && (defined(QT_NO_CAST_FROM_ASCII) || defined(QT_NO_CAST_TO_ASCII))
+// MSVC requires this, but let's apply it to MinGW compilers too, just in case
+# error "This file cannot be compiled with QT_NO_CAST_{TO,FROM}_ASCII, " \
+ "otherwise some QString functions will not get exported."
+# endif
#endif
#ifdef truncate
# undef truncate
#endif
-#ifndef LLONG_MAX
-#define LLONG_MAX qint64_C(9223372036854775807)
-#endif
-#ifndef LLONG_MIN
-#define LLONG_MIN (-LLONG_MAX - qint64_C(1))
-#endif
-#ifndef ULLONG_MAX
-#define ULLONG_MAX quint64_C(18446744073709551615)
-#endif
-
-#define IS_RAW_DATA(d) ((d.d)->flags & QArrayData::RawDataType)
+#define REHASH(a) \
+ if (sl_minus_1 < sizeof(std::size_t) * CHAR_BIT) \
+ hashHaystack -= std::size_t(a) << sl_minus_1; \
+ hashHaystack <<= 1
QT_BEGIN_NAMESPACE
-template <typename T, typename Cmp = std::less<>>
-static constexpr bool points_into_range(const T *p, const T *b, const T *e, Cmp less = {}) noexcept
+using namespace Qt::StringLiterals;
+using namespace QtMiscUtils;
+
+const char16_t QString::_empty = 0;
+
+// in qstringmatcher.cpp
+qsizetype qFindStringBoyerMoore(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs);
+
+namespace {
+enum StringComparisonMode {
+ CompareStringsForEquality,
+ CompareStringsForOrdering
+};
+
+template <typename Pointer>
+char32_t foldCaseHelper(Pointer ch, Pointer start) = delete;
+
+template <>
+char32_t foldCaseHelper<const QChar*>(const QChar* ch, const QChar* start)
{
- return !less(p, b) && less(p, e);
+ return foldCase(reinterpret_cast<const char16_t*>(ch),
+ reinterpret_cast<const char16_t*>(start));
}
-const char16_t QString::_empty = 0;
+template <>
+char32_t foldCaseHelper<const char*>(const char* ch, const char*)
+{
+ return foldCase(char16_t(uchar(*ch)));
+}
+
+template <typename T>
+char16_t valueTypeToUtf16(T t) = delete;
+
+template <>
+char16_t valueTypeToUtf16<QChar>(QChar t)
+{
+ return t.unicode();
+}
+
+template <>
+char16_t valueTypeToUtf16<char>(char t)
+{
+ return char16_t{uchar(t)};
+}
+
+template <typename T>
+static inline bool foldAndCompare(const T a, const T b)
+{
+ return foldCase(a) == b;
+}
+
+/*!
+ \internal
+
+ Returns the index position of the first occurrence of the
+ character \a ch in the string given by \a str and \a len,
+ searching forward from index
+ position \a from. Returns -1 if \a ch could not be found.
+*/
+template <typename Haystack>
+static inline qsizetype qLastIndexOf(Haystack haystack, QChar needle,
+ qsizetype from, Qt::CaseSensitivity cs) noexcept
+{
+ if (haystack.size() == 0)
+ return -1;
+ if (from < 0)
+ from += haystack.size();
+ else if (std::size_t(from) > std::size_t(haystack.size()))
+ from = haystack.size() - 1;
+ if (from >= 0) {
+ char16_t c = needle.unicode();
+ const auto b = haystack.data();
+ auto n = b + from;
+ if (cs == Qt::CaseSensitive) {
+ for (; n >= b; --n)
+ if (valueTypeToUtf16(*n) == c)
+ return n - b;
+ } else {
+ c = foldCase(c);
+ for (; n >= b; --n)
+ if (foldCase(valueTypeToUtf16(*n)) == c)
+ return n - b;
+ }
+ }
+ return -1;
+}
+template <> qsizetype
+qLastIndexOf(QString, QChar, qsizetype, Qt::CaseSensitivity) noexcept = delete; // unwanted, would detach
+
+template<typename Haystack, typename Needle>
+static qsizetype qLastIndexOf(Haystack haystack0, qsizetype from,
+ Needle needle0, Qt::CaseSensitivity cs) noexcept
+{
+ const qsizetype sl = needle0.size();
+ if (sl == 1)
+ return qLastIndexOf(haystack0, needle0.front(), from, cs);
+
+ const qsizetype l = haystack0.size();
+ if (from < 0)
+ from += l;
+ if (from == l && sl == 0)
+ return from;
+ const qsizetype delta = l - sl;
+ if (std::size_t(from) > std::size_t(l) || delta < 0)
+ return -1;
+ if (from > delta)
+ from = delta;
+
+ auto sv = [sl](const typename Haystack::value_type *v) { return Haystack(v, sl); };
+
+ auto haystack = haystack0.data();
+ const auto needle = needle0.data();
+ const auto *end = haystack;
+ haystack += from;
+ const std::size_t sl_minus_1 = sl ? sl - 1 : 0;
+ const auto *n = needle + sl_minus_1;
+ const auto *h = haystack + sl_minus_1;
+ std::size_t hashNeedle = 0, hashHaystack = 0;
+
+ if (cs == Qt::CaseSensitive) {
+ for (qsizetype idx = 0; idx < sl; ++idx) {
+ hashNeedle = (hashNeedle << 1) + valueTypeToUtf16(*(n - idx));
+ hashHaystack = (hashHaystack << 1) + valueTypeToUtf16(*(h - idx));
+ }
+ hashHaystack -= valueTypeToUtf16(*haystack);
+
+ while (haystack >= end) {
+ hashHaystack += valueTypeToUtf16(*haystack);
+ if (hashHaystack == hashNeedle
+ && QtPrivate::compareStrings(needle0, sv(haystack), Qt::CaseSensitive) == 0)
+ return haystack - end;
+ --haystack;
+ REHASH(valueTypeToUtf16(haystack[sl]));
+ }
+ } else {
+ for (qsizetype idx = 0; idx < sl; ++idx) {
+ hashNeedle = (hashNeedle << 1) + foldCaseHelper(n - idx, needle);
+ hashHaystack = (hashHaystack << 1) + foldCaseHelper(h - idx, end);
+ }
+ hashHaystack -= foldCaseHelper(haystack, end);
+
+ while (haystack >= end) {
+ hashHaystack += foldCaseHelper(haystack, end);
+ if (hashHaystack == hashNeedle
+ && QtPrivate::compareStrings(sv(haystack), needle0, Qt::CaseInsensitive) == 0)
+ return haystack - end;
+ --haystack;
+ REHASH(foldCaseHelper(haystack + sl, end));
+ }
+ }
+ return -1;
+}
+
+template <typename Haystack, typename Needle>
+bool qt_starts_with_impl(Haystack haystack, Needle needle, Qt::CaseSensitivity cs) noexcept
+{
+ if (haystack.isNull())
+ return needle.isNull();
+ const auto haystackLen = haystack.size();
+ const auto needleLen = needle.size();
+ if (haystackLen == 0)
+ return needleLen == 0;
+ if (needleLen > haystackLen)
+ return false;
+
+ return QtPrivate::compareStrings(haystack.first(needleLen), needle, cs) == 0;
+}
+
+template <typename Haystack, typename Needle>
+bool qt_ends_with_impl(Haystack haystack, Needle needle, Qt::CaseSensitivity cs) noexcept
+{
+ if (haystack.isNull())
+ return needle.isNull();
+ const auto haystackLen = haystack.size();
+ const auto needleLen = needle.size();
+ if (haystackLen == 0)
+ return needleLen == 0;
+ if (haystackLen < needleLen)
+ return false;
+
+ return QtPrivate::compareStrings(haystack.last(needleLen), needle, cs) == 0;
+}
+
+template <typename T>
+static void append_helper(QString &self, T view)
+{
+ const auto strData = view.data();
+ const qsizetype strSize = view.size();
+ auto &d = self.data_ptr();
+ if (strData && strSize > 0) {
+ // the number of UTF-8 code units is always at a minimum equal to the number
+ // of equivalent UTF-16 code units
+ d.detachAndGrow(QArrayData::GrowsAtEnd, strSize, nullptr, nullptr);
+ Q_CHECK_PTR(d.data());
+ Q_ASSERT(strSize <= d.freeSpaceAtEnd());
+
+ auto dst = std::next(d.data(), d.size);
+ if constexpr (std::is_same_v<T, QUtf8StringView>) {
+ dst = QUtf8::convertToUnicode(dst, view);
+ } else if constexpr (std::is_same_v<T, QLatin1StringView>) {
+ QLatin1::convertToUnicode(dst, view);
+ dst += strSize;
+ } else {
+ static_assert(QtPrivate::type_dependent_false<T>(),
+ "Can only operate on UTF-8 and Latin-1");
+ }
+ self.resize(std::distance(d.begin(), dst));
+ } else if (d.isNull() && !view.isNull()) { // special case
+ self = QLatin1StringView("");
+ }
+}
+
+template <uint MaxCount> struct UnrollTailLoop
+{
+ template <typename RetType, typename Functor1, typename Functor2, typename Number>
+ static inline RetType exec(Number count, RetType returnIfExited, Functor1 loopCheck, Functor2 returnIfFailed, Number i = 0)
+ {
+ /* equivalent to:
+ * while (count--) {
+ * if (loopCheck(i))
+ * return returnIfFailed(i);
+ * }
+ * return returnIfExited;
+ */
+
+ if (!count)
+ return returnIfExited;
+
+ bool check = loopCheck(i);
+ if (check)
+ return returnIfFailed(i);
+
+ return UnrollTailLoop<MaxCount - 1>::exec(count - 1, returnIfExited, loopCheck, returnIfFailed, i + 1);
+ }
+
+ template <typename Functor, typename Number>
+ static inline void exec(Number count, Functor code)
+ {
+ /* equivalent to:
+ * for (Number i = 0; i < count; ++i)
+ * code(i);
+ */
+ exec(count, 0, [=](Number i) -> bool { code(i); return false; }, [](Number) { return 0; });
+ }
+};
+template <> template <typename RetType, typename Functor1, typename Functor2, typename Number>
+inline RetType UnrollTailLoop<0>::exec(Number, RetType returnIfExited, Functor1, Functor2, Number)
+{
+ return returnIfExited;
+}
+} // unnamed namespace
/*
* Note on the use of SIMD in qstring.cpp:
@@ -145,39 +358,38 @@ extern "C" void qt_fromlatin1_mips_asm_unroll8 (char16_t*, const char*, uint);
extern "C" void qt_toLatin1_mips_dsp_asm(uchar *dst, const char16_t *src, int length);
#endif
-// internal
-qsizetype qFindStringBoyerMoore(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs);
-static inline qsizetype qFindChar(QStringView str, QChar ch, qsizetype from, Qt::CaseSensitivity cs) noexcept;
-template <typename Haystack>
-static inline qsizetype qLastIndexOf(Haystack haystack, QChar needle, qsizetype from, Qt::CaseSensitivity cs) noexcept;
-template <>
-inline qsizetype qLastIndexOf(QString haystack, QChar needle,
- qsizetype from, Qt::CaseSensitivity cs) noexcept = delete; // unwanted, would detach
-
-static inline bool qt_starts_with(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs);
-static inline bool qt_starts_with(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs);
-static inline bool qt_starts_with(QStringView haystack, QChar needle, Qt::CaseSensitivity cs);
-static inline bool qt_ends_with(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs);
-static inline bool qt_ends_with(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs);
-static inline bool qt_ends_with(QStringView haystack, QChar needle, Qt::CaseSensitivity cs);
-
-#if defined(__SSE2__) && defined(Q_CC_GNU) && !defined(Q_CC_INTEL)
-# if defined(__SANITIZE_ADDRESS__) && Q_CC_GNU < 800 && !defined(Q_CC_CLANG)
-# warning "The __attribute__ on below will likely cause a build failure with your GCC version. Your choices are:"
-# warning "1) disable ASan;"
-# warning "2) disable the optimized code in qustrlen (change __SSE2__ to anything else);"
-# warning "3) upgrade your compiler (preferred)."
-# endif
-
+#if defined(__SSE2__) && defined(Q_CC_GNU)
// We may overrun the buffer, but that's a false positive:
// this won't crash nor produce incorrect results
-__attribute__((__no_sanitize_address__))
+# define ATTRIBUTE_NO_SANITIZE __attribute__((__no_sanitize_address__))
+#else
+# define ATTRIBUTE_NO_SANITIZE
#endif
-qsizetype QtPrivate::qustrlen(const char16_t *str) noexcept
+
+#ifdef __SSE2__
+static constexpr bool UseSse4_1 = bool(qCompilerCpuFeatures & CpuFeatureSSE4_1);
+static constexpr bool UseAvx2 = UseSse4_1 &&
+ (qCompilerCpuFeatures & CpuFeatureArchHaswell) == CpuFeatureArchHaswell;
+
+[[maybe_unused]]
+static Q_ALWAYS_INLINE __m128i mm_load8_zero_extend(const void *ptr)
{
- qsizetype result = 0;
+ const __m128i *dataptr = static_cast<const __m128i *>(ptr);
+ if constexpr (UseSse4_1) {
+ // use a MOVQ followed by PMOVZXBW
+ // if AVX2 is present, these should combine into a single VPMOVZXBW instruction
+ __m128i data = _mm_loadl_epi64(dataptr);
+ return _mm_cvtepu8_epi16(data);
+ }
+
+ // use MOVQ followed by PUNPCKLBW
+ __m128i data = _mm_loadl_epi64(dataptr);
+ return _mm_unpacklo_epi8(data, _mm_setzero_si128());
+}
-#if defined(__SSE2__) && !(defined(__SANITIZE_ADDRESS__) || QT_HAS_FEATURE(address_sanitizer))
+[[maybe_unused]] ATTRIBUTE_NO_SANITIZE
+static qsizetype qustrlen_sse2(const char16_t *str) noexcept
+{
// find the 16-byte alignment immediately prior or equal to str
quintptr misalignment = quintptr(str) & 0xf;
Q_ASSERT((misalignment & 1) == 0);
@@ -188,7 +400,7 @@ qsizetype QtPrivate::qustrlen(const char16_t *str) noexcept
const __m128i zeroes = _mm_setzero_si128();
__m128i data = _mm_load_si128(reinterpret_cast<const __m128i *>(ptr));
__m128i comparison = _mm_cmpeq_epi16(data, zeroes);
- quint32 mask = _mm_movemask_epi8(comparison);
+ uint mask = _mm_movemask_epi8(comparison);
// ignore the result prior to the beginning of str
mask >>= misalignment;
@@ -196,71 +408,272 @@ qsizetype QtPrivate::qustrlen(const char16_t *str) noexcept
// Have we found something in the first block? Need to handle it now
// because of the left shift above.
if (mask)
- return qCountTrailingZeroBits(quint32(mask)) / 2;
+ return qCountTrailingZeroBits(mask) / sizeof(char16_t);
+ constexpr qsizetype Step = sizeof(__m128i) / sizeof(char16_t);
+ qsizetype size = Step - misalignment / sizeof(char16_t);
+
+ size -= Step;
do {
- ptr += 8;
- data = _mm_load_si128(reinterpret_cast<const __m128i *>(ptr));
+ size += Step;
+ data = _mm_load_si128(reinterpret_cast<const __m128i *>(str + size));
comparison = _mm_cmpeq_epi16(data, zeroes);
mask = _mm_movemask_epi8(comparison);
} while (mask == 0);
// found a null
- uint idx = qCountTrailingZeroBits(quint32(mask));
- return ptr - str + idx / 2;
-#endif
+ return size + qCountTrailingZeroBits(mask) / sizeof(char16_t);
+}
- if (sizeof(wchar_t) == sizeof(char16_t))
- return wcslen(reinterpret_cast<const wchar_t *>(str));
+// Scans from \a ptr to \a end until \a maskval is non-zero. Returns true if
+// the no non-zero was found. Returns false and updates \a ptr to point to the
+// first 16-bit word that has any bit set (note: if the input is 8-bit, \a ptr
+// may be updated to one byte short).
+static bool simdTestMask(const char *&ptr, const char *end, quint32 maskval)
+{
+ auto updatePtr = [&](uint result) {
+ // found a character matching the mask
+ uint idx = qCountTrailingZeroBits(~result);
+ ptr += idx;
+ return false;
+ };
- while (*str++)
- ++result;
- return result;
+ if constexpr (UseSse4_1) {
+# ifndef Q_OS_QNX // compiler fails in the code below
+ __m128i mask;
+ auto updatePtrSimd = [&](__m128i data) -> bool {
+ __m128i masked = _mm_and_si128(mask, data);
+ __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
+ uint result = _mm_movemask_epi8(comparison);
+ return updatePtr(result);
+ };
+
+ if constexpr (UseAvx2) {
+ // AVX2 implementation: test 32 bytes at a time
+ const __m256i mask256 = _mm256_broadcastd_epi32(_mm_cvtsi32_si128(maskval));
+ while (ptr + 32 <= end) {
+ __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(ptr));
+ if (!_mm256_testz_si256(mask256, data)) {
+ // found a character matching the mask
+ __m256i masked256 = _mm256_and_si256(mask256, data);
+ __m256i comparison256 = _mm256_cmpeq_epi16(masked256, _mm256_setzero_si256());
+ return updatePtr(_mm256_movemask_epi8(comparison256));
+ }
+ ptr += 32;
+ }
+
+ mask = _mm256_castsi256_si128(mask256);
+ } else {
+ // SSE 4.1 implementation: test 32 bytes at a time (two 16-byte
+ // comparisons, unrolled)
+ mask = _mm_set1_epi32(maskval);
+ while (ptr + 32 <= end) {
+ __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i data2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr + 16));
+ if (!_mm_testz_si128(mask, data1))
+ return updatePtrSimd(data1);
+
+ ptr += 16;
+ if (!_mm_testz_si128(mask, data2))
+ return updatePtrSimd(data2);
+ ptr += 16;
+ }
+ }
+
+ // AVX2 and SSE4.1: final 16-byte comparison
+ if (ptr + 16 <= end) {
+ __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ if (!_mm_testz_si128(mask, data1))
+ return updatePtrSimd(data1);
+ ptr += 16;
+ }
+
+ // and final 8-byte comparison
+ if (ptr + 8 <= end) {
+ __m128i data1 = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
+ if (!_mm_testz_si128(mask, data1))
+ return updatePtrSimd(data1);
+ ptr += 8;
+ }
+
+ return true;
+# endif // QNX
+ }
+
+ // SSE2 implementation: test 16 bytes at a time.
+ const __m128i mask = _mm_set1_epi32(maskval);
+ while (ptr + 16 <= end) {
+ __m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i masked = _mm_and_si128(mask, data);
+ __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
+ quint16 result = _mm_movemask_epi8(comparison);
+ if (result != 0xffff)
+ return updatePtr(result);
+ ptr += 16;
+ }
+
+ // and one 8-byte comparison
+ if (ptr + 8 <= end) {
+ __m128i data = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
+ __m128i masked = _mm_and_si128(mask, data);
+ __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
+ quint8 result = _mm_movemask_epi8(comparison);
+ if (result != 0xff)
+ return updatePtr(result);
+ ptr += 8;
+ }
+
+ return true;
}
-#if !defined(__OPTIMIZE_SIZE__)
-namespace {
-template <uint MaxCount> struct UnrollTailLoop
+template <StringComparisonMode Mode, typename Char> [[maybe_unused]]
+static int ucstrncmp_sse2(const char16_t *a, const Char *b, size_t l)
{
- template <typename RetType, typename Functor1, typename Functor2, typename Number>
- static inline RetType exec(Number count, RetType returnIfExited, Functor1 loopCheck, Functor2 returnIfFailed, Number i = 0)
- {
- /* equivalent to:
- * while (count--) {
- * if (loopCheck(i))
- * return returnIfFailed(i);
- * }
- * return returnIfExited;
- */
+ static_assert(std::is_unsigned_v<Char>);
- if (!count)
- return returnIfExited;
+ // Using the PMOVMSKB instruction, we get two bits for each UTF-16 character
+ // we compare. This lambda helps extract the code unit.
+ static const auto codeUnitAt = [](const auto *n, qptrdiff idx) -> int {
+ constexpr int Stride = 2;
+ // this is the same as:
+ // return n[idx / Stride];
+ // but using pointer arithmetic to avoid the compiler dividing by two
+ // and multiplying by two in the case of char16_t (we know idx is even,
+ // but the compiler does not). This is not UB.
- bool check = loopCheck(i);
- if (check)
- return returnIfFailed(i);
+ auto ptr = reinterpret_cast<const uchar *>(n);
+ ptr += idx / (Stride / sizeof(*n));
+ return *reinterpret_cast<decltype(n)>(ptr);
+ };
+ auto difference = [a, b](uint mask, qptrdiff offset) {
+ if (Mode == CompareStringsForEquality)
+ return 1;
+ uint idx = qCountTrailingZeroBits(mask);
+ return codeUnitAt(a + offset, idx) - codeUnitAt(b + offset, idx);
+ };
- return UnrollTailLoop<MaxCount - 1>::exec(count - 1, returnIfExited, loopCheck, returnIfFailed, i + 1);
- }
+ static const auto load8Chars = [](const auto *ptr) {
+ if (sizeof(*ptr) == 2)
+ return _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i chunk = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
+ return _mm_unpacklo_epi8(chunk, _mm_setzero_si128());
+ };
+ static const auto load4Chars = [](const auto *ptr) {
+ if (sizeof(*ptr) == 2)
+ return _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
+ __m128i chunk = _mm_cvtsi32_si128(qFromUnaligned<quint32>(ptr));
+ return _mm_unpacklo_epi8(chunk, _mm_setzero_si128());
+ };
- template <typename Functor, typename Number>
- static inline void exec(Number count, Functor code)
- {
- /* equivalent to:
- * for (Number i = 0; i < count; ++i)
- * code(i);
- */
- exec(count, 0, [=](Number i) -> bool { code(i); return false; }, [](Number) { return 0; });
+ // we're going to read a[0..15] and b[0..15] (32 bytes)
+ auto processChunk16Chars = [a, b](qptrdiff offset) -> uint {
+ if constexpr (UseAvx2) {
+ __m256i a_data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(a + offset));
+ __m256i b_data;
+ if (sizeof(Char) == 1) {
+ // expand to UTF-16 via zero-extension
+ __m128i chunk = _mm_loadu_si128(reinterpret_cast<const __m128i *>(b + offset));
+ b_data = _mm256_cvtepu8_epi16(chunk);
+ } else {
+ b_data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(b + offset));
+ }
+ __m256i result = _mm256_cmpeq_epi16(a_data, b_data);
+ return _mm256_movemask_epi8(result);
+ }
+
+ __m128i a_data1 = load8Chars(a + offset);
+ __m128i a_data2 = load8Chars(a + offset + 8);
+ __m128i b_data1, b_data2;
+ if (sizeof(Char) == 1) {
+ // expand to UTF-16 via unpacking
+ __m128i b_data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(b + offset));
+ b_data1 = _mm_unpacklo_epi8(b_data, _mm_setzero_si128());
+ b_data2 = _mm_unpackhi_epi8(b_data, _mm_setzero_si128());
+ } else {
+ b_data1 = load8Chars(b + offset);
+ b_data2 = load8Chars(b + offset + 8);
+ }
+ __m128i result1 = _mm_cmpeq_epi16(a_data1, b_data1);
+ __m128i result2 = _mm_cmpeq_epi16(a_data2, b_data2);
+ return _mm_movemask_epi8(result1) | _mm_movemask_epi8(result2) << 16;
+ };
+
+ if (l >= sizeof(__m256i) / sizeof(char16_t)) {
+ qptrdiff offset = 0;
+ for ( ; l >= offset + sizeof(__m256i) / sizeof(char16_t); offset += sizeof(__m256i) / sizeof(char16_t)) {
+ uint mask = ~processChunk16Chars(offset);
+ if (mask)
+ return difference(mask, offset);
+ }
+
+ // maybe overlap the last 32 bytes
+ if (size_t(offset) < l) {
+ offset = l - sizeof(__m256i) / sizeof(char16_t);
+ uint mask = ~processChunk16Chars(offset);
+ return mask ? difference(mask, offset) : 0;
+ }
+ } else if (l >= 4) {
+ __m128i a_data1, b_data1;
+ __m128i a_data2, b_data2;
+ int width;
+ if (l >= 8) {
+ width = 8;
+ a_data1 = load8Chars(a);
+ b_data1 = load8Chars(b);
+ a_data2 = load8Chars(a + l - width);
+ b_data2 = load8Chars(b + l - width);
+ } else {
+ // we're going to read a[0..3] and b[0..3] (8 bytes)
+ width = 4;
+ a_data1 = load4Chars(a);
+ b_data1 = load4Chars(b);
+ a_data2 = load4Chars(a + l - width);
+ b_data2 = load4Chars(b + l - width);
+ }
+
+ __m128i result = _mm_cmpeq_epi16(a_data1, b_data1);
+ ushort mask = ~_mm_movemask_epi8(result);
+ if (mask)
+ return difference(mask, 0);
+
+ result = _mm_cmpeq_epi16(a_data2, b_data2);
+ mask = ~_mm_movemask_epi8(result);
+ if (mask)
+ return difference(mask, l - width);
+ } else {
+ // reset l
+ l &= 3;
+
+ const auto lambda = [=](size_t i) -> int {
+ return a[i] - b[i];
+ };
+ return UnrollTailLoop<3>::exec(l, 0, lambda, lambda);
}
-};
-template <> template <typename RetType, typename Functor1, typename Functor2, typename Number>
-inline RetType UnrollTailLoop<0>::exec(Number, RetType returnIfExited, Functor1, Functor2, Number)
+ return 0;
+}
+#endif
+
+Q_NEVER_INLINE
+qsizetype QtPrivate::qustrlen(const char16_t *str) noexcept
{
- return returnIfExited;
+#if defined(__SSE2__) && !(defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer))
+ return qustrlen_sse2(str);
+#endif
+
+ if (sizeof(wchar_t) == sizeof(char16_t))
+ return wcslen(reinterpret_cast<const wchar_t *>(str));
+
+ qsizetype result = 0;
+ while (*str++)
+ ++result;
+ return result;
}
+
+qsizetype QtPrivate::qustrnlen(const char16_t *str, qsizetype maxlen) noexcept
+{
+ return qustrchr({ str, maxlen }, u'\0') - str;
}
-#endif
/*!
* \internal
@@ -270,6 +683,7 @@ inline RetType UnrollTailLoop<0>::exec(Number, RetType returnIfExited, Functor1,
* character is not found, this function returns a pointer to the end of the
* string -- that is, \c{str.end()}.
*/
+Q_NEVER_INLINE
const char16_t *QtPrivate::qustrchr(QStringView str, char16_t c) noexcept
{
const char16_t *n = str.utf16();
@@ -279,23 +693,24 @@ const char16_t *QtPrivate::qustrchr(QStringView str, char16_t c) noexcept
bool loops = true;
// Using the PMOVMSKB instruction, we get two bits for each character
// we compare.
-# if defined(__AVX2__) && !defined(__OPTIMIZE_SIZE__)
- // we're going to read n[0..15] (32 bytes)
- __m256i mch256 = _mm256_set1_epi32(c | (c << 16));
- for (const char16_t *next = n + 16; next <= e; n = next, next += 16) {
- __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(n));
- __m256i result = _mm256_cmpeq_epi16(data, mch256);
- uint mask = uint(_mm256_movemask_epi8(result));
- if (mask) {
- uint idx = qCountTrailingZeroBits(mask);
- return n + idx / 2;
+ __m128i mch;
+ if constexpr (UseAvx2) {
+ // we're going to read n[0..15] (32 bytes)
+ __m256i mch256 = _mm256_set1_epi32(c | (c << 16));
+ for (const char16_t *next = n + 16; next <= e; n = next, next += 16) {
+ __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(n));
+ __m256i result = _mm256_cmpeq_epi16(data, mch256);
+ uint mask = uint(_mm256_movemask_epi8(result));
+ if (mask) {
+ uint idx = qCountTrailingZeroBits(mask);
+ return n + idx / 2;
+ }
}
+ loops = false;
+ mch = _mm256_castsi256_si128(mch256);
+ } else {
+ mch = _mm_set1_epi32(c | (c << 16));
}
- loops = false;
- __m128i mch = _mm256_castsi256_si128(mch256);
-# else
- __m128i mch = _mm_set1_epi32(c | (c << 16));
-# endif
auto hasMatch = [mch, &n](__m128i data, ushort validityMask) {
__m128i result = _mm_cmpeq_epi16(data, mch);
@@ -330,10 +745,10 @@ const char16_t *QtPrivate::qustrchr(QStringView str, char16_t c) noexcept
}
return UnrollTailLoop<3>::exec(e - n, e,
- [=](int i) { return n[i] == c; },
- [=](int i) { return n + i; });
+ [=](qsizetype i) { return n[i] == c; },
+ [=](qsizetype i) { return n + i; });
# endif
-#elif defined(__ARM_NEON__) && defined(Q_PROCESSOR_ARM_64) // vaddv is only available on Aarch64
+#elif defined(__ARM_NEON__)
const uint16x8_t vmask = { 1, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 };
const uint16x8_t ch_vec = vdupq_n_u16(c);
for (const char16_t *next = n + 8; next <= e; n = next, next += 8) {
@@ -346,128 +761,25 @@ const char16_t *QtPrivate::qustrchr(QStringView str, char16_t c) noexcept
}
#endif // aarch64
- --n;
- while (++n != e)
- if (*n == c)
- return n;
-
- return n;
+ return std::find(n, e, c);
}
-#ifdef __SSE2__
-// Scans from \a ptr to \a end until \a maskval is non-zero. Returns true if
-// the no non-zero was found. Returns false and updates \a ptr to point to the
-// first 16-bit word that has any bit set (note: if the input is 8-bit, \a ptr
-// may be updated to one byte short).
-static bool simdTestMask(const char *&ptr, const char *end, quint32 maskval)
-{
- auto updatePtr = [&](uint result) {
- // found a character matching the mask
- uint idx = qCountTrailingZeroBits(~result);
- ptr += idx;
- return false;
- };
-
-# if defined(__SSE4_1__)
- __m128i mask;
- auto updatePtrSimd = [&](__m128i data) {
- __m128i masked = _mm_and_si128(mask, data);
- __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
- uint result = _mm_movemask_epi8(comparison);
- return updatePtr(result);
- };
-
-# if defined(__AVX2__)
- // AVX2 implementation: test 32 bytes at a time
- const __m256i mask256 = _mm256_broadcastd_epi32(_mm_cvtsi32_si128(maskval));
- while (ptr + 32 <= end) {
- __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(ptr));
- if (!_mm256_testz_si256(mask256, data)) {
- // found a character matching the mask
- __m256i masked256 = _mm256_and_si256(mask256, data);
- __m256i comparison256 = _mm256_cmpeq_epi16(masked256, _mm256_setzero_si256());
- return updatePtr(_mm256_movemask_epi8(comparison256));
- }
- ptr += 32;
- }
-
- mask = _mm256_castsi256_si128(mask256);
-# else
- // SSE 4.1 implementation: test 32 bytes at a time (two 16-byte
- // comparisons, unrolled)
- mask = _mm_set1_epi32(maskval);
- while (ptr + 32 <= end) {
- __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
- __m128i data2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr + 16));
- if (!_mm_testz_si128(mask, data1))
- return updatePtrSimd(data1);
-
- ptr += 16;
- if (!_mm_testz_si128(mask, data2))
- return updatePtrSimd(data2);
- ptr += 16;
- }
-# endif
-
- // AVX2 and SSE4.1: final 16-byte comparison
- if (ptr + 16 <= end) {
- __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
- if (!_mm_testz_si128(mask, data1))
- return updatePtrSimd(data1);
- ptr += 16;
- }
-
- // and final 8-byte comparison
- if (ptr + 8 <= end) {
- __m128i data1 = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
- if (!_mm_testz_si128(mask, data1))
- return updatePtrSimd(data1);
- ptr += 8;
- }
-
-# else
- // SSE2 implementation: test 16 bytes at a time.
- const __m128i mask = _mm_set1_epi32(maskval);
- while (ptr + 16 <= end) {
- __m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
- __m128i masked = _mm_and_si128(mask, data);
- __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
- quint16 result = _mm_movemask_epi8(comparison);
- if (result != 0xffff)
- return updatePtr(result);
- ptr += 16;
- }
-
- // and one 8-byte comparison
- if (ptr + 8 <= end) {
- __m128i data = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
- __m128i masked = _mm_and_si128(mask, data);
- __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
- quint8 result = _mm_movemask_epi8(comparison);
- if (result != 0xff)
- return updatePtr(result);
- ptr += 8;
- }
-# endif
-
- return true;
-}
-
-static Q_ALWAYS_INLINE __m128i mm_load8_zero_extend(const void *ptr)
+/*!
+ * \internal
+ *
+ * Searches case-insensitively for character \a c in the string \a str and
+ * returns a pointer to it. Iif the character is not found, this function
+ * returns a pointer to the end of the string -- that is, \c{str.end()}.
+ */
+Q_NEVER_INLINE
+const char16_t *QtPrivate::qustrcasechr(QStringView str, char16_t c) noexcept
{
- const __m128i *dataptr = static_cast<const __m128i *>(ptr);
-#if defined(__SSE4_1__)
- // use a MOVQ followed by PMOVZXBW
- // if AVX2 is present, these should combine into a single VPMOVZXBW instruction
- __m128i data = _mm_loadl_epi64(dataptr);
- return _mm_cvtepu8_epi16(data);
-# else
- // use MOVQ followed by PUNPCKLBW
- __m128i data = _mm_loadl_epi64(dataptr);
- return _mm_unpacklo_epi8(data, _mm_setzero_si128());
-# endif
+ const QChar *n = str.begin();
+ const QChar *e = str.end();
+ c = foldCase(c);
+ auto it = std::find_if(n, e, [c](auto ch) { return foldAndCompare(ch, QChar(c)); });
+ return reinterpret_cast<const char16_t *>(it);
}
-#endif
// Note: ptr on output may be off by one and point to a preceding US-ASCII
// character. Usually harmless.
@@ -475,18 +787,21 @@ bool qt_is_ascii(const char *&ptr, const char *end) noexcept
{
#if defined(__SSE2__)
// Testing for the high bit can be done efficiently with just PMOVMSKB
-# if defined(__AVX2__)
- while (ptr + 32 <= end) {
- __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(ptr));
- quint32 mask = _mm256_movemask_epi8(data);
- if (mask) {
- uint idx = qCountTrailingZeroBits(mask);
- ptr += idx;
- return false;
+ bool loops = true;
+ if constexpr (UseAvx2) {
+ while (ptr + 32 <= end) {
+ __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(ptr));
+ quint32 mask = _mm256_movemask_epi8(data);
+ if (mask) {
+ uint idx = qCountTrailingZeroBits(mask);
+ ptr += idx;
+ return false;
+ }
+ ptr += 32;
}
- ptr += 32;
+ loops = false;
}
-# endif
+
while (ptr + 16 <= end) {
__m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
quint32 mask = _mm_movemask_epi8(data);
@@ -496,6 +811,9 @@ bool qt_is_ascii(const char *&ptr, const char *end) noexcept
return false;
}
ptr += 16;
+
+ if (!loops)
+ break;
}
if (ptr + 8 <= end) {
__m128i data = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr));
@@ -512,11 +830,9 @@ bool qt_is_ascii(const char *&ptr, const char *end) noexcept
while (ptr + 4 <= end) {
quint32 data = qFromUnaligned<quint32>(ptr);
if (data &= 0x80808080U) {
-#if Q_BYTE_ORDER == Q_BIG_ENDIAN
- uint idx = qCountLeadingZeroBits(data);
-#else
- uint idx = qCountTrailingZeroBits(data);
-#endif
+ uint idx = QSysInfo::ByteOrder == QSysInfo::BigEndian
+ ? qCountLeadingZeroBits(data)
+ : qCountTrailingZeroBits(data);
ptr += idx / 8;
return false;
}
@@ -531,7 +847,7 @@ bool qt_is_ascii(const char *&ptr, const char *end) noexcept
return true;
}
-bool QtPrivate::isAscii(QLatin1String s) noexcept
+bool QtPrivate::isAscii(QLatin1StringView s) noexcept
{
const char *ptr = s.begin();
const char *end = s.end();
@@ -539,19 +855,19 @@ bool QtPrivate::isAscii(QLatin1String s) noexcept
return qt_is_ascii(ptr, end);
}
-static bool isAscii(const QChar *&ptr, const QChar *end)
+static bool isAscii_helper(const char16_t *&ptr, const char16_t *end)
{
#ifdef __SSE2__
const char *ptr8 = reinterpret_cast<const char *>(ptr);
const char *end8 = reinterpret_cast<const char *>(end);
bool ok = simdTestMask(ptr8, end8, 0xff80ff80);
- ptr = reinterpret_cast<const QChar *>(ptr8);
+ ptr = reinterpret_cast<const char16_t *>(ptr8);
if (!ok)
return false;
#endif
while (ptr != end) {
- if (ptr->unicode() & 0xff80)
+ if (*ptr & 0xff80)
return false;
++ptr;
}
@@ -560,27 +876,27 @@ static bool isAscii(const QChar *&ptr, const QChar *end)
bool QtPrivate::isAscii(QStringView s) noexcept
{
- const QChar *ptr = s.begin();
- const QChar *end = s.end();
+ const char16_t *ptr = s.utf16();
+ const char16_t *end = ptr + s.size();
- return isAscii(ptr, end);
+ return isAscii_helper(ptr, end);
}
bool QtPrivate::isLatin1(QStringView s) noexcept
{
- const QChar *ptr = s.begin();
- const QChar *end = s.end();
+ const char16_t *ptr = s.utf16();
+ const char16_t *end = ptr + s.size();
#ifdef __SSE2__
const char *ptr8 = reinterpret_cast<const char *>(ptr);
const char *end8 = reinterpret_cast<const char *>(end);
if (!simdTestMask(ptr8, end8, 0xff00ff00))
return false;
- ptr = reinterpret_cast<const QChar *>(ptr8);
+ ptr = reinterpret_cast<const char16_t *>(ptr8);
#endif
while (ptr != end) {
- if ((*ptr++).unicode() > 0xff)
+ if (*ptr++ > 0xff)
return false;
}
return true;
@@ -609,46 +925,63 @@ Q_CORE_EXPORT void qt_from_latin1(char16_t *dst, const char *str, size_t size) n
* itself in exactly the same way as one would do it with intrinsics.
*/
#if defined(__SSE2__)
- const char *e = str + size;
- qptrdiff offset = 0;
-
// we're going to read str[offset..offset+15] (16 bytes)
- for ( ; str + offset + 15 < e; offset += 16) {
+ const __m128i nullMask = _mm_setzero_si128();
+ auto processOneChunk = [=](qptrdiff offset) {
const __m128i chunk = _mm_loadu_si128((const __m128i*)(str + offset)); // load
-#ifdef __AVX2__
- // zero extend to an YMM register
- const __m256i extended = _mm256_cvtepu8_epi16(chunk);
+ if constexpr (UseAvx2) {
+ // zero extend to an YMM register
+ const __m256i extended = _mm256_cvtepu8_epi16(chunk);
- // store
- _mm256_storeu_si256((__m256i*)(dst + offset), extended);
-#else
- const __m128i nullMask = _mm_set1_epi32(0);
-
- // unpack the first 8 bytes, padding with zeros
- const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask);
- _mm_storeu_si128((__m128i*)(dst + offset), firstHalf); // store
+ // store
+ _mm256_storeu_si256((__m256i*)(dst + offset), extended);
+ } else {
+ // unpack the first 8 bytes, padding with zeros
+ const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask);
+ _mm_storeu_si128((__m128i*)(dst + offset), firstHalf); // store
- // unpack the last 8 bytes, padding with zeros
- const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask);
- _mm_storeu_si128((__m128i*)(dst + offset + 8), secondHalf); // store
-#endif
- }
+ // unpack the last 8 bytes, padding with zeros
+ const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask);
+ _mm_storeu_si128((__m128i*)(dst + offset + 8), secondHalf); // store
+ }
+ };
- // we're going to read str[offset..offset+7] (8 bytes)
- if (str + offset + 7 < e) {
- const __m128i unpacked = mm_load8_zero_extend(str + offset);
- _mm_storeu_si128(reinterpret_cast<__m128i *>(dst + offset), unpacked);
- offset += 8;
+ const char *e = str + size;
+ if (size >= sizeof(__m128i)) {
+ qptrdiff offset = 0;
+ for ( ; str + offset + sizeof(__m128i) <= e; offset += sizeof(__m128i))
+ processOneChunk(offset);
+ if (str + offset < e)
+ processOneChunk(size - sizeof(__m128i));
+ return;
}
- size = size % 8;
- dst += offset;
- str += offset;
# if !defined(__OPTIMIZE_SIZE__)
- return UnrollTailLoop<7>::exec(int(size), [=](int i) { dst[i] = (uchar)str[i]; });
+ if (size >= 4) {
+ // two overlapped loads & stores, of either 64-bit or of 32-bit
+ if (size >= 8) {
+ const __m128i unpacked1 = mm_load8_zero_extend(str);
+ const __m128i unpacked2 = mm_load8_zero_extend(str + size - 8);
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), unpacked1);
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(dst + size - 8), unpacked2);
+ } else {
+ const __m128i chunk1 = _mm_cvtsi32_si128(qFromUnaligned<quint32>(str));
+ const __m128i chunk2 = _mm_cvtsi32_si128(qFromUnaligned<quint32>(str + size - 4));
+ const __m128i unpacked1 = _mm_unpacklo_epi8(chunk1, nullMask);
+ const __m128i unpacked2 = _mm_unpacklo_epi8(chunk2, nullMask);
+ _mm_storel_epi64(reinterpret_cast<__m128i *>(dst), unpacked1);
+ _mm_storel_epi64(reinterpret_cast<__m128i *>(dst + size - 4), unpacked2);
+ }
+ return;
+ } else {
+ size = size % 4;
+ return UnrollTailLoop<3>::exec(qsizetype(size), [=](qsizetype i) { dst[i] = uchar(str[i]); });
+ }
# endif
#endif
#if defined(__mips_dsp)
+ static_assert(sizeof(qsizetype) == sizeof(int),
+ "oops, the assembler implementation needs to be called in a loop");
if (size > 20)
qt_fromlatin1_mips_asm_unroll8(dst, str, size);
else
@@ -659,31 +992,51 @@ Q_CORE_EXPORT void qt_from_latin1(char16_t *dst, const char *str, size_t size) n
#endif
}
+static QVarLengthArray<char16_t> qt_from_latin1_to_qvla(QLatin1StringView str)
+{
+ const qsizetype len = str.size();
+ QVarLengthArray<char16_t> arr(len);
+ qt_from_latin1(arr.data(), str.data(), len);
+ return arr;
+}
+
template <bool Checked>
static void qt_to_latin1_internal(uchar *dst, const char16_t *src, qsizetype length)
{
#if defined(__SSE2__)
- uchar *e = dst + length;
- qptrdiff offset = 0;
-
-# ifdef __AVX2__
- const __m256i questionMark256 = _mm256_broadcastw_epi16(_mm_cvtsi32_si128('?'));
- const __m256i outOfRange256 = _mm256_broadcastw_epi16(_mm_cvtsi32_si128(0x100));
- const __m128i questionMark = _mm256_castsi256_si128(questionMark256);
- const __m128i outOfRange = _mm256_castsi256_si128(outOfRange256);
-# else
- const __m128i questionMark = _mm_set1_epi16('?');
- const __m128i outOfRange = _mm_set1_epi16(0x100);
-# endif
+ auto questionMark256 = []() {
+ if constexpr (UseAvx2)
+ return _mm256_broadcastw_epi16(_mm_cvtsi32_si128('?'));
+ else
+ return 0;
+ }();
+ auto outOfRange256 = []() {
+ if constexpr (UseAvx2)
+ return _mm256_broadcastw_epi16(_mm_cvtsi32_si128(0x100));
+ else
+ return 0;
+ }();
+ __m128i questionMark, outOfRange;
+ if constexpr (UseAvx2) {
+ questionMark = _mm256_castsi256_si128(questionMark256);
+ outOfRange = _mm256_castsi256_si128(outOfRange256);
+ } else {
+ questionMark = _mm_set1_epi16('?');
+ outOfRange = _mm_set1_epi16(0x100);
+ }
auto mergeQuestionMarks = [=](__m128i chunk) {
+ if (!Checked)
+ return chunk;
+
// SSE has no compare instruction for unsigned comparison.
-# ifdef __SSE4_1__
- // We use an unsigned uc = qMin(uc, 0x100) and then compare for equality.
- chunk = _mm_min_epu16(chunk, outOfRange);
- const __m128i offLimitMask = _mm_cmpeq_epi16(chunk, outOfRange);
- chunk = _mm_blendv_epi8(chunk, questionMark, offLimitMask);
-# else
+ if constexpr (UseSse4_1) {
+ // We use an unsigned uc = qMin(uc, 0x100) and then compare for equality.
+ chunk = _mm_min_epu16(chunk, outOfRange);
+ const __m128i offLimitMask = _mm_cmpeq_epi16(chunk, outOfRange);
+ chunk = _mm_blendv_epi8(chunk, questionMark, offLimitMask);
+ return chunk;
+ }
// The variables must be shiffted + 0x8000 to be compared
const __m128i signedBitOffset = _mm_set1_epi16(short(0x8000));
const __m128i thresholdMask = _mm_set1_epi16(short(0xff + 0x8000));
@@ -703,90 +1056,99 @@ static void qt_to_latin1_internal(uchar *dst, const char16_t *src, qsizetype len
chunk = _mm_or_si128(correctBytes, offLimitQuestionMark);
Q_UNUSED(outOfRange);
-# endif
return chunk;
};
- // we're going to write to dst[offset..offset+15] (16 bytes)
- for ( ; dst + offset + 15 < e; offset += 16) {
-# if defined(__AVX2__)
- __m256i chunk = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(src + offset));
- if (Checked) {
- // See mergeQuestionMarks lambda above for details
- chunk = _mm256_min_epu16(chunk, outOfRange256);
- const __m256i offLimitMask = _mm256_cmpeq_epi16(chunk, outOfRange256);
- chunk = _mm256_blendv_epi8(chunk, questionMark256, offLimitMask);
- }
+ // we're going to read to src[offset..offset+15] (16 bytes)
+ auto loadChunkAt = [=](qptrdiff offset) {
+ __m128i chunk1, chunk2;
+ if constexpr (UseAvx2) {
+ __m256i chunk = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(src + offset));
+ if (Checked) {
+ // See mergeQuestionMarks lambda above for details
+ chunk = _mm256_min_epu16(chunk, outOfRange256);
+ const __m256i offLimitMask = _mm256_cmpeq_epi16(chunk, outOfRange256);
+ chunk = _mm256_blendv_epi8(chunk, questionMark256, offLimitMask);
+ }
- const __m128i chunk2 = _mm256_extracti128_si256(chunk, 1);
- const __m128i chunk1 = _mm256_castsi256_si128(chunk);
-# else
- __m128i chunk1 = _mm_loadu_si128((const __m128i*)(src + offset)); // load
- if (Checked)
+ chunk2 = _mm256_extracti128_si256(chunk, 1);
+ chunk1 = _mm256_castsi256_si128(chunk);
+ } else {
+ chunk1 = _mm_loadu_si128((const __m128i*)(src + offset)); // load
chunk1 = mergeQuestionMarks(chunk1);
- __m128i chunk2 = _mm_loadu_si128((const __m128i*)(src + offset + 8)); // load
- if (Checked)
+ chunk2 = _mm_loadu_si128((const __m128i*)(src + offset + 8)); // load
chunk2 = mergeQuestionMarks(chunk2);
-# endif
+ }
// pack the two vector to 16 x 8bits elements
- const __m128i result = _mm_packus_epi16(chunk1, chunk2);
- _mm_storeu_si128((__m128i*)(dst + offset), result); // store
+ return _mm_packus_epi16(chunk1, chunk2);
+ };
+
+ if (size_t(length) >= sizeof(__m128i)) {
+ // because of possible overlapping, we won't process the last chunk in the loop
+ qptrdiff offset = 0;
+ for ( ; offset + 2 * sizeof(__m128i) < size_t(length); offset += sizeof(__m128i))
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(dst + offset), loadChunkAt(offset));
+
+ // overlapped conversion of the last full chunk and the tail
+ __m128i last1 = loadChunkAt(offset);
+ __m128i last2 = loadChunkAt(length - sizeof(__m128i));
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(dst + offset), last1);
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(dst + length - sizeof(__m128i)), last2);
+ return;
}
# if !defined(__OPTIMIZE_SIZE__)
- // we're going to write to dst[offset..offset+7] (8 bytes)
- if (dst + offset + 7 < e) {
- __m128i chunk = _mm_loadu_si128(reinterpret_cast<const __m128i *>(src + offset));
- if (Checked)
- chunk = mergeQuestionMarks(chunk);
-
- // pack, where the upper half is ignored
- const __m128i result = _mm_packus_epi16(chunk, chunk);
- _mm_storel_epi64(reinterpret_cast<__m128i *>(dst + offset), result);
- offset += 8;
- }
+ if (length >= 4) {
+ // this code is fine even for in-place conversion because we load both
+ // before any store
+ if (length >= 8) {
+ __m128i chunk1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(src));
+ __m128i chunk2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(src + length - 8));
+ chunk1 = mergeQuestionMarks(chunk1);
+ chunk2 = mergeQuestionMarks(chunk2);
- // we're going to write to dst[offset..offset+3] (4 bytes)
- if (dst + offset + 3 < e) {
- __m128i chunk = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(src + offset));
- if (Checked)
- chunk = mergeQuestionMarks(chunk);
+ // pack, where the upper half is ignored
+ const __m128i result1 = _mm_packus_epi16(chunk1, chunk1);
+ const __m128i result2 = _mm_packus_epi16(chunk2, chunk2);
+ _mm_storel_epi64(reinterpret_cast<__m128i *>(dst), result1);
+ _mm_storel_epi64(reinterpret_cast<__m128i *>(dst + length - 8), result2);
+ } else {
+ __m128i chunk1 = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(src));
+ __m128i chunk2 = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(src + length - 4));
+ chunk1 = mergeQuestionMarks(chunk1);
+ chunk2 = mergeQuestionMarks(chunk2);
- // pack, we'll the upper three quarters
- const __m128i result = _mm_packus_epi16(chunk, chunk);
- qToUnaligned(_mm_cvtsi128_si32(result), dst + offset);
- offset += 4;
+ // pack, we'll zero the upper three quarters
+ const __m128i result1 = _mm_packus_epi16(chunk1, chunk1);
+ const __m128i result2 = _mm_packus_epi16(chunk2, chunk2);
+ qToUnaligned(_mm_cvtsi128_si32(result1), dst);
+ qToUnaligned(_mm_cvtsi128_si32(result2), dst + length - 4);
+ }
+ return;
}
length = length % 4;
-# else
- length = length % 16;
-# endif // optimize size
-
- // advance dst, src for tail processing
- dst += offset;
- src += offset;
-
-# if !defined(__OPTIMIZE_SIZE__)
- return UnrollTailLoop<3>::exec(length, [=](int i) {
+ return UnrollTailLoop<3>::exec(length, [=](qsizetype i) {
if (Checked)
dst[i] = (src[i]>0xff) ? '?' : (uchar) src[i];
else
dst[i] = src[i];
});
-# endif
+# else
+ length = length % 16;
+# endif // optimize size
#elif defined(__ARM_NEON__)
- // Refer to the documentation of the SSE2 implementation
- // this use eactly the same method as for SSE except:
+ // Refer to the documentation of the SSE2 implementation.
+ // This uses exactly the same method as for SSE except:
// 1) neon has unsigned comparison
// 2) packing is done to 64 bits (8 x 8bits component).
if (length >= 16) {
- const int chunkCount = length >> 3; // divided by 8
+ const qsizetype chunkCount = length >> 3; // divided by 8
const uint16x8_t questionMark = vdupq_n_u16('?'); // set
const uint16x8_t thresholdMask = vdupq_n_u16(0xff); // set
- for (int i = 0; i < chunkCount; ++i) {
+ for (qsizetype i = 0; i < chunkCount; ++i) {
uint16x8_t chunk = vld1q_u16((uint16_t *)src); // load
src += 8;
@@ -804,6 +1166,8 @@ static void qt_to_latin1_internal(uchar *dst, const char16_t *src, qsizetype len
}
#endif
#if defined(__mips_dsp)
+ static_assert(sizeof(qsizetype) == sizeof(int),
+ "oops, the assembler implementation needs to be called in a loop");
qt_toLatin1_mips_dsp_asm(dst, src, length);
#else
while (length--) {
@@ -816,7 +1180,7 @@ static void qt_to_latin1_internal(uchar *dst, const char16_t *src, qsizetype len
#endif
}
-static void qt_to_latin1(uchar *dst, const char16_t *src, qsizetype length)
+void qt_to_latin1(uchar *dst, const char16_t *src, qsizetype length)
{
qt_to_latin1_internal<true>(dst, src, length);
}
@@ -826,52 +1190,45 @@ void qt_to_latin1_unchecked(uchar *dst, const char16_t *src, qsizetype length)
qt_to_latin1_internal<false>(dst, src, length);
}
-// Unicode case-insensitive comparison
-static int ucstricmp(const QChar *a, const QChar *ae, const QChar *b, const QChar *be)
+// Unicode case-insensitive comparison (argument order matches QStringView)
+Q_NEVER_INLINE static int ucstricmp(qsizetype alen, const char16_t *a, qsizetype blen, const char16_t *b)
{
if (a == b)
- return (ae - be);
-
- const QChar *e = ae;
- if (be - b < ae - a)
- e = a + (be - b);
+ return qt_lencmp(alen, blen);
char32_t alast = 0;
char32_t blast = 0;
- while (a < e) {
+ qsizetype l = qMin(alen, blen);
+ qsizetype i;
+ for (i = 0; i < l; ++i) {
// qDebug() << Qt::hex << alast << blast;
// qDebug() << Qt::hex << "*a=" << *a << "alast=" << alast << "folded=" << foldCase (*a, alast);
// qDebug() << Qt::hex << "*b=" << *b << "blast=" << blast << "folded=" << foldCase (*b, blast);
- int diff = foldCase(a->unicode(), alast) - foldCase(b->unicode(), blast);
+ int diff = foldCase(a[i], alast) - foldCase(b[i], blast);
if ((diff))
return diff;
- ++a;
- ++b;
}
- if (a == ae) {
- if (b == be)
+ if (i == alen) {
+ if (i == blen)
return 0;
return -1;
}
return 1;
}
-// Case-insensitive comparison between a Unicode string and a QLatin1String
-static int ucstricmp(const QChar *a, const QChar *ae, const char *b, const char *be)
+// Case-insensitive comparison between a QStringView and a QLatin1StringView
+// (argument order matches those types)
+Q_NEVER_INLINE static int ucstricmp(qsizetype alen, const char16_t *a, qsizetype blen, const char *b)
{
- auto e = ae;
- if (be - b < ae - a)
- e = a + (be - b);
-
- while (a < e) {
- int diff = foldCase(a->unicode()) - foldCase(char16_t{uchar(*b)});
+ qsizetype l = qMin(alen, blen);
+ qsizetype i;
+ for (i = 0; i < l; ++i) {
+ int diff = foldCase(a[i]) - foldCase(char16_t{uchar(b[i])});
if ((diff))
return diff;
- ++a;
- ++b;
}
- if (a == ae) {
- if (b == be)
+ if (i == alen) {
+ if (i == blen)
return 0;
return -1;
}
@@ -879,17 +1236,17 @@ static int ucstricmp(const QChar *a, const QChar *ae, const char *b, const char
}
// Case-insensitive comparison between a Unicode string and a UTF-8 string
-static int ucstricmp8(const char *utf8, const char *utf8end, const QChar *utf16, const QChar *utf16end)
+Q_NEVER_INLINE static int ucstricmp8(const char *utf8, const char *utf8end, const QChar *utf16, const QChar *utf16end)
{
auto src1 = reinterpret_cast<const uchar *>(utf8);
auto end1 = reinterpret_cast<const uchar *>(utf8end);
QStringIterator src2(utf16, utf16end);
while (src1 < end1 && src2.hasNext()) {
- uint uc1;
- uint *output = &uc1;
+ char32_t uc1 = 0;
+ char32_t *output = &uc1;
uchar b = *src1++;
- int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
+ const qsizetype res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
if (res < 0) {
// decoding error
uc1 = QChar::ReplacementCharacter;
@@ -897,7 +1254,7 @@ static int ucstricmp8(const char *utf8, const char *utf8end, const QChar *utf16,
uc1 = QChar::toCaseFolded(uc1);
}
- uint uc2 = QChar::toCaseFolded(src2.next());
+ char32_t uc2 = QChar::toCaseFolded(src2.next());
int diff = uc1 - uc2; // can't underflow
if (diff)
return diff;
@@ -915,98 +1272,24 @@ extern "C" int qt_ucstrncmp_mips_dsp_asm(const char16_t *a,
#endif
// Unicode case-sensitive compare two same-sized strings
-static int ucstrncmp(const QChar *a, const QChar *b, size_t l)
+template <StringComparisonMode Mode>
+static int ucstrncmp(const char16_t *a, const char16_t *b, size_t l)
{
-#ifdef __OPTIMIZE_SIZE__
- const QChar *end = a + l;
- while (a < end) {
- if (int diff = (int)a->unicode() - (int)b->unicode())
- return diff;
- ++a;
- ++b;
- }
- return 0;
-#else
-#if defined(__mips_dsp)
+ // This function isn't memcmp() because that can return the wrong sorting
+ // result in little-endian architectures: 0x00ff must sort before 0x0100,
+ // but the bytes in memory are FF 00 and 00 01.
+
+#ifndef __OPTIMIZE_SIZE__
+# if defined(__mips_dsp)
static_assert(sizeof(uint) == sizeof(size_t));
if (l >= 8) {
- return qt_ucstrncmp_mips_dsp_asm(reinterpret_cast<const char16_t*>(a),
- reinterpret_cast<const char16_t*>(b),
- l);
- }
-#endif // __mips_dsp
-#ifdef __SSE2__
- const QChar *end = a + l;
- qptrdiff offset = 0;
-
- // Using the PMOVMSKB instruction, we get two bits for each character
- // we compare.
- int retval;
- auto isDifferent = [a, b, &offset, &retval](__m128i a_data, __m128i b_data) {
- __m128i result = _mm_cmpeq_epi16(a_data, b_data);
- uint mask = ~uint(_mm_movemask_epi8(result));
- if (ushort(mask) == 0)
- return false;
- uint idx = qCountTrailingZeroBits(mask);
- retval = a[offset + idx / 2].unicode() - b[offset + idx / 2].unicode();
- return true;
- };
-
- // we're going to read a[0..15] and b[0..15] (32 bytes)
- for ( ; end - a >= offset + 16; offset += 16) {
-#ifdef __AVX2__
- __m256i a_data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(a + offset));
- __m256i b_data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(b + offset));
- __m256i result = _mm256_cmpeq_epi16(a_data, b_data);
- uint mask = _mm256_movemask_epi8(result);
-#else
- __m128i a_data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(a + offset));
- __m128i a_data2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(a + offset + 8));
- __m128i b_data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(b + offset));
- __m128i b_data2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(b + offset + 8));
- __m128i result1 = _mm_cmpeq_epi16(a_data1, b_data1);
- __m128i result2 = _mm_cmpeq_epi16(a_data2, b_data2);
- uint mask = _mm_movemask_epi8(result1) | (_mm_movemask_epi8(result2) << 16);
-#endif
- mask = ~mask;
- if (mask) {
- // found a different character
- uint idx = qCountTrailingZeroBits(mask);
- return a[offset + idx / 2].unicode() - b[offset + idx / 2].unicode();
- }
+ return qt_ucstrncmp_mips_dsp_asm(a, b, l);
}
-
- // we're going to read a[0..7] and b[0..7] (16 bytes)
- if (end - a >= offset + 8) {
- __m128i a_data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(a + offset));
- __m128i b_data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(b + offset));
- if (isDifferent(a_data, b_data))
- return retval;
-
- offset += 8;
- }
-
- // we're going to read a[0..3] and b[0..3] (8 bytes)
- if (end - a >= offset + 4) {
- __m128i a_data = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(a + offset));
- __m128i b_data = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(b + offset));
- if (isDifferent(a_data, b_data))
- return retval;
-
- offset += 4;
- }
-
- // reset l
- l &= 3;
-
- const auto lambda = [=](size_t i) -> int {
- return a[offset + i].unicode() - b[offset + i].unicode();
- };
- return UnrollTailLoop<3>::exec(l, 0, lambda, lambda);
-#endif
-#if defined(__ARM_NEON__) && defined(Q_PROCESSOR_ARM_64) // vaddv is only available on Aarch64
+# elif defined(__SSE2__)
+ return ucstrncmp_sse2<Mode>(a, b, l);
+# elif defined(__ARM_NEON__)
if (l >= 8) {
- const QChar *end = a + l;
+ const char16_t *end = a + l;
const uint16x8_t mask = { 1, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 };
while (end - a > 7) {
uint16x8_t da = vld1q_u16(reinterpret_cast<const uint16_t *>(a));
@@ -1015,8 +1298,10 @@ static int ucstrncmp(const QChar *a, const QChar *b, size_t l)
uint8_t r = ~(uint8_t)vaddvq_u16(vandq_u16(vceqq_u16(da, db), mask));
if (r) {
// found a different QChar
+ if (Mode == CompareStringsForEquality)
+ return 1;
uint idx = qCountTrailingZeroBits(r);
- return (int)a[idx].unicode() - (int)b[idx].unicode();
+ return a[idx] - b[idx];
}
a += 8;
b += 8;
@@ -1024,156 +1309,31 @@ static int ucstrncmp(const QChar *a, const QChar *b, size_t l)
l &= 7;
}
const auto lambda = [=](size_t i) -> int {
- return a[i].unicode() - b[i].unicode();
+ return a[i] - b[i];
};
return UnrollTailLoop<7>::exec(l, 0, lambda, lambda);
-#endif // __ARM_NEON__
- if (!l)
- return 0;
-
- // check alignment
- if ((reinterpret_cast<quintptr>(a) & 2) == (reinterpret_cast<quintptr>(b) & 2)) {
- // both addresses have the same alignment
- if (reinterpret_cast<quintptr>(a) & 2) {
- // both addresses are not aligned to 4-bytes boundaries
- // compare the first character
- if (*a != *b)
- return a->unicode() - b->unicode();
- --l;
- ++a;
- ++b;
-
- // now both addresses are 4-bytes aligned
- }
+# endif // MIPS DSP or __SSE2__ or __ARM_NEON__
+#endif // __OPTIMIZE_SIZE__
- // both addresses are 4-bytes aligned
- // do a fast 32-bit comparison
- const quint32 *da = reinterpret_cast<const quint32 *>(a);
- const quint32 *db = reinterpret_cast<const quint32 *>(b);
- const quint32 *e = da + (l >> 1);
- for ( ; da != e; ++da, ++db) {
- if (*da != *db) {
- a = reinterpret_cast<const QChar *>(da);
- b = reinterpret_cast<const QChar *>(db);
- if (*a != *b)
- return a->unicode() - b->unicode();
- return a[1].unicode() - b[1].unicode();
- }
- }
+ if (Mode == CompareStringsForEquality || QSysInfo::ByteOrder == QSysInfo::BigEndian)
+ return memcmp(a, b, l * sizeof(char16_t));
- // do we have a tail?
- a = reinterpret_cast<const QChar *>(da);
- b = reinterpret_cast<const QChar *>(db);
- return (l & 1) ? a->unicode() - b->unicode() : 0;
- } else {
- // one of the addresses isn't 4-byte aligned but the other is
- const QChar *e = a + l;
- for ( ; a != e; ++a, ++b) {
- if (*a != *b)
- return a->unicode() - b->unicode();
- }
+ for (size_t i = 0; i < l; ++i) {
+ if (int diff = a[i] - b[i])
+ return diff;
}
return 0;
-#endif
}
-static int ucstrncmp(const QChar *a, const uchar *c, size_t l)
+template <StringComparisonMode Mode>
+static int ucstrncmp(const char16_t *a, const char *b, size_t l)
{
- const char16_t *uc = reinterpret_cast<const char16_t *>(a);
+ const uchar *c = reinterpret_cast<const uchar *>(b);
+ const char16_t *uc = a;
const char16_t *e = uc + l;
-#ifdef __SSE2__
- __m128i nullmask = _mm_setzero_si128();
- qptrdiff offset = 0;
-
-# if !defined(__OPTIMIZE_SIZE__)
- // Using the PMOVMSKB instruction, we get two bits for each character
- // we compare.
- int retval;
- auto isDifferent = [uc, c, &offset, &retval](__m128i a_data, __m128i b_data) {
- __m128i result = _mm_cmpeq_epi16(a_data, b_data);
- uint mask = ~uint(_mm_movemask_epi8(result));
- if (ushort(mask) == 0)
- return false;
- uint idx = qCountTrailingZeroBits(mask);
- retval = uc[offset + idx / 2] - c[offset + idx / 2];
- return true;
- };
-# endif
-
- // we're going to read uc[offset..offset+15] (32 bytes)
- // and c[offset..offset+15] (16 bytes)
- for ( ; uc + offset + 15 < e; offset += 16) {
- // similar to fromLatin1_helper:
- // load 16 bytes of Latin 1 data
- __m128i chunk = _mm_loadu_si128((const __m128i*)(c + offset));
-
-# ifdef __AVX2__
- // expand Latin 1 data via zero extension
- __m256i ldata = _mm256_cvtepu8_epi16(chunk);
-
- // load UTF-16 data and compare
- __m256i ucdata = _mm256_loadu_si256((const __m256i*)(uc + offset));
- __m256i result = _mm256_cmpeq_epi16(ldata, ucdata);
-
- uint mask = ~_mm256_movemask_epi8(result);
-# else
- // expand via unpacking
- __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullmask);
- __m128i secondHalf = _mm_unpackhi_epi8(chunk, nullmask);
-
- // load UTF-16 data and compare
- __m128i ucdata1 = _mm_loadu_si128((const __m128i*)(uc + offset));
- __m128i ucdata2 = _mm_loadu_si128((const __m128i*)(uc + offset + 8));
- __m128i result1 = _mm_cmpeq_epi16(firstHalf, ucdata1);
- __m128i result2 = _mm_cmpeq_epi16(secondHalf, ucdata2);
-
- uint mask = ~(_mm_movemask_epi8(result1) | _mm_movemask_epi8(result2) << 16);
-# endif
- if (mask) {
- // found a different character
- uint idx = qCountTrailingZeroBits(mask);
- return uc[offset + idx / 2] - c[offset + idx / 2];
- }
- }
-
-# if !defined(__OPTIMIZE_SIZE__)
- // we'll read uc[offset..offset+7] (16 bytes) and c[offset..offset+7] (8 bytes)
- if (uc + offset + 7 < e) {
- // same, but we're using an 8-byte load
- __m128i secondHalf = mm_load8_zero_extend(c + offset);
-
- __m128i ucdata = _mm_loadu_si128((const __m128i*)(uc + offset));
- if (isDifferent(ucdata, secondHalf))
- return retval;
-
- // still matched
- offset += 8;
- }
-
- enum { MaxTailLength = 3 };
- // we'll read uc[offset..offset+3] (8 bytes) and c[offset..offset+3] (4 bytes)
- if (uc + offset + 3 < e) {
- __m128i chunk = _mm_cvtsi32_si128(qFromUnaligned<int>(c + offset));
- __m128i secondHalf = _mm_unpacklo_epi8(chunk, nullmask);
-
- __m128i ucdata = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(uc + offset));
- if (isDifferent(ucdata, secondHalf))
- return retval;
-
- // still matched
- offset += 4;
- }
-# endif // optimize size
-
- // reset uc and c
- uc += offset;
- c += offset;
-
-# if !defined(__OPTIMIZE_SIZE__)
- const auto lambda = [=](size_t i) { return uc[i] - char16_t(c[i]); };
- return UnrollTailLoop<MaxTailLength>::exec(e - uc, 0, lambda, lambda);
-# endif
+#if defined(__SSE2__) && !defined(__OPTIMIZE_SIZE__)
+ return ucstrncmp_sse2<Mode>(uc, c, l);
#endif
while (uc < e) {
@@ -1186,52 +1346,35 @@ static int ucstrncmp(const QChar *a, const uchar *c, size_t l)
return 0;
}
-constexpr int lencmp(qsizetype lhs, qsizetype rhs) noexcept
+// Unicode case-sensitive equality
+template <typename Char2>
+static bool ucstreq(const char16_t *a, size_t alen, const Char2 *b)
{
- return lhs == rhs ? 0 :
- lhs > rhs ? 1 :
- /* else */ -1 ;
+ if constexpr (std::is_same_v<decltype(a), decltype(b)>) {
+ if (a == b)
+ return true;
+ }
+ return ucstrncmp<CompareStringsForEquality>(a, b, alen) == 0;
}
// Unicode case-sensitive comparison
-static int ucstrcmp(const QChar *a, size_t alen, const QChar *b, size_t blen)
+template <typename Char2>
+static int ucstrcmp(const char16_t *a, size_t alen, const Char2 *b, size_t blen)
{
- if (a == b && alen == blen)
- return 0;
+ if constexpr (std::is_same_v<decltype(a), decltype(b)>) {
+ if (a == b && alen == blen)
+ return 0;
+ }
const size_t l = qMin(alen, blen);
- int cmp = ucstrncmp(a, b, l);
- return cmp ? cmp : lencmp(alen, blen);
+ int cmp = ucstrncmp<CompareStringsForOrdering>(a, b, l);
+ return cmp ? cmp : qt_lencmp(alen, blen);
}
-static int ucstrcmp(const QChar *a, size_t alen, const char *b, size_t blen)
-{
- const size_t l = qMin(alen, blen);
- const int cmp = ucstrncmp(a, reinterpret_cast<const uchar*>(b), l);
- return cmp ? cmp : lencmp(alen, blen);
-}
+using CaseInsensitiveL1 = QtPrivate::QCaseInsensitiveLatin1Hash;
static int latin1nicmp(const char *lhsChar, qsizetype lSize, const char *rhsChar, qsizetype rSize)
{
- constexpr uchar latin1Lower[256] = {
- 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
- 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
- 0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
- 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x5b,0x5c,0x5d,0x5e,0x5f,
- 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
- 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
- 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
- 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
- // 0xd7 (multiplication sign) and 0xdf (sz ligature) complicate life
- 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
- 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xd7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xdf,
- 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
- 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
- };
- // We're called with QLatin1String's .data() and .size():
+ // We're called with QLatin1StringView's .data() and .size():
Q_ASSERT(lSize >= 0 && rSize >= 0);
if (!lSize)
return rSize ? -1 : 0;
@@ -1239,88 +1382,76 @@ static int latin1nicmp(const char *lhsChar, qsizetype lSize, const char *rhsChar
return 1;
const qsizetype size = std::min(lSize, rSize);
- const uchar *lhs = reinterpret_cast<const uchar *>(lhsChar);
- const uchar *rhs = reinterpret_cast<const uchar *>(rhsChar);
- Q_ASSERT(lhs && rhs); // since both lSize and rSize are positive
+ Q_ASSERT(lhsChar && rhsChar); // since both lSize and rSize are positive
for (qsizetype i = 0; i < size; i++) {
- Q_ASSERT(lhs[i] && rhs[i]);
- if (int res = latin1Lower[lhs[i]] - latin1Lower[rhs[i]])
+ if (int res = CaseInsensitiveL1::difference(lhsChar[i], rhsChar[i]))
return res;
}
- return lencmp(lSize, rSize);
+ return qt_lencmp(lSize, rSize);
}
-static int qt_compare_strings(QStringView lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QStringView lhs, QStringView rhs) noexcept
{
- if (cs == Qt::CaseSensitive)
- return ucstrcmp(lhs.begin(), lhs.size(), rhs.begin(), rhs.size());
- else
- return ucstricmp(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
+ Q_ASSERT(lhs.size() == rhs.size());
+ return ucstreq(lhs.utf16(), lhs.size(), rhs.utf16());
}
-static int qt_compare_strings(QStringView lhs, QLatin1String rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QStringView lhs, QLatin1StringView rhs) noexcept
{
- if (cs == Qt::CaseSensitive)
- return ucstrcmp(lhs.begin(), lhs.size(), rhs.begin(), rhs.size());
- else
- return ucstricmp(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
+ Q_ASSERT(lhs.size() == rhs.size());
+ return ucstreq(lhs.utf16(), lhs.size(), rhs.latin1());
}
-static int qt_compare_strings(QLatin1String lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QLatin1StringView lhs, QStringView rhs) noexcept
{
- return -qt_compare_strings(rhs, lhs, cs);
+ return QtPrivate::equalStrings(rhs, lhs);
}
-static int qt_compare_strings(QLatin1String lhs, QLatin1String rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QLatin1StringView lhs, QLatin1StringView rhs) noexcept
{
- if (lhs.isEmpty())
- return lencmp(qsizetype(0), rhs.size());
- if (cs == Qt::CaseInsensitive)
- return latin1nicmp(lhs.data(), lhs.size(), rhs.data(), rhs.size());
- const auto l = std::min(lhs.size(), rhs.size());
- int r = qstrncmp(lhs.data(), rhs.data(), l);
- return r ? r : lencmp(lhs.size(), rhs.size());
+ Q_ASSERT(lhs.size() == rhs.size());
+ return (!lhs.size() || memcmp(lhs.data(), rhs.data(), lhs.size()) == 0);
}
-static int qt_compare_strings(QBasicUtf8StringView<false> lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QBasicUtf8StringView<false> lhs, QStringView rhs) noexcept
{
- if (cs == Qt::CaseSensitive)
- return QUtf8::compareUtf8(lhs.data(), lhs.size(), rhs.data(), rhs.size());
- else
- return ucstricmp8(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
+ return QUtf8::compareUtf8(lhs, rhs) == 0;
}
-static int qt_compare_strings(QStringView lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QStringView lhs, QBasicUtf8StringView<false> rhs) noexcept
{
- return -qt_compare_strings(rhs, lhs, cs);
+ return QtPrivate::equalStrings(rhs, lhs);
}
-static int qt_compare_strings(QLatin1String lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QLatin1StringView lhs, QBasicUtf8StringView<false> rhs) noexcept
{
- return qt_compare_strings(lhs, rhs.toString(), cs); // ### optimize!
+ return QUtf8::compareUtf8(QByteArrayView(rhs), lhs) == 0;
}
-static int qt_compare_strings(QBasicUtf8StringView<false> lhs, QLatin1String rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QBasicUtf8StringView<false> lhs, QLatin1StringView rhs) noexcept
{
- return -qt_compare_strings(rhs, lhs, cs);
+ return QtPrivate::equalStrings(rhs, lhs);
}
-static int qt_compare_strings(QBasicUtf8StringView<false> lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::equalStrings(QBasicUtf8StringView<false> lhs, QBasicUtf8StringView<false> rhs) noexcept
{
- if (lhs.isEmpty())
- return lencmp(0, rhs.size());
- if (cs == Qt::CaseInsensitive)
- return qt_compare_strings(lhs.toString(), rhs.toString(), cs); // ### optimize!
- const auto l = std::min(lhs.size(), rhs.size());
- int r = qstrncmp(lhs.data(), rhs.data(), l);
- return r ? r : lencmp(lhs.size(), rhs.size());
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED) || defined(QT_STATIC)
+ Q_ASSERT(lhs.size() == rhs.size());
+#else
+ // operator== didn't enforce size prior to Qt 6.2
+ if (lhs.size() != rhs.size())
+ return false;
+#endif
+ return (!lhs.size() || memcmp(lhs.data(), rhs.data(), lhs.size()) == 0);
}
-int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs) noexcept
+bool QAnyStringView::equal(QAnyStringView lhs, QAnyStringView rhs) noexcept
{
- return lhs.visit([rhs, cs](auto lhs) {
- return rhs.visit([lhs, cs](auto rhs) {
- return qt_compare_strings(lhs, rhs, cs);
+ if (lhs.size() != rhs.size() && lhs.isUtf8() == rhs.isUtf8())
+ return false;
+ return lhs.visit([rhs](auto lhs) {
+ return rhs.visit([lhs](auto rhs) {
+ return QtPrivate::equalStrings(lhs, rhs);
});
});
}
@@ -1332,8 +1463,7 @@ int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSens
Returns an integer that compares to 0 as \a lhs compares to \a rhs.
- If \a cs is Qt::CaseSensitive (the default), the comparison is case-sensitive;
- otherwise the comparison is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
Case-sensitive comparison is based exclusively on the numeric Unicode values
of the characters and is very fast, but is not what a human would expect.
@@ -1343,7 +1473,9 @@ int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSens
*/
int QtPrivate::compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ if (cs == Qt::CaseSensitive)
+ return ucstrcmp(lhs.utf16(), lhs.size(), rhs.utf16(), rhs.size());
+ return ucstricmp(lhs.size(), lhs.utf16(), rhs.size(), rhs.utf16());
}
/*!
@@ -1354,8 +1486,7 @@ int QtPrivate::compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitiv
Returns an integer that compares to 0 as \a lhs compares to \a rhs.
- If \a cs is Qt::CaseSensitive (the default), the comparison is case-sensitive;
- otherwise the comparison is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
Case-sensitive comparison is based exclusively on the numeric Unicode values
of the characters and is very fast, but is not what a human would expect.
@@ -1363,9 +1494,11 @@ int QtPrivate::compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitiv
\sa {Comparing Strings}
*/
-int QtPrivate::compareStrings(QStringView lhs, QLatin1String rhs, Qt::CaseSensitivity cs) noexcept
+int QtPrivate::compareStrings(QStringView lhs, QLatin1StringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ if (cs == Qt::CaseSensitive)
+ return ucstrcmp(lhs.utf16(), lhs.size(), rhs.latin1(), rhs.size());
+ return ucstricmp(lhs.size(), lhs.utf16(), rhs.size(), rhs.latin1());
}
/*!
@@ -1376,7 +1509,7 @@ int QtPrivate::compareStrings(QStringView lhs, QLatin1String rhs, Qt::CaseSensit
*/
int QtPrivate::compareStrings(QStringView lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ return -compareStrings(rhs, lhs, cs);
}
/*!
@@ -1385,9 +1518,9 @@ int QtPrivate::compareStrings(QStringView lhs, QBasicUtf8StringView<false> rhs,
\since 5.10
\overload
*/
-int QtPrivate::compareStrings(QLatin1String lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
+int QtPrivate::compareStrings(QLatin1StringView lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ return -compareStrings(rhs, lhs, cs);
}
/*!
@@ -1398,8 +1531,7 @@ int QtPrivate::compareStrings(QLatin1String lhs, QStringView rhs, Qt::CaseSensit
Returns an integer that compares to 0 as \a lhs compares to \a rhs.
- If \a cs is Qt::CaseSensitive (the default), the comparison is case-sensitive;
- otherwise the comparison is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
Case-sensitive comparison is based exclusively on the numeric Latin-1 values
of the characters and is very fast, but is not what a human would expect.
@@ -1407,9 +1539,15 @@ int QtPrivate::compareStrings(QLatin1String lhs, QStringView rhs, Qt::CaseSensit
\sa {Comparing Strings}
*/
-int QtPrivate::compareStrings(QLatin1String lhs, QLatin1String rhs, Qt::CaseSensitivity cs) noexcept
+int QtPrivate::compareStrings(QLatin1StringView lhs, QLatin1StringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ if (lhs.isEmpty())
+ return qt_lencmp(qsizetype(0), rhs.size());
+ if (cs == Qt::CaseInsensitive)
+ return latin1nicmp(lhs.data(), lhs.size(), rhs.data(), rhs.size());
+ const auto l = std::min(lhs.size(), rhs.size());
+ int r = memcmp(lhs.data(), rhs.data(), l);
+ return r ? r : qt_lencmp(lhs.size(), rhs.size());
}
/*!
@@ -1418,9 +1556,9 @@ int QtPrivate::compareStrings(QLatin1String lhs, QLatin1String rhs, Qt::CaseSens
\since 6.0
\overload
*/
-int QtPrivate::compareStrings(QLatin1String lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
+int QtPrivate::compareStrings(QLatin1StringView lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ return -QUtf8::compareUtf8(QByteArrayView(rhs), lhs, cs);
}
/*!
@@ -1431,7 +1569,9 @@ int QtPrivate::compareStrings(QLatin1String lhs, QBasicUtf8StringView<false> rhs
*/
int QtPrivate::compareStrings(QBasicUtf8StringView<false> lhs, QStringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ if (cs == Qt::CaseSensitive)
+ return QUtf8::compareUtf8(lhs, rhs);
+ return ucstricmp8(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
}
/*!
@@ -1440,9 +1580,9 @@ int QtPrivate::compareStrings(QBasicUtf8StringView<false> lhs, QStringView rhs,
\since 6.0
\overload
*/
-int QtPrivate::compareStrings(QBasicUtf8StringView<false> lhs, QLatin1String rhs, Qt::CaseSensitivity cs) noexcept
+int QtPrivate::compareStrings(QBasicUtf8StringView<false> lhs, QLatin1StringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ return -compareStrings(rhs, lhs, cs);
}
/*!
@@ -1453,44 +1593,68 @@ int QtPrivate::compareStrings(QBasicUtf8StringView<false> lhs, QLatin1String rhs
*/
int QtPrivate::compareStrings(QBasicUtf8StringView<false> lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs) noexcept
{
- return qt_compare_strings(lhs, rhs, cs);
+ return QUtf8::compareUtf8(QByteArrayView(lhs), QByteArrayView(rhs), cs);
}
-#define REHASH(a) \
- if (sl_minus_1 < sizeof(std::size_t) * CHAR_BIT) \
- hashHaystack -= std::size_t(a) << sl_minus_1; \
- hashHaystack <<= 1
-
-inline bool qIsUpper(char ch)
+int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs) noexcept
{
- return ch >= 'A' && ch <= 'Z';
+ return lhs.visit([rhs, cs](auto lhs) {
+ return rhs.visit([lhs, cs](auto rhs) {
+ return QtPrivate::compareStrings(lhs, rhs, cs);
+ });
+ });
}
-inline bool qIsDigit(char ch)
+// ### Qt 7: do not allow anything but ASCII digits
+// in arg()'s replacements.
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
+static bool supportUnicodeDigitValuesInArg()
{
- return ch >= '0' && ch <= '9';
+ static const bool result = []() {
+ static const char supportUnicodeDigitValuesEnvVar[]
+ = "QT_USE_UNICODE_DIGIT_VALUES_IN_STRING_ARG";
+
+ if (qEnvironmentVariableIsSet(supportUnicodeDigitValuesEnvVar))
+ return qEnvironmentVariableIntValue(supportUnicodeDigitValuesEnvVar) != 0;
+
+#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) // keep it in sync with the test
+ return true;
+#else
+ return false;
+#endif
+ }();
+
+ return result;
}
+#endif
-inline char qToLower(char ch)
+static int qArgDigitValue(QChar ch) noexcept
{
- if (ch >= 'A' && ch <= 'Z')
- return ch - 'A' + 'a';
- else
- return ch;
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
+ if (supportUnicodeDigitValuesInArg())
+ return ch.digitValue();
+#endif
+ if (ch >= u'0' && ch <= u'9')
+ return int(ch.unicode() - u'0');
+ return -1;
}
+#if QT_CONFIG(regularexpression)
+Q_DECL_COLD_FUNCTION
+void qtWarnAboutInvalidRegularExpression(const QString &pattern, const char *where);
+#endif
/*!
\macro QT_RESTRICTED_CAST_FROM_ASCII
\relates QString
- Defining this macro disables most automatic conversions from source
- literals and 8-bit data to unicode QStrings, but allows the use of
+ Disables most automatic conversions from source literals and 8-bit data
+ to unicode QStrings, but allows the use of
the \c{QChar(char)} and \c{QString(const char (&ch)[N]} constructors,
- and the \c{QString::operator=(const char (&ch)[N])} assignment operator
- giving most of the type-safety benefits of \c QT_NO_CAST_FROM_ASCII
+ and the \c{QString::operator=(const char (&ch)[N])} assignment operator.
+ This gives most of the type-safety benefits of \l QT_NO_CAST_FROM_ASCII
but does not require user code to wrap character and string literals
- with QLatin1Char, QLatin1String or similar.
+ with QLatin1Char, QLatin1StringView or similar.
Using this macro together with source strings outside the 7-bit range,
non-literals, or literals with embedded NUL characters is undefined.
@@ -1501,19 +1665,24 @@ inline char qToLower(char ch)
/*!
\macro QT_NO_CAST_FROM_ASCII
\relates QString
+ \relates QChar
- Disables automatic conversions from 8-bit strings (char *) to unicode QStrings
+ Disables automatic conversions from 8-bit strings (\c{char *}) to Unicode
+ QStrings, as well as from 8-bit \c{char} types (\c{char} and
+ \c{unsigned char}) to QChar.
- \sa QT_NO_CAST_TO_ASCII, QT_RESTRICTED_CAST_FROM_ASCII, QT_NO_CAST_FROM_BYTEARRAY
+ \sa QT_NO_CAST_TO_ASCII, QT_RESTRICTED_CAST_FROM_ASCII,
+ QT_NO_CAST_FROM_BYTEARRAY
*/
/*!
\macro QT_NO_CAST_TO_ASCII
\relates QString
- disables automatic conversion from QString to 8-bit strings (char *)
+ Disables automatic conversion from QString to 8-bit strings (\c{char *}).
- \sa QT_NO_CAST_FROM_ASCII, QT_RESTRICTED_CAST_FROM_ASCII, QT_NO_CAST_FROM_BYTEARRAY
+ \sa QT_NO_CAST_FROM_ASCII, QT_RESTRICTED_CAST_FROM_ASCII,
+ QT_NO_CAST_FROM_BYTEARRAY
*/
/*!
@@ -1541,10 +1710,18 @@ inline char qToLower(char ch)
\ingroup shared
\ingroup string-processing
+ \compares strong
+ \compareswith strong QChar QLatin1StringView {const char16_t *} \
+ QStringView QUtf8StringView
+ \endcompareswith
+ \compareswith strong QByteArray QByteArrayView {const char *}
+ When comparing with byte arrays, their content is interpreted as utf-8.
+ \endcompareswith
+
QString stores a string of 16-bit \l{QChar}s, where each QChar
corresponds to one UTF-16 code unit. (Unicode characters
with code values above 65535 are stored using surrogate pairs,
- i.e., two consecutive \l{QChar}s.)
+ that is, two consecutive \l{QChar}s.)
\l{Unicode} is an international standard that supports most of the
writing systems in use today. It is a superset of US-ASCII (ANSI
@@ -1560,17 +1737,15 @@ inline char qToLower(char ch)
store raw bytes and traditional 8-bit '\\0'-terminated strings.
For most purposes, QString is the class you want to use. It is
used throughout the Qt API, and the Unicode support ensures that
- your applications will be easy to translate if you want to expand
- your application's market at some point. The two main cases where
- QByteArray is appropriate are when you need to store raw binary
- data, and when memory conservation is critical (like in embedded
- systems).
+ your applications are easy to translate if you want to expand
+ your application's market at some point. Two prominent cases
+ where QByteArray is appropriate are when you need to store raw
+ binary data, and when memory conservation is critical (like in
+ embedded systems).
- \tableofcontents
+ \section1 Initializing a string
- \section1 Initializing a String
-
- One way to initialize a QString is simply to pass a \c{const char
+ One way to initialize a QString is to pass a \c{const char
*} to its constructor. For example, the following code creates a
QString of size 5 containing the data "Hello":
@@ -1581,23 +1756,24 @@ inline char qToLower(char ch)
In all of the QString functions that take \c{const char *}
parameters, the \c{const char *} is interpreted as a classic
- C-style '\\0'-terminated string encoded in UTF-8. It is legal for
- the \c{const char *} parameter to be \nullptr.
+ C-style \c{'\\0'}-terminated string. Except where the function's
+ name overtly indicates some other encoding, such \c{const char *}
+ parameters are assumed to be encoded in UTF-8.
You can also provide string data as an array of \l{QChar}s:
\snippet qstring/main.cpp 1
QString makes a deep copy of the QChar data, so you can modify it
- later without experiencing side effects. (If for performance
- reasons you don't want to take a deep copy of the character data,
- use QString::fromRawData() instead.)
+ later without experiencing side effects. You can avoid taking a
+ deep copy of the character data by using QStringView or
+ QString::fromRawData() instead.
Another approach is to set the size of the string using resize()
and to initialize the data character per character. QString uses
0-based indexes, just like C++ arrays. To access the character at
a particular index position, you can use \l operator[](). On
- non-const strings, \l operator[]() returns a reference to a
+ non-\c{const} strings, \l operator[]() returns a reference to a
character that can be used on the left side of an assignment. For
example:
@@ -1608,9 +1784,9 @@ inline char qToLower(char ch)
\snippet qstring/main.cpp 3
- The at() function can be faster than \l operator[](), because it
+ The at() function can be faster than \l operator[]() because it
never causes a \l{deep copy} to occur. Alternatively, use the
- left(), right(), or mid() functions to extract several characters
+ first(), last(), or sliced() functions to extract several characters
at a time.
A QString can embed '\\0' characters (QChar::Null). The size()
@@ -1630,11 +1806,11 @@ inline char qToLower(char ch)
You can also pass string literals to functions that take QStrings
as arguments, invoking the QString(const char *)
constructor. Similarly, you can pass a QString to a function that
- takes a \c{const char *} argument using the \l qPrintable() macro
+ takes a \c{const char *} argument using the \l qPrintable() macro,
which returns the given QString as a \c{const char *}. This is
equivalent to calling <QString>.toLocal8Bit().constData().
- \section1 Manipulating String Data
+ \section1 Manipulating string data
QString provides the following basic functions for modifying the
character data: append(), prepend(), insert(), replace(), and
@@ -1642,32 +1818,62 @@ inline char qToLower(char ch)
\snippet qstring/main.cpp 5
+ In the above example, the replace() function's first two arguments are the
+ position from which to start replacing and the number of characters that
+ should be replaced.
+
+ When data-modifying functions increase the size of the string,
+ QString may reallocate the memory in which it holds its data. When
+ this happens, QString expands by more than it immediately needs so as
+ to have space for further expansion without reallocation until the size
+ of the string has significantly increased.
+
+ The insert(), remove(), and, when replacing a sub-string with one of
+ different size, replace() functions can be slow (\l{linear time}) for
+ large strings because they require moving many characters in the string
+ by at least one position in memory.
+
If you are building a QString gradually and know in advance
approximately how many characters the QString will contain, you
can call reserve(), asking QString to preallocate a certain amount
of memory. You can also call capacity() to find out how much
- memory QString actually allocated.
-
- The replace() and remove() functions' first two arguments are the
- position from which to start erasing and the number of characters
- that should be erased. If you want to replace all occurrences of
- a particular substring with another, use one of the two-parameter
- replace() overloads.
-
- A frequent requirement is to remove whitespace characters from a
- string ('\\n', '\\t', ' ', etc.). If you want to remove whitespace
- from both ends of a QString, use the trimmed() function. If you
- want to remove whitespace from both ends and replace multiple
- consecutive whitespaces with a single space character within the
- string, use simplified().
+ memory the QString actually has allocated.
+
+ QString provides \l{STL-style iterators} (QString::const_iterator and
+ QString::iterator). In practice, iterators are handy when working with
+ generic algorithms provided by the C++ standard library.
+
+ \note Iterators over a QString, and references to individual characters
+ within one, cannot be relied on to remain valid when any non-\c{const}
+ method of the QString is called. Accessing such an iterator or reference
+ after the call to a non-\c{const} method leads to undefined behavior. When
+ stability for iterator-like functionality is required, you should use
+ indexes instead of iterators, as they are not tied to QString's internal
+ state and thus do not get invalidated.
+
+ \note Due to \l{implicit sharing}, the first non-\c{const} operator or
+ function used on a given QString may cause it to internally perform a deep
+ copy of its data. This invalidates all iterators over the string and
+ references to individual characters within it. Do not call non-const
+ functions while keeping iterators. Accessing an iterator or reference
+ after it has been invalidated leads to undefined behavior. See the
+ \l{Implicit sharing iterator problem} section for more information.
+
+ A frequent requirement is to remove or simplify the spacing between
+ visible characters in a string. The characters that make up that spacing
+ are those for which \l {QChar::}{isSpace()} returns \c true, such as
+ the simple space \c{' '}, the horizontal tab \c{'\\t'} and the newline \c{'\\n'}.
+ To obtain a copy of a string leaving out any spacing from its start and end,
+ use \l trimmed(). To also replace each sequence of spacing characters within
+ the string with a simple space, \c{' '}, use \l simplified().
If you want to find all occurrences of a particular character or
substring in a QString, use the indexOf() or lastIndexOf()
- functions. The former searches forward starting from a given index
- position, the latter searches backward. Both return the index
- position of the character or substring if they find it; otherwise,
- they return -1. For example, here is a typical loop that finds all
- occurrences of a particular substring:
+ functions.The former searches forward, the latter searches backward.
+ Either can be told an index position from which to start their search.
+ Each returns the index position of the character or substring if they
+ find it; otherwise, they return -1. For example, here is a typical loop
+ that finds all occurrences of a particular substring:
\snippet qstring/main.cpp 6
@@ -1676,52 +1882,57 @@ inline char qToLower(char ch)
setNum() functions, the number() static functions, and the
toInt(), toDouble(), and similar functions.
- To get an upper- or lowercase version of a string use toUpper() or
+ To get an uppercase or lowercase version of a string, use toUpper() or
toLower().
Lists of strings are handled by the QStringList class. You can
split a string into a list of strings using the split() function,
and join a list of strings into a single string with an optional
- separator using QStringList::join(). You can obtain a list of
- strings from a string list that contain a particular substring or
- that match a particular QRegularExpression using the QStringList::filter()
- function.
+ separator using QStringList::join(). You can obtain a filtered list
+ from a string list by selecting the entries in it that contain a
+ particular substring or match a particular QRegularExpression.
+ See QStringList::filter() for details.
- \section1 Querying String Data
+ \section1 Querying string data
- If you want to see if a QString starts or ends with a particular
- substring use startsWith() or endsWith(). If you simply want to
- check whether a QString contains a particular character or
- substring, use the contains() function. If you want to find out
- how many times a particular character or substring occurs in the
- string, use count().
+ To see if a QString starts or ends with a particular substring, use
+ startsWith() or endsWith(). To check whether a QString contains a
+ specific character or substring, use the contains() function. To
+ find out how many times a particular character or substring occurs
+ in a string, use count().
To obtain a pointer to the actual character data, call data() or
constData(). These functions return a pointer to the beginning of
the QChar data. The pointer is guaranteed to remain valid until a
- non-const function is called on the QString.
+ non-\c{const} function is called on the QString.
- \section2 Comparing Strings
+ \section2 Comparing strings
QStrings can be compared using overloaded operators such as \l
operator<(), \l operator<=(), \l operator==(), \l operator>=(),
- and so on. Note that the comparison is based exclusively on the
- numeric Unicode values of the characters. It is very fast, but is
- not what a human would expect; the QString::localeAwareCompare()
- function is usually a better choice for sorting user-interface
- strings, when such a comparison is available.
-
- On Unix-like platforms (including Linux, \macos and iOS), when Qt
- is linked with the ICU library (which it usually is), its
- locale-aware sorting is used. Otherwise, on \macos and iOS, \l
- localeAwareCompare() compares according the "Order for sorted
- lists" setting in the International preferences panel. On other
- Unix-like systems without ICU, the comparison falls back to the
- system library's \c strcoll(),
-
- \section1 Converting Between encoded strings data and QString
-
- QString provides the following three functions that return a
+ and so on. The comparison is based exclusively on the lexicographical
+ order of the two strings, seen as sequences of UTF-16 code units.
+ It is very fast but is not what a human would expect; the
+ QString::localeAwareCompare() function is usually a better choice for
+ sorting user-interface strings, when such a comparison is available.
+
+ When Qt is linked with the ICU library (which it usually is), its
+ locale-aware sorting is used. Otherwise, platform-specific solutions
+ are used:
+ \list
+ \li On Windows, localeAwareCompare() uses the current user locale,
+ as set in the \uicontrol{regional} and \uicontrol{language}
+ options portion of \uicontrol{Control Panel}.
+ \li On \macos and iOS, \l localeAwareCompare() compares according
+ to the \uicontrol{Order for sorted lists} setting in the
+ \uicontrol{International preferences} panel.
+ \li On other Unix-like systems, the comparison falls back to the
+ system library's \c strcoll().
+ \endlist
+
+ \section1 Converting between encoded string data and QString
+
+ QString provides the following functions that return a
\c{const char *} version of the string as QByteArray: toUtf8(),
toLatin1(), and toLocal8Bit().
@@ -1746,26 +1957,21 @@ inline char qToLower(char ch)
Latin-1, but there is always the risk that an implicit conversion
from or to \c{const char *} is done using the wrong 8-bit
encoding. To minimize these risks, you can turn off these implicit
- conversions by defining the following two preprocessor symbols:
+ conversions by defining some of the following preprocessor symbols:
\list
- \li \c QT_NO_CAST_FROM_ASCII disables automatic conversions from
+ \li \l QT_NO_CAST_FROM_ASCII disables automatic conversions from
C string literals and pointers to Unicode.
- \li \c QT_RESTRICTED_CAST_FROM_ASCII allows automatic conversions
- from C characters and character arrays, but disables automatic
+ \li \l QT_RESTRICTED_CAST_FROM_ASCII allows automatic conversions
+ from C characters and character arrays but disables automatic
conversions from character pointers to Unicode.
- \li \c QT_NO_CAST_TO_ASCII disables automatic conversion from QString
+ \li \l QT_NO_CAST_TO_ASCII disables automatic conversion from QString
to C strings.
\endlist
- One way to define these preprocessor symbols globally for your
- application is to add the following entry to your \l {Creating Project Files}{qmake project file}:
-
- \snippet code/src_corelib_text_qstring.cpp 0
-
You then need to explicitly call fromUtf8(), fromLatin1(),
or fromLocal8Bit() to construct a QString from an
- 8-bit string, or use the lightweight QLatin1String class, for
+ 8-bit string, or use the lightweight QLatin1StringView class. For
example:
\snippet code/src_corelib_text_qstring.cpp 1
@@ -1786,7 +1992,7 @@ inline char qToLower(char ch)
\snippet qstring/main.cpp 7
- The \c result variable, is a normal variable allocated on the
+ The \c result variable is a normal variable allocated on the
stack. When \c return is called, and because we're returning by
value, the copy constructor is called and a copy of the string is
returned. No actual copying takes place thanks to the implicit
@@ -1794,12 +2000,12 @@ inline char qToLower(char ch)
\endtable
- \section1 Distinction Between Null and Empty Strings
+ \section1 Distinction between null and empty strings
- For historical reasons, QString distinguishes between a null
- string and an empty string. A \e null string is a string that is
+ For historical reasons, QString distinguishes between null
+ and empty strings. A \e null string is a string that is
initialized using QString's default constructor or by passing
- (const char *)0 to the constructor. An \e empty string is any
+ \nullptr to the constructor. An \e empty string is any
string with size 0. A null string is always empty, but an empty
string isn't necessarily null:
@@ -1807,43 +2013,46 @@ inline char qToLower(char ch)
All functions except isNull() treat null strings the same as empty
strings. For example, toUtf8().constData() returns a valid pointer
- (\e not nullptr) to a '\\0' character for a null string. We
+ (not \nullptr) to a '\\0' character for a null string. We
recommend that you always use the isEmpty() function and avoid isNull().
- \section1 Argument Formats
+ \section1 Number formats
- In member functions where an argument \e format can be specified
- (e.g., arg(), number()), the argument \e format can be one of the
- following:
+ When a QString::arg() \c{'%'} format specifier includes the \c{'L'} locale
+ qualifier, and the base is ten (its default), the default locale is
+ used. This can be set using \l{QLocale::setDefault()}. For more refined
+ control of localized string representations of numbers, see
+ QLocale::toString(). All other number formatting done by QString follows the
+ C locale's representation of numbers.
- \table
- \header \li Format \li Meaning
- \row \li \c e \li format as [-]9.9e[+|-]999
- \row \li \c E \li format as [-]9.9E[+|-]999
- \row \li \c f \li format as [-]9.9
- \row \li \c g \li use \c e or \c f format, whichever is the most concise
- \row \li \c G \li use \c E or \c f format, whichever is the most concise
- \endtable
+ When QString::arg() applies left-padding to numbers, the fill character
+ \c{'0'} is treated specially. If the number is negative, its minus sign
+ appears before the zero-padding. If the field is localized, the
+ locale-appropriate zero character is used in place of \c{'0'}. For
+ floating-point numbers, this special treatment only applies if the number is
+ finite.
+
+ \section2 Floating-point formats
- A \e precision is also specified with the argument \e format. For
- the 'e', 'E', and 'f' formats, the \e precision represents the
- number of digits \e after the decimal point. For the 'g' and 'G'
- formats, the \e precision represents the maximum number of
- significant digits (trailing zeroes are omitted).
+ In member functions (for example, arg() and number()) that format floating-point
+ numbers (\c float or \c double) as strings, the representation used can be
+ controlled by a choice of \e format and \e precision, whose meanings are as
+ for \l {QLocale::toString(double, char, int)}.
- \section1 More Efficient String Construction
+ If the selected \e format includes an exponent, localized forms follow the
+ locale's convention on digits in the exponent. For non-localized formatting,
+ the exponent shows its sign and includes at least two digits, left-padding
+ with zero if needed.
- Many strings are known at compile time. But the trivial
- constructor QString("Hello"), will copy the contents of the string,
- treating the contents as Latin-1. To avoid this one can use the
- QStringLiteral macro to directly create the required data at compile
- time. Constructing a QString out of the literal does then not cause
- any overhead at runtime.
+ \section1 More efficient string construction
- A slightly less efficient way is to use QLatin1String. This class wraps
- a C string literal, precalculates it length at compile time and can
- then be used for faster comparison with QStrings and conversion to
- QStrings than a regular C string literal.
+ Many strings are known at compile time. The QString constructor from
+ C++ string literals will copy the contents of the string,
+ treating the contents as UTF-8. This requires memory allocation and
+ re-encoding string data, operations that will happen at runtime.
+ If the string data is known at compile time, you can use the QStringLiteral
+ macro or similarly \c{operator""_s} to create QString's payload at compile
+ time instead.
Using the QString \c{'+'} operator, it is easy to construct a
complex string from multiple substrings. You will often write code
@@ -1852,16 +2061,15 @@ inline char qToLower(char ch)
\snippet qstring/stringbuilder.cpp 0
There is nothing wrong with either of these string constructions,
- but there are a few hidden inefficiencies. Beginning with Qt 4.6,
- you can eliminate them.
+ but there are a few hidden inefficiencies:
- First, multiple uses of the \c{'+'} operator usually means
+ First, repeated use of the \c{'+'} operator may lead to
multiple memory allocations. When concatenating \e{n} substrings,
where \e{n > 2}, there can be as many as \e{n - 1} calls to the
memory allocator.
- In 4.6, an internal template class \c{QStringBuilder} has been
- added along with a few helper functions. This class is marked
+ These allocations can be optimized by an internal class
+ \c{QStringBuilder}. This class is marked
internal and does not appear in the documentation, because you
aren't meant to instantiate it in your code. Its use will be
automatic, as described below. The class is found in
@@ -1877,39 +2085,59 @@ inline char qToLower(char ch)
then called \e{once} to get the required space, and the substrings
are copied into it one by one.
- Additional efficiency is gained by inlining and reduced reference
- counting (the QString created from a \c{QStringBuilder} typically
+ Additional efficiency is gained by inlining and reducing reference
+ counting (the QString created from a \c{QStringBuilder}
has a ref count of 1, whereas QString::append() needs an extra
test).
There are two ways you can access this improved method of string
construction. The straightforward way is to include
- \c{QStringBuilder} wherever you want to use it, and use the
+ \c{QStringBuilder} wherever you want to use it and use the
\c{'%'} operator instead of \c{'+'} when concatenating strings:
\snippet qstring/stringbuilder.cpp 5
- A more global approach which is the most convenient but
- not entirely source compatible, is to this define in your
- .pro file:
+ A more global approach, which is more convenient but not entirely
+ source-compatible, is to define \c QT_USE_QSTRINGBUILDER (by adding
+ it to the compiler flags) at build time. This will make concatenating
+ strings with \c{'+'} work the same way as \c{QStringBuilder's} \c{'%'}.
+
+ \note Using automatic type deduction (for example, by using the \c
+ auto keyword) with the result of string concatenation when QStringBuilder
+ is enabled will show that the concatenation is indeed an object of a
+ QStringBuilder specialization:
- \snippet qstring/stringbuilder.cpp 3
+ \snippet qstring/stringbuilder.cpp 6
- and the \c{'+'} will automatically be performed as the
- \c{QStringBuilder} \c{'%'} everywhere.
+ This does not cause any harm, as QStringBuilder will implicitly convert to
+ QString when required. If this is undesirable, then one should specify
+ the necessary types instead of having the compiler deduce them:
+
+ \snippet qstring/stringbuilder.cpp 7
\section1 Maximum size and out-of-memory conditions
- In case memory allocation fails, QString will throw a \c std::bad_alloc
- exception. Out of memory conditions in the Qt containers are the only case
- where Qt will throw exceptions.
+ The maximum size of QString depends on the architecture. Most 64-bit
+ systems can allocate more than 2 GB of memory, with a typical limit
+ of 2^63 bytes. The actual value also depends on the overhead required for
+ managing the data block. As a result, you can expect a maximum size
+ of 2 GB minus overhead on 32-bit platforms and 2^63 bytes minus overhead
+ on 64-bit platforms. The number of elements that can be stored in a
+ QString is this maximum size divided by the size of QChar.
+
+ When memory allocation fails, QString throws a \c std::bad_alloc
+ exception if the application was compiled with exception support.
+ Out-of-memory conditions in Qt containers are the only cases where Qt
+ will throw exceptions. If exceptions are disabled, then running out of
+ memory is undefined behavior.
- Note that the operating system may impose further limits on applications
- holding a lot of allocated memory, especially large, contiguous blocks.
- Such considerations, the configuration of such behavior or any mitigation
- are outside the scope of the Qt API.
+ \note Target operating systems may impose limits on how much memory an
+ application can allocate, in total, or on the size of individual allocations.
+ This may further restrict the size of string a QString can hold.
+ Mitigating or controlling the behavior these limits cause is beyond the
+ scope of the Qt API.
- \sa fromRawData(), QChar, QLatin1String, QByteArray
+ \sa fromRawData(), QChar, QStringView, QLatin1StringView, QByteArray
*/
/*! \typedef QString::ConstIterator
@@ -1968,7 +2196,7 @@ inline char qToLower(char ch)
/*!
\typedef QString::pointer
- The QString::const_pointer typedef provides an STL-style
+ The QString::pointer typedef provides an STL-style
pointer to a QString element (QChar).
*/
@@ -1978,8 +2206,8 @@ inline char qToLower(char ch)
/*! \fn QString::iterator QString::begin()
- Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first character in
- the string.
+ Returns an \l{STL-style iterators}{STL-style iterator} pointing to the
+ first character in the string.
//! [iterator-invalidation-func-desc]
\warning The returned iterator is invalidated on detachment or when the
@@ -1997,8 +2225,8 @@ inline char qToLower(char ch)
/*! \fn QString::const_iterator QString::cbegin() const
\since 5.0
- Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first character
- in the string.
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the
+ first character in the string.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2007,8 +2235,8 @@ inline char qToLower(char ch)
/*! \fn QString::const_iterator QString::constBegin() const
- Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first character
- in the string.
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the
+ first character in the string.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2017,8 +2245,8 @@ inline char qToLower(char ch)
/*! \fn QString::iterator QString::end()
- Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary character
- after the last character in the string.
+ Returns an \l{STL-style iterators}{STL-style iterator} pointing just after
+ the last character in the string.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2033,8 +2261,8 @@ inline char qToLower(char ch)
/*! \fn QString::const_iterator QString::cend() const
\since 5.0
- Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
- character after the last character in the list.
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing just
+ after the last character in the string.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2043,8 +2271,8 @@ inline char qToLower(char ch)
/*! \fn QString::const_iterator QString::constEnd() const
- Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
- character after the last character in the list.
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing just
+ after the last character in the string.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2054,8 +2282,8 @@ inline char qToLower(char ch)
/*! \fn QString::reverse_iterator QString::rbegin()
\since 5.6
- Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- character in the string, in reverse order.
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to
+ the first character in the string, in reverse order.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2070,8 +2298,8 @@ inline char qToLower(char ch)
/*! \fn QString::const_reverse_iterator QString::crbegin() const
\since 5.6
- Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- character in the string, in reverse order.
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator
+ pointing to the first character in the string, in reverse order.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2081,8 +2309,8 @@ inline char qToLower(char ch)
/*! \fn QString::reverse_iterator QString::rend()
\since 5.6
- Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
- the last character in the string, in reverse order.
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing just
+ after the last character in the string, in reverse order.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2097,8 +2325,8 @@ inline char qToLower(char ch)
/*! \fn QString::const_reverse_iterator QString::crend() const
\since 5.6
- Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
- past the last character in the string, in reverse order.
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator
+ pointing just after the last character in the string, in reverse order.
\include qstring.cpp iterator-invalidation-func-desc
@@ -2108,9 +2336,9 @@ inline char qToLower(char ch)
/*!
\fn QString::QString()
- Constructs a null string. Null strings are also empty.
+ Constructs a null string. Null strings are also considered empty.
- \sa isEmpty()
+ \sa isEmpty(), isNull(), {Distinction Between Null and Empty Strings}
*/
/*!
@@ -2128,24 +2356,40 @@ inline char qToLower(char ch)
given const char pointer is converted to Unicode using the
fromUtf8() function.
- You can disable this constructor by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this constructor by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
- \note Defining \c QT_RESTRICTED_CAST_FROM_ASCII also disables
+ \note Defining \l QT_RESTRICTED_CAST_FROM_ASCII also disables
this constructor, but enables a \c{QString(const char (&ch)[N])}
constructor instead. Using non-literal input, or input with
embedded NUL characters, or non-7-bit characters is undefined
in this case.
- \sa fromLatin1(), fromLocal8Bit(), fromUtf8(), QT_NO_CAST_FROM_ASCII, QT_RESTRICTED_CAST_FROM_ASCII
+ \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
+*/
+
+/*! \fn QString::QString(const char8_t *str)
+
+ Constructs a string initialized with the UTF-8 string \a str. The
+ given const char8_t pointer is converted to Unicode using the
+ fromUtf8() function.
+
+ \since 6.1
+ \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
+*/
+
+/*
+//! [from-std-string]
+Returns a copy of the \a str string. The given string is assumed to be
+encoded in \1, and is converted to QString using the \2 function.
+//! [from-std-string]
*/
/*! \fn QString QString::fromStdString(const std::string &str)
- Returns a copy of the \a str string. The given string is converted
- to Unicode using the fromUtf8() function.
+ \include qstring.cpp {from-std-string} {UTF-8} {fromUtf8()}
\sa fromLatin1(), fromLocal8Bit(), fromUtf8(), QByteArray::fromStdString()
*/
@@ -2157,35 +2401,38 @@ inline char qToLower(char ch)
windows) and ucs4 if the size of wchar_t is 4 bytes (most Unix
systems).
- \sa fromUtf16(), fromLatin1(), fromLocal8Bit(), fromUtf8(), fromUcs4(), fromStdU16String(), fromStdU32String()
+ \sa fromUtf16(), fromLatin1(), fromLocal8Bit(), fromUtf8(), fromUcs4(),
+ fromStdU16String(), fromStdU32String()
*/
/*! \fn QString QString::fromWCharArray(const wchar_t *string, qsizetype size)
\since 4.2
Returns a copy of the \a string, where the encoding of \a string depends on
- the size of wchar. If wchar is 4 bytes, the \a string is interpreted as UCS-4,
- if wchar is 2 bytes it is interpreted as UTF-16.
+ the size of wchar. If wchar is 4 bytes, the \a string is interpreted as
+ UCS-4, if wchar is 2 bytes it is interpreted as UTF-16.
- If \a size is -1 (default), the \a string has to be \\0'-terminated.
+ If \a size is -1 (default), the \a string must be '\\0'-terminated.
- \sa fromUtf16(), fromLatin1(), fromLocal8Bit(), fromUtf8(), fromUcs4(), fromStdWString()
+ \sa fromUtf16(), fromLatin1(), fromLocal8Bit(), fromUtf8(), fromUcs4(),
+ fromStdWString()
*/
/*! \fn std::wstring QString::toStdWString() const
Returns a std::wstring object with the data contained in this
- QString. The std::wstring is encoded in utf16 on platforms where
- wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on platforms
+ QString. The std::wstring is encoded in UTF-16 on platforms where
+ wchar_t is 2 bytes wide (for example, Windows) and in UTF-32 on platforms
where wchar_t is 4 bytes wide (most Unix systems).
This method is mostly useful to pass a QString to a function
that accepts a std::wstring object.
- \sa utf16(), toLatin1(), toUtf8(), toLocal8Bit(), toStdU16String(), toStdU32String()
+ \sa utf16(), toLatin1(), toUtf8(), toLocal8Bit(), toStdU16String(),
+ toStdU32String()
*/
-qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out)
+qsizetype QString::toUcs4_helper(const char16_t *uc, qsizetype length, char32_t *out)
{
qsizetype count = 0;
@@ -2196,7 +2443,7 @@ qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out)
return count;
}
-/*! \fn QString::toWCharArray(wchar_t *array) const
+/*! \fn qsizetype QString::toWCharArray(wchar_t *array) const
\since 4.2
Fills the \a array with the data contained in this QString object.
@@ -2212,7 +2459,8 @@ qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out)
\note This function does not append a null character to the array.
- \sa utf16(), toUcs4(), toLatin1(), toUtf8(), toLocal8Bit(), toStdWString(), QStringView::toWCharArray()
+ \sa utf16(), toUcs4(), toLatin1(), toUtf8(), toLocal8Bit(), toStdWString(),
+ QStringView::toWCharArray()
*/
/*! \fn QString::QString(const QString &other)
@@ -2247,15 +2495,13 @@ QString::QString(const QChar *unicode, qsizetype size)
if (!unicode) {
d.clear();
} else {
- if (size < 0) {
- size = 0;
- while (!unicode[size].isNull())
- ++size;
- }
+ if (size < 0)
+ size = QtPrivate::qustrlen(reinterpret_cast<const char16_t *>(unicode));
if (!size) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- d = DataPointer(Data::allocate(size), size);
+ d = DataPointer(size, size);
+ Q_CHECK_PTR(d.data());
memcpy(d.data(), unicode, size * sizeof(QChar));
d.data()[size] = '\0';
}
@@ -2273,13 +2519,13 @@ QString::QString(qsizetype size, QChar ch)
if (size <= 0) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- d = DataPointer(Data::allocate(size), size);
+ d = DataPointer(size, size);
+ Q_CHECK_PTR(d.data());
d.data()[size] = '\0';
- char16_t *i = d.data() + size;
char16_t *b = d.data();
+ char16_t *e = d.data() + size;
const char16_t value = ch.unicode();
- while (i != b)
- *--i = value;
+ std::fill(b, e, value);
}
}
@@ -2294,14 +2540,15 @@ QString::QString(qsizetype size, Qt::Initialization)
if (size <= 0) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- d = DataPointer(Data::allocate(size), size);
+ d = DataPointer(size, size);
+ Q_CHECK_PTR(d.data());
d.data()[size] = '\0';
}
}
-/*! \fn QString::QString(QLatin1String str)
+/*! \fn QString::QString(QLatin1StringView str)
- Constructs a copy of the Latin-1 string \a str.
+ Constructs a copy of the Latin-1 string viewed by \a str.
\sa fromLatin1()
*/
@@ -2311,7 +2558,8 @@ QString::QString(qsizetype size, Qt::Initialization)
*/
QString::QString(QChar ch)
{
- d = DataPointer(Data::allocate(1), 1);
+ d = DataPointer(1, 1);
+ Q_CHECK_PTR(d.data());
d.data()[0] = ch.unicode();
d.data()[1] = '\0';
}
@@ -2319,16 +2567,18 @@ QString::QString(QChar ch)
/*! \fn QString::QString(const QByteArray &ba)
Constructs a string initialized with the byte array \a ba. The
- given byte array is converted to Unicode using fromUtf8(). Stops
- copying at the first 0 character, otherwise copies the entire byte
- array.
+ given byte array is converted to Unicode using fromUtf8().
- You can disable this constructor by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this constructor by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
- \sa fromLatin1(), fromLocal8Bit(), fromUtf8(), QT_NO_CAST_FROM_ASCII
+ \note Any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000). This behavior is
+ different from Qt 5.x.
+
+ \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
*/
/*! \fn QString::QString(const Null &)
@@ -2372,6 +2622,18 @@ QString::QString(QChar ch)
\internal
*/
+/*! \fn QString::operator std::u16string_view() const
+ \since 6.7
+
+ Converts this QString object to a \c{std::u16string_view} object.
+*/
+
+static bool needsReallocate(const QString &str, qsizetype newSize)
+{
+ const auto capacityAtEnd = str.capacity() - str.data_ptr().freeSpaceAtBegin();
+ return newSize > capacityAtEnd;
+}
+
/*!
Sets the size of the string to \a size characters.
@@ -2379,15 +2641,18 @@ QString::QString(QChar ch)
extended to make it \a size characters long with the extra
characters added to the end. The new characters are uninitialized.
- If \a size is less than the current size, characters are removed
- from the end.
+ If \a size is less than the current size, characters beyond position
+ \a size are excluded from the string.
+
+ \note While resize() will grow the capacity if needed, it never shrinks
+ capacity. To shed excess capacity, use squeeze().
Example:
\snippet qstring/main.cpp 45
If you want to append a certain number of identical characters to
- the string, use the \l {QString::}{resize(int, QChar)} overload.
+ the string, use the \l {QString::}{resize(qsizetype, QChar)} overload.
If you want to expand the string so that it reaches a certain
width and fill the new positions with a particular character, use
@@ -2397,7 +2662,7 @@ QString::QString(QChar ch)
\snippet qstring/main.cpp 47
- \sa truncate(), reserve()
+ \sa truncate(), reserve(), squeeze()
*/
void QString::resize(qsizetype size)
@@ -2405,33 +2670,50 @@ void QString::resize(qsizetype size)
if (size < 0)
size = 0;
- const auto capacityAtEnd = capacity() - d.freeSpaceAtBegin();
- if (d->needsDetach() || size > capacityAtEnd)
- reallocData(size, d->detachFlags() | Data::GrowsForward);
+ if (d->needsDetach() || needsReallocate(*this, size))
+ reallocData(size, QArrayData::Grow);
d.size = size;
if (d->allocatedCapacity())
- d.data()[size] = 0;
+ d.data()[size] = u'\0';
}
/*!
\overload
\since 5.7
- Unlike \l {QString::}{resize(int)}, this overload
+ Unlike \l {QString::}{resize(qsizetype)}, this overload
initializes the new characters to \a fillChar:
\snippet qstring/main.cpp 46
*/
-void QString::resize(qsizetype size, QChar fillChar)
+void QString::resize(qsizetype newSize, QChar fillChar)
{
- const qsizetype oldSize = length();
- resize(size);
- const qsizetype difference = length() - oldSize;
+ const qsizetype oldSize = size();
+ resize(newSize);
+ const qsizetype difference = size() - oldSize;
if (difference > 0)
std::fill_n(d.data() + oldSize, difference, fillChar.unicode());
}
+
+/*!
+ \since 6.8
+
+ Sets the size of the string to \a size characters. If the size of
+ the string grows, the new characters are uninitialized.
+
+ The behavior is identical to \c{resize(size)}.
+
+ \sa resize()
+*/
+
+void QString::resizeForOverwrite(qsizetype size)
+{
+ resize(size);
+}
+
+
/*! \fn qsizetype QString::capacity() const
Returns the maximum number of characters that can be stored in
@@ -2455,16 +2737,27 @@ void QString::resize(qsizetype size, QChar fillChar)
/*!
\fn void QString::reserve(qsizetype size)
- Attempts to allocate memory for at least \a size characters. If
- you know in advance how large the string will be, you can call
- this function, and if you resize the string often you are likely
- to get better performance. If \a size is an underestimate, the
- worst that will happen is that the QString will be a bit slower.
+ Ensures the string has space for at least \a size characters.
- The sole purpose of this function is to provide a means of fine
- tuning QString's memory usage. In general, you will rarely ever
- need to call this function. If you want to change the size of the
- string, call resize().
+ If you know in advance how large a string will be, you can call this
+ function to save repeated reallocation while building it.
+ This can improve performance when building a string incrementally.
+ A long sequence of operations that add to a string may trigger several
+ reallocations, the last of which may leave you with significantly more
+ space than you need. This is less efficient than doing a single
+ allocation of the right size at the start.
+
+ If in doubt about how much space shall be needed, it is usually better to
+ use an upper bound as \a size, or a high estimate of the most likely size,
+ if a strict upper bound would be much bigger than this. If \a size is an
+ underestimate, the string will grow as needed once the reserved size is
+ exceeded, which may lead to a larger allocation than your best
+ overestimate would have and will slow the operation that triggers it.
+
+ \warning reserve() reserves memory but does not change the size of the
+ string. Accessing data beyond the end of the string is undefined behavior.
+ If you need to access memory beyond the current end of the string,
+ use resize().
This function is useful for code that needs to build up a long
string and wants to avoid repeated reallocation. In this example,
@@ -2474,7 +2767,7 @@ void QString::resize(qsizetype size, QChar fillChar)
\snippet qstring/main.cpp 44
- \sa squeeze(), capacity()
+ \sa squeeze(), capacity(), resize()
*/
/*!
@@ -2489,42 +2782,42 @@ void QString::resize(qsizetype size, QChar fillChar)
\sa reserve(), capacity()
*/
-void QString::reallocData(qsizetype alloc, Data::ArrayOptions allocOptions)
+void QString::reallocData(qsizetype alloc, QArrayData::AllocationOption option)
{
if (!alloc) {
d = DataPointer::fromRawData(&_empty, 0);
return;
}
- // there's a case of slow reallocate path where we need to memmove the data
- // before a call to ::realloc(), meaning that there's an extra "heavy"
- // operation. just prefer ::malloc() branch in this case
- const bool slowReallocatePath = d.freeSpaceAtBegin() > 0;
+ // don't use reallocate path when reducing capacity and there's free space
+ // at the beginning: might shift data pointer outside of allocated space
+ const bool cannotUseReallocate = d.freeSpaceAtBegin() > 0;
- if (d->needsDetach() || slowReallocatePath) {
- DataPointer dd(Data::allocate(alloc, allocOptions), qMin(alloc, d.size));
+ if (d->needsDetach() || cannotUseReallocate) {
+ DataPointer dd(alloc, qMin(alloc, d.size), option);
+ Q_CHECK_PTR(dd.data());
if (dd.size > 0)
::memcpy(dd.data(), d.data(), dd.size * sizeof(QChar));
dd.data()[dd.size] = 0;
d = dd;
} else {
- d->reallocate(alloc, allocOptions);
+ d->reallocate(alloc, option);
}
}
-void QString::reallocGrowData(qsizetype alloc, Data::ArrayOptions options)
+void QString::reallocGrowData(qsizetype n)
{
- if (!alloc) // expected to always allocate
- alloc = 1;
+ if (!n) // expected to always allocate
+ n = 1;
if (d->needsDetach()) {
- const auto newSize = qMin(alloc, d.size);
- DataPointer dd(DataPointer::allocateGrow(d, alloc, newSize, options));
- dd->copyAppend(d.data(), d.data() + newSize);
+ DataPointer dd(DataPointer::allocateGrow(d, n, QArrayData::GrowsAtEnd));
+ Q_CHECK_PTR(dd.data());
+ dd->copyAppend(d.data(), d.data() + d.size);
dd.data()[dd.size] = 0;
d = dd;
} else {
- d->reallocate(alloc, options);
+ d->reallocate(d.constAllocatedCapacity() + n, QArrayData::Grow);
}
}
@@ -2555,13 +2848,13 @@ QString &QString::operator=(const QString &other) noexcept
\since 5.2
*/
-/*! \fn QString &QString::operator=(QLatin1String str)
+/*! \fn QString &QString::operator=(QLatin1StringView str)
\overload operator=()
- Assigns the Latin-1 string \a str to this string.
+ Assigns the Latin-1 string viewed by \a str to this string.
*/
-QString &QString::operator=(QLatin1String other)
+QString &QString::operator=(QLatin1StringView other)
{
const qsizetype capacityAtEnd = capacity() - d.freeSpaceAtBegin();
if (isDetached() && other.size() <= capacityAtEnd) { // assumes d->alloc == 0 -> !isDetached() (sharedNull)
@@ -2579,15 +2872,12 @@ QString &QString::operator=(QLatin1String other)
\overload operator=()
Assigns \a ba to this string. The byte array is converted to Unicode
- using the fromUtf8() function. This function stops conversion at the
- first NUL character found, or the end of the \a ba byte array.
+ using the fromUtf8() function.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*! \fn QString &QString::operator=(const char *str)
@@ -2597,12 +2887,10 @@ QString &QString::operator=(QLatin1String other)
Assigns \a str to this string. The const char pointer is converted
to Unicode using the fromUtf8() function.
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
- or \c QT_RESTRICTED_CAST_FROM_ASCII when you compile your applications.
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
+ or \l QT_RESTRICTED_CAST_FROM_ASCII when you compile your applications.
This can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII, QT_RESTRICTED_CAST_FROM_ASCII
*/
/*!
@@ -2612,16 +2900,7 @@ QString &QString::operator=(QLatin1String other)
*/
QString &QString::operator=(QChar ch)
{
- const qsizetype capacityAtEnd = capacity() - d.freeSpaceAtBegin();
- if (isDetached() && capacityAtEnd >= 1) { // assumes d->alloc == 0 -> !isDetached() (sharedNull)
- // re-use existing capacity:
- d.data()[0] = ch.unicode();
- d.data()[1] = 0;
- d.size = 1;
- } else {
- operator=(QString(ch));
- }
- return *this;
+ return assign(1, ch);
}
/*!
@@ -2634,7 +2913,11 @@ QString &QString::operator=(QChar ch)
\snippet qstring/main.cpp 26
- If the given \a position is greater than size(), this string is extended.
+//! [string-grow-at-insertion]
+ This string grows to accommodate the insertion. If \a position is beyond
+ the end of the string, space characters are appended to the string to reach
+ this \a position, followed by \a str.
+//! [string-grow-at-insertion]
\sa append(), prepend(), replace(), remove()
*/
@@ -2647,7 +2930,7 @@ QString &QString::operator=(QChar ch)
Inserts the string view \a str at the given index \a position and
returns a reference to this string.
- If the given \a position is greater than size(), this string is extended.
+ \include qstring.cpp string-grow-at-insertion
*/
@@ -2659,52 +2942,151 @@ QString &QString::operator=(QChar ch)
Inserts the C string \a str at the given index \a position and
returns a reference to this string.
- If the given \a position is greater than size(), this string is extended.
+ \include qstring.cpp string-grow-at-insertion
- This function is not available when \c QT_NO_CAST_FROM_ASCII is
+ This function is not available when \l QT_NO_CAST_FROM_ASCII is
defined.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-
/*!
\fn QString& QString::insert(qsizetype position, const QByteArray &str)
\since 5.5
\overload insert()
- Inserts the byte array \a str at the given index \a position and
- returns a reference to this string.
+ Interprets the contents of \a str as UTF-8, inserts the Unicode string
+ it encodes at the given index \a position and returns a reference to
+ this string.
- If the given \a position is greater than size(), this string is extended.
+ \include qstring.cpp string-grow-at-insertion
- This function is not available when \c QT_NO_CAST_FROM_ASCII is
+ This function is not available when \l QT_NO_CAST_FROM_ASCII is
defined.
+*/
- \sa QT_NO_CAST_FROM_ASCII
+/*! \internal
+ T is a view or a container on/of QChar, char16_t, or char
*/
+template <typename T>
+static void insert_helper(QString &str, qsizetype i, const T &toInsert)
+{
+ auto &str_d = str.data_ptr();
+ qsizetype difference = 0;
+ if (Q_UNLIKELY(i > str_d.size))
+ difference = i - str_d.size;
+ const qsizetype oldSize = str_d.size;
+ const qsizetype insert_size = toInsert.size();
+ const qsizetype newSize = str_d.size + difference + insert_size;
+ const auto side = i == 0 ? QArrayData::GrowsAtBeginning : QArrayData::GrowsAtEnd;
+
+ if (str_d.needsDetach() || needsReallocate(str, newSize)) {
+ const auto cbegin = str.cbegin();
+ const auto cend = str.cend();
+ const auto insert_start = difference == 0 ? std::next(cbegin, i) : cend;
+ QString other;
+ // Using detachAndGrow() so that prepend optimization works and QStringBuilder
+ // unittests pass
+ other.data_ptr().detachAndGrow(side, newSize, nullptr, nullptr);
+ other.append(QStringView(cbegin, insert_start));
+ other.resize(i, u' ');
+ other.append(toInsert);
+ other.append(QStringView(insert_start, cend));
+ str.swap(other);
+ return;
+ }
+
+ str_d.detachAndGrow(side, difference + insert_size, nullptr, nullptr);
+ Q_CHECK_PTR(str_d.data());
+ str.resize(newSize);
+
+ auto begin = str_d.begin();
+ auto old_end = std::next(begin, oldSize);
+ std::fill_n(old_end, difference, u' ');
+ auto insert_start = std::next(begin, i);
+ if (difference == 0)
+ std::move_backward(insert_start, old_end, str_d.end());
+ using Char = std::remove_cv_t<typename T::value_type>;
+ if constexpr(std::is_same_v<Char, QChar>)
+ std::copy_n(reinterpret_cast<const char16_t *>(toInsert.data()), insert_size, insert_start);
+ else if constexpr (std::is_same_v<Char, char16_t>)
+ std::copy_n(toInsert.data(), insert_size, insert_start);
+ else if constexpr (std::is_same_v<Char, char>)
+ qt_from_latin1(insert_start, toInsert.data(), insert_size);
+}
/*!
- \fn QString &QString::insert(qsizetype position, QLatin1String str)
+ \fn QString &QString::insert(qsizetype position, QLatin1StringView str)
\overload insert()
- Inserts the Latin-1 string \a str at the given index \a position.
+ Inserts the Latin-1 string viewed by \a str at the given index \a position.
+
+ \include qstring.cpp string-grow-at-insertion
*/
-QString &QString::insert(qsizetype i, QLatin1String str)
+QString &QString::insert(qsizetype i, QLatin1StringView str)
{
const char *s = str.latin1();
if (i < 0 || !s || !(*s))
return *this;
- qsizetype len = str.size();
- if (Q_UNLIKELY(i > size()))
- resize(i + len, QLatin1Char(' '));
- else
- resize(size() + len);
+ insert_helper(*this, i, str);
+ return *this;
+}
+
+/*!
+ \fn QString &QString::insert(qsizetype position, QUtf8StringView str)
+ \overload insert()
+ \since 6.5
+
+ Inserts the UTF-8 string view \a str at the given index \a position.
+
+ \note Inserting variable-width UTF-8-encoded string data is conceptually slower
+ than inserting fixed-width string data such as UTF-16 (QStringView) or Latin-1
+ (QLatin1StringView) and should thus be used sparingly.
+
+ \include qstring.cpp string-grow-at-insertion
+*/
+QString &QString::insert(qsizetype i, QUtf8StringView s)
+{
+ auto insert_size = s.size();
+ if (i < 0 || insert_size <= 0)
+ return *this;
+
+ qsizetype difference = 0;
+ if (Q_UNLIKELY(i > d.size))
+ difference = i - d.size;
+
+ const qsizetype newSize = d.size + difference + insert_size;
+
+ if (d.needsDetach() || needsReallocate(*this, newSize)) {
+ const auto cbegin = this->cbegin();
+ const auto insert_start = difference == 0 ? std::next(cbegin, i) : cend();
+ QString other;
+ other.reserve(newSize);
+ other.append(QStringView(cbegin, insert_start));
+ if (difference > 0)
+ other.resize(i, u' ');
+ other.append(s);
+ other.append(QStringView(insert_start, cend()));
+ swap(other);
+ return *this;
+ }
+
+ if (i >= d.size) {
+ d.detachAndGrow(QArrayData::GrowsAtEnd, difference + insert_size, nullptr, nullptr);
+ Q_CHECK_PTR(d.data());
+
+ if (difference > 0)
+ resize(i, u' ');
+ append(s);
+ } else {
+ // Optimal insertion of Utf8 data is at the end, anywhere else could
+ // potentially lead to moving characters twice if Utf8 data size
+ // (variable-width) is less than the equivalent Utf16 data size
+ QVarLengthArray<char16_t> buffer(insert_size); // ### optimize (QTBUG-108546)
+ char16_t *b = QUtf8::convertToUnicode(buffer.data(), s);
+ insert_helper(*this, i, QStringView(buffer.data(), b));
+ }
- ::memmove(d.data() + i + len, d.data() + i, (d.size - i - len) * sizeof(QChar));
- qt_from_latin1(d.data() + i, s, size_t(len));
return *this;
}
@@ -2714,33 +3096,25 @@ QString &QString::insert(qsizetype i, QLatin1String str)
Inserts the first \a size characters of the QChar array \a unicode
at the given index \a position in the string.
+
+ This string grows to accommodate the insertion. If \a position is beyond
+ the end of the string, space characters are appended to the string to reach
+ this \a position, followed by \a size characters of the QChar array
+ \a unicode.
*/
QString& QString::insert(qsizetype i, const QChar *unicode, qsizetype size)
{
if (i < 0 || size <= 0)
return *this;
- const auto s = reinterpret_cast<const char16_t *>(unicode);
- if (points_into_range(s, d.data(), d.data() + d.size))
- return insert(i, QStringView{QVarLengthArray(s, s + size)});
-
- const auto oldSize = this->size();
- const auto newSize = qMax(i, oldSize) + size;
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + qMin(i, oldSize), size);
-
- auto flags = d->detachFlags() | Data::GrowsForward;
- if (oldSize != 0 && i <= oldSize / 4)
- flags |= Data::GrowsBackwards;
-
- // ### optimize me
- if (d->needsDetach() || newSize > capacity() || shouldGrow)
- reallocGrowData(newSize, flags);
-
- if (i > oldSize) // set spaces in the uninitialized gap
- d->copyAppend(i - oldSize, u' ');
+ // In case when data points into "this"
+ if (!d->needsDetach() && QtPrivate::q_points_into_range(unicode, *this)) {
+ QVarLengthArray copy(unicode, unicode + size);
+ insert(i, copy.data(), size);
+ } else {
+ insert_helper(*this, i, QStringView(unicode, size));
+ }
- d->insert(d.begin() + i, s, s + size);
- d.data()[d.size] = '\0';
return *this;
}
@@ -2749,33 +3123,17 @@ QString& QString::insert(qsizetype i, const QChar *unicode, qsizetype size)
\overload insert()
Inserts \a ch at the given index \a position in the string.
+
+ This string grows to accommodate the insertion. If \a position is beyond
+ the end of the string, space characters are appended to the string to reach
+ this \a position, followed by \a ch.
*/
QString& QString::insert(qsizetype i, QChar ch)
{
if (i < 0)
i += d.size;
- if (i < 0)
- return *this;
-
- const auto oldSize = size();
- const auto newSize = qMax(i, oldSize) + 1;
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.begin() + qMin(i, oldSize), 1);
-
- auto flags = d->detachFlags() | Data::GrowsForward;
- if (oldSize != 0 && i <= oldSize / 4)
- flags |= Data::GrowsBackwards;
-
- // ### optimize me
- if (d->needsDetach() || newSize > capacity() || shouldGrow)
- reallocGrowData(newSize, flags);
-
- if (i > oldSize) // set spaces in the uninitialized gap
- d->copyAppend(i - oldSize, u' ');
-
- d->insert(d.begin() + i, 1, ch.unicode());
- d.data()[d.size] = '\0';
- return *this;
+ return insert(i, &ch, 1);
}
/*!
@@ -2800,20 +3158,26 @@ QString &QString::append(const QString &str)
{
if (!str.isNull()) {
if (isNull()) {
- operator=(str);
- } else {
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.end(), str.d.size);
- if (d->needsDetach() || size() + str.size() > capacity() || shouldGrow)
- reallocGrowData(size() + str.size(),
- d->detachFlags() | Data::GrowsForward);
- d->copyAppend(str.d.data(), str.d.data() + str.d.size);
- d.data()[d.size] = '\0';
+ if (Q_UNLIKELY(!str.d.isMutable()))
+ assign(str); // fromRawData, so we do a deep copy
+ else
+ operator=(str);
+ } else if (str.size()) {
+ append(str.constData(), str.size());
}
}
return *this;
}
/*!
+ \fn QString &QString::append(QStringView v)
+ \overload append()
+ \since 6.0
+
+ Appends the given string view \a v to this string and returns the result.
+*/
+
+/*!
\overload append()
\since 5.0
@@ -2822,14 +3186,11 @@ QString &QString::append(const QString &str)
QString &QString::append(const QChar *str, qsizetype len)
{
if (str && len > 0) {
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.end(), len);
- if (d->needsDetach() || size() + len > capacity() || shouldGrow)
- reallocGrowData(size() + len, d->detachFlags() | Data::GrowsForward);
static_assert(sizeof(QChar) == sizeof(char16_t), "Unexpected difference in sizes");
// the following should be safe as QChar uses char16_t as underlying data
const char16_t *char16String = reinterpret_cast<const char16_t *>(str);
- d->copyAppend(char16String, char16String + len);
- d.data()[d.size] = '\0';
+ d->growAppend(char16String, char16String + len);
+ d.data()[d.size] = u'\0';
}
return *this;
}
@@ -2837,26 +3198,23 @@ QString &QString::append(const QChar *str, qsizetype len)
/*!
\overload append()
- Appends the Latin-1 string \a str to this string.
+ Appends the Latin-1 string viewed by \a str to this string.
*/
-QString &QString::append(QLatin1String str)
+QString &QString::append(QLatin1StringView str)
{
- const char *s = str.latin1();
- if (s) {
- qsizetype len = str.size();
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.end(), len);
- if (d->needsDetach() || size() + len > capacity() || shouldGrow)
- reallocGrowData(size() + len, d->detachFlags() | Data::GrowsForward);
-
- if (d.freeSpaceAtBegin() == 0) { // fast path
- char16_t *i = d.data() + d.size;
- qt_from_latin1(i, s, size_t(len));
- d.size += len;
- } else { // slow path
- d->copyAppend(s, s + len);
- }
- d.data()[d.size] = '\0';
- }
+ append_helper(*this, str);
+ return *this;
+}
+
+/*!
+ \overload append()
+ \since 6.5
+
+ Appends the UTF-8 string view \a str to this string.
+*/
+QString &QString::append(QUtf8StringView str)
+{
+ append_helper(*this, str);
return *this;
}
@@ -2867,12 +3225,10 @@ QString &QString::append(QLatin1String str)
Appends the byte array \a ba to this string. The given byte array
is converted to Unicode using the fromUtf8() function.
- You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this function by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*! \fn QString &QString::append(const char *str)
@@ -2882,12 +3238,10 @@ QString &QString::append(QLatin1String str)
Appends the string \a str to this string. The given const char
pointer is converted to Unicode using the fromUtf8() function.
- You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this function by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*!
@@ -2897,9 +3251,7 @@ QString &QString::append(QLatin1String str)
*/
QString &QString::append(QChar ch)
{
- const bool shouldGrow = d->shouldGrowBeforeInsert(d.end(), 1);
- if (d->needsDetach() || size() + 1 > capacity() || shouldGrow)
- reallocGrowData(d.size + 1u, d->detachFlags() | Data::GrowsForward);
+ d.detachAndGrow(QArrayData::GrowsAtEnd, 1, nullptr, nullptr);
d->copyAppend(1, ch.unicode());
d.data()[d.size] = '\0';
return *this;
@@ -2910,6 +3262,10 @@ QString &QString::append(QChar ch)
Prepends the string \a str to the beginning of this string and
returns a reference to this string.
+ This operation is typically very fast (\l{constant time}), because
+ QString preallocates extra space at the beginning of the string data,
+ so it can grow without reallocating the entire string each time.
+
Example:
\snippet qstring/main.cpp 36
@@ -2917,11 +3273,18 @@ QString &QString::append(QChar ch)
\sa append(), insert()
*/
-/*! \fn QString &QString::prepend(QLatin1String str)
+/*! \fn QString &QString::prepend(QLatin1StringView str)
+
+ \overload prepend()
+
+ Prepends the Latin-1 string viewed by \a str to this string.
+*/
+/*! \fn QString &QString::prepend(QUtf8StringView str)
+ \since 6.5
\overload prepend()
- Prepends the Latin-1 string \a str to this string.
+ Prepends the UTF-8 string view \a str to this string.
*/
/*! \fn QString &QString::prepend(const QChar *str, qsizetype len)
@@ -2947,12 +3310,10 @@ QString &QString::append(QChar ch)
Prepends the byte array \a ba to this string. The byte array is
converted to Unicode using the fromUtf8() function.
- You can disable this function by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this function by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*! \fn QString &QString::prepend(const char *str)
@@ -2962,12 +3323,10 @@ QString &QString::append(QChar ch)
Prepends the string \a str to this string. The const char pointer
is converted to Unicode using the fromUtf8() function.
- You can disable this function by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this function by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*! \fn QString &QString::prepend(QChar ch)
@@ -2978,6 +3337,111 @@ QString &QString::append(QChar ch)
*/
/*!
+ \fn QString &QString::assign(QAnyStringView v)
+ \since 6.6
+
+ Replaces the contents of this string with a copy of \a v and returns a
+ reference to this string.
+
+ The size of this string will be equal to the size of \a v, converted to
+ UTF-16 as if by \c{v.toString()}. Unlike QAnyStringView::toString(), however,
+ this function only allocates memory if the estimated size exceeds the capacity
+ of this string or this string is shared.
+
+ \sa QAnyStringView::toString()
+*/
+
+/*!
+ \fn QString &QString::assign(qsizetype n, QChar c)
+ \since 6.6
+
+ Replaces the contents of this string with \a n copies of \a c and
+ returns a reference to this string.
+
+ The size of this string will be equal to \a n, which has to be non-negative.
+
+ This function will only allocate memory if \a n exceeds the capacity of this
+ string or this string is shared.
+
+ \sa fill()
+*/
+
+/*!
+ \fn template <typename InputIterator, QString::if_compatible_iterator<InputIterator>> QString &QString::assign(InputIterator first, InputIterator last)
+ \since 6.6
+
+ Replaces the contents of this string with a copy of the elements in the
+ iterator range [\a first, \a last) and returns a reference to this string.
+
+ The size of this string will be equal to the decoded length of the elements
+ in the range [\a first, \a last), which need not be the same as the length of
+ the range itself, because this function transparently recodes the input
+ character set to UTF-16.
+
+ This function will only allocate memory if the number of elements in the
+ range, or, for non-UTF-16-encoded input, the maximum possible size of the
+ resulting string, exceeds the capacity of this string, or if this string is
+ shared.
+
+ \note This function overload only participates in overload resolution if
+ \c InputIterator meets the requirements of a
+ \l {https://en.cppreference.com/w/cpp/named_req/InputIterator} {LegacyInputIterator}
+ and the \c{value_type} of \c InputIterator is one of the following character types:
+ \list
+ \li QChar
+ \li QLatin1Char
+ \li \c {char}
+ \li \c {unsigned char}
+ \li \c {signed char}
+ \li \c {char8_t}
+ \li \c char16_t
+ \li (on platforms, such as Windows, where it is a 16-bit type) \c wchar_t
+ \li \c char32_t
+ \endlist
+
+ \note The behavior is undefined if either argument is an iterator into *this or
+ [\a first, \a last) is not a valid range.
+*/
+
+QString &QString::assign(QAnyStringView s)
+{
+ if (s.size() <= capacity() && isDetached()) {
+ const auto offset = d.freeSpaceAtBegin();
+ if (offset)
+ d.setBegin(d.begin() - offset);
+ resize(0);
+ s.visit([this](auto input) {
+ this->append(input);
+ });
+ } else {
+ *this = s.toString();
+ }
+ return *this;
+}
+
+#ifndef QT_BOOTSTRAPPED
+QString &QString::assign_helper(const char32_t *data, qsizetype len)
+{
+ // worst case: each char32_t requires a surrogate pair, so
+ const auto requiredCapacity = len * 2;
+ if (requiredCapacity <= capacity() && isDetached()) {
+ const auto offset = d.freeSpaceAtBegin();
+ if (offset)
+ d.setBegin(d.begin() - offset);
+ auto begin = reinterpret_cast<QChar *>(d.begin());
+ auto ba = QByteArrayView(reinterpret_cast<const std::byte*>(data), len * sizeof(char32_t));
+ QStringConverter::State state;
+ const auto end = QUtf32::convertToUnicode(begin, ba, &state, DetectEndianness);
+ d.size = end - begin;
+ d.data()[d.size] = u'\0';
+ } else {
+ *this = QString::fromUcs4(data, len);
+ }
+ return *this;
+}
+#endif
+
+/*!
\fn QString &QString::remove(qsizetype position, qsizetype n)
Removes \a n characters from the string, starting at the given \a
@@ -2987,22 +3451,42 @@ QString &QString::append(QChar ch)
position + \a n is beyond the end of the string, the string is
truncated at the specified \a position.
+ If \a n is <= 0 nothing is changed.
+
\snippet qstring/main.cpp 37
+//! [shrinking-erase]
+ Element removal will preserve the string's capacity and not reduce the
+ amount of allocated memory. To shed extra capacity and free as much memory
+ as possible, call squeeze() after the last change to the string's size.
+//! [shrinking-erase]
+
\sa insert(), replace()
*/
QString &QString::remove(qsizetype pos, qsizetype len)
{
if (pos < 0) // count from end of string
pos += size();
- if (size_t(pos) >= size_t(size())) {
- // range problems
- } else if (len >= size() - pos) {
- resize(pos); // truncate
- } else if (len > 0) {
- detach();
- d->erase(d.begin() + pos, d.begin() + pos + len);
+
+ if (size_t(pos) >= size_t(size()) || len <= 0)
+ return *this;
+
+ len = std::min(len, size() - pos);
+
+ if (!d->isShared()) {
+ d->erase(d.begin() + pos, len);
d.data()[d.size] = u'\0';
+ } else {
+ // TODO: either reserve "size()", which is bigger than needed, or
+ // modify the shrinking-erase docs of this method (since the size
+ // of "copy" won't have any extra capacity any more)
+ const qsizetype sz = size() - len;
+ QString copy{sz, Qt::Uninitialized};
+ auto begin = d.begin();
+ auto toRemove_start = d.begin() + pos;
+ copy.d->copyRanges({{begin, toRemove_start},
+ {toRemove_start + len, d.end()}});
+ swap(copy);
}
return *this;
}
@@ -3019,38 +3503,51 @@ static void removeStringImpl(QString &s, const T &needle, Qt::CaseSensitivity cs
if (i < 0)
return;
- const auto beg = s.begin(); // detaches
- auto dst = beg + i;
- auto src = beg + i + needleSize;
- const auto end = s.end();
- // loop invariant: [beg, dst[ is partial result
- // [src, end[ still to be checked for needles
- while (src < end) {
- const auto i = s.indexOf(needle, src - beg, cs);
- const auto hit = i == -1 ? end : beg + i;
- const auto skipped = hit - src;
- memmove(dst, src, skipped * sizeof(QChar));
- dst += skipped;
- src = hit + needleSize;
+ QString::DataPointer &dptr = s.data_ptr();
+ auto begin = dptr.begin();
+ auto end = dptr.end();
+
+ auto copyFunc = [&](auto &dst) {
+ auto src = begin + i + needleSize;
+ while (src < end) {
+ i = s.indexOf(needle, std::distance(begin, src), cs);
+ auto hit = i == -1 ? end : begin + i;
+ dst = std::copy(src, hit, dst);
+ src = hit + needleSize;
+ }
+ return dst;
+ };
+
+ if (!dptr->needsDetach()) {
+ auto dst = begin + i;
+ dst = copyFunc(dst);
+ s.truncate(std::distance(begin, dst));
+ } else {
+ QString copy{s.size(), Qt::Uninitialized};
+ auto copy_begin = copy.begin();
+ auto dst = std::copy(begin, begin + i, copy_begin); // Chunk before the first hit
+ dst = copyFunc(dst);
+ copy.resize(std::distance(copy_begin, dst));
+ s.swap(copy);
}
- s.truncate(dst - beg);
}
/*!
Removes every occurrence of the given \a str string in this
string, and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
This is the same as \c replace(str, "", cs).
+ \include qstring.cpp shrinking-erase
+
\sa replace()
*/
QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
{
const auto s = str.d.data();
- if (points_into_range(s, d.data(), d.data() + d.size))
+ if (QtPrivate::q_points_into_range(s, d))
removeStringImpl(*this, QStringView{QVarLengthArray(s, s + str.size())}, cs);
else
removeStringImpl(*this, qToStringViewIgnoringNull(str), cs);
@@ -3061,28 +3558,61 @@ QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
\since 5.11
\overload
- Removes every occurrence of the given \a str string in this
- string, and returns a reference to this string.
+ Removes every occurrence of the given Latin-1 string viewed by \a str
+ from this string, and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
This is the same as \c replace(str, "", cs).
+ \include qstring.cpp shrinking-erase
+
\sa replace()
*/
-QString &QString::remove(QLatin1String str, Qt::CaseSensitivity cs)
+QString &QString::remove(QLatin1StringView str, Qt::CaseSensitivity cs)
{
removeStringImpl(*this, str, cs);
return *this;
}
/*!
+ \fn QString &QString::removeAt(qsizetype pos)
+
+ \since 6.5
+
+ Removes the character at index \a pos. If \a pos is out of bounds
+ (i.e. \a pos >= size()), this function does nothing.
+
+ \sa remove()
+*/
+
+/*!
+ \fn QString &QString::removeFirst()
+
+ \since 6.5
+
+ Removes the first character in this string. If the string is empty,
+ this function does nothing.
+
+ \sa remove()
+*/
+
+/*!
+ \fn QString &QString::removeLast()
+
+ \since 6.5
+
+ Removes the last character in this string. If the string is empty,
+ this function does nothing.
+
+ \sa remove()
+*/
+
+/*!
Removes every occurrence of the character \a ch in this string, and
returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
@@ -3090,24 +3620,41 @@ QString &QString::remove(QLatin1String str, Qt::CaseSensitivity cs)
This is the same as \c replace(ch, "", cs).
+ \include qstring.cpp shrinking-erase
+
\sa replace()
*/
QString &QString::remove(QChar ch, Qt::CaseSensitivity cs)
{
const qsizetype idx = indexOf(ch, 0, cs);
- if (idx != -1) {
- const auto first = begin(); // implicit detach()
- auto last = end();
- if (cs == Qt::CaseSensitive) {
- last = std::remove(first + idx, last, ch);
- } else {
- const QChar c = ch.toCaseFolded();
- auto caseInsensEqual = [c](QChar x) {
- return c == x.toCaseFolded();
- };
- last = std::remove_if(first + idx, last, caseInsensEqual);
- }
- resize(last - first);
+ if (idx == -1)
+ return *this;
+
+ const bool isCase = cs == Qt::CaseSensitive;
+ ch = isCase ? ch : ch.toCaseFolded();
+ auto match = [ch, isCase](QChar x) {
+ return ch == (isCase ? x : x.toCaseFolded());
+ };
+
+
+ auto begin = d.begin();
+ auto first_match = begin + idx;
+ auto end = d.end();
+ if (!d->isShared()) {
+ auto it = std::remove_if(first_match, end, match);
+ d->erase(it, std::distance(it, end));
+ d.data()[d.size] = u'\0';
+ } else {
+ // Instead of detaching, create a new string and copy all characters except for
+ // the ones we're removing
+ // TODO: size() is more than the needed since "copy" would be shorter
+ QString copy{size(), Qt::Uninitialized};
+ auto dst = copy.d.begin();
+ auto it = std::copy(begin, first_match, dst); // Chunk before idx
+ it = std::remove_copy_if(first_match + 1, end, it, match);
+ copy.d.size = std::distance(dst, it);
+ copy.d.data()[copy.d.size] = u'\0';
+ *this = std::move(copy);
}
return *this;
}
@@ -3121,10 +3668,113 @@ QString &QString::remove(QChar ch, Qt::CaseSensitivity cs)
\snippet qstring/main.cpp 96
+ \include qstring.cpp shrinking-erase
+
\sa indexOf(), lastIndexOf(), replace()
*/
/*!
+ \fn template <typename Predicate> QString &QString::removeIf(Predicate pred)
+ \since 6.1
+
+ Removes all elements for which the predicate \a pred returns true
+ from the string. Returns a reference to the string.
+
+ \sa remove()
+*/
+
+
+/*! \internal
+ Instead of detaching, or reallocating if "before" is shorter than "after"
+ and there isn't enough capacity, create a new string, copy characters to it
+ as needed, then swap it with "str".
+*/
+static void replace_with_copy(QString &str, QSpan<size_t> indices, qsizetype blen,
+ QStringView after)
+{
+ const qsizetype alen = after.size();
+ const char16_t *after_b = after.utf16();
+
+ const QString::DataPointer &str_d = str.data_ptr();
+ auto src_start = str_d.begin();
+ const qsizetype newSize = str_d.size + indices.size() * (alen - blen);
+ QString copy{ newSize, Qt::Uninitialized };
+ QString::DataPointer &copy_d = copy.data_ptr();
+ auto dst = copy_d.begin();
+ for (size_t index : indices) {
+ auto hit = str_d.begin() + index;
+ dst = std::copy(src_start, hit, dst);
+ dst = std::copy_n(after_b, alen, dst);
+ src_start = hit + blen;
+ }
+ dst = std::copy(src_start, str_d.end(), dst);
+ str.swap(copy);
+}
+
+// No detaching or reallocation is needed
+static void replace_in_place(QString &str, QSpan<size_t> indices,
+ qsizetype blen, QStringView after)
+{
+ const qsizetype alen = after.size();
+ const char16_t *after_b = after.utf16();
+ const char16_t *after_e = after.utf16() + after.size();
+
+ if (blen == alen) { // Replace in place
+ for (size_t index : indices)
+ std::copy_n(after_b, alen, str.data_ptr().begin() + index);
+ } else if (blen > alen) { // Replace from front
+ char16_t *begin = str.data_ptr().begin();
+ char16_t *hit = begin + indices.front();
+ char16_t *to = hit;
+ to = std::copy_n(after_b, alen, to);
+ char16_t *movestart = hit + blen;
+ for (size_t index : indices.sliced(1)) {
+ hit = begin + index;
+ to = std::move(movestart, hit, to);
+ to = std::copy_n(after_b, alen, to);
+ movestart = hit + blen;
+ }
+ to = std::move(movestart, str.data_ptr().end(), to);
+ str.resize(std::distance(begin, to));
+ } else { // blen < alen, Replace from back
+ const qsizetype oldSize = str.data_ptr().size;
+ const qsizetype adjust = indices.size() * (alen - blen);
+ const qsizetype newSize = oldSize + adjust;
+
+ str.resize(newSize);
+ char16_t *begin = str.data_ptr().begin();
+ char16_t *moveend = begin + oldSize;
+ char16_t *to = str.data_ptr().end();
+
+ for (auto it = indices.rbegin(), end = indices.rend(); it != end; ++it) {
+ char16_t *hit = begin + *it;
+ char16_t *movestart = hit + blen;
+ to = std::move_backward(movestart, moveend, to);
+ to = std::copy_backward(after_b, after_e, to);
+ moveend = hit;
+ }
+ }
+}
+
+static void replace_helper(QString &str, QSpan<size_t> indices, qsizetype blen, QStringView after)
+{
+ const qsizetype oldSize = str.data_ptr().size;
+ const qsizetype adjust = indices.size() * (after.size() - blen);
+ const qsizetype newSize = oldSize + adjust;
+ if (str.data_ptr().needsDetach() || needsReallocate(str, newSize)) {
+ replace_with_copy(str, indices, blen, after);
+ return;
+ }
+
+ if (QtPrivate::q_points_into_range(after.begin(), str))
+ // Copy after if it lies inside our own d.b area (which we could
+ // possibly invalidate via a realloc or modify by replacement)
+ replace_in_place(str, indices, blen, QVarLengthArray(after.begin(), after.end()));
+ else
+ replace_in_place(str, indices, blen, after);
+}
+
+/*!
\fn QString &QString::replace(qsizetype position, qsizetype n, const QString &after)
Replaces \a n characters beginning at index \a position with
@@ -3142,17 +3792,17 @@ QString &QString::remove(QChar ch, Qt::CaseSensitivity cs)
*/
QString &QString::replace(qsizetype pos, qsizetype len, const QString &after)
{
- return replace(pos, len, after.constData(), after.length());
+ return replace(pos, len, after.constData(), after.size());
}
/*!
- \fn QString &QString::replace(qsizetype position, qsizetype n, const QChar *unicode, qsizetype size)
+ \fn QString &QString::replace(qsizetype position, qsizetype n, const QChar *after, qsizetype alen)
\overload replace()
Replaces \a n characters beginning at index \a position with the
- first \a size characters of the QChar array \a unicode and returns a
+ first \a alen characters of the QChar array \a after and returns a
reference to this string.
*/
-QString &QString::replace(qsizetype pos, qsizetype len, const QChar *unicode, qsizetype size)
+QString &QString::replace(qsizetype pos, qsizetype len, const QChar *after, qsizetype alen)
{
if (size_t(pos) > size_t(this->size()))
return *this;
@@ -3160,7 +3810,7 @@ QString &QString::replace(qsizetype pos, qsizetype len, const QChar *unicode, qs
len = this->size() - pos;
size_t index = pos;
- replace_helper(&index, 1, len, unicode, size);
+ replace_helper(*this, QSpan(&index, 1), len, QStringView{after, alen});
return *this;
}
@@ -3181,8 +3831,7 @@ QString &QString::replace(qsizetype pos, qsizetype len, QChar after)
Replaces every occurrence of the string \a before with the string \a
after and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
@@ -3199,90 +3848,6 @@ QString &QString::replace(const QString &before, const QString &after, Qt::CaseS
return replace(before.constData(), before.size(), after.constData(), after.size(), cs);
}
-namespace { // helpers for replace and its helper:
-QChar *textCopy(const QChar *start, qsizetype len)
-{
- const size_t size = len * sizeof(QChar);
- QChar *const copy = static_cast<QChar *>(::malloc(size));
- Q_CHECK_PTR(copy);
- ::memcpy(copy, start, size);
- return copy;
-}
-
-static bool pointsIntoRange(const QChar *ptr, const char16_t *base, qsizetype len)
-{
- const QChar *const start = reinterpret_cast<const QChar *>(base);
- const std::less<const QChar *> less;
- return !less(ptr, start) && less(ptr, start + len);
-}
-} // end namespace
-
-/*!
- \internal
- */
-void QString::replace_helper(size_t *indices, qsizetype nIndices, qsizetype blen, const QChar *after, qsizetype alen)
-{
- // Copy after if it lies inside our own d.b area (which we could
- // possibly invalidate via a realloc or modify by replacement).
- QChar *afterBuffer = nullptr;
- if (pointsIntoRange(after, d.data(), d.size)) // Use copy in place of vulnerable original:
- after = afterBuffer = textCopy(after, alen);
-
- QT_TRY {
- if (blen == alen) {
- // replace in place
- detach();
- for (qsizetype i = 0; i < nIndices; ++i)
- memcpy(d.data() + indices[i], after, alen * sizeof(QChar));
- } else if (alen < blen) {
- // replace from front
- detach();
- size_t to = indices[0];
- if (alen)
- memcpy(d.data()+to, after, alen*sizeof(QChar));
- to += alen;
- size_t movestart = indices[0] + blen;
- for (qsizetype i = 1; i < nIndices; ++i) {
- qsizetype msize = indices[i] - movestart;
- if (msize > 0) {
- memmove(d.data() + to, d.data() + movestart, msize * sizeof(QChar));
- to += msize;
- }
- if (alen) {
- memcpy(d.data() + to, after, alen * sizeof(QChar));
- to += alen;
- }
- movestart = indices[i] + blen;
- }
- qsizetype msize = d.size - movestart;
- if (msize > 0)
- memmove(d.data() + to, d.data() + movestart, msize * sizeof(QChar));
- resize(d.size - nIndices*(blen-alen));
- } else {
- // replace from back
- qsizetype adjust = nIndices*(alen-blen);
- qsizetype newLen = d.size + adjust;
- qsizetype moveend = d.size;
- resize(newLen);
-
- while (nIndices) {
- --nIndices;
- qsizetype movestart = indices[nIndices] + blen;
- qsizetype insertstart = indices[nIndices] + nIndices*(alen-blen);
- qsizetype moveto = insertstart + alen;
- memmove(d.data() + moveto, d.data() + movestart,
- (moveend - movestart)*sizeof(QChar));
- memcpy(d.data() + insertstart, after, alen * sizeof(QChar));
- moveend = movestart-blen;
- }
- }
- } QT_CATCH(const std::bad_alloc &) {
- ::free(afterBuffer);
- QT_RETHROW;
- }
- ::free(afterBuffer);
-}
-
/*!
\since 4.5
\overload replace()
@@ -3291,8 +3856,7 @@ void QString::replace_helper(size_t *indices, qsizetype nIndices, qsizetype blen
characters of \a before with the first \a alen characters of \a
after and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
*/
QString &QString::replace(const QChar *before, qsizetype blen,
const QChar *after, qsizetype alen,
@@ -3307,51 +3871,25 @@ QString &QString::replace(const QChar *before, qsizetype blen,
}
if (alen == 0 && blen == 0)
return *this;
+ if (alen == 1 && blen == 1)
+ return replace(*before, *after, cs);
QStringMatcher matcher(before, blen, cs);
- QChar *beforeBuffer = nullptr, *afterBuffer = nullptr;
qsizetype index = 0;
- while (1) {
- size_t indices[1024];
- size_t pos = 0;
- while (pos < 1024) {
- index = matcher.indexIn(*this, index);
- if (index == -1)
- break;
- indices[pos++] = index;
- if (blen) // Step over before:
- index += blen;
- else // Only count one instance of empty between any two characters:
- index++;
- }
- if (!pos) // Nothing to replace
- break;
-
- if (Q_UNLIKELY(index != -1)) {
- /*
- We're about to change data, that before and after might point
- into, and we'll need that data for our next batch of indices.
- */
- if (!afterBuffer && pointsIntoRange(after, d.data(), d.size))
- after = afterBuffer = textCopy(after, alen);
-
- if (!beforeBuffer && pointsIntoRange(before, d.data(), d.size)) {
- beforeBuffer = textCopy(before, blen);
- matcher = QStringMatcher(beforeBuffer, blen, cs);
- }
- }
-
- replace_helper(indices, pos, blen, after, alen);
- if (Q_LIKELY(index == -1)) // Nothing left to replace
- break;
- // The call to replace_helper just moved what index points at:
- index += pos*(alen-blen);
+ QVarLengthArray<size_t> indices;
+ while ((index = matcher.indexIn(*this, index)) != -1) {
+ indices.push_back(index);
+ if (blen) // Step over before:
+ index += blen;
+ else // Only count one instance of empty between any two characters:
+ index++;
}
- ::free(afterBuffer);
- ::free(beforeBuffer);
+ if (indices.isEmpty())
+ return *this;
+ replace_helper(*this, indices, blen, QStringView{after, alen});
return *this;
}
@@ -3360,8 +3898,7 @@ QString &QString::replace(const QChar *before, qsizetype blen,
Replaces every occurrence of the character \a ch in the string with
\a after and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
*/
QString& QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs)
{
@@ -3374,35 +3911,27 @@ QString& QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs
if (size() == 0)
return *this;
- char16_t cc = (cs == Qt::CaseSensitive ? ch.unicode() : ch.toCaseFolded().unicode());
+ const char16_t cc = (cs == Qt::CaseSensitive ? ch.unicode() : ch.toCaseFolded().unicode());
- qsizetype index = 0;
- while (1) {
- size_t indices[1024];
- size_t pos = 0;
- if (cs == Qt::CaseSensitive) {
- while (pos < 1024 && index < size()) {
- if (d.data()[index] == cc)
- indices[pos++] = index;
- index++;
- }
- } else {
- while (pos < 1024 && index < size()) {
- if (QChar::toCaseFolded(d.data()[index]) == cc)
- indices[pos++] = index;
- index++;
- }
+ QVarLengthArray<size_t> indices;
+ if (cs == Qt::CaseSensitive) {
+ const char16_t *begin = d.begin();
+ const char16_t *end = d.end();
+ QStringView view(begin, end);
+ const char16_t *hit = nullptr;
+ while ((hit = QtPrivate::qustrchr(view, cc)) != end) {
+ indices.push_back(std::distance(begin, hit));
+ view = QStringView(std::next(hit), end);
}
- if (!pos) // Nothing to replace
- break;
-
- replace_helper(indices, pos, 1, after.constData(), after.size());
-
- if (Q_LIKELY(index == -1)) // Nothing left to replace
- break;
- // The call to replace_helper just moved what index points at:
- index += pos*(after.size() - 1);
+ } else {
+ for (qsizetype i = 0; i < d.size; ++i)
+ if (QChar::toCaseFolded(d.data()[i]) == cc)
+ indices.push_back(i);
}
+ if (indices.isEmpty())
+ return *this;
+
+ replace_helper(*this, indices, 1, after);
return *this;
}
@@ -3411,34 +3940,43 @@ QString& QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs
Replaces every occurrence of the character \a before with the
character \a after and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
*/
QString& QString::replace(QChar before, QChar after, Qt::CaseSensitivity cs)
{
- if (d.size) {
- const qsizetype idx = indexOf(before, 0, cs);
- if (idx != -1) {
- detach();
- const char16_t a = after.unicode();
- char16_t *i = d.data();
- char16_t *const e = i + d.size;
- i += idx;
- *i = a;
- if (cs == Qt::CaseSensitive) {
- const char16_t b = before.unicode();
- while (++i != e) {
- if (*i == b)
- *i = a;
- }
- } else {
- const char16_t b = foldCase(before.unicode());
- while (++i != e) {
- if (foldCase(*i) == b)
- *i = a;
- }
- }
+ const qsizetype idx = indexOf(before, 0, cs);
+ if (idx == -1)
+ return *this;
+
+ const char16_t achar = after.unicode();
+ char16_t bchar = before.unicode();
+
+ auto matchesCIS = [](char16_t beforeChar) {
+ return [beforeChar](char16_t ch) { return foldAndCompare(ch, beforeChar); };
+ };
+
+ auto hit = d.begin() + idx;
+ if (!d.needsDetach()) {
+ *hit++ = achar;
+ if (cs == Qt::CaseSensitive) {
+ std::replace(hit, d.end(), bchar, achar);
+ } else {
+ bchar = foldCase(bchar);
+ std::replace_if(hit, d.end(), matchesCIS(bchar), achar);
+ }
+ } else {
+ QString other{ d.size, Qt::Uninitialized };
+ auto dest = std::copy(d.begin(), hit, other.d.begin());
+ *dest++ = achar;
+ ++hit;
+ if (cs == Qt::CaseSensitive) {
+ std::replace_copy(hit, d.end(), dest, bchar, achar);
+ } else {
+ bchar = foldCase(bchar);
+ std::replace_copy_if(hit, d.end(), dest, matchesCIS(bchar), achar);
}
+
+ swap(other);
}
return *this;
}
@@ -3447,22 +3985,23 @@ QString& QString::replace(QChar before, QChar after, Qt::CaseSensitivity cs)
\since 4.5
\overload replace()
- Replaces every occurrence of the string \a before with the string \a
- after and returns a reference to this string.
+ Replaces every occurrence in this string of the Latin-1 string viewed
+ by \a before with the Latin-1 string viewed by \a after, and returns a
+ reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\note The text is not rescanned after a replacement.
*/
-QString &QString::replace(QLatin1String before, QLatin1String after, Qt::CaseSensitivity cs)
+QString &QString::replace(QLatin1StringView before, QLatin1StringView after, Qt::CaseSensitivity cs)
{
- qsizetype alen = after.size();
- qsizetype blen = before.size();
- QVarLengthArray<char16_t> a(alen);
- QVarLengthArray<char16_t> b(blen);
- qt_from_latin1(a.data(), after.latin1(), alen);
- qt_from_latin1(b.data(), before.latin1(), blen);
+ const qsizetype alen = after.size();
+ const qsizetype blen = before.size();
+ if (blen == 1 && alen == 1)
+ return replace(before.front(), after.front(), cs);
+
+ QVarLengthArray<char16_t> a = qt_from_latin1_to_qvla(after);
+ QVarLengthArray<char16_t> b = qt_from_latin1_to_qvla(before);
return replace((const QChar *)b.data(), blen, (const QChar *)a.data(), alen, cs);
}
@@ -3470,19 +4009,21 @@ QString &QString::replace(QLatin1String before, QLatin1String after, Qt::CaseSen
\since 4.5
\overload replace()
- Replaces every occurrence of the string \a before with the string \a
- after and returns a reference to this string.
+ Replaces every occurrence in this string of the Latin-1 string viewed
+ by \a before with the string \a after, and returns a reference to this
+ string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\note The text is not rescanned after a replacement.
*/
-QString &QString::replace(QLatin1String before, const QString &after, Qt::CaseSensitivity cs)
+QString &QString::replace(QLatin1StringView before, const QString &after, Qt::CaseSensitivity cs)
{
- qsizetype blen = before.size();
- QVarLengthArray<char16_t> b(blen);
- qt_from_latin1(b.data(), before.latin1(), blen);
+ const qsizetype blen = before.size();
+ if (blen == 1 && after.size() == 1)
+ return replace(before.front(), after.front(), cs);
+
+ QVarLengthArray<char16_t> b = qt_from_latin1_to_qvla(before);
return replace((const QChar *)b.data(), blen, after.constData(), after.d.size, cs);
}
@@ -3493,16 +4034,17 @@ QString &QString::replace(QLatin1String before, const QString &after, Qt::CaseSe
Replaces every occurrence of the string \a before with the string \a
after and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\note The text is not rescanned after a replacement.
*/
-QString &QString::replace(const QString &before, QLatin1String after, Qt::CaseSensitivity cs)
+QString &QString::replace(const QString &before, QLatin1StringView after, Qt::CaseSensitivity cs)
{
- qsizetype alen = after.size();
- QVarLengthArray<char16_t> a(alen);
- qt_from_latin1(a.data(), after.latin1(), alen);
+ const qsizetype alen = after.size();
+ if (before.size() == 1 && alen == 1)
+ return replace(before.front(), after.front(), cs);
+
+ QVarLengthArray<char16_t> a = qt_from_latin1_to_qvla(after);
return replace(before.constData(), before.d.size, (const QChar *)a.data(), alen, cs);
}
@@ -3513,428 +4055,497 @@ QString &QString::replace(const QString &before, QLatin1String after, Qt::CaseSe
Replaces every occurrence of the character \a c with the string \a
after and returns a reference to this string.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\note The text is not rescanned after a replacement.
*/
-QString &QString::replace(QChar c, QLatin1String after, Qt::CaseSensitivity cs)
+QString &QString::replace(QChar c, QLatin1StringView after, Qt::CaseSensitivity cs)
{
- qsizetype alen = after.size();
- QVarLengthArray<char16_t> a(alen);
- qt_from_latin1(a.data(), after.latin1(), alen);
+ const qsizetype alen = after.size();
+ if (alen == 1)
+ return replace(c, after.front(), cs);
+
+ QVarLengthArray<char16_t> a = qt_from_latin1_to_qvla(after);
return replace(&c, 1, (const QChar *)a.data(), alen, cs);
}
-
/*!
- \relates QString
- Returns \c true if string \a s1 is equal to string \a s2; otherwise
- returns \c false.
+ \fn bool QString::operator==(const QString &lhs, const QString &rhs)
+ \overload operator==()
- \sa {Comparing Strings}
-*/
-bool operator==(const QString &s1, const QString &s2) noexcept
-{
- if (s1.d.size != s2.d.size)
- return false;
+ Returns \c true if string \a lhs is equal to string \a rhs; otherwise
+ returns \c false.
- return qt_compare_strings(s1, s2, Qt::CaseSensitive) == 0;
-}
+ \include qstring.cpp compare-isNull-vs-isEmpty
+
+ \sa {Comparing Strings}
+*/
/*!
+ \fn bool QString::operator==(const QString &lhs, const QLatin1StringView &rhs)
+
\overload operator==()
- Returns \c true if this string is equal to \a other; otherwise
+
+ Returns \c true if \a lhs is equal to \a rhs; otherwise
returns \c false.
*/
-bool QString::operator==(QLatin1String other) const noexcept
-{
- if (size() != other.size())
- return false;
- return qt_compare_strings(*this, other, Qt::CaseSensitive) == 0;
-}
+/*!
+ \fn bool QString::operator==(const QLatin1StringView &lhs, const QString &rhs)
+
+ \overload operator==()
-/*! \fn bool QString::operator==(const QByteArray &other) const
+ Returns \c true if \a lhs is equal to \a rhs; otherwise
+ returns \c false.
+*/
+
+/*! \fn bool QString::operator==(const QString &lhs, const QByteArray &rhs)
\overload operator==()
- The \a other byte array is converted to a QString using the
- fromUtf8() function. This function stops conversion at the
- first NUL character found, or the end of the byte array.
+ The \a rhs byte array is converted to a QUtf8StringView.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
- Returns \c true if this string is lexically equal to the parameter
- string \a other. Otherwise returns \c false.
-
- \sa QT_NO_CAST_FROM_ASCII
+ Returns \c true if string \a lhs is lexically equal to \a rhs.
+ Otherwise returns \c false.
*/
-/*! \fn bool QString::operator==(const char *other) const
+/*! \fn bool QString::operator==(const QString &lhs, const char * const &rhs)
\overload operator==()
- The \a other const char pointer is converted to a QString using
- the fromUtf8() function.
+ The \a rhs const char pointer is converted to a QUtf8StringView.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*!
- \relates QString
- Returns \c true if string \a s1 is lexically less than string
- \a s2; otherwise returns \c false.
+ \fn bool QString::operator<(const QString &lhs, const QString &rhs)
+
+ \overload operator<()
+
+ Returns \c true if string \a lhs is lexically less than string
+ \a rhs; otherwise returns \c false.
\sa {Comparing Strings}
*/
-bool operator<(const QString &s1, const QString &s2) noexcept
-{
- return qt_compare_strings(s1, s2, Qt::CaseSensitive) < 0;
-}
/*!
- \overload operator<()
+ \fn bool QString::operator<(const QString &lhs, const QLatin1StringView &rhs)
+
+ \overload operator<()
+
+ Returns \c true if \a lhs is lexically less than \a rhs;
+ otherwise returns \c false.
+*/
+
+/*!
+ \fn bool QString::operator<(const QLatin1StringView &lhs, const QString &rhs)
+
+ \overload operator<()
- Returns \c true if this string is lexically less than the parameter
- string called \a other; otherwise returns \c false.
+ Returns \c true if \a lhs is lexically less than \a rhs;
+ otherwise returns \c false.
*/
-bool QString::operator<(QLatin1String other) const noexcept
-{
- return qt_compare_strings(*this, other, Qt::CaseSensitive) < 0;
-}
-/*! \fn bool QString::operator<(const QByteArray &other) const
+/*! \fn bool QString::operator<(const QString &lhs, const QByteArray &rhs)
\overload operator<()
- The \a other byte array is converted to a QString using the
- fromUtf8() function. If any NUL characters ('\\0') are embedded
- in the byte array, they will be included in the transformation.
+ The \a rhs byte array is converted to a QUtf8StringView.
+ If any NUL characters ('\\0') are embedded in the byte array, they will be
+ included in the transformation.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool QString::operator<(const char *other) const
+/*! \fn bool QString::operator<(const QString &lhs, const char * const &rhs)
- Returns \c true if this string is lexically less than string \a other.
+ Returns \c true if string \a lhs is lexically less than string \a rhs.
Otherwise returns \c false.
\overload operator<()
- The \a other const char pointer is converted to a QString using
- the fromUtf8() function.
+ The \a rhs const char pointer is converted to a QUtf8StringView.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool operator<=(const QString &s1, const QString &s2)
+/*! \fn bool QString::operator<=(const QString &lhs, const QString &rhs)
- \relates QString
-
- Returns \c true if string \a s1 is lexically less than or equal to
- string \a s2; otherwise returns \c false.
+ Returns \c true if string \a lhs is lexically less than or equal to
+ string \a rhs; otherwise returns \c false.
\sa {Comparing Strings}
*/
-/*! \fn bool QString::operator<=(QLatin1String other) const
+/*!
+ \fn bool QString::operator<=(const QString &lhs, const QLatin1StringView &rhs)
- Returns \c true if this string is lexically less than or equal to
- parameter string \a other. Otherwise returns \c false.
+ \overload operator<=()
+
+ Returns \c true if \a lhs is lexically less than or equal to \a rhs;
+ otherwise returns \c false.
+*/
+
+/*!
+ \fn bool QString::operator<=(const QLatin1StringView &lhs, const QString &rhs)
\overload operator<=()
+
+ Returns \c true if \a lhs is lexically less than or equal to \a rhs;
+ otherwise returns \c false.
*/
-/*! \fn bool QString::operator<=(const QByteArray &other) const
+/*! \fn bool QString::operator<=(const QString &lhs, const QByteArray &rhs)
\overload operator<=()
- The \a other byte array is converted to a QString using the
- fromUtf8() function. If any NUL characters ('\\0') are embedded
- in the byte array, they will be included in the transformation.
+ The \a rhs byte array is converted to a QUtf8StringView.
+ If any NUL characters ('\\0') are embedded in the byte array, they will be
+ included in the transformation.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool QString::operator<=(const char *other) const
+/*! \fn bool QString::operator<=(const QString &lhs, const char * const &rhs)
\overload operator<=()
- The \a other const char pointer is converted to a QString using
- the fromUtf8() function.
+ The \a rhs const char pointer is converted to a QUtf8StringView.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool operator>(const QString &s1, const QString &s2)
- \relates QString
+/*! \fn bool QString::operator>(const QString &lhs, const QString &rhs)
- Returns \c true if string \a s1 is lexically greater than string \a s2;
+ Returns \c true if string \a lhs is lexically greater than string \a rhs;
otherwise returns \c false.
\sa {Comparing Strings}
*/
/*!
- \overload operator>()
+ \fn bool QString::operator>(const QString &lhs, const QLatin1StringView &rhs)
+
+ \overload operator>()
- Returns \c true if this string is lexically greater than the parameter
- string \a other; otherwise returns \c false.
+ Returns \c true if \a lhs is lexically greater than \a rhs;
+ otherwise returns \c false.
*/
-bool QString::operator>(QLatin1String other) const noexcept
-{
- return qt_compare_strings(*this, other, Qt::CaseSensitive) > 0;
-}
-/*! \fn bool QString::operator>(const QByteArray &other) const
+/*!
+ \fn bool QString::operator>(const QLatin1StringView &lhs, const QString &rhs)
\overload operator>()
- The \a other byte array is converted to a QString using the
- fromUtf8() function. If any NUL characters ('\\0') are embedded
- in the byte array, they will be included in the transformation.
+ Returns \c true if \a lhs is lexically greater than \a rhs;
+ otherwise returns \c false.
+*/
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+/*! \fn bool QString::operator>(const QString &lhs, const QByteArray &rhs)
+
+ \overload operator>()
+
+ The \a rhs byte array is converted to a QUtf8StringView.
+ If any NUL characters ('\\0') are embedded in the byte array, they will be
+ included in the transformation.
+
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool QString::operator>(const char *other) const
+/*! \fn bool QString::operator>(const QString &lhs, const char * const &rhs)
\overload operator>()
- The \a other const char pointer is converted to a QString using
- the fromUtf8() function.
+ The \a rhs const char pointer is converted to a QUtf8StringView.
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool operator>=(const QString &s1, const QString &s2)
- \relates QString
+/*! \fn bool QString::operator>=(const QString &lhs, const QString &rhs)
- Returns \c true if string \a s1 is lexically greater than or equal to
- string \a s2; otherwise returns \c false.
+ Returns \c true if string \a lhs is lexically greater than or equal to
+ string \a rhs; otherwise returns \c false.
\sa {Comparing Strings}
*/
-/*! \fn bool QString::operator>=(QLatin1String other) const
+/*!
+ \fn bool QString::operator>=(const QString &lhs, const QLatin1StringView &rhs)
+
+ \overload operator>=()
+
+ Returns \c true if \a lhs is lexically greater than or equal to \a rhs;
+ otherwise returns \c false.
+*/
- Returns \c true if this string is lexically greater than or equal to parameter
- string \a other. Otherwise returns \c false.
+/*!
+ \fn bool QString::operator>=(const QLatin1StringView &lhs, const QString &rhs)
\overload operator>=()
+
+ Returns \c true if \a lhs is lexically greater than or equal to \a rhs;
+ otherwise returns \c false.
*/
-/*! \fn bool QString::operator>=(const QByteArray &other) const
+/*! \fn bool QString::operator>=(const QString &lhs, const QByteArray &rhs)
\overload operator>=()
- The \a other byte array is converted to a QString using the
- fromUtf8() function. If any NUL characters ('\\0') are embedded in
- the byte array, they will be included in the transformation.
+ The \a rhs byte array is converted to a QUtf8StringView.
+ If any NUL characters ('\\0') are embedded in the byte array, they will be
+ included in the transformation.
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool QString::operator>=(const char *other) const
+/*! \fn bool QString::operator>=(const QString &lhs, const char * const &rhs)
\overload operator>=()
- The \a other const char pointer is converted to a QString using
- the fromUtf8() function.
+ The \a rhs const char pointer is converted to a QUtf8StringView.
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool operator!=(const QString &s1, const QString &s2)
- \relates QString
+/*! \fn bool QString::operator!=(const QString &lhs, const QString &rhs)
- Returns \c true if string \a s1 is not equal to string \a s2;
+ Returns \c true if string \a lhs is not equal to string \a rhs;
otherwise returns \c false.
\sa {Comparing Strings}
*/
-/*! \fn bool QString::operator!=(QLatin1String other) const
+/*! \fn bool QString::operator!=(const QString &lhs, const QLatin1StringView &rhs)
- Returns \c true if this string is not equal to parameter string \a other.
+ Returns \c true if string \a lhs is not equal to string \a rhs.
Otherwise returns \c false.
\overload operator!=()
*/
-/*! \fn bool QString::operator!=(const QByteArray &other) const
+/*! \fn bool QString::operator!=(const QString &lhs, const QByteArray &rhs)
\overload operator!=()
- The \a other byte array is converted to a QString using the
- fromUtf8() function. If any NUL characters ('\\0') are embedded
- in the byte array, they will be included in the transformation.
+ The \a rhs byte array is converted to a QUtf8StringView.
+ If any NUL characters ('\\0') are embedded in the byte array, they will be
+ included in the transformation.
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this operator by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
-/*! \fn bool QString::operator!=(const char *other) const
+/*! \fn bool QString::operator!=(const QString &lhs, const char * const &rhs)
\overload operator!=()
- The \a other const char pointer is converted to a QString using
- the fromUtf8() function.
+ The \a rhs const char pointer is converted to a QUtf8StringView.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this operator by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
+*/
+
+/*! \fn bool QString::operator==(const QByteArray &lhs, const QString &rhs)
+
+ Returns \c true if byte array \a lhs is equal to the UTF-8 encoding of
+ \a rhs; otherwise returns \c false.
+
+ The comparison is case sensitive.
+
+ You can disable this operator by defining \c
+ QT_NO_CAST_FROM_ASCII when you compile your applications. You
+ then need to call QString::fromUtf8(), QString::fromLatin1(),
+ or QString::fromLocal8Bit() explicitly if you want to convert the byte
+ array to a QString before doing the comparison.
+*/
+
+/*! \fn bool QString::operator!=(const QByteArray &lhs, const QString &rhs)
+
+ Returns \c true if byte array \a lhs is not equal to the UTF-8 encoding of
+ \a rhs; otherwise returns \c false.
+
+ The comparison is case sensitive.
+
+ You can disable this operator by defining \c
+ QT_NO_CAST_FROM_ASCII when you compile your applications. You
+ then need to call QString::fromUtf8(), QString::fromLatin1(),
+ or QString::fromLocal8Bit() explicitly if you want to convert the byte
+ array to a QString before doing the comparison.
+*/
+
+/*! \fn bool QString::operator<(const QByteArray &lhs, const QString &rhs)
+
+ Returns \c true if byte array \a lhs is lexically less than the UTF-8 encoding
+ of \a rhs; otherwise returns \c false.
+
+ The comparison is case sensitive.
+
+ You can disable this operator by defining \c
+ QT_NO_CAST_FROM_ASCII when you compile your applications. You
+ then need to call QString::fromUtf8(), QString::fromLatin1(),
+ or QString::fromLocal8Bit() explicitly if you want to convert the byte
+ array to a QString before doing the comparison.
+*/
- \sa QT_NO_CAST_FROM_ASCII
+/*! \fn bool QString::operator>(const QByteArray &lhs, const QString &rhs)
+
+ Returns \c true if byte array \a lhs is lexically greater than the UTF-8
+ encoding of \a rhs; otherwise returns \c false.
+
+ The comparison is case sensitive.
+
+ You can disable this operator by defining \c
+ QT_NO_CAST_FROM_ASCII when you compile your applications. You
+ then need to call QString::fromUtf8(), QString::fromLatin1(),
+ or QString::fromLocal8Bit() explicitly if you want to convert the byte
+ array to a QString before doing the comparison.
+*/
+
+/*! \fn bool QString::operator<=(const QByteArray &lhs, const QString &rhs)
+
+ Returns \c true if byte array \a lhs is lexically less than or equal to the
+ UTF-8 encoding of \a rhs; otherwise returns \c false.
+
+ The comparison is case sensitive.
+
+ You can disable this operator by defining \c
+ QT_NO_CAST_FROM_ASCII when you compile your applications. You
+ then need to call QString::fromUtf8(), QString::fromLatin1(),
+ or QString::fromLocal8Bit() explicitly if you want to convert the byte
+ array to a QString before doing the comparison.
+*/
+
+/*! \fn bool QString::operator>=(const QByteArray &lhs, const QString &rhs)
+
+ Returns \c true if byte array \a lhs is greater than or equal to the UTF-8
+ encoding of \a rhs; otherwise returns \c false.
+
+ The comparison is case sensitive.
+
+ You can disable this operator by defining \c
+ QT_NO_CAST_FROM_ASCII when you compile your applications. You
+ then need to call QString::fromUtf8(), QString::fromLatin1(),
+ or QString::fromLocal8Bit() explicitly if you want to convert the byte
+ array to a QString before doing the comparison.
*/
-#if QT_STRINGVIEW_LEVEL < 2
/*!
- Returns the index position of the first occurrence of the string \a
- str in this string, searching forward from index position \a
- from. Returns -1 if \a str is not found.
+ \include qstring.qdocinc {qstring-first-index-of} {string} {str}
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
\snippet qstring/main.cpp 24
- If \a from is -1, the search starts at the last character; if it is
- -2, at the next to last character and so on.
+ \include qstring.qdocinc negative-index-start-search-from-end
\sa lastIndexOf(), contains(), count()
*/
qsizetype QString::indexOf(const QString &str, qsizetype from, Qt::CaseSensitivity cs) const
{
- return QtPrivate::findString(QStringView(unicode(), length()), from, QStringView(str.unicode(), str.length()), cs);
+ return QtPrivate::findString(QStringView(unicode(), size()), from, QStringView(str.unicode(), str.size()), cs);
}
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\fn qsizetype QString::indexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
\since 5.14
\overload indexOf()
- Returns the index position of the first occurrence of the string view \a str
- in this string, searching forward from index position \a from.
- Returns -1 if \a str is not found.
+ \include qstring.qdocinc {qstring-first-index-of} {string view} {str}
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
- If \a from is -1, the search starts at the last character; if it is
- -2, at the next to last character and so on.
+ \include qstring.qdocinc negative-index-start-search-from-end
\sa QStringView::indexOf(), lastIndexOf(), contains(), count()
*/
/*!
\since 4.5
- Returns the index position of the first occurrence of the string \a
- str in this string, searching forward from index position \a
- from. Returns -1 if \a str is not found.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include {qstring.qdocinc} {qstring-first-index-of} {Latin-1 string viewed by} {str}
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
\snippet qstring/main.cpp 24
- If \a from is -1, the search starts at the last character; if it is
- -2, at the next to last character and so on.
+ \include qstring.qdocinc negative-index-start-search-from-end
\sa lastIndexOf(), contains(), count()
*/
-qsizetype QString::indexOf(QLatin1String str, qsizetype from, Qt::CaseSensitivity cs) const
+qsizetype QString::indexOf(QLatin1StringView str, qsizetype from, Qt::CaseSensitivity cs) const
{
return QtPrivate::findString(QStringView(unicode(), size()), from, str, cs);
}
/*!
+ \fn qsizetype QString::indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const
\overload indexOf()
- Returns the index position of the first occurrence of the
- character \a ch in the string, searching forward from index
- position \a from. Returns -1 if \a ch could not be found.
+ \include qstring.qdocinc {qstring-first-index-of} {character} {ch}
*/
-qsizetype QString::indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const
-{
- return qFindChar(QStringView(unicode(), length()), ch, from, cs);
-}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
- Returns the index position of the last occurrence of the string \a
- str in this string, searching backward from index position \a
- from. If \a from is -1 (default), the search starts at the last
- character; if \a from is -2, at the next to last character and so
- on. Returns -1 if \a str is not found.
+ \include qstring.qdocinc {qstring-last-index-of} {string} {str}
+
+ \include qstring.qdocinc negative-index-start-search-from-end
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ Returns -1 if \a str is not found.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
\snippet qstring/main.cpp 29
+ \note When searching for a 0-length \a str, the match at the end of
+ the data is excluded from the search by a negative \a from, even
+ though \c{-1} is normally thought of as searching from the end of the
+ string: the match at the end is \e after the last character, so it is
+ excluded. To include such a final empty match, either give a positive
+ value for \a from or omit the \a from parameter entirely.
+
\sa indexOf(), contains(), count()
*/
qsizetype QString::lastIndexOf(const QString &str, qsizetype from, Qt::CaseSensitivity cs) const
@@ -3942,60 +4553,119 @@ qsizetype QString::lastIndexOf(const QString &str, qsizetype from, Qt::CaseSensi
return QtPrivate::lastIndexOf(QStringView(*this), from, str, cs);
}
-#endif // QT_STRINGVIEW_LEVEL < 2
+/*!
+ \fn qsizetype QString::lastIndexOf(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 6.2
+ \overload lastIndexOf()
+
+ Returns the index position of the last occurrence of the string \a
+ str in this string. Returns -1 if \a str is not found.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ Example:
+
+ \snippet qstring/main.cpp 29
+
+ \sa indexOf(), contains(), count()
+*/
+
/*!
\since 4.5
\overload lastIndexOf()
- Returns the index position of the last occurrence of the string \a
- str in this string, searching backward from index position \a
- from. If \a from is -1 (default), the search starts at the last
- character; if \a from is -2, at the next to last character and so
- on. Returns -1 if \a str is not found.
+ \include qstring.qdocinc {qstring-last-index-of} {Latin-1 string viewed by} {str}
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if \a str is not found.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
\snippet qstring/main.cpp 29
+ \note When searching for a 0-length \a str, the match at the end of
+ the data is excluded from the search by a negative \a from, even
+ though \c{-1} is normally thought of as searching from the end of the
+ string: the match at the end is \e after the last character, so it is
+ excluded. To include such a final empty match, either give a positive
+ value for \a from or omit the \a from parameter entirely.
+
\sa indexOf(), contains(), count()
*/
-qsizetype QString::lastIndexOf(QLatin1String str, qsizetype from, Qt::CaseSensitivity cs) const
+qsizetype QString::lastIndexOf(QLatin1StringView str, qsizetype from, Qt::CaseSensitivity cs) const
{
return QtPrivate::lastIndexOf(*this, from, str, cs);
}
/*!
+ \fn qsizetype QString::lastIndexOf(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 6.2
\overload lastIndexOf()
- Returns the index position of the last occurrence of the character
- \a ch, searching backward from position \a from.
+ Returns the index position of the last occurrence of the string \a
+ str in this string. Returns -1 if \a str is not found.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ Example:
+
+ \snippet qstring/main.cpp 29
+
+ \sa indexOf(), contains(), count()
+*/
+
+/*!
+ \fn qsizetype QString::lastIndexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const
+ \overload lastIndexOf()
+
+ \include qstring.qdocinc {qstring-last-index-of} {character} {ch}
+*/
+
+/*!
+ \fn QString::lastIndexOf(QChar ch, Qt::CaseSensitivity) const
+ \since 6.3
+ \overload lastIndexOf()
*/
-qsizetype QString::lastIndexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const
-{
- return qLastIndexOf(QStringView(*this), ch, from, cs);
-}
/*!
\fn qsizetype QString::lastIndexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
\since 5.14
\overload lastIndexOf()
- Returns the index position of the last occurrence of the string view \a
- str in this string, searching backward from index position \a
- from. If \a from is -1 (default), the search starts at the last
- character; if \a from is -2, at the next to last character and so
- on. Returns -1 if \a str is not found.
+ \include qstring.qdocinc {qstring-last-index-of} {string view} {str}
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if \a str is not found.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \note When searching for a 0-length \a str, the match at the end of
+ the data is excluded from the search by a negative \a from, even
+ though \c{-1} is normally thought of as searching from the end of the
+ string: the match at the end is \e after the last character, so it is
+ excluded. To include such a final empty match, either give a positive
+ value for \a from or omit the \a from parameter entirely.
\sa indexOf(), contains(), count()
*/
+/*!
+ \fn qsizetype QString::lastIndexOf(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 6.2
+ \overload lastIndexOf()
+
+ Returns the index position of the last occurrence of the string view \a
+ str in this string. Returns -1 if \a str is not found.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa indexOf(), contains(), count()
+*/
#if QT_CONFIG(regularexpression)
struct QStringCapture
@@ -4027,7 +4697,7 @@ Q_DECLARE_TYPEINFO(QStringCapture, Q_PRIMITIVE_TYPE);
QString &QString::replace(const QRegularExpression &re, const QString &after)
{
if (!re.isValid()) {
- qWarning("QString::replace: invalid QRegularExpression object");
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString::replace");
return *this;
}
@@ -4036,18 +4706,18 @@ QString &QString::replace(const QRegularExpression &re, const QString &after)
if (!iterator.hasNext()) // no matches at all
return *this;
- reallocData(d.size, d->detachFlags());
+ reallocData(d.size, QArrayData::KeepSize);
qsizetype numCaptures = re.captureCount();
// 1. build the backreferences list, holding where the backreferences
// are in the replacement string
- QList<QStringCapture> backReferences;
- const qsizetype al = after.length();
+ QVarLengthArray<QStringCapture> backReferences;
+ const qsizetype al = after.size();
const QChar *ac = after.unicode();
for (qsizetype i = 0; i < al - 1; i++) {
- if (ac[i] == QLatin1Char('\\')) {
+ if (ac[i] == u'\\') {
int no = ac[i + 1].digitValue();
if (no > 0 && no <= numCaptures) {
QStringCapture backReference;
@@ -4074,7 +4744,7 @@ QString &QString::replace(const QRegularExpression &re, const QString &after)
qsizetype newLength = 0; // length of the new string, with all the replacements
qsizetype lastEnd = 0;
- QList<QStringView> chunks;
+ QVarLengthArray<QStringView> chunks;
const QStringView copyView{ copy }, afterView{ after };
while (iterator.hasNext()) {
QRegularExpressionMatch match = iterator.next();
@@ -4088,7 +4758,7 @@ QString &QString::replace(const QRegularExpression &re, const QString &after)
lastEnd = 0;
// add the after string, with replacements for the backreferences
- for (const QStringCapture &backReference : qAsConst(backReferences)) {
+ for (const QStringCapture &backReference : std::as_const(backReferences)) {
// part of "after" before the backreference
len = backReference.pos - lastEnd;
if (len > 0) {
@@ -4107,7 +4777,7 @@ QString &QString::replace(const QRegularExpression &re, const QString &after)
}
// add the last part of the after string
- len = afterView.length() - lastEnd;
+ len = afterView.size() - lastEnd;
if (len > 0) {
chunks << afterView.mid(lastEnd, len);
newLength += len;
@@ -4117,17 +4787,17 @@ QString &QString::replace(const QRegularExpression &re, const QString &after)
}
// 3. trailing string after the last match
- if (copyView.length() > lastEnd) {
+ if (copyView.size() > lastEnd) {
chunks << copyView.mid(lastEnd);
- newLength += copyView.length() - lastEnd;
+ newLength += copyView.size() - lastEnd;
}
// 4. assemble the chunks together
resize(newLength);
qsizetype i = 0;
QChar *uc = data();
- for (const QStringView &chunk : qAsConst(chunks)) {
- qsizetype len = chunk.length();
+ for (const QStringView &chunk : std::as_const(chunks)) {
+ qsizetype len = chunk.size();
memcpy(uc + i, chunk.constData(), len * sizeof(QChar));
i += len;
}
@@ -4140,8 +4810,7 @@ QString &QString::replace(const QRegularExpression &re, const QString &after)
Returns the number of (potentially overlapping) occurrences of
the string \a str in this string.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa contains(), indexOf()
*/
@@ -4156,8 +4825,7 @@ qsizetype QString::count(const QString &str, Qt::CaseSensitivity cs) const
Returns the number of occurrences of character \a ch in the string.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa contains(), indexOf()
*/
@@ -4171,10 +4839,9 @@ qsizetype QString::count(QChar ch, Qt::CaseSensitivity cs) const
\since 6.0
\overload count()
Returns the number of (potentially overlapping) occurrences of the
- string reference \a str in this string.
+ string view \a str in this string.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa contains(), indexOf()
*/
@@ -4183,23 +4850,20 @@ qsizetype QString::count(QStringView str, Qt::CaseSensitivity cs) const
return QtPrivate::count(*this, str, cs);
}
-#if QT_STRINGVIEW_LEVEL < 2
/*! \fn bool QString::contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
Returns \c true if this string contains an occurrence of the string
\a str; otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
Example:
\snippet qstring/main.cpp 17
\sa indexOf(), count()
*/
-#endif // QT_STRINGVIEW_LEVEL < 2
-/*! \fn bool QString::contains(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+/*! \fn bool QString::contains(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
\since 5.3
\overload contains()
@@ -4223,8 +4887,7 @@ qsizetype QString::count(QStringView str, Qt::CaseSensitivity cs) const
Returns \c true if this string contains an occurrence of the string view
\a str; otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa indexOf(), count()
*/
@@ -4247,20 +4910,7 @@ qsizetype QString::count(QStringView str, Qt::CaseSensitivity cs) const
*/
qsizetype QString::indexOf(const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch) const
{
- if (!re.isValid()) {
- qWarning("QString::indexOf: invalid QRegularExpression object");
- return -1;
- }
-
- QRegularExpressionMatch match = re.match(*this, from);
- if (match.hasMatch()) {
- const qsizetype ret = match.capturedStart();
- if (rmatch)
- *rmatch = std::move(match);
- return ret;
- }
-
- return -1;
+ return QtPrivate::indexOf(QStringView(*this), this, re, from, rmatch);
}
/*!
@@ -4268,7 +4918,11 @@ qsizetype QString::indexOf(const QRegularExpression &re, qsizetype from, QRegula
Returns the index position of the last match of the regular
expression \a re in the string, which starts before the index
- position \a from. Returns -1 if \a re didn't match anywhere.
+ position \a from.
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if \a re didn't match anywhere.
If the match is successful and \a rmatch is not \nullptr, it also
writes the results of the match into the QRegularExpressionMatch object
@@ -4277,31 +4931,44 @@ qsizetype QString::indexOf(const QRegularExpression &re, qsizetype from, QRegula
Example:
\snippet qstring/main.cpp 94
+
+ \note Due to how the regular expression matching algorithm works,
+ this function will actually match repeatedly from the beginning of
+ the string until the position \a from is reached.
+
+ \note When searching for a regular expression \a re that may match
+ 0 characters, the match at the end of the data is excluded from the
+ search by a negative \a from, even though \c{-1} is normally
+ thought of as searching from the end of the string: the match at
+ the end is \e after the last character, so it is excluded. To
+ include such a final empty match, either give a positive value for
+ \a from or omit the \a from parameter entirely.
*/
qsizetype QString::lastIndexOf(const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch) const
{
- if (!re.isValid()) {
- qWarning("QString::lastIndexOf: invalid QRegularExpression object");
- return -1;
- }
+ return QtPrivate::lastIndexOf(QStringView(*this), this, re, from, rmatch);
+}
- qsizetype endpos = (from < 0) ? (size() + from + 1) : (from + 1);
- QRegularExpressionMatchIterator iterator = re.globalMatch(*this);
- qsizetype lastIndex = -1;
- while (iterator.hasNext()) {
- QRegularExpressionMatch match = iterator.next();
- qsizetype start = match.capturedStart();
- if (start < endpos) {
- lastIndex = start;
- if (rmatch)
- *rmatch = std::move(match);
- } else {
- break;
- }
- }
+/*!
+ \fn qsizetype QString::lastIndexOf(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const
+ \since 6.2
+ \overload lastIndexOf()
- return lastIndex;
-}
+ Returns the index position of the last match of the regular
+ expression \a re in the string. Returns -1 if \a re didn't match anywhere.
+
+ If the match is successful and \a rmatch is not \nullptr, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ Example:
+
+ \snippet qstring/main.cpp 94
+
+ \note Due to how the regular expression matching algorithm works,
+ this function will actually match repeatedly from the beginning of
+ the string until the end of the string is reached.
+*/
/*!
\since 5.1
@@ -4318,15 +4985,7 @@ qsizetype QString::lastIndexOf(const QRegularExpression &re, qsizetype from, QRe
bool QString::contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch) const
{
- if (!re.isValid()) {
- qWarning("QString::contains: invalid QRegularExpression object");
- return false;
- }
- QRegularExpressionMatch m = re.match(*this);
- bool hasMatch = m.hasMatch();
- if (hasMatch && rmatch)
- *rmatch = std::move(m);
- return hasMatch;
+ return QtPrivate::contains(QStringView(*this), this, re, rmatch);
}
/*!
@@ -4336,38 +4995,31 @@ bool QString::contains(const QRegularExpression &re, QRegularExpressionMatch *rm
Returns the number of times the regular expression \a re matches
in the string.
- This function counts overlapping matches, so in the example
- below, there are four instances of "ana" or "ama":
+ For historical reasons, this function counts overlapping matches,
+ so in the example below, there are four instances of "ana" or
+ "ama":
\snippet qstring/main.cpp 95
+
+ This behavior is different from simply iterating over the matches
+ in the string using QRegularExpressionMatchIterator.
+
+ \sa QRegularExpression::globalMatch()
*/
qsizetype QString::count(const QRegularExpression &re) const
{
- if (!re.isValid()) {
- qWarning("QString::count: invalid QRegularExpression object");
- return 0;
- }
- qsizetype count = 0;
- qsizetype index = -1;
- qsizetype len = length();
- while (index < len - 1) {
- QRegularExpressionMatch match = re.match(*this, index + 1);
- if (!match.hasMatch())
- break;
- index = match.capturedStart();
- count++;
- }
- return count;
+ return QtPrivate::count(QStringView(*this), re);
}
#endif // QT_CONFIG(regularexpression)
+#if QT_DEPRECATED_SINCE(6, 4)
/*! \fn qsizetype QString::count() const
-
+ \deprecated [6.4] Use size() or length() instead.
\overload count()
Same as size().
*/
-
+#endif
/*!
\enum QString::SectionFlag
@@ -4463,9 +5115,9 @@ QString QString::section(const QString &sep, qsizetype start, qsizetype end, Sec
const QStringView &section = sections.at(i);
const bool empty = section.isEmpty();
if (x >= start) {
- if(x == start)
+ if (x == start)
first_i = i;
- if(x == end)
+ if (x == end)
last_i = i;
if (x > start && i > 0)
ret += sep;
@@ -4481,7 +5133,7 @@ QString QString::section(const QString &sep, qsizetype start, qsizetype end, Sec
return ret;
}
-#if !(defined(QT_NO_REGEXP) && !QT_CONFIG(regularexpression))
+#if QT_CONFIG(regularexpression)
class qt_section_chunk {
public:
qt_section_chunk() {}
@@ -4489,9 +5141,9 @@ public:
qsizetype length;
QStringView string;
};
-Q_DECLARE_TYPEINFO(qt_section_chunk, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(qt_section_chunk, Q_RELOCATABLE_TYPE);
-static QString extractSections(const QList<qt_section_chunk> &sections, qsizetype start, qsizetype end,
+static QString extractSections(QSpan<qt_section_chunk> sections, qsizetype start, qsizetype end,
QString::SectionFlags flags)
{
const qsizetype sectionsSize = sections.size();
@@ -4504,8 +5156,8 @@ static QString extractSections(const QList<qt_section_chunk> &sections, qsizetyp
} else {
qsizetype skip = 0;
for (qsizetype k = 0; k < sectionsSize; ++k) {
- const qt_section_chunk &section = sections.at(k);
- if (section.length == section.string.length())
+ const qt_section_chunk &section = sections[k];
+ if (section.length == section.string.size())
skip++;
}
if (start < 0)
@@ -4520,8 +5172,8 @@ static QString extractSections(const QList<qt_section_chunk> &sections, qsizetyp
qsizetype x = 0;
qsizetype first_i = start, last_i = end;
for (qsizetype i = 0; x <= end && i < sectionsSize; ++i) {
- const qt_section_chunk &section = sections.at(i);
- const bool empty = (section.length == section.string.length());
+ const qt_section_chunk &section = sections[i];
+ const bool empty = (section.length == section.string.size());
if (x >= start) {
if (x == start)
first_i = i;
@@ -4537,21 +5189,19 @@ static QString extractSections(const QList<qt_section_chunk> &sections, qsizetyp
}
if ((flags & QString::SectionIncludeLeadingSep) && first_i >= 0) {
- const qt_section_chunk &section = sections.at(first_i);
+ const qt_section_chunk &section = sections[first_i];
ret.prepend(section.string.left(section.length));
}
if ((flags & QString::SectionIncludeTrailingSep)
&& last_i < sectionsSize - 1) {
- const qt_section_chunk &section = sections.at(last_i+1);
+ const qt_section_chunk &section = sections[last_i + 1];
ret += section.string.left(section.length);
}
return ret;
}
-#endif
-#if QT_CONFIG(regularexpression)
/*!
\overload section()
\since 5.0
@@ -4569,7 +5219,7 @@ static QString extractSections(const QList<qt_section_chunk> &sections, qsizetyp
QString QString::section(const QRegularExpression &re, qsizetype start, qsizetype end, SectionFlags flags) const
{
if (!re.isValid()) {
- qWarning("QString::section: invalid QRegularExpression object");
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString::section");
return QString();
}
@@ -4581,67 +5231,63 @@ QString QString::section(const QRegularExpression &re, qsizetype start, qsizetyp
if (flags & SectionCaseInsensitiveSeps)
sep.setPatternOptions(sep.patternOptions() | QRegularExpression::CaseInsensitiveOption);
- QList<qt_section_chunk> sections;
- qsizetype n = length(), m = 0, last_m = 0, last_len = 0;
+ QVarLengthArray<qt_section_chunk> sections;
+ qsizetype n = size(), m = 0, last_m = 0, last_len = 0;
QRegularExpressionMatchIterator iterator = sep.globalMatch(*this);
while (iterator.hasNext()) {
QRegularExpressionMatch match = iterator.next();
m = match.capturedStart();
- sections.append(qt_section_chunk(last_len, QStringView{ *this }.mid(last_m, m - last_m)));
+ sections.append(qt_section_chunk(last_len, QStringView{ *this }.sliced(last_m, m - last_m)));
last_m = m;
last_len = match.capturedLength();
}
- sections.append(qt_section_chunk(last_len, QStringView{ *this }.mid(last_m, n - last_m)));
+ sections.append(qt_section_chunk(last_len, QStringView{ *this }.sliced(last_m, n - last_m)));
return extractSections(sections, start, end, flags);
}
#endif // QT_CONFIG(regularexpression)
/*!
+ \fn QString QString::left(qsizetype n) const &
+ \fn QString QString::left(qsizetype n) &&
+
Returns a substring that contains the \a n leftmost characters
of the string.
- \obsolete Use first() instead in new code.
+ If you know that \a n cannot be out of bounds, use first() instead in new
+ code, because it is faster.
The entire string is returned if \a n is greater than or equal
to size(), or less than zero.
- \snippet qstring/main.cpp 31
-
\sa first(), last(), startsWith(), chopped(), chop(), truncate()
*/
-QString QString::left(qsizetype n) const
-{
- if (size_t(n) >= size_t(size()))
- return *this;
- return QString((const QChar*) d.data(), n);
-}
/*!
+ \fn QString QString::right(qsizetype n) const &
+ \fn QString QString::right(qsizetype n) &&
+
Returns a substring that contains the \a n rightmost characters
of the string.
- \obsolete Use last() instead in new code.
+ If you know that \a n cannot be out of bounds, use last() instead in new
+ code, because it is faster.
The entire string is returned if \a n is greater than or equal
to size(), or less than zero.
- \snippet qstring/main.cpp 48
-
- \sa endsWith(), last(), first(), sliced(), chopped(), chop(), truncate()
+ \sa endsWith(), last(), first(), sliced(), chopped(), chop(), truncate(), slice()
*/
-QString QString::right(qsizetype n) const
-{
- if (size_t(n) >= size_t(size()))
- return *this;
- return QString(constData() + size() - n, n);
-}
/*!
+ \fn QString QString::mid(qsizetype position, qsizetype n) const &
+ \fn QString QString::mid(qsizetype position, qsizetype n) &&
+
Returns a string that contains \a n characters of this string,
starting at the specified \a position index.
- \obsolete Use sliced() instead in new code.
+ If you know that \a position and \a n cannot be out of bounds, use sliced()
+ instead in new code, because it is faster.
Returns a null string if the \a position index exceeds the
length of the string. If there are less than \a n characters
@@ -4649,14 +5295,9 @@ QString QString::right(qsizetype n) const
\a n is -1 (default), the function returns all characters that
are available from the specified \a position.
- Example:
-
- \snippet qstring/main.cpp 34
-
- \sa first(), last(), sliced(), chopped(), chop(), truncate()
+ \sa first(), last(), sliced(), chopped(), chop(), truncate(), slice()
*/
-
-QString QString::mid(qsizetype position, qsizetype n) const
+QString QString::mid(qsizetype position, qsizetype n) const &
{
qsizetype p = position;
qsizetype l = n;
@@ -4669,14 +5310,33 @@ QString QString::mid(qsizetype position, qsizetype n) const
case QContainerImplHelper::Full:
return *this;
case QContainerImplHelper::Subset:
- return QString(constData() + p, l);
+ return sliced(p, l);
+ }
+ Q_UNREACHABLE_RETURN(QString());
+}
+
+QString QString::mid(qsizetype position, qsizetype n) &&
+{
+ qsizetype p = position;
+ qsizetype l = n;
+ using namespace QtPrivate;
+ switch (QContainerImplHelper::mid(size(), &p, &l)) {
+ case QContainerImplHelper::Null:
+ return QString();
+ case QContainerImplHelper::Empty:
+ resize(0); // keep capacity if we've reserve()d
+ [[fallthrough]];
+ case QContainerImplHelper::Full:
+ return std::move(*this);
+ case QContainerImplHelper::Subset:
+ return std::move(*this).sliced(p, l);
}
- Q_UNREACHABLE();
- return QString();
+ Q_UNREACHABLE_RETURN(QString());
}
/*!
- \fn QString QString::first(qsizetype n) const
+ \fn QString QString::first(qsizetype n) const &
+ \fn QString QString::first(qsizetype n) &&
\since 6.0
Returns a string that contains the first \a n characters
@@ -4684,22 +5344,28 @@ QString QString::mid(qsizetype position, qsizetype n) const
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa last(), sliced(), startsWith(), chopped(), chop(), truncate()
+ \snippet qstring/main.cpp 31
+
+ \sa last(), sliced(), startsWith(), chopped(), chop(), truncate(), slice()
*/
/*!
- \fn QString QString::last(qsizetype n) const
+ \fn QString QString::last(qsizetype n) const &
+ \fn QString QString::last(qsizetype n) &&
\since 6.0
Returns the string that contains the last \a n characters of this string.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa first(), sliced(), endsWith(), chopped(), chop(), truncate()
+ \snippet qstring/main.cpp 48
+
+ \sa first(), sliced(), endsWith(), chopped(), chop(), truncate(), slice()
*/
/*!
- \fn QString QString::sliced(qsizetype pos, qsizetype n) const
+ \fn QString QString::sliced(qsizetype pos, qsizetype n) const &
+ \fn QString QString::sliced(qsizetype pos, qsizetype n) &&
\since 6.0
Returns a string that contains \a n characters of this string,
@@ -4708,11 +5374,22 @@ QString QString::mid(qsizetype position, qsizetype n) const
\note The behavior is undefined when \a pos < 0, \a n < 0,
or \a pos + \a n > size().
- \sa first(), last(), chopped(), chop(), truncate()
+ \snippet qstring/main.cpp 34
+
+ \sa first(), last(), chopped(), chop(), truncate(), slice()
*/
+QString QString::sliced_helper(QString &str, qsizetype pos, qsizetype n)
+{
+ if (n == 0)
+ return QString(DataPointer::fromRawData(&_empty, 0));
+ DataPointer d = std::move(str.d).sliced(pos, n);
+ d.data()[n] = 0;
+ return QString(std::move(d));
+}
/*!
- \fn QString QString::sliced(qsizetype pos) const
+ \fn QString QString::sliced(qsizetype pos) const &
+ \fn QString QString::sliced(qsizetype pos) &&
\since 6.0
\overload
@@ -4721,11 +5398,40 @@ QString QString::mid(qsizetype position, qsizetype n) const
\note The behavior is undefined when \a pos < 0 or \a pos > size().
- \sa first(), last(), sliced(), chopped(), chop(), truncate()
+ \sa first(), last(), chopped(), chop(), truncate(), slice()
*/
/*!
- \fn QString QString::chopped(qsizetype len) const
+ \fn QString &QString::slice(qsizetype pos, qsizetype n)
+ \since 6.8
+
+ Modifies this string to start at position \a pos, extending for \a n
+ characters (code points), and returns a reference to this string.
+
+ \note The behavior is undefined if \a pos < 0, \a n < 0,
+ or \a pos + \a n > size().
+
+ \snippet qstring/main.cpp 86
+
+ \sa sliced(), first(), last(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QString &QString::slice(qsizetype pos)
+ \since 6.8
+ \overload
+
+ Modifies this string to start at position \a pos and extending to its end,
+ and returns a reference to this string.
+
+ \note The behavior is undefined if \a pos < 0 or \a pos > size().
+
+ \sa sliced(), first(), last(), chopped(), chop(), truncate()
+*/
+
+/*!
+ \fn QString QString::chopped(qsizetype len) const &
+ \fn QString QString::chopped(qsizetype len) &&
\since 5.10
Returns a string that contains the size() - \a len leftmost characters
@@ -4733,16 +5439,14 @@ QString QString::mid(qsizetype position, qsizetype n) const
\note The behavior is undefined if \a len is negative or greater than size().
- \sa endsWith(), left(), right(), mid(), chop(), truncate()
+ \sa endsWith(), first(), last(), sliced(), chop(), truncate(), slice()
*/
-#if QT_STRINGVIEW_LEVEL < 2
/*!
Returns \c true if the string starts with \a s; otherwise returns
\c false.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\snippet qstring/main.cpp 65
@@ -4750,16 +5454,15 @@ QString QString::mid(qsizetype position, qsizetype n) const
*/
bool QString::startsWith(const QString& s, Qt::CaseSensitivity cs) const
{
- return qt_starts_with(*this, s, cs);
+ return qt_starts_with_impl(QStringView(*this), QStringView(s), cs);
}
-#endif
/*!
\overload startsWith()
*/
-bool QString::startsWith(QLatin1String s, Qt::CaseSensitivity cs) const
+bool QString::startsWith(QLatin1StringView s, Qt::CaseSensitivity cs) const
{
- return qt_starts_with(*this, s, cs);
+ return qt_starts_with_impl(QStringView(*this), s, cs);
}
/*!
@@ -4770,7 +5473,11 @@ bool QString::startsWith(QLatin1String s, Qt::CaseSensitivity cs) const
*/
bool QString::startsWith(QChar c, Qt::CaseSensitivity cs) const
{
- return qt_starts_with(*this, c, cs);
+ if (!size())
+ return false;
+ if (cs == Qt::CaseSensitive)
+ return at(0) == c;
+ return foldCase(at(0)) == foldCase(c);
}
/*!
@@ -4778,22 +5485,19 @@ bool QString::startsWith(QChar c, Qt::CaseSensitivity cs) const
\since 5.10
\overload
- Returns \c true if the string starts with the string-view \a str;
+ Returns \c true if the string starts with the string view \a str;
otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (default), the search is case-sensitive;
- otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa endsWith()
*/
-#if QT_STRINGVIEW_LEVEL < 2
/*!
Returns \c true if the string ends with \a s; otherwise returns
\c false.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\snippet qstring/main.cpp 20
@@ -4801,9 +5505,8 @@ bool QString::startsWith(QChar c, Qt::CaseSensitivity cs) const
*/
bool QString::endsWith(const QString &s, Qt::CaseSensitivity cs) const
{
- return qt_ends_with(*this, s, cs);
+ return qt_ends_with_impl(QStringView(*this), QStringView(s), cs);
}
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\fn bool QString::endsWith(QStringView str, Qt::CaseSensitivity cs) const
@@ -4812,8 +5515,7 @@ bool QString::endsWith(const QString &s, Qt::CaseSensitivity cs) const
Returns \c true if the string ends with the string view \a str;
otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa startsWith()
*/
@@ -4821,9 +5523,9 @@ bool QString::endsWith(const QString &s, Qt::CaseSensitivity cs) const
/*!
\overload endsWith()
*/
-bool QString::endsWith(QLatin1String s, Qt::CaseSensitivity cs) const
+bool QString::endsWith(QLatin1StringView s, Qt::CaseSensitivity cs) const
{
- return qt_ends_with(*this, s, cs);
+ return qt_ends_with_impl(QStringView(*this), s, cs);
}
/*!
@@ -4834,7 +5536,32 @@ bool QString::endsWith(QLatin1String s, Qt::CaseSensitivity cs) const
*/
bool QString::endsWith(QChar c, Qt::CaseSensitivity cs) const
{
- return qt_ends_with(*this, c, cs);
+ if (!size())
+ return false;
+ if (cs == Qt::CaseSensitive)
+ return at(size() - 1) == c;
+ return foldCase(at(size() - 1)) == foldCase(c);
+}
+
+static bool checkCase(QStringView s, QUnicodeTables::Case c) noexcept
+{
+ QStringIterator it(s);
+ while (it.hasNext()) {
+ const char32_t uc = it.next();
+ if (qGetProp(uc)->cases[c].diff)
+ return false;
+ }
+ return true;
+}
+
+bool QtPrivate::isLower(QStringView s) noexcept
+{
+ return checkCase(s, QUnicodeTables::LowerCase);
+}
+
+bool QtPrivate::isUpper(QStringView s) noexcept
+{
+ return checkCase(s, QUnicodeTables::UpperCase);
}
/*!
@@ -4852,15 +5579,7 @@ bool QString::endsWith(QChar c, Qt::CaseSensitivity cs) const
*/
bool QString::isUpper() const
{
- QStringIterator it(*this);
-
- while (it.hasNext()) {
- const char32_t uc = it.next();
- if (qGetProp(uc)->cases[QUnicodeTables::UpperCase].diff)
- return false;
- }
-
- return true;
+ return QtPrivate::isUpper(qToStringViewIgnoringNull(*this));
}
/*!
@@ -4878,15 +5597,7 @@ bool QString::isUpper() const
*/
bool QString::isLower() const
{
- QStringIterator it(*this);
-
- while (it.hasNext()) {
- const char32_t uc = it.next();
- if (qGetProp(uc)->cases[QUnicodeTables::LowerCase].diff)
- return false;
- }
-
- return true;
+ return QtPrivate::isLower(qToStringViewIgnoringNull(*this));
}
static QByteArray qt_convert_to_latin1(QStringView string);
@@ -4928,12 +5639,13 @@ QByteArray QtPrivate::convertToLatin1(QStringView string)
return qt_convert_to_latin1(string);
}
+Q_NEVER_INLINE
static QByteArray qt_convert_to_latin1(QStringView string)
{
if (Q_UNLIKELY(string.isNull()))
return QByteArray();
- QByteArray ba(string.length(), Qt::Uninitialized);
+ QByteArray ba(string.size(), Qt::Uninitialized);
// since we own the only copy, we're going to const_cast the constData;
// that avoids an unnecessary call to detach() and expansion code that will never get used
@@ -4949,27 +5661,41 @@ QByteArray QString::toLatin1_helper_inplace(QString &s)
// We can return our own buffer to the caller.
// Conversion to Latin-1 always shrinks the buffer by half.
- const char16_t *data = s.d.data();
- qsizetype length = s.d.size;
+ // This relies on the fact that we use QArrayData for everything behind the scenes
- // Move the d pointer over to the bytearray.
+ // First, do the in-place conversion. Since isDetached() == true, the data
+ // was allocated by QArrayData, so the null terminator must be there.
+ qsizetype length = s.size();
+ char16_t *sdata = s.d->data();
+ Q_ASSERT(sdata[length] == u'\0');
+ qt_to_latin1(reinterpret_cast<uchar *>(sdata), sdata, length + 1);
+
+ // Move the internals over to the byte array.
// Kids, avert your eyes. Don't try this at home.
+ auto ba_d = std::move(s.d).reinterpreted<char>();
- // this relies on the fact that we use QArrayData for everything behind the scenes which has the same layout
- static_assert(sizeof(QByteArray::DataPointer) == sizeof(QString::DataPointer), "sizes have to be equal");
- QByteArray::DataPointer ba_d(reinterpret_cast<QByteArray::Data *>(s.d.d_ptr()), reinterpret_cast<char *>(s.d.data()), length);
- ba_d.ref();
- s.clear();
+ // Some sanity checks
+ Q_ASSERT(ba_d.d->allocatedCapacity() >= ba_d.size);
+ Q_ASSERT(s.isNull());
+ Q_ASSERT(s.isEmpty());
+ Q_ASSERT(s.constData() == QString().constData());
- char *ddata = ba_d.data();
+ return QByteArray(std::move(ba_d));
+}
- // multiply the allocated capacity by sizeof(char16_t)
- ba_d.d_ptr()->alloc *= sizeof(char16_t);
+// QLatin1 methods that use helpers from qstring.cpp
+char16_t *QLatin1::convertToUnicode(char16_t *out, QLatin1StringView in) noexcept
+{
+ const qsizetype len = in.size();
+ qt_from_latin1(out, in.data(), len);
+ return std::next(out, len);
+}
- // do the in-place conversion
- qt_to_latin1(reinterpret_cast<uchar *>(ddata), data, length);
- ddata[length] = '\0';
- return QByteArray(ba_d);
+char *QLatin1::convertFromUnicode(char *out, QStringView in) noexcept
+{
+ const qsizetype len = in.size();
+ qt_to_latin1(reinterpret_cast<uchar *>(out), in.utf16(), len);
+ return out + len;
}
/*!
@@ -4990,15 +5716,13 @@ static QByteArray qt_convert_to_local_8bit(QStringView string);
\fn QByteArray QString::toLocal8Bit() const
Returns the local 8-bit representation of the string as a
- QByteArray. The returned byte array is undefined if the string
- contains characters not supported by the local 8-bit encoding.
+ QByteArray.
- On Unix systems this is equivalen to toUtf8(), on Windows the systems
- current code page is being used.
+ \include qstring.qdocinc {qstring-local-8-bit-equivalent} {toUtf8}
If this string contains any characters that cannot be encoded in the
- locale, the returned byte array is undefined. Those characters may be
- suppressed or replaced by another.
+ local 8-bit encoding, the returned byte array is undefined. Those
+ characters may be suppressed or replaced by another.
\sa fromLocal8Bit(), toLatin1(), toUtf8(), QStringEncoder
*/
@@ -5023,7 +5747,7 @@ static QByteArray qt_convert_to_local_8bit(QStringView string)
Returns a local 8-bit representation of \a string as a QByteArray.
- On Unix systems this is equivalen to toUtf8(), on Windows the systems
+ On Unix systems this is equivalent to toUtf8(), on Windows the systems
current code page is being used.
The behavior is undefined if \a string contains characters not
@@ -5059,7 +5783,7 @@ static QByteArray qt_convert_to_utf8(QStringView str)
if (str.isNull())
return QByteArray();
- return QUtf8::convertFromUnicode(str.data(), str.length());
+ return QUtf8::convertFromUnicode(str);
}
/*!
@@ -5093,7 +5817,8 @@ static QList<uint> qt_convert_to_ucs4(QStringView string);
The returned list is not \\0'-terminated.
- \sa fromUtf8(), toUtf8(), toLatin1(), toLocal8Bit(), QStringEncoder, fromUcs4(), toWCharArray()
+ \sa fromUtf8(), toUtf8(), toLatin1(), toLocal8Bit(), QStringEncoder,
+ fromUcs4(), toWCharArray()
*/
QList<uint> QString::toUcs4() const
{
@@ -5102,7 +5827,7 @@ QList<uint> QString::toUcs4() const
static QList<uint> qt_convert_to_ucs4(QStringView string)
{
- QList<uint> v(string.length());
+ QList<uint> v(string.size());
uint *a = const_cast<uint*>(v.constData());
QStringIterator it(string);
while (it.hasNext())
@@ -5133,30 +5858,40 @@ QList<uint> QtPrivate::convertToUcs4(QStringView string)
return qt_convert_to_ucs4(string);
}
-QString::DataPointer QString::fromLatin1_helper(const char *str, qsizetype size)
+/*!
+ \fn QString QString::fromLatin1(QByteArrayView str)
+ \overload
+ \since 6.0
+
+ Returns a QString initialized with the Latin-1 string \a str.
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000).
+*/
+QString QString::fromLatin1(QByteArrayView ba)
{
DataPointer d;
- if (!str) {
+ if (!ba.data()) {
// nothing to do
- } else if (size == 0 || (!*str && size < 0)) {
+ } else if (ba.size() == 0) {
d = DataPointer::fromRawData(&_empty, 0);
} else {
- if (size < 0)
- size = qstrlen(str);
- d = DataPointer(Data::allocate(size), size);
- d.data()[size] = '\0';
+ d = DataPointer(ba.size(), ba.size());
+ Q_CHECK_PTR(d.data());
+ d.data()[ba.size()] = '\0';
char16_t *dst = d.data();
- qt_from_latin1(dst, str, size_t(size));
+
+ qt_from_latin1(dst, ba.data(), size_t(ba.size()));
}
- return d;
+ return QString(std::move(d));
}
-/*! \fn QString QString::fromLatin1(const char *str, qsizetype size)
+/*!
+ \fn QString QString::fromLatin1(const char *str, qsizetype size)
Returns a QString initialized with the first \a size characters
of the Latin-1 string \a str.
- If \a size is -1 (default), it is taken to be strlen(\a
- str).
+ If \a size is \c{-1}, \c{strlen(str)} is used instead.
\sa toLatin1(), fromUtf8(), fromLocal8Bit()
*/
@@ -5167,17 +5902,20 @@ QString::DataPointer QString::fromLatin1_helper(const char *str, qsizetype size)
\since 5.0
Returns a QString initialized with the Latin-1 string \a str.
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000). This behavior is
+ different from Qt 5.x.
*/
-/*! \fn QString QString::fromLocal8Bit(const char *str, qsizetype size)
+/*!
+ \fn QString QString::fromLocal8Bit(const char *str, qsizetype size)
Returns a QString initialized with the first \a size characters
of the 8-bit string \a str.
- If \a size is -1 (default), it is taken to be strlen(\a
- str).
+ If \a size is \c{-1}, \c{strlen(str)} is used instead.
- On Unix systems this is equivalen to fromUtf8(), on Windows the systems
- current code page is being used.
+ \include qstring.qdocinc {qstring-local-8-bit-equivalent} {fromUtf8}
\sa toLocal8Bit(), fromLatin1(), fromUtf8()
*/
@@ -5188,25 +5926,41 @@ QString::DataPointer QString::fromLatin1_helper(const char *str, qsizetype size)
\since 5.0
Returns a QString initialized with the 8-bit string \a str.
+
+ \include qstring.qdocinc {qstring-local-8-bit-equivalent} {fromUtf8}
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000). This behavior is
+ different from Qt 5.x.
*/
-QString QString::fromLocal8Bit_helper(const char *str, qsizetype size)
+
+/*!
+ \fn QString QString::fromLocal8Bit(QByteArrayView str)
+ \overload
+ \since 6.0
+
+ Returns a QString initialized with the 8-bit string \a str.
+
+ \include qstring.qdocinc {qstring-local-8-bit-equivalent} {fromUtf8}
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000).
+*/
+QString QString::fromLocal8Bit(QByteArrayView ba)
{
- if (!str)
+ if (ba.isNull())
return QString();
- if (size < 0)
- size = qstrlen(str);
- if (size == 0)
+ if (ba.isEmpty())
return QString(DataPointer::fromRawData(&_empty, 0));
QStringDecoder toUtf16(QStringDecoder::System, QStringDecoder::Flag::Stateless);
- return toUtf16(str, size);
+ return toUtf16(ba);
}
/*! \fn QString QString::fromUtf8(const char *str, qsizetype size)
Returns a QString initialized with the first \a size bytes
of the UTF-8 string \a str.
- If \a size is -1 (default), it is taken to be strlen(\a
- str).
+ If \a size is \c{-1}, \c{strlen(str)} is used instead.
UTF-8 is a Unicode codec and can represent all characters in a Unicode
string like QString. However, invalid sequences are possible with UTF-8
@@ -5224,6 +5978,14 @@ QString QString::fromLocal8Bit_helper(const char *str, qsizetype size)
*/
/*!
+ \fn QString QString::fromUtf8(const char8_t *str)
+ \overload
+ \since 6.1
+
+ This overload is only available when compiling in C++20 mode.
+*/
+
+/*!
\fn QString QString::fromUtf8(const char8_t *str, qsizetype size)
\overload
\since 6.0
@@ -5237,16 +5999,32 @@ QString QString::fromLocal8Bit_helper(const char *str, qsizetype size)
\since 5.0
Returns a QString initialized with the UTF-8 string \a str.
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000). This behavior is
+ different from Qt 5.x.
+*/
+
+/*!
+ \fn QString QString::fromUtf8(QByteArrayView str)
+ \overload
+ \since 6.0
+
+ Returns a QString initialized with the UTF-8 string \a str.
+
+ \note: any null ('\\0') bytes in the byte array will be included in this
+ string, converted to Unicode null characters (U+0000).
*/
-QString QString::fromUtf8_helper(const char *str, qsizetype size)
+QString QString::fromUtf8(QByteArrayView ba)
{
- if (!str)
+ if (ba.isNull())
return QString();
-
- Q_ASSERT(size != -1);
- return QUtf8::convertToUnicode(str, size);
+ if (ba.isEmpty())
+ return QString(DataPointer::fromRawData(&_empty, 0));
+ return QUtf8::convertToUnicode(ba);
}
+#ifndef QT_BOOTSTRAPPED
/*!
\since 5.3
Returns a QString initialized with the first \a size characters
@@ -5258,7 +6036,7 @@ QString QString::fromUtf8_helper(const char *str, qsizetype size)
host byte order is assumed.
This function is slow compared to the other Unicode conversions.
- Use QString(const QChar *, int) or QString(const QChar *) if possible.
+ Use QString(const QChar *, qsizetype) or QString(const QChar *) if possible.
QString makes a deep copy of the Unicode data.
@@ -5268,28 +6046,21 @@ QString QString::fromUtf16(const char16_t *unicode, qsizetype size)
{
if (!unicode)
return QString();
- if (size < 0) {
- size = 0;
- while (unicode[size] != 0)
- ++size;
- }
+ if (size < 0)
+ size = QtPrivate::qustrlen(unicode);
QStringDecoder toUtf16(QStringDecoder::Utf16, QStringDecoder::Flag::Stateless);
- return toUtf16(reinterpret_cast<const char *>(unicode), size*2);
+ return toUtf16(QByteArrayView(reinterpret_cast<const char *>(unicode), size * 2));
}
/*!
\fn QString QString::fromUtf16(const ushort *str, qsizetype size)
- \obsolete
-
- Use the \c char16_t overload.
+ \deprecated [6.0] Use the \c char16_t overload instead.
*/
/*!
\fn QString QString::fromUcs4(const uint *str, qsizetype size)
\since 4.2
- \obsolete
-
- Use the \c char32_t overload instead.
+ \deprecated [6.0] Use the \c char32_t overload instead.
*/
/*!
@@ -5300,7 +6071,8 @@ QString QString::fromUtf16(const char16_t *unicode, qsizetype size)
If \a size is -1 (default), \a unicode must be \\0'-terminated.
- \sa toUcs4(), fromUtf16(), utf16(), setUtf16(), fromWCharArray(), fromStdU32String()
+ \sa toUcs4(), fromUtf16(), utf16(), setUtf16(), fromWCharArray(),
+ fromStdU32String()
*/
QString QString::fromUcs4(const char32_t *unicode, qsizetype size)
{
@@ -5312,15 +6084,15 @@ QString QString::fromUcs4(const char32_t *unicode, qsizetype size)
++size;
}
QStringDecoder toUtf16(QStringDecoder::Utf32, QStringDecoder::Flag::Stateless);
- return toUtf16(reinterpret_cast<const char *>(unicode), size*4);
+ return toUtf16(QByteArrayView(reinterpret_cast<const char *>(unicode), size * 4));
}
-
+#endif // !QT_BOOTSTRAPPED
/*!
Resizes the string to \a size characters and copies \a unicode
into the string.
- If \a unicode is 0, nothing is copied, but the string is still
+ If \a unicode is \nullptr, nothing is copied, but the string is still
resized to \a size.
\sa unicode(), setUtf16()
@@ -5339,7 +6111,7 @@ QString& QString::setUnicode(const QChar *unicode, qsizetype size)
Resizes the string to \a size characters and copies \a unicode
into the string.
- If \a unicode is 0, nothing is copied, but the string is still
+ If \a unicode is \nullptr, nothing is copied, but the string is still
resized to \a size.
Note that unlike fromUtf16(), this function does not consider BOMs and
@@ -5379,16 +6151,14 @@ namespace {
template <typename StringView>
StringView qt_trimmed(StringView s) noexcept
{
- auto begin = s.begin();
- auto end = s.end();
- QStringAlgorithms<const StringView>::trimmed_helper_positions(begin, end);
+ const auto [begin, end] = QStringAlgorithms<const StringView>::trimmed_helper_positions(s);
return StringView{begin, end};
}
}
/*!
\fn QStringView QtPrivate::trimmed(QStringView s)
- \fn QLatin1String QtPrivate::trimmed(QLatin1String s)
+ \fn QLatin1StringView QtPrivate::trimmed(QLatin1StringView s)
\internal
\relates QStringView
\since 5.10
@@ -5399,14 +6169,14 @@ namespace {
\c true. This includes the ASCII characters '\\t', '\\n', '\\v',
'\\f', '\\r', and ' '.
- \sa QString::trimmed(), QStringView::trimmed(), QLatin1String::trimmed()
+ \sa QString::trimmed(), QStringView::trimmed(), QLatin1StringView::trimmed()
*/
QStringView QtPrivate::trimmed(QStringView s) noexcept
{
return qt_trimmed(s);
}
-QLatin1String QtPrivate::trimmed(QLatin1String s) noexcept
+QLatin1StringView QtPrivate::trimmed(QLatin1StringView s) noexcept
{
return qt_trimmed(s);
}
@@ -5543,7 +6313,7 @@ QString QString::trimmed_helper(QString &str)
If \a position is negative, it is equivalent to passing zero.
- \sa chop(), resize(), left(), QStringView::truncate()
+ \sa chop(), resize(), first(), QStringView::truncate()
*/
void QString::truncate(qsizetype pos)
@@ -5588,12 +6358,8 @@ void QString::chop(qsizetype n)
QString& QString::fill(QChar ch, qsizetype size)
{
resize(size < 0 ? d.size : size);
- if (d.size) {
- QChar *i = (QChar*)d.data() + d.size;
- QChar *b = (QChar*)d.data();
- while (i != b)
- *--i = ch;
- }
+ if (d.size)
+ std::fill(d.data(), d.data() + d.size, ch.unicode());
return *this;
}
@@ -5619,6 +6385,16 @@ QString& QString::fill(QChar ch, qsizetype size)
\sa isEmpty(), resize()
*/
+/*!
+ \fn qsizetype QString::max_size()
+ \since 6.8
+
+ This function is provided for STL compatibility.
+ It returns the maximum number of elements that the string can
+ theoretically hold. In practice, the number can be much smaller,
+ limited by the amount of memory available to the system.
+*/
+
/*! \fn bool QString::isNull() const
Returns \c true if this string is null; otherwise returns \c false.
@@ -5664,11 +6440,18 @@ QString& QString::fill(QChar ch, qsizetype size)
\sa append(), prepend()
*/
-/*! \fn QString &QString::operator+=(QLatin1String str)
+/*! \fn QString &QString::operator+=(QLatin1StringView str)
\overload operator+=()
- Appends the Latin-1 string \a str to this string.
+ Appends the Latin-1 string viewed by \a str to this string.
+*/
+
+/*! \fn QString &QString::operator+=(QUtf8StringView str)
+ \since 6.5
+ \overload operator+=()
+
+ Appends the UTF-8 string view \a str to this string.
*/
/*! \fn QString &QString::operator+=(const QByteArray &ba)
@@ -5680,12 +6463,10 @@ QString& QString::fill(QChar ch, qsizetype size)
are embedded in the \a ba byte array, they will be included in the
transformation.
- You can disable this function by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
+ You can disable this function by defining
+ \l QT_NO_CAST_FROM_ASCII when you compile your applications. This
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*! \fn QString &QString::operator+=(const char *str)
@@ -5695,12 +6476,10 @@ QString& QString::fill(QChar ch, qsizetype size)
Appends the string \a str to this string. The const char pointer
is converted to Unicode using the fromUtf8() function.
- You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
+ You can disable this function by defining \l QT_NO_CAST_FROM_ASCII
when you compile your applications. This can be useful if you want
to ensure that all user-visible strings go through QObject::tr(),
for example.
-
- \sa QT_NO_CAST_FROM_ASCII
*/
/*! \fn QString &QString::operator+=(QStringView str)
@@ -5718,73 +6497,68 @@ QString& QString::fill(QChar ch, qsizetype size)
*/
/*!
- \fn bool operator==(const char *s1, const QString &s2)
+ \fn bool QString::operator==(const char * const &lhs, const QString &rhs)
- \overload operator==()
- \relates QString
+ \overload operator==()
- Returns \c true if \a s1 is equal to \a s2; otherwise returns \c false.
- Note that no string is equal to \a s1 being 0.
+ Returns \c true if \a lhs is equal to \a rhs; otherwise returns \c false.
+ Note that no string is equal to \a lhs being 0.
- Equivalent to \c {s1 != 0 && compare(s1, s2) == 0}.
+ Equivalent to \c {lhs != 0 && compare(lhs, rhs) == 0}.
*/
/*!
- \fn bool operator!=(const char *s1, const QString &s2)
- \relates QString
+ \fn bool QString::operator!=(const char * const &lhs, const QString &rhs)
- Returns \c true if \a s1 is not equal to \a s2; otherwise returns
+ Returns \c true if \a lhs is not equal to \a rhs; otherwise returns
\c false.
- For \a s1 != 0, this is equivalent to \c {compare(} \a s1, \a s2
- \c {) != 0}. Note that no string is equal to \a s1 being 0.
+ For \a lhs != 0, this is equivalent to \c {compare(} \a lhs, \a rhs
+ \c {) != 0}. Note that no string is equal to \a lhs being 0.
*/
/*!
- \fn bool operator<(const char *s1, const QString &s2)
- \relates QString
+ \fn bool QString::operator<(const char * const &lhs, const QString &rhs)
- Returns \c true if \a s1 is lexically less than \a s2; otherwise
- returns \c false. For \a s1 != 0, this is equivalent to \c
- {compare(s1, s2) < 0}.
+ Returns \c true if \a lhs is lexically less than \a rhs; otherwise
+ returns \c false. For \a lhs != 0, this is equivalent to \c
+ {compare(lhs, rhs) < 0}.
\sa {Comparing Strings}
*/
/*!
- \fn bool operator<=(const char *s1, const QString &s2)
- \relates QString
+ \fn bool QString::operator<=(const char * const &lhs, const QString &rhs)
- Returns \c true if \a s1 is lexically less than or equal to \a s2;
- otherwise returns \c false. For \a s1 != 0, this is equivalent to \c
- {compare(s1, s2) <= 0}.
+ Returns \c true if \a lhs is lexically less than or equal to \a rhs;
+ otherwise returns \c false. For \a lhs != 0, this is equivalent to \c
+ {compare(lhs, rhs) <= 0}.
\sa {Comparing Strings}
*/
/*!
- \fn bool operator>(const char *s1, const QString &s2)
- \relates QString
+ \fn bool QString::operator>(const char * const &lhs, const QString &rhs)
- Returns \c true if \a s1 is lexically greater than \a s2; otherwise
- returns \c false. Equivalent to \c {compare(s1, s2) > 0}.
+ Returns \c true if \a lhs is lexically greater than \a rhs; otherwise
+ returns \c false. Equivalent to \c {compare(lhs, rhs) > 0}.
\sa {Comparing Strings}
*/
/*!
- \fn bool operator>=(const char *s1, const QString &s2)
- \relates QString
+ \fn bool QString::operator>=(const char * const &lhs, const QString &rhs)
- Returns \c true if \a s1 is lexically greater than or equal to \a s2;
- otherwise returns \c false. For \a s1 != 0, this is equivalent to \c
- {compare(s1, s2) >= 0}.
+ Returns \c true if \a lhs is lexically greater than or equal to \a rhs;
+ otherwise returns \c false. For \a lhs != 0, this is equivalent to \c
+ {compare(lhs, rhs) >= 0}.
\sa {Comparing Strings}
*/
/*!
- \fn const QString operator+(const QString &s1, const QString &s2)
+ \fn QString operator+(const QString &s1, const QString &s2)
+ \fn QString operator+(QString &&s1, const QString &s2)
\relates QString
Returns a string which is the result of concatenating \a s1 and \a
@@ -5792,7 +6566,7 @@ QString& QString::fill(QChar ch, qsizetype size)
*/
/*!
- \fn const QString operator+(const QString &s1, const char *s2)
+ \fn QString operator+(const QString &s1, const char *s2)
\relates QString
Returns a string which is the result of concatenating \a s1 and \a
@@ -5803,7 +6577,7 @@ QString& QString::fill(QChar ch, qsizetype size)
*/
/*!
- \fn const QString operator+(const char *s1, const QString &s2)
+ \fn QString operator+(const char *s1, const QString &s2)
\relates QString
Returns a string which is the result of concatenating \a s1 and \a
@@ -5817,12 +6591,11 @@ QString& QString::fill(QChar ch, qsizetype size)
\fn int QString::compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs)
\since 4.2
- Compares \a s1 with \a s2 and returns an integer less than, equal
- to, or greater than zero if \a s1 is less than, equal to, or
- greater than \a s2.
+ Compares the string \a s1 with the string \a s2 and returns a negative integer
+ if \a s1 is less than \a s2, a positive integer if it is greater than \a s2,
+ and zero if they are equal.
- If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
- otherwise the comparison is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
Case sensitive comparison is based exclusively on the numeric
Unicode values of the characters and is very fast, but is not what
@@ -5831,11 +6604,16 @@ QString& QString::fill(QChar ch, qsizetype size)
\snippet qstring/main.cpp 16
+//! [compare-isNull-vs-isEmpty]
+ \note This function treats null strings the same as empty strings,
+ for more details see \l {Distinction Between Null and Empty Strings}.
+//! [compare-isNull-vs-isEmpty]
+
\sa operator==(), operator<(), operator>(), {Comparing Strings}
*/
/*!
- \fn int QString::compare(const QString &s1, QLatin1String s2, Qt::CaseSensitivity cs)
+ \fn int QString::compare(const QString &s1, QLatin1StringView s2, Qt::CaseSensitivity cs)
\since 4.2
\overload compare()
@@ -5844,7 +6622,7 @@ QString& QString::fill(QChar ch, qsizetype size)
*/
/*!
- \fn int QString::compare(QLatin1String s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
+ \fn int QString::compare(QLatin1StringView s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
\since 4.2
\overload compare()
@@ -5873,23 +6651,20 @@ QString& QString::fill(QChar ch, qsizetype size)
sensitivity setting \a cs.
*/
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\overload compare()
\since 4.2
- Lexically compares this string with the \a other string and
- returns an integer less than, equal to, or greater than zero if
- this string is less than, equal to, or greater than the other
- string.
+ Lexically compares this string with the string \a other and returns
+ a negative integer if this string is less than \a other, a positive
+ integer if it is greater than \a other, and zero if they are equal.
Same as compare(*this, \a other, \a cs).
*/
int QString::compare(const QString &other, Qt::CaseSensitivity cs) const noexcept
{
- return qt_compare_strings(*this, other, cs);
+ return QtPrivate::compareStrings(*this, other, cs);
}
-#endif
/*!
\internal
@@ -5902,7 +6677,7 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, const QChar *
Q_ASSERT(length2 >= 0);
Q_ASSERT(data1 || length1 == 0);
Q_ASSERT(data2 || length2 == 0);
- return qt_compare_strings(QStringView(data1, length1), QStringView(data2, length2), cs);
+ return QtPrivate::compareStrings(QStringView(data1, length1), QStringView(data2, length2), cs);
}
/*!
@@ -5911,9 +6686,9 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, const QChar *
Same as compare(*this, \a other, \a cs).
*/
-int QString::compare(QLatin1String other, Qt::CaseSensitivity cs) const noexcept
+int QString::compare(QLatin1StringView other, Qt::CaseSensitivity cs) const noexcept
{
- return qt_compare_strings(*this, other, cs);
+ return QtPrivate::compareStrings(*this, other, cs);
}
/*!
@@ -5921,19 +6696,16 @@ int QString::compare(QLatin1String other, Qt::CaseSensitivity cs) const noexcept
\since 5.0
*/
int QString::compare_helper(const QChar *data1, qsizetype length1, const char *data2, qsizetype length2,
- Qt::CaseSensitivity cs)
+ Qt::CaseSensitivity cs) noexcept
{
Q_ASSERT(length1 >= 0);
Q_ASSERT(data1 || length1 == 0);
if (!data2)
- return length1;
+ return qt_lencmp(length1, 0);
if (Q_UNLIKELY(length2 < 0))
length2 = qsizetype(strlen(data2));
- // ### make me nothrow in all cases
- QVarLengthArray<ushort> s2(length2);
- const auto beg = reinterpret_cast<QChar *>(s2.data());
- const auto end = QUtf8::convertToUnicode(beg, data2, length2);
- return qt_compare_strings(QStringView(data1, length1), QStringView(beg, end - beg), cs);
+ return QtPrivate::compareStrings(QStringView(data1, length1),
+ QUtf8StringView(data2, length2), cs);
}
/*!
@@ -5946,16 +6718,120 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, const char *d
\overload compare()
*/
+bool comparesEqual(const QByteArrayView &lhs, const QChar &rhs) noexcept
+{
+ return QtPrivate::equalStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+}
+
+Qt::strong_ordering compareThreeWay(const QByteArrayView &lhs, const QChar &rhs) noexcept
+{
+ const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+ return Qt::compareThreeWay(res, 0);
+}
+
+bool comparesEqual(const QByteArrayView &lhs, char16_t rhs) noexcept
+{
+ return QtPrivate::equalStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+}
+
+Qt::strong_ordering compareThreeWay(const QByteArrayView &lhs, char16_t rhs) noexcept
+{
+ const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+ return Qt::compareThreeWay(res, 0);
+}
+
+bool comparesEqual(const QByteArray &lhs, const QChar &rhs) noexcept
+{
+ return QtPrivate::equalStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+}
+
+Qt::strong_ordering compareThreeWay(const QByteArray &lhs, const QChar &rhs) noexcept
+{
+ const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+ return Qt::compareThreeWay(res, 0);
+}
+
+bool comparesEqual(const QByteArray &lhs, char16_t rhs) noexcept
+{
+ return QtPrivate::equalStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+}
+
+Qt::strong_ordering compareThreeWay(const QByteArray &lhs, char16_t rhs) noexcept
+{
+ const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1));
+ return Qt::compareThreeWay(res, 0);
+}
+
+/*!
+ \internal
+ \since 6.8
+*/
+bool QT_FASTCALL QChar::equal_helper(QChar lhs, const char *rhs) noexcept
+{
+ return QtPrivate::equalStrings(QStringView(&lhs, 1), QUtf8StringView(rhs));
+}
+
+int QT_FASTCALL QChar::compare_helper(QChar lhs, const char *rhs) noexcept
+{
+ return QtPrivate::compareStrings(QStringView(&lhs, 1), QUtf8StringView(rhs));
+}
+
+/*!
+ \internal
+ \since 6.8
+*/
+bool QStringView::equal_helper(QStringView sv, const char *data, qsizetype len)
+{
+ Q_ASSERT(len >= 0);
+ Q_ASSERT(data || len == 0);
+ return QtPrivate::equalStrings(sv, QUtf8StringView(data, len));
+}
+
+/*!
+ \internal
+ \since 6.8
+*/
+int QStringView::compare_helper(QStringView sv, const char *data, qsizetype len)
+{
+ Q_ASSERT(len >= 0);
+ Q_ASSERT(data || len == 0);
+ return QtPrivate::compareStrings(sv, QUtf8StringView(data, len));
+}
+
+/*!
+ \internal
+ \since 6.8
+*/
+bool QLatin1StringView::equal_helper(QLatin1StringView s1, const char *s2, qsizetype len) noexcept
+{
+ // because qlatin1stringview.h can't include qutf8stringview.h
+ Q_ASSERT(len >= 0);
+ Q_ASSERT(s2 || len == 0);
+ return QtPrivate::equalStrings(s1, QUtf8StringView(s2, len));
+}
+
+/*!
+ \internal
+ \since 6.6
+*/
+int QLatin1StringView::compare_helper(const QLatin1StringView &s1, const char *s2, qsizetype len) noexcept
+{
+ // because qlatin1stringview.h can't include qutf8stringview.h
+ Q_ASSERT(len >= 0);
+ Q_ASSERT(s2 || len == 0);
+ return QtPrivate::compareStrings(s1, QUtf8StringView(s2, len));
+}
+
/*!
\internal
\since 4.5
*/
-int QString::compare_helper(const QChar *data1, qsizetype length1, QLatin1String s2,
- Qt::CaseSensitivity cs) noexcept
+int QLatin1StringView::compare_helper(const QChar *data1, qsizetype length1, QLatin1StringView s2,
+ Qt::CaseSensitivity cs) noexcept
{
Q_ASSERT(length1 >= 0);
Q_ASSERT(data1 || length1 == 0);
- return qt_compare_strings(QStringView(data1, length1), s2, cs);
+ return QtPrivate::compareStrings(QStringView(data1, length1), s2, cs);
}
/*!
@@ -6030,13 +6906,9 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, QLatin1String
*/
int QString::localeAwareCompare(const QString &other) const
{
- return localeAwareCompare_helper(constData(), length(), other.constData(), other.length());
+ return localeAwareCompare_helper(constData(), size(), other.constData(), other.size());
}
-#if QT_CONFIG(icu)
-Q_GLOBAL_STATIC(QThreadStorage<QCollator>, defaultCollator)
-#endif
-
/*!
\internal
\since 4.5
@@ -6051,13 +6923,11 @@ int QString::localeAwareCompare_helper(const QChar *data1, qsizetype length1,
// do the right thing for null and empty
if (length1 == 0 || length2 == 0)
- return qt_compare_strings(QStringView(data1, length1), QStringView(data2, length2),
+ return QtPrivate::compareStrings(QStringView(data1, length1), QStringView(data2, length2),
Qt::CaseSensitive);
#if QT_CONFIG(icu)
- if (!defaultCollator()->hasLocalData())
- defaultCollator()->setLocalData(QCollator());
- return defaultCollator()->localData().compare(data1, length1, data2, length2);
+ return QCollator::defaultCompare(QStringView(data1, length1), QStringView(data2, length2));
#else
const QString lhs = QString::fromRawData(data1, length1).normalized(QString::NormalizationForm_C);
const QString rhs = QString::fromRawData(data2, length2).normalized(QString::NormalizationForm_C);
@@ -6089,11 +6959,11 @@ int QString::localeAwareCompare_helper(const QChar *data1, qsizetype length1,
CFRelease(otherString);
return result;
# elif defined(Q_OS_UNIX)
- // declared in <string.h> (no better than qt_compare_strings() on Android, sadly)
+ // declared in <string.h> (no better than QtPrivate::compareStrings() on Android, sadly)
return strcoll(lhs.toLocal8Bit().constData(), rhs.toLocal8Bit().constData());
# else
# error "This case shouldn't happen"
- return qt_compare_strings(lhs, rhs, Qt::CaseSensitive);
+ return QtPrivate::compareStrings(lhs, rhs, Qt::CaseSensitive);
# endif
#endif // !QT_CONFIG(icu)
}
@@ -6126,7 +6996,7 @@ const ushort *QString::utf16() const
{
if (!d->isMutable()) {
// ensure '\0'-termination for ::fromRawData strings
- const_cast<QString*>(this)->reallocData(d.size, d->detachFlags());
+ const_cast<QString*>(this)->reallocData(d.size, QArrayData::KeepSize);
}
return reinterpret_cast<const ushort *>(d.data());
}
@@ -6152,7 +7022,7 @@ const ushort *QString::utf16() const
QString QString::leftJustified(qsizetype width, QChar fill, bool truncate) const
{
QString result;
- qsizetype len = length();
+ qsizetype len = size();
qsizetype padlen = width - len;
if (padlen > 0) {
result.resize(len+padlen);
@@ -6191,7 +7061,7 @@ QString QString::leftJustified(qsizetype width, QChar fill, bool truncate) const
QString QString::rightJustified(qsizetype width, QChar fill, bool truncate) const
{
QString result;
- qsizetype len = length();
+ qsizetype len = size();
qsizetype padlen = width - len;
if (padlen > 0) {
result.resize(len+padlen);
@@ -6216,8 +7086,8 @@ QString QString::rightJustified(qsizetype width, QChar fill, bool truncate) cons
\snippet qstring/main.cpp 75
- The case conversion will always happen in the 'C' locale. For locale dependent
- case folding use QLocale::toLower()
+ The case conversion will always happen in the 'C' locale. For
+ locale-dependent case folding use QLocale::toLower()
\sa toUpper(), QLocale::toLower()
*/
@@ -6240,9 +7110,9 @@ namespace QUnicodeTables {
\endlist
In copy-convert mode, the local variable \c{s} is detached from the input
- \a str. In the in-place convert mode, \a str is in moved-from state (which
- this function requires to be a valid, empty string) and \c{s} contains the
- only copy of the string, without reallocation (thus, \a it is still valid).
+ \a str. In the in-place convert mode, \a str is in moved-from state and
+ \c{s} contains the only copy of the string, without reallocation (thus,
+ \a it is still valid).
There is one pathological case left: when the in-place conversion needs to
reallocate memory to grow the buffer. In that case, we need to adjust the \a
@@ -6253,7 +7123,7 @@ Q_NEVER_INLINE
static QString detachAndConvertCase(T &str, QStringIterator it, QUnicodeTables::Case which)
{
Q_ASSERT(!str.isEmpty());
- QString s = std::move(str); // will copy if T is const QString
+ QString s = std::move(str); // will copy if T is const QString
QChar *pp = s.begin() + it.index(); // will detach if necessary
do {
@@ -6272,9 +7142,8 @@ static QString detachAndConvertCase(T &str, QStringIterator it, QUnicodeTables::
s.replace(outpos, 1, reinterpret_cast<const QChar *>(folded.data()), folded.size());
pp = const_cast<QChar *>(s.constBegin()) + outpos + folded.size();
- // do we need to adjust the input iterator too?
- // if it is pointing to s's data, str is empty
- if (str.isEmpty())
+ // Adjust the input iterator if we are performing an in-place conversion
+ if constexpr (!std::is_const<T>::value)
it = QStringIterator(s.constBegin(), inpos + folded.size(), s.constEnd());
}
} else {
@@ -6341,8 +7210,8 @@ QString QString::toCaseFolded_helper(QString &str)
\snippet qstring/main.cpp 81
- The case conversion will always happen in the 'C' locale. For locale dependent
- case folding use QLocale::toUpper()
+ The case conversion will always happen in the 'C' locale. For
+ locale-dependent case folding use QLocale::toUpper()
\sa toLower(), QLocale::toLower()
*/
@@ -6400,11 +7269,11 @@ QString QString::asprintf(const char *cformat, ...)
return s;
}
-static void append_utf8(QString &qs, const char *cs, int len)
+static void append_utf8(QString &qs, const char *cs, qsizetype len)
{
- const int oldSize = qs.size();
+ const qsizetype oldSize = qs.size();
qs.resize(oldSize + len);
- const QChar *newEnd = QUtf8::convertToUnicode(qs.data() + oldSize, cs, len);
+ const QChar *newEnd = QUtf8::convertToUnicode(qs.data() + oldSize, QByteArrayView(cs, len));
qs.resize(newEnd - qs.constData());
}
@@ -6428,19 +7297,21 @@ static uint parse_flag_characters(const char * &c) noexcept
}
}
-static int parse_field_width(const char * &c)
+static int parse_field_width(const char *&c, qsizetype size)
{
- Q_ASSERT(qIsDigit(*c));
+ Q_ASSERT(isAsciiDigit(*c));
+ const char *const stop = c + size;
// can't be negative - started with a digit
// contains at least one digit
- const char *endp;
- bool ok;
- const qulonglong result = qstrtoull(c, &endp, 10, &ok);
- c = endp;
- while (qIsDigit(*c)) // preserve Qt 5.5 behavior of consuming all digits, no matter how many
+ auto [result, used] = qstrntoull(c, size, 10);
+ c += used;
+ if (used <= 0)
+ return false;
+ // preserve Qt 5.5 behavior of consuming all digits, no matter how many
+ while (c < stop && isAsciiDigit(*c))
++c;
- return ok && result < qulonglong(std::numeric_limits<int>::max()) ? int(result) : 0;
+ return result < qulonglong(std::numeric_limits<int>::max()) ? int(result) : 0;
}
enum LengthMod { lm_none, lm_hh, lm_h, lm_l, lm_ll, lm_L, lm_j, lm_z, lm_t };
@@ -6494,6 +7365,7 @@ QString QString::vasprintf(const char *cformat, va_list ap)
QString result;
const char *c = cformat;
+ const char *formatEnd = cformat + qstrlen(cformat);
for (;;) {
// Copy non-escape chars to result
const char *cb = c;
@@ -6509,11 +7381,11 @@ QString QString::vasprintf(const char *cformat, va_list ap)
++c;
if (*c == '\0') {
- result.append(QLatin1Char('%')); // a % at the end of the string - treat as non-escape text
+ result.append(u'%'); // a % at the end of the string - treat as non-escape text
break;
}
if (*c == '%') {
- result.append(QLatin1Char('%')); // %%
+ result.append(u'%'); // %%
++c;
continue;
}
@@ -6521,14 +7393,14 @@ QString QString::vasprintf(const char *cformat, va_list ap)
uint flags = parse_flag_characters(c);
if (*c == '\0') {
- result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
+ result.append(QLatin1StringView(escape_start)); // incomplete escape, treat as non-escape text
break;
}
// Parse field width
int width = -1; // -1 means unspecified
- if (qIsDigit(*c)) {
- width = parse_field_width(c);
+ if (isAsciiDigit(*c)) {
+ width = parse_field_width(c, formatEnd - c);
} else if (*c == '*') { // can't parse this in another function, not portably, at least
width = va_arg(ap, int);
if (width < 0)
@@ -6537,7 +7409,7 @@ QString QString::vasprintf(const char *cformat, va_list ap)
}
if (*c == '\0') {
- result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
+ result.append(QLatin1StringView(escape_start)); // incomplete escape, treat as non-escape text
break;
}
@@ -6545,8 +7417,9 @@ QString QString::vasprintf(const char *cformat, va_list ap)
int precision = -1; // -1 means unspecified
if (*c == '.') {
++c;
- if (qIsDigit(*c)) {
- precision = parse_field_width(c);
+ precision = 0;
+ if (isAsciiDigit(*c)) {
+ precision = parse_field_width(c, formatEnd - c);
} else if (*c == '*') { // can't parse this in another function, not portably, at least
precision = va_arg(ap, int);
if (precision < 0)
@@ -6556,14 +7429,14 @@ QString QString::vasprintf(const char *cformat, va_list ap)
}
if (*c == '\0') {
- result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
+ result.append(QLatin1StringView(escape_start)); // incomplete escape, treat as non-escape text
break;
}
const LengthMod length_mod = parse_length_modifier(c);
if (*c == '\0') {
- result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
+ result.append(QLatin1StringView(escape_start)); // incomplete escape, treat as non-escape text
break;
}
@@ -6606,11 +7479,11 @@ QString QString::vasprintf(const char *cformat, va_list ap)
default: u = 0; break;
}
- if (qIsUpper(*c))
+ if (isAsciiUpper(*c))
flags |= QLocaleData::CapitalEorX;
int base = 10;
- switch (qToLower(*c)) {
+ switch (QtMiscUtils::toAsciiLower(*c)) {
case 'o':
base = 8; break;
case 'u':
@@ -6637,11 +7510,11 @@ QString QString::vasprintf(const char *cformat, va_list ap)
else
d = va_arg(ap, double);
- if (qIsUpper(*c))
+ if (isAsciiUpper(*c))
flags |= QLocaleData::CapitalEorX;
QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- switch (qToLower(*c)) {
+ switch (QtMiscUtils::toAsciiLower(*c)) {
case 'e': form = QLocaleData::DFExponent; break;
case 'a': // not supported - decimal form used instead
case 'f': form = QLocaleData::DFDecimal; break;
@@ -6664,13 +7537,17 @@ QString QString::vasprintf(const char *cformat, va_list ap)
if (length_mod == lm_l) {
const ushort *buff = va_arg(ap, const ushort*);
const ushort *ch = buff;
- while (*ch != 0)
+ while (precision != 0 && *ch != 0) {
++ch;
+ --precision;
+ }
subst.setUtf16(buff, ch - buff);
- } else
+ } else if (precision == -1) {
subst = QString::fromUtf8(va_arg(ap, const char*));
- if (precision != -1)
- subst.truncate(precision);
+ } else {
+ const char *buff = va_arg(ap, const char*);
+ subst = QString::fromUtf8(buff, qstrnlen(buff, precision));
+ }
++c;
break;
}
@@ -6686,27 +7563,27 @@ QString QString::vasprintf(const char *cformat, va_list ap)
switch (length_mod) {
case lm_hh: {
signed char *n = va_arg(ap, signed char*);
- *n = result.length();
+ *n = result.size();
break;
}
case lm_h: {
short int *n = va_arg(ap, short int*);
- *n = result.length();
+ *n = result.size();
break;
}
case lm_l: {
long int *n = va_arg(ap, long int*);
- *n = result.length();
+ *n = result.size();
break;
}
case lm_ll: {
qint64 *n = va_arg(ap, qint64*);
- *n = result.length();
+ *n = result.size();
break;
}
default: {
int *n = va_arg(ap, int*);
- *n = result.length();
+ *n = int(result.size());
break;
}
}
@@ -6729,6 +7606,8 @@ QString QString::vasprintf(const char *cformat, va_list ap)
}
/*!
+ \fn QString::toLongLong(bool *ok, int base) const
+
Returns the string converted to a \c{long long} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
@@ -6736,12 +7615,13 @@ QString QString::vasprintf(const char *cformat, va_list ap)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toLongLong()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toLongLong()
Example:
@@ -6749,28 +7629,41 @@ QString QString::vasprintf(const char *cformat, va_list ap)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toULongLong(), toInt(), QLocale::toLongLong()
*/
-qint64 QString::toLongLong(bool *ok, int base) const
-{
- return toIntegral_helper<qlonglong>(*this, ok, base);
-}
-
-qlonglong QString::toIntegral_helper(QStringView string, bool *ok, int base)
+template <typename Int>
+static Int toIntegral(QStringView string, bool *ok, int base)
{
#if defined(QT_CHECK_RANGE)
if (base != 0 && (base < 2 || base > 36)) {
- qWarning("QString::toULongLong: Invalid base (%d)", base);
+ qWarning("QString::toIntegral: Invalid base (%d)", base);
base = 10;
}
#endif
- return QLocaleData::c()->stringToLongLong(string, base, ok, QLocale::RejectGroupSeparator);
+ QVarLengthArray<uchar> latin1(string.size());
+ qt_to_latin1(latin1.data(), string.utf16(), string.size());
+ QSimpleParsedNumber<Int> r;
+ if constexpr (std::is_signed_v<Int>)
+ r = QLocaleData::bytearrayToLongLong(latin1, base);
+ else
+ r = QLocaleData::bytearrayToUnsLongLong(latin1, base);
+ if (ok)
+ *ok = r.ok();
+ return r.result;
}
+qlonglong QString::toIntegral_helper(QStringView string, bool *ok, int base)
+{
+ return toIntegral<qlonglong>(string, ok, base);
+}
/*!
+ \fn QString::toULongLong(bool *ok, int base) const
+
Returns the string converted to an \c{unsigned long long} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
@@ -6778,12 +7671,13 @@ qlonglong QString::toIntegral_helper(QStringView string, bool *ok, int base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toULongLong()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toULongLong()
Example:
@@ -6791,24 +7685,14 @@ qlonglong QString::toIntegral_helper(QStringView string, bool *ok, int base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toLongLong(), QLocale::toULongLong()
*/
-quint64 QString::toULongLong(bool *ok, int base) const
-{
- return toIntegral_helper<qulonglong>(*this, ok, base);
-}
-
qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
{
-#if defined(QT_CHECK_RANGE)
- if (base != 0 && (base < 2 || base > 36)) {
- qWarning("QString::toULongLong: Invalid base (%d)", base);
- base = 10;
- }
-#endif
-
- return QLocaleData::c()->stringToUnsLongLong(string, base, ok, QLocale::RejectGroupSeparator);
+ return toIntegral<qulonglong>(string, ok, base);
}
/*!
@@ -6821,12 +7705,13 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toLongLong()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toLongLong()
Example:
@@ -6834,6 +7719,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toULong(), toInt(), QLocale::toInt()
*/
@@ -6847,12 +7734,13 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toULongLong()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toULongLong()
Example:
@@ -6860,6 +7748,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), QLocale::toUInt()
*/
@@ -6872,12 +7762,13 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toInt()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toInt()
Example:
@@ -6885,6 +7776,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toUInt(), toDouble(), QLocale::toInt()
*/
@@ -6897,12 +7790,13 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toUInt()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toUInt()
Example:
@@ -6910,6 +7804,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toInt(), QLocale::toUInt()
*/
@@ -6923,12 +7819,13 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toShort()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toShort()
Example:
@@ -6936,6 +7833,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toUShort(), toInt(), QLocale::toShort()
*/
@@ -6949,12 +7848,13 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
- base 8 is used; otherwise, base 10 is used.
+ If \a base is 0, the C language convention is used: if the string begins
+ with "0x", base 16 is used; otherwise, if the string begins with "0b", base
+ 2 is used; otherwise, if the string begins with "0", base 8 is used;
+ otherwise, base 10 is used.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toUShort()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toUShort()
Example:
@@ -6962,6 +7862,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
This function ignores leading and trailing whitespace.
+ \note Support for the "0b" prefix was added in Qt 6.4.
+
\sa number(), toShort(), QLocale::toUShort()
*/
@@ -6983,8 +7885,8 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
\snippet qstring/main.cpp 67
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toDouble()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toDouble()
\snippet qstring/main.cpp 68
@@ -7001,7 +7903,18 @@ qulonglong QString::toIntegral_helper(QStringView string, bool *ok, uint base)
double QString::toDouble(bool *ok) const
{
- return QLocaleData::c()->stringToDouble(*this, ok, QLocale::RejectGroupSeparator);
+ return QStringView(*this).toDouble(ok);
+}
+
+double QStringView::toDouble(bool *ok) const
+{
+ QStringView string = qt_trimmed(*this);
+ QVarLengthArray<uchar> latin1(string.size());
+ qt_to_latin1(latin1.data(), string.utf16(), string.size());
+ auto r = qt_asciiToDouble(reinterpret_cast<const char *>(latin1.data()), string.size());
+ if (ok != nullptr)
+ *ok = r.ok();
+ return r.result;
}
/*!
@@ -7018,8 +7931,8 @@ double QString::toDouble(bool *ok) const
notation, and the decimal point. Including the unit or additional characters
leads to a conversion error.
- The string conversion will always happen in the 'C' locale. For locale
- dependent conversion use QLocale::toFloat()
+ The string conversion will always happen in the 'C' locale. For
+ locale-dependent conversion use QLocale::toFloat()
For historical reasons, this function does not handle
thousands group separators. If you need to convert such numbers,
@@ -7039,13 +7952,17 @@ float QString::toFloat(bool *ok) const
return QLocaleData::convertDoubleToFloat(toDouble(ok), ok);
}
+float QStringView::toFloat(bool *ok) const
+{
+ return QLocaleData::convertDoubleToFloat(toDouble(ok), ok);
+}
+
/*! \fn QString &QString::setNum(int n, int base)
Sets the string to the printed value of \a n in the specified \a
base, and returns a reference to the string.
- The base is 10 by default and must be between 2 and 36. For bases
- other than 10, \a n is treated as an unsigned integer.
+ The base is 10 by default and must be between 2 and 36.
\snippet qstring/main.cpp 56
@@ -7098,26 +8015,17 @@ QString &QString::setNum(qulonglong n, int base)
*/
/*!
- \fn QString &QString::setNum(double n, char format, int precision)
\overload
- Sets the string to the printed value of \a n, formatted according
- to the given \a format and \a precision, and returns a reference
- to the string.
-
- The \a format can be 'e', 'E', 'f', 'g' or 'G' (see
- \l{Argument Formats} for an explanation of the formats).
-
- The formatting always uses QLocale::C, i.e., English/UnitedStates.
- To get a localized string representation of a number, use
- QLocale::toString() with the appropriate locale.
+ Sets the string to the printed value of \a n, formatted according to the
+ given \a format and \a precision, and returns a reference to the string.
- \sa number()
+ \sa number(), QLocale::FloatingPointPrecisionOption, {Number Formats}
*/
-QString &QString::setNum(double n, char f, int prec)
+QString &QString::setNum(double n, char format, int precision)
{
- return *this = number(n, f, prec);
+ return *this = number(n, format, precision);
}
/*!
@@ -7197,7 +8105,12 @@ QString QString::number(qlonglong n, int base)
base = 10;
}
#endif
- return QLocaleData::c()->longLongToString(n, -1, base);
+ bool negative = n < 0;
+ /*
+ Negating std::numeric_limits<qlonglong>::min() hits undefined behavior, so
+ taking an absolute value has to take a slight detour.
+ */
+ return qulltoBasicLatin(negative ? 1u + qulonglong(-(n + 1)) : qulonglong(n), base, negative);
}
/*!
@@ -7211,31 +8124,26 @@ QString QString::number(qulonglong n, int base)
base = 10;
}
#endif
- return QLocaleData::c()->unsLongLongToString(n, -1, base);
+ return qulltoBasicLatin(n, base, false);
}
/*!
- \fn QString QString::number(double n, char format, int precision)
+ Returns a string representing the floating-point number \a n.
- Returns a string equivalent of the number \a n, formatted
- according to the specified \a format and \a precision. See
- \l{Argument Formats} for details.
+ Returns a string that represents \a n, formatted according to the specified
+ \a format and \a precision.
- Unlike QLocale::toString(), this function does not honor the
- user's locale settings.
+ For formats with an exponent, the exponent will show its sign and have at
+ least two digits, left-padding the exponent with zero if needed.
- \sa setNum(), QLocale::toString()
+ \sa setNum(), QLocale::toString(), QLocale::FloatingPointPrecisionOption, {Number Formats}
*/
-QString QString::number(double n, char f, int prec)
+QString QString::number(double n, char format, int precision)
{
QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- uint flags = QLocaleData::ZeroPadExponent;
- if (qIsUpper(f))
- flags |= QLocaleData::CapitalEorX;
-
- switch (qToLower(f)) {
+ switch (QtMiscUtils::toAsciiLower(format)) {
case 'f':
form = QLocaleData::DFDecimal;
break;
@@ -7247,12 +8155,12 @@ QString QString::number(double n, char f, int prec)
break;
default:
#if defined(QT_CHECK_RANGE)
- qWarning("QString::setNum: Invalid format char '%c'", f);
+ qWarning("QString::setNum: Invalid format char '%c'", format);
#endif
break;
}
- return QLocaleData::c()->doubleToString(n, prec, form, -1, flags);
+ return qdtoBasicLatin(n, form, precision, isAsciiUpper(format));
}
namespace {
@@ -7266,12 +8174,12 @@ static ResultList splitString(const StringSource &source, QStringView sep,
typename StringSource::size_type extra = 0;
while ((end = QtPrivate::findString(QStringView(source.constData(), source.size()), start + extra, sep, cs)) != -1) {
if (start != end || behavior == Qt::KeepEmptyParts)
- list.append(source.mid(start, end - start));
+ list.append(source.sliced(start, end - start));
start = end + sep.size();
extra = (sep.size() == 0 ? 1 : 0);
}
if (start != source.size() || behavior == Qt::KeepEmptyParts)
- list.append(source.mid(start));
+ list.append(source.sliced(start));
return list;
}
@@ -7286,7 +8194,7 @@ static ResultList splitString(const StringSource &source, QStringView sep,
\a cs specifies whether \a sep should be matched case
sensitively or case insensitively.
- If \a behavior is QString::SkipEmptyParts, empty entries don't
+ If \a behavior is Qt::SkipEmptyParts, empty entries don't
appear in the result. By default, empty entries are kept.
Example:
@@ -7326,14 +8234,15 @@ QStringList QString::split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensit
\fn QList<QStringView> QStringView::split(QStringView sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const
- Splits the string into substring references wherever \a sep occurs, and
- returns the list of those strings.
+ Splits the view into substring views wherever \a sep occurs, and
+ returns the list of those string views.
See QString::split() for how \a sep, \a behavior and \a cs interact to form
the result.
- \note All references are valid as long this string is alive. Destroying this
- string will cause all references to be dangling pointers.
+ \note All the returned views are valid as long as the data referenced by
+ this string view is valid. Destroying the data will cause all views to
+ become dangling.
\since 6.0
*/
@@ -7349,29 +8258,30 @@ QList<QStringView> QStringView::split(QChar sep, Qt::SplitBehavior behavior, Qt:
#if QT_CONFIG(regularexpression)
namespace {
-template<class ResultList, typename String>
+template<class ResultList, typename String, typename MatchingFunction>
static ResultList splitString(const String &source, const QRegularExpression &re,
+ MatchingFunction matchingFunction,
Qt::SplitBehavior behavior)
{
ResultList list;
if (!re.isValid()) {
- qWarning("QString::split: invalid QRegularExpression object");
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString::split");
return list;
}
qsizetype start = 0;
qsizetype end = 0;
- QRegularExpressionMatchIterator iterator = re.globalMatch(source);
+ QRegularExpressionMatchIterator iterator = (re.*matchingFunction)(source, 0, QRegularExpression::NormalMatch, QRegularExpression::NoMatchOption);
while (iterator.hasNext()) {
QRegularExpressionMatch match = iterator.next();
end = match.capturedStart();
if (start != end || behavior == Qt::KeepEmptyParts)
- list.append(source.mid(start, end - start));
+ list.append(source.sliced(start, end - start));
start = match.capturedEnd();
}
if (start != source.size() || behavior == Qt::KeepEmptyParts)
- list.append(source.mid(start));
+ list.append(source.sliced(start));
return list;
}
@@ -7406,10 +8316,19 @@ static ResultList splitString(const String &source, const QRegularExpression &re
*/
QStringList QString::split(const QRegularExpression &re, Qt::SplitBehavior behavior) const
{
- return splitString<QStringList>(*this, re, behavior);
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
+ const auto matchingFunction = qOverload<const QString &, qsizetype, QRegularExpression::MatchType, QRegularExpression::MatchOptions>(&QRegularExpression::globalMatch);
+#else
+ const auto matchingFunction = &QRegularExpression::globalMatch;
+#endif
+ return splitString<QStringList>(*this,
+ re,
+ matchingFunction,
+ behavior);
}
/*!
+ \overload
\since 6.0
Splits the string into substring views wherever the regular expression \a re
@@ -7423,7 +8342,7 @@ QStringList QString::split(const QRegularExpression &re, Qt::SplitBehavior behav
*/
QList<QStringView> QStringView::split(const QRegularExpression &re, Qt::SplitBehavior behavior) const
{
- return splitString<QList<QStringView>>(*this, re, behavior);
+ return splitString<QList<QStringView>>(*this, re, &QRegularExpression::globalMatchView, behavior);
}
#endif // QT_CONFIG(regularexpression)
@@ -7439,7 +8358,7 @@ QList<QStringView> QStringView::split(const QRegularExpression &re, Qt::SplitBeh
\value NormalizationForm_KC Compatibility Decomposition followed by Canonical Composition
\sa normalized(),
- {http://www.unicode.org/reports/tr15/}{Unicode Standard Annex #15}
+ {https://www.unicode.org/reports/tr15/}{Unicode Standard Annex #15}
*/
/*!
@@ -7490,19 +8409,22 @@ QString QString::repeated(qsizetype times) const
void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar::UnicodeVersion version, qsizetype from)
{
- const QChar *p = data->constData() + from;
- if (isAscii(p, p + data->length() - from))
- return;
- if (p > data->constData() + from)
- from = p - data->constData() - 1; // need one before the non-ASCII to perform NFC
+ {
+ // check if it's fully ASCII first, because then we have no work
+ auto start = reinterpret_cast<const char16_t *>(data->constData());
+ const char16_t *p = start + from;
+ if (isAscii_helper(p, p + data->size() - from))
+ return;
+ if (p > start + from)
+ from = p - start - 1; // need one before the non-ASCII to perform NFC
+ }
if (version == QChar::Unicode_Unassigned) {
version = QChar::currentUnicodeVersion();
} else if (int(version) <= NormalizationCorrectionsVersionMax) {
const QString &s = *data;
QChar *d = nullptr;
- for (int i = 0; i < NumNormalizationCorrections; ++i) {
- const NormalizationCorrection &n = uc_normalization_corrections[i];
+ for (const NormalizationCorrection &n : uc_normalization_corrections) {
if (n.version > version) {
qsizetype pos = from;
if (QChar::requiresSurrogates(n.ucs4)) {
@@ -7510,7 +8432,7 @@ void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar::
char16_t ucs4Low = QChar::lowSurrogate(n.ucs4);
char16_t oldHigh = QChar::highSurrogate(n.old_mapping);
char16_t oldLow = QChar::lowSurrogate(n.old_mapping);
- while (pos < s.length() - 1) {
+ while (pos < s.size() - 1) {
if (s.at(pos).unicode() == ucs4High && s.at(pos + 1).unicode() == ucs4Low) {
if (!d)
d = data->data();
@@ -7520,7 +8442,7 @@ void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar::
++pos;
}
} else {
- while (pos < s.length()) {
+ while (pos < s.size()) {
if (s.at(pos).unicode() == n.ucs4) {
if (!d)
d = data->data();
@@ -7557,14 +8479,42 @@ QString QString::normalized(QString::NormalizationForm mode, QChar::UnicodeVersi
return copy;
}
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
+static void checkArgEscape(QStringView s)
+{
+ // If we're in here, it means that qArgDigitValue has accepted the
+ // digit. We can skip the check in case we already know it will
+ // succeed.
+ if (!supportUnicodeDigitValuesInArg())
+ return;
+
+ const auto isNonAsciiDigit = [](QChar c) {
+ return c.unicode() < u'0' || c.unicode() > u'9';
+ };
+
+ if (std::any_of(s.begin(), s.end(), isNonAsciiDigit)) {
+ const auto accumulateDigit = [](int partial, QChar digit) {
+ return partial * 10 + digit.digitValue();
+ };
+ const int parsedNumber = std::accumulate(s.begin(), s.end(), 0, accumulateDigit);
+
+ qWarning("QString::arg(): the replacement \"%%%ls\" contains non-ASCII digits;\n"
+ " it is currently being interpreted as the %d-th substitution.\n"
+ " This is deprecated; support for non-ASCII digits will be dropped\n"
+ " in a future version of Qt.",
+ qUtf16Printable(s.toString()),
+ parsedNumber);
+ }
+}
+#endif
struct ArgEscapeData
{
int min_escape; // lowest escape sequence number
- int occurrences; // number of occurrences of the lowest escape sequence number
- int locale_occurrences; // number of occurrences of the lowest escape sequence number that
- // contain 'L'
- int escape_len; // total length of escape sequences which will be replaced
+ qsizetype occurrences; // number of occurrences of the lowest escape sequence number
+ qsizetype locale_occurrences; // number of occurrences of the lowest escape sequence number that
+ // contain 'L'
+ qsizetype escape_len; // total length of escape sequences which will be replaced
};
static ArgEscapeData findArgEscapes(QStringView s)
@@ -7597,20 +8547,34 @@ static ArgEscapeData findArgEscapes(QStringView s)
break;
}
- int escape = c->digitValue();
+ int escape = qArgDigitValue(*c);
if (escape == -1)
continue;
+ // ### Qt 7: do not allow anything but ASCII digits
+ // in arg()'s replacements.
+#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
+ const QChar *escapeBegin = c;
+ const QChar *escapeEnd = escapeBegin + 1;
+#endif
+
++c;
if (c != uc_end) {
- int next_escape = c->digitValue();
+ const int next_escape = qArgDigitValue(*c);
if (next_escape != -1) {
escape = (10 * escape) + next_escape;
++c;
+#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
+ ++escapeEnd;
+#endif
}
}
+#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
+ checkArgEscape(QStringView(escapeBegin, escapeEnd));
+#endif
+
if (escape > d.min_escape)
continue;
@@ -7629,101 +8593,85 @@ static ArgEscapeData findArgEscapes(QStringView s)
return d;
}
-static QString replaceArgEscapes(QStringView s, const ArgEscapeData &d, int field_width,
+static QString replaceArgEscapes(QStringView s, const ArgEscapeData &d, qsizetype field_width,
QStringView arg, QStringView larg, QChar fillChar)
{
- const QChar *uc_begin = s.begin();
- const QChar *uc_end = s.end();
-
- int abs_field_width = qAbs(field_width);
- qsizetype result_len = s.length()
- - d.escape_len
- + (d.occurrences - d.locale_occurrences)
- *qMax(abs_field_width, arg.length())
- + d.locale_occurrences
- *qMax(abs_field_width, larg.length());
+ // Negative field-width for right-padding, positive for left-padding:
+ const qsizetype abs_field_width = qAbs(field_width);
+ const qsizetype result_len =
+ s.size() - d.escape_len
+ + (d.occurrences - d.locale_occurrences) * qMax(abs_field_width, arg.size())
+ + d.locale_occurrences * qMax(abs_field_width, larg.size());
QString result(result_len, Qt::Uninitialized);
- QChar *result_buff = (QChar*) result.unicode();
+ QChar *rc = const_cast<QChar *>(result.unicode());
+ QChar *const result_end = rc + result_len;
+ qsizetype repl_cnt = 0;
- QChar *rc = result_buff;
- const QChar *c = uc_begin;
- int repl_cnt = 0;
+ const QChar *c = s.begin();
+ const QChar *const uc_end = s.end();
while (c != uc_end) {
- /* We don't have to check if we run off the end of the string with c,
- because as long as d.occurrences > 0 we KNOW there are valid escape
- sequences. */
+ Q_ASSERT(d.occurrences > repl_cnt);
+ /* We don't have to check increments of c against uc_end because, as
+ long as d.occurrences > repl_cnt, we KNOW there are valid escape
+ sequences remaining. */
const QChar *text_start = c;
-
while (c->unicode() != '%')
++c;
const QChar *escape_start = c++;
-
- bool locale_arg = false;
- if (c->unicode() == 'L') {
- locale_arg = true;
+ const bool localize = c->unicode() == 'L';
+ if (localize)
++c;
- }
- int escape = c->digitValue();
- if (escape != -1) {
- if (c + 1 != uc_end && (c + 1)->digitValue() != -1) {
- escape = (10 * escape) + (c + 1)->digitValue();
+ int escape = qArgDigitValue(*c);
+ if (escape != -1 && c + 1 != uc_end) {
+ const int digit = qArgDigitValue(c[1]);
+ if (digit != -1) {
++c;
+ escape = 10 * escape + digit;
}
}
if (escape != d.min_escape) {
- memcpy(rc, text_start, (c - text_start)*sizeof(QChar));
+ memcpy(rc, text_start, (c - text_start) * sizeof(QChar));
rc += c - text_start;
- }
- else {
+ } else {
++c;
- memcpy(rc, text_start, (escape_start - text_start)*sizeof(QChar));
+ memcpy(rc, text_start, (escape_start - text_start) * sizeof(QChar));
rc += escape_start - text_start;
- uint pad_chars;
- if (locale_arg)
- pad_chars = qMax(abs_field_width, larg.length()) - larg.length();
- else
- pad_chars = qMax(abs_field_width, arg.length()) - arg.length();
+ const QStringView use = localize ? larg : arg;
+ const qsizetype pad_chars = abs_field_width - use.size();
+ // (If negative, relevant loops are no-ops: no need to check.)
if (field_width > 0) { // left padded
- for (uint i = 0; i < pad_chars; ++i)
- *rc++ = fillChar;
+ rc = std::fill_n(rc, pad_chars, fillChar);
}
- if (locale_arg) {
- memcpy(rc, larg.data(), larg.length()*sizeof(QChar));
- rc += larg.length();
- }
- else {
- memcpy(rc, arg.data(), arg.length()*sizeof(QChar));
- rc += arg.length();
- }
+ if (use.size())
+ memcpy(rc, use.data(), use.size() * sizeof(QChar));
+ rc += use.size();
if (field_width < 0) { // right padded
- for (uint i = 0; i < pad_chars; ++i)
- *rc++ = fillChar;
+ rc = std::fill_n(rc, pad_chars, fillChar);
}
if (++repl_cnt == d.occurrences) {
- memcpy(rc, c, (uc_end - c)*sizeof(QChar));
+ memcpy(rc, c, (uc_end - c) * sizeof(QChar));
rc += uc_end - c;
- Q_ASSERT(rc - result_buff == result_len);
+ Q_ASSERT(rc == result_end);
c = uc_end;
}
}
}
- Q_ASSERT(rc == result_buff + result_len);
+ Q_ASSERT(rc == result_end);
return result;
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
Returns a copy of this string with the lowest numbered place marker
replaced by string \a a, i.e., \c %1, \c %2, ..., \c %99.
@@ -7757,7 +8705,6 @@ QString QString::arg(const QString &a, int fieldWidth, QChar fillChar) const
{
return arg(qToStringViewIgnoringNull(a), fieldWidth, fillChar);
}
-#endif // QT_STRINGVIEW_LEVEL < 2
/*!
\overload
@@ -7808,7 +8755,7 @@ QString QString::arg(QStringView a, int fieldWidth, QChar fillChar) const
\since 5.10
Returns a copy of this string with the lowest-numbered place-marker
- replaced by string \a a, i.e., \c %1, \c %2, ..., \c %99.
+ replaced by the Latin-1 string viewed by \a a, i.e., \c %1, \c %2, ..., \c %99.
\a fieldWidth specifies the minimum amount of space that \a a
shall occupy. If \a a requires less space than \a fieldWidth, it
@@ -7827,109 +8774,12 @@ QString QString::arg(QStringView a, int fieldWidth, QChar fillChar) const
is printed and the result is undefined. Place-marker numbers must be
in the range 1 to 99.
*/
-QString QString::arg(QLatin1String a, int fieldWidth, QChar fillChar) const
+QString QString::arg(QLatin1StringView a, int fieldWidth, QChar fillChar) const
{
- QVarLengthArray<char16_t> utf16(a.size());
- qt_from_latin1(utf16.data(), a.data(), a.size());
+ QVarLengthArray<char16_t> utf16 = qt_from_latin1_to_qvla(a);
return arg(QStringView(utf16.data(), utf16.size()), fieldWidth, fillChar);
}
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2) const
- \overload arg()
-
- This is the same as \c {str.arg(a1).arg(a2)}, except that the
- strings \a a1 and \a a2 are replaced in one pass. This can make a
- difference if \a a1 contains e.g. \c{%1}:
-
- \snippet qstring/main.cpp 13
-
- A similar problem occurs when the numbered place markers are not
- white space separated:
-
- \snippet qstring/main.cpp 12
- \snippet qstring/main.cpp 97
-
- Let's look at the substitutions:
- \list
- \li First, \c Hello replaces \c {%1} so the string becomes \c {"Hello%3%2"}.
- \li Then, \c 20 replaces \c {%2} so the string becomes \c {"Hello%320"}.
- \li Since the maximum numbered place marker value is 99, \c 50 replaces \c {%32}.
- \endlist
- Thus the string finally becomes \c {"Hello500"}.
-
- In such cases, the following yields the expected results:
-
- \snippet qstring/main.cpp 12
- \snippet qstring/main.cpp 98
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3) const
- \overload arg()
-
- This is the same as calling \c str.arg(a1).arg(a2).arg(a3), except
- that the strings \a a1, \a a2 and \a a3 are replaced in one pass.
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4) const
- \overload arg()
-
- This is the same as calling \c
- {str.arg(a1).arg(a2).arg(a3).arg(a4)}, except that the strings \a
- a1, \a a2, \a a3 and \a a4 are replaced in one pass.
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5) const
- \overload arg()
-
- This is the same as calling \c
- {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5)}, except that the strings
- \a a1, \a a2, \a a3, \a a4, and \a a5 are replaced in one pass.
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6) const
- \overload arg()
-
- This is the same as calling \c
- {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6))}, except that
- the strings \a a1, \a a2, \a a3, \a a4, \a a5, and \a a6 are
- replaced in one pass.
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6, const QString& a7) const
- \overload arg()
-
- This is the same as calling \c
- {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6).arg(a7)},
- except that the strings \a a1, \a a2, \a a3, \a a4, \a a5, \a a6,
- and \a a7 are replaced in one pass.
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6, const QString& a7, const QString& a8) const
- \overload arg()
-
- This is the same as calling \c
- {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6).arg(a7).arg(a8)},
- except that the strings \a a1, \a a2, \a a3, \a a4, \a a5, \a a6, \a
- a7, and \a a8 are replaced in one pass.
-*/
-
-/*!
- \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6, const QString& a7, const QString& a8, const QString& a9) const
- \overload arg()
-
- This is the same as calling \c
- {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6).arg(a7).arg(a8).arg(a9)},
- except that the strings \a a1, \a a2, \a a3, \a a4, \a a5, \a a6, \a
- a7, \a a8, and \a a9 are replaced in one pass.
-*/
-
/*! \fn QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const
\overload arg()
@@ -7945,15 +8795,13 @@ QString QString::arg(QLatin1String a, int fieldWidth, QChar fillChar) const
The '%' can be followed by an 'L', in which case the sequence is
replaced with a localized representation of \a a. The conversion
uses the default locale, set by QLocale::setDefault(). If no default
- locale was specified, the "C" locale is used. The 'L' flag is
+ locale was specified, the system locale is used. The 'L' flag is
ignored if \a base is not 10.
\snippet qstring/main.cpp 12
\snippet qstring/main.cpp 14
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
/*! \fn QString QString::arg(uint a, int fieldWidth, int base, QChar fillChar) const
@@ -7962,9 +8810,7 @@ QString QString::arg(QLatin1String a, int fieldWidth, QChar fillChar) const
The \a base argument specifies the base to use when converting the
integer \a a into a string. The base must be between 2 and 36.
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
/*! \fn QString QString::arg(long a, int fieldWidth, int base, QChar fillChar) const
@@ -7988,12 +8834,11 @@ QString QString::arg(QLatin1String a, int fieldWidth, QChar fillChar) const
\snippet qstring/main.cpp 12
\snippet qstring/main.cpp 14
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
-/*! \fn QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar) const
+/*!
+ \fn QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar) const
\overload arg()
\a fieldWidth specifies the minimum amount of space that \a a is
@@ -8005,9 +8850,7 @@ QString QString::arg(QLatin1String a, int fieldWidth, QChar fillChar) const
integer \a a to a string. The base must be between 2 and 36, with 8
giving octal, 10 decimal, and 16 hexadecimal numbers.
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
/*!
@@ -8022,9 +8865,7 @@ QString QString::arg(QLatin1String a, int fieldWidth, QChar fillChar) const
integer \a a into a string. The base must be between 2 and 36, with
8 giving octal, 10 decimal, and 16 hexadecimal numbers.
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
QString QString::arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
{
@@ -8036,22 +8877,26 @@ QString QString::arg(qlonglong a, int fieldWidth, int base, QChar fillChar) cons
}
unsigned flags = QLocaleData::NoFlags;
- if (fillChar == QLatin1Char('0'))
+ // ZeroPadded sorts out left-padding when the fill is zero, to the right of sign:
+ if (fillChar == u'0')
flags = QLocaleData::ZeroPadded;
QString arg;
- if (d.occurrences > d.locale_occurrences)
+ if (d.occurrences > d.locale_occurrences) {
arg = QLocaleData::c()->longLongToString(a, -1, base, fieldWidth, flags);
+ Q_ASSERT(fillChar != u'0' || fieldWidth <= arg.size());
+ }
- QString locale_arg;
+ QString localeArg;
if (d.locale_occurrences > 0) {
QLocale locale;
if (!(locale.numberOptions() & QLocale::OmitGroupSeparator))
flags |= QLocaleData::GroupDigits;
- locale_arg = locale.d->m_data->longLongToString(a, -1, base, fieldWidth, flags);
+ localeArg = locale.d->m_data->longLongToString(a, -1, base, fieldWidth, flags);
+ Q_ASSERT(fillChar != u'0' || fieldWidth <= localeArg.size());
}
- return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
+ return replaceArgEscapes(*this, d, fieldWidth, arg, localeArg, fillChar);
}
/*!
@@ -8066,9 +8911,7 @@ QString QString::arg(qlonglong a, int fieldWidth, int base, QChar fillChar) cons
integer \a a into a string. \a base must be between 2 and 36, with 8
giving octal, 10 decimal, and 16 hexadecimal numbers.
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
QString QString::arg(qulonglong a, int fieldWidth, int base, QChar fillChar) const
{
@@ -8080,22 +8923,26 @@ QString QString::arg(qulonglong a, int fieldWidth, int base, QChar fillChar) con
}
unsigned flags = QLocaleData::NoFlags;
- if (fillChar == QLatin1Char('0'))
+ // ZeroPadded sorts out left-padding when the fill is zero, to the right of sign:
+ if (fillChar == u'0')
flags = QLocaleData::ZeroPadded;
QString arg;
- if (d.occurrences > d.locale_occurrences)
+ if (d.occurrences > d.locale_occurrences) {
arg = QLocaleData::c()->unsLongLongToString(a, -1, base, fieldWidth, flags);
+ Q_ASSERT(fillChar != u'0' || fieldWidth <= arg.size());
+ }
- QString locale_arg;
+ QString localeArg;
if (d.locale_occurrences > 0) {
QLocale locale;
if (!(locale.numberOptions() & QLocale::OmitGroupSeparator))
flags |= QLocaleData::GroupDigits;
- locale_arg = locale.d->m_data->unsLongLongToString(a, -1, base, fieldWidth, flags);
+ localeArg = locale.d->m_data->unsLongLongToString(a, -1, base, fieldWidth, flags);
+ Q_ASSERT(fillChar != u'0' || fieldWidth <= localeArg.size());
}
- return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
+ return replaceArgEscapes(*this, d, fieldWidth, arg, localeArg, fillChar);
}
/*!
@@ -8112,9 +8959,7 @@ QString QString::arg(qulonglong a, int fieldWidth, int base, QChar fillChar) con
integer \a a into a string. The base must be between 2 and 36, with
8 giving octal, 10 decimal, and 16 hexadecimal numbers.
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
/*!
@@ -8130,9 +8975,7 @@ QString QString::arg(qulonglong a, int fieldWidth, int base, QChar fillChar) con
integer \a a into a string. The base must be between 2 and 36, with
8 giving octal, 10 decimal, and 16 hexadecimal numbers.
- If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
- used. For negative numbers, zero padding might appear before the
- minus sign.
+ \sa {Number Formats}
*/
/*!
@@ -8154,11 +8997,10 @@ QString QString::arg(char a, int fieldWidth, QChar fillChar) const
}
/*!
- \fn QString QString::arg(double a, int fieldWidth, char format, int precision, QChar fillChar) const
\overload arg()
Argument \a a is formatted according to the specified \a format and
- \a precision. See \l{Argument Formats} for details.
+ \a precision. See \l{Floating-point Formats} for details.
\a fieldWidth specifies the minimum amount of space that \a a is
padded to and filled with the character \a fillChar. A positive
@@ -8167,18 +9009,9 @@ QString QString::arg(char a, int fieldWidth, QChar fillChar) const
\snippet code/src_corelib_text_qstring.cpp 2
- The '%' can be followed by an 'L', in which case the sequence is
- replaced with a localized representation of \a a. The conversion
- uses the default locale, set by QLocale::setDefault(). If no
- default locale was specified, the "C" locale is used.
-
- If \a fillChar is '0' (the number 0, ASCII 48), this function will
- use the locale's zero to pad. For negative numbers, the zero padding
- will probably appear before the minus sign.
-
- \sa QLocale::toString()
+ \sa QLocale::toString(), QLocale::FloatingPointPrecisionOption, {Number Formats}
*/
-QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillChar) const
+QString QString::arg(double a, int fieldWidth, char format, int precision, QChar fillChar) const
{
ArgEscapeData d = findArgEscapes(*this);
@@ -8188,14 +9021,15 @@ QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillCha
}
unsigned flags = QLocaleData::NoFlags;
- if (fillChar == QLatin1Char('0'))
+ // ZeroPadded sorts out left-padding when the fill is zero, to the right of sign:
+ if (fillChar == u'0')
flags |= QLocaleData::ZeroPadded;
- if (qIsUpper(fmt))
+ if (isAsciiUpper(format))
flags |= QLocaleData::CapitalEorX;
QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- switch (qToLower(fmt)) {
+ switch (QtMiscUtils::toAsciiLower(format)) {
case 'f':
form = QLocaleData::DFDecimal;
break;
@@ -8207,16 +9041,20 @@ QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillCha
break;
default:
#if defined(QT_CHECK_RANGE)
- qWarning("QString::arg: Invalid format char '%c'", fmt);
+ qWarning("QString::arg: Invalid format char '%c'", format);
#endif
break;
}
QString arg;
- if (d.occurrences > d.locale_occurrences)
- arg = QLocaleData::c()->doubleToString(a, prec, form, fieldWidth, flags | QLocaleData::ZeroPadExponent);
+ if (d.occurrences > d.locale_occurrences) {
+ arg = QLocaleData::c()->doubleToString(a, precision, form, fieldWidth,
+ flags | QLocaleData::ZeroPadExponent);
+ Q_ASSERT(fillChar != u'0' || !qt_is_finite(a)
+ || fieldWidth <= arg.size());
+ }
- QString locale_arg;
+ QString localeArg;
if (d.locale_occurrences > 0) {
QLocale locale;
@@ -8227,38 +9065,39 @@ QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillCha
flags |= QLocaleData::ZeroPadExponent;
if (numberOptions & QLocale::IncludeTrailingZeroesAfterDot)
flags |= QLocaleData::AddTrailingZeroes;
- locale_arg = locale.d->m_data->doubleToString(a, prec, form, fieldWidth, flags);
+ localeArg = locale.d->m_data->doubleToString(a, precision, form, fieldWidth, flags);
+ Q_ASSERT(fillChar != u'0' || !qt_is_finite(a)
+ || fieldWidth <= localeArg.size());
}
- return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
+ return replaceArgEscapes(*this, d, fieldWidth, arg, localeArg, fillChar);
}
static inline char16_t to_unicode(const QChar c) { return c.unicode(); }
static inline char16_t to_unicode(const char c) { return QLatin1Char{c}.unicode(); }
template <typename Char>
-static int getEscape(const Char *uc, qsizetype *pos, qsizetype len, int maxNumber = 999)
+static int getEscape(const Char *uc, qsizetype *pos, qsizetype len)
{
- int i = *pos;
+ qsizetype i = *pos;
++i;
- if (i < len && uc[i] == QLatin1Char('L'))
+ if (i < len && uc[i] == u'L')
++i;
if (i < len) {
int escape = to_unicode(uc[i]) - '0';
if (uint(escape) >= 10U)
return -1;
++i;
- while (i < len) {
+ if (i < len) {
+ // there's a second digit
int digit = to_unicode(uc[i]) - '0';
- if (uint(digit) >= 10U)
- break;
- escape = (escape * 10) + digit;
- ++i;
- }
- if (escape <= maxNumber) {
- *pos = i;
- return escape;
+ if (uint(digit) < 10U) {
+ escape = (escape * 10) + digit;
+ ++i;
+ }
}
+ *pos = i;
+ return escape;
}
return -1;
}
@@ -8276,7 +9115,7 @@ static int getEscape(const Char *uc, qsizetype *pos, qsizetype len, int maxNumbe
the int contains the numerical number as parsed from the placeholder.
3. Next, collect all the non-negative ints found, sort them in ascending order and
remove duplicates.
- 3a. If the result has more entires than multiArg() was given replacement strings,
+ 3a. If the result has more entries than multiArg() was given replacement strings,
we have found placeholders we can't satisfy with replacement strings. That is
fine (there could be another .arg() call coming after this one), so just
truncate the result to the number of actual multiArg() replacement strings.
@@ -8303,11 +9142,11 @@ struct Part
Part() = default; // for QVarLengthArray; do not use
constexpr Part(QStringView s, int num = -1)
: tag{QtPrivate::ArgBase::U16}, number{num}, data{s.utf16()}, size{s.size()} {}
- constexpr Part(QLatin1String s, int num = -1)
+ constexpr Part(QLatin1StringView s, int num = -1)
: tag{QtPrivate::ArgBase::L1}, number{num}, data{s.data()}, size{s.size()} {}
void reset(QStringView s) noexcept { *this = {s, number}; }
- void reset(QLatin1String s) noexcept { *this = {s, number}; }
+ void reset(QLatin1StringView s) noexcept { *this = {s, number}; }
QtPrivate::ArgBase::Tag tag;
int number;
@@ -8337,13 +9176,13 @@ static ParseResult parseMultiArgFormatString(StringView s)
qsizetype last = 0;
while (i < end) {
- if (uc[i] == QLatin1Char('%')) {
+ if (uc[i] == u'%') {
qsizetype percent = i;
int number = getEscape(uc, &i, len);
if (number != -1) {
if (last != percent)
- result.push_back(Part{s.mid(last, percent - last)}); // literal text (incl. failed placeholders)
- result.push_back(Part{s.mid(percent, i - percent), number}); // parsed placeholder
+ result.push_back(Part{s.sliced(last, percent - last)}); // literal text (incl. failed placeholders)
+ result.push_back(Part{s.sliced(percent, i - percent), number}); // parsed placeholder
last = i;
continue;
}
@@ -8352,7 +9191,7 @@ static ParseResult parseMultiArgFormatString(StringView s)
}
if (last < len)
- result.push_back(Part{s.mid(last, len - last)}); // trailing literal text
+ result.push_back(Part{s.sliced(last, len - last)}); // trailing literal text
return result;
}
@@ -8361,7 +9200,7 @@ static ArgIndexToPlaceholderMap makeArgIndexToPlaceholderMap(const ParseResult &
{
ArgIndexToPlaceholderMap result;
- for (Part part : parts) {
+ for (const Part &part : parts) {
if (part.number >= 0)
result.push_back(part.number);
}
@@ -8402,7 +9241,7 @@ static qsizetype resolveStringRefsAndReturnTotalSize(ParseResult &parts, const A
} // unnamed namespace
-Q_ALWAYS_INLINE QString to_string(QLatin1String s) noexcept { return s; }
+Q_ALWAYS_INLINE QString to_string(QLatin1StringView s) noexcept { return s; }
Q_ALWAYS_INLINE QString to_string(QStringView s) noexcept { return s.toString(); }
template <typename StringView>
@@ -8427,7 +9266,7 @@ static QString argToQStringImpl(StringView pattern, size_t numArgs, const QtPriv
QString result(totalSize, Qt::Uninitialized);
auto out = const_cast<QChar*>(result.constData());
- for (Part part : parts) {
+ for (const Part &part : parts) {
switch (part.tag) {
case QtPrivate::ArgBase::L1:
if (part.size) {
@@ -8454,31 +9293,11 @@ QString QtPrivate::argToQString(QStringView pattern, size_t n, const ArgBase **a
return argToQStringImpl(pattern, n, args);
}
-QString QtPrivate::argToQString(QLatin1String pattern, size_t n, const ArgBase **args)
+QString QtPrivate::argToQString(QLatin1StringView pattern, size_t n, const ArgBase **args)
{
return argToQStringImpl(pattern, n, args);
}
-/*! \fn bool QString::isSimpleText() const
-
- \internal
-*/
-bool QString::isSimpleText() const
-{
- const char16_t *p = d.data();
- const char16_t * const end = p + d.size;
- while (p < end) {
- char16_t uc = *p;
- // sort out regions of complex text formatting
- if (uc > 0x058f && (uc < 0x1100 || uc > 0xfb0f)) {
- return false;
- }
- p++;
- }
-
- return true;
-}
-
/*! \fn bool QString::isRightToLeft() const
Returns \c true if the string is read right to left.
@@ -8581,6 +9400,38 @@ bool QString::isRightToLeft() const
Appends the given \a ch character onto the end of this string.
*/
+/*!
+ \since 6.1
+
+ Removes from the string the characters in the half-open range
+ [ \a first , \a last ). Returns an iterator to the character
+ immediately after the last erased character (i.e. the character
+ referred to by \a last before the erase).
+*/
+QString::iterator QString::erase(QString::const_iterator first, QString::const_iterator last)
+{
+ const auto start = std::distance(cbegin(), first);
+ const auto len = std::distance(first, last);
+ remove(start, len);
+ return begin() + start;
+}
+
+/*!
+ \fn QString::iterator QString::erase(QString::const_iterator it)
+
+ \overload
+ \since 6.5
+
+ Removes the character denoted by \c it from the string.
+ Returns an iterator to the character immediately after the
+ erased character.
+
+ \code
+ QString c = "abcdefg";
+ auto it = c.erase(c.cbegin()); // c is now "bcdefg"; "it" points to "b"
+ \endcode
+*/
+
/*! \fn void QString::shrink_to_fit()
\since 5.10
@@ -8659,8 +9510,7 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size)
/*! \fn QString QString::fromStdU16String(const std::u16string &str)
\since 5.5
- Returns a copy of the \a str string. The given string is assumed
- to be encoded in UTF-16.
+ \include qstring.cpp {from-std-string} {UTF-16} {fromUtf16()}
\sa fromUtf16(), fromStdWString(), fromStdU32String()
*/
@@ -8679,8 +9529,7 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size)
/*! \fn QString QString::fromStdU32String(const std::u32string &str)
\since 5.5
- Returns a copy of the \a str string. The given string is assumed
- to be encoded in UCS-4.
+ \include qstring.cpp {from-std-string} {UCS-4} {fromUcs4()}
\sa fromUcs4(), fromStdWString(), fromStdU16String()
*/
@@ -8696,920 +9545,7 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size)
\sa toUcs4(), toStdWString(), toStdU16String()
*/
-/*! \class QLatin1String
- \inmodule QtCore
- \brief The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
-
- \ingroup string-processing
- \reentrant
-
- Many of QString's member functions are overloaded to accept
- \c{const char *} instead of QString. This includes the copy
- constructor, the assignment operator, the comparison operators,
- and various other functions such as \l{QString::insert()}{insert()}, \l{QString::replace()}{replace()},
- and \l{QString::indexOf()}{indexOf()}. These functions
- are usually optimized to avoid constructing a QString object for
- the \c{const char *} data. For example, assuming \c str is a
- QString,
-
- \snippet code/src_corelib_text_qstring.cpp 3
-
- is much faster than
-
- \snippet code/src_corelib_text_qstring.cpp 4
-
- because it doesn't construct four temporary QString objects and
- make a deep copy of the character data.
-
- Applications that define \c QT_NO_CAST_FROM_ASCII (as explained
- in the QString documentation) don't have access to QString's
- \c{const char *} API. To provide an efficient way of specifying
- constant Latin-1 strings, Qt provides the QLatin1String, which is
- just a very thin wrapper around a \c{const char *}. Using
- QLatin1String, the example code above becomes
-
- \snippet code/src_corelib_text_qstring.cpp 5
-
- This is a bit longer to type, but it provides exactly the same
- benefits as the first version of the code, and is faster than
- converting the Latin-1 strings using QString::fromLatin1().
-
- Thanks to the QString(QLatin1String) constructor,
- QLatin1String can be used everywhere a QString is expected. For
- example:
-
- \snippet code/src_corelib_text_qstring.cpp 6
-
- \note If the function you're calling with a QLatin1String
- argument isn't actually overloaded to take QLatin1String, the
- implicit conversion to QString will trigger a memory allocation,
- which is usually what you want to avoid by using QLatin1String
- in the first place. In those cases, using QStringLiteral may be
- the better option.
-
- \sa QString, QLatin1Char, {QStringLiteral()}{QStringLiteral}, QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \typedef QLatin1String::value_type
- \since 5.10
-
- Alias for \c{const char}. Provided for compatibility with the STL.
-*/
-
-/*!
- \typedef QLatin1String::difference_type
- \since 5.10
-
- Alias for \c{qsizetype}. Provided for compatibility with the STL.
-*/
-
-/*!
- \typedef QLatin1String::size_type
- \since 5.10
-
- Alias for \c{qsizetype}. Provided for compatibility with the STL.
-
- \note In version prior to Qt 6, this was an alias for \c{int},
- restricting the amount of data that could be held in a QLatin1String
- on 64-bit architectures.
-*/
-
-/*!
- \typedef QLatin1String::reference
- \since 5.10
-
- Alias for \c{value_type &}. Provided for compatibility with the STL.
-*/
-
-/*!
- \typedef QLatin1String::const_reference
- \since 5.11
-
- Alias for \c{reference}. Provided for compatibility with the STL.
-*/
-
-/*!
- \typedef QLatin1String::iterator
- \since 5.10
-
- QLatin1String does not support mutable iterators, so this is the same
- as const_iterator.
-
- \sa const_iterator, reverse_iterator
-*/
-
-/*!
- \typedef QLatin1String::const_iterator
- \since 5.10
-
- \sa iterator, const_reverse_iterator
-*/
-
-/*!
- \typedef QLatin1String::reverse_iterator
- \since 5.10
-
- QLatin1String does not support mutable reverse iterators, so this is the
- same as const_reverse_iterator.
-
- \sa const_reverse_iterator, iterator
-*/
-
-/*!
- \typedef QLatin1String::const_reverse_iterator
- \since 5.10
-
- \sa reverse_iterator, const_iterator
-*/
-
-/*! \fn QLatin1String::QLatin1String()
- \since 5.6
-
- Constructs a QLatin1String object that stores a nullptr.
-*/
-
-/*! \fn QLatin1String::QLatin1String(const char *str)
-
- Constructs a QLatin1String object that stores \a str.
-
- The string data is \e not copied. The caller must be able to
- guarantee that \a str will not be deleted or modified as long as
- the QLatin1String object exists.
-
- \sa latin1()
-*/
-
-/*! \fn QLatin1String::QLatin1String(const char *str, qsizetype size)
-
- Constructs a QLatin1String object that stores \a str with \a size.
-
- The string data is \e not copied. The caller must be able to
- guarantee that \a str will not be deleted or modified as long as
- the QLatin1String object exists.
-
- \sa latin1()
-*/
-
-/*!
- \fn QLatin1String::QLatin1String(const char *first, const char *last)
- \since 5.10
-
- Constructs a QLatin1String object that stores \a first with length
- (\a last - \a first).
-
- The range \c{[first,last)} must remain valid for the lifetime of
- this Latin-1 string object.
-
- Passing \nullptr as \a first is safe if \a last is \nullptr,
- too, and results in a null Latin-1 string.
-
- The behavior is undefined if \a last precedes \a first, \a first
- is \nullptr and \a last is not, or if \c{last - first >
- INT_MAX}.
-*/
-
-/*! \fn QLatin1String::QLatin1String(const QByteArray &str)
-
- Constructs a QLatin1String object that stores \a str.
-
- The string data is \e not copied. The caller must be able to
- guarantee that \a str will not be deleted or modified as long as
- the QLatin1String object exists.
-
- \sa latin1()
-*/
-
-/*!
- \fn QLatin1String::toString() const
- \since 6.0
-
- Converts this Latin-1 string into a QString. Equivalent to
- \code
- return QString(*this);
- \endcode
-*/
-
-/*! \fn const char *QLatin1String::latin1() const
-
- Returns the Latin-1 string stored in this object.
-*/
-
-/*! \fn const char *QLatin1String::data() const
-
- Returns the Latin-1 string stored in this object.
-*/
-
-/*! \fn QLatin1String::size() const
-
- Returns the size of the Latin-1 string stored in this object.
-
- \note In version prior to Qt 6, this function returned \c{int},
- restricting the amount of data that could be held in a QLatin1String
- on 64-bit architectures.
-*/
-
-/*! \fn bool QLatin1String::isNull() const
- \since 5.10
-
- Returns whether the Latin-1 string stored in this object is null
- (\c{data() == nullptr}) or not.
-
- \sa isEmpty(), data()
-*/
-
-/*! \fn bool QLatin1String::isEmpty() const
- \since 5.10
-
- Returns whether the Latin-1 string stored in this object is empty
- (\c{size() == 0}) or not.
-
- \sa isNull(), size()
-*/
-
-/*! \fn QLatin1Char QLatin1String::at(qsizetype pos) const
- \since 5.8
-
- Returns the character at position \a pos in this object.
-
- \note This function performs no error checking.
- The behavior is undefined when \a pos < 0 or \a pos >= size().
-
- \sa operator[]()
-*/
-
-/*! \fn QLatin1Char QLatin1String::operator[](qsizetype pos) const
- \since 5.8
-
- Returns the character at position \a pos in this object.
-
- \note This function performs no error checking.
- The behavior is undefined when \a pos < 0 or \a pos >= size().
-
- \sa at()
-*/
-
-/*!
- \fn QLatin1Char QLatin1String::front() const
- \since 5.10
-
- Returns the first character in the string.
- Same as \c{at(0)}.
-
- This function is provided for STL compatibility.
-
- \warning Calling this function on an empty string constitutes
- undefined behavior.
-
- \sa back(), at(), operator[]()
-*/
-
-/*!
- \fn QLatin1Char QLatin1String::back() const
- \since 5.10
-
- Returns the last character in the string.
- Same as \c{at(size() - 1)}.
-
- This function is provided for STL compatibility.
-
- \warning Calling this function on an empty string constitutes
- undefined behavior.
-
- \sa front(), at(), operator[]()
-*/
-
-/*!
- \fn int QLatin1String::compare(QStringView str, Qt::CaseSensitivity cs) const
- \fn int QLatin1String::compare(QLatin1String l1, Qt::CaseSensitivity cs) const
- \fn int QLatin1String::compare(QChar ch) const
- \fn int QLatin1String::compare(QChar ch, Qt::CaseSensitivity cs) const
- \since 5.14
-
- Returns an integer that compares to zero as this Latin-1 string compares to the
- string-view \a str, Latin-1 string \a l1, or character \a ch, respectively.
-
- If \a cs is Qt::CaseSensitive (the default), the comparison is case sensitive;
- otherwise the comparison is case-insensitive.
-
- \sa operator==(), operator<(), operator>()
-*/
-
-
-/*!
- \fn bool QLatin1String::startsWith(QStringView str, Qt::CaseSensitivity cs) const
- \since 5.10
- \fn bool QLatin1String::startsWith(QLatin1String l1, Qt::CaseSensitivity cs) const
- \since 5.10
- \fn bool QLatin1String::startsWith(QChar ch) const
- \since 5.10
- \fn bool QLatin1String::startsWith(QChar ch, Qt::CaseSensitivity cs) const
- \since 5.10
-
- Returns \c true if this Latin-1 string starts with string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively;
- otherwise returns \c false.
-
- If \a cs is Qt::CaseSensitive (the default), the search is case-sensitive;
- otherwise the search is case-insensitive.
-
- \sa endsWith()
-*/
-
-/*!
- \fn bool QLatin1String::endsWith(QStringView str, Qt::CaseSensitivity cs) const
- \since 5.10
- \fn bool QLatin1String::endsWith(QLatin1String l1, Qt::CaseSensitivity cs) const
- \since 5.10
- \fn bool QLatin1String::endsWith(QChar ch) const
- \since 5.10
- \fn bool QLatin1String::endsWith(QChar ch, Qt::CaseSensitivity cs) const
- \since 5.10
-
- Returns \c true if this Latin-1 string ends with string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively;
- otherwise returns \c false.
-
- If \a cs is Qt::CaseSensitive (the default), the search is case-sensitive;
- otherwise the search is case-insensitive.
-
- \sa startsWith()
-*/
-
-/*!
- \fn int QLatin1String::indexOf(QStringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- \fn int QLatin1String::indexOf(QLatin1String l1, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- \fn int QLatin1String::indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- \since 5.14
-
- Returns the index position of the first occurrence of the string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively, in this Latin-1 string,
- searching forward from index position \a from. Returns -1 if \a str is not found.
-
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
-
- If \a from is -1, the search starts at the last character; if it is
- -2, at the next to last character and so on.
-
- \sa QString::indexOf()
-*/
-
-/*!
- \fn bool QLatin1String::contains(QStringView str, Qt::CaseSensitivity cs) const
- \fn bool QLatin1String::contains(QLatin1String l1, Qt::CaseSensitivity cs) const
- \fn bool QLatin1String::contains(QChar c, Qt::CaseSensitivity cs) const
- \since 5.14
-
- Returns \c true if this Latin-1 string contains an occurrence of the string-view
- \a str, Latin-1 string \a l1, or character \a ch; otherwise returns \c false.
-
- If \a cs is Qt::CaseSensitive (the default), the search is
- case-sensitive; otherwise the search is case-insensitive.
-
- \sa indexOf(), QStringView::contains(), QStringView::indexOf(), QString::indexOf()
-*/
-
-/*!
- \fn int QLatin1String::lastIndexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
- \fn int QLatin1String::lastIndexOf(QLatin1String l1, qsizetype from, Qt::CaseSensitivity cs) const
- \fn int QLatin1String::lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs) const
- \since 5.14
-
- Returns the index position of the last occurrence of the string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively, in this Latin-1 string,
- searching backward from index position \a from. If \a from is -1 (default),
- the search starts at the last character; if \a from is -2, at the next to last
- character and so on. Returns -1 if \a str is not found.
-
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
-
- \sa indexOf(), QStringView::lastIndexOf(), QStringView::indexOf(), QString::indexOf()
-*/
-
-/*!
- \fn QLatin1String::const_iterator QLatin1String::begin() const
- \since 5.10
-
- Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first character in
- the string.
-
- This function is provided for STL compatibility.
-
- \sa end(), cbegin(), rbegin(), data()
-*/
-
-/*!
- \fn QLatin1String::const_iterator QLatin1String::cbegin() const
- \since 5.10
-
- Same as begin().
-
- This function is provided for STL compatibility.
-
- \sa cend(), begin(), crbegin(), data()
-*/
-
-/*!
- \fn QLatin1String::const_iterator QLatin1String::end() const
- \since 5.10
-
- Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
- character after the last character in the list.
-
- This function is provided for STL compatibility.
-
- \sa begin(), cend(), rend()
-*/
-
-/*! \fn QLatin1String::const_iterator QLatin1String::cend() const
- \since 5.10
-
- Same as end().
-
- This function is provided for STL compatibility.
-
- \sa cbegin(), end(), crend()
-*/
-
-/*!
- \fn QLatin1String::const_reverse_iterator QLatin1String::rbegin() const
- \since 5.10
-
- Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- character in the string, in reverse order.
-
- This function is provided for STL compatibility.
-
- \sa rend(), crbegin(), begin()
-*/
-
-/*!
- \fn QLatin1String::const_reverse_iterator QLatin1String::crbegin() const
- \since 5.10
-
- Same as rbegin().
-
- This function is provided for STL compatibility.
-
- \sa crend(), rbegin(), cbegin()
-*/
-
-/*!
- \fn QLatin1String::const_reverse_iterator QLatin1String::rend() const
- \since 5.10
-
- Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
- the last character in the string, in reverse order.
-
- This function is provided for STL compatibility.
-
- \sa rbegin(), crend(), end()
-*/
-
-/*!
- \fn QLatin1String::const_reverse_iterator QLatin1String::crend() const
- \since 5.10
-
- Same as rend().
-
- This function is provided for STL compatibility.
-
- \sa crbegin(), rend(), cend()
-*/
-
-/*!
- \fn QLatin1String::mid(qsizetype start, qsizetype length) const
- \since 5.8
-
- Returns the substring of length \a length starting at position
- \a start in this Latin-1 string.
-
- \obsolete Use sliced() instead in new code.
-
- Returns an empty Latin-1 string if \a start exceeds the
- length of this Latin-1 string. If there are less than \a length characters
- available in this Latin-1 string starting at \a start, or if
- \a length is negative (default), the function returns all characters that
- are available from \a start.
-
- \sa first(), last(), sliced(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String::left(qsizetype length) const
- \since 5.8
-
- \obsolete Use first() instead in new code.
-
- Returns the substring of length \a length starting at position
- 0 in this Latin-1 string.
-
- The entire Latin-1 string is returned if \a length is greater than or equal
- to size(), or less than zero.
-
- \sa first(), last(), sliced(), startsWith(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String::right(qsizetype length) const
- \since 5.8
-
- \obsolete Use last() instead in new code.
-
- Returns the substring of length \a length starting at position
- size() - \a length in this Latin-1 string.
-
- The entire Latin-1 string is returned if \a length is greater than or equal
- to size(), or less than zero.
-
- \sa first(), last(), sliced(), endsWith(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String::first(qsizetype n) const
- \since 6.0
-
- Returns a Latin-1 string that contains the first \a n characters
- of this Latin-1 string.
-
- \note The behavior is undefined when \a n < 0 or \a n > size().
-
- \sa last(), subString(), startsWith(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String::last(qsizetype n) const
- \since 6.0
-
- Returns a Latin-1 string that contains the last \a n characters
- of this Latin-1 string.
-
- \note The behavior is undefined when \a n < 0 or \a n > size().
-
- \sa first(), subString(), endsWith(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String::sliced(qsizetype pos, qsizetype n) const
- \since 6.0
-
- Returns a Latin-1 string that points to \a n characters of this
- Latin-1 string, starting at position \a pos.
-
- \note The behavior is undefined when \a pos < 0, \a n < 0,
- or \c{pos + n > size()}.
-
- \sa first(), last(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String::sliced(qsizetype pos) const
- \since 6.0
-
- Returns a Latin-1 string starting at position \a pos in this
- Latin-1 string, and extending to its end.
-
- \note The behavior is undefined when \a pos < 0 or \a pos > size().
-
- \sa first(), last(), chopped(), chop(), truncate()
-*/
-
-/*!
- \fn QLatin1String QLatin1String::chopped(qsizetype length) const
- \since 5.10
-
- Returns the substring of length size() - \a length starting at the
- beginning of this object.
-
- Same as \c{left(size() - length)}.
-
- \note The behavior is undefined when \a length < 0 or \a length > size().
-
- \sa mid(), left(), right(), chop(), truncate()
-*/
-
-/*!
- \fn void QLatin1String::truncate(qsizetype length)
- \since 5.10
-
- Truncates this string to length \a length.
-
- Same as \c{*this = left(length)}.
-
- \note The behavior is undefined when \a length < 0 or \a length > size().
-
- \sa mid(), left(), right(), chopped(), chop()
-*/
-
-/*!
- \fn void QLatin1String::chop(qsizetype length)
- \since 5.10
-
- Truncates this string by \a length characters.
-
- Same as \c{*this = left(size() - length)}.
-
- \note The behavior is undefined when \a length < 0 or \a length > size().
-
- \sa mid(), left(), right(), chopped(), truncate()
-*/
-
-/*!
- \fn QLatin1String QLatin1String::trimmed() const
- \since 5.10
-
- Strips leading and trailing whitespace and returns the result.
-
- Whitespace means any character for which QChar::isSpace() returns
- \c true. This includes the ASCII characters '\\t', '\\n', '\\v',
- '\\f', '\\r', and ' '.
-*/
-
-/*! \fn bool QLatin1String::operator==(const QString &other) const
-
- Returns \c true if this string is equal to string \a other;
- otherwise returns \c false.
-
- \sa {Comparing Strings}
-*/
-
-/*!
- \fn bool QLatin1String::operator==(const char *other) const
- \since 4.3
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator==(const QByteArray &other) const
- \since 5.0
- \overload
-
- The \a other byte array is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*! \fn bool QLatin1String::operator!=(const QString &other) const
-
- Returns \c true if this string is not equal to string \a other;
- otherwise returns \c false.
-
- \sa {Comparing Strings}
-*/
-
-/*!
- \fn bool QLatin1String::operator!=(const char *other) const
- \since 4.3
- \overload operator!=()
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator!=(const QByteArray &other) const
- \since 5.0
- \overload operator!=()
-
- The \a other byte array is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator>(const QString &other) const
-
- Returns \c true if this string is lexically greater than string \a
- other; otherwise returns \c false.
-
- \sa {Comparing Strings}
-*/
-
-/*!
- \fn bool QLatin1String::operator>(const char *other) const
- \since 4.3
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
- when you compile your applications. This can be useful if you want
- to ensure that all user-visible strings go through QObject::tr(),
- for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator>(const QByteArray &other) const
- \since 5.0
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
- when you compile your applications. This can be useful if you want
- to ensure that all user-visible strings go through QObject::tr(),
- for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator<(const QString &other) const
-
- Returns \c true if this string is lexically less than the \a other
- string; otherwise returns \c false.
-
- \sa {Comparing Strings}
-*/
-
-/*!
- \fn bool QLatin1String::operator<(const char *other) const
- \since 4.3
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator<(const QByteArray &other) const
- \since 5.0
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator>=(const QString &other) const
-
- Returns \c true if this string is lexically greater than or equal
- to string \a other; otherwise returns \c false.
-
- \sa {Comparing Strings}
-*/
-
-/*!
- \fn bool QLatin1String::operator>=(const char *other) const
- \since 4.3
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator>=(const QByteArray &other) const
- \since 5.0
- \overload
-
- The \a other array is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*! \fn bool QLatin1String::operator<=(const QString &other) const
-
- Returns \c true if this string is lexically less than or equal
- to string \a other; otherwise returns \c false.
-
- \sa {Comparing Strings}
-*/
-
-/*!
- \fn bool QLatin1String::operator<=(const char *other) const
- \since 4.3
- \overload
-
- The \a other const char pointer is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-/*!
- \fn bool QLatin1String::operator<=(const QByteArray &other) const
- \since 5.0
- \overload
-
- The \a other array is converted to a QString using
- the QString::fromUtf8() function.
-
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
- go through QObject::tr(), for example.
-
- \sa QT_NO_CAST_FROM_ASCII
-*/
-
-
-/*! \fn bool operator==(QLatin1String s1, QLatin1String s2)
- \relates QLatin1String
-
- Returns \c true if string \a s1 is lexically equal to string \a s2; otherwise
- returns \c false.
-*/
-/*! \fn bool operator!=(QLatin1String s1, QLatin1String s2)
- \relates QLatin1String
-
- Returns \c true if string \a s1 is lexically unequal to string \a s2; otherwise
- returns \c false.
-*/
-/*! \fn bool operator<(QLatin1String s1, QLatin1String s2)
- \relates QLatin1String
-
- Returns \c true if string \a s1 is lexically smaller than string \a s2; otherwise
- returns \c false.
-*/
-/*! \fn bool operator<=(QLatin1String s1, QLatin1String s2)
- \relates QLatin1String
-
- Returns \c true if string \a s1 is lexically smaller than or equal to string \a s2; otherwise
- returns \c false.
-*/
-/*! \fn bool operator>(QLatin1String s1, QLatin1String s2)
- \relates QLatin1String
-
- Returns \c true if string \a s1 is lexically greater than string \a s2; otherwise
- returns \c false.
-*/
-/*! \fn bool operator>=(QLatin1String s1, QLatin1String s2)
- \relates QLatin1String
-
- Returns \c true if string \a s1 is lexically greater than or equal to
- string \a s2; otherwise returns \c false.
-*/
-
-
-#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
+#if !defined(QT_NO_DATASTREAM)
/*!
\fn QDataStream &operator<<(QDataStream &stream, const QString &string)
\relates QString
@@ -9626,15 +9562,16 @@ QDataStream &operator<<(QDataStream &out, const QString &str)
} else {
if (!str.isNull() || out.version() < 3) {
if ((out.byteOrder() == QDataStream::BigEndian) == (QSysInfo::ByteOrder == QSysInfo::BigEndian)) {
- out.writeBytes(reinterpret_cast<const char *>(str.unicode()), size_t(sizeof(QChar) * str.length()));
+ out.writeBytes(reinterpret_cast<const char *>(str.unicode()),
+ static_cast<qsizetype>(sizeof(QChar) * str.size()));
} else {
- QVarLengthArray<char16_t> buffer(str.length());
- qbswap<sizeof(char16_t)>(str.constData(), str.length(), buffer.data());
- out.writeBytes(reinterpret_cast<const char *>(buffer.data()), size_t(sizeof(char16_t) * buffer.size()));
+ QVarLengthArray<char16_t> buffer(str.size());
+ qbswap<sizeof(char16_t)>(str.constData(), str.size(), buffer.data());
+ out.writeBytes(reinterpret_cast<const char *>(buffer.data()),
+ static_cast<qsizetype>(sizeof(char16_t) * buffer.size()));
}
} else {
- // write null marker
- out << (quint32)0xffffffff;
+ QDataStream::writeQSizeType(out, -1); // write null marker
}
}
return out;
@@ -9656,20 +9593,25 @@ QDataStream &operator>>(QDataStream &in, QString &str)
in >> l;
str = QString::fromLatin1(l);
} else {
- quint32 bytes = 0;
- in >> bytes; // read size of string
- if (bytes == 0xffffffff) { // null string
+ qint64 size = QDataStream::readQSizeType(in);
+ qsizetype bytes = size;
+ if (size != bytes || size < -1) {
str.clear();
- } else if (bytes > 0) { // not empty
+ in.setStatus(QDataStream::SizeLimitExceeded);
+ return in;
+ }
+ if (bytes == -1) { // null string
+ str = QString();
+ } else if (bytes > 0) {
if (bytes & 0x1) {
str.clear();
in.setStatus(QDataStream::ReadCorruptData);
return in;
}
- const quint32 Step = 1024 * 1024;
- quint32 len = bytes / 2;
- quint32 allocated = 0;
+ const qsizetype Step = 1024 * 1024;
+ qsizetype len = bytes / 2;
+ qsizetype allocated = 0;
while (allocated < len) {
int blockSize = qMin(Step, len - allocated);
@@ -9689,7 +9631,7 @@ QDataStream &operator>>(QDataStream &in, QString &str)
qbswap<sizeof(*data)>(data, len, data);
}
} else {
- str = QString(QLatin1String(""));
+ str = QString(QLatin1StringView(""));
}
}
return in;
@@ -9722,20 +9664,12 @@ QDataStream &operator>>(QDataStream &in, QString &str)
*/
bool QtPrivate::isRightToLeft(QStringView string) noexcept
{
- const char16_t *p = string.utf16();
- const char16_t * const end = p + string.size();
int isolateLevel = 0;
- while (p < end) {
- uint ucs4 = *p;
- if (QChar::isHighSurrogate(ucs4) && p < end - 1) {
- char16_t low = p[1];
- if (QChar::isLowSurrogate(low)) {
- ucs4 = QChar::surrogateToUcs4(ucs4, low);
- ++p;
- }
- }
- switch (QChar::direction(ucs4))
- {
+
+ for (QStringIterator i(string); i.hasNext();) {
+ const char32_t c = i.next();
+
+ switch (QChar::direction(c)) {
case QChar::DirRLI:
case QChar::DirLRI:
case QChar::DirFSI:
@@ -9754,10 +9688,24 @@ bool QtPrivate::isRightToLeft(QStringView string) noexcept
if (isolateLevel)
break;
return true;
- default:
+ case QChar::DirEN:
+ case QChar::DirES:
+ case QChar::DirET:
+ case QChar::DirAN:
+ case QChar::DirCS:
+ case QChar::DirB:
+ case QChar::DirS:
+ case QChar::DirWS:
+ case QChar::DirON:
+ case QChar::DirLRE:
+ case QChar::DirLRO:
+ case QChar::DirRLE:
+ case QChar::DirRLO:
+ case QChar::DirPDF:
+ case QChar::DirNSM:
+ case QChar::DirBN:
break;
}
- ++p;
}
return false;
}
@@ -9777,64 +9725,81 @@ qsizetype QtPrivate::count(QStringView haystack, QStringView needle, Qt::CaseSen
return num;
}
-qsizetype QtPrivate::count(QStringView haystack, QChar ch, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::count(QStringView haystack, QChar needle, Qt::CaseSensitivity cs) noexcept
{
- qsizetype num = 0;
- if (cs == Qt::CaseSensitive) {
- for (QChar c : haystack) {
- if (c == ch)
- ++num;
- }
- } else {
- ch = foldCase(ch);
- for (QChar c : haystack) {
- if (foldCase(c) == ch)
- ++num;
- }
- }
- return num;
+ if (cs == Qt::CaseSensitive)
+ return std::count(haystack.cbegin(), haystack.cend(), needle);
+
+ needle = foldCase(needle);
+ return std::count_if(haystack.cbegin(), haystack.cend(),
+ [needle](const QChar c) { return foldAndCompare(c, needle); });
}
-template <typename Haystack, typename Needle>
-bool qt_starts_with_impl(Haystack haystack, Needle needle, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::count(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs)
{
- if (haystack.isNull())
- return needle.isNull();
- const auto haystackLen = haystack.size();
- const auto needleLen = needle.size();
- if (haystackLen == 0)
- return needleLen == 0;
- if (needleLen > haystackLen)
- return false;
+ qsizetype num = 0;
+ qsizetype i = -1;
- return qt_compare_strings(haystack.left(needleLen), needle, cs) == 0;
+ QLatin1StringMatcher matcher(needle, cs);
+ while ((i = matcher.indexIn(haystack, i + 1)) != -1)
+ ++num;
+
+ return num;
}
-static inline bool qt_starts_with(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs)
+qsizetype QtPrivate::count(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs)
{
- return qt_starts_with_impl(haystack, needle, cs);
+ if (haystack.size() < needle.size())
+ return 0;
+
+ if (!QtPrivate::isLatin1(needle)) // won't find non-L1 UTF-16 needles in a L1 haystack!
+ return 0;
+
+ qsizetype num = 0;
+ qsizetype i = -1;
+
+ QVarLengthArray<uchar> s(needle.size());
+ qt_to_latin1_unchecked(s.data(), needle.utf16(), needle.size());
+
+ QLatin1StringMatcher matcher(QLatin1StringView(reinterpret_cast<char *>(s.data()), s.size()),
+ cs);
+ while ((i = matcher.indexIn(haystack, i + 1)) != -1)
+ ++num;
+
+ return num;
}
-static inline bool qt_starts_with(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs)
+qsizetype QtPrivate::count(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs)
{
- return qt_starts_with_impl(haystack, needle, cs);
+ if (haystack.size() < needle.size())
+ return -1;
+
+ QVarLengthArray<char16_t> s = qt_from_latin1_to_qvla(needle);
+ return QtPrivate::count(haystack, QStringView(s.data(), s.size()), cs);
}
-static inline bool qt_starts_with(QStringView haystack, QChar needle, Qt::CaseSensitivity cs)
+qsizetype QtPrivate::count(QLatin1StringView haystack, QChar needle, Qt::CaseSensitivity cs) noexcept
{
- return haystack.size()
- && (cs == Qt::CaseSensitive ? haystack.front() == needle
- : foldCase(haystack.front()) == foldCase(needle));
+ // non-L1 needles cannot possibly match in L1-only haystacks
+ if (needle.unicode() > 0xff)
+ return 0;
+
+ if (cs == Qt::CaseSensitive) {
+ return std::count(haystack.cbegin(), haystack.cend(), needle.toLatin1());
+ } else {
+ return std::count_if(haystack.cbegin(), haystack.cend(),
+ CaseInsensitiveL1::matcher(needle.toLatin1()));
+ }
}
/*!
\fn bool QtPrivate::startsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::startsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::startsWith(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::startsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::startsWith(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::startsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::startsWith(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs)
\since 5.10
\internal
\relates QStringView
@@ -9842,10 +9807,9 @@ static inline bool qt_starts_with(QStringView haystack, QChar needle, Qt::CaseSe
Returns \c true if \a haystack starts with \a needle,
otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (the default), the search is case-sensitive;
- otherwise the search is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
- \sa QtPrivate::endsWith(), QString::endsWith(), QStringView::endsWith(), QLatin1String::endsWith()
+ \sa QtPrivate::endsWith(), QString::endsWith(), QStringView::endsWith(), QLatin1StringView::endsWith()
*/
bool QtPrivate::startsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs) noexcept
@@ -9853,61 +9817,29 @@ bool QtPrivate::startsWith(QStringView haystack, QStringView needle, Qt::CaseSen
return qt_starts_with_impl(haystack, needle, cs);
}
-bool QtPrivate::startsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::startsWith(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
{
return qt_starts_with_impl(haystack, needle, cs);
}
-bool QtPrivate::startsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::startsWith(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs) noexcept
{
return qt_starts_with_impl(haystack, needle, cs);
}
-bool QtPrivate::startsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::startsWith(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
{
return qt_starts_with_impl(haystack, needle, cs);
}
-template <typename Haystack, typename Needle>
-bool qt_ends_with_impl(Haystack haystack, Needle needle, Qt::CaseSensitivity cs) noexcept
-{
- if (haystack.isNull())
- return needle.isNull();
- const auto haystackLen = haystack.size();
- const auto needleLen = needle.size();
- if (haystackLen == 0)
- return needleLen == 0;
- if (haystackLen < needleLen)
- return false;
-
- return qt_compare_strings(haystack.right(needleLen), needle, cs) == 0;
-}
-
-static inline bool qt_ends_with(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs)
-{
- return qt_ends_with_impl(haystack, needle, cs);
-}
-
-static inline bool qt_ends_with(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs)
-{
- return qt_ends_with_impl(haystack, needle, cs);
-}
-
-static inline bool qt_ends_with(QStringView haystack, QChar needle, Qt::CaseSensitivity cs)
-{
- return haystack.size()
- && (cs == Qt::CaseSensitive ? haystack.back() == needle
- : foldCase(haystack.back()) == foldCase(needle));
-}
-
/*!
\fn bool QtPrivate::endsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::endsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::endsWith(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::endsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::endsWith(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::endsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::endsWith(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs)
\since 5.10
\internal
\relates QStringView
@@ -9915,10 +9847,9 @@ static inline bool qt_ends_with(QStringView haystack, QChar needle, Qt::CaseSens
Returns \c true if \a haystack ends with \a needle,
otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (the default), the search is case-sensitive;
- otherwise the search is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
- \sa QtPrivate::startsWith(), QString::endsWith(), QStringView::endsWith(), QLatin1String::endsWith()
+ \sa QtPrivate::startsWith(), QString::endsWith(), QStringView::endsWith(), QLatin1StringView::endsWith()
*/
bool QtPrivate::endsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs) noexcept
@@ -9926,91 +9857,27 @@ bool QtPrivate::endsWith(QStringView haystack, QStringView needle, Qt::CaseSensi
return qt_ends_with_impl(haystack, needle, cs);
}
-bool QtPrivate::endsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::endsWith(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
{
return qt_ends_with_impl(haystack, needle, cs);
}
-bool QtPrivate::endsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::endsWith(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs) noexcept
{
return qt_ends_with_impl(haystack, needle, cs);
}
-bool QtPrivate::endsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::endsWith(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
{
return qt_ends_with_impl(haystack, needle, cs);
}
-namespace {
-template <typename Pointer>
-char32_t foldCaseHelper(Pointer ch, Pointer start) = delete;
-
-template <>
-char32_t foldCaseHelper<const QChar*>(const QChar* ch, const QChar* start)
-{
- return foldCase(reinterpret_cast<const char16_t*>(ch),
- reinterpret_cast<const char16_t*>(start));
-}
-
-template <>
-char32_t foldCaseHelper<const char*>(const char* ch, const char*)
-{
- return foldCase(char16_t(uchar(*ch)));
-}
-
-template <typename T>
-char16_t valueTypeToUtf16(T t) = delete;
-
-template <>
-char16_t valueTypeToUtf16<QChar>(QChar t)
-{
- return t.unicode();
-}
-
-template <>
-char16_t valueTypeToUtf16<char>(char t)
-{
- return char16_t{uchar(t)};
-}
-}
-
-/*!
- \internal
-
- Returns the index position of the first occurrence of the
- character \a ch in the string given by \a str and \a len,
- searching forward from index
- position \a from. Returns -1 if \a ch could not be found.
-*/
-
-static inline qsizetype qFindChar(QStringView str, QChar ch, qsizetype from, Qt::CaseSensitivity cs) noexcept
-{
- if (from < 0)
- from = qMax(from + str.size(), qsizetype(0));
- if (from < str.size()) {
- const char16_t *s = str.utf16();
- char16_t c = ch.unicode();
- const char16_t *n = s + from;
- const char16_t *e = s + str.size();
- if (cs == Qt::CaseSensitive) {
- n = QtPrivate::qustrchr(QStringView(n, e), c);
- if (n != e)
- return n - s;
- } else {
- c = foldCase(c);
- --n;
- while (++n != e)
- if (foldCase(*n) == c)
- return n - s;
- }
- }
- return -1;
-}
-
qsizetype QtPrivate::findString(QStringView haystack0, qsizetype from, QStringView needle0, Qt::CaseSensitivity cs) noexcept
{
const qsizetype l = haystack0.size();
const qsizetype sl = needle0.size();
+ if (sl == 1)
+ return findString(haystack0, from, needle0[0], cs);
if (from < 0)
from += l;
if (std::size_t(sl + from) > std::size_t(l))
@@ -10020,9 +9887,6 @@ qsizetype QtPrivate::findString(QStringView haystack0, qsizetype from, QStringVi
if (!l)
return -1;
- if (sl == 1)
- return qFindChar(haystack0, needle0[0], from, cs);
-
/*
We use the Boyer-Moore algorithm in cases where the overhead
for the skip table should pay off, otherwise we use a simple
@@ -10055,7 +9919,7 @@ qsizetype QtPrivate::findString(QStringView haystack0, qsizetype from, QStringVi
while (haystack <= end) {
hashHaystack += haystack[sl_minus_1];
if (hashHaystack == hashNeedle
- && qt_compare_strings(needle0, sv(haystack), Qt::CaseSensitive) == 0)
+ && QtPrivate::compareStrings(needle0, sv(haystack), Qt::CaseSensitive) == 0)
return haystack - haystack0.utf16();
REHASH(*haystack);
@@ -10072,7 +9936,7 @@ qsizetype QtPrivate::findString(QStringView haystack0, qsizetype from, QStringVi
while (haystack <= end) {
hashHaystack += foldCase(haystack + sl_minus_1, haystack_start);
if (hashHaystack == hashNeedle
- && qt_compare_strings(needle0, sv(haystack), Qt::CaseInsensitive) == 0)
+ && QtPrivate::compareStrings(needle0, sv(haystack), Qt::CaseInsensitive) == 0)
return haystack - haystack0.utf16();
REHASH(foldCase(haystack, haystack_start));
@@ -10082,150 +9946,220 @@ qsizetype QtPrivate::findString(QStringView haystack0, qsizetype from, QStringVi
return -1;
}
-template <typename Haystack>
-static inline qsizetype qLastIndexOf(Haystack haystack, QChar needle,
- qsizetype from, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::findString(QStringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
{
- if (from < 0)
- from += haystack.size();
- if (std::size_t(from) >= std::size_t(haystack.size()))
+ if (haystack.size() < needle.size())
return -1;
- if (from >= 0) {
- char16_t c = needle.unicode();
- const auto b = haystack.data();
- auto n = b + from;
- if (cs == Qt::CaseSensitive) {
- for (; n >= b; --n)
- if (valueTypeToUtf16(*n) == c)
- return n - b;
- } else {
- c = foldCase(c);
- for (; n >= b; --n)
- if (foldCase(valueTypeToUtf16(*n)) == c)
- return n - b;
- }
- }
- return -1;
+
+ QVarLengthArray<char16_t> s = qt_from_latin1_to_qvla(needle);
+ return QtPrivate::findString(haystack, from, QStringView(reinterpret_cast<const QChar*>(s.constData()), s.size()), cs);
}
-template<typename Haystack, typename Needle>
-static qsizetype qLastIndexOf(Haystack haystack0, qsizetype from,
- Needle needle0, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::findString(QLatin1StringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs) noexcept
{
- const qsizetype sl = needle0.size();
- if (sl == 1)
- return qLastIndexOf(haystack0, needle0.front(), from, cs);
+ if (haystack.size() < needle.size())
+ return -1;
- const qsizetype l = haystack0.size();
- if (from < 0)
- from += l;
- if (from == l && sl == 0)
- return from;
- const qsizetype delta = l - sl;
- if (std::size_t(from) >= std::size_t(l) || delta < 0)
+ if (!QtPrivate::isLatin1(needle)) // won't find non-L1 UTF-16 needles in a L1 haystack!
return -1;
- if (from > delta)
- from = delta;
- auto sv = [sl](const typename Haystack::value_type *v) { return Haystack(v, sl); };
+ if (needle.size() == 1) {
+ const char n = needle.front().toLatin1();
+ return QtPrivate::findString(haystack, from, QLatin1StringView(&n, 1), cs);
+ }
- auto haystack = haystack0.data();
- const auto needle = needle0.data();
- const auto *end = haystack;
- haystack += from;
- const std::size_t sl_minus_1 = sl - 1;
- const auto *n = needle + sl_minus_1;
- const auto *h = haystack + sl_minus_1;
- std::size_t hashNeedle = 0, hashHaystack = 0;
- qsizetype idx;
+ QVarLengthArray<char> s(needle.size());
+ qt_to_latin1_unchecked(reinterpret_cast<uchar *>(s.data()), needle.utf16(), needle.size());
+ return QtPrivate::findString(haystack, from, QLatin1StringView(s.data(), s.size()), cs);
+}
+
+qsizetype QtPrivate::findString(QLatin1StringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
+{
+ if (from < 0)
+ from += haystack.size();
+ if (from < 0)
+ return -1;
+ qsizetype adjustedSize = haystack.size() - from;
+ if (adjustedSize < needle.size())
+ return -1;
+ if (needle.size() == 0)
+ return from;
if (cs == Qt::CaseSensitive) {
- for (idx = 0; idx < sl; ++idx) {
- hashNeedle = (hashNeedle << 1) + valueTypeToUtf16(*(n - idx));
- hashHaystack = (hashHaystack << 1) + valueTypeToUtf16(*(h - idx));
- }
- hashHaystack -= valueTypeToUtf16(*haystack);
- while (haystack >= end) {
- hashHaystack += valueTypeToUtf16(*haystack);
- if (hashHaystack == hashNeedle
- && qt_compare_strings(needle0, sv(haystack), Qt::CaseSensitive) == 0)
- return haystack - end;
- --haystack;
- REHASH(valueTypeToUtf16(haystack[sl]));
- }
- } else {
- for (idx = 0; idx < sl; ++idx) {
- hashNeedle = (hashNeedle << 1) + foldCaseHelper(n - idx, needle);
- hashHaystack = (hashHaystack << 1) + foldCaseHelper(h - idx, end);
+ if (needle.size() == 1) {
+ Q_ASSERT(haystack.data() != nullptr); // see size check above
+ if (auto it = memchr(haystack.data() + from, needle.front().toLatin1(), adjustedSize))
+ return static_cast<const char *>(it) - haystack.data();
+ return -1;
}
- hashHaystack -= foldCaseHelper(haystack, end);
- while (haystack >= end) {
- hashHaystack += foldCaseHelper(haystack, end);
- if (hashHaystack == hashNeedle
- && qt_compare_strings(sv(haystack), needle0, Qt::CaseInsensitive) == 0)
- return haystack - end;
- --haystack;
- REHASH(foldCaseHelper(haystack + sl, end));
+ const QLatin1StringMatcher matcher(needle, Qt::CaseSensitivity::CaseSensitive);
+ return matcher.indexIn(haystack, from);
+ }
+
+ // If the needle is sufficiently small we simply iteratively search through
+ // the haystack. When the needle is too long we use a boyer-moore searcher
+ // from the standard library, if available. If it is not available then the
+ // QLatin1Strings are converted to QString and compared as such. Though
+ // initialization is slower the boyer-moore search it employs still makes up
+ // for it when haystack and needle are sufficiently long.
+ // The needle size was chosen by testing various lengths using the
+ // qstringtokenizer benchmark with the
+ // "tokenize_qlatin1string_qlatin1string" test.
+#ifdef Q_CC_MSVC
+ const qsizetype threshold = 1;
+#else
+ const qsizetype threshold = 13;
+#endif
+ if (needle.size() <= threshold) {
+ const auto begin = haystack.begin();
+ const auto end = haystack.end() - needle.size() + 1;
+ auto ciMatch = CaseInsensitiveL1::matcher(needle[0].toLatin1());
+ const qsizetype nlen1 = needle.size() - 1;
+ for (auto it = std::find_if(begin + from, end, ciMatch); it != end;
+ it = std::find_if(it + 1, end, ciMatch)) {
+ // In this comparison we skip the first character because we know it's a match
+ if (!nlen1 || QLatin1StringView(it + 1, nlen1).compare(needle.sliced(1), cs) == 0)
+ return std::distance(begin, it);
}
+ return -1;
}
- return -1;
+
+ QLatin1StringMatcher matcher(needle, Qt::CaseSensitivity::CaseInsensitive);
+ return matcher.indexIn(haystack, from);
}
-qsizetype QtPrivate::findString(QStringView haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::lastIndexOf(QStringView haystack, qsizetype from, char16_t needle, Qt::CaseSensitivity cs) noexcept
{
- if (haystack.size() < needle.size())
- return -1;
+ return qLastIndexOf(haystack, QChar(needle), from, cs);
+}
- QVarLengthArray<char16_t> s(needle.size());
- qt_from_latin1(s.data(), needle.latin1(), needle.size());
- return QtPrivate::findString(haystack, from, QStringView(reinterpret_cast<const QChar*>(s.constData()), s.size()), cs);
+qsizetype QtPrivate::lastIndexOf(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs) noexcept
+{
+ return qLastIndexOf(haystack, from, needle, cs);
}
-qsizetype QtPrivate::findString(QLatin1String haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::lastIndexOf(QStringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
{
- if (haystack.size() < needle.size())
+ return qLastIndexOf(haystack, from, needle, cs);
+}
+
+qsizetype QtPrivate::lastIndexOf(QLatin1StringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs) noexcept
+{
+ return qLastIndexOf(haystack, from, needle, cs);
+}
+
+qsizetype QtPrivate::lastIndexOf(QLatin1StringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs) noexcept
+{
+ return qLastIndexOf(haystack, from, needle, cs);
+}
+
+#if QT_CONFIG(regularexpression)
+qsizetype QtPrivate::indexOf(QStringView viewHaystack, const QString *stringHaystack, const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch)
+{
+ if (!re.isValid()) {
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString(View)::indexOf");
return -1;
+ }
- QVarLengthArray<char16_t> s(haystack.size());
- qt_from_latin1(s.data(), haystack.latin1(), haystack.size());
- return QtPrivate::findString(QStringView(reinterpret_cast<const QChar*>(s.constData()), s.size()), from, needle, cs);
+ QRegularExpressionMatch match = stringHaystack
+ ? re.match(*stringHaystack, from)
+ : re.matchView(viewHaystack, from);
+ if (match.hasMatch()) {
+ const qsizetype ret = match.capturedStart();
+ if (rmatch)
+ *rmatch = std::move(match);
+ return ret;
+ }
+
+ return -1;
}
-qsizetype QtPrivate::findString(QLatin1String haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::indexOf(QStringView haystack, const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch)
{
- if (haystack.size() < needle.size())
+ return indexOf(haystack, nullptr, re, from, rmatch);
+}
+
+qsizetype QtPrivate::lastIndexOf(QStringView viewHaystack, const QString *stringHaystack, const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch)
+{
+ if (!re.isValid()) {
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString(View)::lastIndexOf");
return -1;
+ }
+
+ qsizetype endpos = (from < 0) ? (viewHaystack.size() + from + 1) : (from + 1);
+ QRegularExpressionMatchIterator iterator = stringHaystack
+ ? re.globalMatch(*stringHaystack)
+ : re.globalMatchView(viewHaystack);
+ qsizetype lastIndex = -1;
+ while (iterator.hasNext()) {
+ QRegularExpressionMatch match = iterator.next();
+ qsizetype start = match.capturedStart();
+ if (start < endpos) {
+ lastIndex = start;
+ if (rmatch)
+ *rmatch = std::move(match);
+ } else {
+ break;
+ }
+ }
- QVarLengthArray<char16_t> h(haystack.size());
- qt_from_latin1(h.data(), haystack.latin1(), haystack.size());
- QVarLengthArray<char16_t> n(needle.size());
- qt_from_latin1(n.data(), needle.latin1(), needle.size());
- return QtPrivate::findString(QStringView(reinterpret_cast<const QChar*>(h.constData()), h.size()), from,
- QStringView(reinterpret_cast<const QChar*>(n.constData()), n.size()), cs);
+ return lastIndex;
}
-qsizetype QtPrivate::lastIndexOf(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::lastIndexOf(QStringView haystack, const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch)
{
- return qLastIndexOf(haystack, from, needle, cs);
+ return lastIndexOf(haystack, nullptr, re, from, rmatch);
}
-qsizetype QtPrivate::lastIndexOf(QStringView haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::contains(QStringView viewHaystack, const QString *stringHaystack, const QRegularExpression &re, QRegularExpressionMatch *rmatch)
{
- return qLastIndexOf(haystack, from, needle, cs);
+ if (!re.isValid()) {
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString(View)::contains");
+ return false;
+ }
+ QRegularExpressionMatch m = stringHaystack
+ ? re.match(*stringHaystack)
+ : re.matchView(viewHaystack);
+ bool hasMatch = m.hasMatch();
+ if (hasMatch && rmatch)
+ *rmatch = std::move(m);
+ return hasMatch;
}
-qsizetype QtPrivate::lastIndexOf(QLatin1String haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs) noexcept
+bool QtPrivate::contains(QStringView haystack, const QRegularExpression &re, QRegularExpressionMatch *rmatch)
{
- return qLastIndexOf(haystack, from, needle, cs);
+ return contains(haystack, nullptr, re, rmatch);
}
-qsizetype QtPrivate::lastIndexOf(QLatin1String haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs) noexcept
+qsizetype QtPrivate::count(QStringView haystack, const QRegularExpression &re)
{
- return qLastIndexOf(haystack, from, needle, cs);
+ if (!re.isValid()) {
+ qtWarnAboutInvalidRegularExpression(re.pattern(), "QString(View)::count");
+ return 0;
+ }
+ qsizetype count = 0;
+ qsizetype index = -1;
+ qsizetype len = haystack.size();
+ while (index <= len - 1) {
+ QRegularExpressionMatch match = re.matchView(haystack, index + 1);
+ if (!match.hasMatch())
+ break;
+ count++;
+
+ // Search again, from the next character after the beginning of this
+ // capture. If the capture starts with a surrogate pair, both together
+ // count as "one character".
+ index = match.capturedStart();
+ if (index < len && haystack[index].isHighSurrogate())
+ ++index;
+ }
+ return count;
}
+#endif // QT_CONFIG(regularexpression)
+
/*!
\since 5.0
@@ -10239,20 +10173,24 @@ qsizetype QtPrivate::lastIndexOf(QLatin1String haystack, qsizetype from, QLatin1
*/
QString QString::toHtmlEscaped() const
{
+ const auto pos = std::u16string_view(*this).find_first_of(u"<>&\"");
+ if (pos == std::u16string_view::npos)
+ return *this;
QString rich;
- const int len = length();
+ const qsizetype len = size();
rich.reserve(qsizetype(len * 1.1));
- for (int i = 0; i < len; ++i) {
- if (at(i) == QLatin1Char('<'))
- rich += QLatin1String("&lt;");
- else if (at(i) == QLatin1Char('>'))
- rich += QLatin1String("&gt;");
- else if (at(i) == QLatin1Char('&'))
- rich += QLatin1String("&amp;");
- else if (at(i) == QLatin1Char('"'))
- rich += QLatin1String("&quot;");
+ rich += qToStringViewIgnoringNull(*this).first(pos);
+ for (auto ch : qToStringViewIgnoringNull(*this).sliced(pos)) {
+ if (ch == u'<')
+ rich += "&lt;"_L1;
+ else if (ch == u'>')
+ rich += "&gt;"_L1;
+ else if (ch == u'&')
+ rich += "&amp;"_L1;
+ else if (ch == u'"')
+ rich += "&quot;"_L1;
else
- rich += at(i);
+ rich += ch;
}
rich.squeeze();
return rich;
@@ -10287,10 +10225,10 @@ QString QString::toHtmlEscaped() const
significantly speed up creation of QString instances from data known at
compile time.
- \note QLatin1String can still be more efficient than QStringLiteral
+ \note QLatin1StringView can still be more efficient than QStringLiteral
when the string is passed to a function that has an overload taking
- QLatin1String and this overload avoids conversion to QString. For
- instance, QString::operator==() can compare to a QLatin1String
+ QLatin1StringView and this overload avoids conversion to QString. For
+ instance, QString::operator==() can compare to a QLatin1StringView
directly:
\snippet code/src_corelib_text_qstring.cpp 11
@@ -10302,22 +10240,149 @@ QString QString::toHtmlEscaped() const
\sa QByteArrayLiteral
*/
+#if QT_DEPRECATED_SINCE(6, 8)
+/*!
+ \fn QtLiterals::operator""_qs(const char16_t *str, size_t size)
+
+ \relates QString
+ \since 6.2
+ \deprecated [6.8] Use \c _s from Qt::StringLiterals namespace instead.
+
+ Literal operator that creates a QString out of the first \a size characters in
+ the char16_t string literal \a str.
+
+ The QString is created at compile time, and the generated string data is stored
+ in the read-only segment of the compiled object file. Duplicate literals may
+ share the same read-only memory. This functionality is interchangeable with
+ QStringLiteral, but saves typing when many string literals are present in the
+ code.
+
+ The following code creates a QString:
+ \code
+ auto str = u"hello"_qs;
+ \endcode
+
+ \sa QStringLiteral, QtLiterals::operator""_qba(const char *str, size_t size)
+*/
+#endif // QT_DEPRECATED_SINCE(6, 8)
+
+/*!
+ \fn Qt::Literals::StringLiterals::operator""_s(const char16_t *str, size_t size)
+
+ \relates QString
+ \since 6.4
+
+ Literal operator that creates a QString out of the first \a size characters in
+ the char16_t string literal \a str.
+
+ The QString is created at compile time, and the generated string data is stored
+ in the read-only segment of the compiled object file. Duplicate literals may
+ share the same read-only memory. This functionality is interchangeable with
+ QStringLiteral, but saves typing when many string literals are present in the
+ code.
+
+ The following code creates a QString:
+ \code
+ using namespace Qt::Literals::StringLiterals;
+
+ auto str = u"hello"_s;
+ \endcode
+
+ \sa Qt::Literals::StringLiterals
+*/
+
/*!
\internal
*/
-void QAbstractConcatenable::appendLatin1To(const char *a, int len, QChar *out) noexcept
+void QAbstractConcatenable::appendLatin1To(QLatin1StringView in, QChar *out) noexcept
{
- qt_from_latin1(reinterpret_cast<char16_t *>(out), a, size_t(len));
+ qt_from_latin1(reinterpret_cast<char16_t *>(out), in.data(), size_t(in.size()));
}
-double QStringView::toDouble(bool *ok) const
-{
- return QLocaleData::c()->stringToDouble(*this, ok, QLocale::RejectGroupSeparator);
-}
+/*!
+ \fn template <typename T> qsizetype erase(QString &s, const T &t)
+ \relates QString
+ \since 6.1
-float QStringView::toFloat(bool *ok) const
-{
- return QLocaleData::convertDoubleToFloat(toDouble(ok), ok);
-}
+ Removes all elements that compare equal to \a t from the
+ string \a s. Returns the number of elements removed, if any.
+
+ \sa erase_if
+*/
+
+/*!
+ \fn template <typename Predicate> qsizetype erase_if(QString &s, Predicate pred)
+ \relates QString
+ \since 6.1
+
+ Removes all elements for which the predicate \a pred returns true
+ from the string \a s. Returns the number of elements removed, if
+ any.
+
+ \sa erase
+*/
+
+/*!
+ \macro const char *qPrintable(const QString &str)
+ \relates QString
+
+ Returns \a str as a \c{const char *}. This is equivalent to
+ \a{str}.toLocal8Bit().constData().
+
+ The char pointer will be invalid after the statement in which
+ qPrintable() is used. This is because the array returned by
+ QString::toLocal8Bit() will fall out of scope.
+
+ \note qDebug(), qInfo(), qWarning(), qCritical(), qFatal() expect
+ %s arguments to be UTF-8 encoded, while qPrintable() converts to
+ local 8-bit encoding. Therefore qUtf8Printable() should be used
+ for logging strings instead of qPrintable().
+
+ \sa qUtf8Printable()
+*/
+
+/*!
+ \macro const char *qUtf8Printable(const QString &str)
+ \relates QString
+ \since 5.4
+
+ Returns \a str as a \c{const char *}. This is equivalent to
+ \a{str}.toUtf8().constData().
+
+ The char pointer will be invalid after the statement in which
+ qUtf8Printable() is used. This is because the array returned by
+ QString::toUtf8() will fall out of scope.
+
+ Example:
+
+ \snippet code/src_corelib_text_qstring.cpp qUtf8Printable
+
+ \sa qPrintable(), qDebug(), qInfo(), qWarning(), qCritical(), qFatal()
+*/
+
+/*!
+ \macro const wchar_t *qUtf16Printable(const QString &str)
+ \relates QString
+ \since 5.7
+
+ Returns \a str as a \c{const ushort *}, but cast to a \c{const wchar_t *}
+ to avoid warnings. This is equivalent to \a{str}.utf16() plus some casting.
+
+ The only useful thing you can do with the return value of this macro is to
+ pass it to QString::asprintf() for use in a \c{%ls} conversion. In particular,
+ the return value is \e{not} a valid \c{const wchar_t*}!
+
+ In general, the pointer will be invalid after the statement in which
+ qUtf16Printable() is used. This is because the pointer may have been
+ obtained from a temporary expression, which will fall out of scope.
+
+ Example:
+
+ \snippet code/src_corelib_text_qstring.cpp qUtf16Printable
+
+ \sa qPrintable(), qDebug(), qInfo(), qWarning(), qCritical(), qFatal()
+*/
QT_END_NAMESPACE
+
+#undef REHASH
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h
index 789d06f9a2..895ec4b5c0 100644
--- a/src/corelib/text/qstring.h
+++ b/src/corelib/text/qstring.h
@@ -1,44 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2019 Intel Corporation.
-** Copyright (C) 2019 Mail.ru Group.
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2019 Intel Corporation.
+// Copyright (C) 2019 Mail.ru Group.
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRING_H
#define QSTRING_H
@@ -48,8 +12,11 @@
#endif
#include <QtCore/qchar.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qbytearray.h>
+#include <QtCore/qbytearrayview.h>
#include <QtCore/qarraydata.h>
+#include <QtCore/qlatin1stringview.h>
#include <QtCore/qnamespace.h>
#include <QtCore/qstringliteral.h>
#include <QtCore/qstringalgorithms.h>
@@ -58,6 +25,8 @@
#include <string>
#include <iterator>
+#include <QtCore/q20memory.h>
+#include <string_view>
#include <stdarg.h>
@@ -70,6 +39,8 @@ Q_FORWARD_DECLARE_CF_TYPE(CFString);
Q_FORWARD_DECLARE_OBJC_CLASS(NSString);
#endif
+class tst_QString;
+
QT_BEGIN_NAMESPACE
class QRegularExpression;
@@ -78,222 +49,57 @@ class QString;
namespace QtPrivate {
template <bool...B> class BoolList;
-}
-
-class QLatin1String
-{
-public:
- constexpr inline QLatin1String() noexcept : m_size(0), m_data(nullptr) {}
- constexpr inline explicit QLatin1String(const char *s) noexcept : m_size(s ? qsizetype(strlen(s)) : 0), m_data(s) {}
- constexpr explicit QLatin1String(const char *f, const char *l)
- : QLatin1String(f, qsizetype(l - f)) {}
- constexpr inline explicit QLatin1String(const char *s, qsizetype sz) noexcept : m_size(sz), m_data(s) {}
- explicit QLatin1String(const QByteArray &s) noexcept : m_size(qsizetype(qstrnlen(s.constData(), s.size()))), m_data(s.constData()) {}
-
- inline QString toString() const;
-
- constexpr const char *latin1() const noexcept { return m_data; }
- constexpr qsizetype size() const noexcept { return m_size; }
- constexpr const char *data() const noexcept { return m_data; }
-
- constexpr bool isNull() const noexcept { return !data(); }
- constexpr bool isEmpty() const noexcept { return !size(); }
-
- template <typename...Args>
- Q_REQUIRED_RESULT inline QString arg(Args &&...args) const;
-
- [[nodiscard]] constexpr QLatin1Char at(qsizetype i) const
- { return Q_ASSERT(i >= 0), Q_ASSERT(i < size()), QLatin1Char(m_data[i]); }
- [[nodiscard]] constexpr QLatin1Char operator[](qsizetype i) const { return at(i); }
-
- Q_REQUIRED_RESULT constexpr QLatin1Char front() const { return at(0); }
- Q_REQUIRED_RESULT constexpr QLatin1Char back() const { return at(size() - 1); }
-
- Q_REQUIRED_RESULT int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::compareStrings(*this, other, cs); }
- Q_REQUIRED_RESULT int compare(QLatin1String other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::compareStrings(*this, other, cs); }
- Q_REQUIRED_RESULT constexpr int compare(QChar c) const noexcept
- { return isEmpty() || front() == c ? size() - 1 : uchar(m_data[0]) - c.unicode() ; }
- Q_REQUIRED_RESULT int compare(QChar c, Qt::CaseSensitivity cs) const noexcept
- { return QtPrivate::compareStrings(*this, QStringView(&c, 1), cs); }
-
- Q_REQUIRED_RESULT bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::startsWith(*this, s, cs); }
- Q_REQUIRED_RESULT bool startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::startsWith(*this, s, cs); }
- Q_REQUIRED_RESULT constexpr bool startsWith(QChar c) const noexcept
- { return !isEmpty() && front() == c; }
- Q_REQUIRED_RESULT inline bool startsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
- { return QtPrivate::startsWith(*this, QStringView(&c, 1), cs); }
-
- Q_REQUIRED_RESULT bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::endsWith(*this, s, cs); }
- Q_REQUIRED_RESULT bool endsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::endsWith(*this, s, cs); }
- Q_REQUIRED_RESULT constexpr bool endsWith(QChar c) const noexcept
- { return !isEmpty() && back() == c; }
- Q_REQUIRED_RESULT inline bool endsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
- { return QtPrivate::endsWith(*this, QStringView(&c, 1), cs); }
-
- [[nodiscard]] qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::findString(*this, from, s, cs); }
- [[nodiscard]] qsizetype indexOf(QLatin1String s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::findString(*this, from, s, cs); }
- [[nodiscard]] qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::findString(*this, from, QStringView(&c, 1), cs); }
-
- Q_REQUIRED_RESULT bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return indexOf(s, 0, cs) != -1; }
- Q_REQUIRED_RESULT bool contains(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return indexOf(s, 0, cs) != -1; }
- Q_REQUIRED_RESULT inline bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return indexOf(QStringView(&c, 1), 0, cs) != -1; }
-
- [[nodiscard]] qsizetype lastIndexOf(QStringView s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::lastIndexOf(*this, from, s, cs); }
- [[nodiscard]] qsizetype lastIndexOf(QLatin1String s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::lastIndexOf(*this, from, s, cs); }
- [[nodiscard]] qsizetype lastIndexOf(QChar c, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::lastIndexOf(*this, from, QStringView(&c, 1), cs); }
-
- using value_type = const char;
- using reference = value_type&;
- using const_reference = reference;
- using iterator = value_type*;
- using const_iterator = iterator;
- using difference_type = qsizetype; // violates Container concept requirements
- using size_type = qsizetype; // violates Container concept requirements
-
- constexpr const_iterator begin() const noexcept { return data(); }
- constexpr const_iterator cbegin() const noexcept { return data(); }
- constexpr const_iterator end() const noexcept { return data() + size(); }
- constexpr const_iterator cend() const noexcept { return data() + size(); }
-
- using reverse_iterator = std::reverse_iterator<iterator>;
- using const_reverse_iterator = reverse_iterator;
-
- const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
- const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); }
- const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
- const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); }
-
- [[nodiscard]] constexpr QLatin1String mid(qsizetype pos, qsizetype n = -1) const
- {
- using namespace QtPrivate;
- auto result = QContainerImplHelper::mid(size(), &pos, &n);
- return result == QContainerImplHelper::Null ? QLatin1String() : QLatin1String(m_data + pos, n);
- }
- [[nodiscard]] constexpr QLatin1String left(qsizetype n) const
- {
- if (size_t(n) >= size_t(size()))
- n = size();
- return QLatin1String(m_data, n);
- }
- [[nodiscard]] constexpr QLatin1String right(qsizetype n) const
- {
- if (size_t(n) >= size_t(size()))
- n = size();
- return QLatin1String(m_data + m_size - n, n);
- }
-
- [[nodiscard]] constexpr QLatin1String sliced(qsizetype pos) const
- { verify(pos); return QLatin1String(m_data + pos, m_size - pos); }
- [[nodiscard]] constexpr QLatin1String sliced(qsizetype pos, qsizetype n) const
- { verify(pos, n); return QLatin1String(m_data + pos, n); }
- [[nodiscard]] constexpr QLatin1String first(qsizetype n) const
- { verify(n); return QLatin1String(m_data, n); }
- [[nodiscard]] constexpr QLatin1String last(qsizetype n) const
- { verify(n); return QLatin1String(m_data + size() - n, n); }
- [[nodiscard]] constexpr QLatin1String chopped(qsizetype n) const
- { verify(n); return QLatin1String(m_data, size() - n); }
-
- constexpr void chop(qsizetype n)
- { verify(n); m_size -= n; }
- constexpr void truncate(qsizetype n)
- { verify(n); m_size = n; }
-
- Q_REQUIRED_RESULT QLatin1String trimmed() const noexcept { return QtPrivate::trimmed(*this); }
-
- template <typename Needle, typename...Flags>
- Q_REQUIRED_RESULT inline constexpr auto tokenize(Needle &&needle, Flags...flags) const
- noexcept(noexcept(qTokenize(std::declval<const QLatin1String &>(), std::forward<Needle>(needle), flags...)))
- -> decltype(qTokenize(*this, std::forward<Needle>(needle), flags...))
- { return qTokenize(*this, std::forward<Needle>(needle), flags...); }
-
- inline bool operator==(const QString &s) const noexcept;
- inline bool operator!=(const QString &s) const noexcept;
- inline bool operator>(const QString &s) const noexcept;
- inline bool operator<(const QString &s) const noexcept;
- inline bool operator>=(const QString &s) const noexcept;
- inline bool operator<=(const QString &s) const noexcept;
-#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
- inline QT_ASCII_CAST_WARN bool operator==(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator!=(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator<(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator>(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator<=(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator>=(const char *s) const;
-
- inline QT_ASCII_CAST_WARN bool operator==(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator!=(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator<(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator>(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator<=(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator>=(const QByteArray &s) const;
-#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
-
-private:
- Q_ALWAYS_INLINE constexpr void verify(qsizetype pos, qsizetype n = 0) const
- {
- Q_ASSERT(pos >= 0);
- Q_ASSERT(pos <= size());
- Q_ASSERT(n >= 0);
- Q_ASSERT(n <= size() - pos);
- }
- qsizetype m_size;
- const char *m_data;
-};
-Q_DECLARE_TYPEINFO(QLatin1String, Q_MOVABLE_TYPE);
+template <typename Char>
+using IsCompatibleChar32TypeHelper =
+ std::is_same<Char, char32_t>;
+template <typename Char>
+using IsCompatibleChar32Type
+ = IsCompatibleChar32TypeHelper<q20::remove_cvref_t<Char>>;
+}
// Qt 4.x compatibility
//
-// QLatin1String inline implementations
+// QLatin1StringView inline implementations
//
-constexpr bool QtPrivate::isLatin1(QLatin1String) noexcept
+constexpr bool QtPrivate::isLatin1(QLatin1StringView) noexcept
{ return true; }
//
-// QStringView members that require QLatin1String:
+// QStringView members that require QLatin1StringView:
//
-int QStringView::compare(QLatin1String s, Qt::CaseSensitivity cs) const noexcept
+int QStringView::compare(QLatin1StringView s, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::compareStrings(*this, s, cs); }
-bool QStringView::startsWith(QLatin1String s, Qt::CaseSensitivity cs) const noexcept
+bool QStringView::startsWith(QLatin1StringView s, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::startsWith(*this, s, cs); }
-bool QStringView::endsWith(QLatin1String s, Qt::CaseSensitivity cs) const noexcept
+bool QStringView::endsWith(QLatin1StringView s, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::endsWith(*this, s, cs); }
-qsizetype QStringView::indexOf(QLatin1String s, qsizetype from, Qt::CaseSensitivity cs) const noexcept
+qsizetype QStringView::indexOf(QLatin1StringView s, qsizetype from, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::findString(*this, from, s, cs); }
-bool QStringView::contains(QLatin1String s, Qt::CaseSensitivity cs) const noexcept
+bool QStringView::contains(QLatin1StringView s, Qt::CaseSensitivity cs) const noexcept
{ return indexOf(s, 0, cs) != qsizetype(-1); }
-qsizetype QStringView::lastIndexOf(QLatin1String s, qsizetype from, Qt::CaseSensitivity cs) const noexcept
+qsizetype QStringView::lastIndexOf(QLatin1StringView s, Qt::CaseSensitivity cs) const noexcept
+{ return QtPrivate::lastIndexOf(*this, size(), s, cs); }
+qsizetype QStringView::lastIndexOf(QLatin1StringView s, qsizetype from, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::lastIndexOf(*this, from, s, cs); }
+qsizetype QStringView::count(QLatin1StringView s, Qt::CaseSensitivity cs) const
+{ return QtPrivate::count(*this, s, cs); }
//
-// QAnyStringView members that require QLatin1String
+// QAnyStringView members that require QLatin1StringView
//
-constexpr QAnyStringView::QAnyStringView(QLatin1String str) noexcept
- : m_data{str.data()}, m_size{size_t(str.size()) | Tag::Latin1} {}
+constexpr QAnyStringView::QAnyStringView(QLatin1StringView str) noexcept
+ : m_data{str.data()}, m_size{size_t(str.size() << SizeShift) | Tag::Latin1} {}
-constexpr QLatin1String QAnyStringView::asLatin1StringView() const
+constexpr QLatin1StringView QAnyStringView::asLatin1StringView() const
{
Q_ASSERT(isLatin1());
- return QLatin1String{m_data_utf8, int(size())};
+ return {m_data_utf8, size()};
}
+
template <typename Visitor>
constexpr decltype(auto) QAnyStringView::visit(Visitor &&v) const
{
@@ -322,35 +128,87 @@ constexpr QChar QAnyStringView::back() const
class Q_CORE_EXPORT QString
{
typedef QTypedArrayData<char16_t> Data;
+
+ friend class ::tst_QString;
+
+ template <typename Iterator>
+ static constexpr bool is_contiguous_iterator_v =
+ // Can't use contiguous_iterator_tag here, as STL impls can't agree on feature macro.
+ // To avoid differences in C++20 and C++17 builds, treat only pointers as contiguous
+ // for now:
+ // std::contiguous_iterator<Iterator>;
+ std::is_pointer_v<Iterator>;
+
+ template <typename Char>
+ using is_compatible_char_helper = std::disjunction<
+ QtPrivate::IsCompatibleCharType<Char>,
+ QtPrivate::IsCompatibleChar32Type<Char>,
+ QtPrivate::IsCompatibleChar8Type<Char>,
+ std::is_same<Char, QLatin1Char> // special case
+ >;
+
+ template <typename Iterator>
+ static constexpr bool is_compatible_iterator_v = std::conjunction_v<
+ std::is_convertible<
+ typename std::iterator_traits<Iterator>::iterator_category,
+ std::input_iterator_tag
+ >,
+ is_compatible_char_helper<typename std::iterator_traits<Iterator>::value_type>
+ >;
+
+ template <typename Iterator>
+ using if_compatible_iterator = std::enable_if_t<is_compatible_iterator_v<Iterator>, bool>;
+
public:
typedef QStringPrivate DataPointer;
- inline constexpr QString() noexcept;
+ constexpr QString() noexcept;
explicit QString(const QChar *unicode, qsizetype size = -1);
QString(QChar c);
QString(qsizetype size, QChar c);
- inline QString(QLatin1String latin1);
+ inline QString(QLatin1StringView latin1);
+ explicit QString(QStringView sv) : QString(sv.data(), sv.size()) {}
+#if defined(__cpp_char8_t) || defined(Q_QDOC)
+ Q_WEAK_OVERLOAD
+ inline QString(const char8_t *str)
+ : QString(fromUtf8(str))
+ {}
+#endif
inline QString(const QString &) noexcept;
inline ~QString();
QString &operator=(QChar c);
QString &operator=(const QString &) noexcept;
- QString &operator=(QLatin1String latin1);
+ QString &operator=(QLatin1StringView latin1);
inline QString(QString &&other) noexcept
- { qSwap(d, other.d); }
- inline QString &operator=(QString &&other) noexcept
- { qSwap(d, other.d); return *this; }
- inline void swap(QString &other) noexcept { qSwap(d, other.d); }
- inline qsizetype size() const { return d.size; }
+ = default;
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QString)
+ void swap(QString &other) noexcept { d.swap(other.d); }
+ inline qsizetype size() const noexcept { return d.size; }
+#if QT_DEPRECATED_SINCE(6, 4)
+ QT_DEPRECATED_VERSION_X_6_4("Use size() or length() instead.")
inline qsizetype count() const { return d.size; }
- inline qsizetype length() const { return d.size; }
- inline bool isEmpty() const;
+#endif
+ inline qsizetype length() const noexcept { return d.size; }
+ inline bool isEmpty() const noexcept { return d.size == 0; }
void resize(qsizetype size);
void resize(qsizetype size, QChar fillChar);
+ void resizeForOverwrite(qsizetype size);
QString &fill(QChar c, qsizetype size = -1);
void truncate(qsizetype pos);
void chop(qsizetype n);
+ QString &slice(qsizetype pos)
+ { verify(pos, 0); return remove(0, pos); }
+ QString &slice(qsizetype pos, qsizetype n)
+ {
+ verify(pos, n);
+ if (isNull())
+ return *this;
+ resize(pos + n);
+ return remove(0, pos);
+ }
+
inline qsizetype capacity() const;
inline void reserve(qsizetype size);
inline void squeeze();
@@ -363,61 +221,56 @@ public:
inline void detach();
inline bool isDetached() const;
inline bool isSharedWith(const QString &other) const { return d.isSharedWith(other.d); }
- void clear();
+ inline void clear();
inline const QChar at(qsizetype i) const;
- const QChar operator[](qsizetype i) const;
- Q_REQUIRED_RESULT QChar &operator[](qsizetype i);
-
- Q_REQUIRED_RESULT inline QChar front() const { return at(0); }
- Q_REQUIRED_RESULT inline QChar &front();
- Q_REQUIRED_RESULT inline QChar back() const { return at(size() - 1); }
- Q_REQUIRED_RESULT inline QChar &back();
-
- Q_REQUIRED_RESULT QString arg(qlonglong a, int fieldwidth=0, int base=10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(qulonglong a, int fieldwidth=0, int base=10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(long a, int fieldwidth=0, int base=10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(ulong a, int fieldwidth=0, int base=10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(int a, int fieldWidth = 0, int base = 10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(uint a, int fieldWidth = 0, int base = 10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(short a, int fieldWidth = 0, int base = 10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(ushort a, int fieldWidth = 0, int base = 10,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(double a, int fieldWidth = 0, char fmt = 'g', int prec = -1,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(char a, int fieldWidth = 0,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(QChar a, int fieldWidth = 0,
- QChar fillChar = QLatin1Char(' ')) const;
-#if QT_STRINGVIEW_LEVEL < 2
- Q_REQUIRED_RESULT QString arg(const QString &a, int fieldWidth = 0,
- QChar fillChar = QLatin1Char(' ')) const;
-#endif
- Q_REQUIRED_RESULT QString arg(QStringView a, int fieldWidth = 0,
- QChar fillChar = QLatin1Char(' ')) const;
- Q_REQUIRED_RESULT QString arg(QLatin1String a, int fieldWidth = 0,
- QChar fillChar = QLatin1Char(' ')) const;
+ inline const QChar operator[](qsizetype i) const;
+ [[nodiscard]] inline QChar &operator[](qsizetype i);
+
+ [[nodiscard]] inline QChar front() const { return at(0); }
+ [[nodiscard]] inline QChar &front();
+ [[nodiscard]] inline QChar back() const { return at(size() - 1); }
+ [[nodiscard]] inline QChar &back();
+
+ [[nodiscard]] QString arg(qlonglong a, int fieldwidth=0, int base=10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(qulonglong a, int fieldwidth=0, int base=10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] inline QString arg(long a, int fieldwidth=0, int base=10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] inline QString arg(ulong a, int fieldwidth=0, int base=10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] inline QString arg(int a, int fieldWidth = 0, int base = 10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] inline QString arg(uint a, int fieldWidth = 0, int base = 10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] inline QString arg(short a, int fieldWidth = 0, int base = 10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] inline QString arg(ushort a, int fieldWidth = 0, int base = 10,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(double a, int fieldWidth = 0, char format = 'g', int precision = -1,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(char a, int fieldWidth = 0,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(QChar a, int fieldWidth = 0,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(const QString &a, int fieldWidth = 0,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(QStringView a, int fieldWidth = 0,
+ QChar fillChar = u' ') const;
+ [[nodiscard]] QString arg(QLatin1StringView a, int fieldWidth = 0,
+ QChar fillChar = u' ') const;
private:
template <typename T>
- struct is_convertible_to_view_or_qstring_helper
- : std::integral_constant<bool,
- std::is_convertible<T, QString>::value ||
- std::is_convertible<T, QStringView>::value ||
- std::is_convertible<T, QLatin1String>::value> {};
- template <typename T>
- struct is_convertible_to_view_or_qstring
- : is_convertible_to_view_or_qstring_helper<typename std::decay<T>::type> {};
+ using is_convertible_to_view_or_qstring = std::disjunction<
+ std::is_convertible<T, QString>,
+ std::is_convertible<T, QStringView>,
+ std::is_convertible<T, QLatin1StringView>
+ >;
public:
template <typename...Args>
- Q_REQUIRED_RESULT
-#ifdef Q_CLANG_QDOC
+ [[nodiscard]]
+#ifdef Q_QDOC
QString
#else
typename std::enable_if<
@@ -434,39 +287,51 @@ public:
static QString vasprintf(const char *format, va_list ap) Q_ATTRIBUTE_FORMAT_PRINTF(1, 0);
static QString asprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(1, 2);
+ [[nodiscard]] QT_CORE_INLINE_SINCE(6, 7)
qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- qsizetype indexOf(QLatin1String s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#if QT_STRINGVIEW_LEVEL < 2
- qsizetype indexOf(const QString &s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#endif
- Q_REQUIRED_RESULT qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] qsizetype indexOf(QLatin1StringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] qsizetype indexOf(const QString &s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::findString(*this, from, s, cs); }
- qsizetype lastIndexOf(QChar c, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- qsizetype lastIndexOf(QLatin1String s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#if QT_STRINGVIEW_LEVEL < 2
- qsizetype lastIndexOf(const QString &s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#endif
-
- Q_REQUIRED_RESULT qsizetype lastIndexOf(QStringView s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(c, -1, cs); }
+ [[nodiscard]] QT_CORE_INLINE_SINCE(6, 7)
+ qsizetype lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] qsizetype lastIndexOf(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return lastIndexOf(s, size(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QLatin1StringView s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] qsizetype lastIndexOf(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return lastIndexOf(s, size(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(const QString &s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+
+ [[nodiscard]] qsizetype lastIndexOf(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(s, size(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QStringView s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::lastIndexOf(*this, from, s, cs); }
- inline bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#if QT_STRINGVIEW_LEVEL < 2
- inline bool contains(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#endif
- inline bool contains(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- inline bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- qsizetype count(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- qsizetype count(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- qsizetype count(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] inline bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] inline bool contains(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] inline bool contains(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] inline bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] qsizetype count(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] qsizetype count(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] qsizetype count(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
#if QT_CONFIG(regularexpression)
- qsizetype indexOf(const QRegularExpression &re, qsizetype from = 0,
- QRegularExpressionMatch *rmatch = nullptr) const;
- qsizetype lastIndexOf(const QRegularExpression &re, qsizetype from = -1,
- QRegularExpressionMatch *rmatch = nullptr) const;
- bool contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const;
- qsizetype count(const QRegularExpression &re) const;
+ [[nodiscard]] qsizetype indexOf(const QRegularExpression &re, qsizetype from = 0,
+ QRegularExpressionMatch *rmatch = nullptr) const;
+#ifdef Q_QDOC
+ [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const;
+#else
+ // prevent an ambiguity when called like this: lastIndexOf(re, 0)
+ template <typename T = QRegularExpressionMatch, std::enable_if_t<std::is_same_v<T, QRegularExpressionMatch>, bool> = false>
+ [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, T *rmatch = nullptr) const
+ { return lastIndexOf(re, size(), rmatch); }
+#endif
+ [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, qsizetype from,
+ QRegularExpressionMatch *rmatch = nullptr) const;
+ [[nodiscard]] bool contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const;
+ [[nodiscard]] qsizetype count(const QRegularExpression &re) const;
#endif
enum SectionFlag {
@@ -478,127 +343,239 @@ public:
};
Q_DECLARE_FLAGS(SectionFlags, SectionFlag)
- QString section(QChar sep, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
- QString section(const QString &in_sep, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
+ [[nodiscard]] inline QString section(QChar sep, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
+ [[nodiscard]] QString section(const QString &in_sep, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
#if QT_CONFIG(regularexpression)
- QString section(const QRegularExpression &re, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
+ [[nodiscard]] QString section(const QRegularExpression &re, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
#endif
- Q_REQUIRED_RESULT QString left(qsizetype n) const;
- Q_REQUIRED_RESULT QString right(qsizetype n) const;
- Q_REQUIRED_RESULT QString mid(qsizetype position, qsizetype n = -1) const;
-
- Q_REQUIRED_RESULT QString first(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QString(data(), n); }
- Q_REQUIRED_RESULT QString last(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QString(data() + size() - n, n); }
- Q_REQUIRED_RESULT QString sliced(qsizetype pos) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(pos <= size()); return QString(data() + pos, size() - pos); }
- Q_REQUIRED_RESULT QString sliced(qsizetype pos, qsizetype n) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(n >= 0); Q_ASSERT(size_t(pos) + size_t(n) <= size_t(size())); return QString(data() + pos, n); }
- Q_REQUIRED_RESULT QString chopped(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return first(size() - n); }
-
-
-#if QT_STRINGVIEW_LEVEL < 2
- bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+
+#if QT_CORE_REMOVED_SINCE(6, 7)
+ QString left(qsizetype n) const;
+ QString right(qsizetype n) const;
+ QString mid(qsizetype position, qsizetype n = -1) const;
+
+ QString first(qsizetype n) const;
+ QString last(qsizetype n) const;
+ QString sliced(qsizetype pos) const;
+ QString sliced(qsizetype pos, qsizetype n) const;
+ QString chopped(qsizetype n) const;
+#else
+ [[nodiscard]] QString left(qsizetype n) const &
+ {
+ if (size_t(n) >= size_t(size()))
+ return *this;
+ return first(n);
+ }
+ [[nodiscard]] QString left(qsizetype n) &&
+ {
+ if (size_t(n) >= size_t(size()))
+ return std::move(*this);
+ return std::move(*this).first(n);
+ }
+ [[nodiscard]] QString right(qsizetype n) const &
+ {
+ if (size_t(n) >= size_t(size()))
+ return *this;
+ return last(n);
+ }
+ [[nodiscard]] QString right(qsizetype n) &&
+ {
+ if (size_t(n) >= size_t(size()))
+ return std::move(*this);
+ return std::move(*this).last(n);
+ }
+ [[nodiscard]] QString mid(qsizetype position, qsizetype n = -1) const &;
+ [[nodiscard]] QString mid(qsizetype position, qsizetype n = -1) &&;
+
+ [[nodiscard]] QString first(qsizetype n) const &
+ { verify(0, n); return sliced(0, n); }
+ [[nodiscard]] QString last(qsizetype n) const &
+ { verify(0, n); return sliced(size() - n, n); }
+ [[nodiscard]] QString sliced(qsizetype pos) const &
+ { verify(pos, 0); return sliced(pos, size() - pos); }
+ [[nodiscard]] QString sliced(qsizetype pos, qsizetype n) const &
+ { verify(pos, n); return QString(begin() + pos, n); }
+ [[nodiscard]] QString chopped(qsizetype n) const &
+ { verify(0, n); return sliced(0, size() - n); }
+
+ [[nodiscard]] QString first(qsizetype n) &&
+ {
+ verify(0, n);
+ resize(n); // may detach and allocate memory
+ return std::move(*this);
+ }
+ [[nodiscard]] QString last(qsizetype n) &&
+ { verify(0, n); return sliced_helper(*this, size() - n, n); }
+ [[nodiscard]] QString sliced(qsizetype pos) &&
+ { verify(pos, 0); return sliced_helper(*this, pos, size() - pos); }
+ [[nodiscard]] QString sliced(qsizetype pos, qsizetype n) &&
+ { verify(pos, n); return sliced_helper(*this, pos, n); }
+ [[nodiscard]] QString chopped(qsizetype n) &&
+ { verify(0, n); return std::move(*this).first(size() - n); }
#endif
- Q_REQUIRED_RESULT bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ [[nodiscard]] bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::startsWith(*this, s, cs); }
- bool startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ bool startsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#if QT_STRINGVIEW_LEVEL < 2
bool endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
-#endif
- Q_REQUIRED_RESULT bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::endsWith(*this, s, cs); }
- bool endsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ bool endsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
bool endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
bool isUpper() const;
bool isLower() const;
- Q_REQUIRED_RESULT QString leftJustified(qsizetype width, QChar fill = QLatin1Char(' '), bool trunc = false) const;
- Q_REQUIRED_RESULT QString rightJustified(qsizetype width, QChar fill = QLatin1Char(' '), bool trunc = false) const;
+ [[nodiscard]] QString leftJustified(qsizetype width, QChar fill = u' ', bool trunc = false) const;
+ [[nodiscard]] QString rightJustified(qsizetype width, QChar fill = u' ', bool trunc = false) const;
-#if !defined(Q_CLANG_QDOC)
- Q_REQUIRED_RESULT QString toLower() const &
+#if !defined(Q_QDOC)
+ [[nodiscard]] QString toLower() const &
{ return toLower_helper(*this); }
- Q_REQUIRED_RESULT QString toLower() &&
+ [[nodiscard]] QString toLower() &&
{ return toLower_helper(*this); }
- Q_REQUIRED_RESULT QString toUpper() const &
+ [[nodiscard]] QString toUpper() const &
{ return toUpper_helper(*this); }
- Q_REQUIRED_RESULT QString toUpper() &&
+ [[nodiscard]] QString toUpper() &&
{ return toUpper_helper(*this); }
- Q_REQUIRED_RESULT QString toCaseFolded() const &
+ [[nodiscard]] QString toCaseFolded() const &
{ return toCaseFolded_helper(*this); }
- Q_REQUIRED_RESULT QString toCaseFolded() &&
+ [[nodiscard]] QString toCaseFolded() &&
{ return toCaseFolded_helper(*this); }
- Q_REQUIRED_RESULT QString trimmed() const &
+ [[nodiscard]] QString trimmed() const &
{ return trimmed_helper(*this); }
- Q_REQUIRED_RESULT QString trimmed() &&
+ [[nodiscard]] QString trimmed() &&
{ return trimmed_helper(*this); }
- Q_REQUIRED_RESULT QString simplified() const &
+ [[nodiscard]] QString simplified() const &
{ return simplified_helper(*this); }
- Q_REQUIRED_RESULT QString simplified() &&
+ [[nodiscard]] QString simplified() &&
{ return simplified_helper(*this); }
#else
- Q_REQUIRED_RESULT QString toLower() const;
- Q_REQUIRED_RESULT QString toUpper() const;
- Q_REQUIRED_RESULT QString toCaseFolded() const;
- Q_REQUIRED_RESULT QString trimmed() const;
- Q_REQUIRED_RESULT QString simplified() const;
+ [[nodiscard]] QString toLower() const;
+ [[nodiscard]] QString toUpper() const;
+ [[nodiscard]] QString toCaseFolded() const;
+ [[nodiscard]] QString trimmed() const;
+ [[nodiscard]] QString simplified() const;
#endif
- Q_REQUIRED_RESULT QString toHtmlEscaped() const;
+ [[nodiscard]] QString toHtmlEscaped() const;
QString &insert(qsizetype i, QChar c);
QString &insert(qsizetype i, const QChar *uc, qsizetype len);
-#if QT_STRINGVIEW_LEVEL < 2
- inline QString &insert(qsizetype i, const QString &s) { return insert(i, s.constData(), s.length()); }
-#endif
- inline QString &insert(qsizetype i, QStringView v) { return insert(i, v.data(), v.length()); }
- QString &insert(qsizetype i, QLatin1String s);
+ inline QString &insert(qsizetype i, const QString &s) { return insert(i, s.constData(), s.size()); }
+ inline QString &insert(qsizetype i, QStringView v) { return insert(i, v.data(), v.size()); }
+ QString &insert(qsizetype i, QLatin1StringView s);
+ QString &insert(qsizetype i, QUtf8StringView s);
QString &append(QChar c);
QString &append(const QChar *uc, qsizetype len);
-#if QT_STRINGVIEW_LEVEL < 2
QString &append(const QString &s);
-#endif
- inline QString &append(QStringView v) { return append(v.data(), v.length()); }
- QString &append(QLatin1String s);
+ inline QString &append(QStringView v) { return append(v.data(), v.size()); }
+ QString &append(QLatin1StringView s);
+ QString &append(QUtf8StringView s);
inline QString &prepend(QChar c) { return insert(0, c); }
inline QString &prepend(const QChar *uc, qsizetype len) { return insert(0, uc, len); }
-#if QT_STRINGVIEW_LEVEL < 2
inline QString &prepend(const QString &s) { return insert(0, s); }
-#endif
- inline QString &prepend(QStringView v) { return prepend(v.data(), v.length()); }
- inline QString &prepend(QLatin1String s) { return insert(0, s); }
+ inline QString &prepend(QStringView v) { return prepend(v.data(), v.size()); }
+ inline QString &prepend(QLatin1StringView s) { return insert(0, s); }
+ QString &prepend(QUtf8StringView s) { return insert(0, s); }
+
+ QString &assign(QAnyStringView s);
+ inline QString &assign(qsizetype n, QChar c)
+ {
+ Q_ASSERT(n >= 0);
+ return fill(c, n);
+ }
+ template <typename InputIterator, if_compatible_iterator<InputIterator> = true>
+ QString &assign(InputIterator first, InputIterator last)
+ {
+ using V = typename std::iterator_traits<InputIterator>::value_type;
+ constexpr bool IsL1C = std::is_same_v<std::remove_cv_t<V>, QLatin1Char>;
+ constexpr bool IsFwdIt = std::is_convertible_v<
+ typename std::iterator_traits<InputIterator>::iterator_category,
+ std::forward_iterator_tag
+ >;
+
+ if constexpr (is_contiguous_iterator_v<InputIterator>) {
+ const auto p = q20::to_address(first);
+ const auto len = qsizetype(last - first);
+ if constexpr (IsL1C)
+ return assign(QLatin1StringView(reinterpret_cast<const char*>(p), len));
+ else if constexpr (sizeof(V) == 4)
+ return assign_helper(p, len);
+ else
+ return assign(QAnyStringView(p, len));
+ } else if constexpr (sizeof(V) == 4) { // non-contiguous iterator, feed data piecemeal
+ resize(0);
+ if constexpr (IsFwdIt) {
+ const qsizetype requiredCapacity = 2 * std::distance(first, last);
+ reserve(requiredCapacity);
+ }
+ while (first != last) {
+ append(QChar::fromUcs4(*first));
+ ++first;
+ }
+ return *this;
+ } else if constexpr (QtPrivate::IsCompatibleChar8Type<V>::value) {
+ assign_helper_char8(first, last);
+ d.data()[d.size] = u'\0';
+ return *this;
+ } else {
+ d.assign(first, last, [](QChar ch) -> char16_t { return ch.unicode(); });
+ d.data()[d.size] = u'\0';
+ return *this;
+ }
+ }
inline QString &operator+=(QChar c) { return append(c); }
-#if QT_STRINGVIEW_LEVEL < 2
inline QString &operator+=(const QString &s) { return append(s); }
-#endif
inline QString &operator+=(QStringView v) { return append(v); }
- inline QString &operator+=(QLatin1String s) { return append(s); }
+ inline QString &operator+=(QLatin1StringView s) { return append(s); }
+ QString &operator+=(QUtf8StringView s) { return append(s); }
+
+#if defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ template <qsizetype N>
+ QString &insert(qsizetype i, const char (&ch)[N]) { return insert(i, QUtf8StringView(ch)); }
+ template <qsizetype N>
+ QString &append(const char (&ch)[N]) { return append(QUtf8StringView(ch)); }
+ template <qsizetype N>
+ QString &prepend(const char (&ch)[N]) { return prepend(QUtf8StringView(ch)); }
+ template <qsizetype N>
+ QString &operator+=(const char (&ch)[N]) { return append(QUtf8StringView(ch)); }
+#endif
QString &remove(qsizetype i, qsizetype len);
QString &remove(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive);
- QString &remove(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ QString &remove(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &remove(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+
+ QString &removeAt(qsizetype pos)
+ { return size_t(pos) < size_t(size()) ? remove(pos, 1) : *this; }
+ QString &removeFirst() { return !isEmpty() ? remove(0, 1) : *this; }
+ QString &removeLast() { return !isEmpty() ? remove(size() - 1, 1) : *this; }
+
+ template <typename Predicate>
+ QString &removeIf(Predicate pred)
+ {
+ removeIf_helper(pred);
+ return *this;
+ }
+
QString &replace(qsizetype i, qsizetype len, QChar after);
QString &replace(qsizetype i, qsizetype len, const QChar *s, qsizetype slen);
QString &replace(qsizetype i, qsizetype len, const QString &after);
QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(const QChar *before, qsizetype blen, const QChar *after, qsizetype alen, Qt::CaseSensitivity cs = Qt::CaseSensitive);
- QString &replace(QLatin1String before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
- QString &replace(QLatin1String before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
- QString &replace(const QString &before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ QString &replace(QLatin1StringView before, QLatin1StringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ QString &replace(QLatin1StringView before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ QString &replace(const QString &before, QLatin1StringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(const QString &before, const QString &after,
Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(QChar c, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
- QString &replace(QChar c, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ QString &replace(QChar c, QLatin1StringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
#if QT_CONFIG(regularexpression)
QString &replace(const QRegularExpression &re, const QString &after);
inline QString &remove(const QRegularExpression &re)
@@ -606,32 +583,32 @@ public:
#endif
public:
- Q_REQUIRED_RESULT
+ [[nodiscard]]
QStringList split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts,
Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- Q_REQUIRED_RESULT
+ [[nodiscard]]
QStringList split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts,
Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
#ifndef QT_NO_REGULAREXPRESSION
- Q_REQUIRED_RESULT
+ [[nodiscard]]
QStringList split(const QRegularExpression &sep,
Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const;
#endif
template <typename Needle, typename...Flags>
- Q_REQUIRED_RESULT inline auto tokenize(Needle &&needle, Flags...flags) const &
+ [[nodiscard]] inline auto tokenize(Needle &&needle, Flags...flags) const &
noexcept(noexcept(qTokenize(std::declval<const QString &>(), std::forward<Needle>(needle), flags...)))
-> decltype(qTokenize(*this, std::forward<Needle>(needle), flags...))
{ return qTokenize(qToStringViewIgnoringNull(*this), std::forward<Needle>(needle), flags...); }
template <typename Needle, typename...Flags>
- Q_REQUIRED_RESULT inline auto tokenize(Needle &&needle, Flags...flags) const &&
+ [[nodiscard]] inline auto tokenize(Needle &&needle, Flags...flags) const &&
noexcept(noexcept(qTokenize(std::declval<const QString>(), std::forward<Needle>(needle), flags...)))
-> decltype(qTokenize(std::move(*this), std::forward<Needle>(needle), flags...))
{ return qTokenize(std::move(*this), std::forward<Needle>(needle), flags...); }
template <typename Needle, typename...Flags>
- Q_REQUIRED_RESULT inline auto tokenize(Needle &&needle, Flags...flags) &&
+ [[nodiscard]] inline auto tokenize(Needle &&needle, Flags...flags) &&
noexcept(noexcept(qTokenize(std::declval<QString>(), std::forward<Needle>(needle), flags...)))
-> decltype(qTokenize(std::move(*this), std::forward<Needle>(needle), flags...))
{ return qTokenize(std::move(*this), std::forward<Needle>(needle), flags...); }
@@ -643,56 +620,62 @@ public:
NormalizationForm_KD,
NormalizationForm_KC
};
- Q_REQUIRED_RESULT QString normalized(NormalizationForm mode, QChar::UnicodeVersion version = QChar::Unicode_Unassigned) const;
+ [[nodiscard]] QString normalized(NormalizationForm mode, QChar::UnicodeVersion version = QChar::Unicode_Unassigned) const;
- Q_REQUIRED_RESULT QString repeated(qsizetype times) const;
+ [[nodiscard]] QString repeated(qsizetype times) const;
- const ushort *utf16() const;
+ const ushort *utf16() const; // ### Qt 7 char16_t
-#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP) && !defined(Q_CLANG_QDOC)
- Q_REQUIRED_RESULT QByteArray toLatin1() const &
+#if !defined(Q_QDOC)
+ [[nodiscard]] QByteArray toLatin1() const &
{ return toLatin1_helper(*this); }
- Q_REQUIRED_RESULT QByteArray toLatin1() &&
+ [[nodiscard]] QByteArray toLatin1() &&
{ return toLatin1_helper_inplace(*this); }
- Q_REQUIRED_RESULT QByteArray toUtf8() const &
+ [[nodiscard]] QByteArray toUtf8() const &
{ return toUtf8_helper(*this); }
- Q_REQUIRED_RESULT QByteArray toUtf8() &&
+ [[nodiscard]] QByteArray toUtf8() &&
{ return toUtf8_helper(*this); }
- Q_REQUIRED_RESULT QByteArray toLocal8Bit() const &
+ [[nodiscard]] QByteArray toLocal8Bit() const &
{ return toLocal8Bit_helper(isNull() ? nullptr : constData(), size()); }
- Q_REQUIRED_RESULT QByteArray toLocal8Bit() &&
+ [[nodiscard]] QByteArray toLocal8Bit() &&
{ return toLocal8Bit_helper(isNull() ? nullptr : constData(), size()); }
#else
- Q_REQUIRED_RESULT QByteArray toLatin1() const;
- Q_REQUIRED_RESULT QByteArray toUtf8() const;
- Q_REQUIRED_RESULT QByteArray toLocal8Bit() const;
+ [[nodiscard]] QByteArray toLatin1() const;
+ [[nodiscard]] QByteArray toUtf8() const;
+ [[nodiscard]] QByteArray toLocal8Bit() const;
#endif
- Q_REQUIRED_RESULT QList<uint> toUcs4() const;
+ [[nodiscard]] QList<uint> toUcs4() const; // ### Qt 7 char32_t
// note - this are all inline so we can benefit from strlen() compile time optimizations
- static inline QString fromLatin1(const char *str, qsizetype size = -1)
+ static QString fromLatin1(QByteArrayView ba);
+ Q_WEAK_OVERLOAD
+ static inline QString fromLatin1(const QByteArray &ba) { return fromLatin1(QByteArrayView(ba)); }
+ static inline QString fromLatin1(const char *str, qsizetype size)
{
- return QString(fromLatin1_helper(str, (str && size == -1) ? qsizetype(strlen(str)) : size));
+ return fromLatin1(QByteArrayView(str, !str || size < 0 ? qstrlen(str) : size));
}
- static inline QString fromUtf8(const char *str, qsizetype size = -1)
+ static QString fromUtf8(QByteArrayView utf8);
+ Q_WEAK_OVERLOAD
+ static inline QString fromUtf8(const QByteArray &ba) { return fromUtf8(QByteArrayView(ba)); }
+ static inline QString fromUtf8(const char *utf8, qsizetype size)
{
- return fromUtf8_helper(str, (str && size == -1) ? qsizetype(strlen(str)) : size);
+ return fromUtf8(QByteArrayView(utf8, !utf8 || size < 0 ? qstrlen(utf8) : size));
}
-#ifdef __cpp_char8_t
+#if defined(__cpp_char8_t) || defined(Q_QDOC)
+ Q_WEAK_OVERLOAD
+ static inline QString fromUtf8(const char8_t *str)
+ { return fromUtf8(reinterpret_cast<const char *>(str)); }
Q_WEAK_OVERLOAD
- static inline QString fromUtf8(const char8_t *str, qsizetype size = -1)
- { return fromUtf8(reinterpret_cast<const char *>(str), int(size)); }
+ static inline QString fromUtf8(const char8_t *str, qsizetype size)
+ { return fromUtf8(reinterpret_cast<const char *>(str), size); }
#endif
- static inline QString fromLocal8Bit(const char *str, qsizetype size = -1)
+ static QString fromLocal8Bit(QByteArrayView ba);
+ Q_WEAK_OVERLOAD
+ static inline QString fromLocal8Bit(const QByteArray &ba) { return fromLocal8Bit(QByteArrayView(ba)); }
+ static inline QString fromLocal8Bit(const char *str, qsizetype size)
{
- return fromLocal8Bit_helper(str, (str && size == -1) ? qsizetype(strlen(str)) : size);
+ return fromLocal8Bit(QByteArrayView(str, !str || size < 0 ? qstrlen(str) : size));
}
- static inline QString fromLatin1(const QByteArray &str)
- { return str.isNull() ? QString() : fromLatin1(str.data(), qstrnlen(str.constData(), str.size())); }
- static inline QString fromUtf8(const QByteArray &str)
- { return str.isNull() ? QString() : fromUtf8(str.data(), qstrnlen(str.constData(), str.size())); }
- static inline QString fromLocal8Bit(const QByteArray &str)
- { return str.isNull() ? QString() : fromLocal8Bit(str.data(), qstrnlen(str.constData(), str.size())); }
static QString fromUtf16(const char16_t *, qsizetype size = -1);
static QString fromUcs4(const char32_t *, qsizetype size = -1);
static QString fromRawData(const QChar *, qsizetype size);
@@ -707,16 +690,14 @@ public:
#endif
inline qsizetype toWCharArray(wchar_t *array) const;
- Q_REQUIRED_RESULT static inline QString fromWCharArray(const wchar_t *string, qsizetype size = -1);
+ [[nodiscard]] static inline QString fromWCharArray(const wchar_t *string, qsizetype size = -1);
QString &setRawData(const QChar *unicode, qsizetype size);
QString &setUnicode(const QChar *unicode, qsizetype size);
- inline QString &setUtf16(const ushort *utf16, qsizetype size);
+ inline QString &setUtf16(const ushort *utf16, qsizetype size); // ### Qt 7 char16_t
-#if QT_STRINGVIEW_LEVEL < 2
int compare(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
-#endif
- int compare(QLatin1String other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ int compare(QLatin1StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
inline int compare(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
int compare(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return compare(QStringView{&ch, 1}, cs); }
@@ -725,10 +706,10 @@ public:
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept
{ return s1.compare(s2, cs); }
- static inline int compare(const QString &s1, QLatin1String s2,
+ static inline int compare(const QString &s1, QLatin1StringView s2,
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept
{ return s1.compare(s2, cs); }
- static inline int compare(QLatin1String s1, const QString &s2,
+ static inline int compare(QLatin1StringView s1, const QString &s2,
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept
{ return -s2.compare(s1, cs); }
static int compare(const QString &s1, QStringView s2, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept
@@ -737,11 +718,11 @@ public:
{ return -s2.compare(s1, cs); }
int localeAwareCompare(const QString& s) const;
- int localeAwareCompare(QStringView s) const;
+ inline int localeAwareCompare(QStringView s) const;
static int localeAwareCompare(const QString& s1, const QString& s2)
{ return s1.localeAwareCompare(s2); }
- static int localeAwareCompare(QStringView s1, QStringView s2);
+ static inline int localeAwareCompare(QStringView s1, QStringView s2);
short toShort(bool *ok=nullptr, int base=10) const
{ return toIntegral_helper<short>(*this, ok, base); }
@@ -755,21 +736,23 @@ public:
{ return toIntegral_helper<long>(*this, ok, base); }
ulong toULong(bool *ok=nullptr, int base=10) const
{ return toIntegral_helper<ulong>(*this, ok, base); }
+ QT_CORE_INLINE_SINCE(6, 5)
qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
+ QT_CORE_INLINE_SINCE(6, 5)
qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
float toFloat(bool *ok=nullptr) const;
double toDouble(bool *ok=nullptr) const;
- QString &setNum(short, int base=10);
- QString &setNum(ushort, int base=10);
- QString &setNum(int, int base=10);
- QString &setNum(uint, int base=10);
- QString &setNum(long, int base=10);
- QString &setNum(ulong, int base=10);
+ inline QString &setNum(short, int base=10);
+ inline QString &setNum(ushort, int base=10);
+ inline QString &setNum(int, int base=10);
+ inline QString &setNum(uint, int base=10);
+ inline QString &setNum(long, int base=10);
+ inline QString &setNum(ulong, int base=10);
QString &setNum(qlonglong, int base=10);
QString &setNum(qulonglong, int base=10);
- QString &setNum(float, char f='g', int prec=6);
- QString &setNum(double, char f='g', int prec=6);
+ inline QString &setNum(float, char format='g', int precision=6);
+ QString &setNum(double, char format='g', int precision=6);
static QString number(int, int base=10);
static QString number(uint, int base=10);
@@ -777,21 +760,65 @@ public:
static QString number(ulong, int base=10);
static QString number(qlonglong, int base=10);
static QString number(qulonglong, int base=10);
- static QString number(double, char f='g', int prec=6);
-
- friend Q_CORE_EXPORT bool operator==(const QString &s1, const QString &s2) noexcept;
- friend Q_CORE_EXPORT bool operator<(const QString &s1, const QString &s2) noexcept;
- friend inline bool operator>(const QString &s1, const QString &s2) noexcept { return s2 < s1; }
- friend inline bool operator!=(const QString &s1, const QString &s2) noexcept { return !(s1 == s2); }
- friend inline bool operator<=(const QString &s1, const QString &s2) noexcept { return !(s1 > s2); }
- friend inline bool operator>=(const QString &s1, const QString &s2) noexcept { return !(s1 < s2); }
-
- bool operator==(QLatin1String s) const noexcept;
- bool operator<(QLatin1String s) const noexcept;
- bool operator>(QLatin1String s) const noexcept;
- inline bool operator!=(QLatin1String s) const noexcept { return !operator==(s); }
- inline bool operator<=(QLatin1String s) const noexcept { return !operator>(s); }
- inline bool operator>=(QLatin1String s) const noexcept { return !operator<(s); }
+ static QString number(double, char format='g', int precision=6);
+
+ friend bool comparesEqual(const QString &s1, const QString &s2) noexcept
+ { return comparesEqual(QStringView(s1), QStringView(s2)); }
+ friend Qt::strong_ordering compareThreeWay(const QString &s1, const QString &s2) noexcept
+ { return compareThreeWay(QStringView(s1), QStringView(s2)); }
+ Q_DECLARE_STRONGLY_ORDERED(QString)
+
+ Q_WEAK_OVERLOAD
+ friend bool comparesEqual(const QString &s1, QUtf8StringView s2) noexcept
+ { return QtPrivate::equalStrings(s1, s2); }
+ Q_WEAK_OVERLOAD
+ friend Qt::strong_ordering compareThreeWay(const QString &s1, QUtf8StringView s2) noexcept
+ {
+ const int res = QtPrivate::compareStrings(s1, s2, Qt::CaseSensitive);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QString, QUtf8StringView, Q_WEAK_OVERLOAD)
+
+#ifdef __cpp_char8_t
+ friend bool comparesEqual(const QString &s1, const char8_t *s2) noexcept
+ { return comparesEqual(s1, QUtf8StringView(s2)); }
+ friend Qt::strong_ordering compareThreeWay(const QString &s1, const char8_t *s2) noexcept
+ { return compareThreeWay(s1, QUtf8StringView(s2)); }
+ Q_DECLARE_STRONGLY_ORDERED(QString, const char8_t *)
+#endif // __cpp_char8_t
+
+ friend bool comparesEqual(const QString &s1, QLatin1StringView s2) noexcept
+ { return (s1.size() == s2.size()) && QtPrivate::equalStrings(s1, s2); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QString &s1, QLatin1StringView s2) noexcept
+ {
+ const int res = QtPrivate::compareStrings(s1, s2, Qt::CaseSensitive);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QString, QLatin1StringView)
+
+ // Check isEmpty() instead of isNull() for backwards compatibility.
+ friend bool comparesEqual(const QString &s1, std::nullptr_t) noexcept
+ { return s1.isEmpty(); }
+ friend Qt::strong_ordering compareThreeWay(const QString &s1, std::nullptr_t) noexcept
+ { return s1.isEmpty() ? Qt::strong_ordering::equivalent : Qt::strong_ordering::greater; }
+ Q_DECLARE_STRONGLY_ORDERED(QString, std::nullptr_t)
+
+ friend bool comparesEqual(const QString &s1, const char16_t *s2) noexcept
+ { return comparesEqual(s1, QStringView(s2)); }
+ friend Qt::strong_ordering compareThreeWay(const QString &s1, const char16_t *s2) noexcept
+ { return compareThreeWay(s1, QStringView(s2)); }
+ Q_DECLARE_STRONGLY_ORDERED(QString, const char16_t *)
+
+ // QChar <> QString
+ friend bool comparesEqual(const QString &lhs, QChar rhs) noexcept
+ { return lhs.size() == 1 && rhs == lhs.front(); }
+ friend Qt::strong_ordering compareThreeWay(const QString &lhs, QChar rhs) noexcept
+ {
+ const int res = compare_helper(lhs.data(), lhs.size(), &rhs, 1);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QString, QChar)
// ASCII compatibility
#if defined(QT_RESTRICTED_CAST_FROM_ASCII)
@@ -808,56 +835,95 @@ public:
QString &operator=(char (&)[N]) = delete;
#endif
#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
- inline QT_ASCII_CAST_WARN QString(const char *ch)
+ QT_ASCII_CAST_WARN inline QString(const char *ch)
: QString(fromUtf8(ch))
{}
- inline QT_ASCII_CAST_WARN QString(const QByteArray &a)
+ QT_ASCII_CAST_WARN inline QString(const QByteArray &a)
: QString(fromUtf8(a))
{}
- inline QT_ASCII_CAST_WARN QString &operator=(const char *ch)
- { return (*this = fromUtf8(ch)); }
- inline QT_ASCII_CAST_WARN QString &operator=(const QByteArray &a)
- { return (*this = fromUtf8(a)); }
-
+ QT_ASCII_CAST_WARN inline QString &operator=(const char *ch)
+ {
+ if (!ch) {
+ clear();
+ return *this;
+ }
+ return assign(ch);
+ }
+ QT_ASCII_CAST_WARN inline QString &operator=(const QByteArray &a)
+ {
+ if (a.isNull()) {
+ clear();
+ return *this;
+ }
+ return assign(a);
+ }
// these are needed, so it compiles with STL support enabled
- inline QT_ASCII_CAST_WARN QString &prepend(const char *s)
- { return prepend(QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &prepend(const QByteArray &s)
- { return prepend(QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &append(const char *s)
- { return append(QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &append(const QByteArray &s)
- { return append(QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &insert(qsizetype i, const char *s)
- { return insert(i, QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &insert(qsizetype i, const QByteArray &s)
- { return insert(i, QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &operator+=(const char *s)
- { return append(QString::fromUtf8(s)); }
- inline QT_ASCII_CAST_WARN QString &operator+=(const QByteArray &s)
- { return append(QString::fromUtf8(s)); }
-
- inline QT_ASCII_CAST_WARN bool operator==(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator!=(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator<(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator<=(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator>(const char *s) const;
- inline QT_ASCII_CAST_WARN bool operator>=(const char *s) const;
-
- inline QT_ASCII_CAST_WARN bool operator==(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator!=(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator<(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator>(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator<=(const QByteArray &s) const;
- inline QT_ASCII_CAST_WARN bool operator>=(const QByteArray &s) const;
-
- friend inline QT_ASCII_CAST_WARN bool operator==(const char *s1, const QString &s2);
- friend inline QT_ASCII_CAST_WARN bool operator!=(const char *s1, const QString &s2);
- friend inline QT_ASCII_CAST_WARN bool operator<(const char *s1, const QString &s2);
- friend inline QT_ASCII_CAST_WARN bool operator>(const char *s1, const QString &s2);
- friend inline QT_ASCII_CAST_WARN bool operator<=(const char *s1, const QString &s2);
- friend inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, const QString &s2);
-#endif
+ QT_ASCII_CAST_WARN inline QString &prepend(const char *s)
+ { return prepend(QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &prepend(const QByteArray &s)
+ { return prepend(QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &append(const char *s)
+ { return append(QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &append(const QByteArray &s)
+ { return append(QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &insert(qsizetype i, const char *s)
+ { return insert(i, QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &insert(qsizetype i, const QByteArray &s)
+ { return insert(i, QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &operator+=(const char *s)
+ { return append(QUtf8StringView(s)); }
+ QT_ASCII_CAST_WARN inline QString &operator+=(const QByteArray &s)
+ { return append(QUtf8StringView(s)); }
+
+#if QT_CORE_REMOVED_SINCE(6, 8)
+ QT_ASCII_CAST_WARN inline bool operator==(const char *s) const;
+ QT_ASCII_CAST_WARN inline bool operator!=(const char *s) const;
+ QT_ASCII_CAST_WARN inline bool operator<(const char *s) const;
+ QT_ASCII_CAST_WARN inline bool operator<=(const char *s) const;
+ QT_ASCII_CAST_WARN inline bool operator>(const char *s) const;
+ QT_ASCII_CAST_WARN inline bool operator>=(const char *s) const;
+
+ QT_ASCII_CAST_WARN inline bool operator==(const QByteArray &s) const;
+ QT_ASCII_CAST_WARN inline bool operator!=(const QByteArray &s) const;
+ QT_ASCII_CAST_WARN inline bool operator<(const QByteArray &s) const;
+ QT_ASCII_CAST_WARN inline bool operator>(const QByteArray &s) const;
+ QT_ASCII_CAST_WARN inline bool operator<=(const QByteArray &s) const;
+ QT_ASCII_CAST_WARN inline bool operator>=(const QByteArray &s) const;
+#else
+ friend bool comparesEqual(const QString &lhs, QByteArrayView rhs) noexcept
+ {
+ return QString::compare_helper(lhs.constData(), lhs.size(),
+ rhs.constData(), rhs.size()) == 0;
+ }
+ friend Qt::strong_ordering
+ compareThreeWay(const QString &lhs, QByteArrayView rhs) noexcept
+ {
+ const int res = QString::compare_helper(lhs.constData(), lhs.size(),
+ rhs.constData(), rhs.size());
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QString, QByteArrayView, QT_ASCII_CAST_WARN)
+
+ friend bool comparesEqual(const QString &lhs, const QByteArray &rhs) noexcept
+ { return comparesEqual(lhs, QByteArrayView(rhs)); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QString &lhs, const QByteArray &rhs) noexcept
+ {
+ return compareThreeWay(lhs, QByteArrayView(rhs));
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QString, QByteArray, QT_ASCII_CAST_WARN)
+
+ friend bool comparesEqual(const QString &lhs, const char *rhs) noexcept
+ { return comparesEqual(lhs, QByteArrayView(rhs)); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QString &lhs, const char *rhs) noexcept
+ {
+ return compareThreeWay(lhs, QByteArrayView(rhs));
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QString, const char *, QT_ASCII_CAST_WARN)
+#endif // QT_CORE_REMOVED_SINCE(6, 8)
+
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
typedef QChar *iterator;
typedef const QChar *const_iterator;
@@ -893,6 +959,13 @@ public:
inline void push_front(QChar c) { prepend(c); }
inline void push_front(const QString &s) { prepend(s); }
void shrink_to_fit() { squeeze(); }
+ iterator erase(const_iterator first, const_iterator last);
+ inline iterator erase(const_iterator it) { return erase(it, it + 1); }
+ static constexpr qsizetype max_size() noexcept
+ {
+ // -1 to deal with the NUL terminator
+ return Data::max_size() - 1;
+ }
static inline QString fromStdString(const std::string &s);
inline std::string toStdString() const;
@@ -904,6 +977,8 @@ public:
static inline QString fromStdU32String(const std::u32string &s);
inline std::u32string toStdU32String() const;
+ Q_IMPLICIT inline operator std::u16string_view() const noexcept;
+
#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
static QString fromCFString(CFStringRef string);
CFStringRef toCFString() const Q_DECL_CF_RETURNS_RETAINED;
@@ -911,12 +986,15 @@ public:
NSString *toNSString() const Q_DECL_NS_RETURNS_AUTORELEASED;
#endif
- inline bool isNull() const { return d->isNull(); }
+#if defined(Q_OS_WASM) || defined(Q_QDOC)
+ static QString fromEcmaString(emscripten::val jsString);
+ emscripten::val toEcmaString() const;
+#endif
+ inline bool isNull() const { return d->isNull(); }
- bool isSimpleText() const;
bool isRightToLeft() const;
- Q_REQUIRED_RESULT bool isValidUtf16() const noexcept
+ [[nodiscard]] bool isValidUtf16() const noexcept
{ return QStringView(*this).isValidUtf16(); }
QString(qsizetype size, Qt::Initialization);
@@ -935,26 +1013,22 @@ private:
DataPointer d;
static const char16_t _empty;
- friend inline bool operator==(QChar, const QString &) noexcept;
- friend inline bool operator< (QChar, const QString &) noexcept;
- friend inline bool operator> (QChar, const QString &) noexcept;
- friend inline bool operator==(QChar, QLatin1String) noexcept;
- friend inline bool operator< (QChar, QLatin1String) noexcept;
- friend inline bool operator> (QChar, QLatin1String) noexcept;
-
- void reallocData(qsizetype alloc, Data::ArrayOptions options);
- void reallocGrowData(qsizetype alloc, Data::ArrayOptions options);
+ void reallocData(qsizetype alloc, QArrayData::AllocationOption option);
+ void reallocGrowData(qsizetype n);
+ // ### remove once QAnyStringView supports UTF-32:
+ QString &assign_helper(const char32_t *data, qsizetype len);
+ // Defined in qstringconverter.h
+ template <typename InputIterator>
+ void assign_helper_char8(InputIterator first, InputIterator last);
static int compare_helper(const QChar *data1, qsizetype length1,
const QChar *data2, qsizetype length2,
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
static int compare_helper(const QChar *data1, qsizetype length1,
const char *data2, qsizetype length2,
- Qt::CaseSensitivity cs = Qt::CaseSensitive);
- static int compare_helper(const QChar *data1, qsizetype length1,
- QLatin1String s2,
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
static int localeAwareCompare_helper(const QChar *data1, qsizetype length1,
const QChar *data2, qsizetype length2);
+ static QString sliced_helper(QString &str, qsizetype pos, qsizetype n);
static QString toLower_helper(const QString &str);
static QString toLower_helper(QString &str);
static QString toUpper_helper(const QString &str);
@@ -965,21 +1039,30 @@ private:
static QString trimmed_helper(QString &str);
static QString simplified_helper(const QString &str);
static QString simplified_helper(QString &str);
- static DataPointer fromLatin1_helper(const char *str, qsizetype size = -1);
- static QString fromUtf8_helper(const char *str, qsizetype size);
- static QString fromLocal8Bit_helper(const char *, qsizetype size);
static QByteArray toLatin1_helper(const QString &);
static QByteArray toLatin1_helper_inplace(QString &);
static QByteArray toUtf8_helper(const QString &);
static QByteArray toLocal8Bit_helper(const QChar *data, qsizetype size);
+#if QT_CORE_REMOVED_SINCE(6, 6)
static qsizetype toUcs4_helper(const ushort *uc, qsizetype length, uint *out);
+#endif
+ static qsizetype toUcs4_helper(const char16_t *uc, qsizetype length, char32_t *out);
static qlonglong toIntegral_helper(QStringView string, bool *ok, int base);
static qulonglong toIntegral_helper(QStringView string, bool *ok, uint base);
- void replace_helper(size_t *indices, qsizetype nIndices, qsizetype blen, const QChar *after, qsizetype alen);
+ template <typename Predicate>
+ qsizetype removeIf_helper(Predicate pred)
+ {
+ const qsizetype result = d->eraseIf(pred);
+ if (result > 0)
+ d.data()[d.size] = u'\0';
+ return result;
+ }
+
friend class QStringView;
friend class QByteArray;
- friend class QCollator;
friend struct QAbstractConcatenable;
+ template <typename T> friend qsizetype erase(QString &s, const T &t);
+ template <typename Predicate> friend qsizetype erase_if(QString &s, Predicate pred);
template <typename T> static
T toIntegral_helper(QStringView string, bool *ok, int base)
@@ -997,23 +1080,46 @@ private:
return T(val);
}
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos = 0,
+ [[maybe_unused]] qsizetype n = 1) const
+ {
+ Q_ASSERT(pos >= 0);
+ Q_ASSERT(pos <= d.size);
+ Q_ASSERT(n >= 0);
+ Q_ASSERT(n <= d.size - pos);
+ }
+
public:
inline DataPointer &data_ptr() { return d; }
inline const DataPointer &data_ptr() const { return d; }
};
//
-// QLatin1String inline members that require QString:
+// QLatin1StringView inline members that require QUtf8StringView:
+//
+
+int QLatin1StringView::compare(QUtf8StringView other, Qt::CaseSensitivity cs) const noexcept
+{ return QtPrivate::compareStrings(*this, other, cs); }
+
+//
+// QLatin1StringView inline members that require QString:
//
-QString QLatin1String::toString() const { return *this; }
+QString QLatin1StringView::toString() const { return *this; }
+
+//
+// QStringView inline members that require QUtf8StringView:
+//
+
+int QStringView::compare(QUtf8StringView other, Qt::CaseSensitivity cs) const noexcept
+{ return QtPrivate::compareStrings(*this, other, cs); }
//
// QStringView inline members that require QString:
//
QString QStringView::toString() const
-{ return Q_ASSERT(size() == length()), QString(data(), length()); }
+{ return QString(*this); }
qint64 QStringView::toLongLong(bool *ok, int base) const
{ return QString::toIntegral_helper<qint64>(*this, ok, base); }
@@ -1033,14 +1139,71 @@ ushort QStringView::toUShort(bool *ok, int base) const
{ return QString::toIntegral_helper<ushort>(*this, ok, base); }
//
-// QUtf8StringView inline members that require QString:
+// QUtf8StringView inline members that require QStringView:
+//
+
+template <bool UseChar8T>
+int QBasicUtf8StringView<UseChar8T>::compare(QChar other, Qt::CaseSensitivity cs) const noexcept
+{
+ return QtPrivate::compareStrings(*this, QStringView(&other, 1), cs);
+}
+
+template <bool UseChar8T>
+int QBasicUtf8StringView<UseChar8T>::compare(QStringView other, Qt::CaseSensitivity cs) const noexcept
+{
+ return QtPrivate::compareStrings(*this, other, cs);
+}
+
+template <bool UseChar8T>
+[[nodiscard]] bool QBasicUtf8StringView<UseChar8T>::equal(QChar other) const noexcept
+{
+ return QtPrivate::equalStrings(*this, QStringView(&other, 1));
+}
+
+template <bool UseChar8T>
+[[nodiscard]] bool QBasicUtf8StringView<UseChar8T>::equal(QStringView other) const noexcept
+{
+ return QtPrivate::equalStrings(*this, other);
+}
+
+//
+// QUtf8StringView inline members that require QString, QL1SV or QBA:
//
template <bool UseChar8T>
QString QBasicUtf8StringView<UseChar8T>::toString() const
{
- Q_ASSERT(size() == int(size()));
- return QString::fromUtf8(data(), int(size()));
+ return QString::fromUtf8(data(), size());
+}
+
+template<bool UseChar8T>
+[[nodiscard]] int QBasicUtf8StringView<UseChar8T>::compare(QLatin1StringView other,
+ Qt::CaseSensitivity cs) const noexcept
+{
+ return QtPrivate::compareStrings(*this, other, cs);
+}
+
+template<bool UseChar8T>
+[[nodiscard]] int QBasicUtf8StringView<UseChar8T>::compare(const QByteArray &other,
+ Qt::CaseSensitivity cs) const noexcept
+{
+ return QtPrivate::compareStrings(*this,
+ QBasicUtf8StringView<UseChar8T>(other.data(), other.size()),
+ cs);
+}
+
+template <bool UseChar8T>
+[[nodiscard]] bool QBasicUtf8StringView<UseChar8T>::equal(QLatin1StringView other) const noexcept
+{
+ return QtPrivate::equalStrings(*this, other);
+}
+
+template <bool UseChar8T>
+[[nodiscard]] bool QBasicUtf8StringView<UseChar8T>::equal(const QByteArray &other) const noexcept
+{
+ return size() == other.size()
+ && QtPrivate::equalStrings(*this, QBasicUtf8StringView<UseChar8T>(other.data(),
+ other.size()));
}
//
@@ -1058,17 +1221,15 @@ QString QAnyStringView::toString() const
//
// QString inline members
//
-inline QString::QString(QLatin1String aLatin1) : d(fromLatin1_helper(aLatin1.latin1(), aLatin1.size()))
-{ }
-inline const QChar QString::at(qsizetype i) const
-{ Q_ASSERT(size_t(i) < size_t(size())); return QChar(d.data()[i]); }
-inline const QChar QString::operator[](qsizetype i) const
-{ Q_ASSERT(size_t(i) < size_t(size())); return QChar(d.data()[i]); }
-inline bool QString::isEmpty() const
-{ return d.size == 0; }
-inline const QChar *QString::unicode() const
+QString::QString(QLatin1StringView latin1)
+{ *this = QString::fromLatin1(latin1.data(), latin1.size()); }
+const QChar QString::at(qsizetype i) const
+{ verify(i, 1); return QChar(d.data()[i]); }
+const QChar QString::operator[](qsizetype i) const
+{ verify(i, 1); return QChar(d.data()[i]); }
+const QChar *QString::unicode() const
{ return data(); }
-inline const QChar *QString::data() const
+const QChar *QString::data() const
{
#if QT5_NULL_STRINGS == 1
return reinterpret_cast<const QChar *>(d.data() ? d.data() : &_empty);
@@ -1076,58 +1237,58 @@ inline const QChar *QString::data() const
return reinterpret_cast<const QChar *>(d.data());
#endif
}
-inline QChar *QString::data()
+QChar *QString::data()
{
detach();
Q_ASSERT(d.data());
return reinterpret_cast<QChar *>(d.data());
}
-inline const QChar *QString::constData() const
+const QChar *QString::constData() const
{ return data(); }
-inline void QString::detach()
-{ if (d->needsDetach()) reallocData(d.size, d->detachFlags()); }
-inline bool QString::isDetached() const
+void QString::detach()
+{ if (d->needsDetach()) reallocData(d.size, QArrayData::KeepSize); }
+bool QString::isDetached() const
{ return !d->isShared(); }
-inline void QString::clear()
+void QString::clear()
{ if (!isNull()) *this = QString(); }
-inline QString::QString(const QString &other) noexcept : d(other.d)
+QString::QString(const QString &other) noexcept : d(other.d)
{ }
-inline qsizetype QString::capacity() const { return qsizetype(d->constAllocatedCapacity()); }
-inline QString &QString::setNum(short n, int base)
+qsizetype QString::capacity() const { return qsizetype(d->constAllocatedCapacity()); }
+QString &QString::setNum(short n, int base)
{ return setNum(qlonglong(n), base); }
-inline QString &QString::setNum(ushort n, int base)
+QString &QString::setNum(ushort n, int base)
{ return setNum(qulonglong(n), base); }
-inline QString &QString::setNum(int n, int base)
+QString &QString::setNum(int n, int base)
{ return setNum(qlonglong(n), base); }
-inline QString &QString::setNum(uint n, int base)
+QString &QString::setNum(uint n, int base)
{ return setNum(qulonglong(n), base); }
-inline QString &QString::setNum(long n, int base)
+QString &QString::setNum(long n, int base)
{ return setNum(qlonglong(n), base); }
-inline QString &QString::setNum(ulong n, int base)
+QString &QString::setNum(ulong n, int base)
{ return setNum(qulonglong(n), base); }
-inline QString &QString::setNum(float n, char f, int prec)
+QString &QString::setNum(float n, char f, int prec)
{ return setNum(double(n),f,prec); }
-inline QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const
+QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const
{ return arg(qlonglong(a), fieldWidth, base, fillChar); }
-inline QString QString::arg(uint a, int fieldWidth, int base, QChar fillChar) const
+QString QString::arg(uint a, int fieldWidth, int base, QChar fillChar) const
{ return arg(qulonglong(a), fieldWidth, base, fillChar); }
-inline QString QString::arg(long a, int fieldWidth, int base, QChar fillChar) const
+QString QString::arg(long a, int fieldWidth, int base, QChar fillChar) const
{ return arg(qlonglong(a), fieldWidth, base, fillChar); }
-inline QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar) const
+QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar) const
{ return arg(qulonglong(a), fieldWidth, base, fillChar); }
-inline QString QString::arg(short a, int fieldWidth, int base, QChar fillChar) const
+QString QString::arg(short a, int fieldWidth, int base, QChar fillChar) const
{ return arg(qlonglong(a), fieldWidth, base, fillChar); }
-inline QString QString::arg(ushort a, int fieldWidth, int base, QChar fillChar) const
+QString QString::arg(ushort a, int fieldWidth, int base, QChar fillChar) const
{ return arg(qulonglong(a), fieldWidth, base, fillChar); }
-inline QString QString::section(QChar asep, qsizetype astart, qsizetype aend, SectionFlags aflags) const
+QString QString::section(QChar asep, qsizetype astart, qsizetype aend, SectionFlags aflags) const
{ return section(QString(asep), astart, aend, aflags); }
QT_WARNING_PUSH
QT_WARNING_DISABLE_MSVC(4127) // "conditional expression is constant"
QT_WARNING_DISABLE_INTEL(111) // "statement is unreachable"
-inline qsizetype QString::toWCharArray(wchar_t *array) const
+qsizetype QString::toWCharArray(wchar_t *array) const
{
return qToStringViewIgnoringNull(*this).toWCharArray(array);
}
@@ -1139,258 +1300,188 @@ qsizetype QStringView::toWCharArray(wchar_t *array) const
memcpy(array, src, sizeof(QChar) * size());
return size();
} else {
- return QString::toUcs4_helper(reinterpret_cast<const ushort *>(data()), size(),
- reinterpret_cast<uint *>(array));
+ return QString::toUcs4_helper(utf16(), size(), reinterpret_cast<char32_t *>(array));
}
}
QT_WARNING_POP
-inline QString QString::fromWCharArray(const wchar_t *string, qsizetype size)
+QString QString::fromWCharArray(const wchar_t *string, qsizetype size)
{
- return sizeof(wchar_t) == sizeof(QChar) ? fromUtf16(reinterpret_cast<const char16_t *>(string), size)
- : fromUcs4(reinterpret_cast<const char32_t *>(string), size);
+ if constexpr (sizeof(wchar_t) == sizeof(QChar)) {
+ return QString(reinterpret_cast<const QChar *>(string), size);
+ } else {
+#ifdef QT_BOOTSTRAPPED
+ Q_UNREACHABLE_RETURN(QString());
+#else
+ return fromUcs4(reinterpret_cast<const char32_t *>(string), size);
+#endif
+ }
}
-inline constexpr QString::QString() noexcept {}
-inline QString::~QString() {}
+constexpr QString::QString() noexcept {}
+QString::~QString() {}
-inline void QString::reserve(qsizetype asize)
+void QString::reserve(qsizetype asize)
{
- if (d->needsDetach() || asize >= capacity() - d.freeSpaceAtBegin()) {
- reallocData(qMax(asize, size()), d->detachFlags() | Data::CapacityReserved);
- } else {
+ if (d->needsDetach() || asize >= capacity() - d.freeSpaceAtBegin())
+ reallocData(qMax(asize, size()), QArrayData::KeepSize);
+ if (d->constAllocatedCapacity())
d->setFlag(Data::CapacityReserved);
- }
}
-inline void QString::squeeze()
+void QString::squeeze()
{
- if ((d->flags() & Data::CapacityReserved) == 0)
+ if (!d.isMutable())
return;
- if (d->needsDetach() || d.size < capacity()) {
- reallocData(d.size, d->detachFlags() & ~Data::CapacityReserved);
- } else {
+ if (d->needsDetach() || size() < capacity())
+ reallocData(d.size, QArrayData::KeepSize);
+ if (d->constAllocatedCapacity())
d->clearFlag(Data::CapacityReserved);
- }
}
-inline QString &QString::setUtf16(const ushort *autf16, qsizetype asize)
+QString &QString::setUtf16(const ushort *autf16, qsizetype asize)
{ return setUnicode(reinterpret_cast<const QChar *>(autf16), asize); }
-inline QChar &QString::operator[](qsizetype i)
-{ Q_ASSERT(i >= 0 && i < size()); return data()[i]; }
-inline QChar &QString::front() { return operator[](0); }
-inline QChar &QString::back() { return operator[](size() - 1); }
-inline QString::iterator QString::begin()
+QChar &QString::operator[](qsizetype i)
+{ verify(i, 1); return data()[i]; }
+QChar &QString::front() { return operator[](0); }
+QChar &QString::back() { return operator[](size() - 1); }
+QString::iterator QString::begin()
{ detach(); return reinterpret_cast<QChar*>(d.data()); }
-inline QString::const_iterator QString::begin() const
+QString::const_iterator QString::begin() const
{ return reinterpret_cast<const QChar*>(d.data()); }
-inline QString::const_iterator QString::cbegin() const
+QString::const_iterator QString::cbegin() const
{ return reinterpret_cast<const QChar*>(d.data()); }
-inline QString::const_iterator QString::constBegin() const
+QString::const_iterator QString::constBegin() const
{ return reinterpret_cast<const QChar*>(d.data()); }
-inline QString::iterator QString::end()
+QString::iterator QString::end()
{ detach(); return reinterpret_cast<QChar*>(d.data() + d.size); }
-inline QString::const_iterator QString::end() const
+QString::const_iterator QString::end() const
{ return reinterpret_cast<const QChar*>(d.data() + d.size); }
-inline QString::const_iterator QString::cend() const
+QString::const_iterator QString::cend() const
{ return reinterpret_cast<const QChar*>(d.data() + d.size); }
-inline QString::const_iterator QString::constEnd() const
+QString::const_iterator QString::constEnd() const
{ return reinterpret_cast<const QChar*>(d.data() + d.size); }
-#if QT_STRINGVIEW_LEVEL < 2
-inline bool QString::contains(const QString &s, Qt::CaseSensitivity cs) const
+bool QString::contains(const QString &s, Qt::CaseSensitivity cs) const
{ return indexOf(s, 0, cs) != -1; }
-#endif
-inline bool QString::contains(QLatin1String s, Qt::CaseSensitivity cs) const
+bool QString::contains(QLatin1StringView s, Qt::CaseSensitivity cs) const
{ return indexOf(s, 0, cs) != -1; }
-inline bool QString::contains(QChar c, Qt::CaseSensitivity cs) const
+bool QString::contains(QChar c, Qt::CaseSensitivity cs) const
{ return indexOf(c, 0, cs) != -1; }
-inline bool QString::contains(QStringView s, Qt::CaseSensitivity cs) const noexcept
+bool QString::contains(QStringView s, Qt::CaseSensitivity cs) const noexcept
{ return indexOf(s, 0, cs) != -1; }
-inline bool operator==(QLatin1String s1, QLatin1String s2) noexcept
-{ return s1.size() == s2.size() && (!s1.size() || !memcmp(s1.latin1(), s2.latin1(), s1.size())); }
-inline bool operator!=(QLatin1String s1, QLatin1String s2) noexcept
-{ return !operator==(s1, s2); }
-inline bool operator<(QLatin1String s1, QLatin1String s2) noexcept
-{
- const qsizetype len = qMin(s1.size(), s2.size());
- const int r = len ? memcmp(s1.latin1(), s2.latin1(), len) : 0;
- return r < 0 || (r == 0 && s1.size() < s2.size());
-}
-inline bool operator>(QLatin1String s1, QLatin1String s2) noexcept
-{ return operator<(s2, s1); }
-inline bool operator<=(QLatin1String s1, QLatin1String s2) noexcept
-{ return !operator>(s1, s2); }
-inline bool operator>=(QLatin1String s1, QLatin1String s2) noexcept
-{ return !operator<(s1, s2); }
-
-inline bool QLatin1String::operator==(const QString &s) const noexcept
-{ return s == *this; }
-inline bool QLatin1String::operator!=(const QString &s) const noexcept
-{ return s != *this; }
-inline bool QLatin1String::operator>(const QString &s) const noexcept
-{ return s < *this; }
-inline bool QLatin1String::operator<(const QString &s) const noexcept
-{ return s > *this; }
-inline bool QLatin1String::operator>=(const QString &s) const noexcept
-{ return s <= *this; }
-inline bool QLatin1String::operator<=(const QString &s) const noexcept
-{ return s >= *this; }
-
#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
-inline bool QString::operator==(const char *s) const
+#if QT_CORE_REMOVED_SINCE(6, 8)
+bool QString::operator==(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) == 0; }
-inline bool QString::operator!=(const char *s) const
+bool QString::operator!=(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) != 0; }
-inline bool QString::operator<(const char *s) const
+bool QString::operator<(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) < 0; }
-inline bool QString::operator>(const char *s) const
+bool QString::operator>(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) > 0; }
-inline bool QString::operator<=(const char *s) const
+bool QString::operator<=(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) <= 0; }
-inline bool QString::operator>=(const char *s) const
+bool QString::operator>=(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) >= 0; }
-inline QT_ASCII_CAST_WARN bool operator==(const char *s1, const QString &s2)
-{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) == 0; }
-inline QT_ASCII_CAST_WARN bool operator!=(const char *s1, const QString &s2)
-{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) != 0; }
-inline QT_ASCII_CAST_WARN bool operator<(const char *s1, const QString &s2)
-{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) > 0; }
-inline QT_ASCII_CAST_WARN bool operator>(const char *s1, const QString &s2)
-{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) < 0; }
-inline QT_ASCII_CAST_WARN bool operator<=(const char *s1, const QString &s2)
-{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) >= 0; }
-inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, const QString &s2)
-{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) <= 0; }
-
-inline QT_ASCII_CAST_WARN bool operator==(const char *s1, QLatin1String s2)
-{ return QString::fromUtf8(s1) == s2; }
-inline QT_ASCII_CAST_WARN bool operator!=(const char *s1, QLatin1String s2)
-{ return QString::fromUtf8(s1) != s2; }
-inline QT_ASCII_CAST_WARN bool operator<(const char *s1, QLatin1String s2)
-{ return (QString::fromUtf8(s1) < s2); }
-inline QT_ASCII_CAST_WARN bool operator>(const char *s1, QLatin1String s2)
-{ return (QString::fromUtf8(s1) > s2); }
-inline QT_ASCII_CAST_WARN bool operator<=(const char *s1, QLatin1String s2)
-{ return (QString::fromUtf8(s1) <= s2); }
-inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, QLatin1String s2)
-{ return (QString::fromUtf8(s1) >= s2); }
-
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator==(const char *s) const
-{ return QString::fromUtf8(s) == *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator!=(const char *s) const
-{ return QString::fromUtf8(s) != *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator<(const char *s) const
-{ return QString::fromUtf8(s) > *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator>(const char *s) const
-{ return QString::fromUtf8(s) < *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator<=(const char *s) const
-{ return QString::fromUtf8(s) >= *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator>=(const char *s) const
-{ return QString::fromUtf8(s) <= *this; }
-
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator==(const QByteArray &s) const
-{ return QString::fromUtf8(s) == *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator!=(const QByteArray &s) const
-{ return QString::fromUtf8(s) != *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator<(const QByteArray &s) const
-{ return QString::fromUtf8(s) > *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator>(const QByteArray &s) const
-{ return QString::fromUtf8(s) < *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator<=(const QByteArray &s) const
-{ return QString::fromUtf8(s) >= *this; }
-inline QT_ASCII_CAST_WARN bool QLatin1String::operator>=(const QByteArray &s) const
-{ return QString::fromUtf8(s) <= *this; }
-
-inline QT_ASCII_CAST_WARN bool QString::operator==(const QByteArray &s) const
-{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) == 0; }
-inline QT_ASCII_CAST_WARN bool QString::operator!=(const QByteArray &s) const
-{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) != 0; }
-inline QT_ASCII_CAST_WARN bool QString::operator<(const QByteArray &s) const
+QT_ASCII_CAST_WARN bool QString::operator==(const QByteArray &s) const
+{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) == 0; }
+QT_ASCII_CAST_WARN bool QString::operator!=(const QByteArray &s) const
+{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) != 0; }
+QT_ASCII_CAST_WARN bool QString::operator<(const QByteArray &s) const
{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) < 0; }
-inline QT_ASCII_CAST_WARN bool QString::operator>(const QByteArray &s) const
+QT_ASCII_CAST_WARN bool QString::operator>(const QByteArray &s) const
{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) > 0; }
-inline QT_ASCII_CAST_WARN bool QString::operator<=(const QByteArray &s) const
+QT_ASCII_CAST_WARN bool QString::operator<=(const QByteArray &s) const
{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) <= 0; }
-inline QT_ASCII_CAST_WARN bool QString::operator>=(const QByteArray &s) const
+QT_ASCII_CAST_WARN bool QString::operator>=(const QByteArray &s) const
{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) >= 0; }
-inline bool QByteArray::operator==(const QString &s) const
-{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) == 0; }
-inline bool QByteArray::operator!=(const QString &s) const
-{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) != 0; }
-inline bool QByteArray::operator<(const QString &s) const
+bool QByteArray::operator==(const QString &s) const
+{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) == 0; }
+bool QByteArray::operator!=(const QString &s) const
+{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) != 0; }
+bool QByteArray::operator<(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) > 0; }
-inline bool QByteArray::operator>(const QString &s) const
+bool QByteArray::operator>(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) < 0; }
-inline bool QByteArray::operator<=(const QString &s) const
+bool QByteArray::operator<=(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) >= 0; }
-inline bool QByteArray::operator>=(const QString &s) const
+bool QByteArray::operator>=(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) <= 0; }
+#endif // QT_CORE_REMOVED_SINCE(6, 8)
#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
#if !defined(QT_USE_FAST_OPERATOR_PLUS) && !defined(QT_USE_QSTRINGBUILDER)
-inline const QString operator+(const QString &s1, const QString &s2)
+inline QString operator+(const QString &s1, const QString &s2)
{ QString t(s1); t += s2; return t; }
-inline const QString operator+(const QString &s1, QChar s2)
+inline QString operator+(QString &&lhs, const QString &rhs)
+{ return std::move(lhs += rhs); }
+inline QString operator+(const QString &s1, QChar s2)
{ QString t(s1); t += s2; return t; }
-inline const QString operator+(QChar s1, const QString &s2)
+inline QString operator+(QString &&lhs, QChar rhs)
+{ return std::move(lhs += rhs); }
+inline QString operator+(QChar s1, const QString &s2)
{ QString t(s1); t += s2; return t; }
# if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
-inline QT_ASCII_CAST_WARN const QString operator+(const QString &s1, const char *s2)
-{ QString t(s1); t += QString::fromUtf8(s2); return t; }
-inline QT_ASCII_CAST_WARN const QString operator+(const char *s1, const QString &s2)
+QT_ASCII_CAST_WARN inline QString operator+(const QString &s1, const char *s2)
+{ QString t(s1); t += QUtf8StringView(s2); return t; }
+QT_ASCII_CAST_WARN inline QString operator+(QString &&lhs, const char *rhs)
+{ QT_IGNORE_DEPRECATIONS(return std::move(lhs += rhs);) }
+QT_ASCII_CAST_WARN inline QString operator+(const char *s1, const QString &s2)
{ QString t = QString::fromUtf8(s1); t += s2; return t; }
-inline QT_ASCII_CAST_WARN const QString operator+(const QByteArray &ba, const QString &s)
+QT_ASCII_CAST_WARN inline QString operator+(const QByteArray &ba, const QString &s)
{ QString t = QString::fromUtf8(ba); t += s; return t; }
-inline QT_ASCII_CAST_WARN const QString operator+(const QString &s, const QByteArray &ba)
-{ QString t(s); t += QString::fromUtf8(ba); return t; }
+QT_ASCII_CAST_WARN inline QString operator+(const QString &s, const QByteArray &ba)
+{ QString t(s); t += QUtf8StringView(ba); return t; }
+QT_ASCII_CAST_WARN inline QString operator+(QString &&lhs, const QByteArray &rhs)
+{ QT_IGNORE_DEPRECATIONS(return std::move(lhs += rhs);) }
# endif // QT_NO_CAST_FROM_ASCII
#endif // QT_USE_QSTRINGBUILDER
-inline std::string QString::toStdString() const
+std::string QString::toStdString() const
{ return toUtf8().toStdString(); }
-inline QString QString::fromStdString(const std::string &s)
-{ return fromUtf8(s.data(), int(s.size())); }
+QString QString::fromStdString(const std::string &s)
+{ return fromUtf8(s.data(), qsizetype(s.size())); }
-inline std::wstring QString::toStdWString() const
+std::wstring QString::toStdWString() const
{
std::wstring str;
- str.resize(length());
-#if __cplusplus >= 201703L
+ str.resize(size());
str.resize(toWCharArray(str.data()));
-#else
- if (length())
- str.resize(toWCharArray(&str.front()));
-#endif
return str;
}
-inline QString QString::fromStdWString(const std::wstring &s)
-{ return fromWCharArray(s.data(), int(s.size())); }
+QString QString::fromStdWString(const std::wstring &s)
+{ return fromWCharArray(s.data(), qsizetype(s.size())); }
-inline QString QString::fromStdU16String(const std::u16string &s)
-{ return fromUtf16(s.data(), int(s.size())); }
+QString QString::fromStdU16String(const std::u16string &s)
+{ return fromUtf16(s.data(), qsizetype(s.size())); }
-inline std::u16string QString::toStdU16String() const
-{ return std::u16string(reinterpret_cast<const char16_t*>(utf16()), length()); }
+std::u16string QString::toStdU16String() const
+{ return std::u16string(reinterpret_cast<const char16_t*>(data()), size()); }
-inline QString QString::fromStdU32String(const std::u32string &s)
-{ return fromUcs4(s.data(), int(s.size())); }
+QString QString::fromStdU32String(const std::u32string &s)
+{ return fromUcs4(s.data(), qsizetype(s.size())); }
-inline std::u32string QString::toStdU32String() const
+std::u32string QString::toStdU32String() const
{
- std::u32string u32str(length(), char32_t(0));
- int len = toUcs4_helper(reinterpret_cast<const ushort *>(constData()), length(),
- reinterpret_cast<uint*>(&u32str[0]));
+ std::u32string u32str(size(), char32_t(0));
+ const qsizetype len = toUcs4_helper(reinterpret_cast<const char16_t *>(data()),
+ size(), u32str.data());
u32str.resize(len);
return u32str;
}
-#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
+QString::operator std::u16string_view() const noexcept
+{
+ return std::u16string_view(d.data(), size_t(d.size));
+}
+
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QString &);
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QString &);
#endif
@@ -1398,91 +1489,37 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QString &);
Q_DECLARE_SHARED(QString)
Q_DECLARE_OPERATORS_FOR_FLAGS(QString::SectionFlags)
-inline int QString::compare(QStringView s, Qt::CaseSensitivity cs) const noexcept
+int QString::compare(QStringView s, Qt::CaseSensitivity cs) const noexcept
{ return -s.compare(*this, cs); }
-// QChar <> QString
-inline bool operator==(QChar lhs, const QString &rhs) noexcept
-{ return rhs.size() == 1 && lhs == rhs.front(); }
-inline bool operator< (QChar lhs, const QString &rhs) noexcept
-{ return QString::compare_helper(&lhs, 1, rhs.data(), rhs.size()) < 0; }
-inline bool operator> (QChar lhs, const QString &rhs) noexcept
-{ return QString::compare_helper(&lhs, 1, rhs.data(), rhs.size()) > 0; }
-
-inline bool operator!=(QChar lhs, const QString &rhs) noexcept { return !(lhs == rhs); }
-inline bool operator<=(QChar lhs, const QString &rhs) noexcept { return !(lhs > rhs); }
-inline bool operator>=(QChar lhs, const QString &rhs) noexcept { return !(lhs < rhs); }
-
-inline bool operator==(const QString &lhs, QChar rhs) noexcept { return rhs == lhs; }
-inline bool operator!=(const QString &lhs, QChar rhs) noexcept { return !(rhs == lhs); }
-inline bool operator< (const QString &lhs, QChar rhs) noexcept { return rhs > lhs; }
-inline bool operator> (const QString &lhs, QChar rhs) noexcept { return rhs < lhs; }
-inline bool operator<=(const QString &lhs, QChar rhs) noexcept { return !(rhs < lhs); }
-inline bool operator>=(const QString &lhs, QChar rhs) noexcept { return !(rhs > lhs); }
-
-// QChar <> QLatin1String
-inline bool operator==(QChar lhs, QLatin1String rhs) noexcept
-{ return rhs.size() == 1 && lhs == rhs.front(); }
-inline bool operator< (QChar lhs, QLatin1String rhs) noexcept
-{ return QString::compare_helper(&lhs, 1, rhs) < 0; }
-inline bool operator> (QChar lhs, QLatin1String rhs) noexcept
-{ return QString::compare_helper(&lhs, 1, rhs) > 0; }
-
-inline bool operator!=(QChar lhs, QLatin1String rhs) noexcept { return !(lhs == rhs); }
-inline bool operator<=(QChar lhs, QLatin1String rhs) noexcept { return !(lhs > rhs); }
-inline bool operator>=(QChar lhs, QLatin1String rhs) noexcept { return !(lhs < rhs); }
-
-inline bool operator==(QLatin1String lhs, QChar rhs) noexcept { return rhs == lhs; }
-inline bool operator!=(QLatin1String lhs, QChar rhs) noexcept { return !(rhs == lhs); }
-inline bool operator< (QLatin1String lhs, QChar rhs) noexcept { return rhs > lhs; }
-inline bool operator> (QLatin1String lhs, QChar rhs) noexcept { return rhs < lhs; }
-inline bool operator<=(QLatin1String lhs, QChar rhs) noexcept { return !(rhs < lhs); }
-inline bool operator>=(QLatin1String lhs, QChar rhs) noexcept { return !(rhs > lhs); }
-
-#if 0
-// QStringView <> QStringView
-inline bool operator==(QStringView lhs, QStringView rhs) noexcept { return lhs.size() == rhs.size() && QtPrivate::compareStrings(lhs, rhs) == 0; }
-inline bool operator!=(QStringView lhs, QStringView rhs) noexcept { return !(lhs == rhs); }
-inline bool operator< (QStringView lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) < 0; }
-inline bool operator<=(QStringView lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) <= 0; }
-inline bool operator> (QStringView lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) > 0; }
-inline bool operator>=(QStringView lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) >= 0; }
-#endif
+int QString::localeAwareCompare(QStringView s) const
+{ return localeAwareCompare_helper(constData(), size(), s.constData(), s.size()); }
+int QString::localeAwareCompare(QStringView s1, QStringView s2)
+{ return localeAwareCompare_helper(s1.constData(), s1.size(), s2.constData(), s2.size()); }
+int QStringView::localeAwareCompare(QStringView other) const
+{ return QString::localeAwareCompare(*this, other); }
-// QStringView <> QChar
-inline bool operator==(QStringView lhs, QChar rhs) noexcept { return lhs == QStringView(&rhs, 1); }
-inline bool operator!=(QStringView lhs, QChar rhs) noexcept { return lhs != QStringView(&rhs, 1); }
-inline bool operator< (QStringView lhs, QChar rhs) noexcept { return lhs < QStringView(&rhs, 1); }
-inline bool operator<=(QStringView lhs, QChar rhs) noexcept { return lhs <= QStringView(&rhs, 1); }
-inline bool operator> (QStringView lhs, QChar rhs) noexcept { return lhs > QStringView(&rhs, 1); }
-inline bool operator>=(QStringView lhs, QChar rhs) noexcept { return lhs >= QStringView(&rhs, 1); }
-
-inline bool operator==(QChar lhs, QStringView rhs) noexcept { return QStringView(&lhs, 1) == rhs; }
-inline bool operator!=(QChar lhs, QStringView rhs) noexcept { return QStringView(&lhs, 1) != rhs; }
-inline bool operator< (QChar lhs, QStringView rhs) noexcept { return QStringView(&lhs, 1) < rhs; }
-inline bool operator<=(QChar lhs, QStringView rhs) noexcept { return QStringView(&lhs, 1) <= rhs; }
-inline bool operator> (QChar lhs, QStringView rhs) noexcept { return QStringView(&lhs, 1) > rhs; }
-inline bool operator>=(QChar lhs, QStringView rhs) noexcept { return QStringView(&lhs, 1) >= rhs; }
-
-// QStringView <> QLatin1String
-inline bool operator==(QStringView lhs, QLatin1String rhs) noexcept { return lhs.size() == rhs.size() && QtPrivate::compareStrings(lhs, rhs) == 0; }
-inline bool operator!=(QStringView lhs, QLatin1String rhs) noexcept { return !(lhs == rhs); }
-inline bool operator< (QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) < 0; }
-inline bool operator<=(QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) <= 0; }
-inline bool operator> (QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) > 0; }
-inline bool operator>=(QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) >= 0; }
-
-inline bool operator==(QLatin1String lhs, QStringView rhs) noexcept { return lhs.size() == rhs.size() && QtPrivate::compareStrings(lhs, rhs) == 0; }
-inline bool operator!=(QLatin1String lhs, QStringView rhs) noexcept { return !(lhs == rhs); }
-inline bool operator< (QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) < 0; }
-inline bool operator<=(QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) <= 0; }
-inline bool operator> (QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) > 0; }
-inline bool operator>=(QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) >= 0; }
-
-inline int QString::localeAwareCompare(QStringView s) const
-{ return localeAwareCompare_helper(constData(), length(), s.constData(), s.length()); }
-inline int QString::localeAwareCompare(QStringView s1, QStringView s2)
-{ return localeAwareCompare_helper(s1.constData(), s1.length(), s2.constData(), s2.length()); }
+#if QT_CORE_INLINE_IMPL_SINCE(6, 5)
+qint64 QString::toLongLong(bool *ok, int base) const
+{
+ return toIntegral_helper<qlonglong>(*this, ok, base);
+}
+
+quint64 QString::toULongLong(bool *ok, int base) const
+{
+ return toIntegral_helper<qulonglong>(*this, ok, base);
+}
+#endif
+#if QT_CORE_INLINE_IMPL_SINCE(6, 7)
+qsizetype QString::indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const
+{
+ return qToStringViewIgnoringNull(*this).indexOf(ch, from, cs);
+}
+qsizetype QString::lastIndexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const
+{
+ return qToStringViewIgnoringNull(*this).lastIndexOf(ch, from, cs);
+}
+#endif
namespace QtPrivate {
// used by qPrintable() and qUtf8Printable() macros
@@ -1490,6 +1527,23 @@ inline const QString &asString(const QString &s) { return s; }
inline QString &&asString(QString &&s) { return std::move(s); }
}
+#ifndef qPrintable
+# define qPrintable(string) QtPrivate::asString(string).toLocal8Bit().constData()
+#endif
+
+#ifndef qUtf8Printable
+# define qUtf8Printable(string) QtPrivate::asString(string).toUtf8().constData()
+#endif
+
+/*
+ Wrap QString::utf16() with enough casts to allow passing it
+ to QString::asprintf("%ls") without warnings.
+*/
+#ifndef qUtf16Printable
+# define qUtf16Printable(string) \
+ static_cast<const wchar_t*>(static_cast<const void*>(QtPrivate::asString(string).utf16()))
+#endif
+
//
// QStringView::arg() implementation
//
@@ -1507,16 +1561,16 @@ struct QStringViewArg : ArgBase {
};
struct QLatin1StringArg : ArgBase {
- QLatin1String string;
+ QLatin1StringView string;
QLatin1StringArg() = default;
- constexpr explicit QLatin1StringArg(QLatin1String v) noexcept : ArgBase{L1}, string{v} {}
+ constexpr explicit QLatin1StringArg(QLatin1StringView v) noexcept : ArgBase{L1}, string{v} {}
};
-Q_REQUIRED_RESULT Q_CORE_EXPORT QString argToQString(QStringView pattern, size_t n, const ArgBase **args);
-Q_REQUIRED_RESULT Q_CORE_EXPORT QString argToQString(QLatin1String pattern, size_t n, const ArgBase **args);
+[[nodiscard]] Q_CORE_EXPORT QString argToQString(QStringView pattern, size_t n, const ArgBase **args);
+[[nodiscard]] Q_CORE_EXPORT QString argToQString(QLatin1StringView pattern, size_t n, const ArgBase **args);
template <typename StringView, typename...Args>
-Q_REQUIRED_RESULT Q_ALWAYS_INLINE QString argToQStringDispatch(StringView pattern, const Args &...args)
+[[nodiscard]] Q_ALWAYS_INLINE QString argToQStringDispatch(StringView pattern, const Args &...args)
{
const ArgBase *argBases[] = {&args..., /* avoid zero-sized array */ nullptr};
return QtPrivate::argToQString(pattern, sizeof...(Args), argBases);
@@ -1525,7 +1579,7 @@ Q_REQUIRED_RESULT Q_ALWAYS_INLINE QString argToQStringDispatch(StringView patter
inline QStringViewArg qStringLikeToArg(const QString &s) noexcept { return QStringViewArg{qToStringViewIgnoringNull(s)}; }
constexpr inline QStringViewArg qStringLikeToArg(QStringView s) noexcept { return QStringViewArg{s}; }
inline QStringViewArg qStringLikeToArg(const QChar &c) noexcept { return QStringViewArg{QStringView{&c, 1}}; }
-constexpr inline QLatin1StringArg qStringLikeToArg(QLatin1String s) noexcept { return QLatin1StringArg{s}; }
+constexpr inline QLatin1StringArg qStringLikeToArg(QLatin1StringView s) noexcept { return QLatin1StringArg{s}; }
} // namespace QtPrivate
@@ -1538,15 +1592,54 @@ QString QStringView::arg(Args &&...args) const
template <typename...Args>
Q_ALWAYS_INLINE
-QString QLatin1String::arg(Args &&...args) const
+QString QLatin1StringView::arg(Args &&...args) const
{
return QtPrivate::argToQStringDispatch(*this, QtPrivate::qStringLikeToArg(args)...);
}
+template <typename T>
+qsizetype erase(QString &s, const T &t)
+{
+ return s.removeIf_helper([&t](const auto &e) { return t == e; });
+}
+
+template <typename Predicate>
+qsizetype erase_if(QString &s, Predicate pred)
+{
+ return s.removeIf_helper(pred);
+}
+
+namespace Qt {
+inline namespace Literals {
+inline namespace StringLiterals {
+inline QString operator""_s(const char16_t *str, size_t size) noexcept
+{
+ return QString(QStringPrivate(nullptr, const_cast<char16_t *>(str), qsizetype(size)));
+}
+
+} // StringLiterals
+} // Literals
+} // Qt
+
+inline namespace QtLiterals {
+#if QT_DEPRECATED_SINCE(6, 8)
+
+QT_DEPRECATED_VERSION_X_6_8("Use _s from Qt::StringLiterals namespace instead.")
+inline QString operator""_qs(const char16_t *str, size_t size) noexcept
+{
+ return Qt::StringLiterals::operator""_s(str, size);
+}
+
+#endif // QT_DEPRECATED_SINCE(6, 8)
+} // QtLiterals
+
QT_END_NAMESPACE
-#if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
#include <QtCore/qstringbuilder.h>
+#include <QtCore/qstringconverter.h>
+
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+# undef Q_L1S_VIEW_IS_PRIMARY
#endif
#endif // QSTRING_H
diff --git a/src/corelib/text/qstring_mips_dsp_asm.S b/src/corelib/text/qstring_mips_dsp_asm.S
index 202f322310..da764b2e9a 100644
--- a/src/corelib/text/qstring_mips_dsp_asm.S
+++ b/src/corelib/text/qstring_mips_dsp_asm.S
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Imagination Technologies Limited, www.imgtec.com
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2013 Imagination Technologies Limited, www.imgtec.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "../../gui/painting/qt_mips_asm_dsp_p.h"
diff --git a/src/corelib/text/qstringalgorithms.h b/src/corelib/text/qstringalgorithms.h
index 08cf9b4c0a..71a1dbd526 100644
--- a/src/corelib/text/qstringalgorithms.h
+++ b/src/corelib/text/qstringalgorithms.h
@@ -1,133 +1,209 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGALGORITHMS_H
#define QSTRINGALGORITHMS_H
-#include <QtCore/qnamespace.h>
+#include <QtCore/qbytearrayalgorithms.h>
#include <QtCore/qcontainerfwd.h>
+#include <QtCore/qnamespace.h>
+#include <QtCore/qstringfwd.h>
#if 0
#pragma qt_class(QStringAlgorithms)
#endif
+#include <algorithm> // std::find
+#include <iterator> // std::size
+
+#include <QtCore/q20type_traits.h> // q20::is_constant_evaluated
+
QT_BEGIN_NAMESPACE
-#ifdef __cpp_char8_t
-# define QT_BEGIN_HAS_CHAR8_T_NAMESPACE inline namespace q_has_char8_t {
-# define QT_BEGIN_NO_CHAR8_T_NAMESPACE namespace q_no_char8_t {
+namespace QtPrivate {
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype qustrlen(const char16_t *str) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype qustrnlen(const char16_t *str, qsizetype maxlen) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION const char16_t *qustrchr(QStringView str, char16_t ch) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION const char16_t *qustrcasechr(QStringView str, char16_t ch) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QLatin1StringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QLatin1StringView lhs, QStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QLatin1StringView lhs, QLatin1StringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QLatin1StringView lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QBasicUtf8StringView<false> lhs, QStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QBasicUtf8StringView<false> lhs, QLatin1StringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QBasicUtf8StringView<false> lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QStringView lhs, QStringView rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QStringView lhs, QLatin1StringView rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QStringView lhs, QBasicUtf8StringView<false> rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QLatin1StringView lhs, QStringView rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QLatin1StringView lhs, QLatin1StringView rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QLatin1StringView lhs, QBasicUtf8StringView<false> rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QBasicUtf8StringView<false> lhs, QStringView rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QBasicUtf8StringView<false> lhs, QLatin1StringView rhs) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QBasicUtf8StringView<false> lhs, QBasicUtf8StringView<false> rhs) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findStringInsensitive(QStringView haystack, qsizetype from, char16_t needle) noexcept;
+[[nodiscard]] inline qsizetype findString(QStringView str, qsizetype from, QChar needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QStringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QLatin1StringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QLatin1StringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QStringView haystack, qsizetype from, char16_t needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QStringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QLatin1StringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QLatin1StringView haystack, qsizetype from, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QStringView trimmed(QStringView s) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QLatin1StringView trimmed(QLatin1StringView s) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isLower(QStringView s) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isUpper(QStringView s) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QStringView haystack, QChar needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QStringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QLatin1StringView haystack, QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QLatin1StringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QLatin1StringView haystack, QChar needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+
+#if QT_CONFIG(regularexpression)
+// ### Qt 7: unify these overloads;
+// remove the ones taking only a QStringView, export the others, adjust callers
+[[nodiscard]] qsizetype indexOf(QStringView viewHaystack,
+ const QString *stringHaystack,
+ const QRegularExpression &re,
+ qsizetype from = 0,
+ QRegularExpressionMatch *rmatch = nullptr);
+[[nodiscard]] Q_CORE_EXPORT qsizetype indexOf(QStringView haystack,
+ const QRegularExpression &re,
+ qsizetype from = 0,
+ QRegularExpressionMatch *rmatch = nullptr);
+[[nodiscard]] qsizetype lastIndexOf(QStringView viewHaystack,
+ const QString *stringHaystack,
+ const QRegularExpression &re,
+ qsizetype from = -1,
+ QRegularExpressionMatch *rmatch = nullptr);
+[[nodiscard]] Q_CORE_EXPORT qsizetype lastIndexOf(QStringView haystack,
+ const QRegularExpression &re,
+ qsizetype from = -1,
+ QRegularExpressionMatch *rmatch = nullptr);
+[[nodiscard]] bool contains(QStringView viewHaystack,
+ const QString *stringHaystack,
+ const QRegularExpression &re,
+ QRegularExpressionMatch *rmatch = nullptr);
+[[nodiscard]] Q_CORE_EXPORT bool contains(QStringView haystack,
+ const QRegularExpression &re,
+ QRegularExpressionMatch *rmatch = nullptr);
+[[nodiscard]] Q_CORE_EXPORT qsizetype count(QStringView haystack, const QRegularExpression &re);
+#endif
+
+[[nodiscard]] Q_CORE_EXPORT QString convertToQString(QAnyStringView s);
+
+[[nodiscard]] Q_CORE_EXPORT QByteArray convertToLatin1(QStringView str);
+[[nodiscard]] Q_CORE_EXPORT QByteArray convertToUtf8(QStringView str);
+[[nodiscard]] Q_CORE_EXPORT QByteArray convertToLocal8Bit(QStringView str);
+[[nodiscard]] Q_CORE_EXPORT QList<uint> convertToUcs4(QStringView str); // ### Qt 7 char32_t
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isRightToLeft(QStringView string) noexcept;
+
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isAscii(QLatin1StringView s) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isAscii(QStringView s) noexcept;
+[[nodiscard]] constexpr inline bool isLatin1(QLatin1StringView s) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isLatin1(QStringView s) noexcept;
+[[nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isValidUtf16(QStringView s) noexcept;
+
+template <typename Char, size_t N> [[nodiscard]] constexpr Q_ALWAYS_INLINE
+qsizetype lengthHelperContainerLoop(const Char (&str)[N])
+{
+#if defined(__cpp_lib_constexpr_algorithms) && defined(Q_CC_GNU_ONLY)
+ // libstdc++'s std::find / std::find_if manages to execute more steps
+ // than the loop below
+ const auto it = std::find(str, str + N, Char(0));
+ return it - str;
#else
-# define QT_BEGIN_HAS_CHAR8_T_NAMESPACE namespace q_has_char8_t {
-# define QT_BEGIN_NO_CHAR8_T_NAMESPACE inline namespace q_no_char8_t {
+ // std::char_traits<C> is deprecated for C not one of the standard char
+ // types, so we have to roll out our own loop.
+ for (size_t i = 0; i < N; ++i) {
+ if (str[i] == Char(0))
+ return qsizetype(i);
+ }
+ return qsizetype(N);
#endif
-#define QT_END_HAS_CHAR8_T_NAMESPACE }
-#define QT_END_NO_CHAR8_T_NAMESPACE }
-
-// declare namespaces:
-QT_BEGIN_HAS_CHAR8_T_NAMESPACE
-QT_END_HAS_CHAR8_T_NAMESPACE
-QT_BEGIN_NO_CHAR8_T_NAMESPACE
-QT_END_NO_CHAR8_T_NAMESPACE
-
-class QByteArray;
-class QLatin1String;
-class QStringView;
-template <bool> class QBasicUtf8StringView;
-class QAnyStringView;
-class QChar;
+}
+
+template <typename Char, size_t N> [[nodiscard]] constexpr Q_ALWAYS_INLINE
+std::enable_if_t<sizeof(Char) == sizeof(char16_t), qsizetype>
+lengthHelperContainer(const Char (&str)[N])
+{
+ // The following values were empirically determined to detect the threshold
+ // at which the compiler gives up pre-calculating the std::find() below and
+ // instead inserts code to be executed at runtime.
+ constexpr size_t RuntimeThreshold =
+#if defined(Q_CC_CLANG)
+ // tested on Clang 15, 16 & 17
+ 1023
+#elif defined(Q_CC_GNU)
+ // tested through GCC 13.1 at -O3 compilation level
+ // note: at -O2, GCC always generates a loop!
+ __cplusplus >= 202002L ? 39 : 17
+#else
+ 0
+#endif
+ ;
+ if constexpr (N == 1) {
+ return str[0] == Char(0) ? 0 : 1;
+ } else if constexpr (N > RuntimeThreshold) {
+#ifdef QT_SUPPORTS_IS_CONSTANT_EVALUATED
+ if (!q20::is_constant_evaluated())
+ return QtPrivate::qustrnlen(reinterpret_cast<const char16_t *>(str), N);
+#endif
+ }
-namespace QtPrivate {
+ return lengthHelperContainerLoop(str);
+}
+
+inline qsizetype qstrnlen_helper(const char *str, size_t maxlen)
+{
+#if !defined(Q_COMPILER_SLOW_QSTRNLEN_COMPILATION)
+ return qstrnlen(str, maxlen);
+#else
+ return strnlen_s(str, maxlen);
+#endif
+}
+
+template <typename Char, size_t N> [[nodiscard]] constexpr inline
+std::enable_if_t<sizeof(Char) == 1, qsizetype> lengthHelperContainer(const Char (&str)[N])
+{
+#ifdef QT_SUPPORTS_IS_CONSTANT_EVALUATED
+ if (!q20::is_constant_evaluated())
+ return qstrnlen_helper(reinterpret_cast<const char *>(str), N);
+#endif
+
+ return lengthHelperContainerLoop(str);
+}
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype qustrlen(const char16_t *str) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION const char16_t *qustrchr(QStringView str, char16_t ch) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QLatin1String rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QLatin1String lhs, QStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QLatin1String lhs, QLatin1String rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QLatin1String lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QBasicUtf8StringView<false> lhs, QStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QBasicUtf8StringView<false> lhs, QLatin1String rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QBasicUtf8StringView<false> lhs, QBasicUtf8StringView<false> rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QStringView haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QLatin1String haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QLatin1String haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QStringView haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QLatin1String haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QLatin1String haystack, qsizetype from, QLatin1String needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QStringView trimmed(QStringView s) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QLatin1String trimmed(QLatin1String s) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QStringView haystack, QChar needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype count(QStringView haystack, QStringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT QString convertToQString(QAnyStringView s);
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT QByteArray convertToLatin1(QStringView str);
-Q_REQUIRED_RESULT Q_CORE_EXPORT QByteArray convertToUtf8(QStringView str);
-Q_REQUIRED_RESULT Q_CORE_EXPORT QByteArray convertToLocal8Bit(QStringView str);
-Q_REQUIRED_RESULT Q_CORE_EXPORT QList<uint> convertToUcs4(QStringView str);
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isRightToLeft(QStringView string) noexcept;
-
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isAscii(QLatin1String s) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isAscii(QStringView s) noexcept;
-Q_REQUIRED_RESULT constexpr inline bool isLatin1(QLatin1String s) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isLatin1(QStringView s) noexcept;
-Q_REQUIRED_RESULT Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isValidUtf16(QStringView s) noexcept;
-
-} // namespace QtPRivate
+template <typename Container>
+constexpr qsizetype lengthHelperContainer(const Container &c) noexcept
+{
+ return qsizetype(std::size(c));
+}
+} // namespace QtPrivate
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringalgorithms_p.h b/src/corelib/text/qstringalgorithms_p.h
index 64d9f2e676..f34acb01e8 100644
--- a/src/corelib/text/qstringalgorithms_p.h
+++ b/src/corelib/text/qstringalgorithms_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGALGORITHMS_P_H
#define QSTRINGALGORITHMS_P_H
@@ -83,26 +47,34 @@ template <typename StringType> struct QStringAlgorithms
static inline StringType trimmed_helper_inplace(const NakedStringType &, const Char *, const Char *)
{
// can't happen
- Q_UNREACHABLE();
- return StringType();
+ Q_UNREACHABLE_RETURN(StringType());
}
- static inline void trimmed_helper_positions(const Char *&begin, const Char *&end)
+ struct TrimPositions {
+ const Char *begin;
+ const Char *end;
+ };
+ // Returns {begin, end} where:
+ // - "begin" refers to the first non-space character
+ // - if there is a sequence of one or more space chacaters at the end,
+ // "end" refers to the first character in that sequence, otherwise
+ // "end" is str.cend()
+ [[nodiscard]] static TrimPositions trimmed_helper_positions(const StringType &str)
{
+ const Char *begin = str.cbegin();
+ const Char *end = str.cend();
// skip white space from end
while (begin < end && isSpace(end[-1]))
--end;
// skip white space from start
while (begin < end && isSpace(*begin))
begin++;
+ return {begin, end};
}
static inline StringType trimmed_helper(StringType &str)
{
- const Char *begin = str.cbegin();
- const Char *end = str.cend();
- trimmed_helper_positions(begin, end);
-
+ const auto [begin, end] = trimmed_helper_positions(str);
if (begin == str.cbegin() && end == str.cend())
return str;
if (!isConst && str.isDetached())
@@ -137,7 +109,7 @@ template <typename StringType> struct QStringAlgorithms
if (ptr != dst && ptr[-1] == QChar::Space)
--ptr;
- int newlen = ptr - dst;
+ qsizetype newlen = ptr - dst;
if (isConst && newlen == str.size() && unmodified) {
// nothing happened, return the original
return str;
diff --git a/src/corelib/text/qstringbuilder.cpp b/src/corelib/text/qstringbuilder.cpp
index 3016392e45..738ce833ef 100644
--- a/src/corelib/text/qstringbuilder.cpp
+++ b/src/corelib/text/qstringbuilder.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qstringbuilder.h"
#include <private/qstringconverter_p.h>
@@ -74,7 +38,7 @@ QT_BEGIN_NAMESPACE
\list
\li QString, (since 5.10:) QStringView
\li QChar, QLatin1Char, (since 5.10:) \c char16_t,
- \li QLatin1String,
+ \li QLatin1StringView,
\li (since 5.10:) \c{const char16_t[]} (\c{u"foo"}),
\li QByteArray, \c char, \c{const char[]}.
\endlist
@@ -93,45 +57,61 @@ QT_BEGIN_NAMESPACE
if there are three or more of them, and performs equally well in other
cases.
- \sa QLatin1String, QString
+ \note Defining \c QT_USE_QSTRINGBUILDER at build time (this is the
+ default when building Qt libraries and tools), will make using \c {'+'}
+ when concatenating strings work the same way as \c operator%().
+
+ \sa QLatin1StringView, QString
*/
-/*! \fn template <typename A, typename B> QStringBuilder<A, B>::QStringBuilder(const A &a, const B &b)
- Constructs a QStringBuilder from \a a and \a b.
+/*!
+ \internal
+ \fn template <typename A, typename B> QStringBuilder<A, B>::QStringBuilder(const A &a, const B &b)
+
+ Constructs a QStringBuilder from \a a and \a b.
*/
-/* \fn template <typename A, typename B> QStringBuilder<A, B>::operator%(const A &a, const B &b)
+/*!
+ \internal
+ \fn template <typename A, typename B> QStringBuilder<A, B>::operator%(const A &a, const B &b)
Returns a \c QStringBuilder object that is converted to a QString object
when assigned to a variable of QString type or passed to a function that
takes a QString parameter.
- This function is usable with arguments of type \c QString,
- \c QLatin1String,
- \c QChar, \c QLatin1Char, and \c char.
+ This function is usable with arguments of any of the following types:
+ \list
+ \li \c QAnyStringView,
+ \li \c QString, \c QStringView
+ \li \c QByteArray, \c QByteArrayView, \c QLatin1StringView
+ \li \c QChar, \c QLatin1Char, \c char, (since 5.10:) \c char16_t
+ \li (since 5.10:) \c{const char16_t[]} (\c{u"foo"}),
+ \endlist
*/
-/* \fn template <typename A, typename B> QByteArray QStringBuilder<A, B>::toLatin1() const
- Returns a Latin-1 representation of the string as a QByteArray. The
- returned byte array is undefined if the string contains non-Latin1
- characters.
- */
-/* \fn template <typename A, typename B> QByteArray QStringBuilder<A, B>::toUtf8() const
- Returns a UTF-8 representation of the string as a QByteArray.
+/*!
+ \internal
+ \fn template <typename A, typename B> QByteArray QStringBuilder<A, B>::toLatin1() const
+
+ Returns a Latin-1 representation of the string as a QByteArray. It
+ is undefined behavior if the string contains non-Latin1 characters.
*/
+/*!
+ \internal
+ \fn template <typename A, typename B> QByteArray QStringBuilder<A, B>::toUtf8() const
+
+ Returns a UTF-8 representation of the string as a QByteArray.
+ */
/*!
\internal
+ Converts the UTF-8 string viewed by \a in to UTF-16 and writes the result
+ to the buffer starting at \a out.
*/
-void QAbstractConcatenable::convertFromAscii(const char *a, int len, QChar *&out) noexcept
+void QAbstractConcatenable::convertFromUtf8(QByteArrayView in, QChar *&out) noexcept
{
- if (Q_UNLIKELY(len == -1)) {
- if (!a)
- return;
- len = int(strlen(a));
- }
- out = QUtf8::convertToUnicode(out, a, len);
+ out = QUtf8::convertToUnicode(out, in);
}
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringbuilder.h b/src/corelib/text/qstringbuilder.h
index 278e402aee..853033b2d9 100644
--- a/src/corelib/text/qstringbuilder.h
+++ b/src/corelib/text/qstringbuilder.h
@@ -1,41 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include <QtCore/qstring.h>
#ifndef QSTRINGBUILDER_H
#define QSTRINGBUILDER_H
@@ -47,7 +13,6 @@
#pragma qt_sync_stop_processing
#endif
-#include <QtCore/qstring.h>
#include <QtCore/qbytearray.h>
#include <string.h>
@@ -58,21 +23,33 @@ QT_BEGIN_NAMESPACE
struct Q_CORE_EXPORT QAbstractConcatenable
{
protected:
- static void convertFromAscii(const char *a, int len, QChar *&out) noexcept;
+ static void convertFromUtf8(QByteArrayView in, QChar *&out) noexcept;
static inline void convertFromAscii(char a, QChar *&out) noexcept
{
*out++ = QLatin1Char(a);
}
- static void appendLatin1To(const char *a, int len, QChar *out) noexcept;
+ static void appendLatin1To(QLatin1StringView in, QChar *out) noexcept;
};
-template <typename T> struct QConcatenable {};
+template <typename T> struct QConcatenable;
+
+template <typename T>
+using QConcatenableEx = QConcatenable<q20::remove_cvref_t<T>>;
namespace QtStringBuilder {
template <typename A, typename B> struct ConvertToTypeHelper
{ typedef A ConvertTo; };
template <typename T> struct ConvertToTypeHelper<T, QString>
{ typedef QString ConvertTo; };
+
+ template <typename T> using HasIsNull = decltype(std::declval<const T &>().isNull());
+ template <typename T> bool isNull(const T &t)
+ {
+ if constexpr (qxp::is_detected_v<HasIsNull, T>)
+ return t.isNull();
+ else
+ return false;
+ }
}
template<typename Builder, typename T>
@@ -99,28 +76,50 @@ struct QStringBuilderBase<Builder, QString> : public QStringBuilderCommon<Builde
};
template <typename A, typename B>
-class QStringBuilder : public QStringBuilderBase<QStringBuilder<A, B>, typename QtStringBuilder::ConvertToTypeHelper<typename QConcatenable<A>::ConvertTo, typename QConcatenable<B>::ConvertTo>::ConvertTo>
+class QStringBuilder : public QStringBuilderBase<QStringBuilder<A, B>,
+ typename QtStringBuilder::ConvertToTypeHelper<
+ typename QConcatenableEx<A>::ConvertTo,
+ typename QConcatenableEx<B>::ConvertTo
+ >::ConvertTo
+ >
{
public:
- QStringBuilder(const A &a_, const B &b_) : a(a_), b(b_) {}
+ QStringBuilder(A &&a_, B &&b_) : a(std::forward<A>(a_)), b(std::forward<B>(b_)) {}
+
+ QStringBuilder(QStringBuilder &&) = default;
+ QStringBuilder(const QStringBuilder &) = default;
+ ~QStringBuilder() = default;
+
private:
friend class QByteArray;
friend class QString;
template <typename T> T convertTo() const
{
- const uint len = QConcatenable< QStringBuilder<A, B> >::size(*this);
- T s(len, Qt::Uninitialized);
+ if (isNull()) {
+ // appending two null strings must give back a null string,
+ // so we're special casing this one out, QTBUG-114206
+ return T();
+ }
- // we abuse const_cast / constData here because we know we've just
- // allocated the data and we're the only reference count
- typename T::iterator d = const_cast<typename T::iterator>(s.constData());
- typename T::const_iterator const start = d;
- QConcatenable< QStringBuilder<A, B> >::appendTo(*this, d);
+ const qsizetype len = Concatenable::size(*this);
+ T s(len, Qt::Uninitialized);
- if (!QConcatenable< QStringBuilder<A, B> >::ExactSize && int(len) != d - start) {
- // this resize is necessary since we allocate a bit too much
- // when dealing with variable sized 8-bit encodings
- s.resize(int(d - start));
+ // Using data_ptr() here (private API) so we can bypass the
+ // isDetached() and the replacement of a null pointer with _empty in
+ // both QString and QByteArray's data() and constData(). The result is
+ // the same if len != 0.
+ auto d = reinterpret_cast<typename T::iterator>(s.data_ptr().data());
+ const auto start = d;
+ Concatenable::appendTo(*this, d);
+
+ if constexpr (Concatenable::ExactSize) {
+ Q_UNUSED(start)
+ } else {
+ if (len != d - start) {
+ // this resize is necessary since we allocate a bit too much
+ // when dealing with variable sized 8-bit encodings
+ s.resize(d - start);
+ }
}
return s;
}
@@ -130,55 +129,29 @@ public:
typedef typename Concatenable::ConvertTo ConvertTo;
operator ConvertTo() const { return convertTo<ConvertTo>(); }
- int size() const { return Concatenable::size(*this); }
+ qsizetype size() const { return Concatenable::size(*this); }
- const A &a;
- const B &b;
-};
-
-template <>
-class QStringBuilder <QString, QString> : public QStringBuilderBase<QStringBuilder<QString, QString>, QString>
-{
- public:
- QStringBuilder(const QString &a_, const QString &b_) : a(a_), b(b_) {}
- QStringBuilder(const QStringBuilder &other) : a(other.a), b(other.b) {}
-
- operator QString() const
- { QString r(a); r += b; return r; }
-
- const QString &a;
- const QString &b;
-
- private:
- QStringBuilder &operator=(const QStringBuilder &) = delete;
-};
-
-template <>
-class QStringBuilder <QByteArray, QByteArray> : public QStringBuilderBase<QStringBuilder<QByteArray, QByteArray>, QByteArray>
-{
- public:
- QStringBuilder(const QByteArray &a_, const QByteArray &b_) : a(a_), b(b_) {}
- QStringBuilder(const QStringBuilder &other) : a(other.a), b(other.b) {}
-
- operator QByteArray() const
- { QByteArray r(a); r += b; return r; }
+ bool isNull() const
+ {
+ return QtStringBuilder::isNull(a) && QtStringBuilder::isNull(b);
+ }
- const QByteArray &a;
- const QByteArray &b;
+ A a;
+ B b;
- private:
- QStringBuilder &operator=(const QStringBuilder &) = delete;
+private:
+ QStringBuilder &operator=(QStringBuilder &&) = delete;
+ QStringBuilder &operator=(const QStringBuilder &) = delete;
};
-
template <> struct QConcatenable<char> : private QAbstractConcatenable
{
typedef char type;
typedef QByteArray ConvertTo;
enum { ExactSize = true };
- static int size(const char) { return 1; }
+ static qsizetype size(const char) { return 1; }
#ifndef QT_NO_CAST_FROM_ASCII
- static inline QT_ASCII_CAST_WARN void appendTo(const char c, QChar *&out)
+ QT_ASCII_CAST_WARN static inline void appendTo(const char c, QChar *&out)
{
QAbstractConcatenable::convertFromAscii(c, out);
}
@@ -187,12 +160,33 @@ template <> struct QConcatenable<char> : private QAbstractConcatenable
{ *out++ = c; }
};
+template <> struct QConcatenable<QByteArrayView> : private QAbstractConcatenable
+{
+ typedef QByteArrayView type;
+ typedef QByteArray ConvertTo;
+ enum { ExactSize = true };
+ static qsizetype size(QByteArrayView bav) { return bav.size(); }
+#ifndef QT_NO_CAST_FROM_ASCII
+ QT_ASCII_CAST_WARN static inline void appendTo(QByteArrayView bav, QChar *&out)
+ {
+ QAbstractConcatenable::convertFromUtf8(bav, out);
+ }
+#endif
+ static inline void appendTo(QByteArrayView bav, char *&out)
+ {
+ qsizetype n = bav.size();
+ if (n)
+ memcpy(out, bav.data(), n);
+ out += n;
+ }
+};
+
template <> struct QConcatenable<char16_t> : private QAbstractConcatenable
{
typedef char16_t type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static constexpr int size(char16_t) { return 1; }
+ static constexpr qsizetype size(char16_t) { return 1; }
static inline void appendTo(char16_t c, QChar *&out)
{ *out++ = c; }
};
@@ -202,7 +196,7 @@ template <> struct QConcatenable<QLatin1Char>
typedef QLatin1Char type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static int size(const QLatin1Char) { return 1; }
+ static qsizetype size(const QLatin1Char) { return 1; }
static inline void appendTo(const QLatin1Char c, QChar *&out)
{ *out++ = c; }
static inline void appendTo(const QLatin1Char c, char *&out)
@@ -214,7 +208,7 @@ template <> struct QConcatenable<QChar> : private QAbstractConcatenable
typedef QChar type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static int size(const QChar) { return 1; }
+ static qsizetype size(const QChar) { return 1; }
static inline void appendTo(const QChar c, QChar *&out)
{ *out++ = c; }
};
@@ -224,23 +218,23 @@ template <> struct QConcatenable<QChar::SpecialCharacter> : private QAbstractCon
typedef QChar::SpecialCharacter type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static int size(const QChar::SpecialCharacter) { return 1; }
+ static qsizetype size(const QChar::SpecialCharacter) { return 1; }
static inline void appendTo(const QChar::SpecialCharacter c, QChar *&out)
{ *out++ = c; }
};
-template <> struct QConcatenable<QLatin1String> : private QAbstractConcatenable
+template <> struct QConcatenable<QLatin1StringView> : private QAbstractConcatenable
{
- typedef QLatin1String type;
+ typedef QLatin1StringView type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static int size(const QLatin1String a) { return int(a.size()); } // ### Qt 6: qsizetype
- static inline void appendTo(const QLatin1String a, QChar *&out)
+ static qsizetype size(const QLatin1StringView a) { return a.size(); }
+ static inline void appendTo(const QLatin1StringView a, QChar *&out)
{
- appendLatin1To(a.latin1(), a.size(), out);
+ appendLatin1To(a, out);
out += a.size();
}
- static inline void appendTo(const QLatin1String a, char *&out)
+ static inline void appendTo(const QLatin1StringView a, char *&out)
{
if (const char *data = a.data()) {
memcpy(out, data, a.size());
@@ -254,10 +248,10 @@ template <> struct QConcatenable<QString> : private QAbstractConcatenable
typedef QString type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static int size(const QString &a) { return a.size(); }
+ static qsizetype size(const QString &a) { return a.size(); }
static inline void appendTo(const QString &a, QChar *&out)
{
- const int n = a.size();
+ const qsizetype n = a.size();
if (n)
memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * n);
out += n;
@@ -269,7 +263,7 @@ template <> struct QConcatenable<QStringView> : private QAbstractConcatenable
typedef QStringView type;
typedef QString ConvertTo;
enum { ExactSize = true };
- static int size(QStringView a) { return a.length(); }
+ static qsizetype size(QStringView a) { return a.size(); }
static inline void appendTo(QStringView a, QChar *&out)
{
const auto n = a.size();
@@ -279,16 +273,16 @@ template <> struct QConcatenable<QStringView> : private QAbstractConcatenable
}
};
-template <int N> struct QConcatenable<const char[N]> : private QAbstractConcatenable
+template <qsizetype N> struct QConcatenable<const char[N]> : private QAbstractConcatenable
{
typedef const char type[N];
typedef QByteArray ConvertTo;
enum { ExactSize = false };
- static int size(const char[N]) { return N - 1; }
+ static qsizetype size(const char[N]) { return N - 1; }
#ifndef QT_NO_CAST_FROM_ASCII
- static inline void QT_ASCII_CAST_WARN appendTo(const char a[N], QChar *&out)
+ QT_ASCII_CAST_WARN static inline void appendTo(const char a[N], QChar *&out)
{
- QAbstractConcatenable::convertFromAscii(a, N - 1, out);
+ QAbstractConcatenable::convertFromUtf8(QByteArrayView(a, N - 1), out);
}
#endif
static inline void appendTo(const char a[N], char *&out)
@@ -298,7 +292,7 @@ template <int N> struct QConcatenable<const char[N]> : private QAbstractConcaten
}
};
-template <int N> struct QConcatenable<char[N]> : QConcatenable<const char[N]>
+template <qsizetype N> struct QConcatenable<char[N]> : QConcatenable<const char[N]>
{
typedef char type[N];
};
@@ -310,8 +304,8 @@ template <> struct QConcatenable<const char *> : private QAbstractConcatenable
enum { ExactSize = false };
static qsizetype size(const char *a) { return qstrlen(a); }
#ifndef QT_NO_CAST_FROM_ASCII
- static inline void QT_ASCII_CAST_WARN appendTo(const char *a, QChar *&out)
- { QAbstractConcatenable::convertFromAscii(a, -1, out); }
+ QT_ASCII_CAST_WARN static inline void appendTo(const char *a, QChar *&out)
+ { QAbstractConcatenable::convertFromUtf8(QByteArrayView(a), out); }
#endif
static inline void appendTo(const char *a, char *&out)
{
@@ -327,20 +321,20 @@ template <> struct QConcatenable<char *> : QConcatenable<const char*>
typedef char *type;
};
-template <int N> struct QConcatenable<const char16_t[N]> : private QAbstractConcatenable
+template <qsizetype N> struct QConcatenable<const char16_t[N]> : private QAbstractConcatenable
{
using type = const char16_t[N];
using ConvertTo = QString;
enum { ExactSize = true };
- static int size(const char16_t[N]) { return N - 1; }
+ static qsizetype size(const char16_t[N]) { return N - 1; }
static void appendTo(const char16_t a[N], QChar *&out)
{
- memcpy(out, a, (N - 1) * sizeof(char16_t));
+ memcpy(static_cast<void *>(out), a, (N - 1) * sizeof(char16_t));
out += N - 1;
}
};
-template <int N> struct QConcatenable<char16_t[N]> : QConcatenable<const char16_t[N]>
+template <qsizetype N> struct QConcatenable<char16_t[N]> : QConcatenable<const char16_t[N]>
{
using type = char16_t[N];
};
@@ -350,8 +344,8 @@ template <> struct QConcatenable<const char16_t *> : private QAbstractConcatenab
using type = const char16_t *;
using ConvertTo = QString;
enum { ExactSize = true };
- static int size(const char16_t *a) { return QStringView(a).length(); }
- static inline void QT_ASCII_CAST_WARN appendTo(const char16_t *a, QChar *&out)
+ static qsizetype size(const char16_t *a) { return QStringView(a).size(); }
+ QT_ASCII_CAST_WARN static inline void appendTo(const char16_t *a, QChar *&out)
{
if (!a)
return;
@@ -370,19 +364,19 @@ template <> struct QConcatenable<QByteArray> : private QAbstractConcatenable
typedef QByteArray type;
typedef QByteArray ConvertTo;
enum { ExactSize = false };
- static int size(const QByteArray &ba) { return ba.size(); }
+ static qsizetype size(const QByteArray &ba) { return ba.size(); }
#ifndef QT_NO_CAST_FROM_ASCII
- static inline QT_ASCII_CAST_WARN void appendTo(const QByteArray &ba, QChar *&out)
+ QT_ASCII_CAST_WARN static inline void appendTo(const QByteArray &ba, QChar *&out)
{
- QAbstractConcatenable::convertFromAscii(ba.constData(), ba.size(), out);
+ QAbstractConcatenable::convertFromUtf8(ba, out);
}
#endif
static inline void appendTo(const QByteArray &ba, char *&out)
{
- const char *a = ba.constData();
- const char * const end = ba.end();
- while (a != end)
- *out++ = *a++;
+ const qsizetype n = ba.size();
+ if (n)
+ memcpy(out, ba.begin(), n);
+ out += n;
}
};
@@ -391,34 +385,37 @@ template <typename A, typename B>
struct QConcatenable< QStringBuilder<A, B> >
{
typedef QStringBuilder<A, B> type;
- typedef typename QtStringBuilder::ConvertToTypeHelper<typename QConcatenable<A>::ConvertTo, typename QConcatenable<B>::ConvertTo>::ConvertTo ConvertTo;
- enum { ExactSize = QConcatenable<A>::ExactSize && QConcatenable<B>::ExactSize };
- static int size(const type &p)
+ using ConvertTo = typename QtStringBuilder::ConvertToTypeHelper<
+ typename QConcatenableEx<A>::ConvertTo,
+ typename QConcatenableEx<B>::ConvertTo
+ >::ConvertTo;
+ enum { ExactSize = QConcatenableEx<A>::ExactSize && QConcatenableEx<B>::ExactSize };
+ static qsizetype size(const type &p)
{
- return QConcatenable<A>::size(p.a) + QConcatenable<B>::size(p.b);
+ return QConcatenableEx<A>::size(p.a) + QConcatenableEx<B>::size(p.b);
}
template<typename T> static inline void appendTo(const type &p, T *&out)
{
- QConcatenable<A>::appendTo(p.a, out);
- QConcatenable<B>::appendTo(p.b, out);
+ QConcatenableEx<A>::appendTo(p.a, out);
+ QConcatenableEx<B>::appendTo(p.b, out);
}
};
-template <typename A, typename B>
-QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>
-operator%(const A &a, const B &b)
+template <typename A, typename B,
+ typename = std::void_t<typename QConcatenableEx<A>::type, typename QConcatenableEx<B>::type>>
+auto operator%(A &&a, B &&b)
{
- return QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>(a, b);
+ return QStringBuilder<A, B>(std::forward<A>(a), std::forward<B>(b));
}
// QT_USE_FAST_OPERATOR_PLUS was introduced in 4.7, QT_USE_QSTRINGBUILDER is to be used from 4.8 onwards
// QT_USE_FAST_OPERATOR_PLUS does not remove the normal operator+ for QByteArray
#if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
-template <typename A, typename B>
-QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>
-operator+(const A &a, const B &b)
+template <typename A, typename B,
+ typename = std::void_t<typename QConcatenableEx<A>::type, typename QConcatenableEx<B>::type>>
+auto operator+(A &&a, B &&b)
{
- return QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>(a, b);
+ return std::forward<A>(a) % std::forward<B>(b);
}
#endif
@@ -427,8 +424,10 @@ template <typename A, typename B>
QByteArray &appendToByteArray(QByteArray &a, const QStringBuilder<A, B> &b, char)
{
// append 8-bit data to a byte array
- int len = a.size() + QConcatenable< QStringBuilder<A, B> >::size(b);
- a.reserve(len);
+ qsizetype len = a.size() + QConcatenable< QStringBuilder<A, B> >::size(b);
+ a.detach(); // a detach() in a.data() could reset a.capacity() to a.size()
+ if (len > a.data_ptr().freeSpaceAtEnd()) // capacity() was broken when prepend()-optimization landed
+ a.reserve(qMax(len, 2 * a.capacity()));
char *it = a.data() + a.size();
QConcatenable< QStringBuilder<A, B> >::appendTo(b, it);
a.resize(len); //we need to resize after the appendTo for the case str+=foo+str
@@ -454,23 +453,17 @@ QByteArray &operator+=(QByteArray &a, const QStringBuilder<A, B> &b)
template <typename A, typename B>
QString &operator+=(QString &a, const QStringBuilder<A, B> &b)
{
- int len = a.size() + QConcatenable< QStringBuilder<A, B> >::size(b);
- a.reserve(len);
+ qsizetype len = a.size() + QConcatenable< QStringBuilder<A, B> >::size(b);
+ a.detach(); // a detach() in a.data() could reset a.capacity() to a.size()
+ if (len > a.data_ptr().freeSpaceAtEnd()) // capacity() was broken when prepend()-optimization landed
+ a.reserve(qMax(len, 2 * a.capacity()));
QChar *it = a.data() + a.size();
QConcatenable< QStringBuilder<A, B> >::appendTo(b, it);
- a.resize(int(it - a.constData())); //may be smaller than len if there was conversion from utf8
+ // we need to resize after the appendTo for the case str+=foo+str
+ a.resize(it - a.constData()); //may be smaller than len if there was conversion from utf8
return a;
}
-//
-// inline QAnyStringView members requiring QStringBuilder:
-//
-
-template <typename A, typename B>
-QAnyStringView::QAnyStringView(const QStringBuilder<A, B> &expr,
- typename QStringBuilder<A, B>::ConvertTo &&capacity)
- : QAnyStringView(capacity = expr) {}
-
QT_END_NAMESPACE
#endif // QSTRINGBUILDER_H
diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp
index 755c20d7aa..67c75d708e 100644
--- a/src/corelib/text/qstringconverter.cpp
+++ b/src/corelib/text/qstringconverter.cpp
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <qstringconverter.h>
#include <private/qstringconverter_p.h>
@@ -44,24 +8,47 @@
#include "private/qsimd_p.h"
#include "private/qstringiterator_p.h"
+#include "private/qtools_p.h"
#include "qbytearraymatcher.h"
+#include "qcontainertools_impl.h"
+#include <QtCore/qbytearraylist.h>
+
+#if QT_CONFIG(icu)
+#include <unicode/ucnv.h>
+#include <unicode/ucnv_cb.h>
+#include <unicode/ucnv_err.h>
+#include <unicode/ustring.h>
+#endif
#ifdef Q_OS_WIN
#include <qt_windows.h>
+#ifndef QT_BOOTSTRAPPED
+#include <QtCore/qvarlengtharray.h>
+#include <QtCore/q20iterator.h>
+#include <QtCore/private/qnumeric_p.h>
+#endif // !QT_BOOTSTRAPPED
#endif
+#include <array>
+
#if __has_include(<bit>) && __cplusplus > 201703L
#include <bit>
#endif
QT_BEGIN_NAMESPACE
+using namespace QtMiscUtils;
+
+static_assert(std::is_nothrow_move_constructible_v<QStringEncoder>);
+static_assert(std::is_nothrow_move_assignable_v<QStringEncoder>);
+static_assert(std::is_nothrow_move_constructible_v<QStringDecoder>);
+static_assert(std::is_nothrow_move_assignable_v<QStringDecoder>);
+
enum { Endian = 0, Data = 1 };
static const uchar utf8bom[] = { 0xef, 0xbb, 0xbf };
-#if (defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSE2)) \
- || (defined(__ARM_NEON__) && defined(Q_PROCESSOR_ARM_64))
+#if defined(__SSE2__) || defined(__ARM_NEON__)
static Q_ALWAYS_INLINE uint qBitScanReverse(unsigned v) noexcept
{
#if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
@@ -77,8 +64,8 @@ static Q_ALWAYS_INLINE uint qBitScanReverse(unsigned v) noexcept
}
#endif
-#if defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSE2)
-static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const ushort *&src, const ushort *end)
+#if defined(__SSE2__)
+static inline bool simdEncodeAscii(uchar *&dst, const char16_t *&nextAscii, const char16_t *&src, const char16_t *end)
{
// do sixteen characters at a time
for ( ; end - src >= 16; src += 16, dst += 16) {
@@ -142,7 +129,7 @@ static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const
return src == end;
}
-static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const uchar *&src, const uchar *end)
+static inline bool simdDecodeAscii(char16_t *&dst, const uchar *&nextAscii, const uchar *&src, const uchar *end)
{
// do sixteen characters at a time
for ( ; end - src >= 16; src += 16, dst += 16) {
@@ -214,14 +201,14 @@ static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end,
#ifdef __AVX2__
// do 32 characters at a time
// (this is similar to simdTestMask in qstring.cpp)
- const __m256i mask = _mm256_set1_epi8(0x80);
+ const __m256i mask = _mm256_set1_epi8(char(0x80));
for ( ; end - src >= 32; src += 32) {
__m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(src));
if (_mm256_testz_si256(mask, data))
continue;
uint n = _mm256_movemask_epi8(data);
- Q_ASSUME(n);
+ Q_ASSERT(n);
// find the next probable ASCII character
// we don't want to load 32 bytes again in this loop if we know there are non-ASCII
@@ -271,7 +258,7 @@ static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end,
// Compare only the US-ASCII beginning of [src8, end8) and [src16, end16)
// and advance src8 and src16 to the first character that could not be compared
-static void simdCompareAscii(const char8_t *&src8, const char8_t *end8, const char16_t *&src16, const char16_t *end16)
+static void simdCompareAscii(const qchar8_t *&src8, const qchar8_t *end8, const char16_t *&src16, const char16_t *end16)
{
int bitSpacing = 1;
qptrdiff len = qMin(end8 - src8, end16 - src16);
@@ -360,8 +347,8 @@ static void simdCompareAscii(const char8_t *&src8, const char8_t *end8, const ch
src8 += offset;
src16 += offset;
}
-#elif defined(__ARM_NEON__) && defined(Q_PROCESSOR_ARM_64) // vaddv is only available on Aarch64
-static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const ushort *&src, const ushort *end)
+#elif defined(__ARM_NEON__)
+static inline bool simdEncodeAscii(uchar *&dst, const char16_t *&nextAscii, const char16_t *&src, const char16_t *end)
{
uint16x8_t maxAscii = vdupq_n_u16(0x7f);
uint16x8_t mask1 = { 1, 1 << 2, 1 << 4, 1 << 6, 1 << 8, 1 << 10, 1 << 12, 1 << 14 };
@@ -370,7 +357,7 @@ static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const
// do sixteen characters at a time
for ( ; end - src >= 16; src += 16, dst += 16) {
// load 2 lanes (or: "load interleaved")
- uint16x8x2_t in = vld2q_u16(src);
+ uint16x8x2_t in = vld2q_u16(reinterpret_cast<const uint16_t *>(src));
// check if any of the elements > 0x7f, select 1 bit per element (element 0 -> bit 0, element 1 -> bit 1, etc),
// add those together into a scalar, and merge the scalars.
@@ -398,7 +385,7 @@ static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const
return src == end;
}
-static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const uchar *&src, const uchar *end)
+static inline bool simdDecodeAscii(char16_t *&dst, const uchar *&nextAscii, const uchar *&src, const uchar *end)
{
// do eight characters at a time
uint8x8_t msb_mask = vdup_n_u8(0x80);
@@ -408,7 +395,7 @@ static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const
uint8_t n = vaddv_u8(vand_u8(vcge_u8(c, msb_mask), add_mask));
if (!n) {
// store
- vst1q_u16(dst, vmovl_u8(c));
+ vst1q_u16(reinterpret_cast<uint16_t *>(dst), vmovl_u8(c));
continue;
}
@@ -457,16 +444,16 @@ static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end,
return src;
}
-static void simdCompareAscii(const char8_t *&, const char8_t *, const char16_t *&, const char16_t *)
+static void simdCompareAscii(const qchar8_t *&, const qchar8_t *, const char16_t *&, const char16_t *)
{
}
#else
-static inline bool simdEncodeAscii(uchar *, const ushort *, const ushort *, const ushort *)
+static inline bool simdEncodeAscii(uchar *, const char16_t *, const char16_t *, const char16_t *)
{
return false;
}
-static inline bool simdDecodeAscii(ushort *, const uchar *, const uchar *, const uchar *)
+static inline bool simdDecodeAscii(char16_t *, const uchar *, const uchar *, const uchar *)
{
return false;
}
@@ -477,28 +464,30 @@ static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end,
return src;
}
-static void simdCompareAscii(const char8_t *&, const char8_t *, const char16_t *&, const char16_t *)
+static void simdCompareAscii(const qchar8_t *&, const qchar8_t *, const char16_t *&, const char16_t *)
{
}
#endif
enum { HeaderDone = 1 };
-QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len)
+QByteArray QUtf8::convertFromUnicode(QStringView in)
{
+ qsizetype len = in.size();
+
// create a QByteArray with the worst case scenario size
QByteArray result(len * 3, Qt::Uninitialized);
uchar *dst = reinterpret_cast<uchar *>(const_cast<char *>(result.constData()));
- const ushort *src = reinterpret_cast<const ushort *>(uc);
- const ushort *const end = src + len;
+ const char16_t *src = reinterpret_cast<const char16_t *>(in.data());
+ const char16_t *const end = src + len;
while (src != end) {
- const ushort *nextAscii = end;
+ const char16_t *nextAscii = end;
if (simdEncodeAscii(dst, nextAscii, src, end))
break;
do {
- ushort u = *src++;
+ char16_t u = *src++;
int res = QUtf8Functions::toUtf8<QUtf8BaseTraits>(u, dst, src, end);
if (res < 0) {
// encoding error - append '?'
@@ -511,10 +500,10 @@ QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len)
return result;
}
-QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverterBase::State *state)
+QByteArray QUtf8::convertFromUnicode(QStringView in, QStringConverterBase::State *state)
{
- QByteArray ba(3*len +3, Qt::Uninitialized);
- char *end = convertFromUnicode(ba.data(), QStringView(uc, len), state);
+ QByteArray ba(3*in.size() +3, Qt::Uninitialized);
+ char *end = convertFromUnicode(ba.data(), in, state);
ba.truncate(end - ba.data());
return ba;
}
@@ -522,8 +511,7 @@ QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len, QStringConv
char *QUtf8::convertFromUnicode(char *out, QStringView in, QStringConverter::State *state)
{
Q_ASSERT(state);
- const QChar *uc = in.data();
- qsizetype len = in.length();
+ qsizetype len = in.size();
if (!len)
return out;
@@ -540,8 +528,8 @@ char *QUtf8::convertFromUnicode(char *out, QStringView in, QStringConverter::Sta
};
uchar *cursor = reinterpret_cast<uchar *>(out);
- const ushort *src = reinterpret_cast<const ushort *>(uc);
- const ushort *const end = src + len;
+ const char16_t *src = in.utf16();
+ const char16_t *const end = src + len;
if (!(state->flags & QStringDecoder::Flag::Stateless)) {
if (state->remainingChars) {
@@ -560,12 +548,12 @@ char *QUtf8::convertFromUnicode(char *out, QStringView in, QStringConverter::Sta
}
while (src != end) {
- const ushort *nextAscii = end;
+ const char16_t *nextAscii = end;
if (simdEncodeAscii(cursor, nextAscii, src, end))
break;
do {
- ushort uc = *src++;
+ char16_t uc = *src++;
int res = QUtf8Functions::toUtf8<QUtf8BaseTraits>(uc, cursor, src, end);
if (Q_LIKELY(res >= 0))
continue;
@@ -590,7 +578,22 @@ char *QUtf8::convertFromUnicode(char *out, QStringView in, QStringConverter::Sta
return reinterpret_cast<char *>(cursor);
}
-QString QUtf8::convertToUnicode(const char *chars, qsizetype len)
+char *QUtf8::convertFromLatin1(char *out, QLatin1StringView in)
+{
+ // ### SIMD-optimize:
+ for (uchar ch : in) {
+ if (ch < 128) {
+ *out++ = ch;
+ } else {
+ // as per https://en.wikipedia.org/wiki/UTF-8#Encoding, 2nd row
+ *out++ = 0b110'0'0000u | (ch >> 6);
+ *out++ = 0b10'00'0000u | (ch & 0b0011'1111);
+ }
+ }
+ return out;
+}
+
+QString QUtf8::convertToUnicode(QByteArrayView in)
{
// UTF-8 to UTF-16 always needs the exact same number of words or less:
// UTF-8 UTF-16
@@ -604,21 +607,21 @@ QString QUtf8::convertToUnicode(const char *chars, qsizetype len)
//
// The table holds for invalid sequences too: we'll insert one replacement char
// per invalid byte.
- QString result(len, Qt::Uninitialized);
+ QString result(in.size(), Qt::Uninitialized);
QChar *data = const_cast<QChar*>(result.constData()); // we know we're not shared
- const QChar *end = convertToUnicode(data, chars, len);
+ const QChar *end = convertToUnicode(data, in);
result.truncate(end - data);
return result;
}
-/*!
- \since 5.7
+/*! \internal
+ \since 6.6
\overload
- Converts the UTF-8 sequence of \a len octets beginning at \a chars to
- a sequence of QChar starting at \a buffer. The buffer is expected to be
- large enough to hold the result. An upper bound for the size of the
- buffer is \a len QChars.
+ Converts the UTF-8 sequence of bytes viewed by \a in to a sequence of
+ QChar starting at \a dst in the destination buffer. The buffer is expected
+ to be large enough to hold the result. An upper bound for the size of the
+ buffer is \c in.size() QChars.
If, during decoding, an error occurs, a QChar::ReplacementCharacter is
written.
@@ -626,20 +629,22 @@ QString QUtf8::convertToUnicode(const char *chars, qsizetype len)
Returns a pointer to one past the last QChar written.
This function never throws.
-*/
-QChar *QUtf8::convertToUnicode(QChar *buffer, const char *chars, qsizetype len) noexcept
+ For QChar buffers, instead of casting manually, you can use the static
+ QUtf8::convertToUnicode(QChar *, QByteArrayView) directly.
+*/
+char16_t *QUtf8::convertToUnicode(char16_t *dst, QByteArrayView in) noexcept
{
- ushort *dst = reinterpret_cast<ushort *>(buffer);
- const uchar *src = reinterpret_cast<const uchar *>(chars);
- const uchar *end = src + len;
+ const uchar *const start = reinterpret_cast<const uchar *>(in.data());
+ const uchar *src = start;
+ const uchar *end = src + in.size();
// attempt to do a full decoding in SIMD
const uchar *nextAscii = end;
if (!simdDecodeAscii(dst, nextAscii, src, end)) {
// at least one non-ASCII entry
// check if we failed to decode the UTF-8 BOM; if so, skip it
- if (Q_UNLIKELY(src == reinterpret_cast<const uchar *>(chars))
+ if (Q_UNLIKELY(src == start)
&& end - src >= 3
&& Q_UNLIKELY(src[0] == utf8bom[0] && src[1] == utf8bom[1] && src[2] == utf8bom[2])) {
src += 3;
@@ -652,7 +657,7 @@ QChar *QUtf8::convertToUnicode(QChar *buffer, const char *chars, qsizetype len)
do {
uchar b = *src++;
- int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, dst, src, end);
+ const qsizetype res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, dst, src, end);
if (res < 0) {
// decoding error
*dst++ = QChar::ReplacementCharacter;
@@ -661,10 +666,10 @@ QChar *QUtf8::convertToUnicode(QChar *buffer, const char *chars, qsizetype len)
}
}
- return reinterpret_cast<QChar *>(dst);
+ return dst;
}
-QString QUtf8::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state)
+QString QUtf8::convertToUnicode(QByteArrayView in, QStringConverter::State *state)
{
// See above for buffer requirements for stateless decoding. However, that
// fails if the state is not empty. The following situations can add to the
@@ -676,28 +681,29 @@ QString QUtf8::convertToUnicode(const char *chars, qsizetype len, QStringConvert
// 1 of 2 bytes invalid continuation +1 (need to insert replacement and restart)
// 2 of 3 bytes same +1 (same)
// 3 of 4 bytes same +1 (same)
- QString result(len + 1, Qt::Uninitialized);
- QChar *end = convertToUnicode(result.data(), chars, len, state);
+ QString result(in.size() + 1, Qt::Uninitialized);
+ QChar *end = convertToUnicode(result.data(), in, state);
result.truncate(end - result.constData());
return result;
}
-QChar *QUtf8::convertToUnicode(QChar *out, const char *chars, qsizetype len, QStringConverter::State *state)
+char16_t *QUtf8::convertToUnicode(char16_t *dst, QByteArrayView in, QStringConverter::State *state)
{
+ qsizetype len = in.size();
+
Q_ASSERT(state);
if (!len)
- return out;
+ return dst;
- ushort replacement = QChar::ReplacementCharacter;
+ char16_t replacement = QChar::ReplacementCharacter;
if (state->flags & QStringConverter::Flag::ConvertInvalidToNull)
replacement = QChar::Null;
- int res;
+ qsizetype res;
uchar ch = 0;
- ushort *dst = reinterpret_cast<ushort *>(out);
- const uchar *src = reinterpret_cast<const uchar *>(chars);
+ const uchar *src = reinterpret_cast<const uchar *>(in.data());
const uchar *end = src + len;
if (!(state->flags & QStringConverter::Flag::Stateless)) {
@@ -724,7 +730,7 @@ QChar *QUtf8::convertToUnicode(QChar *out, const char *chars, qsizetype len, QSt
// copy to our state and return
state->remainingChars = remainingCharsCount + newCharsToCopy;
memcpy(&state->state_data[0], remainingCharsData, state->remainingChars);
- return out;
+ return dst;
} else if (!headerdone) {
// eat the UTF-8 BOM
if (dst[-1] == 0xfeff)
@@ -780,20 +786,20 @@ QChar *QUtf8::convertToUnicode(QChar *out, const char *chars, qsizetype len, QSt
state->remainingChars = 0;
}
- return reinterpret_cast<QChar *>(dst);
+ return dst;
}
struct QUtf8NoOutputTraits : public QUtf8BaseTraitsNoAscii
{
struct NoOutput {};
- static void appendUtf16(const NoOutput &, ushort) {}
- static void appendUcs4(const NoOutput &, uint) {}
+ static void appendUtf16(const NoOutput &, char16_t) {}
+ static void appendUcs4(const NoOutput &, char32_t) {}
};
-QUtf8::ValidUtf8Result QUtf8::isValidUtf8(const char *chars, qsizetype len)
+QUtf8::ValidUtf8Result QUtf8::isValidUtf8(QByteArrayView in)
{
- const uchar *src = reinterpret_cast<const uchar *>(chars);
- const uchar *end = src + len;
+ const uchar *src = reinterpret_cast<const uchar *>(in.data());
+ const uchar *end = src + in.size();
const uchar *nextAscii = src;
bool isValidAscii = true;
@@ -810,7 +816,7 @@ QUtf8::ValidUtf8Result QUtf8::isValidUtf8(const char *chars, qsizetype len)
isValidAscii = false;
QUtf8NoOutputTraits::NoOutput output;
- int res = QUtf8Functions::fromUtf8<QUtf8NoOutputTraits>(b, output, src, end);
+ const qsizetype res = QUtf8Functions::fromUtf8<QUtf8NoOutputTraits>(b, output, src, end);
if (res < 0) {
// decoding error
return { false, false };
@@ -821,12 +827,12 @@ QUtf8::ValidUtf8Result QUtf8::isValidUtf8(const char *chars, qsizetype len)
return { true, isValidAscii };
}
-int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, const QChar *utf16, qsizetype u16len) noexcept
+int QUtf8::compareUtf8(QByteArrayView utf8, QStringView utf16, Qt::CaseSensitivity cs) noexcept
{
- auto src1 = reinterpret_cast<const char8_t *>(utf8);
- auto end1 = src1 + u8len;
- auto src2 = reinterpret_cast<const char16_t *>(utf16);
- auto end2 = src2 + u16len;
+ auto src1 = reinterpret_cast<const qchar8_t *>(utf8.data());
+ auto end1 = src1 + utf8.size();
+ auto src2 = reinterpret_cast<const char16_t *>(utf16.data());
+ auto end2 = src2 + utf16.size();
do {
simdCompareAscii(src1, end1, src2, end2);
@@ -837,7 +843,7 @@ int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, const QChar *utf16, qs
if (uc1 >= 0x80) {
char32_t *output = &uc1;
- int res = QUtf8Functions::fromUtf8<QUtf8BaseTraitsNoAscii>(uc1, output, src1, end1);
+ qsizetype res = QUtf8Functions::fromUtf8<QUtf8BaseTraitsNoAscii>(uc1, output, src1, end1);
if (res < 0) {
// decoding error
uc1 = QChar::ReplacementCharacter;
@@ -848,7 +854,10 @@ int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, const QChar *utf16, qs
if (QChar::isHighSurrogate(uc2) && src2 < end2 && QChar::isLowSurrogate(*src2))
uc2 = QChar::surrogateToUcs4(uc2, *src2++);
}
-
+ if (cs == Qt::CaseInsensitive) {
+ uc1 = QChar::toCaseFolded(uc1);
+ uc2 = QChar::toCaseFolded(uc2);
+ }
if (uc1 != uc2)
return int(uc1) - int(uc2);
}
@@ -858,24 +867,28 @@ int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, const QChar *utf16, qs
return (end1 > src1) - int(end2 > src2);
}
-int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, QLatin1String s)
+int QUtf8::compareUtf8(QByteArrayView utf8, QLatin1StringView s, Qt::CaseSensitivity cs)
{
- uint uc1 = QChar::Null;
- auto src1 = reinterpret_cast<const uchar *>(utf8);
- auto end1 = src1 + u8len;
+ char32_t uc1 = QChar::Null;
+ auto src1 = reinterpret_cast<const uchar *>(utf8.data());
+ auto end1 = src1 + utf8.size();
auto src2 = reinterpret_cast<const uchar *>(s.latin1());
auto end2 = src2 + s.size();
while (src1 < end1 && src2 < end2) {
uchar b = *src1++;
- uint *output = &uc1;
- int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
+ char32_t *output = &uc1;
+ const qsizetype res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
if (res < 0) {
// decoding error
uc1 = QChar::ReplacementCharacter;
}
- uint uc2 = *src2++;
+ char32_t uc2 = *src2++;
+ if (cs == Qt::CaseInsensitive) {
+ uc1 = QChar::toCaseFolded(uc1);
+ uc2 = QChar::toCaseFolded(uc2);
+ }
if (uc1 != uc2)
return int(uc1) - int(uc2);
}
@@ -884,16 +897,62 @@ int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, QLatin1String s)
return (end1 > src1) - (end2 > src2);
}
-QByteArray QUtf16::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverter::State *state, DataEndianness endian)
+int QUtf8::compareUtf8(QByteArrayView lhs, QByteArrayView rhs, Qt::CaseSensitivity cs) noexcept
+{
+ if (lhs.isEmpty())
+ return qt_lencmp(0, rhs.size());
+
+ if (cs == Qt::CaseSensitive) {
+ const auto l = std::min(lhs.size(), rhs.size());
+ int r = memcmp(lhs.data(), rhs.data(), l);
+ return r ? r : qt_lencmp(lhs.size(), rhs.size());
+ }
+
+ char32_t uc1 = QChar::Null;
+ auto src1 = reinterpret_cast<const uchar *>(lhs.data());
+ auto end1 = src1 + lhs.size();
+ char32_t uc2 = QChar::Null;
+ auto src2 = reinterpret_cast<const uchar *>(rhs.data());
+ auto end2 = src2 + rhs.size();
+
+ while (src1 < end1 && src2 < end2) {
+ uchar b = *src1++;
+ char32_t *output = &uc1;
+ qsizetype res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
+ if (res < 0) {
+ // decoding error
+ uc1 = QChar::ReplacementCharacter;
+ }
+
+ b = *src2++;
+ output = &uc2;
+ res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src2, end2);
+ if (res < 0) {
+ // decoding error
+ uc2 = QChar::ReplacementCharacter;
+ }
+
+ uc1 = QChar::toCaseFolded(uc1);
+ uc2 = QChar::toCaseFolded(uc2);
+ if (uc1 != uc2)
+ return int(uc1) - int(uc2);
+ }
+
+ // the shorter string sorts first
+ return (end1 > src1) - (end2 > src2);
+}
+
+#ifndef QT_BOOTSTRAPPED
+QByteArray QUtf16::convertFromUnicode(QStringView in, QStringConverter::State *state, DataEndianness endian)
{
bool writeBom = !(state->internalState & HeaderDone) && state->flags & QStringConverter::Flag::WriteBom;
- qsizetype length = 2*len;
+ qsizetype length = 2 * in.size();
if (writeBom)
length += 2;
QByteArray d(length, Qt::Uninitialized);
- char *end = convertFromUnicode(d.data(), QStringView(uc, len), state, endian);
- Q_ASSERT(end - d.constData() == d.length());
+ char *end = convertFromUnicode(d.data(), in, state, endian);
+ Q_ASSERT(end - d.constData() == d.size());
Q_UNUSED(end);
return d;
}
@@ -907,6 +966,7 @@ char *QUtf16::convertFromUnicode(char *out, QStringView in, QStringConverter::St
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness;
if (writeBom) {
+ // set them up the BOM
QChar bom(QChar::ByteOrderMark);
if (endian == BigEndianness)
qToBigEndian(bom.unicode(), out);
@@ -915,25 +975,28 @@ char *QUtf16::convertFromUnicode(char *out, QStringView in, QStringConverter::St
out += 2;
}
if (endian == BigEndianness)
- qToBigEndian<ushort>(in.data(), in.length(), out);
+ qToBigEndian<char16_t>(in.data(), in.size(), out);
else
- qToLittleEndian<ushort>(in.data(), in.length(), out);
+ qToLittleEndian<char16_t>(in.data(), in.size(), out);
state->remainingChars = 0;
state->internalState |= HeaderDone;
- return out + 2*in.length();
+ return out + 2*in.size();
}
-QString QUtf16::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian)
+QString QUtf16::convertToUnicode(QByteArrayView in, QStringConverter::State *state, DataEndianness endian)
{
- QString result((len + 1) >> 1, Qt::Uninitialized); // worst case
- QChar *qch = convertToUnicode(result.data(), chars, len, state, endian);
+ QString result((in.size() + 1) >> 1, Qt::Uninitialized); // worst case
+ QChar *qch = convertToUnicode(result.data(), in, state, endian);
result.truncate(qch - result.constData());
return result;
}
-QChar *QUtf16::convertToUnicode(QChar *out, const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian)
+QChar *QUtf16::convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state, DataEndianness endian)
{
+ qsizetype len = in.size();
+ const char *chars = in.data();
+
Q_ASSERT(state);
if (endian == DetectEndianness)
@@ -966,6 +1029,7 @@ QChar *QUtf16::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
state->internalState |= HeaderDone;
QChar ch(buf, *chars++);
if (endian == DetectEndianness) {
+ // someone set us up the BOM
if (ch == QChar::ByteOrderSwapped) {
endian = BigEndianness;
} else if (ch == QChar::ByteOrderMark) {
@@ -986,11 +1050,11 @@ QChar *QUtf16::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness;
}
- int nPairs = (end - chars) >> 1;
+ qsizetype nPairs = (end - chars) >> 1;
if (endian == BigEndianness)
- qFromBigEndian<ushort>(chars, nPairs, out);
+ qFromBigEndian<char16_t>(chars, nPairs, out);
else
- qFromLittleEndian<ushort>(chars, nPairs, out);
+ qFromLittleEndian<char16_t>(chars, nPairs, out);
out += nPairs;
state->state_data[Endian] = endian;
@@ -1009,16 +1073,15 @@ QChar *QUtf16::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
return out;
}
-QByteArray QUtf32::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverter::State *state, DataEndianness endian)
+QByteArray QUtf32::convertFromUnicode(QStringView in, QStringConverter::State *state, DataEndianness endian)
{
bool writeBom = !(state->internalState & HeaderDone) && state->flags & QStringConverter::Flag::WriteBom;
- int length = 4*len;
+ qsizetype length = 4*in.size();
if (writeBom)
length += 4;
QByteArray ba(length, Qt::Uninitialized);
- char *end = convertFromUnicode(ba.data(), QStringView(uc, len), state, endian);
- Q_ASSERT(end - ba.constData() == length);
- Q_UNUSED(end);
+ char *end = convertFromUnicode(ba.data(), in, state, endian);
+ ba.truncate(end - ba.constData());
return ba;
}
@@ -1027,14 +1090,11 @@ char *QUtf32::convertFromUnicode(char *out, QStringView in, QStringConverter::St
Q_ASSERT(state);
bool writeBom = !(state->internalState & HeaderDone) && state->flags & QStringConverter::Flag::WriteBom;
- qsizetype length = 4*in.length();
- if (writeBom)
- length += 4;
-
if (endian == DetectEndianness)
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness;
if (writeBom) {
+ // set them up the BOM
if (endian == BigEndianness) {
out[0] = 0;
out[1] = 0;
@@ -1051,11 +1111,13 @@ char *QUtf32::convertFromUnicode(char *out, QStringView in, QStringConverter::St
}
const QChar *uc = in.data();
- const QChar *end = in.data() + in.length();
+ const QChar *end = in.data() + in.size();
QChar ch;
- uint ucs4;
+ char32_t ucs4;
if (state->remainingChars == 1) {
- ch = state->state_data[Data];
+ auto character = state->state_data[Data];
+ Q_ASSERT(character <= 0xFFFF);
+ ch = QChar(character);
// this is ugly, but shortcuts a whole lot of logic that would otherwise be required
state->remainingChars = 0;
goto decode_surrogate;
@@ -1093,17 +1155,20 @@ decode_surrogate:
return out;
}
-QString QUtf32::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian)
+QString QUtf32::convertToUnicode(QByteArrayView in, QStringConverter::State *state, DataEndianness endian)
{
QString result;
- result.resize((len + 7) >> 1); // worst case
- QChar *end = convertToUnicode(result.data(), chars, len, state, endian);
+ result.resize((in.size() + 7) >> 1); // worst case
+ QChar *end = convertToUnicode(result.data(), in, state, endian);
result.truncate(end - result.constData());
return result;
}
-QChar *QUtf32::convertToUnicode(QChar *out, const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian)
+QChar *QUtf32::convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state, DataEndianness endian)
{
+ qsizetype len = in.size();
+ const char *chars = in.data();
+
Q_ASSERT(state);
if (endian == DetectEndianness)
endian = (DataEndianness)state->state_data[Endian];
@@ -1131,13 +1196,14 @@ QChar *QUtf32::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
if (state->flags & QStringConverter::Flag::ConvertInitialBom)
headerdone = true;
- int num = state->remainingChars;
+ qsizetype num = state->remainingChars;
state->remainingChars = 0;
if (!headerdone || endian == DetectEndianness || num) {
while (num < 4)
tuple[num++] = *chars++;
if (endian == DetectEndianness) {
+ // someone set us up the BOM?
if (tuple[0] == 0xff && tuple[1] == 0xfe && tuple[2] == 0 && tuple[3] == 0) {
endian = LittleEndianness;
} else if (tuple[0] == 0 && tuple[1] == 0 && tuple[2] == 0xfe && tuple[3] == 0xff) {
@@ -1148,7 +1214,7 @@ QChar *QUtf32::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
endian = LittleEndianness;
}
}
- uint code = (endian == BigEndianness) ? qFromBigEndian<quint32>(tuple) : qFromLittleEndian<quint32>(tuple);
+ char32_t code = (endian == BigEndianness) ? qFromBigEndian<char32_t>(tuple) : qFromLittleEndian<char32_t>(tuple);
if (headerdone || code != QChar::ByteOrderMark) {
if (QChar::requiresSurrogates(code)) {
*out++ = QChar(QChar::highSurrogate(code));
@@ -1167,7 +1233,7 @@ QChar *QUtf32::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
while (chars < end) {
tuple[num++] = *chars++;
if (num == 4) {
- uint code = (endian == BigEndianness) ? qFromBigEndian<quint32>(tuple) : qFromLittleEndian<quint32>(tuple);
+ char32_t code = (endian == BigEndianness) ? qFromBigEndian<char32_t>(tuple) : qFromLittleEndian<char32_t>(tuple);
for (char16_t c : QChar::fromUcs4(code))
*out++ = c;
num = 0;
@@ -1186,185 +1252,378 @@ QChar *QUtf32::convertToUnicode(QChar *out, const char *chars, qsizetype len, QS
return out;
}
+#endif // !QT_BOOTSTRAPPED
#if defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED)
-static QString convertToUnicodeCharByChar(const char *chars, qsizetype length, QStringConverter::State *state)
+int QLocal8Bit::checkUtf8()
{
- Q_ASSERT(state);
- if (state->flags & QStringConverter::Flag::Stateless) // temporary
- state = nullptr;
-
- if (!chars || !length)
- return QString();
-
- int copyLocation = 0;
- int extra = 2;
- if (state && state->remainingChars) {
- copyLocation = state->remainingChars;
- extra += copyLocation;
- }
- int newLength = length + extra;
- char *mbcs = new char[newLength];
- //ensure that we have a NULL terminated string
- mbcs[newLength-1] = 0;
- mbcs[newLength-2] = 0;
- memcpy(&(mbcs[copyLocation]), chars, length);
- if (copyLocation) {
- //copy the last character from the state
- mbcs[0] = (char)state->state_data[0];
- state->remainingChars = 0;
- }
- const char *mb = mbcs;
- const char *next = 0;
- QString s;
- while ((next = CharNextExA(CP_ACP, mb, 0)) != mb) {
- wchar_t wc[2] ={0};
- int charlength = next - mb;
- int len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, mb, charlength, wc, 2);
- if (len>0) {
- s.append(QChar(wc[0]));
- } else {
- int r = GetLastError();
- //check if the character being dropped is the last character
- if (r == ERROR_NO_UNICODE_TRANSLATION && mb == (mbcs+newLength -3) && state) {
- state->remainingChars = 1;
- state->state_data[0] = (char)*mb;
- }
- }
- mb = next;
- }
- delete [] mbcs;
- return s;
+ return GetACP() == CP_UTF8 ? 1 : -1;
}
+QString QLocal8Bit::convertToUnicode_sys(QByteArrayView in, QStringConverter::State *state)
+{
+ return convertToUnicode_sys(in, CP_ACP, state);
+}
-QString QLocal8Bit::convertToUnicode(const char *chars, qsizetype length, QStringConverter::State *state)
+QString QLocal8Bit::convertToUnicode_sys(QByteArrayView in, quint32 codePage,
+ QStringConverter::State *state)
{
- Q_ASSERT(length < INT_MAX); // ### FIXME
- const char *mb = chars;
- int mblen = length;
+ const char *mb = in.data();
+ qsizetype mblen = in.size();
+
+ Q_ASSERT(state);
+ qsizetype &invalidChars = state->invalidChars;
+ using Flag = QStringConverter::Flag;
+ const bool useNullForReplacement = !!(state->flags & Flag::ConvertInvalidToNull);
+ const char16_t replacementCharacter = useNullForReplacement ? QChar::Null
+ : QChar::ReplacementCharacter;
+ if (state->flags & Flag::Stateless) {
+ Q_ASSERT(state->remainingChars == 0);
+ state = nullptr;
+ }
if (!mb || !mblen)
return QString();
- QVarLengthArray<wchar_t, 4096> wc(4096);
- int len;
+ // Use a local stack-buffer at first to allow us a decently large container
+ // to avoid a lot of resizing, without also returning an overallocated
+ // QString to the user for small strings.
+ // Then we can be fast for small strings and take the hit of extra resizes
+ // and measuring how much storage is needed for large strings.
+ std::array<wchar_t, 4096> buf;
+ wchar_t *out = buf.data();
+ qsizetype outlen = buf.size();
+
QString sp;
- bool prepend = false;
- char state_data = 0;
- int remainingChars = 0;
-
- //save the current state information
- if (state) {
- state_data = (char)state->state_data[0];
- remainingChars = state->remainingChars;
- }
- //convert the pending character (if available)
- if (state && remainingChars) {
- char prev[3] = {0};
- prev[0] = state_data;
- prev[1] = mb[0];
- remainingChars = 0;
- len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
- prev, 2, wc.data(), wc.length());
- if (len) {
- sp.append(QChar(wc[0]));
- if (mblen == 1) {
- state->remainingChars = 0;
- return sp;
- }
- prepend = true;
- mb++;
- mblen--;
- wc[0] = 0;
+ // Return a pointer to storage where we have enough space for `size`
+ const auto growOut = [&](qsizetype size) -> std::tuple<wchar_t *, qsizetype> {
+ if (outlen >= size)
+ return {out, outlen};
+ const bool wasStackBuffer = sp.isEmpty();
+ const auto begin = wasStackBuffer ? buf.data() : reinterpret_cast<wchar_t *>(sp.data());
+ const qsizetype offset = qsizetype(std::distance(begin, out));
+ qsizetype newSize = 0;
+ if (Q_UNLIKELY(qAddOverflow(offset, size, &newSize))) {
+ Q_CHECK_PTR(false);
+ return {nullptr, 0};
+ }
+ sp.resize(newSize);
+ auto it = reinterpret_cast<wchar_t *>(sp.data());
+ if (wasStackBuffer)
+ it = std::copy_n(buf.data(), offset, it);
+ else
+ it += offset;
+ return {it, size};
+ };
+
+ // Convert the pending characters (if available)
+ while (state && state->remainingChars && mblen) {
+ QStringConverter::State localState;
+ localState.flags = state->flags;
+ // Use at most 6 characters as a guess for the longest encoded character
+ // in any multibyte encoding.
+ // Even with a total of 2 bytes of overhead that would leave around
+ // 2^(4 * 8) possible characters
+ std::array<char, 6> prev = {0};
+ Q_ASSERT(state->remainingChars <= q20::ssize(state->state_data));
+ qsizetype index = 0;
+ for (; index < state->remainingChars; ++index)
+ prev[index] = state->state_data[index];
+ const qsizetype toCopy = std::min(q20::ssize(prev) - index, mblen);
+ for (qsizetype i = 0; i < toCopy; ++i, ++index)
+ prev[index] = mb[i];
+ mb += toCopy;
+ mblen -= toCopy;
+
+ // Recursing:
+ // Since we are using a clean local state it will try to decode what was
+ // stored in our state + some extra octets from input (`prev`). If some
+ // part fails we will have those characters stored in the local state's
+ // storage, and we can extract those. It may also output some
+ // replacement characters, which we'll count in the invalidChars.
+ // In the best case we only do this once, but we will loop until we have
+ // resolved all the remaining characters or we have run out of new input
+ // in which case we may still have remaining characters.
+ const QString tmp = convertToUnicode_sys(QByteArrayView(prev.data(), index), codePage,
+ &localState);
+ std::tie(out, outlen) = growOut(tmp.size());
+ if (!out)
+ return {};
+ out = std::copy_n(reinterpret_cast<const wchar_t *>(tmp.constData()), tmp.size(), out);
+ outlen -= tmp.size();
+ const qsizetype tail = toCopy - localState.remainingChars;
+ if (tail >= 0) {
+ // Everything left to process comes from `in`, so we can stop
+ // looping. Adjust the window for `in` and unset remainingChars to
+ // signal that we're done.
+ mb -= localState.remainingChars;
+ mblen += localState.remainingChars;
+ localState.remainingChars = 0;
}
+ state->remainingChars = localState.remainingChars;
+ state->invalidChars += localState.invalidChars;
+ std::copy_n(localState.state_data, state->remainingChars, state->state_data);
}
- while (!(len=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS,
- mb, mblen, wc.data(), wc.length()))) {
- int r = GetLastError();
- if (r == ERROR_INSUFFICIENT_BUFFER) {
- const int wclen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
- mb, mblen, 0, 0);
- wc.resize(wclen);
- } else if (r == ERROR_NO_UNICODE_TRANSLATION) {
- //find the last non NULL character
- while (mblen > 1 && !(mb[mblen-1]))
- mblen--;
- //check whether, we hit an invalid character in the middle
- if ((mblen <= 1) || (remainingChars && state_data))
- return convertToUnicodeCharByChar(chars, length, state);
- //Remove the last character and try again...
- state_data = mb[mblen-1];
- remainingChars = 1;
- mblen--;
+ Q_ASSERT(!state || state->remainingChars == 0 || mblen == 0);
+
+ // Need it in this scope, since we try to decrease our window size if we
+ // encounter an error
+ int nextIn = qt_saturate<int>(mblen);
+ while (mblen > 0) {
+ std::tie(out, outlen) = growOut(1); // Need space for at least one character
+ if (!out)
+ return {};
+ const int nextOut = qt_saturate<int>(outlen);
+ int len = MultiByteToWideChar(codePage, MB_ERR_INVALID_CHARS, mb, nextIn, out, nextOut);
+ if (len) {
+ mb += nextIn;
+ mblen -= nextIn;
+ out += len;
+ outlen -= len;
} else {
- // Fail.
- qWarning("MultiByteToWideChar: Cannot convert multibyte text");
- break;
+ int r = GetLastError();
+ if (r == ERROR_INSUFFICIENT_BUFFER) {
+ const int wclen = MultiByteToWideChar(codePage, 0, mb, nextIn, 0, 0);
+ std::tie(out, outlen) = growOut(wclen);
+ if (!out)
+ return {};
+ } else if (r == ERROR_NO_UNICODE_TRANSLATION) {
+ // Can't decode the current window, so either store the state,
+ // reduce window size or output a replacement character.
+
+ // Check if we can store all remaining characters in the state
+ // to be used next time we're called:
+ if (state && mblen <= q20::ssize(state->state_data)) {
+ state->remainingChars = mblen;
+ std::copy_n(mb, mblen, state->state_data);
+ mb += mblen;
+ mblen = 0;
+ break;
+ }
+
+ // .. if not, try to find the last valid character in the window
+ // and try again with a shrunken window:
+ if (nextIn > 1) {
+ // There may be some incomplete data at the end of our current
+ // window, so decrease the window size and try again.
+ // In the worst case scenario there is gigs of undecodable
+ // garbage, but what are we supposed to do about that?
+ const auto it = CharPrevExA(codePage, mb, mb + nextIn, 0);
+ if (it != mb)
+ nextIn = int(it - mb);
+ else
+ --nextIn;
+ continue;
+ }
+
+ // Finally, we are forced to output a replacement character for
+ // the first byte in the window:
+ std::tie(out, outlen) = growOut(1);
+ if (!out)
+ return {};
+ *out = replacementCharacter;
+ ++invalidChars;
+ ++out;
+ --outlen;
+ ++mb;
+ --mblen;
+ } else {
+ // Fail.
+ qWarning("MultiByteToWideChar: Cannot convert multibyte text");
+ break;
+ }
}
+ nextIn = qt_saturate<int>(mblen);
}
- if (len <= 0)
- return QString();
+ if (sp.isEmpty()) {
+ // We must have only used the stack buffer
+ if (out != buf.data()) // else: we return null-string
+ sp = QStringView(buf.data(), out).toString();
+ } else{
+ const auto begin = reinterpret_cast<wchar_t *>(sp.data());
+ sp.truncate(std::distance(begin, out));
+ }
- if (wc[len-1] == 0) // len - 1: we don't want terminator
- --len;
+ if (sp.size() && sp.back().isNull())
+ sp.chop(1);
- //save the new state information
- if (state) {
- state->state_data[0] = (char)state_data;
- state->remainingChars = remainingChars;
+ if (!state && mblen > 0) {
+ // We have trailing character(s) that could not be converted, and
+ // nowhere to cache them
+ sp.resize(sp.size() + mblen, replacementCharacter);
+ invalidChars += mblen;
}
- QString s((QChar*)wc.data(), len);
- if (prepend) {
- return sp+s;
- }
- return s;
+ return sp;
+}
+
+QByteArray QLocal8Bit::convertFromUnicode_sys(QStringView in, QStringConverter::State *state)
+{
+ return convertFromUnicode_sys(in, CP_ACP, state);
}
-QByteArray QLocal8Bit::convertFromUnicode(const QChar *ch, qsizetype uclen, QStringConverter::State *state)
+QByteArray QLocal8Bit::convertFromUnicode_sys(QStringView in, quint32 codePage,
+ QStringConverter::State *state)
{
- Q_ASSERT(uclen < INT_MAX); // ### FIXME
+ const wchar_t *ch = reinterpret_cast<const wchar_t *>(in.data());
+ qsizetype uclen = in.size();
+
Q_ASSERT(state);
- Q_UNUSED(state); // ### Fixme
- if (state->flags & QStringConverter::Flag::Stateless) // temporary
+ // The Windows API has a *boolean* out-parameter that says if a replacement
+ // character was used, but it gives us no way to know _how many_ were used.
+ // Since we cannot simply scan the string for replacement characters
+ // (which is potentially a question mark, and thus a valid character),
+ // we simply do not track the number of invalid characters here.
+ // auto &invalidChars = state->invalidChars;
+
+ using Flag = QStringConverter::Flag;
+ if (state->flags & Flag::Stateless) { // temporary
+ Q_ASSERT(state->remainingChars == 0);
state = nullptr;
+ }
if (!ch)
return QByteArray();
if (uclen == 0)
return QByteArray("");
- BOOL used_def;
- QByteArray mb(4096, 0);
- int len;
- while (!(len=WideCharToMultiByte(CP_ACP, 0, (const wchar_t*)ch, uclen,
- mb.data(), mb.size()-1, 0, &used_def)))
- {
- int r = GetLastError();
- if (r == ERROR_INSUFFICIENT_BUFFER) {
- mb.resize(1+WideCharToMultiByte(CP_ACP, 0,
- (const wchar_t*)ch, uclen,
- 0, 0, 0, &used_def));
- // and try again...
+
+ // Use a local stack-buffer at first to allow us a decently large container
+ // to avoid a lot of resizing, without also returning an overallocated
+ // QByteArray to the user for small strings.
+ // Then we can be fast for small strings and take the hit of extra resizes
+ // and measuring how much storage is needed for large strings.
+ std::array<char, 4096> buf;
+ char *out = buf.data();
+ qsizetype outlen = buf.size();
+ QByteArray mb;
+
+ if (state && state->remainingChars > 0) {
+ Q_ASSERT(state->remainingChars == 1);
+ // Let's try to decode the pending character
+ wchar_t wc[2] = { wchar_t(state->state_data[0]), ch[0] };
+ // Check if the second character is a valid low surrogate,
+ // otherwise we'll just decode the first character, for which windows
+ // will output a replacement character.
+ const bool validCodePoint = QChar::isLowSurrogate(wc[1]);
+ int len = WideCharToMultiByte(codePage, 0, wc, validCodePoint ? 2 : 1, out, outlen, nullptr,
+ nullptr);
+ if (!len)
+ return {}; // Cannot recover, and I refuse to believe it was a size limitation
+ out += len;
+ outlen -= len;
+ if (validCodePoint) {
+ ++ch;
+ --uclen;
+ }
+ state->remainingChars = 0;
+ state->state_data[0] = 0;
+ if (uclen == 0)
+ return QByteArrayView(buf.data(), len).toByteArray();
+ }
+
+ if (state && QChar::isHighSurrogate(ch[uclen - 1])) {
+ // We can handle a missing low surrogate at the end of the string,
+ // so if there is one, exclude it now and store it in the state.
+ state->remainingChars = 1;
+ state->state_data[0] = ch[uclen - 1];
+ --uclen;
+ if (uclen == 0)
+ return QByteArray();
+ }
+
+ Q_ASSERT(uclen > 0);
+
+ // Return a pointer to storage where we have enough space for `size`
+ const auto growOut = [&](qsizetype size) -> std::tuple<char *, qsizetype> {
+ if (outlen >= size)
+ return {out, outlen};
+ const bool wasStackBuffer = mb.isEmpty();
+ const auto begin = wasStackBuffer ? buf.data() : mb.data();
+ const qsizetype offset = qsizetype(std::distance(begin, out));
+ qsizetype newSize = 0;
+ if (Q_UNLIKELY(qAddOverflow(offset, size, &newSize))) {
+ Q_CHECK_PTR(false);
+ return {nullptr, 0};
+ }
+ mb.resize(newSize);
+ auto it = mb.data();
+ if (wasStackBuffer)
+ it = std::copy_n(buf.data(), offset, it);
+ else
+ it += offset;
+ return {it, size};
+ };
+
+ const auto getNextWindowSize = [&]() {
+ int nextIn = qt_saturate<int>(uclen);
+ // The Windows API has some issues if the current window ends in the
+ // middle of a surrogate pair, so we avoid that:
+ if (nextIn > 1 && QChar::isHighSurrogate(ch[nextIn - 1]))
+ --nextIn;
+ return nextIn;
+ };
+
+ int len = 0;
+ while (uclen > 0) {
+ const int nextIn = getNextWindowSize();
+ std::tie(out, outlen) = growOut(1); // We need at least one byte
+ if (!out)
+ return {};
+ const int nextOut = qt_saturate<int>(outlen);
+ len = WideCharToMultiByte(codePage, 0, ch, nextIn, out, nextOut, nullptr, nullptr);
+ if (len > 0) {
+ ch += nextIn;
+ uclen -= nextIn;
+ out += len;
+ outlen -= len;
} else {
- // Fail. Probably can't happen in fact (dwFlags is 0).
+ int r = GetLastError();
+ if (r == ERROR_INSUFFICIENT_BUFFER) {
+ int neededLength = WideCharToMultiByte(codePage, 0, ch, nextIn, nullptr, 0,
+ nullptr, nullptr);
+ if (neededLength <= 0) {
+ // Fail. Observed with UTF8 where the input window was max int and ended in an
+ // incomplete sequence, probably a Windows bug. We try to avoid that from
+ // happening by reducing the window size in that case. But let's keep this
+ // branch just in case of other bugs.
+#ifndef QT_NO_DEBUG
+ r = GetLastError();
+ fprintf(stderr,
+ "WideCharToMultiByte: Cannot convert multibyte text (error %d)\n", r);
+#endif // !QT_NO_DEBUG
+ break;
+ }
+ std::tie(out, outlen) = growOut(neededLength);
+ if (!out)
+ return {};
+ // and try again...
+ } else {
+ // Fail. Probably can't happen in fact (dwFlags is 0).
#ifndef QT_NO_DEBUG
- // Can't use qWarning(), as it'll recurse to handle %ls
- fprintf(stderr,
- "WideCharToMultiByte: Cannot convert multibyte text (error %d): %ls\n",
- r, reinterpret_cast<const wchar_t*>(QString(ch, uclen).utf16()));
+ // Can't use qWarning(), as it'll recurse to handle %ls
+ fprintf(stderr,
+ "WideCharToMultiByte: Cannot convert multibyte text (error %d): %ls\n", r,
+ reinterpret_cast<const wchar_t *>(
+ QStringView(ch, uclen).left(100).toString().utf16()));
#endif
- break;
+ break;
+ }
}
}
- mb.resize(len);
+ if (mb.isEmpty()) {
+ // We must have only used the stack buffer
+ if (out != buf.data()) // else: we return null-array
+ mb = QByteArrayView(buf.data(), out).toByteArray();
+ } else {
+ mb.truncate(std::distance(mb.data(), out));
+ }
return mb;
}
#endif
-void QStringConverter::State::clear()
+void QStringConverter::State::clear() noexcept
{
if (clearFn)
clearFn(this);
@@ -1375,9 +1634,25 @@ void QStringConverter::State::clear()
internalState = 0;
}
-static QChar *fromUtf16(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+void QStringConverter::State::reset() noexcept
{
- return QUtf16::convertToUnicode(out, in, length, state, DetectEndianness);
+ if (flags & Flag::UsesIcu) {
+#if QT_CONFIG(icu)
+ UConverter *converter = static_cast<UConverter *>(d[0]);
+ if (converter)
+ ucnv_reset(converter);
+#else
+ Q_UNREACHABLE();
+#endif
+ } else {
+ clear();
+ }
+}
+
+#ifndef QT_BOOTSTRAPPED
+static QChar *fromUtf16(QChar *out, QByteArrayView in, QStringConverter::State *state)
+{
+ return QUtf16::convertToUnicode(out, in, state, DetectEndianness);
}
static char *toUtf16(char *out, QStringView in, QStringConverter::State *state)
@@ -1385,9 +1660,9 @@ static char *toUtf16(char *out, QStringView in, QStringConverter::State *state)
return QUtf16::convertFromUnicode(out, in, state, DetectEndianness);
}
-static QChar *fromUtf16BE(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+static QChar *fromUtf16BE(QChar *out, QByteArrayView in, QStringConverter::State *state)
{
- return QUtf16::convertToUnicode(out, in, length, state, BigEndianness);
+ return QUtf16::convertToUnicode(out, in, state, BigEndianness);
}
static char *toUtf16BE(char *out, QStringView in, QStringConverter::State *state)
@@ -1395,9 +1670,9 @@ static char *toUtf16BE(char *out, QStringView in, QStringConverter::State *state
return QUtf16::convertFromUnicode(out, in, state, BigEndianness);
}
-static QChar *fromUtf16LE(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+static QChar *fromUtf16LE(QChar *out, QByteArrayView in, QStringConverter::State *state)
{
- return QUtf16::convertToUnicode(out, in, length, state, LittleEndianness);
+ return QUtf16::convertToUnicode(out, in, state, LittleEndianness);
}
static char *toUtf16LE(char *out, QStringView in, QStringConverter::State *state)
@@ -1405,9 +1680,9 @@ static char *toUtf16LE(char *out, QStringView in, QStringConverter::State *state
return QUtf16::convertFromUnicode(out, in, state, LittleEndianness);
}
-static QChar *fromUtf32(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+static QChar *fromUtf32(QChar *out, QByteArrayView in, QStringConverter::State *state)
{
- return QUtf32::convertToUnicode(out, in, length, state, DetectEndianness);
+ return QUtf32::convertToUnicode(out, in, state, DetectEndianness);
}
static char *toUtf32(char *out, QStringView in, QStringConverter::State *state)
@@ -1415,9 +1690,9 @@ static char *toUtf32(char *out, QStringView in, QStringConverter::State *state)
return QUtf32::convertFromUnicode(out, in, state, DetectEndianness);
}
-static QChar *fromUtf32BE(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+static QChar *fromUtf32BE(QChar *out, QByteArrayView in, QStringConverter::State *state)
{
- return QUtf32::convertToUnicode(out, in, length, state, BigEndianness);
+ return QUtf32::convertToUnicode(out, in, state, BigEndianness);
}
static char *toUtf32BE(char *out, QStringView in, QStringConverter::State *state)
@@ -1425,37 +1700,26 @@ static char *toUtf32BE(char *out, QStringView in, QStringConverter::State *state
return QUtf32::convertFromUnicode(out, in, state, BigEndianness);
}
-static QChar *fromUtf32LE(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+static QChar *fromUtf32LE(QChar *out, QByteArrayView in, QStringConverter::State *state)
{
- return QUtf32::convertToUnicode(out, in, length, state, LittleEndianness);
+ return QUtf32::convertToUnicode(out, in, state, LittleEndianness);
}
static char *toUtf32LE(char *out, QStringView in, QStringConverter::State *state)
{
return QUtf32::convertFromUnicode(out, in, state, LittleEndianness);
}
+#endif // !QT_BOOTSTRAPPED
-void qt_from_latin1(char16_t *dst, const char *str, size_t size) noexcept;
-
-static QChar *fromLatin1(QChar *out, const char *chars, qsizetype len, QStringConverter::State *state)
-{
- Q_ASSERT(state);
- Q_UNUSED(state);
-
- qt_from_latin1(reinterpret_cast<char16_t *>(out), chars, size_t(len));
- return out + len;
-}
-
-
-static char *toLatin1(char *out, QStringView in, QStringConverter::State *state)
+char *QLatin1::convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept
{
Q_ASSERT(state);
if (state->flags & QStringConverter::Flag::Stateless) // temporary
state = nullptr;
const char replacement = (state && state->flags & QStringConverter::Flag::ConvertInvalidToNull) ? 0 : '?';
- int invalid = 0;
- for (qsizetype i = 0; i < in.length(); ++i) {
+ qsizetype invalid = 0;
+ for (qsizetype i = 0; i < in.size(); ++i) {
if (in[i] > QChar(0xff)) {
*out = replacement;
++invalid;
@@ -1469,29 +1733,31 @@ static char *toLatin1(char *out, QStringView in, QStringConverter::State *state)
return out;
}
-static QChar *fromLocal8Bit(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
+static QChar *fromLocal8Bit(QChar *out, QByteArrayView in, QStringConverter::State *state)
{
- QString s = QLocal8Bit::convertToUnicode(in, length, state);
- memcpy(out, s.constData(), s.length()*sizeof(QChar));
- return out + s.length();
+ QString s = QLocal8Bit::convertToUnicode(in, state);
+ memcpy(out, s.constData(), s.size()*sizeof(QChar));
+ return out + s.size();
}
static char *toLocal8Bit(char *out, QStringView in, QStringConverter::State *state)
{
- QByteArray s = QLocal8Bit::convertFromUnicode(in.data(), in.length(), state);
- memcpy(out, s.constData(), s.length());
- return out + s.length();
+ QByteArray s = QLocal8Bit::convertFromUnicode(in, state);
+ memcpy(out, s.constData(), s.size());
+ return out + s.size();
}
static qsizetype fromUtf8Len(qsizetype l) { return l + 1; }
static qsizetype toUtf8Len(qsizetype l) { return 3*(l + 1); }
+#ifndef QT_BOOTSTRAPPED
static qsizetype fromUtf16Len(qsizetype l) { return l/2 + 2; }
static qsizetype toUtf16Len(qsizetype l) { return 2*(l + 1); }
static qsizetype fromUtf32Len(qsizetype l) { return l/2 + 2; }
static qsizetype toUtf32Len(qsizetype l) { return 4*(l + 1); }
+#endif
static qsizetype fromLatin1Len(qsizetype l) { return l + 1; }
static qsizetype toLatin1Len(qsizetype l) { return l + 1; }
@@ -1524,7 +1790,7 @@ static qsizetype toLatin1Len(qsizetype l) { return l + 1; }
operation, encoding UTF-16 encoded data (usually in the form of a QString) to
the requested encoding.
- The supported encodings are:
+ The following encodings are always supported:
\list
\li UTF-8
@@ -1538,6 +1804,10 @@ static qsizetype toLatin1Len(qsizetype l) { return l + 1; }
\li The system encoding
\endlist
+ QStringConverter may support more encodings depending on how Qt was
+ compiled. If more codecs are supported, they can be listed using
+ availableCodecs().
+
\l {QStringConverter}s can be used as follows to convert some encoded
string to and from UTF-16.
@@ -1596,6 +1866,7 @@ static qsizetype toLatin1Len(qsizetype l) { return l + 1; }
\value Stateless Ignore possible converter states between different function calls
to encode or decode strings. This will also cause the QStringConverter to raise an error if an incomplete
sequence of data is encountered.
+ \omitvalue UsesIcu
*/
/*!
@@ -1604,17 +1875,18 @@ static qsizetype toLatin1Len(qsizetype l) { return l + 1; }
\value Utf16 Create a converter to or from UTF-16. When decoding, the byte order will get automatically
detected by a leading byte order mark. If none exists or when encoding, the system byte order will
be assumed.
- \value Utf16BE Create a converter to or from big endian UTF-16.
- \value Utf16LE Create a converter to or from litte endian UTF-16.
+ \value Utf16BE Create a converter to or from big-endian UTF-16.
+ \value Utf16LE Create a converter to or from little-endian UTF-16.
\value Utf32 Create a converter to or from UTF-32. When decoding, the byte order will get automatically
detected by a leading byte order mark. If none exists or when encoding, the system byte order will
be assumed.
- \value Utf32BE Create a converter to or from big endian UTF-32.
- \value Utf32LE Create a converter to or from litte endian UTF-32.
+ \value Utf32BE Create a converter to or from big-endian UTF-32.
+ \value Utf32LE Create a converter to or from little-endian UTF-32.
\value Latin1 Create a converter to or from ISO-8859-1 (Latin1).
\value System Create a converter to or from the underlying encoding of the
operating systems locale. This is always assumed to be UTF-8 for Unix based
systems. On Windows, this converts to and from the locale code page.
+ \omitvalue LastEncoding
*/
/*!
@@ -1625,34 +1897,31 @@ static qsizetype toLatin1Len(qsizetype l) { return l + 1; }
const QStringConverter::Interface QStringConverter::encodingInterfaces[QStringConverter::LastEncoding + 1] =
{
{ "UTF-8", QUtf8::convertToUnicode, fromUtf8Len, QUtf8::convertFromUnicode, toUtf8Len },
+#ifndef QT_BOOTSTRAPPED
{ "UTF-16", fromUtf16, fromUtf16Len, toUtf16, toUtf16Len },
{ "UTF-16LE", fromUtf16LE, fromUtf16Len, toUtf16LE, toUtf16Len },
{ "UTF-16BE", fromUtf16BE, fromUtf16Len, toUtf16BE, toUtf16Len },
{ "UTF-32", fromUtf32, fromUtf32Len, toUtf32, toUtf32Len },
{ "UTF-32LE", fromUtf32LE, fromUtf32Len, toUtf32LE, toUtf32Len },
{ "UTF-32BE", fromUtf32BE, fromUtf32Len, toUtf32BE, toUtf32Len },
- { "ISO-8859-1", fromLatin1, fromLatin1Len, toLatin1, toLatin1Len },
+#endif
+ { "ISO-8859-1", QLatin1::convertToUnicode, fromLatin1Len, QLatin1::convertFromUnicode, toLatin1Len },
{ "Locale", fromLocal8Bit, fromUtf8Len, toLocal8Bit, toUtf8Len }
};
// match names case insensitive and skipping '-' and '_'
static bool nameMatch(const char *a, const char *b)
{
- while (*a && *b) {
- if (*a == '-' || *a == '_') {
+ do {
+ while (*a == '-' || *a == '_')
++a;
- continue;
- }
- if (*b == '-' || *b == '_') {
+ while (*b == '-' || *b == '_')
++b;
- continue;
- }
- if (toupper(*a) != toupper(*b))
- return false;
- ++a;
- ++b;
- }
- return !*a && !*b;
+ if (!*a && !*b) // end of both strings
+ return true;
+ } while (QtMiscUtils::toAsciiLower(*a++) == QtMiscUtils::toAsciiLower(*b++));
+
+ return false;
}
@@ -1666,6 +1935,234 @@ static bool nameMatch(const char *a, const char *b)
\internal
*/
+
+#if QT_CONFIG(icu)
+// only derives from QStringConverter to get access to protected types
+struct QStringConverterICU : QStringConverter
+{
+ static void clear_function(QStringConverterBase::State *state) noexcept
+ {
+ ucnv_close(static_cast<UConverter *>(state->d[0]));
+ state->d[0] = nullptr;
+ }
+
+ static void ensureConverter(QStringConverter::State *state)
+ {
+ // old code might reset the state via clear instead of reset
+ // in that case, the converter has been closed, and we have to reopen it
+ if (state->d[0] == nullptr)
+ state->d[0] = createConverterForName(static_cast<const char *>(state->d[1]), state);
+ }
+
+ static QChar *toUtf16(QChar *out, QByteArrayView in, QStringConverter::State *state)
+ {
+ ensureConverter(state);
+
+ auto icu_conv = static_cast<UConverter *>(state->d[0]);
+ UErrorCode err = U_ZERO_ERROR;
+ auto source = in.data();
+ auto sourceLimit = in.data() + in.size();
+
+ qsizetype length = toLen(in.size());
+
+ UChar *target = reinterpret_cast<UChar *>(out);
+ auto targetLimit = target + length;
+ // We explicitly clean up anyway, so no need to set flush to true,
+ // which would just reset the converter.
+ UBool flush = false;
+
+ // If the QStringConverter was moved, the state that we used as a context is stale now.
+ UConverterToUCallback action;
+ const void *context;
+ ucnv_getToUCallBack(icu_conv, &action, &context);
+ if (context != state)
+ ucnv_setToUCallBack(icu_conv, action, state, nullptr, nullptr, &err);
+
+ ucnv_toUnicode(icu_conv, &target, targetLimit, &source, sourceLimit, nullptr, flush, &err);
+ // We did reserve enough space:
+ Q_ASSERT(err != U_BUFFER_OVERFLOW_ERROR);
+ if (state->flags.testFlag(QStringConverter::Flag::Stateless)) {
+ if (auto leftOver = ucnv_toUCountPending(icu_conv, &err)) {
+ ucnv_reset(icu_conv);
+ state->invalidChars += leftOver;
+ }
+ }
+ return reinterpret_cast<QChar *>(target);
+ }
+
+ static char *fromUtf16(char *out, QStringView in, QStringConverter::State *state)
+ {
+ ensureConverter(state);
+ auto icu_conv = static_cast<UConverter *>(state->d[0]);
+ UErrorCode err = U_ZERO_ERROR;
+ auto source = reinterpret_cast<const UChar *>(in.data());
+ auto sourceLimit = reinterpret_cast<const UChar *>(in.data() + in.size());
+
+ qsizetype length = UCNV_GET_MAX_BYTES_FOR_STRING(in.size(), ucnv_getMaxCharSize(icu_conv));
+
+ char *target = out;
+ char *targetLimit = out + length;
+ UBool flush = false;
+
+ // If the QStringConverter was moved, the state that we used as a context is stale now.
+ UConverterFromUCallback action;
+ const void *context;
+ ucnv_getFromUCallBack(icu_conv, &action, &context);
+ if (context != state)
+ ucnv_setFromUCallBack(icu_conv, action, state, nullptr, nullptr, &err);
+
+ ucnv_fromUnicode(icu_conv, &target, targetLimit, &source, sourceLimit, nullptr, flush, &err);
+ // We did reserve enough space:
+ Q_ASSERT(err != U_BUFFER_OVERFLOW_ERROR);
+ if (state->flags.testFlag(QStringConverter::Flag::Stateless)) {
+ if (auto leftOver = ucnv_fromUCountPending(icu_conv, &err)) {
+ ucnv_reset(icu_conv);
+ state->invalidChars += leftOver;
+ }
+ }
+ return target;
+ }
+
+ Q_DISABLE_COPY_MOVE(QStringConverterICU)
+
+ template<qsizetype X>
+ static qsizetype fromLen(qsizetype inLength)
+ {
+ return X * inLength * sizeof(UChar);
+ }
+
+ static qsizetype toLen(qsizetype inLength)
+ {
+
+ /* Assumption: each input char might map to a different codepoint
+ Each codepoint can take up to 4 bytes == 2 QChar
+ We can ignore reserving space for a BOM, as only UTF encodings use one
+ and those are not handled by the ICU converter.
+ */
+ return 2 * inLength;
+ }
+
+ static constexpr QStringConverter::Interface forLength[] = {
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<1>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<2>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<3>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<4>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<5>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<6>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<7>},
+ {"icu, recompile if you see this", QStringConverterICU::toUtf16, QStringConverterICU::toLen, QStringConverterICU::fromUtf16, QStringConverterICU::fromLen<8>}
+ };
+
+ static UConverter *createConverterForName(const char *name, const State *state)
+ {
+ Q_ASSERT(name);
+ Q_ASSERT(state);
+ UErrorCode status = U_ZERO_ERROR;
+ UConverter *conv = ucnv_open(name, &status);
+ if (status != U_ZERO_ERROR && status != U_AMBIGUOUS_ALIAS_WARNING) {
+ ucnv_close(conv);
+ return nullptr;
+ }
+
+ if (state->flags.testFlag(Flag::ConvertInvalidToNull)) {
+ UErrorCode error = U_ZERO_ERROR;
+
+ auto nullToSubstituter = [](const void *context, UConverterToUnicodeArgs *toUArgs,
+ const char *, int32_t length,
+ UConverterCallbackReason reason, UErrorCode *err) {
+ if (reason <= UCNV_IRREGULAR) {
+ *err = U_ZERO_ERROR;
+ UChar c = '\0';
+ ucnv_cbToUWriteUChars(toUArgs, &c, 1, 0, err);
+ // Recover outer scope's state (which isn't const) from context:
+ auto state = const_cast<State *>(static_cast<const State *>(context));
+ state->invalidChars += length;
+ }
+ };
+ ucnv_setToUCallBack(conv, nullToSubstituter, state, nullptr, nullptr, &error);
+
+ auto nullFromSubstituter = [](const void *context, UConverterFromUnicodeArgs *fromUArgs,
+ const UChar *, int32_t length,
+ UChar32, UConverterCallbackReason reason, UErrorCode *err) {
+ if (reason <= UCNV_IRREGULAR) {
+ *err = U_ZERO_ERROR;
+ const UChar replacement[] = { 0 };
+ const UChar *stringBegin = std::begin(replacement);
+ ucnv_cbFromUWriteUChars(fromUArgs, &stringBegin, std::end(replacement), 0, err);
+ // Recover outer scope's state (which isn't const) from context:
+ auto state = const_cast<State *>(static_cast<const State *>(context));
+ state->invalidChars += length;
+ }
+ };
+ ucnv_setFromUCallBack(conv, nullFromSubstituter, state, nullptr, nullptr, &error);
+ } else {
+ UErrorCode error = U_ZERO_ERROR;
+
+ auto qmarkToSubstituter = [](const void *context, UConverterToUnicodeArgs *toUArgs,
+ const char *codeUnits,int32_t length,
+ UConverterCallbackReason reason, UErrorCode *err) {
+ if (reason <= UCNV_IRREGULAR) {
+ // Recover outer scope's state (which isn't const) from context:
+ auto state = const_cast<State *>(static_cast<const State *>(context));
+ state->invalidChars += length;
+ }
+ // use existing ICU callback for logic
+ UCNV_TO_U_CALLBACK_SUBSTITUTE(nullptr, toUArgs, codeUnits, length, reason, err);
+
+ };
+ ucnv_setToUCallBack(conv, qmarkToSubstituter, state, nullptr, nullptr, &error);
+
+ auto qmarkFromSubstituter = [](const void *context, UConverterFromUnicodeArgs *fromUArgs,
+ const UChar *codeUnits, int32_t length,
+ UChar32 codePoint, UConverterCallbackReason reason, UErrorCode *err) {
+ if (reason <= UCNV_IRREGULAR) {
+ // Recover outer scope's state (which isn't const) from context:
+ auto state = const_cast<State *>(static_cast<const State *>(context));
+ state->invalidChars += length;
+ }
+ // use existing ICU callback for logic
+ UCNV_FROM_U_CALLBACK_SUBSTITUTE(nullptr, fromUArgs, codeUnits, length,
+ codePoint, reason, err);
+ };
+ ucnv_setFromUCallBack(conv, qmarkFromSubstituter, state, nullptr, nullptr, &error);
+ }
+ return conv;
+ }
+
+ static const QStringConverter::Interface *make_icu_converter(
+ QStringConverterBase::State *state,
+ const char *name)
+ {
+ UErrorCode status = U_ZERO_ERROR;
+ UConverter *conv = createConverterForName(name, state);
+ if (!conv)
+ return nullptr;
+
+ const char *icuName = ucnv_getName(conv, &status);
+ // ucnv_getStandardName returns a name which is owned by the library
+ // we can thus store it in the state without worrying aobut its lifetime
+ const char *persistentName = ucnv_getStandardName(icuName, "MIME", &status);
+ if (U_FAILURE(status) || !persistentName) {
+ status = U_ZERO_ERROR;
+ persistentName = ucnv_getStandardName(icuName, "IANA", &status);
+ }
+ state->d[1] = const_cast<char *>(persistentName);
+ state->d[0] = conv;
+ state->flags |= QStringConverterBase::Flag::UsesIcu;
+ qsizetype maxCharSize = ucnv_getMaxCharSize(conv);
+ state->clearFn = QStringConverterICU::clear_function;
+ if (maxCharSize > 8 || maxCharSize < 1) {
+ qWarning("Encountered unexpected codec \"%s\" which requires >8x space", name);
+ return nullptr;
+ } else {
+ return &forLength[maxCharSize - 1];
+ }
+
+ }
+
+};
+#endif
+
/*!
\internal
*/
@@ -1674,7 +2171,27 @@ QStringConverter::QStringConverter(const char *name, Flags f)
{
auto e = encodingForName(name);
if (e)
- iface = encodingInterfaces + int(e.value());
+ iface = encodingInterfaces + int(*e);
+#if QT_CONFIG(icu)
+ else
+ iface = QStringConverterICU::make_icu_converter(&state, name);
+#endif
+}
+
+
+const char *QStringConverter::name() const noexcept
+{
+ if (!iface)
+ return nullptr;
+ if (state.flags & QStringConverter::Flag::UsesIcu) {
+#if QT_CONFIG(icu)
+ return static_cast<const char*>(state.d[1]);
+#else
+ return nullptr;
+#endif
+ } else {
+ return iface->name;
+ }
}
/*!
@@ -1707,17 +2224,26 @@ QStringConverter::QStringConverter(const char *name, Flags f)
Returns the canonical name of the encoding this QStringConverter can encode or decode.
Returns a nullptr if the converter is not valid.
+ The returned name is UTF-8 encoded.
\sa isValid()
*/
/*!
- Returns an optional encoding for \a name. The optional is empty if the name could
- not get converted to a valid encoding.
+ Convert \a name to the corresponding \l Encoding member, if there is one.
+
+ If the \a name is not the name of a codec listed in the Encoding enumeration,
+ \c{std::nullopt} is returned. Such a name may, none the less, be accepted by
+ the QStringConverter constructor when Qt is built with ICU, if ICU provides a
+ converter with the given name.
+
+ \a name is expected to be UTF-8 encoded.
*/
-std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(const char *name)
+std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(const char *name) noexcept
{
- for (int i = 0; i < LastEncoding + 1; ++i) {
+ if (!name)
+ return std::nullopt;
+ for (qsizetype i = 0; i < LastEncoding + 1; ++i) {
if (nameMatch(encodingInterfaces[i].name, name))
return QStringConverter::Encoding(i);
}
@@ -1726,20 +2252,24 @@ std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(cons
return std::nullopt;
}
+#ifndef QT_BOOTSTRAPPED
/*!
- Returns the encoding for the content of \a buf if it can be determined.
+ Returns the encoding for the content of \a data if it can be determined.
\a expectedFirstCharacter can be passed as an additional hint to help determine
the encoding.
The returned optional is empty, if the encoding is unclear.
*/
-std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(const char *buf, qsizetype arraySize, char16_t expectedFirstCharacter)
+std::optional<QStringConverter::Encoding>
+QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter) noexcept
{
+ // someone set us up the BOM?
+ qsizetype arraySize = data.size();
if (arraySize > 3) {
- uint uc = qFromUnaligned<uint>(buf);
- if (uc == qToBigEndian(uint(QChar::ByteOrderMark)))
+ char32_t uc = qFromUnaligned<char32_t>(data.data());
+ if (uc == qToBigEndian(char32_t(QChar::ByteOrderMark)))
return QStringConverter::Utf32BE;
- if (uc == qToLittleEndian(uint(QChar::ByteOrderMark)))
+ if (uc == qToLittleEndian(char32_t(QChar::ByteOrderMark)))
return QStringConverter::Utf32LE;
if (expectedFirstCharacter) {
// catch also anything starting with the expected character
@@ -1751,15 +2281,15 @@ std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(cons
}
if (arraySize > 2) {
- if (memcmp(buf, utf8bom, sizeof(utf8bom)) == 0)
+ if (memcmp(data.data(), utf8bom, sizeof(utf8bom)) == 0)
return QStringConverter::Utf8;
}
if (arraySize > 1) {
- ushort uc = qFromUnaligned<ushort>(buf);
- if (uc == qToBigEndian(ushort(QChar::ByteOrderMark)))
+ char16_t uc = qFromUnaligned<char16_t>(data.data());
+ if (uc == qToBigEndian(char16_t(QChar::ByteOrderMark)))
return QStringConverter::Utf16BE;
- if (uc == qToLittleEndian(ushort(QChar::ByteOrderMark)))
+ if (uc == qToLittleEndian(char16_t(QChar::ByteOrderMark)))
return QStringConverter::Utf16LE;
if (expectedFirstCharacter) {
// catch also anything starting with the expected character
@@ -1772,52 +2302,149 @@ std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(cons
return std::nullopt;
}
-/*!
- Tries to determine the encoding of the HTML in \a buf by looking at leading byte order marks or
- a charset specifier in the HTML meta tag. If the optional is empty, the encoding specified is
- not supported by QStringConverter. If no encoding is detected, the method returns Utf8.
- */
-std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(const char *buf, qsizetype arraySize)
+static QByteArray parseHtmlMetaForEncoding(QByteArrayView data)
{
- // determine charset
- auto encoding = encodingForData(buf, arraySize);
- if (encoding)
- // trust the initial BOM
- return encoding;
+ static constexpr auto metaSearcher = qMakeStaticByteArrayMatcher("meta ");
+ static constexpr auto charsetSearcher = qMakeStaticByteArrayMatcher("charset=");
- QByteArray header = QByteArray(buf, qMin(arraySize, qsizetype(1024))).toLower();
- int pos = header.indexOf("meta ");
+ QByteArray header = data.first(qMin(data.size(), qsizetype(1024))).toByteArray().toLower();
+ qsizetype pos = metaSearcher.indexIn(header);
if (pos != -1) {
- pos = header.indexOf("charset=", pos);
+ pos = charsetSearcher.indexIn(header, pos);
if (pos != -1) {
- pos += int(qstrlen("charset="));
+ pos += qstrlen("charset=");
if (pos < header.size() && (header.at(pos) == '\"' || header.at(pos) == '\''))
++pos;
- int pos2 = pos;
+ qsizetype pos2 = pos;
// The attribute can be closed with either """, "'", ">" or "/",
// none of which are valid charset characters.
while (++pos2 < header.size()) {
char ch = header.at(pos2);
if (ch == '\"' || ch == '\'' || ch == '>' || ch == '/') {
QByteArray name = header.mid(pos, pos2 - pos);
- int colon = name.indexOf(':');
+ qsizetype colon = name.indexOf(':');
if (colon > 0)
name = name.left(colon);
name = name.simplified();
if (name == "unicode") // QTBUG-41998, ICU will return UTF-16.
name = QByteArrayLiteral("UTF-8");
if (!name.isEmpty())
- return encodingForName(name);
+ return name;
}
}
}
}
+ return QByteArray();
+}
+
+/*!
+ Tries to determine the encoding of the HTML in \a data by looking at leading byte
+ order marks or a charset specifier in the HTML meta tag. If the optional is empty,
+ the encoding specified is not supported by QStringConverter. If no encoding is
+ detected, the method returns Utf8.
+
+ \sa QStringDecoder::decoderForHtml()
+*/
+std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)
+{
+ // determine charset
+ std::optional<QStringConverter::Encoding> encoding = encodingForData(data);
+ if (encoding)
+ // trust the initial BOM
+ return encoding;
+
+ QByteArray encodingTag = parseHtmlMetaForEncoding(data);
+ if (!encodingTag.isEmpty())
+ return encodingForName(encodingTag);
+
return Utf8;
}
+static qsizetype availableCodecCount()
+{
+#if !QT_CONFIG(icu)
+ return QStringConverter::Encoding::LastEncoding;
+#else
+ /* icu contains also the names of what Qt provides
+ except for the special Locale one (so add one for it)
+ */
+ return 1 + ucnv_countAvailable();
+#endif
+}
+
+/*!
+ Returns a list of names of supported codecs. The names returned
+ by this function can be passed to QStringEncoder's and
+ QStringDecoder's constructor to create a en- or decoder for
+ the given codec.
+
+ This function may be used to obtain a listing of additional codecs beyond
+ the standard ones. Support for additional codecs requires Qt be compiled
+ with support for the ICU library.
+
+ \note The order of codecs is an internal implementation detail
+ and not guaranteed to be stable.
+ */
+QStringList QStringConverter::availableCodecs()
+{
+ auto availableCodec = [](qsizetype index) -> QString
+ {
+ #if !QT_CONFIG(icu)
+ return QString::fromLatin1(encodingInterfaces[index].name);
+ #else
+ if (index == 0) // "Locale", not provided by icu
+ return QString::fromLatin1(
+ encodingInterfaces[QStringConverter::Encoding::System].name);
+ // this mirrors the setup we do to set a converters name
+ UErrorCode status = U_ZERO_ERROR;
+ auto icuName = ucnv_getAvailableName(int32_t(index - 1));
+ const char *standardName = ucnv_getStandardName(icuName, "MIME", &status);
+ if (U_FAILURE(status) || !standardName) {
+ status = U_ZERO_ERROR;
+ standardName = ucnv_getStandardName(icuName, "IANA", &status);
+ }
+ if (!standardName)
+ standardName = icuName;
+ return QString::fromLatin1(standardName);
+ #endif
+ };
+
+ qsizetype codecCount = availableCodecCount();
+ QStringList result;
+ result.reserve(codecCount);
+ for (qsizetype i = 0; i < codecCount; ++i)
+ result.push_back(availableCodec(i));
+ return result;
+}
+
/*!
- Returns the canonical name for \a encoding.
+ Tries to determine the encoding of the HTML in \a data by looking at leading byte
+ order marks or a charset specifier in the HTML meta tag and returns a QStringDecoder
+ matching the encoding. If the returned decoder is not valid,
+ the encoding specified is not supported by QStringConverter. If no encoding is
+ detected, the method returns a decoder for Utf8.
+
+ \sa isValid()
+*/
+QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)
+{
+ // determine charset
+ std::optional<QStringConverter::Encoding> encoding = encodingForData(data);
+ if (encoding)
+ // trust the initial BOM
+ return QStringDecoder(encoding.value());
+
+ QByteArray encodingTag = parseHtmlMetaForEncoding(data);
+ if (!encodingTag.isEmpty())
+ return QStringDecoder(encodingTag);
+
+ return QStringDecoder(Utf8);
+}
+#endif // !QT_BOOTSTRAPPED
+
+/*!
+ Returns the canonical name for encoding \a e.
*/
const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
{
@@ -1883,26 +2510,24 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
*/
/*!
- \fn QByteArray QStringEncoder::operator()(const QString &in)
- \fn QByteArray QStringEncoder::encode(const QString &in)
+ \fn constexpr QStringEncoder::QStringEncoder(const QString &name, Flags flags = Flag::Default)
+ \since 6.8
- Converts \a in and returns the data as a byte array.
-*/
-
-/*!
- \fn QByteArray QStringEncoder::operator()(QStringView in)
- \fn QByteArray QStringEncoder::encode(QStringView in)
- \overload
+ Creates an encoder object using \a name and \a flags.
+ If \a name is not the name of a known encoding an invalid converter will get created.
- Converts \a in and returns the data as a byte array.
+ \sa isValid()
*/
/*!
- \fn QByteArray QStringEncoder::operator()(const QChar *in, qsizetype length)
- \fn QByteArray QStringEncoder::encode(const QChar *in, qsizetype length)
- \overload
+ \fn QStringEncoder::DecodedData<const QString &> QStringEncoder::encode(const QString &in)
+ \fn QStringEncoder::DecodedData<QStringView> QStringEncoder::encode(QStringView in)
+ \fn QStringEncoder::DecodedData<const QString &> QStringEncoder::operator()(const QString &in)
+ \fn QStringEncoder::DecodedData<QStringView> QStringEncoder::operator()(QStringView in)
+
+ Converts \a in and returns a struct that is implicitly convertible to QByteArray.
- Converts \a length QChars from \a in and returns the data as a byte array.
+ \snippet code/src_corelib_text_qstringconverter.cpp 5
*/
/*!
@@ -1911,20 +2536,20 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
Returns the maximum amount of characters required to be able to process
\a inputLength decoded data.
- \sa appendToBuffer
+ \sa appendToBuffer()
*/
/*!
- \fn char *QStringEncoder::appendToBuffer(char *out, const QChar *in, qsizetype length)
+ \fn char *QStringEncoder::appendToBuffer(char *out, QStringView in)
- Encodes \a length QChars from \a in and writes the encoded result into the buffer
- starting at \a out. Returns a pointer to the end of data written.
+ Encodes \a in and writes the encoded result into the buffer
+ starting at \a out. Returns a pointer to the end of the data written.
- \a out needs to be large enough to be able to hold all the decoded data. Use
- \l{requiredSpace} to determine the maximum size requirements to be able to encode
- a QChar buffer of \a length.
+ \note \a out must be large enough to be able to hold all the decoded data. Use
+ requiredSpace() to determine the maximum size requirement to be able to encode
+ \a in.
- \sa requiredSpace
+ \sa requiredSpace()
*/
/*!
@@ -1986,28 +2611,25 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
*/
/*!
- \fn QString QStringDecoder::operator()(const QByteArray &ba)
- \fn QString QStringDecoder::decode(const QByteArray &ba)
+ \fn constexpr QStringDecoder::QStringDecoder(const QString &name, Flags flags = Flag::Default)
+ \since 6.8
- Converts \a ba and returns the data as a QString.
+ Creates an decoder object using \a name and \a flags.
+ If \a name is not the name of a known encoding an invalid converter will get created.
+
+ \sa isValid()
*/
/*!
- \fn QString QStringDecoder::operator()(const char *in, qsizetype size)
- \fn QString QStringDecoder::decode(const char *in, qsizetype size)
- \overload
+ \fn QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::operator()(const QByteArray &ba)
+ \fn QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::decode(const QByteArray &ba)
+ \fn QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::operator()(QByteArrayView ba)
+ \fn QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::decode(QByteArrayView ba)
- Converts a byte array containing the first \a size bytes of the array \a in
- and returns the data as a QString.
-*/
+ Converts \a ba and returns a struct that is implicitly convertible to QString.
-/*!
- \fn QString QStringDecoder::operator()(const char *chars)
- \fn QString QStringDecoder::decode(const char *chars)
- \overload
- Converts \a chars and returns the data as a QString. \a chars is assumed to
- point to a \c{\0}-terminated string and its length is determined dynamically.
+ \snippet code/src_corelib_text_qstringconverter.cpp 4
*/
/*!
@@ -2020,16 +2642,22 @@ const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
*/
/*!
- \fn QChar *QStringDecoder::appendToBuffer(QChar *out, const char *in, qsizetype length)
+ \fn QChar *QStringDecoder::appendToBuffer(QChar *out, QByteArrayView in)
- Decodes \a length bytes from \a in and writes the decoded result into the buffer
- starting at \a out. Returns a pointer to the end of data written.
+ Decodes the sequence of bytes viewed by \a in and writes the decoded result into
+ the buffer starting at \a out. Returns a pointer to the end of data written.
\a out needs to be large enough to be able to hold all the decoded data. Use
\l{requiredSpace} to determine the maximum size requirements to decode an encoded
- data buffer of \a length.
+ data buffer of \c in.size() bytes.
\sa requiredSpace
*/
+/*!
+ \fn char16_t *QStringDecoder::appendToBuffer(char16_t *out, QByteArrayView in)
+ \since 6.6
+ \overload
+*/
+
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h
index 9eba8bc437..40791f8e26 100644
--- a/src/corelib/text/qstringconverter.h
+++ b/src/corelib/text/qstringconverter.h
@@ -1,247 +1,78 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#if 0
+// keep existing syncqt header working after the move of the class
+// into qstringconverter_base
+#pragma qt_class(QStringConverter)
+#pragma qt_class(QStringConverterBase)
+#endif
#ifndef QSTRINGCONVERTER_H
#define QSTRINGCONVERTER_H
+#include <QtCore/qstringconverter_base.h>
#include <QtCore/qstring.h>
-#if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
#include <QtCore/qstringbuilder.h>
-#endif
-
-#include <optional>
QT_BEGIN_NAMESPACE
-// work around a compiler bug in GCC 7
-#if (defined(Q_CC_GNU) && __GNUC__ == 7) || defined(Q_QDOC)
-#define QSTRINGCONVERTER_CONSTEXPR
-#else
-#define QSTRINGCONVERTER_CONSTEXPR constexpr
-#endif
-
-class QStringConverterBase
-{
-public:
- enum class Flag {
- Default = 0,
- Stateless = 0x1,
- ConvertInvalidToNull = 0x2,
- WriteBom = 0x4,
- ConvertInitialBom = 0x8
- };
- Q_DECLARE_FLAGS(Flags, Flag)
-
- struct State {
- constexpr State(Flags f = Flag::Default)
- : flags(f), state_data{0, 0, 0, 0} {}
- ~State() { clear(); }
- State(State &&other)
- : flags(other.flags),
- remainingChars(other.remainingChars),
- invalidChars(other.invalidChars),
- d{other.d[0], other.d[1]},
- clearFn(other.clearFn)
- { other.clearFn = nullptr; }
- State &operator=(State &&other)
- {
- clear();
- flags = other.flags;
- remainingChars = other.remainingChars;
- invalidChars = other.invalidChars;
- d[0] = other.d[0];
- d[1] = other.d[1];
- clearFn = other.clearFn;
- other.clearFn = nullptr;
- return *this;
- }
- Q_CORE_EXPORT void clear();
-
- Flags flags;
- int internalState = 0;
- qsizetype remainingChars = 0;
- qsizetype invalidChars = 0;
-
- union {
- uint state_data[4];
- void *d[2];
- };
- using ClearDataFn = void (*)(State *);
- ClearDataFn clearFn = nullptr;
- private:
- Q_DISABLE_COPY(State)
- };
-};
-Q_DECLARE_OPERATORS_FOR_FLAGS(QStringConverterBase::Flags)
-
-class QStringConverter : public QStringConverterBase
-{
-public:
-
- enum Encoding {
- Utf8,
- Utf16,
- Utf16LE,
- Utf16BE,
- Utf32,
- Utf32LE,
- Utf32BE,
- Latin1,
- System,
- LastEncoding = System
- };
-#ifdef Q_QDOC
- // document the flags here
- enum class Flag {
- Default = 0,
- Stateless = 0x1,
- ConvertInvalidToNull = 0x2,
- WriteBom = 0x4,
- ConvertInitialBom = 0x8
- };
- Q_DECLARE_FLAGS(Flags, Flag)
-#endif
-
-protected:
-
- struct Interface
- {
- // ### FIXME: need a QByteArrayView
- using DecoderFn = QChar * (*)(QChar *out, const char *in, qsizetype length, State *state);
- using LengthFn = qsizetype (*)(qsizetype inLength);
- using EncoderFn = char * (*)(char *out, QStringView in, State *state);
- const char *name = nullptr;
- DecoderFn toUtf16 = nullptr;
- LengthFn toUtf16Len = nullptr;
- EncoderFn fromUtf16 = nullptr;
- LengthFn fromUtf16Len = nullptr;
- };
-
- QSTRINGCONVERTER_CONSTEXPR QStringConverter()
- : iface(nullptr)
- {}
- QSTRINGCONVERTER_CONSTEXPR QStringConverter(Encoding encoding, Flags f)
- : iface(&encodingInterfaces[int(encoding)]), state(f)
- {}
- QSTRINGCONVERTER_CONSTEXPR QStringConverter(const Interface *i)
- : iface(i)
- {}
- Q_CORE_EXPORT QStringConverter(const char *name, Flags f);
-
-
-public:
- bool isValid() const { return iface != nullptr; }
-
- void resetState()
- {
- state.clear();
- }
- bool hasError() const { return state.invalidChars != 0; }
-
- const char *name() const
- { return isValid() ? iface->name : nullptr; }
-
- Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name);
- Q_CORE_EXPORT static const char *nameForEncoding(Encoding e);
- Q_CORE_EXPORT static std::optional<Encoding> encodingForData(const char *buf, qsizetype arraySize, char16_t expectedFirstCharacter = 0);
- Q_CORE_EXPORT static std::optional<Encoding> encodingForHtml(const char *buf, qsizetype arraySize);
-
-protected:
- const Interface *iface;
- State state;
-private:
- Q_CORE_EXPORT static const Interface encodingInterfaces[Encoding::LastEncoding + 1];
-};
-
class QStringEncoder : public QStringConverter
{
protected:
- QSTRINGCONVERTER_CONSTEXPR QStringEncoder(const Interface *i)
+ constexpr explicit QStringEncoder(const Interface *i) noexcept
: QStringConverter(i)
{}
public:
- QSTRINGCONVERTER_CONSTEXPR QStringEncoder()
+ constexpr QStringEncoder() noexcept
: QStringConverter()
{}
- QSTRINGCONVERTER_CONSTEXPR QStringEncoder(Encoding encoding, Flags flags = Flag::Default)
+ constexpr explicit QStringEncoder(Encoding encoding, Flags flags = Flag::Default)
: QStringConverter(encoding, flags)
{}
- QStringEncoder(const char *name, Flags flags = Flag::Default)
+ explicit QStringEncoder(const char *name, Flags flags = Flag::Default)
: QStringConverter(name, flags)
{}
+ Q_WEAK_OVERLOAD explicit QStringEncoder(const QString &name, Flags flags = Flag::Default)
+ : QStringEncoder(name.toLatin1().constData(), flags)
+ {}
-#if defined(Q_QDOC)
- QByteArray operator()(const QString &in);
- QByteArray operator()(QStringView in);
- QByteArray operator()(const QChar *in, qsizetype length);
- QByteArray encode(const QString &in);
- QByteArray encode(QStringView in);
- QByteArray encode(const QChar *in, qsizetype length);
-#else
template<typename T>
struct DecodedData
{
QStringEncoder *encoder;
T data;
- operator QByteArray() const { return encoder->encodeAsByteArray(QStringView(data)); }
+ operator QByteArray() const { return encoder->encodeAsByteArray(data); }
};
+ Q_WEAK_OVERLOAD
DecodedData<const QString &> operator()(const QString &str)
{ return DecodedData<const QString &>{this, str}; }
DecodedData<QStringView> operator()(QStringView in)
{ return DecodedData<QStringView>{this, in}; }
- DecodedData<QStringView> operator()(const QChar *in, qsizetype length)
- { return (*this)(QStringView(in, length)); }
+ Q_WEAK_OVERLOAD
DecodedData<const QString &> encode(const QString &str)
{ return DecodedData<const QString &>{this, str}; }
DecodedData<QStringView> encode(QStringView in)
{ return DecodedData<QStringView>{this, in}; }
- DecodedData<QStringView> encode(const QChar *in, qsizetype length)
- { return (*this)(QStringView(in, length)); }
-#endif
qsizetype requiredSpace(qsizetype inputLength) const
- { return iface->fromUtf16Len(inputLength); }
- char *appendToBuffer(char *out, const QChar *in, qsizetype length)
- { return iface->fromUtf16(out, QStringView(in, length), &state); }
+ { return iface ? iface->fromUtf16Len(inputLength) : 0; }
+ char *appendToBuffer(char *out, QStringView in)
+ {
+ if (!iface) {
+ state.invalidChars = 1;
+ return out;
+ }
+ return iface->fromUtf16(out, in, &state);
+ }
private:
QByteArray encodeAsByteArray(QStringView in)
{
+ if (!iface) {
+ // ensure that hasError returns true
+ state.invalidChars = 1;
+ return {};
+ }
QByteArray result(iface->fromUtf16Len(in.size()), Qt::Uninitialized);
char *out = result.data();
out = iface->fromUtf16(out, in, &state);
@@ -253,68 +84,67 @@ private:
class QStringDecoder : public QStringConverter
{
- struct View {
- const char *ch;
- qsizetype l;
- const char *data() const { return ch; }
- qsizetype length() const { return l; }
- };
-
protected:
- QSTRINGCONVERTER_CONSTEXPR QStringDecoder(const Interface *i)
+ constexpr explicit QStringDecoder(const Interface *i) noexcept
: QStringConverter(i)
{}
public:
- QSTRINGCONVERTER_CONSTEXPR QStringDecoder(Encoding encoding, Flags flags = Flag::Default)
+ constexpr explicit QStringDecoder(Encoding encoding, Flags flags = Flag::Default)
: QStringConverter(encoding, flags)
{}
- QSTRINGCONVERTER_CONSTEXPR QStringDecoder()
+ constexpr QStringDecoder() noexcept
: QStringConverter()
{}
- QStringDecoder(const char *name, Flags f = Flag::Default)
+ explicit QStringDecoder(const char *name, Flags f = Flag::Default)
: QStringConverter(name, f)
{}
+ Q_WEAK_OVERLOAD explicit QStringDecoder(const QString &name, Flags f = Flag::Default)
+ : QStringDecoder(name.toLatin1().constData(), f)
+ {}
-#if defined(Q_QDOC)
- QString operator()(const QByteArray &ba);
- QString operator()(const char *in, qsizetype size);
- QString operator()(const char *chars);
- QString decode(const QByteArray &ba);
- QString decode(const char *in, qsizetype size);
- QString decode(const char *chars);
-#else
template<typename T>
struct EncodedData
{
QStringDecoder *decoder;
T data;
- operator QString() const { return decoder->decodeAsString(data.data(), data.length()); }
+ operator QString() const { return decoder->decodeAsString(data); }
};
+ Q_WEAK_OVERLOAD
EncodedData<const QByteArray &> operator()(const QByteArray &ba)
{ return EncodedData<const QByteArray &>{this, ba}; }
- EncodedData<View> operator()(const char *in, qsizetype length)
- { return EncodedData<View>{this, {in, length}}; }
- EncodedData<View> operator()(const char *chars)
- { return EncodedData<View>{this, {chars, qsizetype(strlen(chars))}}; }
+ EncodedData<QByteArrayView> operator()(QByteArrayView ba)
+ { return EncodedData<QByteArrayView>{this, ba}; }
+ Q_WEAK_OVERLOAD
EncodedData<const QByteArray &> decode(const QByteArray &ba)
{ return EncodedData<const QByteArray &>{this, ba}; }
- EncodedData<View> decode(const char *in, qsizetype length)
- { return EncodedData<View>{this, {in, length}}; }
- EncodedData<View> decode(const char *chars)
- { return EncodedData<View>{this, {chars, qsizetype(strlen(chars))}}; }
-#endif
+ EncodedData<QByteArrayView> decode(QByteArrayView ba)
+ { return EncodedData<QByteArrayView>{this, ba}; }
qsizetype requiredSpace(qsizetype inputLength) const
- { return iface->toUtf16Len(inputLength); }
- QChar *appendToBuffer(QChar *out, const char *in, qsizetype length)
- { return iface->toUtf16(out, in, length, &state); }
+ { return iface ? iface->toUtf16Len(inputLength) : 0; }
+ QChar *appendToBuffer(QChar *out, QByteArrayView ba)
+ {
+ if (!iface) {
+ state.invalidChars = 1;
+ return out;
+ }
+ return iface->toUtf16(out, ba, &state);
+ }
+ char16_t *appendToBuffer(char16_t *out, QByteArrayView ba)
+ { return reinterpret_cast<char16_t *>(appendToBuffer(reinterpret_cast<QChar *>(out), ba)); }
+
+ Q_CORE_EXPORT static QStringDecoder decoderForHtml(QByteArrayView data);
+
private:
- QString decodeAsString(const char *in, qsizetype length)
+ QString decodeAsString(QByteArrayView in)
{
- QString result(iface->toUtf16Len(length), Qt::Uninitialized);
- QChar *out = result.data();
- // ### Fixme: state handling needs to be moved into the conversion methods
- out = iface->toUtf16(out, in, length, &state);
+ if (!iface) {
+ // ensure that hasError returns true
+ state.invalidChars = 1;
+ return {};
+ }
+ QString result(iface->toUtf16Len(in.size()), Qt::Uninitialized);
+ const QChar *out = iface->toUtf16(result.data(), in, &state);
result.truncate(out - result.constData());
return result;
}
@@ -329,10 +159,10 @@ struct QConcatenable<QStringDecoder::EncodedData<T>>
typedef QChar type;
typedef QString ConvertTo;
enum { ExactSize = false };
- static qsizetype size(const QStringDecoder::EncodedData<T> &s) { return s.decoder->requiredSpace(s.data.length()); }
+ static qsizetype size(const QStringDecoder::EncodedData<T> &s) { return s.decoder->requiredSpace(s.data.size()); }
static inline void appendTo(const QStringDecoder::EncodedData<T> &s, QChar *&out)
{
- out = s.decoder->appendToBuffer(out, s.data.data(), s.data.length());
+ out = s.decoder->appendToBuffer(out, s.data);
}
};
@@ -343,10 +173,10 @@ struct QConcatenable<QStringEncoder::DecodedData<T>>
typedef char type;
typedef QByteArray ConvertTo;
enum { ExactSize = false };
- static qsizetype size(const QStringEncoder::DecodedData<T> &s) { return s.encoder->requiredSpace(s.data.length()); }
+ static qsizetype size(const QStringEncoder::DecodedData<T> &s) { return s.encoder->requiredSpace(s.data.size()); }
static inline void appendTo(const QStringEncoder::DecodedData<T> &s, char *&out)
{
- out = s.encoder->appendToBuffer(out, s.data.data(), s.data.length());
+ out = s.encoder->appendToBuffer(out, s.data);
}
};
@@ -373,8 +203,66 @@ QByteArray &operator+=(QByteArray &a, const QStringEncoder::DecodedData<T> &b)
}
#endif
-QT_END_NAMESPACE
+template <typename InputIterator>
+void QString::assign_helper_char8(InputIterator first, InputIterator last)
+{
+ static_assert(!QString::is_contiguous_iterator_v<InputIterator>,
+ "Internal error: Should have been handed over to the QAnyStringView overload."
+ );
+
+ using ValueType = typename std::iterator_traits<InputIterator>::value_type;
+ constexpr bool IsFwdIt = std::is_convertible_v<
+ typename std::iterator_traits<InputIterator>::iterator_category,
+ std::forward_iterator_tag
+ >;
+
+ resize(0);
+ // In case of not being shared, there is the possibility of having free space at begin
+ // even after the resize to zero.
+ if (const auto offset = d.freeSpaceAtBegin())
+ d.setBegin(d.begin() - offset);
+
+ if constexpr (IsFwdIt)
+ reserve(static_cast<qsizetype>(std::distance(first, last)));
+
+ auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
+ auto availableCapacity = d.constAllocatedCapacity();
+ auto *dst = d.data();
+ auto *dend = d.data() + availableCapacity;
+
+ while (true) {
+ if (first == last) { // ran out of input elements
+ Q_ASSERT(!std::less<>{}(dend, dst));
+ d.size = dst - d.begin();
+ return;
+ }
+ const ValueType next = *first; // decays proxies, if any
+ const auto chunk = QUtf8StringView(&next, 1);
+ // UTF-8 characters can have a maximum size of 4 bytes and may result in a surrogate
+ // pair of UTF-16 code units. In the input-iterator case, we don't know the size
+ // and would need to always reserve space for 2 code units. To keep our promise
+ // of 'not allocating if it fits', we have to pre-check this condition.
+ // We know that it fits in the forward-iterator case.
+ if constexpr (!IsFwdIt) {
+ constexpr qsizetype Pair = 2;
+ char16_t buf[Pair];
+ const qptrdiff n = toUtf16.appendToBuffer(buf, chunk) - buf;
+ if (dend - dst < n) { // ran out of allocated memory
+ const auto offset = dst - d.begin();
+ reallocData(d.constAllocatedCapacity() + Pair, QArrayData::Grow);
+ // update the pointers since we've re-allocated
+ availableCapacity = d.constAllocatedCapacity();
+ dst = d.data() + offset;
+ dend = d.data() + availableCapacity;
+ }
+ dst = std::copy_n(buf, n, dst);
+ } else { // take the fast path
+ dst = toUtf16.appendToBuffer(dst, chunk);
+ }
+ ++first;
+ }
+}
-#undef QSTRINGCONVERTER_CONSTEXPR
+QT_END_NAMESPACE
#endif
diff --git a/src/corelib/text/qstringconverter_base.h b/src/corelib/text/qstringconverter_base.h
new file mode 100644
index 0000000000..d6b6fcb484
--- /dev/null
+++ b/src/corelib/text/qstringconverter_base.h
@@ -0,0 +1,176 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QSTRINGCONVERTER_BASE_H
+#define QSTRINGCONVERTER_BASE_H
+
+#if 0
+// QStringConverter(Base) class are handled in qstringconverter
+#pragma qt_sync_stop_processing
+#endif
+
+#include <optional>
+
+#include <QtCore/qglobal.h> // QT_{BEGIN,END}_NAMESPACE
+#include <QtCore/qflags.h> // Q_DECLARE_FLAGS
+#include <QtCore/qcontainerfwd.h>
+
+#include <cstring>
+
+QT_BEGIN_NAMESPACE
+
+class QByteArrayView;
+class QChar;
+class QByteArrayView;
+class QStringView;
+
+class QStringConverterBase
+{
+public:
+ enum class Flag {
+ Default = 0,
+ Stateless = 0x1,
+ ConvertInvalidToNull = 0x2,
+ WriteBom = 0x4,
+ ConvertInitialBom = 0x8,
+ UsesIcu = 0x10,
+ };
+ Q_DECLARE_FLAGS(Flags, Flag)
+
+ struct State {
+ constexpr State(Flags f = Flag::Default) noexcept
+ : flags(f), state_data{0, 0, 0, 0} {}
+ ~State() { clear(); }
+
+ State(State &&other) noexcept
+ : flags(other.flags),
+ remainingChars(other.remainingChars),
+ invalidChars(other.invalidChars),
+ state_data{other.state_data[0], other.state_data[1],
+ other.state_data[2], other.state_data[3]},
+ clearFn(other.clearFn)
+ { other.clearFn = nullptr; }
+ State &operator=(State &&other) noexcept
+ {
+ clear();
+ flags = other.flags;
+ remainingChars = other.remainingChars;
+ invalidChars = other.invalidChars;
+ std::memmove(state_data, other.state_data, sizeof state_data); // self-assignment-safe
+ clearFn = other.clearFn;
+ other.clearFn = nullptr;
+ return *this;
+ }
+ Q_CORE_EXPORT void clear() noexcept;
+ Q_CORE_EXPORT void reset() noexcept;
+
+ Flags flags;
+ int internalState = 0;
+ qsizetype remainingChars = 0;
+ qsizetype invalidChars = 0;
+
+ union {
+ uint state_data[4];
+ void *d[2];
+ };
+ using ClearDataFn = void (*)(State *) noexcept;
+ ClearDataFn clearFn = nullptr;
+ private:
+ Q_DISABLE_COPY(State)
+ };
+protected:
+ ~QStringConverterBase() = default;
+};
+Q_DECLARE_OPERATORS_FOR_FLAGS(QStringConverterBase::Flags)
+
+class QStringConverter : public QStringConverterBase
+{
+public:
+
+ enum Encoding {
+ Utf8,
+#ifndef QT_BOOTSTRAPPED
+ Utf16,
+ Utf16LE,
+ Utf16BE,
+ Utf32,
+ Utf32LE,
+ Utf32BE,
+#endif
+ Latin1,
+ System,
+ LastEncoding = System
+ };
+#ifdef Q_QDOC
+ // document the flags here
+ enum class Flag {
+ Default = 0,
+ Stateless = 0x1,
+ ConvertInvalidToNull = 0x2,
+ WriteBom = 0x4,
+ ConvertInitialBom = 0x8,
+ UsesIcu = 0x10,
+ };
+ Q_DECLARE_FLAGS(Flags, Flag)
+#endif
+
+protected:
+
+ struct Interface
+ {
+ using DecoderFn = QChar * (*)(QChar *out, QByteArrayView in, State *state);
+ using LengthFn = qsizetype (*)(qsizetype inLength);
+ using EncoderFn = char * (*)(char *out, QStringView in, State *state);
+ const char *name = nullptr;
+ DecoderFn toUtf16 = nullptr;
+ LengthFn toUtf16Len = nullptr;
+ EncoderFn fromUtf16 = nullptr;
+ LengthFn fromUtf16Len = nullptr;
+ };
+
+ constexpr QStringConverter() noexcept
+ : iface(nullptr)
+ {}
+ constexpr explicit QStringConverter(Encoding encoding, Flags f)
+ : iface(&encodingInterfaces[qsizetype(encoding)]), state(f)
+ {}
+ constexpr explicit QStringConverter(const Interface *i) noexcept
+ : iface(i)
+ {}
+ Q_CORE_EXPORT explicit QStringConverter(const char *name, Flags f);
+
+
+ ~QStringConverter() = default;
+
+public:
+ QStringConverter(QStringConverter &&) = default;
+ QStringConverter &operator=(QStringConverter &&) = default;
+
+ bool isValid() const noexcept { return iface != nullptr; }
+
+ void resetState() noexcept
+ {
+ state.reset();
+ }
+ bool hasError() const noexcept { return state.invalidChars != 0; }
+
+ Q_CORE_EXPORT const char *name() const noexcept;
+
+ Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name) noexcept;
+ Q_CORE_EXPORT static const char *nameForEncoding(Encoding e);
+ Q_CORE_EXPORT static std::optional<Encoding>
+ encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0) noexcept;
+ Q_CORE_EXPORT static std::optional<Encoding> encodingForHtml(QByteArrayView data);
+
+ Q_CORE_EXPORT static QStringList availableCodecs();
+
+protected:
+ const Interface *iface;
+ State state;
+private:
+ Q_CORE_EXPORT static const Interface encodingInterfaces[Encoding::LastEncoding + 1];
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/corelib/text/qstringconverter_p.h b/src/corelib/text/qstringconverter_p.h
index 2130bea6e8..e68ffb2bb0 100644
--- a/src/corelib/text/qstringconverter_p.h
+++ b/src/corelib/text/qstringconverter_p.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGCONVERTER_P_H
#define QSTRINGCONVERTER_P_H
@@ -55,13 +19,42 @@
#include <QtCore/qstring.h>
#include <QtCore/qendian.h>
#include <QtCore/qstringconverter.h>
+#include <QtCore/private/qglobal_p.h>
QT_BEGIN_NAMESPACE
#ifndef __cpp_char8_t
-enum char8_t : uchar {};
+enum qchar8_t : uchar {};
+#else
+using qchar8_t = char8_t;
#endif
+struct QLatin1
+{
+ // Defined in qstring.cpp
+ static char16_t *convertToUnicode(char16_t *dst, QLatin1StringView in) noexcept;
+
+ static QChar *convertToUnicode(QChar *buffer, QLatin1StringView in) noexcept
+ {
+ char16_t *dst = reinterpret_cast<char16_t *>(buffer);
+ dst = convertToUnicode(dst, in);
+ return reinterpret_cast<QChar *>(dst);
+ }
+
+ static QChar *convertToUnicode(QChar *dst, QByteArrayView in,
+ [[maybe_unused]] QStringConverterBase::State *state) noexcept
+ {
+ Q_ASSERT(state);
+
+ return convertToUnicode(dst, QLatin1StringView(in.data(), in.size()));
+ }
+
+ static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept;
+
+ // Defined in qstring.cpp
+ static char *convertFromUnicode(char *out, QStringView in) noexcept;
+};
+
struct QUtf8BaseTraits
{
static const bool isTrusted = false;
@@ -70,81 +63,60 @@ struct QUtf8BaseTraits
static const int Error = -1;
static const int EndOfString = -2;
- static bool isValidCharacter(uint u)
- { return int(u) >= 0; }
-
static void appendByte(uchar *&ptr, uchar b)
{ *ptr++ = b; }
- static void appendByte(char8_t *&ptr, char8_t b)
+ static void appendByte(qchar8_t *&ptr, qchar8_t b)
{ *ptr++ = b; }
+ static uchar peekByte(const char *ptr, qsizetype n = 0)
+ { return ptr[n]; }
+
static uchar peekByte(const uchar *ptr, qsizetype n = 0)
{ return ptr[n]; }
- static uchar peekByte(const char8_t *ptr, int n = 0)
+ static uchar peekByte(const qchar8_t *ptr, qsizetype n = 0)
{ return ptr[n]; }
+ static qptrdiff availableBytes(const char *ptr, const char *end)
+ { return end - ptr; }
+
static qptrdiff availableBytes(const uchar *ptr, const uchar *end)
{ return end - ptr; }
- static qptrdiff availableBytes(const char8_t *ptr, const char8_t *end)
+ static qptrdiff availableBytes(const qchar8_t *ptr, const qchar8_t *end)
{ return end - ptr; }
- static void advanceByte(const uchar *&ptr, qsizetype n = 1)
+ static void advanceByte(const char *&ptr, qsizetype n = 1)
{ ptr += n; }
- static void advanceByte(const char8_t *&ptr, int n = 1)
+ static void advanceByte(const uchar *&ptr, qsizetype n = 1)
{ ptr += n; }
- static void appendUtf16(ushort *&ptr, ushort uc)
- { *ptr++ = uc; }
+ static void advanceByte(const qchar8_t *&ptr, qsizetype n = 1)
+ { ptr += n; }
- static void appendUtf16(char16_t *&ptr, ushort uc)
+ static void appendUtf16(char16_t *&ptr, char16_t uc)
{ *ptr++ = char16_t(uc); }
- static void appendUcs4(ushort *&ptr, uint uc)
- {
- appendUtf16(ptr, QChar::highSurrogate(uc));
- appendUtf16(ptr, QChar::lowSurrogate(uc));
- }
-
static void appendUcs4(char16_t *&ptr, char32_t uc)
{
appendUtf16(ptr, QChar::highSurrogate(uc));
appendUtf16(ptr, QChar::lowSurrogate(uc));
}
- static ushort peekUtf16(const ushort *ptr, qsizetype n = 0)
- { return ptr[n]; }
-
- static ushort peekUtf16(const char16_t *ptr, int n = 0)
- { return ptr[n]; }
-
- static qptrdiff availableUtf16(const ushort *ptr, const ushort *end)
- { return end - ptr; }
+ static char16_t peekUtf16(const char16_t *ptr, qsizetype n = 0) { return ptr[n]; }
static qptrdiff availableUtf16(const char16_t *ptr, const char16_t *end)
{ return end - ptr; }
- static void advanceUtf16(const ushort *&ptr, qsizetype n = 1)
- { ptr += n; }
-
- static void advanceUtf16(const char16_t *&ptr, int n = 1)
- { ptr += n; }
-
- // it's possible to output to UCS-4 too
- static void appendUtf16(uint *&ptr, ushort uc)
- { *ptr++ = uc; }
+ static void advanceUtf16(const char16_t *&ptr, qsizetype n = 1) { ptr += n; }
- static void appendUtf16(char32_t *&ptr, ushort uc)
+ static void appendUtf16(char32_t *&ptr, char16_t uc)
{ *ptr++ = char32_t(uc); }
- static void appendUcs4(uint *&ptr, uint uc)
+ static void appendUcs4(char32_t *&ptr, char32_t uc)
{ *ptr++ = uc; }
-
- static void appendUcs4(char32_t *&ptr, uint uc)
- { *ptr++ = char32_t(uc); }
};
struct QUtf8BaseTraitsNoAscii : public QUtf8BaseTraits
@@ -159,7 +131,7 @@ namespace QUtf8Functions
/// if \a u is a high surrogate, Error if the next isn't a low one,
/// EndOfString if we run into the end of the string.
template <typename Traits, typename OutputPtr, typename InputPtr> inline
- int toUtf8(ushort u, OutputPtr &dst, InputPtr &src, InputPtr end)
+ int toUtf8(char16_t u, OutputPtr &dst, InputPtr &src, InputPtr end)
{
if (!Traits::skipAsciiHandling && u < 0x80) {
// U+0000 to U+007F (US-ASCII) - one byte
@@ -183,14 +155,14 @@ namespace QUtf8Functions
if (Traits::availableUtf16(src, end) == 0)
return Traits::EndOfString;
- ushort low = Traits::peekUtf16(src);
+ char16_t low = Traits::peekUtf16(src);
if (!QChar::isHighSurrogate(u))
return Traits::Error;
if (!QChar::isLowSurrogate(low))
return Traits::Error;
Traits::advanceUtf16(src);
- uint ucs4 = QChar::surrogateToUcs4(u, low);
+ char32_t ucs4 = QChar::surrogateToUcs4(u, low);
if (!Traits::allowNonCharacters && QChar::isNonCharacter(ucs4))
return Traits::Error;
@@ -202,7 +174,7 @@ namespace QUtf8Functions
Traits::appendByte(dst, 0x80 | (uchar(ucs4 >> 12) & 0x3f));
// for the rest of the bytes
- u = ushort(ucs4);
+ u = char16_t(ucs4);
}
// second to last byte
@@ -225,8 +197,8 @@ namespace QUtf8Functions
qsizetype fromUtf8(uchar b, OutputPtr &dst, InputPtr &src, InputPtr end)
{
qsizetype charsNeeded;
- uint min_uc;
- uint uc;
+ char32_t min_uc;
+ char32_t uc;
if (!Traits::skipAsciiHandling && b < 0x80) {
// US-ASCII
@@ -306,7 +278,7 @@ namespace QUtf8Functions
if (!QChar::requiresSurrogates(uc)) {
// UTF-8 decoded and no surrogates are required
// detach if necessary
- Traits::appendUtf16(dst, ushort(uc));
+ Traits::appendUtf16(dst, char16_t(uc));
} else {
// UTF-8 decoded to something that requires a surrogate pair
Traits::appendUcs4(dst, uc);
@@ -326,48 +298,95 @@ enum DataEndianness
struct QUtf8
{
- Q_CORE_EXPORT static QChar *convertToUnicode(QChar *, const char *, qsizetype) noexcept;
- static QString convertToUnicode(const char *, qsizetype);
- Q_CORE_EXPORT static QString convertToUnicode(const char *, qsizetype, QStringConverter::State *);
- static QChar *convertToUnicode(QChar *out, const char *in, qsizetype length, QStringConverter::State *state);
- Q_CORE_EXPORT static QByteArray convertFromUnicode(const QChar *, qsizetype);
- Q_CORE_EXPORT static QByteArray convertFromUnicode(const QChar *, qsizetype, QStringConverter::State *);
+ static QChar *convertToUnicode(QChar *buffer, QByteArrayView in) noexcept
+ {
+ char16_t *dst = reinterpret_cast<char16_t *>(buffer);
+ dst = QUtf8::convertToUnicode(dst, in);
+ return reinterpret_cast<QChar *>(dst);
+ }
+
+ Q_CORE_EXPORT static char16_t* convertToUnicode(char16_t *dst, QByteArrayView in) noexcept;
+ static QString convertToUnicode(QByteArrayView in);
+ Q_CORE_EXPORT static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state);
+
+ static QChar *convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state)
+ {
+ char16_t *buffer = reinterpret_cast<char16_t *>(out);
+ buffer = convertToUnicode(buffer, in, state);
+ return reinterpret_cast<QChar *>(buffer);
+ }
+
+ static char16_t *convertToUnicode(char16_t *dst, QByteArrayView in, QStringConverter::State *state);
+
+ Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView in);
+ Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView in, QStringConverterBase::State *state);
static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state);
+ Q_CORE_EXPORT static char *convertFromLatin1(char *out, QLatin1StringView in);
struct ValidUtf8Result {
bool isValidUtf8;
bool isValidAscii;
};
- static ValidUtf8Result isValidUtf8(const char *, qsizetype);
- static int compareUtf8(const char *, qsizetype, const QChar *, qsizetype) noexcept;
- static int compareUtf8(const char *, qsizetype, QLatin1String s);
+ static ValidUtf8Result isValidUtf8(QByteArrayView in);
+ static int compareUtf8(QByteArrayView utf8, QStringView utf16,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
+ static int compareUtf8(QByteArrayView utf8, QLatin1StringView s,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ static int compareUtf8(QByteArrayView lhs, QByteArrayView rhs,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
};
struct QUtf16
{
- Q_CORE_EXPORT static QString convertToUnicode(const char *, qsizetype, QStringConverter::State *, DataEndianness = DetectEndianness);
- static QChar *convertToUnicode(QChar *out, const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian);
- Q_CORE_EXPORT static QByteArray convertFromUnicode(const QChar *, qsizetype, QStringConverter::State *, DataEndianness = DetectEndianness);
+ Q_CORE_EXPORT static QString convertToUnicode(QByteArrayView, QStringConverter::State *, DataEndianness = DetectEndianness);
+ static QChar *convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian);
+ Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView, QStringConverter::State *, DataEndianness = DetectEndianness);
static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian);
};
struct QUtf32
{
- static QChar *convertToUnicode(QChar *out, const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian);
- Q_CORE_EXPORT static QString convertToUnicode(const char *, qsizetype, QStringConverter::State *, DataEndianness = DetectEndianness);
- Q_CORE_EXPORT static QByteArray convertFromUnicode(const QChar *, qsizetype, QStringConverter::State *, DataEndianness = DetectEndianness);
+ static QChar *convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian);
+ Q_CORE_EXPORT static QString convertToUnicode(QByteArrayView, QStringConverter::State *, DataEndianness = DetectEndianness);
+ Q_CORE_EXPORT static QByteArray convertFromUnicode(QStringView, QStringConverter::State *, DataEndianness = DetectEndianness);
static char *convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian);
};
struct Q_CORE_EXPORT QLocal8Bit
{
#if !defined(Q_OS_WIN) || defined(QT_BOOTSTRAPPED)
- static QString convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state)
- { return QUtf8::convertToUnicode(chars, len, state); }
- static QByteArray convertFromUnicode(const QChar *chars, qsizetype len, QStringConverter::State *state)
- { return QUtf8::convertFromUnicode(chars, len, state); }
+ static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state)
+ { return QUtf8::convertToUnicode(in, state); }
+ static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state)
+ { return QUtf8::convertFromUnicode(in, state); }
#else
- static QString convertToUnicode(const char *, qsizetype, QStringConverter::State *);
- static QByteArray convertFromUnicode(const QChar *, qsizetype, QStringConverter::State *);
+ static int checkUtf8();
+ static bool isUtf8()
+ {
+ Q_CONSTINIT
+ static QBasicAtomicInteger<qint8> result = { 0 };
+ int r = result.loadRelaxed();
+ if (r == 0) {
+ r = checkUtf8();
+ result.storeRelaxed(r);
+ }
+ return r > 0;
+ }
+ static QString convertToUnicode_sys(QByteArrayView, quint32, QStringConverter::State *);
+ static QString convertToUnicode_sys(QByteArrayView, QStringConverter::State *);
+ static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state)
+ {
+ if (isUtf8())
+ return QUtf8::convertToUnicode(in, state);
+ return convertToUnicode_sys(in, state);
+ }
+ static QByteArray convertFromUnicode_sys(QStringView, quint32, QStringConverter::State *);
+ static QByteArray convertFromUnicode_sys(QStringView, QStringConverter::State *);
+ static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state)
+ {
+ if (isUtf8())
+ return QUtf8::convertFromUnicode(in, state);
+ return convertFromUnicode_sys(in, state);
+ }
#endif
};
diff --git a/src/corelib/text/qstringfwd.h b/src/corelib/text/qstringfwd.h
new file mode 100644
index 0000000000..2e3c9e8248
--- /dev/null
+++ b/src/corelib/text/qstringfwd.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include <QtCore/qglobal.h>
+
+#ifndef QSTRINGFWD_H
+#define QSTRINGFWD_H
+
+QT_BEGIN_NAMESPACE
+
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
+# define QT_BEGIN_HAS_CHAR8_T_NAMESPACE inline namespace q_has_char8_t {
+# define QT_BEGIN_NO_CHAR8_T_NAMESPACE namespace q_no_char8_t {
+#else
+# define QT_BEGIN_HAS_CHAR8_T_NAMESPACE namespace q_has_char8_t {
+# define QT_BEGIN_NO_CHAR8_T_NAMESPACE inline namespace q_no_char8_t {
+#endif
+#define QT_END_HAS_CHAR8_T_NAMESPACE }
+#define QT_END_NO_CHAR8_T_NAMESPACE }
+
+// declare namespaces:
+QT_BEGIN_HAS_CHAR8_T_NAMESPACE
+QT_END_HAS_CHAR8_T_NAMESPACE
+QT_BEGIN_NO_CHAR8_T_NAMESPACE
+QT_END_NO_CHAR8_T_NAMESPACE
+
+class QByteArray;
+class QByteArrayView;
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED) || defined(Q_QDOC)
+class QLatin1StringView;
+using QLatin1String = QLatin1StringView;
+#else
+class QLatin1String;
+using QLatin1StringView = QLatin1String;
+#endif
+class QStringView;
+template <bool> class QBasicUtf8StringView;
+class QAnyStringView;
+class QChar;
+class QRegularExpression;
+class QRegularExpressionMatch;
+
+#ifndef Q_QDOC
+// ### Qt 7: remove the non-char8_t version of QUtf8StringView
+QT_BEGIN_NO_CHAR8_T_NAMESPACE
+using QUtf8StringView = QBasicUtf8StringView<false>;
+QT_END_NO_CHAR8_T_NAMESPACE
+
+QT_BEGIN_HAS_CHAR8_T_NAMESPACE
+using QUtf8StringView = QBasicUtf8StringView<true>;
+QT_END_HAS_CHAR8_T_NAMESPACE
+#endif // Q_QDOC
+
+QT_END_NAMESPACE
+
+#endif // QSTRINGFWD_H
diff --git a/src/corelib/text/qstringiterator.qdoc b/src/corelib/text/qstringiterator.qdoc
index 9be610161f..9b1e43163e 100644
--- a/src/corelib/text/qstringiterator.qdoc
+++ b/src/corelib/text/qstringiterator.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QStringIterator
diff --git a/src/corelib/text/qstringiterator_p.h b/src/corelib/text/qstringiterator_p.h
index 0ee5eb0e53..bb1a861637 100644
--- a/src/corelib/text/qstringiterator_p.h
+++ b/src/corelib/text/qstringiterator_p.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGITERATOR_H
#define QSTRINGITERATOR_H
@@ -61,6 +25,8 @@ class QStringIterator
{
QString::const_iterator i, pos, e;
static_assert((std::is_same<QString::const_iterator, const QChar *>::value));
+ static bool less(const QChar *lhs, const QChar *rhs) noexcept
+ { return std::less{}(lhs, rhs); }
public:
explicit QStringIterator(QStringView string, qsizetype idx = 0)
: i(string.begin()),
@@ -76,7 +42,7 @@ public:
{
}
- inline explicit QStringIterator(const QChar *begin, int idx, const QChar *end)
+ explicit QStringIterator(const QChar *begin, qsizetype idx, const QChar *end)
: i(begin),
pos(begin + idx),
e(end)
@@ -88,14 +54,15 @@ public:
return pos;
}
- inline int index() const
+ qsizetype index() const
{
- return int(pos - i);
+ return pos - i;
}
inline void setPosition(QString::const_iterator position)
{
- Q_ASSERT_X(i <= position && position <= e, Q_FUNC_INFO, "position out of bounds");
+ Q_ASSERT_X(!less(position, i) && !less(e, position),
+ Q_FUNC_INFO, "position out of bounds");
pos = position;
}
@@ -103,7 +70,7 @@ public:
inline bool hasNext() const
{
- return pos < e;
+ return less(pos, e);
}
inline void advance()
@@ -120,16 +87,20 @@ public:
{
Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item");
- if (Q_UNLIKELY((pos++)->isHighSurrogate()))
+ if (Q_UNLIKELY((pos++)->isHighSurrogate())) {
+ Q_ASSERT(hasNext() && pos->isLowSurrogate());
++pos;
+ }
}
inline char32_t peekNextUnchecked() const
{
Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item");
- if (Q_UNLIKELY(pos->isHighSurrogate()))
+ if (Q_UNLIKELY(pos->isHighSurrogate())) {
+ Q_ASSERT(less(pos + 1, e) && pos[1].isLowSurrogate());
return QChar::surrogateToUcs4(pos[0], pos[1]);
+ }
return pos->unicode();
}
@@ -155,8 +126,10 @@ public:
Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item");
const QChar cur = *pos++;
- if (Q_UNLIKELY(cur.isHighSurrogate()))
+ if (Q_UNLIKELY(cur.isHighSurrogate())) {
+ Q_ASSERT(hasNext() && pos->isLowSurrogate());
return QChar::surrogateToUcs4(cur, *pos++);
+ }
return cur.unicode();
}
@@ -166,7 +139,7 @@ public:
const QChar uc = *pos++;
if (Q_UNLIKELY(uc.isSurrogate())) {
- if (Q_LIKELY(uc.isHighSurrogate() && pos < e && pos->isLowSurrogate()))
+ if (Q_LIKELY(uc.isHighSurrogate() && hasNext() && pos->isLowSurrogate()))
return QChar::surrogateToUcs4(uc, *pos++);
return invalidAs;
}
@@ -178,7 +151,7 @@ public:
inline bool hasPrevious() const
{
- return pos > i;
+ return less(i, pos);
}
inline void recede()
@@ -196,16 +169,20 @@ public:
{
Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item");
- if (Q_UNLIKELY((--pos)->isLowSurrogate()))
+ if (Q_UNLIKELY((--pos)->isLowSurrogate())) {
+ Q_ASSERT(hasPrevious() && pos[-1].isHighSurrogate());
--pos;
+ }
}
inline char32_t peekPreviousUnchecked() const
{
Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item");
- if (Q_UNLIKELY(pos[-1].isLowSurrogate()))
+ if (Q_UNLIKELY(pos[-1].isLowSurrogate())) {
+ Q_ASSERT(less(i + 1, pos) && pos[-2].isHighSurrogate());
return QChar::surrogateToUcs4(pos[-2], pos[-1]);
+ }
return pos[-1].unicode();
}
@@ -230,8 +207,10 @@ public:
Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item");
const QChar cur = *--pos;
- if (Q_UNLIKELY(cur.isLowSurrogate()))
+ if (Q_UNLIKELY(cur.isLowSurrogate())) {
+ Q_ASSERT(hasPrevious() && pos[-1].isHighSurrogate());
return QChar::surrogateToUcs4(*--pos, cur);
+ }
return cur.unicode();
}
@@ -241,7 +220,7 @@ public:
const QChar uc = *--pos;
if (Q_UNLIKELY(uc.isSurrogate())) {
- if (Q_LIKELY(uc.isLowSurrogate() && pos > i && pos[-1].isHighSurrogate()))
+ if (Q_LIKELY(uc.isLowSurrogate() && hasPrevious() && pos[-1].isHighSurrogate()))
return QChar::surrogateToUcs4(*--pos, uc);
return invalidAs;
}
diff --git a/src/corelib/text/qstringlist.cpp b/src/corelib/text/qstringlist.cpp
index 233f765355..61923e0b3f 100644
--- a/src/corelib/text/qstringlist.cpp
+++ b/src/corelib/text/qstringlist.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <qstringlist.h>
#include <qset.h>
@@ -108,7 +72,7 @@ QT_BEGIN_NAMESPACE
\section1 Adding Strings
Strings can be added to a list using the \l
- {QList::insert()}{insert()} \l
+ {QList::insert()}{insert()}, \l
{QList::append()}{append()}, \l
{QList::operator+=()}{operator+=()} and \l
{operator<<()} functions.
@@ -120,25 +84,7 @@ QT_BEGIN_NAMESPACE
\section1 Iterating Over the Strings
- To iterate over a list, you can either use index positions or
- QList's Java-style and STL-style iterator types:
-
- Indexing:
-
- \snippet qstringlist/main.cpp 1
-
- Java-style iterator:
-
- \snippet qstringlist/main.cpp 2
-
- STL-style iterator:
-
- \snippet qstringlist/main.cpp 3
-
- The QStringListIterator class is simply a type definition for
- QListIterator<QString>. QStringList also provide the
- QMutableStringListIterator class which is a type definition for
- QMutableListIterator<QString>.
+ See \l {Iterating over Containers}.
\section1 Manipulating the Strings
@@ -243,8 +189,11 @@ QT_BEGIN_NAMESPACE
\fn void QStringList::sort(Qt::CaseSensitivity cs)
Sorts the list of strings in ascending order.
+
+//! [comparison-case-sensitivity]
If \a cs is \l Qt::CaseSensitive (the default), the string comparison
is case sensitive; otherwise the comparison is case insensitive.
+//! [comparison-case-sensitivity]
Sorting is performed using the STL's std::sort() algorithm,
which averages \l{linear-logarithmic time}, i.e. O(\e{n} log \e{n}).
@@ -257,34 +206,25 @@ QT_BEGIN_NAMESPACE
integer index.
*/
-namespace {
-struct CaseInsensitiveLessThan {
- typedef bool result_type;
- result_type operator()(const QString &s1, const QString &s2) const
- {
- return s1.compare(s2, Qt::CaseInsensitive) < 0;
- }
-};
-}
-
void QtPrivate::QStringList_sort(QStringList *that, Qt::CaseSensitivity cs)
{
- if (cs == Qt::CaseSensitive)
+ if (cs == Qt::CaseSensitive) {
std::sort(that->begin(), that->end());
- else
- std::sort(that->begin(), that->end(), CaseInsensitiveLessThan());
+ } else {
+ auto CISCompare = [](const auto &s1, const auto &s2) {
+ return s1.compare(s2, Qt::CaseInsensitive) < 0;
+ };
+ std::sort(that->begin(), that->end(), CISCompare);
+ }
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\fn QStringList QStringList::filter(const QString &str, Qt::CaseSensitivity cs) const
Returns a list of all the strings containing the substring \a str.
- If \a cs is \l Qt::CaseSensitive (the default), the string
- comparison is case sensitive; otherwise the comparison is case
- insensitive.
+ \include qstringlist.cpp comparison-case-sensitivity
\snippet qstringlist/main.cpp 5
\snippet qstringlist/main.cpp 10
@@ -296,7 +236,17 @@ void QtPrivate::QStringList_sort(QStringList *that, Qt::CaseSensitivity cs)
\sa contains()
*/
-#endif
+
+template <typename String>
+static QStringList filter_helper(const QStringList &that, const String &needle, Qt::CaseSensitivity cs)
+{
+ QStringList res;
+ for (const auto &s : that) {
+ if (s.contains(needle, cs))
+ res.append(s);
+ }
+ return res;
+}
/*!
\fn QStringList QStringList::filter(QStringView str, Qt::CaseSensitivity cs) const
@@ -306,14 +256,48 @@ void QtPrivate::QStringList_sort(QStringList *that, Qt::CaseSensitivity cs)
QStringList QtPrivate::QStringList_filter(const QStringList *that, QStringView str,
Qt::CaseSensitivity cs)
{
- QStringMatcher matcher(str, cs);
+ return filter_helper(*that, str, cs);
+}
+
+/*!
+ \fn QStringList QStringList::filter(const QStringMatcher &matcher) const
+ \since 6.7
+ \overload
+
+ Returns a list of all the strings matched by \a matcher (i.e. for which
+ \c matcher.indexIn() returns an index >= 0).
+
+ Using a QStringMatcher may be faster when searching in large lists and/or
+ in lists with long strings (the best way to find out is benchmarking).
+
+ For example:
+ \snippet qstringlist/main.cpp 18
+
+ \sa contains()
+*/
+
+QStringList QtPrivate::QStringList_filter(const QStringList &that, const QStringMatcher &matcher)
+{
QStringList res;
- for (qsizetype i = 0; i < that->size(); ++i)
- if (matcher.indexIn(that->at(i)) != -1)
- res << that->at(i);
+ for (const auto &s : that) {
+ if (matcher.indexIn(s) != -1)
+ res.append(s);
+ }
return res;
}
+/*!
+ \fn QStringList QStringList::filter(QLatin1StringView str, Qt::CaseSensitivity cs) const
+ \since 6.7
+ \overload
+*/
+
+QStringList QtPrivate::QStringList_filter(const QStringList &that, QLatin1StringView needle,
+ Qt::CaseSensitivity cs)
+{
+ return filter_helper(that, needle, cs);
+}
+
template<typename T>
static bool stringList_contains(const QStringList &stringList, const T &str, Qt::CaseSensitivity cs)
{
@@ -325,17 +309,16 @@ static bool stringList_contains(const QStringList &stringList, const T &str, Qt:
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\fn bool QStringList::contains(const QString &str, Qt::CaseSensitivity cs) const
Returns \c true if the list contains the string \a str; otherwise
- returns \c false. The search is case insensitive if \a cs is
- Qt::CaseInsensitive; the search is case sensitive by default.
+ returns \c false.
+
+ \include qstringlist.cpp comparison-case-sensitivity
\sa indexOf(), lastIndexOf(), QString::contains()
*/
-#endif
/*!
\fn bool QStringList::contains(QStringView str, Qt::CaseSensitivity cs) const
@@ -343,8 +326,9 @@ static bool stringList_contains(const QStringList &stringList, const T &str, Qt:
\since 5.12
Returns \c true if the list contains the string \a str; otherwise
- returns \c false. The search is case insensitive if \a cs is
- Qt::CaseInsensitive; the search is case sensitive by default.
+ returns \c false.
+
+ \include qstringlist.cpp comparison-case-sensitivity
*/
bool QtPrivate::QStringList_contains(const QStringList *that, QStringView str,
Qt::CaseSensitivity cs)
@@ -353,71 +337,23 @@ bool QtPrivate::QStringList_contains(const QStringList *that, QStringView str,
}
/*!
- \fn bool QStringList::contains(QLatin1String str, Qt::CaseSensitivity cs) const
+ \fn bool QStringList::contains(QLatin1StringView str, Qt::CaseSensitivity cs) const
\overload
\since 5.10
- Returns \c true if the list contains the string \a str; otherwise
- returns \c false. The search is case insensitive if \a cs is
- Qt::CaseInsensitive; the search is case sensitive by default.
+ Returns \c true if the list contains the Latin-1 string viewed by \a str; otherwise
+ returns \c false.
+
+ \include qstringlist.cpp comparison-case-sensitivity
\sa indexOf(), lastIndexOf(), QString::contains()
*/
-bool QtPrivate::QStringList_contains(const QStringList *that, QLatin1String str,
+bool QtPrivate::QStringList_contains(const QStringList *that, QLatin1StringView str,
Qt::CaseSensitivity cs)
{
return stringList_contains(*that, str, cs);
}
-/*!
- \fn bool QStringList::indexOf(QStringView str, qsizetype from) const
- \overload
- \since 5.13
-
- Returns the index position of the first occurrence of \a str in
- the list, searching forward from index position \a from. Returns
- -1 if no item matched.
-
- \sa lastIndexOf(), contains()
- */
-
-/*!
- \fn bool QStringList::indexOf(QLatin1String str, qsizetype from) const
- \overload
- \since 5.13
-
- Returns the index position of the first occurrence of \a str in
- the list, searching forward from index position \a from. Returns
- -1 if no item matched.
-
- \sa lastIndexOf(), contains()
- */
-
-/*!
- \fn bool QStringList::lastIndexOf(QStringView str, qsizetype from) const
- \overload
- \since 5.13
-
- Returns the index position of the last occurrence of \a str in
- the list, searching backward from index position \a from. If \a
- from is -1 (the default), the search starts at the last item.
- Returns -1 if no item matched.
-
- \sa indexOf(), contains()
- */
-
-/*!
- \fn bool QStringList::lastIndexOf(QLatin1String str, qsizetype from) const
- \overload
- \since 5.13
-
- Returns the index position of the last occurrence of \a str in
- the list, searching backward from index position \a from. If \a
- from is -1 (the default), the search starts at the last item.
- Returns -1 if no item matched.
-
- \sa indexOf(), contains()
- */
#if QT_CONFIG(regularexpression)
/*!
@@ -431,22 +367,22 @@ bool QtPrivate::QStringList_contains(const QStringList *that, QLatin1String str,
QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegularExpression &re)
{
QStringList res;
- for (qsizetype i = 0; i < that->size(); ++i) {
- if (that->at(i).contains(re))
- res << that->at(i);
+ for (const auto &str : *that) {
+ if (str.contains(re))
+ res.append(str);
}
return res;
}
#endif // QT_CONFIG(regularexpression)
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\fn QStringList &QStringList::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
Returns a string list where every string has had the \a before
text replaced with the \a after text wherever the \a before text
- is found. The \a before text is matched case-sensitively or not
- depending on the \a cs flag.
+ is found.
+
+ \include qstringlist.cpp comparison-case-sensitivity
For example:
@@ -467,7 +403,6 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegula
\overload
\since 5.14
*/
-#endif
/*!
\fn QStringList &QStringList::replaceInStrings(QStringView before, QStringView after, Qt::CaseSensitivity cs)
@@ -477,8 +412,19 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegula
void QtPrivate::QStringList_replaceInStrings(QStringList *that, QStringView before,
QStringView after, Qt::CaseSensitivity cs)
{
- for (qsizetype i = 0; i < that->size(); ++i)
- (*that)[i].replace(before.data(), before.length(), after.data(), after.length(), cs);
+ // Before potentially detaching "that" list, check if any string contains "before"
+ qsizetype i = -1;
+ for (qsizetype j = 0; j < that->size(); ++j) {
+ if (that->at(j).contains(before, cs)) {
+ i = j;
+ break;
+ }
+ }
+ if (i == -1)
+ return;
+
+ for (; i < that->size(); ++i)
+ (*that)[i].replace(before.data(), before.size(), after.data(), after.size(), cs);
}
#if QT_CONFIG(regularexpression)
@@ -505,9 +451,21 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, QStringView befo
\snippet qstringlist/main.cpp 5
\snippet qstringlist/main.cpp 17
*/
-void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegularExpression &re, const QString &after)
+void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegularExpression &re,
+ const QString &after)
{
- for (qsizetype i = 0; i < that->size(); ++i)
+ // Before potentially detaching "that" list, check if any string contains "before"
+ qsizetype i = -1;
+ for (qsizetype j = 0; j < that->size(); ++j) {
+ if (that->at(j).contains(re)) {
+ i = j;
+ break;
+ }
+ }
+ if (i == -1)
+ return;
+
+ for (; i < that->size(); ++i)
(*that)[i].replace(re, after);
}
#endif // QT_CONFIG(regularexpression)
@@ -523,7 +481,6 @@ static qsizetype accumulatedSize(const QStringList &list, qsizetype seplen)
return result;
}
-#if QT_STRINGVIEW_LEVEL < 2
/*!
\fn QString QStringList::join(const QString &separator) const
@@ -533,7 +490,6 @@ static qsizetype accumulatedSize(const QStringList &list, qsizetype seplen)
\sa QString::split()
*/
-#endif
/*!
\fn QString QStringList::join(QChar separator) const
@@ -558,11 +514,11 @@ QString QtPrivate::QStringList_join(const QStringList *that, const QChar *sep, q
}
/*!
- \fn QString QStringList::join(QLatin1String separator) const
+ \fn QString QStringList::join(QLatin1StringView separator) const
\since 5.8
\overload join()
*/
-QString QtPrivate::QStringList_join(const QStringList &list, QLatin1String sep)
+QString QtPrivate::QStringList_join(const QStringList &list, QLatin1StringView sep)
{
QString result;
if (!list.isEmpty()) {
@@ -585,7 +541,7 @@ QString QtPrivate::QStringList_join(const QStringList &list, QLatin1String sep)
*/
QString QtPrivate::QStringList_join(const QStringList *that, QStringView sep)
{
- return QStringList_join(that, sep.data(), sep.length());
+ return QStringList_join(that, sep.data(), sep.size());
}
/*!
@@ -625,6 +581,102 @@ QString QtPrivate::QStringList_join(const QStringList *that, QStringView sep)
the latter string list.
*/
+/*!
+ \fn qsizetype QStringList::indexOf(const QString &str, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QStringList::indexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QStringList::indexOf(QLatin1StringView str, qsizetype from, Qt::CaseSensitivity cs) const
+
+ Returns the index position of the first match of \a str in the list,
+ searching forward from index position \a from. Returns -1 if no item
+ matched.
+
+ \include qstringlist.cpp comparison-case-sensitivity
+
+//! [overloading-base-class-methods]
+ \note The \a cs parameter was added in Qt 6.7, i.e. these methods now overload
+ the methods inherited from the base class. Prior to that these methods only
+ had two parameters. This change is source compatible and existing code should
+ continue to work.
+//! [overloading-base-class-methods]
+
+ \sa lastIndexOf()
+*/
+
+template <typename String>
+qsizetype indexOf_helper(const QStringList &that, String needle, qsizetype from,
+ Qt::CaseSensitivity cs)
+{
+ if (from < 0) // Historical behavior
+ from = qMax(from + that.size(), 0);
+
+ if (from >= that.size())
+ return -1;
+
+ for (qsizetype i = from; i < that.size(); ++i) {
+ if (needle.compare(that.at(i), cs) == 0)
+ return i;
+ }
+ return -1;
+}
+
+qsizetype QtPrivate::QStringList_indexOf(const QStringList &that, QStringView needle,
+ qsizetype from, Qt::CaseSensitivity cs)
+{
+ return indexOf_helper(that, needle, from, cs);
+}
+
+qsizetype QtPrivate::QStringList_indexOf(const QStringList &that, QLatin1StringView needle,
+ qsizetype from, Qt::CaseSensitivity cs)
+{
+ return indexOf_helper(that, needle, from, cs);
+}
+
+/*!
+ \fn qsizetype QStringList::lastIndexOf(const QString &str, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QStringList::lastIndexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QStringList::lastIndexOf(QLatin1StringView str, qsizetype from, Qt::CaseSensitivity cs) const
+
+ Returns the index position of the last match of \a str in the list,
+ searching backward from index position \a from. If \a from is -1 (the
+ default), the search starts at the last item. Returns -1 if no item
+ matched.
+
+ \include qstringlist.cpp comparison-case-sensitivity
+
+ \include qstringlist.cpp overloading-base-class-methods
+
+ \sa indexOf()
+*/
+
+template <typename String>
+qsizetype lastIndexof_helper(const QStringList &that, String needle, qsizetype from,
+ Qt::CaseSensitivity cs)
+{
+ if (from < 0)
+ from += that.size();
+ else if (from >= that.size())
+ from = that.size() - 1;
+
+ for (qsizetype i = from; i >= 0; --i) {
+ if (needle.compare(that.at(i), cs) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+qsizetype QtPrivate::QStringList_lastIndexOf(const QStringList &that, QLatin1StringView needle,
+ qsizetype from, Qt::CaseSensitivity cs)
+{
+ return lastIndexof_helper(that, needle, from, cs);
+}
+
+qsizetype QtPrivate::QStringList_lastIndexOf(const QStringList &that, QStringView needle,
+ qsizetype from, Qt::CaseSensitivity cs)
+{
+ return lastIndexof_helper(that, needle, from, cs);
+}
+
#if QT_CONFIG(regularexpression)
/*!
\fn qsizetype QStringList::indexOf(const QRegularExpression &re, qsizetype from) const
@@ -697,22 +749,8 @@ qsizetype QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QReg
*/
qsizetype QtPrivate::QStringList_removeDuplicates(QStringList *that)
{
- qsizetype n = that->size();
- qsizetype j = 0;
-
- QDuplicateTracker<QString> seen;
- seen.reserve(n);
- for (qsizetype i = 0; i < n; ++i) {
- const QString &s = that->at(i);
- if (seen.hasSeen(s))
- continue;
- if (j != i)
- that->swapItemsAt(i, j);
- ++j;
- }
- if (n != j)
- that->erase(that->begin() + j, that->end());
- return n - j;
+ QDuplicateTracker<QString> seen(that->size());
+ return that->removeIf([&](const QString &s) { return seen.hasSeen(s); });
}
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringlist.h b/src/corelib/text/qstringlist.h
index 3ed6a2f499..fc5c49bfe1 100644
--- a/src/corelib/text/qstringlist.h
+++ b/src/corelib/text/qstringlist.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <QtCore/qlist.h>
@@ -63,14 +27,29 @@ namespace QtPrivate {
qsizetype Q_CORE_EXPORT QStringList_removeDuplicates(QStringList *that);
QString Q_CORE_EXPORT QStringList_join(const QStringList *that, QStringView sep);
QString Q_CORE_EXPORT QStringList_join(const QStringList *that, const QChar *sep, qsizetype seplen);
- Q_CORE_EXPORT QString QStringList_join(const QStringList &list, QLatin1String sep);
+ Q_CORE_EXPORT QString QStringList_join(const QStringList &list, QLatin1StringView sep);
QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, QStringView str,
Qt::CaseSensitivity cs);
+ Q_CORE_EXPORT QStringList QStringList_filter(const QStringList &that, QLatin1StringView needle,
+ Qt::CaseSensitivity cs);
+ Q_CORE_EXPORT QStringList QStringList_filter(const QStringList &that,
+ const QStringMatcher &matcher);
+
bool Q_CORE_EXPORT QStringList_contains(const QStringList *that, QStringView str, Qt::CaseSensitivity cs);
- bool Q_CORE_EXPORT QStringList_contains(const QStringList *that, QLatin1String str, Qt::CaseSensitivity cs);
+ bool Q_CORE_EXPORT QStringList_contains(const QStringList *that, QLatin1StringView str, Qt::CaseSensitivity cs);
void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, QStringView before, QStringView after,
Qt::CaseSensitivity cs);
+ qsizetype Q_CORE_EXPORT QStringList_indexOf(const QStringList &that, QStringView str,
+ qsizetype from, Qt::CaseSensitivity cs);
+ qsizetype Q_CORE_EXPORT QStringList_indexOf(const QStringList &that, QLatin1StringView str,
+ qsizetype from, Qt::CaseSensitivity cs);
+
+ Q_CORE_EXPORT qsizetype QStringList_lastIndexOf(const QStringList &that, QStringView str,
+ qsizetype from, Qt::CaseSensitivity cs);
+ Q_CORE_EXPORT qsizetype QStringList_lastIndexOf(const QStringList &that, QLatin1StringView str,
+ qsizetype from, Qt::CaseSensitivity cs);
+
#if QT_CONFIG(regularexpression)
void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QRegularExpression &rx, const QString &after);
QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QRegularExpression &re);
@@ -82,13 +61,24 @@ namespace QtPrivate {
#ifdef Q_QDOC
class QStringList : public QList<QString>
#else
-template <> struct QListSpecialMethods<QString>
+template <> struct QListSpecialMethods<QString> : QListSpecialMethodsBase<QString>
#endif
{
- inline QStringList *self()
- { return static_cast<QStringList *>(this); }
- inline const QStringList *self() const
- { return static_cast<const QStringList *>(this); }
+#ifdef Q_QDOC
+public:
+ using QList<QString>::QList;
+ QStringList(const QString &str);
+ QStringList(const QList<QString> &other);
+ QStringList(QList<QString> &&other);
+
+ QStringList &operator=(const QList<QString> &other);
+ QStringList &operator=(QList<QString> &&other);
+ QStringList operator+(const QStringList &other) const;
+ QStringList &operator<<(const QString &str);
+ QStringList &operator<<(const QStringList &other);
+ QStringList &operator<<(const QList<QString> &other);
+private:
+#endif
public:
inline void sort(Qt::CaseSensitivity cs = Qt::CaseSensitive)
@@ -98,11 +88,15 @@ public:
inline QString join(QStringView sep) const
{ return QtPrivate::QStringList_join(self(), sep); }
- inline QString join(QLatin1String sep) const
+ inline QString join(QLatin1StringView sep) const
{ return QtPrivate::QStringList_join(*self(), sep); }
inline QString join(QChar sep) const
{ return QtPrivate::QStringList_join(self(), &sep, 1); }
+ QStringList filter(const QStringMatcher &matcher) const
+ { return QtPrivate::QStringList_filter(*self(), matcher); }
+ QStringList filter(QLatin1StringView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return QtPrivate::QStringList_filter(*self(), needle, cs); }
inline QStringList filter(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
{ return QtPrivate::QStringList_filter(self(), str, cs); }
inline QStringList &replaceInStrings(QStringView before, QStringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
@@ -111,9 +105,8 @@ public:
return *self();
}
-#if QT_STRINGVIEW_LEVEL < 2
inline QString join(const QString &sep) const
- { return QtPrivate::QStringList_join(self(), sep.constData(), sep.length()); }
+ { return QtPrivate::QStringList_join(self(), sep.constData(), sep.size()); }
inline QStringList filter(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
{ return QtPrivate::QStringList_filter(self(), str, cs); }
inline QStringList &replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
@@ -131,31 +124,37 @@ public:
QtPrivate::QStringList_replaceInStrings(self(), before, after, cs);
return *self();
}
-#endif
+ using QListSpecialMethodsBase<QString>::contains;
+ using QListSpecialMethodsBase<QString>::indexOf;
+ using QListSpecialMethodsBase<QString>::lastIndexOf;
- inline bool contains(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ inline bool contains(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::QStringList_contains(self(), str, cs); }
inline bool contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::QStringList_contains(self(), str, cs); }
- inline qsizetype indexOf(QStringView str, qsizetype from = 0) const noexcept
- { return QtPrivate::indexOf<QString, QStringView>(*self(), str, from); }
- inline qsizetype indexOf(QLatin1String str, qsizetype from = 0) const noexcept
- { return QtPrivate::indexOf<QString, QLatin1String>(*self(), str, from); }
-
- inline qsizetype lastIndexOf(QStringView str, qsizetype from = -1) const noexcept
- { return QtPrivate::lastIndexOf<QString, QStringView>(*self(), str, from); }
- inline qsizetype lastIndexOf(QLatin1String str, qsizetype from = -1) const noexcept
- { return QtPrivate::lastIndexOf<QString, QLatin1String>(*self(), str, from); }
-
-#if QT_STRINGVIEW_LEVEL < 2
inline bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::QStringList_contains(self(), str, cs); }
- qsizetype indexOf(const QString &str, qsizetype from = 0) const noexcept
- { return indexOf(QStringView(str), from); }
- qsizetype lastIndexOf(const QString &str, qsizetype from = -1) const noexcept
- { return lastIndexOf(QStringView(str), from); }
-#endif
+
+ qsizetype indexOf(const QString &str, qsizetype from = 0,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return indexOf(QStringView(str), from, cs); }
+ qsizetype indexOf(QStringView needle, qsizetype from = 0,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::QStringList_indexOf(*self(), needle, from, cs); }
+ qsizetype indexOf(QLatin1StringView needle, qsizetype from = 0,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::QStringList_indexOf(*self(), needle, from, cs); }
+
+ qsizetype lastIndexOf(const QString &str, qsizetype from = -1,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(QStringView(str), from, cs); }
+ qsizetype lastIndexOf(QStringView str, qsizetype from = -1,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::QStringList_lastIndexOf(*self(), str, from, cs); }
+ qsizetype lastIndexOf(QLatin1StringView needle, qsizetype from = -1,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::QStringList_lastIndexOf(*self(), needle, from, cs); }
#if QT_CONFIG(regularexpression)
inline QStringList filter(const QRegularExpression &re) const
diff --git a/src/corelib/text/qstringliteral.h b/src/corelib/text/qstringliteral.h
index d86e6eafd9..429d9c02ad 100644
--- a/src/corelib/text/qstringliteral.h
+++ b/src/corelib/text/qstringliteral.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGLITERAL_H
#define QSTRINGLITERAL_H
@@ -56,13 +20,23 @@ QT_BEGIN_NAMESPACE
// core language feature, so just use u"" here unconditionally:
#define QT_UNICODE_LITERAL(str) u"" str
+
+using QStringPrivate = QArrayDataPointer<char16_t>;
+
+namespace QtPrivate {
+template <qsizetype N>
+static Q_ALWAYS_INLINE QStringPrivate qMakeStringPrivate(const char16_t (&literal)[N])
+{
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
+ auto str = const_cast<char16_t *>(literal);
+ return { nullptr, str, N - 1 };
+}
+}
+
#define QStringLiteral(str) \
- (QString(QStringPrivate(nullptr, \
- const_cast<char16_t *>(QT_UNICODE_LITERAL(str)), \
- sizeof(QT_UNICODE_LITERAL(str))/2 - 1))) \
+ (QString(QtPrivate::qMakeStringPrivate(QT_UNICODE_LITERAL(str)))) \
/**/
-using QStringPrivate = QArrayDataPointer<char16_t>;
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringmatcher.cpp b/src/corelib/text/qstringmatcher.cpp
index 2fba8daa88..379d555e54 100644
--- a/src/corelib/text/qstringmatcher.cpp
+++ b/src/corelib/text/qstringmatcher.cpp
@@ -1,52 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2019 Mail.ru Group.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2019 Mail.ru Group.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qstringmatcher.h"
QT_BEGIN_NAMESPACE
+static constexpr qsizetype FoldBufferCapacity = 256;
+
static void bm_init_skiptable(QStringView needle, uchar *skiptable, Qt::CaseSensitivity cs)
{
const char16_t *uc = needle.utf16();
- const qsizetype len = needle.size();
- qsizetype l = qMin(len, qsizetype(255));
+ const qsizetype len =
+ cs == Qt::CaseSensitive ? needle.size() : qMin(needle.size(), FoldBufferCapacity);
+ int l = qMin(int(len), 255);
memset(skiptable, l, 256 * sizeof(uchar));
uc += len - l;
if (cs == Qt::CaseSensitive) {
@@ -73,11 +40,12 @@ static inline qsizetype bm_find(QStringView haystack, qsizetype index, QStringVi
if (pl == 0)
return index > l ? -1 : index;
- const qsizetype pl_minus_one = pl - 1;
- const char16_t *current = uc + index + pl_minus_one;
- const char16_t *end = uc + l;
if (cs == Qt::CaseSensitive) {
+ const qsizetype pl_minus_one = pl - 1;
+ const char16_t *current = uc + index + pl_minus_one;
+ const char16_t *end = uc + l;
+
while (current < end) {
qsizetype skip = skiptable[*current & 0xff];
if (!skip) {
@@ -102,21 +70,38 @@ static inline qsizetype bm_find(QStringView haystack, qsizetype index, QStringVi
current += skip;
}
} else {
+ char16_t foldBuffer[FoldBufferCapacity];
+ const qsizetype foldBufferLength = qMin(FoldBufferCapacity, pl);
+ const char16_t *start = puc;
+ for (qsizetype i = 0; i < foldBufferLength; ++i)
+ foldBuffer[i] = foldCase(&puc[i], start);
+ QStringView restNeedle = needle.sliced(foldBufferLength);
+ const qsizetype foldBufferEnd = foldBufferLength - 1;
+ const char16_t *current = uc + index + foldBufferEnd;
+ const char16_t *end = uc + l;
+
while (current < end) {
qsizetype skip = skiptable[foldCase(current, uc) & 0xff];
if (!skip) {
// possible match
- while (skip < pl) {
- if (foldCase(current - skip, uc) != foldCase(puc + pl_minus_one - skip, puc))
+ while (skip < foldBufferLength) {
+ if (foldCase(current - skip, uc) != foldBuffer[foldBufferEnd - skip])
break;
++skip;
}
- if (skip > pl_minus_one) // we have a match
- return (current - uc) - pl_minus_one;
+ if (skip > foldBufferEnd) { // Matching foldBuffer
+ qsizetype candidatePos = (current - uc) - foldBufferEnd;
+ QStringView restHaystack =
+ haystack.sliced(qMin(haystack.size(), candidatePos + foldBufferLength));
+ if (restNeedle.size() == 0
+ || restHaystack.startsWith(
+ restNeedle, Qt::CaseInsensitive)) // Check the rest of the string
+ return candidatePos;
+ }
// in case we don't have a match we are a bit inefficient as we only skip by one
// when we have the non matching char in the string.
- if (skiptable[foldCase(current - skip, uc) & 0xff] == pl)
- skip = pl - skip;
+ if (skiptable[foldCase(current - skip, uc) & 0xff] == foldBufferLength)
+ skip = foldBufferLength - skip;
else
skip = 1;
}
@@ -258,6 +243,15 @@ QString QStringMatcher::pattern() const
}
/*!
+ \fn QStringView QStringMatcher::patternView() const noexcept
+ \since 6.7
+
+ Returns a string view of the pattern that this string matcher will search for.
+
+ \sa setPattern()
+*/
+
+/*!
Sets the case sensitivity setting of this string matcher to \a
cs.
diff --git a/src/corelib/text/qstringmatcher.h b/src/corelib/text/qstringmatcher.h
index 39cb877151..937f17df0a 100644
--- a/src/corelib/text/qstringmatcher.h
+++ b/src/corelib/text/qstringmatcher.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2019 Mail.ru Group.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2019 Mail.ru Group.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGMATCHER_H
#define QSTRINGMATCHER_H
@@ -76,6 +40,9 @@ public:
{ return indexIn(QStringView(str, length), from); }
qsizetype indexIn(QStringView str, qsizetype from = 0) const;
QString pattern() const;
+ QStringView patternView() const noexcept
+ { return q_sv; }
+
inline Qt::CaseSensitivity caseSensitivity() const { return q_cs; }
private:
diff --git a/src/corelib/text/qstringtokenizer.cpp b/src/corelib/text/qstringtokenizer.cpp
index 4e8ffc2c8e..fc6faed27f 100644
--- a/src/corelib/text/qstringtokenizer.cpp
+++ b/src/corelib/text/qstringtokenizer.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qstringtokenizer.h"
#include "qstringalgorithms.h"
@@ -73,7 +37,7 @@ QT_BEGIN_NAMESPACE
Argument Deduction (CTAD), you may write
\c{QStringTokenizer{string, separator}} (without template
arguments). If you can't use C++17 CTAD, you must use the
- QStringView::split() or QLatin1String::split() member functions
+ QStringView::split() or QLatin1StringView::split() member functions
and store the return value only in \c{auto} variables:
\code
@@ -143,30 +107,30 @@ QT_BEGIN_NAMESPACE
use(e);
\endcode
- \sa QStringView::split(), QLatin1String::split(), QRegularExpression
+ \sa QStringView::split(), QString::split(), QRegularExpression
*/
/*!
- \typedef QStringTokenizer::value_type
+ \typealias QStringTokenizer::value_type
- Alias for \c{const QStringView} or \c{const QLatin1String},
+ Alias for \c{const QStringView} or \c{const QLatin1StringView},
depending on the tokenizer's \c Haystack template argument.
*/
/*!
- \typedef QStringTokenizer::difference_type
+ \typealias QStringTokenizer::difference_type
Alias for qsizetype.
*/
/*!
- \typedef QStringTokenizer::size_type
+ \typealias QStringTokenizer::size_type
Alias for qsizetype.
*/
/*!
- \typedef QStringTokenizer::reference
+ \typealias QStringTokenizer::reference
Alias for \c{value_type &}.
@@ -175,13 +139,13 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \typedef QStringTokenizer::const_reference
+ \typealias QStringTokenizer::const_reference
Alias for \c{value_type &}.
*/
/*!
- \typedef QStringTokenizer::pointer
+ \typealias QStringTokenizer::pointer
Alias for \c{value_type *}.
@@ -190,13 +154,13 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \typedef QStringTokenizer::const_pointer
+ \typealias QStringTokenizer::const_pointer
Alias for \c{value_type *}.
*/
/*!
- \typedef QStringTokenizer::iterator
+ \typealias QStringTokenizer::iterator
This typedef provides an STL-style const iterator for
QStringTokenizer.
@@ -217,7 +181,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \typedef QStringTokenizer::sentinel
+ \typealias QStringTokenizer::sentinel
This typedef provides an STL-style sentinel for
QStringTokenizer::iterator and QStringTokenizer::const_iterator.
@@ -226,8 +190,8 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringTokenizer(Haystack haystack, String needle, Qt::CaseSensitivity cs, Qt::SplitBehavior sb)
- \fn QStringTokenizer(Haystack haystack, String needle, Qt::SplitBehavior sb, Qt::CaseSensitivity cs)
+ \fn template <typename Haystack, typename Needle> QStringTokenizer<Haystack, Needle>::QStringTokenizer(Haystack haystack, Needle needle, Qt::CaseSensitivity cs, Qt::SplitBehavior sb)
+ \fn template <typename Haystack, typename Needle> QStringTokenizer<Haystack, Needle>::QStringTokenizer(Haystack haystack, Needle needle, Qt::SplitBehavior sb, Qt::CaseSensitivity cs)
Constructs a string tokenizer that splits the string \a haystack
into substrings wherever \a needle occurs, and allows iteration
@@ -238,31 +202,24 @@ QT_BEGIN_NAMESPACE
\a cs specifies whether \a needle should be matched case
sensitively or case insensitively.
- If \a sb is QString::SkipEmptyParts, empty entries don't
+ If \a sb is Qt::SkipEmptyParts, empty entries don't
appear in the result. By default, empty entries are included.
- \sa QStringView::split(), QLatin1String::split(), Qt::CaseSensitivity, Qt::SplitBehavior
+ \sa QStringView::split(), QString::split(), Qt::CaseSensitivity, Qt::SplitBehavior
*/
/*!
- \fn QStringTokenizer::const_iterator QStringTokenizer::begin() const
+ \fn template <typename Haystack, typename Needle> QStringTokenizer<Haystack, Needle>::iterator QStringTokenizer<Haystack, Needle>::begin() const
+ \fn template <typename Haystack, typename Needle> QStringTokenizer<Haystack, Needle>::iterator QStringTokenizer<Haystack, Needle>::cbegin() const
Returns a const \l{STL-style iterators}{STL-style iterator}
pointing to the first token in the list.
- \sa end(), cbegin()
+ \sa end(), cend()
*/
/*!
- \fn QStringTokenizer::const_iterator QStringTokenizer::cbegin() const
-
- Same as begin().
-
- \sa cend(), begin()
-*/
-
-/*!
- \fn QStringTokenizer::sentinel QStringTokenizer::end() const
+ \fn template <typename Haystack, typename Needle> QStringTokenizer<Haystack, Needle>::sentinel QStringTokenizer<Haystack, Needle>::end() const
Returns a const \l{STL-style iterators}{STL-style sentinel}
pointing to the imaginary token after the last token in the list.
@@ -271,7 +228,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringTokenizer::sentinel QStringTokenizer::cend() const
+ \fn template <typename Haystack, typename Needle> QStringTokenizer<Haystack, Needle>::sentinel QStringTokenizer<Haystack, Needle>::cend() const
Same as end().
@@ -279,19 +236,18 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringTokenizer::toContainer(Container &&c) const &
+ \fn template <typename Haystack, typename Needle> template<typename LContainer> LContainer QStringTokenizer<Haystack, Needle>::toContainer(LContainer &&c) const &
- Convenience method to convert the lazy sequence into a
- (typically) random-access container.
+ Converts the lazy sequence into a (typically) random-access container of
+ type \c LContainer.
This function is only available if \c Container has a \c value_type
matching this tokenizer's value_type.
- If you pass in a named container (an lvalue), then that container
- is filled, and a reference to it is returned.
-
- If you pass in a temporary container (an rvalue, incl. the default
- argument), then that container is filled, and returned by value.
+ If you pass in a named container (an lvalue) for \a c, then that container
+ is filled, and a reference to it is returned. If you pass in a temporary
+ container (an rvalue, incl. the default argument), then that container is
+ filled, and returned by value.
\code
// assuming tok's value_type is QStringView, then...
@@ -311,9 +267,12 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringTokenizer::toContainer(Container &&c) const &&
+ \fn template <typename Haystack, typename Needle> template<typename RContainer> RContainer QStringTokenizer<Haystack, Needle>::toContainer(RContainer &&c) const &&
\overload
+ Converts the lazy sequence into a (typically) random-access container of
+ type \c RContainer.
+
In addition to the constraints on the lvalue-this overload, this
rvalue-this overload is only available when this QStringTokenizer
does not store the haystack internally, as this could create a
@@ -341,17 +300,30 @@ QT_BEGIN_NAMESPACE
func(QStringTokenizer{QStringView{widget.text()}, u','}.toContainer());
// OK: compiler keeps widget.text() around until after func() has executed
\endcode
+
+ If you pass in a named container (an lvalue)for \a c, then that container
+ is filled, and a reference to it is returned. If you pass in a temporary
+ container (an rvalue, incl. the default argument), then that container is
+ filled, and returned by value.
*/
/*!
- \fn qTokenize(Haystack &&haystack, Needle &&needle, Flags...flags)
+ \fn template <typename Haystack, typename Needle, typename...Flags> auto qTokenize(Haystack &&haystack, Needle &&needle, Flags...flags)
\relates QStringTokenizer
\since 6.0
- Factory function for QStringTokenizer. You can use this function
- if your compiler doesn't, yet, support C++17 Class Template
- Argument Deduction (CTAD), but we recommend direct use of
- QStringTokenizer with CTAD instead.
+ Factory function for a QStringTokenizer that splits the string \a haystack
+ into substrings wherever \a needle occurs, and allows iteration
+ over those strings as they are found. If \a needle does not match
+ anywhere in \a haystack, a single element containing \a haystack
+ is produced.
+
+ Pass values from Qt::CaseSensitivity and Qt::SplitBehavior enumerators
+ as \a flags to modify the behavior of the tokenizer.
+
+ You can use this function if your compiler doesn't, yet, support C++17 Class
+ Template Argument Deduction (CTAD). We recommend direct use of QStringTokenizer
+ with CTAD instead.
*/
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringtokenizer.h b/src/corelib/text/qstringtokenizer.h
index e0aefe2522..7a627b4508 100644
--- a/src/corelib/text/qstringtokenizer.h
+++ b/src/corelib/text/qstringtokenizer.h
@@ -1,54 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGTOKENIZER_H
#define QSTRINGTOKENIZER_H
#include <QtCore/qnamespace.h>
#include <QtCore/qcontainerfwd.h>
+#include <iterator>
QT_BEGIN_NAMESPACE
template <typename, typename> class QStringBuilder;
-#if defined(Q_QDOC) || 1 || (defined(__cpp_range_based_for) && __cpp_range_based_for >= 201603)
-# define Q_STRINGTOKENIZER_USE_SENTINEL
-#endif
+#define Q_STRINGTOKENIZER_USE_SENTINEL
class QStringTokenizerBaseBase
{
@@ -109,8 +72,8 @@ public:
iterator() noexcept = default;
// violates std::forward_iterator (returns a reference into the iterator)
- Q_REQUIRED_RESULT constexpr const Haystack* operator->() const { return Q_ASSERT(current.ok), &current.value; }
- Q_REQUIRED_RESULT constexpr const Haystack& operator*() const { return *operator->(); }
+ [[nodiscard]] constexpr const Haystack* operator->() const { return Q_ASSERT(current.ok), &current.value; }
+ [[nodiscard]] constexpr const Haystack& operator*() const { return *operator->(); }
iterator& operator++() { advance(); return *this; }
iterator operator++(int) { auto tmp = *this; advance(); return tmp; }
@@ -145,12 +108,12 @@ public:
using reference = typename iterator::reference;
using const_reference = reference;
- Q_REQUIRED_RESULT iterator begin() const noexcept { return iterator{*this}; }
- Q_REQUIRED_RESULT iterator cbegin() const noexcept { return begin(); }
+ [[nodiscard]] iterator begin() const noexcept { return iterator{*this}; }
+ [[nodiscard]] iterator cbegin() const noexcept { return begin(); }
template <bool = std::is_same<iterator, sentinel>::value> // ODR protection
- Q_REQUIRED_RESULT constexpr sentinel end() const noexcept { return {}; }
+ [[nodiscard]] constexpr sentinel end() const noexcept { return {}; }
template <bool = std::is_same<iterator, sentinel>::value> // ODR protection
- Q_REQUIRED_RESULT constexpr sentinel cend() const noexcept { return {}; }
+ [[nodiscard]] constexpr sentinel cend() const noexcept { return {}; }
private:
Haystack m_haystack;
@@ -170,7 +133,7 @@ namespace Tok {
template <typename String> struct ViewForImpl {};
template <> struct ViewForImpl<QStringView> { using type = QStringView; };
- template <> struct ViewForImpl<QLatin1String> { using type = QLatin1String; };
+ template <> struct ViewForImpl<QLatin1StringView> { using type = QLatin1StringView; };
template <> struct ViewForImpl<QChar> { using type = QChar; };
template <> struct ViewForImpl<QString> : ViewForImpl<QStringView> {};
template <> struct ViewForImpl<QLatin1Char> : ViewForImpl<QChar> {};
@@ -187,7 +150,7 @@ namespace Tok {
#endif
// This metafunction maps a StringLike to a View (currently, QChar,
- // QStringView, QLatin1String). This is what QStringTokenizerBase
+ // QStringView, QLatin1StringView). This is what QStringTokenizerBase
// operates on. QStringTokenizer adds pinning to keep rvalues alive
// for the duration of the algorithm.
template <typename String>
@@ -294,14 +257,30 @@ class QStringTokenizer
using if_haystack_not_pinned = typename if_haystack_not_pinned_impl<Container, HPin>::type;
template <typename Container, typename Iterator = decltype(std::begin(std::declval<Container>()))>
using if_compatible_container = typename std::enable_if<
- std::is_same<
+ std::is_convertible<
typename Base::value_type,
typename std::iterator_traits<Iterator>::value_type
>::value,
bool
>::type;
public:
- using value_type = typename Base::value_type;
+ using value_type = typename Base::value_type;
+ using difference_type = typename Base::difference_type;
+ using size_type = typename Base::size_type;
+ using reference = typename Base::reference;
+ using const_reference = typename Base::const_reference;
+ using pointer = typename Base::pointer;
+ using const_pointer = typename Base::const_pointer;
+ using iterator = typename Base::iterator;
+ using const_iterator = typename Base::const_iterator;
+ using sentinel = typename Base::sentinel;
+
+#ifdef Q_QDOC
+ [[nodiscard]] iterator begin() const noexcept { return Base::begin(); }
+ [[nodiscard]] iterator cbegin() const noexcept { return begin(); }
+ [[nodiscard]] constexpr sentinel end() const noexcept { return {}; }
+ [[nodiscard]] constexpr sentinel cend() const noexcept { return {}; }
+#endif
constexpr explicit QStringTokenizer(Haystack haystack, Needle needle,
Qt::CaseSensitivity cs,
@@ -328,22 +307,26 @@ public:
this->needleView(needle), sb, cs}
{}
+#ifdef Q_QDOC
+ template<typename LContainer> LContainer toContainer(LContainer &&c = {}) const & {}
+ template<typename RContainer> RContainer toContainer(RContainer &&c = {}) const && {}
+#else
template<typename Container = QList<value_type>, if_compatible_container<Container> = true>
Container toContainer(Container &&c = {}) const &
{
for (auto e : *this)
c.emplace_back(e);
- return c;
+ return std::forward<Container>(c);
}
-
template<typename Container = QList<value_type>, if_compatible_container<Container> = true,
if_haystack_not_pinned<Container> = true>
Container toContainer(Container &&c = {}) const &&
{
for (auto e : *this)
c.emplace_back(e);
- return c;
+ return std::forward<Container>(c);
}
+#endif
};
namespace QtPrivate {
@@ -395,7 +378,7 @@ QStringTokenizer(Haystack&&, Needle&&, Qt::CaseSensitivity, Qt::SplitBehavior)
#undef Q_TOK_RESULT
template <typename Haystack, typename Needle, typename...Flags>
-Q_REQUIRED_RESULT constexpr auto
+[[nodiscard]] constexpr auto
qTokenize(Haystack &&h, Needle &&n, Flags...flags)
noexcept(QtPrivate::Tok::is_nothrow_constructible_from<Haystack, Needle>::value)
-> decltype(QtPrivate::Tok::TokenizerResult<Haystack, Needle>{std::forward<Haystack>(h),
diff --git a/src/corelib/text/qstringview.cpp b/src/corelib/text/qstringview.cpp
index aeec699f7f..29b83ffe8f 100644
--- a/src/corelib/text/qstringview.cpp
+++ b/src/corelib/text/qstringview.cpp
@@ -1,45 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qstringview.h"
-#include "qstring.h"
-#include "qlocale_p.h"
QT_BEGIN_NAMESPACE
@@ -70,7 +32,7 @@ QT_BEGIN_NAMESPACE
When used as an interface type, QStringView allows a single function to accept
a wide variety of UTF-16 string data sources. One function accepting QStringView
thus replaces three function overloads (taking QString and
- \c{(const QChar*, int)}), while at the same time enabling even more string data
+ \c{(const QChar*, qsizetype)}), while at the same time enabling even more string data
sources to be passed to the function, such as \c{u"Hello World"}, a \c char16_t
string literal.
@@ -87,11 +49,11 @@ QT_BEGIN_NAMESPACE
QChar constructor by itself.
\li \e QString: if you store an unmodified copy of the string and thus would
like to take advantage of QString's implicit sharing.
- \li QLatin1String: if you can implement the function without converting the
- QLatin1String to UTF-16 first; users expect a function overloaded on
- QLatin1String to perform strictly less memory allocations than the
+ \li QLatin1StringView: if you can implement the function without converting the
+ QLatin1StringView to UTF-16 first; users expect a function overloaded on
+ QLatin1StringView to perform strictly less memory allocations than the
semantically equivalent call of the QStringView version, involving
- construction of a QString from the QLatin1String.
+ construction of a QString from the QLatin1StringView.
\endlist
QStringView can also be used as the return value of a function. If you call a
@@ -130,11 +92,6 @@ QT_BEGIN_NAMESPACE
\typedef QStringView::size_type
Alias for qsizetype. Provided for compatibility with the STL.
-
- Unlike other Qt classes, QStringView uses qsizetype as its \c size_type, to allow
- accepting data from \c{std::basic_string} without truncation. The Qt API functions,
- for example length(), return \c int, while the STL-compatible functions, for example
- size(), return \c size_type.
*/
/*!
@@ -222,7 +179,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn template <typename Char> QStringView::QStringView(const Char *str, qsizetype len)
+ \fn template <typename Char, QStringView::if_compatible_char<Char> = true> QStringView::QStringView(const Char *str, qsizetype len)
Constructs a string view on \a str with length \a len.
@@ -238,7 +195,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn template <typename Char> QStringView::QStringView(const Char *first, const Char *last)
+ \fn template <typename Char, QStringView::if_compatible_char<Char> = true> QStringView::QStringView(const Char *first, const Char *last)
Constructs a string view on \a first with length (\a last - \a first).
@@ -305,26 +262,26 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn template <typename StdBasicString> QStringView::QStringView(const StdBasicString &str)
+ \fn template <typename Container, QStringView::if_compatible_container<Container>> QStringView::QStringView(const Container &str)
- Constructs a string view on \a str. The length is taken from \c{str.size()}.
+ Constructs a string view on \a str. The length is taken from \c{std::size(str)}.
- \c{str.data()} must remain valid for the lifetime of this string view object.
+ \c{std::data(str)} must remain valid for the lifetime of this string view object.
- This constructor only participates in overload resolution if \c StdBasicString is an
- instantiation of \c std::basic_string with a compatible character type. The
+ This constructor only participates in overload resolution if \c Container is a
+ container with a compatible character type as \c{value_type}. The
compatible character types are: \c QChar, \c ushort, \c char16_t and
(on platforms, such as Windows, where it is a 16-bit type) \c wchar_t.
- The string view will be empty if and only if \c{str.empty()}. It is unspecified
- whether this constructor can result in a null string view (\c{str.data()} would
+ The string view will be empty if and only if \c{std::size(str) == 0}. It is unspecified
+ whether this constructor can result in a null string view (\c{std::data(str)} would
have to return \nullptr for this).
\sa isNull(), isEmpty()
*/
/*!
- \fn template <typename Char, size_t Size> static QStringView fromArray(const Char (&string)[Size]) noexcept
+ \fn template <typename Char, size_t Size, QStringView::if_compatible_char<Char> = true> static QStringView QStringView::fromArray(const Char (&string)[Size]) noexcept
Constructs a string view on the full character string literal \a string,
including any trailing \c{Char(0)}. If you don't want the
@@ -348,18 +305,16 @@ QT_BEGIN_NAMESPACE
Returns a deep copy of this string view's data as a QString.
The return value will be the null QString if and only if this string view is null.
-
- \warning QStringView can store strings with more than 2\sup{30} characters
- while QString cannot. Calling this function on a string view for which size()
- returns a value greater than \c{INT_MAX / 2} constitutes undefined behavior.
*/
/*!
\fn const QChar *QStringView::data() const
- Returns a const pointer to the first character in the string.
+//! [const-pointer-to-first-ch]
+ Returns a const pointer to the first character in the string view.
\note The character array represented by the return value is \e not null-terminated.
+//! [const-pointer-to-first-ch]
\sa begin(), end(), utf16()
*/
@@ -368,9 +323,7 @@ QT_BEGIN_NAMESPACE
\fn const QChar *QStringView::constData() const
\since 6.0
- Returns a const pointer to the first character in the string.
-
- \note The character array represented by the return value is \e not null-terminated.
+ \include qstringview.cpp const-pointer-to-first-ch
\sa data(), begin(), end(), utf16()
*/
@@ -378,12 +331,10 @@ QT_BEGIN_NAMESPACE
/*!
\fn const storage_type *QStringView::utf16() const
- Returns a const pointer to the first character in the string.
+ \include qstringview.cpp const-pointer-to-first-ch
\c{storage_type} is \c{char16_t}.
- \note The character array represented by the return value is \e not null-terminated.
-
\sa begin(), end(), data()
*/
@@ -391,11 +342,11 @@ QT_BEGIN_NAMESPACE
\fn QStringView::const_iterator QStringView::begin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first character in
- the string.
+ the string view.
This function is provided for STL compatibility.
- \sa end(), cbegin(), rbegin(), data()
+ \sa end(), constBegin(), cbegin(), rbegin(), data()
*/
/*!
@@ -405,7 +356,16 @@ QT_BEGIN_NAMESPACE
This function is provided for STL compatibility.
- \sa cend(), begin(), crbegin(), data()
+ \sa cend(), begin(), constBegin(), crbegin(), data()
+*/
+
+/*!
+ \fn QStringView::const_iterator QStringView::constBegin() const
+ \since 6.1
+
+ Same as begin().
+
+ \sa constEnd(), begin(), cbegin(), crbegin(), data()
*/
/*!
@@ -416,7 +376,7 @@ QT_BEGIN_NAMESPACE
This function is provided for STL compatibility.
- \sa begin(), cend(), rend()
+ \sa begin(), constEnd(), cend(), rend()
*/
/*! \fn QStringView::const_iterator QStringView::cend() const
@@ -425,14 +385,22 @@ QT_BEGIN_NAMESPACE
This function is provided for STL compatibility.
- \sa cbegin(), end(), crend()
+ \sa cbegin(), end(), constEnd(), crend()
+*/
+
+/*! \fn QStringView::const_iterator QStringView::constEnd() const
+ \since 6.1
+
+ Same as end().
+
+ \sa constBegin(), end(), cend(), crend()
*/
/*!
\fn QStringView::const_reverse_iterator QStringView::rbegin() const
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- character in the string, in reverse order.
+ character in the string view, in reverse order.
This function is provided for STL compatibility.
@@ -453,7 +421,7 @@ QT_BEGIN_NAMESPACE
\fn QStringView::const_reverse_iterator QStringView::rend() const
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
- the last character in the string, in reverse order.
+ the last character in the string view, in reverse order.
This function is provided for STL compatibility.
@@ -503,7 +471,7 @@ QT_BEGIN_NAMESPACE
/*!
\fn qsizetype QStringView::size() const
- Returns the size of this string view, in UTF-16 code points (that is,
+ Returns the size of this string view, in UTF-16 code units (that is,
surrogate pairs count as two for the purposes of this function, the same
as in QString).
@@ -511,16 +479,12 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn int QStringView::length() const
+ \fn QStringView::length() const
- Same as size(), except returns the result as an \c int.
+ Same as size().
This function is provided for compatibility with other Qt containers.
- \warning QStringView can represent strings with more than 2\sup{31} characters.
- Calling this function on a string view for which size() returns a value greater
- than \c{INT_MAX} constitutes undefined behavior.
-
\sa empty(), isEmpty(), isNull(), size()
*/
@@ -546,7 +510,7 @@ QT_BEGIN_NAMESPACE
/*!
\fn template <typename...Args> QString QStringView::arg(Args &&...args) const
- \fn template <typename...Args> QString QLatin1String::arg(Args &&...args) const
+ \fn template <typename...Args> QString QLatin1StringView::arg(Args &&...args) const
\fn template <typename...Args> QString QString::arg(Args &&...args) const
\since 5.14
@@ -556,7 +520,7 @@ QT_BEGIN_NAMESPACE
second of the \a args the \c{%N} with the next-lowest \c{N} etc.
\c Args can consist of anything that implicitly converts to QString,
- QStringView or QLatin1String.
+ QStringView or QLatin1StringView.
In addition, the following types are also supported: QChar, QLatin1Char.
@@ -566,12 +530,14 @@ QT_BEGIN_NAMESPACE
/*!
\fn QChar QStringView::front() const
- Returns the first character in the string. Same as first().
+ Returns the first character in the string view. Same as first().
This function is provided for STL compatibility.
+//! [calling-on-empty-is-UB]
\warning Calling this function on an empty string view constitutes
undefined behavior.
+//! [calling-on-empty-is-UB]
\sa back(), first(), last()
*/
@@ -579,12 +545,11 @@ QT_BEGIN_NAMESPACE
/*!
\fn QChar QStringView::back() const
- Returns the last character in the string. Same as last().
+ Returns the last character in the string view. Same as last().
This function is provided for STL compatibility.
- \warning Calling this function on an empty string view constitutes
- undefined behavior.
+ \include qstringview.cpp calling-on-empty-is-UB
\sa front(), first(), last()
*/
@@ -592,12 +557,11 @@ QT_BEGIN_NAMESPACE
/*!
\fn QChar QStringView::first() const
- Returns the first character in the string. Same as front().
+ Returns the first character in the string view. Same as front().
This function is provided for compatibility with other Qt containers.
- \warning Calling this function on an empty string view constitutes
- undefined behavior.
+ \include qstringview.cpp calling-on-empty-is-UB
\sa front(), back(), last()
*/
@@ -605,12 +569,11 @@ QT_BEGIN_NAMESPACE
/*!
\fn QChar QStringView::last() const
- Returns the last character in the string. Same as back().
+ Returns the last character in the string view. Same as back().
This function is provided for compatibility with other Qt containers.
- \warning Calling this function on an empty string view constitutes
- undefined behavior.
+ \include qstringview.cpp calling-on-empty-is-UB
\sa back(), front(), first()
*/
@@ -621,11 +584,11 @@ QT_BEGIN_NAMESPACE
Returns the substring of length \a length starting at position
\a start in this object.
- \obsolete Use sliced() instead in new code.
+ \deprecated Use sliced() instead in new code.
Returns an empty string view if \a start exceeds the
- length of the string. If there are less than \a length characters
- available in the string starting at \a start, or if
+ length of the string view. If there are less than \a length characters
+ available in the string view starting at \a start, or if
\a length is negative (default), the function returns all characters that
are available from \a start.
@@ -635,12 +598,12 @@ QT_BEGIN_NAMESPACE
/*!
\fn QStringView QStringView::left(qsizetype length) const
- \obsolete Use first() instead in new code.
+ \deprecated Use first() instead in new code.
Returns the substring of length \a length starting at position
0 in this object.
- The entire string is returned if \a length is greater than or equal
+ The entire string view is returned if \a length is greater than or equal
to size(), or less than zero.
\sa first(), last(), sliced(), startsWith(), chopped(), chop(), truncate()
@@ -649,12 +612,12 @@ QT_BEGIN_NAMESPACE
/*!
\fn QStringView QStringView::right(qsizetype length) const
- \obsolete Use last() instead in new code.
+ \deprecated Use last() instead in new code.
Returns the substring of length \a length starting at position
size() - \a length in this object.
- The entire string is returned if \a length is greater than or equal
+ The entire string view is returned if \a length is greater than or equal
to size(), or less than zero.
\sa first(), last(), sliced(), endsWith(), chopped(), chop(), truncate()
@@ -665,33 +628,36 @@ QT_BEGIN_NAMESPACE
\since 6.0
Returns a string view that points to the first \a n characters
- of this string.
+ of this string view.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa last(), subString(), startsWith(), chopped(), chop(), truncate()
+ \sa last(), sliced(), startsWith(), chopped(), chop(), truncate()
*/
/*!
\fn QStringView QStringView::last(qsizetype n) const
\since 6.0
- Returns a string view that points to the last \a n characters of this string.
+ Returns a string view that points to the last \a n characters of this string
+ view.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa first(), subString(), endsWith(), chopped(), chop(), truncate()
+ \sa first(), sliced(), endsWith(), chopped(), chop(), truncate()
*/
/*!
\fn QStringView QStringView::sliced(qsizetype pos, qsizetype n) const
\since 6.0
- Returns a string view that points to \a n characters of this string,
+ Returns a string view that points to \a n characters of this string view,
starting at position \a pos.
+//! [UB-sliced-index-length]
\note The behavior is undefined when \a pos < 0, \a n < 0,
or \a pos + \a n > size().
+//! [UB-sliced-index-length]
\sa first(), last(), chopped(), chop(), truncate()
*/
@@ -704,7 +670,9 @@ QT_BEGIN_NAMESPACE
Returns a string view starting at position \a pos in this object,
and extending to its end.
+//! [UB-sliced-index-only]
\note The behavior is undefined when \a pos < 0 or \a pos > size().
+//! [UB-sliced-index-only]
\sa first(), last(), chopped(), chop(), truncate()
*/
@@ -760,115 +728,286 @@ QT_BEGIN_NAMESPACE
\fn int QStringView::compare(QStringView str, Qt::CaseSensitivity cs) const
\since 5.12
- Returns an integer that compares to zero as this string-view compares to the
- string-view \a str.
+ Compares this string view with string view \a str and returns a negative integer if
+ this string view is less than \a str, a positive integer if it is greater than
+ \a str, and zero if they are equal.
- If \a cs is Qt::CaseSensitive (the default), the comparison is case sensitive;
- otherwise the comparison is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
\sa operator==(), operator<(), operator>()
*/
/*!
- \fn int QStringView::compare(QLatin1String l1, Qt::CaseSensitivity cs) const
+ \fn int QStringView::compare(QUtf8StringView str, Qt::CaseSensitivity cs) const
+ \since 6.5
+
+ Compares this string view with QUtf8StringView \a str and returns a negative integer if
+ this string view is less than \a str, a positive integer if it is greater than
+ \a str, and zero if they are equal.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
+
+ \sa operator==(), operator<(), operator>()
+*/
+
+/*!
+ \fn int QStringView::compare(QLatin1StringView l1, Qt::CaseSensitivity cs) const
\fn int QStringView::compare(QChar ch) const
\fn int QStringView::compare(QChar ch, Qt::CaseSensitivity cs) const
- \since 5.14
+ \since 5.15
- Returns an integer that compares to zero as this string-view compares to the
- Latin-1 string \a l1, or character \a ch, respectively.
+ Compares this string view to the Latin-1 string view \a l1, or the character \a ch.
+ Returns a negative integer if this string view is less than \a l1 or \a ch,
+ a positive integer if it is greater than \a l1 or \a ch, and zero if they are equal.
- If \a cs is Qt::CaseSensitive (the default), the comparison is case sensitive;
- otherwise the comparison is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
\sa operator==(), operator<(), operator>()
*/
/*!
+ \fn QStringView::operator==(const QStringView &lhs, const QStringView &rhs)
+ \fn QStringView::operator!=(const QStringView &lhs, const QStringView &rhs)
+ \fn QStringView::operator< (const QStringView &lhs, const QStringView &rhs)
+ \fn QStringView::operator<=(const QStringView &lhs, const QStringView &rhs)
+ \fn QStringView::operator> (const QStringView &lhs, const QStringView &rhs)
+ \fn QStringView::operator>=(const QStringView &lhs, const QStringView &rhs)
+
+ Operators for comparing \a lhs to \a rhs.
+
+ \sa compare()
+*/
+
+/*!
+ \fn int QStringView::localeAwareCompare(QStringView other) const
+ \since 6.4
+
+ Compares this string view with the \a other string view and returns
+ an integer less than, equal to, or greater than zero if this string
+ view is less than, equal to, or greater than the \a other string view.
+
+ The comparison is performed in a locale- and also platform-dependent
+ manner. Use this function to present sorted lists of strings to the
+ user.
+
+ \sa {Comparing Strings}
+*/
+
+/*
+//! [utf16-or-latin1-or-ch]
+the UTF-16 string viewed by \a str, the Latin-1 string viewed by \a l1,
+or the character \a ch
+//! [utf16-or-latin1-or-ch]
+*/
+
+/*!
\fn bool QStringView::startsWith(QStringView str, Qt::CaseSensitivity cs) const
- \fn bool QStringView::startsWith(QLatin1String l1, Qt::CaseSensitivity cs) const
+ \fn bool QStringView::startsWith(QLatin1StringView l1, Qt::CaseSensitivity cs) const
\fn bool QStringView::startsWith(QChar ch) const
\fn bool QStringView::startsWith(QChar ch, Qt::CaseSensitivity cs) const
- Returns \c true if this string-view starts with string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively;
- otherwise returns \c false.
+ Returns \c true if this string view starts with
+ \include qstringview.cpp utf16-or-latin1-or-ch
+ respectively; otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (the default), the search is case-sensitive;
- otherwise the search is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa endsWith()
*/
/*!
\fn bool QStringView::endsWith(QStringView str, Qt::CaseSensitivity cs) const
- \fn bool QStringView::endsWith(QLatin1String l1, Qt::CaseSensitivity cs) const
+ \fn bool QStringView::endsWith(QLatin1StringView l1, Qt::CaseSensitivity cs) const
\fn bool QStringView::endsWith(QChar ch) const
\fn bool QStringView::endsWith(QChar ch, Qt::CaseSensitivity cs) const
- Returns \c true if this string-view ends with string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively;
- otherwise returns \c false.
+ Returns \c true if this string view ends with
+ \include qstringview.cpp utf16-or-latin1-or-ch
+ respectively; otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (the default), the search is case-sensitive;
- otherwise the search is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa startsWith()
*/
/*!
\fn qsizetype QStringView::indexOf(QStringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- \fn qsizetype QStringView::indexOf(QLatin1String l1, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \fn qsizetype QStringView::indexOf(QLatin1StringView l1, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
\fn qsizetype QStringView::indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
\since 5.14
- Returns the index position of the first occurrence of the string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively, in this string-view,
- searching forward from index position \a from. Returns -1 if \a str is not found.
+ Returns the index position of the first occurrence of
+ \include qstringview.cpp utf16-or-latin1-or-ch
+ respectively, in this string view, searching forward from index position
+ \a from. Returns -1 if \a str, \a l1 or \a ch is not found, respectively.
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
- If \a from is -1, the search starts at the last character; if it is
- -2, at the next to last character and so on.
+ \include qstring.qdocinc negative-index-start-search-from-end
\sa QString::indexOf()
*/
/*!
\fn bool QStringView::contains(QStringView str, Qt::CaseSensitivity cs) const
- \fn bool QStringView::contains(QLatin1String l1, Qt::CaseSensitivity cs) const
+ \fn bool QStringView::contains(QLatin1StringView l1, Qt::CaseSensitivity cs) const
\fn bool QStringView::contains(QChar c, Qt::CaseSensitivity cs) const
\since 5.14
- Returns \c true if this string-view contains an occurrence of the string-view
- \a str, Latin-1 string \a l1, or character \a ch; otherwise returns \c false.
+ Returns \c true if this string view contains an occurrence of
+ \include qstringview.cpp utf16-or-latin1-or-ch
+ respectively; otherwise returns \c false.
- If \a cs is Qt::CaseSensitive (the default), the search is
- case-sensitive; otherwise the search is case-insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa indexOf()
*/
/*!
\fn qsizetype QStringView::lastIndexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs) const
- \fn qsizetype QStringView::lastIndexOf(QLatin1String l1, qsizetype from, Qt::CaseSensitivity cs) const
+ \fn qsizetype QStringView::lastIndexOf(QLatin1StringView l1, qsizetype from, Qt::CaseSensitivity cs) const
\fn qsizetype QStringView::lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs) const
\since 5.14
- Returns the index position of the last occurrence of the string-view \a str,
- Latin-1 string \a l1, or character \a ch, respectively, in this string-view,
- searching backward from index position \a from. If \a from is -1 (default),
- the search starts at the last character; if \a from is -2, at the next to last
- character and so on. Returns -1 if \a str is not found.
+ Returns the index position of the last occurrence of
+ \include qstringview.cpp utf16-or-latin1-or-ch
+ respectively, in this string view, searching backward from index
+ position \a from.
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if \a str, \a l1 or \a c is not found, respectively.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \note When searching for a 0-length \a str or \a l1, the match at
+ the end of the data is excluded from the search by a negative \a
+ from, even though \c{-1} is normally thought of as searching from
+ the end of the string view: the match at the end is \e after the
+ last character, so it is excluded. To include such a final empty
+ match, either give a positive value for \a from or omit the \a from
+ parameter entirely.
+
+ \sa QString::lastIndexOf()
+*/
+
+/*!
+ \fn qsizetype QStringView::lastIndexOf(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \fn qsizetype QStringView::lastIndexOf(QLatin1StringView l1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ \since 6.2
+ \overload lastIndexOf()
- If \a cs is Qt::CaseSensitive (default), the search is case
- sensitive; otherwise the search is case insensitive.
+ Returns the index position of the last occurrence of the UTF-16 string viewed
+ by \a str or the Latin-1 string viewed by \a l1 respectively, in this string
+ view searching backward from the last character of this string view. Returns
+ -1 if \a str or \a l1 is not found, respectively.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa QString::lastIndexOf()
*/
/*!
+ \fn QStringView::lastIndexOf(QChar c, Qt::CaseSensitivity cs) const
+ \since 6.3
+ \overload lastIndexOf()
+*/
+
+#if QT_CONFIG(regularexpression)
+/*!
+ \fn qsizetype QStringView::indexOf(const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch) const
+ \since 6.1
+
+ Returns the index position of the first match of the regular
+ expression \a re in the string view, searching forward from index
+ position \a from. Returns -1 if \a re didn't match anywhere.
+
+ If the match is successful and \a rmatch is not \nullptr, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ \note Due to how the regular expression matching algorithm works,
+ this function will actually match repeatedly from the beginning of
+ the string view until the position \a from is reached.
+*/
+
+/*!
+ \fn qsizetype QStringView::lastIndexOf(const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch) const
+ \since 6.1
+
+ Returns the index position of the last match of the regular
+ expression \a re in the string view, which starts before the index
+ position \a from.
+
+ \include qstring.qdocinc negative-index-start-search-from-end
+
+ Returns -1 if \a re didn't match anywhere.
+
+ If the match is successful and \a rmatch is not \nullptr, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ \note Due to how the regular expression matching algorithm works,
+ this function will actually match repeatedly from the beginning of
+ the string view until the position \a from is reached.
+
+ \note When searching for a regular expression \a re that may match
+ 0 characters, the match at the end of the data is excluded from the
+ search by a negative \a from, even though \c{-1} is normally
+ thought of as searching from the end of the string view: the match
+ at the end is \e after the last character, so it is excluded. To
+ include such a final empty match, either give a positive value for
+ \a from or omit the \a from parameter entirely.
+*/
+
+/*!
+ \fn qsizetype QStringView::lastIndexOf(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const
+ \since 6.2
+
+ Returns the index position of the last match of the regular
+ expression \a re in the string view. Returns -1 if \a re didn't match
+ anywhere.
+
+ If the match is successful and \a rmatch is not \nullptr, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ \note Due to how the regular expression matching algorithm works,
+ this function will actually match repeatedly from the beginning of
+ the string view until the end of the string view is reached.
+*/
+
+/*!
+ \fn bool QStringView::contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch) const
+ \since 6.1
+
+ Returns \c true if the regular expression \a re matches somewhere in this
+ string view; otherwise returns \c false.
+
+ If the match is successful and \a rmatch is not \nullptr, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ \sa QRegularExpression::match()
+*/
+
+/*!
+ \fn qsizetype QStringView::count(const QRegularExpression &re) const
+ \since 6.1
+
+ Returns the number of times the regular expression \a re matches
+ in the string view.
+
+ For historical reasons, this function counts overlapping matches.
+ This behavior is different from simply iterating over the matches
+ in the string view using QRegularExpressionMatchIterator.
+
+ \sa QRegularExpression::globalMatch()
+
+*/
+#endif // QT_CONFIG(regularexpression)
+
+/*!
\fn QByteArray QStringView::toLatin1() const
Returns a Latin-1 representation of the string as a QByteArray.
@@ -895,7 +1034,7 @@ QT_BEGIN_NAMESPACE
/*!
\fn QByteArray QStringView::toUtf8() const
- Returns a UTF-8 representation of the string as a QByteArray.
+ Returns a UTF-8 representation of the string view as a QByteArray.
UTF-8 is a Unicode codec and can represent all characters in a Unicode
string like QString.
@@ -906,11 +1045,11 @@ QT_BEGIN_NAMESPACE
/*!
\fn QList<uint> QStringView::toUcs4() const
- Returns a UCS-4/UTF-32 representation of the string as a QList<uint>.
+ Returns a UCS-4/UTF-32 representation of the string view as a QList<uint>.
UCS-4 is a Unicode codec and therefore it is lossless. All characters from
- this string will be encoded in UCS-4. Any invalid sequence of code units in
- this string is replaced by the Unicode replacement character
+ this string view will be encoded in UCS-4. Any invalid sequence of code units in
+ this string view is replaced by the Unicode replacement character
(QChar::ReplacementCharacter, which corresponds to \c{U+FFFD}).
The returned list is not 0-terminated.
@@ -925,7 +1064,7 @@ QT_BEGIN_NAMESPACE
Convert \a s to a QStringView ignoring \c{s.isNull()}.
- Returns a string-view that references \a{s}' data, but is never null.
+ Returns a string view that references \a{s}' data, but is never null.
This is a faster way to convert a QString to a QStringView,
if null QStrings can legitimately be treated as empty ones.
@@ -937,7 +1076,7 @@ QT_BEGIN_NAMESPACE
\fn bool QStringView::isRightToLeft() const
\since 5.11
- Returns \c true if the string is read right to left.
+ Returns \c true if the string view is read right to left.
\sa QString::isRightToLeft()
*/
@@ -946,7 +1085,7 @@ QT_BEGIN_NAMESPACE
\fn bool QStringView::isValidUtf16() const
\since 5.15
- Returns \c true if the string contains valid UTF-16 encoded data,
+ Returns \c true if the string view contains valid UTF-16 encoded data,
or \c false otherwise.
Note that this function does not perform any special validation of the
@@ -958,14 +1097,40 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \fn bool QStringView::isLower() const
+ \since 6.7
+ Returns \c true if this view is identical to its lowercase folding.
+
+ Note that this does \e not mean that the string view does not contain
+ uppercase letters (some uppercase letters do not have a lowercase
+ folding; they are left unchanged by toString().toLower()).
+ For more information, refer to the Unicode standard, section 3.13.
+
+ \sa QChar::toLower(), isUpper()
+*/
+
+/*!
+ \fn bool QStringView::isUpper() const
+ \since 6.7
+ Returns \c true if this view is identical to its uppercase folding.
+
+ Note that this does \e not mean that the the string view does not contain
+ lowercase letters (some lowercase letters do not have a uppercase
+ folding; they are left unchanged by toString().toUpper()).
+ For more information, refer to the Unicode standard, section 3.13.
+
+ \sa QChar::toUpper(), isLower()
+*/
+
+/*!
\fn QStringView::toWCharArray(wchar_t *array) const
\since 5.14
- Transcribes this string into the given \a array.
+ Transcribes this string view into the given \a array.
The caller is responsible for ensuring \a array is large enough to hold the
- \c wchar_t encoding of this string (allocating the array with the same length
- as the string is always sufficient). The array is encoded in UTF-16 on
+ \c wchar_t encoding of this string view (allocating the array with the same length
+ as the string view is always sufficient). The array is encoded in UTF-16 on
platforms where \c wchar_t is 2 bytes wide (e.g. Windows); otherwise (Unix
systems), \c wchar_t is assumed to be 4 bytes wide and the data is written
in UCS-4.
@@ -984,10 +1149,9 @@ QT_BEGIN_NAMESPACE
\overload count()
Returns the number of occurrences of the character \a ch in the
- string reference.
+ string view.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa QString::count(), contains(), indexOf()
*/
@@ -999,10 +1163,23 @@ QT_BEGIN_NAMESPACE
\overload count()
Returns the number of (potentially overlapping) occurrences of the
- string reference \a str in this string reference.
+ string view \a str in this string view.
- If \a cs is Qt::CaseSensitive (default), the search is
- case sensitive; otherwise the search is case insensitive.
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
+
+ \sa QString::count(), contains(), indexOf()
+*/
+
+/*!
+ \fn qsizetype QStringView::count(QLatin1StringView l1, Qt::CaseSensitivity cs) const noexcept
+
+ \since 6.4
+ \overload count()
+
+ Returns the number of (potentially overlapping) occurrences of the
+ Latin-1 string viewed by \a l1 in this string view.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {search}
\sa QString::count(), contains(), indexOf()
*/
@@ -1010,15 +1187,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn qint64 QStringView::toLongLong(bool *ok, int base) const
- Returns the string converted to a \c{long long} using base \a
+ Returns the string view converted to a \c{long long} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1032,15 +1209,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn quint64 QStringView::toULongLong(bool *ok, int base) const
- Returns the string converted to an \c{unsigned long long} using base \a
+ Returns the string view converted to an \c{unsigned long long} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1054,15 +1231,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn long QStringView::toLong(bool *ok, int base) const
- Returns the string converted to a \c long using base \a
+ Returns the string view converted to a \c long using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1076,15 +1253,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn ulong QStringView::toULong(bool *ok, int base) const
- Returns the string converted to an \c{unsigned long} using base \a
+ Returns the string view converted to an \c{unsigned long} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1098,15 +1275,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn int QStringView::toInt(bool *ok, int base) const
- Returns the string converted to an \c int using base \a
+ Returns the string view converted to an \c int using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1120,15 +1297,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn uint QStringView::toUInt(bool *ok, int base) const
- Returns the string converted to an \c{unsigned int} using base \a
+ Returns the string view converted to an \c{unsigned int} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1142,15 +1319,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn short QStringView::toShort(bool *ok, int base) const
- Returns the string converted to a \c short using base \a
+ Returns the string view converted to a \c short using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1164,15 +1341,15 @@ QT_BEGIN_NAMESPACE
/*!
\fn ushort QStringView::toUShort(bool *ok, int base) const
- Returns the string converted to an \c{unsigned short} using base \a
+ Returns the string view converted to an \c{unsigned short} using base \a
base, which is 10 by default and must be between 2 and 36, or 0.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
- If \a base is 0, the C language convention is used: If the string
- begins with "0x", base 16 is used; if the string begins with "0",
+ If \a base is 0, the C language convention is used: if the string view
+ begins with "0x", base 16 is used; otherwise, if the string view begins with "0",
base 8 is used; otherwise, base 10 is used.
The string conversion will always happen in the 'C' locale. For locale
@@ -1186,7 +1363,7 @@ QT_BEGIN_NAMESPACE
/*!
\fn double QStringView::toDouble(bool *ok) const
- Returns the string converted to a \c double value.
+ Returns the string view converted to a \c double value.
Returns an infinity if the conversion overflows or 0.0 if the
conversion fails for other reasons (e.g. underflow).
@@ -1209,7 +1386,7 @@ QT_BEGIN_NAMESPACE
/*!
\fn float QStringView::toFloat(bool *ok) const
- Returns the string converted to a \c float value.
+ Returns the string view converted to a \c float value.
Returns an infinity if the conversion overflows or 0.0 if the
conversion fails for other reasons (e.g. underflow).
@@ -1227,11 +1404,11 @@ QT_BEGIN_NAMESPACE
/*!
- \fn QStringView::tokenize(Needle &&sep, Flags...flags) const
- \fn QLatin1String::tokenize(Needle &&sep, Flags...flags) const
- \fn QString::tokenize(Needle &&sep, Flags...flags) const &
- \fn QString::tokenize(Needle &&sep, Flags...flags) const &&
- \fn QString::tokenize(Needle &&sep, Flags...flags) &&
+ \fn template <typename Needle, typename...Flags> auto QStringView::tokenize(Needle &&sep, Flags...flags) const
+ \fn template <typename Needle, typename...Flags> auto QLatin1StringView::tokenize(Needle &&sep, Flags...flags) const
+ \fn template <typename Needle, typename...Flags> auto QString::tokenize(Needle &&sep, Flags...flags) const &
+ \fn template <typename Needle, typename...Flags> auto QString::tokenize(Needle &&sep, Flags...flags) const &&
+ \fn template <typename Needle, typename...Flags> auto QString::tokenize(Needle &&sep, Flags...flags) &&
Splits the string into substring views wherever \a sep occurs, and
returns a lazy sequence of those strings.
@@ -1267,4 +1444,13 @@ QT_BEGIN_NAMESPACE
\sa QStringTokenizer, qTokenize()
*/
+/*!
+ \fn QStringView::operator std::u16string_view() const
+ \since 6.7
+
+ Converts this QStringView object to a \c{std::u16string_view} object.
+ The returned view will have the same data pointer and length of
+ this view.
+*/
+
QT_END_NAMESPACE
diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h
index a4d0a78e5b..ab97d834d3 100644
--- a/src/corelib/text/qstringview.h
+++ b/src/corelib/text/qstringview.h
@@ -1,65 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Copyright (C) 2019 Mail.ru Group.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// Copyright (C) 2019 Mail.ru Group.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QSTRINGVIEW_H
#define QSTRINGVIEW_H
-/*
- This macro enables three "levels" of QStringView support:
-
- 1. offer QStringView, overload some functions taking QString with
- QStringView
-
- 2. Obsolete: QStringRef and its overloads have been removed.
-
- 3. like 2, but replace functions taking QString, too.
-*/
-#ifndef QT_STRINGVIEW_LEVEL
-# define QT_STRINGVIEW_LEVEL 1
-#endif
-
#include <QtCore/qchar.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qstringliteral.h>
#include <QtCore/qstringalgorithms.h>
#include <string>
+#include <string_view>
+#include <QtCore/q20type_traits.h>
#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
Q_FORWARD_DECLARE_CF_TYPE(CFString);
@@ -71,6 +24,10 @@ QT_BEGIN_NAMESPACE
class QString;
class QStringView;
class QRegularExpression;
+class QRegularExpressionMatch;
+#ifdef Q_QDOC
+class QUtf8StringView;
+#endif
namespace QtPrivate {
template <typename Char>
@@ -82,7 +39,7 @@ struct IsCompatibleCharTypeHelper
(std::is_same<Char, wchar_t>::value && sizeof(wchar_t) == sizeof(QChar))> {};
template <typename Char>
struct IsCompatibleCharType
- : IsCompatibleCharTypeHelper<typename std::remove_cv<typename std::remove_reference<Char>::type>::type> {};
+ : IsCompatibleCharTypeHelper<q20::remove_cvref_t<Char>> {};
template <typename Pointer>
struct IsCompatiblePointerHelper : std::false_type {};
@@ -91,7 +48,7 @@ struct IsCompatiblePointerHelper<Char*>
: IsCompatibleCharType<Char> {};
template <typename Pointer>
struct IsCompatiblePointer
- : IsCompatiblePointerHelper<typename std::remove_cv<typename std::remove_reference<Pointer>::type>::type> {};
+ : IsCompatiblePointerHelper<q20::remove_cvref_t<Pointer>> {};
template <typename T, typename Enable = void>
struct IsContainerCompatibleWithQStringView : std::false_type {};
@@ -148,16 +105,10 @@ private:
using if_compatible_container = typename std::enable_if<QtPrivate::IsContainerCompatibleWithQStringView<T>::value, bool>::type;
template <typename Char>
- static qsizetype lengthHelperPointer(const Char *str) noexcept
+ static constexpr qsizetype lengthHelperPointer(const Char *str) noexcept
{
-#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL)
- if (__builtin_constant_p(*str)) {
- qsizetype result = 0;
- while (*str++)
- ++result;
- return result;
- }
-#endif
+ if (q20::is_constant_evaluated())
+ return std::char_traits<Char>::length(str);
return QtPrivate::qustrlen(reinterpret_cast<const char16_t *>(str));
}
static qsizetype lengthHelperPointer(const QChar *str) noexcept
@@ -165,20 +116,6 @@ private:
return QtPrivate::qustrlen(reinterpret_cast<const char16_t *>(str));
}
- template <typename Container>
- static constexpr qsizetype lengthHelperContainer(const Container &c) noexcept
- {
- return qsizetype(std::size(c));
- }
-
- template <typename Char, size_t N>
- static constexpr qsizetype lengthHelperContainer(const Char (&str)[N]) noexcept
- {
- const auto it = std::char_traits<Char>::find(str, N, Char(0));
- const auto end = it ? it : std::next(str, N);
- return qsizetype(std::distance(str, end));
- }
-
template <typename Char>
static const storage_type *castHelper(const Char *str) noexcept
{ return reinterpret_cast<const storage_type*>(str); }
@@ -186,21 +123,26 @@ private:
{ return str; }
public:
- constexpr QStringView() noexcept
- : m_size(0), m_data(nullptr) {}
+ constexpr QStringView() noexcept {}
constexpr QStringView(std::nullptr_t) noexcept
: QStringView() {}
template <typename Char, if_compatible_char<Char> = true>
constexpr QStringView(const Char *str, qsizetype len)
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED)
+ : m_data(castHelper(str)),
+ m_size((Q_ASSERT(len >= 0), Q_ASSERT(str || !len), len))
+#else
: m_size((Q_ASSERT(len >= 0), Q_ASSERT(str || !len), len)),
- m_data(castHelper(str)) {}
+ m_data(castHelper(str))
+#endif
+ {}
template <typename Char, if_compatible_char<Char> = true>
constexpr QStringView(const Char *f, const Char *l)
: QStringView(f, l - f) {}
-#ifdef Q_CLANG_QDOC
+#ifdef Q_QDOC
template <typename Char, size_t N>
constexpr QStringView(const Char (&array)[N]) noexcept;
@@ -213,7 +155,7 @@ public:
: QStringView(str, str ? lengthHelperPointer(str) : 0) {}
#endif
-#ifdef Q_CLANG_QDOC
+#ifdef Q_QDOC
QStringView(const QString &str) noexcept;
#else
template <typename String, if_compatible_qstring_like<String> = true>
@@ -222,196 +164,293 @@ public:
#endif
template <typename Container, if_compatible_container<Container> = true>
- constexpr QStringView(const Container &c) noexcept
- : QStringView(std::data(c), lengthHelperContainer(c)) {}
+ constexpr Q_ALWAYS_INLINE QStringView(const Container &c) noexcept
+ : QStringView(std::data(c), QtPrivate::lengthHelperContainer(c)) {}
template <typename Char, size_t Size, if_compatible_char<Char> = true>
[[nodiscard]] constexpr static QStringView fromArray(const Char (&string)[Size]) noexcept
{ return QStringView(string, Size); }
- Q_REQUIRED_RESULT inline QString toString() const; // defined in qstring.h
+ [[nodiscard]] inline QString toString() const; // defined in qstring.h
#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
// defined in qcore_foundation.mm
- Q_REQUIRED_RESULT Q_CORE_EXPORT CFStringRef toCFString() const Q_DECL_CF_RETURNS_RETAINED;
- Q_REQUIRED_RESULT Q_CORE_EXPORT NSString *toNSString() const Q_DECL_NS_RETURNS_AUTORELEASED;
+ [[nodiscard]] Q_CORE_EXPORT CFStringRef toCFString() const Q_DECL_CF_RETURNS_RETAINED;
+ [[nodiscard]] Q_CORE_EXPORT NSString *toNSString() const Q_DECL_NS_RETURNS_AUTORELEASED;
#endif
- Q_REQUIRED_RESULT constexpr qsizetype size() const noexcept { return m_size; }
- Q_REQUIRED_RESULT const_pointer data() const noexcept { return reinterpret_cast<const_pointer>(m_data); }
- Q_REQUIRED_RESULT const_pointer constData() const noexcept { return data(); }
- Q_REQUIRED_RESULT constexpr const storage_type *utf16() const noexcept { return m_data; }
+ [[nodiscard]] constexpr qsizetype size() const noexcept { return m_size; }
+ [[nodiscard]] const_pointer data() const noexcept { return reinterpret_cast<const_pointer>(m_data); }
+ [[nodiscard]] const_pointer constData() const noexcept { return data(); }
+ [[nodiscard]] constexpr const storage_type *utf16() const noexcept { return m_data; }
- Q_REQUIRED_RESULT constexpr QChar operator[](qsizetype n) const
- { return Q_ASSERT(n >= 0), Q_ASSERT(n < size()), QChar(m_data[n]); }
+ [[nodiscard]] constexpr QChar operator[](qsizetype n) const
+ { verify(n, 1); return QChar(m_data[n]); }
//
// QString API
//
template <typename...Args>
- Q_REQUIRED_RESULT inline QString arg(Args &&...args) const; // defined in qstring.h
+ [[nodiscard]] inline QString arg(Args &&...args) const; // defined in qstring.h
- Q_REQUIRED_RESULT QByteArray toLatin1() const { return QtPrivate::convertToLatin1(*this); }
- Q_REQUIRED_RESULT QByteArray toUtf8() const { return QtPrivate::convertToUtf8(*this); }
- Q_REQUIRED_RESULT QByteArray toLocal8Bit() const { return QtPrivate::convertToLocal8Bit(*this); }
- Q_REQUIRED_RESULT inline QList<uint> toUcs4() const; // defined in qlist.h
+ [[nodiscard]] QByteArray toLatin1() const { return QtPrivate::convertToLatin1(*this); }
+ [[nodiscard]] QByteArray toUtf8() const { return QtPrivate::convertToUtf8(*this); }
+ [[nodiscard]] QByteArray toLocal8Bit() const { return QtPrivate::convertToLocal8Bit(*this); }
+ [[nodiscard]] inline QList<uint> toUcs4() const; // defined in qlist.h ### Qt 7 char32_t
- Q_REQUIRED_RESULT constexpr QChar at(qsizetype n) const { return (*this)[n]; }
+ [[nodiscard]] constexpr QChar at(qsizetype n) const noexcept { return (*this)[n]; }
- Q_REQUIRED_RESULT constexpr QStringView mid(qsizetype pos, qsizetype n = -1) const
+ [[nodiscard]] constexpr QStringView mid(qsizetype pos, qsizetype n = -1) const noexcept
{
using namespace QtPrivate;
auto result = QContainerImplHelper::mid(size(), &pos, &n);
return result == QContainerImplHelper::Null ? QStringView() : QStringView(m_data + pos, n);
}
- Q_REQUIRED_RESULT constexpr QStringView left(qsizetype n) const
+ [[nodiscard]] constexpr QStringView left(qsizetype n) const noexcept
{
if (size_t(n) >= size_t(size()))
n = size();
return QStringView(m_data, n);
}
- Q_REQUIRED_RESULT constexpr QStringView right(qsizetype n) const
+ [[nodiscard]] constexpr QStringView right(qsizetype n) const noexcept
{
if (size_t(n) >= size_t(size()))
n = size();
return QStringView(m_data + m_size - n, n);
}
- Q_REQUIRED_RESULT constexpr QStringView first(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QStringView(m_data, n); }
- Q_REQUIRED_RESULT constexpr QStringView last(qsizetype n) const
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QStringView(m_data + size() - n, n); }
- Q_REQUIRED_RESULT constexpr QStringView sliced(qsizetype pos) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(pos <= size()); return QStringView(m_data + pos, size() - pos); }
- Q_REQUIRED_RESULT constexpr QStringView sliced(qsizetype pos, qsizetype n) const
- { Q_ASSERT(pos >= 0); Q_ASSERT(n >= 0); Q_ASSERT(size_t(pos) + size_t(n) <= size_t(size())); return QStringView(m_data + pos, n); }
- Q_REQUIRED_RESULT constexpr QStringView chopped(qsizetype n) const
- { return Q_ASSERT(n >= 0), Q_ASSERT(n <= size()), QStringView(m_data, m_size - n); }
+ [[nodiscard]] constexpr QStringView first(qsizetype n) const noexcept
+ { verify(0, n); return sliced(0, n); }
+ [[nodiscard]] constexpr QStringView last(qsizetype n) const noexcept
+ { verify(0, n); return sliced(size() - n, n); }
+ [[nodiscard]] constexpr QStringView sliced(qsizetype pos) const noexcept
+ { verify(pos, 0); return QStringView(m_data + pos, size() - pos); }
+ [[nodiscard]] constexpr QStringView sliced(qsizetype pos, qsizetype n) const noexcept
+ { verify(pos, n); return QStringView(m_data + pos, n); }
+ [[nodiscard]] constexpr QStringView chopped(qsizetype n) const noexcept
+ { verify(0, n); return sliced(0, m_size - n); }
- constexpr void truncate(qsizetype n)
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); m_size = n; }
- constexpr void chop(qsizetype n)
- { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); m_size -= n; }
+ constexpr void truncate(qsizetype n) noexcept
+ { verify(0, n); ; m_size = n; }
+ constexpr void chop(qsizetype n) noexcept
+ { verify(0, n); m_size -= n; }
- Q_REQUIRED_RESULT QStringView trimmed() const noexcept { return QtPrivate::trimmed(*this); }
+ [[nodiscard]] QStringView trimmed() const noexcept { return QtPrivate::trimmed(*this); }
template <typename Needle, typename...Flags>
- Q_REQUIRED_RESULT constexpr inline auto tokenize(Needle &&needle, Flags...flags) const
+ [[nodiscard]] constexpr inline auto tokenize(Needle &&needle, Flags...flags) const
noexcept(noexcept(qTokenize(std::declval<const QStringView&>(), std::forward<Needle>(needle), flags...)))
-> decltype(qTokenize(*this, std::forward<Needle>(needle), flags...))
{ return qTokenize(*this, std::forward<Needle>(needle), flags...); }
- Q_REQUIRED_RESULT int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::compareStrings(*this, other, cs); }
- Q_REQUIRED_RESULT inline int compare(QLatin1String other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT constexpr int compare(QChar c) const noexcept
+ [[nodiscard]] inline int compare(QLatin1StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] inline int compare(QUtf8StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] constexpr int compare(QChar c) const noexcept
{ return size() >= 1 ? compare_single_char_helper(*utf16() - c.unicode()) : -1; }
- Q_REQUIRED_RESULT int compare(QChar c, Qt::CaseSensitivity cs) const noexcept
+ [[nodiscard]] int compare(QChar c, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::compareStrings(*this, QStringView(&c, 1), cs); }
- Q_REQUIRED_RESULT bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] inline int localeAwareCompare(QStringView other) const;
+
+ [[nodiscard]] bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::startsWith(*this, s, cs); }
- Q_REQUIRED_RESULT inline bool startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT bool startsWith(QChar c) const noexcept
+ [[nodiscard]] inline bool startsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] bool startsWith(QChar c) const noexcept
{ return !empty() && front() == c; }
- Q_REQUIRED_RESULT bool startsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
+ [[nodiscard]] bool startsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::startsWith(*this, QStringView(&c, 1), cs); }
- Q_REQUIRED_RESULT bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::endsWith(*this, s, cs); }
- Q_REQUIRED_RESULT inline bool endsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT bool endsWith(QChar c) const noexcept
+ [[nodiscard]] inline bool endsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] bool endsWith(QChar c) const noexcept
{ return !empty() && back() == c; }
- Q_REQUIRED_RESULT bool endsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
+ [[nodiscard]] bool endsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
{ return QtPrivate::endsWith(*this, QStringView(&c, 1), cs); }
- Q_REQUIRED_RESULT qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::findString(*this, from, QStringView(&c, 1), cs); }
- Q_REQUIRED_RESULT qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::findString(*this, from, c.unicode(), cs); }
+ [[nodiscard]] qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::findString(*this, from, s, cs); }
- Q_REQUIRED_RESULT inline qsizetype indexOf(QLatin1String s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] inline qsizetype indexOf(QLatin1StringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return indexOf(QStringView(&c, 1), 0, cs) != qsizetype(-1); }
- Q_REQUIRED_RESULT bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return indexOf(s, 0, cs) != qsizetype(-1); }
- Q_REQUIRED_RESULT inline bool contains(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] inline bool contains(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT qsizetype count(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] qsizetype count(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::count(*this, c, cs); }
- Q_REQUIRED_RESULT qsizetype count(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] qsizetype count(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::count(*this, s, cs); }
-
- Q_REQUIRED_RESULT qsizetype lastIndexOf(QChar c, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
- { return QtPrivate::lastIndexOf(*this, from, QStringView(&c, 1), cs); }
- Q_REQUIRED_RESULT qsizetype lastIndexOf(QStringView s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ [[nodiscard]] inline qsizetype count(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+
+ [[nodiscard]] qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(c, -1, cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return QtPrivate::lastIndexOf(*this, from, c.unicode(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ { return lastIndexOf(s, size(), cs); }
+ [[nodiscard]] qsizetype lastIndexOf(QStringView s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::lastIndexOf(*this, from, s, cs); }
- Q_REQUIRED_RESULT inline qsizetype lastIndexOf(QLatin1String s, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] inline qsizetype lastIndexOf(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] inline qsizetype lastIndexOf(QLatin1StringView s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
- Q_REQUIRED_RESULT bool isRightToLeft() const noexcept
+#if QT_CONFIG(regularexpression)
+ [[nodiscard]] qsizetype indexOf(const QRegularExpression &re, qsizetype from = 0, QRegularExpressionMatch *rmatch = nullptr) const
+ {
+ return QtPrivate::indexOf(*this, re, from, rmatch);
+ }
+#ifdef Q_QDOC
+ [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const;
+#else
+ // prevent an ambiguity when called like this: lastIndexOf(re, 0)
+ template <typename T = QRegularExpressionMatch, std::enable_if_t<std::is_same_v<T, QRegularExpressionMatch>, bool> = false>
+ [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, T *rmatch = nullptr) const
+ {
+ return QtPrivate::lastIndexOf(*this, re, size(), rmatch);
+ }
+#endif
+ [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch = nullptr) const
+ {
+ return QtPrivate::lastIndexOf(*this, re, from, rmatch);
+ }
+ [[nodiscard]] bool contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const
+ {
+ return QtPrivate::contains(*this, re, rmatch);
+ }
+ [[nodiscard]] qsizetype count(const QRegularExpression &re) const
+ {
+ return QtPrivate::count(*this, re);
+ }
+#endif
+
+ [[nodiscard]] bool isRightToLeft() const noexcept
{ return QtPrivate::isRightToLeft(*this); }
- Q_REQUIRED_RESULT bool isValidUtf16() const noexcept
+ [[nodiscard]] bool isValidUtf16() const noexcept
{ return QtPrivate::isValidUtf16(*this); }
- Q_REQUIRED_RESULT inline short toShort(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline ushort toUShort(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline int toInt(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline uint toUInt(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline long toLong(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline ulong toULong(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline qlonglong toLongLong(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT inline qulonglong toULongLong(bool *ok = nullptr, int base = 10) const;
- Q_REQUIRED_RESULT Q_CORE_EXPORT float toFloat(bool *ok = nullptr) const;
- Q_REQUIRED_RESULT Q_CORE_EXPORT double toDouble(bool *ok = nullptr) const;
+ [[nodiscard]] bool isUpper() const noexcept
+ { return QtPrivate::isUpper(*this); }
+ [[nodiscard]] bool isLower() const noexcept
+ { return QtPrivate::isLower(*this); }
- Q_REQUIRED_RESULT inline qsizetype toWCharArray(wchar_t *array) const; // defined in qstring.h
+ [[nodiscard]] inline short toShort(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline ushort toUShort(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline int toInt(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline uint toUInt(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline long toLong(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline ulong toULong(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline qlonglong toLongLong(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] inline qulonglong toULongLong(bool *ok = nullptr, int base = 10) const;
+ [[nodiscard]] Q_CORE_EXPORT float toFloat(bool *ok = nullptr) const;
+ [[nodiscard]] Q_CORE_EXPORT double toDouble(bool *ok = nullptr) const;
+ [[nodiscard]] inline qsizetype toWCharArray(wchar_t *array) const; // defined in qstring.h
- Q_REQUIRED_RESULT Q_CORE_EXPORT
+
+ [[nodiscard]] Q_CORE_EXPORT
QList<QStringView> split(QStringView sep,
Qt::SplitBehavior behavior = Qt::KeepEmptyParts,
Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- Q_REQUIRED_RESULT Q_CORE_EXPORT
+ [[nodiscard]] Q_CORE_EXPORT
QList<QStringView> split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts,
Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
#if QT_CONFIG(regularexpression)
- Q_REQUIRED_RESULT Q_CORE_EXPORT
+ [[nodiscard]] Q_CORE_EXPORT
QList<QStringView> split(const QRegularExpression &sep,
Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const;
#endif
+ // QStringView <> QStringView
+ friend bool comparesEqual(const QStringView &lhs, const QStringView &rhs) noexcept
+ { return lhs.size() == rhs.size() && QtPrivate::equalStrings(lhs, rhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QStringView &lhs, const QStringView &rhs) noexcept
+ {
+ const int res = QtPrivate::compareStrings(lhs, rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QStringView)
+
+ // QStringView <> QChar
+ friend bool comparesEqual(const QStringView &lhs, QChar rhs) noexcept
+ { return lhs.size() == 1 && lhs[0] == rhs; }
+ friend Qt::strong_ordering compareThreeWay(const QStringView &lhs, QChar rhs) noexcept
+ { return compareThreeWay(lhs, QStringView(&rhs, 1)); }
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, QChar)
+
//
// STL compatibility API:
//
- Q_REQUIRED_RESULT const_iterator begin() const noexcept { return data(); }
- Q_REQUIRED_RESULT const_iterator end() const noexcept { return data() + size(); }
- Q_REQUIRED_RESULT const_iterator cbegin() const noexcept { return begin(); }
- Q_REQUIRED_RESULT const_iterator cend() const noexcept { return end(); }
- Q_REQUIRED_RESULT const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
- Q_REQUIRED_RESULT const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
- Q_REQUIRED_RESULT const_reverse_iterator crbegin() const noexcept { return rbegin(); }
- Q_REQUIRED_RESULT const_reverse_iterator crend() const noexcept { return rend(); }
-
- Q_REQUIRED_RESULT constexpr bool empty() const noexcept { return size() == 0; }
- Q_REQUIRED_RESULT constexpr QChar front() const { return Q_ASSERT(!empty()), QChar(m_data[0]); }
- Q_REQUIRED_RESULT constexpr QChar back() const { return Q_ASSERT(!empty()), QChar(m_data[m_size - 1]); }
+ [[nodiscard]] const_iterator begin() const noexcept { return data(); }
+ [[nodiscard]] const_iterator end() const noexcept { return data() + size(); }
+ [[nodiscard]] const_iterator cbegin() const noexcept { return begin(); }
+ [[nodiscard]] const_iterator cend() const noexcept { return end(); }
+ [[nodiscard]] const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
+ [[nodiscard]] const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
+ [[nodiscard]] const_reverse_iterator crbegin() const noexcept { return rbegin(); }
+ [[nodiscard]] const_reverse_iterator crend() const noexcept { return rend(); }
+
+ [[nodiscard]] constexpr bool empty() const noexcept { return size() == 0; }
+ [[nodiscard]] constexpr QChar front() const { return Q_ASSERT(!empty()), QChar(m_data[0]); }
+ [[nodiscard]] constexpr QChar back() const { return Q_ASSERT(!empty()), QChar(m_data[m_size - 1]); }
+
+ [[nodiscard]] Q_IMPLICIT operator std::u16string_view() const noexcept
+ { return std::u16string_view(m_data, size_t(m_size)); }
//
// Qt compatibility API:
//
- Q_REQUIRED_RESULT constexpr bool isNull() const noexcept { return !m_data; }
- Q_REQUIRED_RESULT constexpr bool isEmpty() const noexcept { return empty(); }
- Q_REQUIRED_RESULT constexpr int length() const /* not nothrow! */
- { return Q_ASSERT(int(size()) == size()), int(size()); }
- Q_REQUIRED_RESULT constexpr QChar first() const { return front(); }
- Q_REQUIRED_RESULT constexpr QChar last() const { return back(); }
+ [[nodiscard]] const_iterator constBegin() const noexcept { return begin(); }
+ [[nodiscard]] const_iterator constEnd() const noexcept { return end(); }
+ [[nodiscard]] constexpr bool isNull() const noexcept { return !m_data; }
+ [[nodiscard]] constexpr bool isEmpty() const noexcept { return empty(); }
+ [[nodiscard]] constexpr qsizetype length() const noexcept
+ { return size(); }
+ [[nodiscard]] constexpr QChar first() const { return front(); }
+ [[nodiscard]] constexpr QChar last() const { return back(); }
private:
- qsizetype m_size;
- const storage_type *m_data;
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED)
+ const storage_type *m_data = nullptr;
+ qsizetype m_size = 0;
+#else
+ qsizetype m_size = 0;
+ const storage_type *m_data = nullptr;
+#endif
+
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos = 0,
+ [[maybe_unused]] qsizetype n = 1) const
+ {
+ Q_ASSERT(pos >= 0);
+ Q_ASSERT(pos <= size());
+ Q_ASSERT(n >= 0);
+ Q_ASSERT(n <= size() - pos);
+ }
constexpr int compare_single_char_helper(int diff) const noexcept
{ return diff ? diff : size() > 1 ? 1 : 0; }
+
+ Q_CORE_EXPORT static bool equal_helper(QStringView sv, const char *data, qsizetype len);
+ Q_CORE_EXPORT static int compare_helper(QStringView sv, const char *data, qsizetype len);
+
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ friend bool comparesEqual(const QStringView &lhs, const QByteArrayView &rhs) noexcept
+ { return equal_helper(lhs, rhs.data(), rhs.size()); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QStringView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ const int res = compare_helper(lhs, rhs.data(), rhs.size());
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, QByteArrayView, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, QByteArray, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, const char *, QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
};
Q_DECLARE_TYPEINFO(QStringView, Q_PRIMITIVE_TYPE);
@@ -419,24 +458,45 @@ template <typename QStringLike, typename std::enable_if<
std::is_same<QStringLike, QString>::value,
bool>::type = true>
inline QStringView qToStringViewIgnoringNull(const QStringLike &s) noexcept
-{ return QStringView(s.data(), s.size()); }
+{ return QStringView(s.begin(), s.size()); }
// QChar inline functions:
-Q_REQUIRED_RESULT constexpr auto QChar::fromUcs4(char32_t c) noexcept
+[[nodiscard]] constexpr auto QChar::fromUcs4(char32_t c) noexcept
{
struct R {
char16_t chars[2];
- Q_REQUIRED_RESULT constexpr operator QStringView() const noexcept { return {begin(), end()}; }
- Q_REQUIRED_RESULT constexpr qsizetype size() const noexcept { return chars[1] ? 2 : 1; }
- Q_REQUIRED_RESULT constexpr const char16_t *begin() const noexcept { return chars; }
- Q_REQUIRED_RESULT constexpr const char16_t *end() const noexcept { return begin() + size(); }
+ [[nodiscard]] constexpr operator QStringView() const noexcept { return {begin(), end()}; }
+ [[nodiscard]] constexpr qsizetype size() const noexcept { return chars[1] ? 2 : 1; }
+ [[nodiscard]] constexpr const char16_t *begin() const noexcept { return chars; }
+ [[nodiscard]] constexpr const char16_t *end() const noexcept { return begin() + size(); }
};
return requiresSurrogates(c) ? R{{QChar::highSurrogate(c),
QChar::lowSurrogate(c)}} :
R{{char16_t(c), u'\0'}} ;
}
+qsizetype QtPrivate::findString(QStringView str, qsizetype from, QChar ch, Qt::CaseSensitivity cs) noexcept
+{
+ if (from < -str.size()) // from < 0 && abs(from) > str.size(), avoiding overflow
+ return -1;
+ if (from < 0)
+ from = qMax(from + str.size(), qsizetype(0));
+ if (from < str.size()) {
+ const char16_t *s = str.utf16();
+ char16_t c = ch.unicode();
+ const char16_t *n = s + from;
+ const char16_t *e = s + str.size();
+ if (cs == Qt::CaseSensitive)
+ n = qustrchr(QStringView(n, e), c);
+ else
+ n = qustrcasechr(QStringView(n, e), c);
+ if (n != e)
+ return n - s;
+ }
+ return -1;
+}
+
QT_END_NAMESPACE
#endif /* QSTRINGVIEW_H */
diff --git a/src/corelib/text/qt_attribution.json b/src/corelib/text/qt_attribution.json
index c555209f19..6235ec5c16 100644
--- a/src/corelib/text/qt_attribution.json
+++ b/src/corelib/text/qt_attribution.json
@@ -4,37 +4,41 @@
"Name": "Unicode Character Database (UCD)",
"QDocModule": "qtcore",
"QtUsage": "Qt Core uses data obtained from UCD files for working with characters and strings.",
- "Files": "For update, see qtbase/util/unicode/README",
- "Files": "qunicodetables_p.h qunicodetables.cpp",
+ "Comment": { "Files": "For update, see qtbase/util/unicode/README" },
+ "Files": [ "qunicodetables_p.h", "qunicodetables.cpp" ],
"Description": "The Unicode Character Database (UCD) is a set of files that
define the Unicode character properties and internal mappings.",
"Homepage": "https://www.unicode.org/ucd/",
- "Version": "Don't use the Unicode standard version;
- UCD has its own 'Revision' numbers, see the 'UAX #44, UCD' page",
- "Version": "26",
+ "Comment": {
+ "Version": [ "Don't use the Unicode standard version;",
+ "UCD has its own 'Revision' numbers",
+ "see the 'UAX #44, UCD' page (https://www.unicode.org/reports/tr44/)" ],
+ "License": [ "Will change to Unicode-3.0 on next update",
+ "util/unicode/main.cpp is updated to do that already",
+ "Please update the following and delete this note when that happens" ] },
+ "Version": "30",
"License": "Unicode License Agreement - Data Files and Software (2016)",
"LicenseId": "Unicode-DFS-2016",
- "LicenseFile": "UNICODE_LICENSE.txt",
- "Copyright": "Copyright (C) 1991-2018 Unicode, Inc."
+ "Copyright": "Copyright (C) 1991-2022 Unicode, Inc."
},
{
"Id": "unicode-cldr",
"Name": "Unicode Common Locale Data Repository (CLDR)",
"QDocModule": "qtcore",
"QtUsage": "Used in Qt Core (QTimeZone, QLocale).",
- "Files": "For update, see qtbase/util/locale_database/cldr2qlocalexml.py",
- "Files": "qlocale_data_p.h qtimezoneprivate_data_p.h",
+ "Comment": { "Files": "For update, see qtbase/util/locale_database/cldr2qlocalexml.py" },
+ "Files": [ "qlocale_data_p.h",
+ "../time/qtimezoneprivate_data_p.h", "../time/qhijricalendar_data_p.h",
+ "../time/qjalalicalendar_data_p.h", "../time/qromancalendar_data_p.h" ],
"Description": "The Unicode CLDR provides key building blocks for software to support the
world's languages, with the largest and most extensive standard repository of locale data
available.",
- "Homepage": "http://cldr.unicode.org/",
- "Version": "v36",
- "License": "// as specified in https://spdx.org/licenses/Unicode-DFS-2016.html",
- "License": "Unicode License Agreement - Data Files and Software (2016)",
- "LicenseId": "Unicode-DFS-2016",
- "LicenseFile": "UNICODE_LICENSE.txt",
- "Copyright": "Copyright (C) 1991-2019 Unicode, Inc."
+ "Homepage": "https://cldr.unicode.org/",
+ "Version": "v44.1",
+ "License": "Unicode License v3",
+ "LicenseId": "Unicode-3.0",
+ "Copyright": "Copyright (C) 2004-2023 Unicode, Inc."
}
]
diff --git a/src/corelib/text/qtextboundaryfinder.cpp b/src/corelib/text/qtextboundaryfinder.cpp
index dd0b96ed68..21d4c5153e 100644
--- a/src/corelib/text/qtextboundaryfinder.cpp
+++ b/src/corelib/text/qtextboundaryfinder.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <QtCore/qtextboundaryfinder.h>
#include <QtCore/qvarlengtharray.h>
@@ -56,7 +20,7 @@ static void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharA
case QTextBoundaryFinder::Line: options |= QUnicodeTools::LineBreaks; break;
default: break;
}
- QUnicodeTools::initCharAttributes(str, scriptItems.data(), scriptItems.count(), attributes, options);
+ QUnicodeTools::initCharAttributes(str, scriptItems.data(), scriptItems.size(), attributes, options);
}
/*!
@@ -73,8 +37,8 @@ static void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharA
QTextBoundaryFinder allows to find Unicode text boundaries in a
string, accordingly to the Unicode text boundary specification (see
- \l{http://www.unicode.org/reports/tr14/}{Unicode Standard Annex #14} and
- \l{http://www.unicode.org/reports/tr29/}{Unicode Standard Annex #29}).
+ \l{https://www.unicode.org/reports/tr14/}{Unicode Standard Annex #14} and
+ \l{https://www.unicode.org/reports/tr29/}{Unicode Standard Annex #29}).
QTextBoundaryFinder can operate on a QString in four possible
modes depending on the value of \a BoundaryType.
@@ -85,17 +49,17 @@ static void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharA
for example form one grapheme cluster as the user thinks of them
as one character, yet it is in this case represented by two
unicode code points
- (see \l{http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries}).
+ (see \l{https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries}).
Word boundaries are there to locate the start and end of what a
language considers to be a word
- (see \l{http://www.unicode.org/reports/tr29/#Word_Boundaries}).
+ (see \l{https://www.unicode.org/reports/tr29/#Word_Boundaries}).
Line break boundaries give possible places where a line break
might happen and sentence boundaries will show the beginning and
end of whole sentences
- (see \l{http://www.unicode.org/reports/tr29/#Sentence_Boundaries} and
- \l{http://www.unicode.org/reports/tr14/}).
+ (see \l{https://www.unicode.org/reports/tr29/#Sentence_Boundaries} and
+ \l{https://www.unicode.org/reports/tr14/}).
The first position in a string is always a valid boundary and
refers to the position before the first character. The last
@@ -123,11 +87,11 @@ static void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharA
Such a break opportunity might also be an item boundary
(either StartOfItem, EndOfItem, or combination of both),
a mandatory line break, or a soft hyphen.
- \value StartOfItem Since 5.0. The boundary finder is at the start of
+ \value [since 5.0] StartOfItem The boundary finder is at the start of
a grapheme, a word, a sentence, or a line.
- \value EndOfItem Since 5.0. The boundary finder is at the end of
+ \value [since 5.0] EndOfItem The boundary finder is at the end of
a grapheme, a word, a sentence, or a line.
- \value MandatoryBreak Since 5.0. The boundary finder is at the end of line
+ \value [since 5.0] MandatoryBreak The boundary finder is at the end of line
(can occur for a Line boundary type only).
\value SoftHyphen The boundary finder is at the soft hyphen
(can occur for a Line boundary type only).
@@ -209,9 +173,7 @@ QTextBoundaryFinder::QTextBoundaryFinder(BoundaryType type, const QString &strin
: t(type)
, s(string)
, sv(s)
- , pos(0)
, freeBuffer(true)
- , attributes(nullptr)
{
if (sv.size() > 0) {
attributes = (QCharAttributes *) malloc((sv.size() + 1) * sizeof(QCharAttributes));
@@ -236,7 +198,7 @@ QTextBoundaryFinder::QTextBoundaryFinder(BoundaryType type, const QString &strin
data required (bufferSize >= length + 1), it will use this
instead of allocating its own buffer.
- \warning QTextBoundaryFinder does not create a copy of \a chars. It is the
+ \warning QTextBoundaryFinder does not create a copy of \a string. It is the
application programmer's responsibility to ensure the array is allocated for
as long as the QTextBoundaryFinder object stays alive. The same applies to
\a buffer.
@@ -244,12 +206,10 @@ QTextBoundaryFinder::QTextBoundaryFinder(BoundaryType type, const QString &strin
QTextBoundaryFinder::QTextBoundaryFinder(BoundaryType type, QStringView string, unsigned char *buffer, qsizetype bufferSize)
: t(type)
, sv(string)
- , pos(0)
, freeBuffer(true)
- , attributes(nullptr)
{
if (!sv.isEmpty()) {
- if (buffer && (uint)bufferSize >= (sv.size() + 1) * sizeof(QCharAttributes)) {
+ if (buffer && bufferSize / int(sizeof(QCharAttributes)) >= sv.size() + 1) {
attributes = reinterpret_cast<QCharAttributes *>(buffer);
freeBuffer = false;
} else {
diff --git a/src/corelib/text/qtextboundaryfinder.h b/src/corelib/text/qtextboundaryfinder.h
index 0b1c910728..04e64fd69b 100644
--- a/src/corelib/text/qtextboundaryfinder.h
+++ b/src/corelib/text/qtextboundaryfinder.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QTEXTBOUNDARYFINDER_H
#define QTEXTBOUNDARYFINDER_H
@@ -99,7 +63,7 @@ private:
BoundaryType t = Grapheme;
QString s;
QStringView sv;
- qsizetype pos;
+ qsizetype pos = 0;
uint freeBuffer : 1;
uint unused : 31;
QCharAttributes *attributes = nullptr;
diff --git a/src/corelib/text/qtliterals.qdoc b/src/corelib/text/qtliterals.qdoc
new file mode 100644
index 0000000000..d108aeb615
--- /dev/null
+++ b/src/corelib/text/qtliterals.qdoc
@@ -0,0 +1,44 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \namespace QtLiterals
+ \inmodule QtCore
+
+ \brief The QtLiterals namespace declares literal operators for Qt types.
+*/
+
+/*!
+ \namespace Qt::Literals
+ \inmodule QtCore
+ \inheaderfile QString
+
+ \brief The Literals inline namespace declares literal operators for Qt types.
+*/
+
+/*!
+ \namespace Qt::Literals::StringLiterals
+ \inmodule QtCore
+ \inheaderfile QString
+
+ \brief The StringLiterals namespace declares string literal operators
+ for Qt types.
+
+ The inline Qt::Literals::StringLiterals namespace declares string literal
+ operators for Qt types. Because both \c Literals and \c StringLiterals
+ namespaces are declared as inline, the symbols from this namespace can be
+ accessed by adding one of the following to your code:
+
+ \code
+ // Makes visible only the literal operators declared in StringLiterals
+ using namespace Qt::Literals::StringLiterals;
+
+ // Makes visible literal operators declared in all inline namespaces
+ // inside Literals
+ using namespace Qt::Literals;
+
+ // Makes visible all symbols (including all literal operators) declared
+ // in the Qt namespace
+ using namespace Qt;
+ \endcode
+*/
diff --git a/src/corelib/text/qunicodetables.cpp b/src/corelib/text/qunicodetables.cpp
index 0809d338a5..dc93b99668 100644
--- a/src/corelib/text/qunicodetables.cpp
+++ b/src/corelib/text/qunicodetables.cpp
@@ -1,43 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/* This file is autogenerated from the Unicode 13.0 database. Do not edit */
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: Unicode-DFS-2016
+
+/* This file is autogenerated from the Unicode 15.1 database. Do not edit */
#include "qunicodetables_p.h"
@@ -45,7 +9,7 @@ QT_BEGIN_NAMESPACE
namespace QUnicodeTables {
-static const unsigned short uc_property_trie[] = {
+static constexpr unsigned short uc_property_trie[] = {
// [0x0..0x11000)
6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480,
@@ -87,784 +51,784 @@ static const unsigned short uc_property_trie[] = {
14032, 14064, 14096, 14128, 14160, 14192, 14224, 14256,
14288, 14320, 14352, 14384, 14416, 14448, 14480, 14512,
14544, 14576, 14608, 14640, 14672, 14704, 14736, 14768,
- 14544, 14544, 14544, 14544, 14800, 14832, 14864, 14896,
- 14928, 14960, 14544, 14992, 15024, 15056, 15088, 15120,
- 15152, 15184, 15216, 15248, 15280, 15312, 15344, 15376,
- 15408, 15408, 15408, 15408, 15408, 15408, 15408, 15408,
- 15440, 15440, 15440, 15440, 15472, 15504, 15536, 15568,
- 15600, 15632, 15440, 15664, 15696, 15728, 15760, 15792,
- 15824, 15856, 15888, 15920, 15952, 15984, 16016, 16048,
- 16080, 16112, 16144, 16176, 16208, 16208, 16208, 16240,
- 16272, 16304, 16336, 16368, 16400, 16432, 16432, 16464,
- 16496, 16528, 16560, 9936, 16592, 16624, 16624, 16656,
- 16688, 16688, 16688, 16688, 16688, 16688, 16720, 16752,
-
- 16784, 16816, 16848, 16880, 16912, 16944, 16976, 17008,
- 17040, 17072, 17104, 17104, 17136, 17168, 17200, 17232,
- 17264, 17296, 17328, 17360, 17296, 17392, 17424, 17456,
- 17488, 17488, 17520, 17552, 17584, 17584, 17616, 17648,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
-
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17712, 17744, 17744,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17808, 17840, 17872,
-
- 17904, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17968, 18000, 18032, 18064,
- 18096, 18096, 18096, 18096, 18096, 18096, 18096, 18096,
- 18128, 18160, 18192, 18224, 18256, 18288, 18288, 18320,
- 18352, 18384, 18416, 18448, 18480, 18512, 18544, 18576,
- 18608, 18640, 18672, 18704, 18736, 18768, 18800, 18832,
- 18864, 18896, 18928, 18960, 18992, 19024, 19056, 19088,
- 19120, 19152, 19184, 19216, 19248, 19280, 19312, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
-
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
-
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
-
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19856, 19888, 19920,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
-
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
-
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 20016, 20016, 20016, 20016, 20016, 20016, 20016, 20016,
- 20048, 20080, 20112, 20144, 20176, 20176, 20208, 20240,
- 20272, 20304, 20336, 20368, 20368, 20400, 20432, 20368,
- 20368, 20368, 20368, 20368, 20368, 20368, 20368, 20368,
- 20368, 20464, 20496, 20368, 20528, 20368, 20560, 20592,
- 20624, 20656, 20688, 20720, 20368, 20368, 20368, 20752,
- 20784, 20816, 20848, 20880, 20912, 20944, 20976, 21008,
-
- 21040, 21072, 21104, 9936, 21136, 21136, 21136, 21168,
- 21200, 21232, 21264, 21296, 21328, 21360, 21392, 21424,
- 9936, 9936, 9936, 9936, 21456, 21488, 21520, 21552,
- 21584, 21616, 21648, 21680, 21712, 21744, 21776, 9936,
- 21808, 21840, 21872, 21904, 21936, 21968, 22000, 22032,
- 22064, 22096, 22128, 22160, 9936, 9936, 9936, 9936,
- 22192, 22192, 22192, 22192, 22192, 22192, 22192, 22192,
- 22192, 22224, 22256, 22288, 9936, 9936, 9936, 9936,
- 22320, 22352, 22384, 22416, 22448, 22480, 8432, 22512,
- 22544, 22576, 8432, 8432, 22608, 22640, 22672, 22704,
- 22736, 22768, 22800, 22832, 22864, 8432, 22896, 22928,
- 22960, 22992, 23024, 23056, 23088, 23120, 8432, 8432,
- 23152, 23152, 23184, 8432, 23216, 23248, 23280, 23312,
- 23344, 23376, 8432, 8432, 8432, 8432, 8432, 8432,
- 8432, 8432, 8432, 23408, 23440, 23472, 8432, 8432,
- 23504, 23536, 23568, 8432, 8432, 23600, 23632, 23664,
+ 14800, 14800, 14832, 14864, 14896, 14928, 14960, 14992,
+ 15024, 15056, 15088, 15120, 15152, 15184, 15216, 15248,
+ 15280, 15312, 15344, 15376, 15408, 15440, 15472, 15504,
+ 15536, 15536, 15536, 15536, 15536, 15536, 15536, 15536,
+ 15568, 15600, 15568, 15568, 15632, 15664, 15696, 15728,
+ 15760, 15792, 15568, 15824, 15856, 15888, 15920, 15952,
+ 15984, 16016, 16048, 16080, 16112, 16144, 16176, 16208,
+ 16240, 16272, 16304, 16336, 16368, 16368, 16368, 16400,
+ 16432, 16464, 16496, 16528, 16560, 16592, 16592, 16624,
+ 16656, 16688, 16720, 9936, 16752, 16784, 16784, 16816,
+ 16848, 16848, 16848, 16848, 16848, 16848, 16880, 16912,
+
+ 16944, 16976, 17008, 17040, 17072, 17104, 17136, 17168,
+ 17200, 17232, 17264, 17296, 17328, 17360, 17392, 17424,
+ 17456, 17488, 17520, 17552, 17584, 17616, 17648, 17680,
+ 17712, 17712, 17744, 17776, 17808, 17808, 17840, 17872,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17936, 17968, 17968,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18000, 18000, 18000,
+ 18000, 18000, 18000, 18000, 18000, 18032, 18064, 18096,
+
+ 18128, 18160, 18160, 18160, 18160, 18160, 18160, 18160,
+ 18160, 18160, 18160, 18160, 18160, 18160, 18160, 18160,
+ 18160, 18160, 18160, 18160, 18160, 18160, 18160, 18160,
+ 18160, 18160, 18160, 18160, 18160, 18160, 18160, 18160,
+ 18160, 18160, 18160, 18160, 18192, 18224, 18256, 18288,
+ 18320, 18320, 18320, 18320, 18320, 18320, 18320, 18320,
+ 18352, 18384, 18416, 18448, 18480, 18512, 18512, 18544,
+ 18576, 18608, 18640, 18672, 18704, 18736, 18768, 18800,
+ 18832, 18864, 18896, 18928, 18960, 18992, 19024, 19056,
+ 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19312,
+ 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20048, 19856, 19888,
+ 19920, 19952, 19984, 20016, 20048, 19856, 19888, 19920,
+ 19952, 19984, 20016, 20048, 19856, 19888, 19920, 19952,
+
+ 19984, 20016, 20048, 19856, 19888, 19920, 19952, 19984,
+ 20016, 20048, 19856, 19888, 19920, 19952, 19984, 20016,
+ 20048, 19856, 19888, 19920, 19952, 19984, 20016, 20048,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20048, 19856, 19888,
+ 19920, 19952, 19984, 20016, 20048, 19856, 19888, 19920,
+ 19952, 19984, 20016, 20048, 19856, 19888, 19920, 19952,
+ 19984, 20016, 20048, 19856, 19888, 19920, 19952, 19984,
+ 20016, 20048, 19856, 19888, 19920, 19952, 19984, 20016,
+ 20048, 19856, 19888, 19920, 19952, 19984, 20016, 20048,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20048, 19856, 19888,
+ 19920, 19952, 19984, 20016, 20048, 19856, 19888, 19920,
+ 19952, 19984, 20016, 20048, 19856, 19888, 19920, 19952,
+ 19984, 20016, 20048, 19856, 19888, 19920, 19952, 19984,
+ 20016, 20048, 19856, 19888, 19920, 19952, 19984, 20016,
+
+ 20048, 19856, 19888, 19920, 19952, 19984, 20016, 20048,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20048, 19856, 19888,
+ 19920, 19952, 19984, 20016, 20048, 19856, 19888, 19920,
+ 19952, 19984, 20016, 20048, 19856, 19888, 19920, 19952,
+ 19984, 20016, 20048, 19856, 19888, 19920, 19952, 19984,
+ 20016, 20048, 19856, 19888, 19920, 19952, 19984, 20016,
+ 20048, 19856, 19888, 19920, 19952, 19984, 20016, 20048,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20048, 19856, 19888,
+ 19920, 19952, 19984, 20016, 20048, 19856, 19888, 19920,
+ 19952, 19984, 20016, 20048, 19856, 19888, 19920, 19952,
+ 19984, 20016, 20048, 19856, 19888, 19920, 19952, 19984,
+ 20016, 20048, 19856, 19888, 19920, 19952, 19984, 20016,
+ 20048, 19856, 19888, 19920, 19952, 19984, 20016, 20048,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+
+ 19888, 19920, 19952, 19984, 20016, 20048, 19856, 19888,
+ 19920, 19952, 19984, 20016, 20048, 19856, 19888, 19920,
+ 19952, 19984, 20016, 20048, 19856, 19888, 19920, 19952,
+ 19984, 20016, 20048, 19856, 19888, 19920, 19952, 19984,
+ 20016, 20048, 19856, 19888, 19920, 19952, 19984, 20016,
+ 20048, 19856, 19888, 19920, 19952, 19984, 20016, 20048,
+ 19856, 19888, 19920, 19952, 19984, 20016, 20048, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20080, 20112, 20144,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20208, 20208, 20208, 20208, 20208, 20208, 20208, 20208,
+ 20240, 20240, 20240, 20240, 20240, 20240, 20240, 20240,
+ 20272, 20304, 20336, 20368, 20400, 20400, 20432, 20464,
+ 20496, 20528, 20560, 20592, 20592, 20624, 20656, 20592,
+ 20592, 20592, 20688, 20720, 20592, 20592, 20592, 20592,
+ 20592, 20752, 20784, 20592, 20816, 20592, 20848, 20880,
+ 20912, 20944, 20976, 21008, 20592, 20592, 20592, 21040,
+ 21072, 21104, 21136, 21168, 21200, 21232, 21264, 21296,
+
+ 21328, 21360, 21392, 9936, 21424, 21424, 21424, 21456,
+ 21488, 21520, 21552, 21584, 21616, 21648, 21680, 21712,
+ 9936, 9936, 9936, 9936, 21744, 21776, 21808, 21840,
+ 21872, 21904, 21936, 21968, 22000, 22032, 22064, 9936,
+ 22096, 22128, 22160, 22192, 22224, 22256, 22288, 22320,
+ 22352, 22384, 22416, 22448, 22480, 22512, 9936, 9936,
+ 22544, 22544, 22544, 22544, 22544, 22544, 22544, 22544,
+ 22544, 22576, 22608, 22640, 22672, 22704, 9936, 9936,
+ 22736, 22768, 22800, 22832, 22864, 22896, 22928, 22960,
+ 22992, 23024, 22928, 22928, 23056, 23088, 23120, 23152,
+ 23184, 23216, 23248, 23280, 23312, 22928, 23344, 23376,
+ 23408, 23440, 23472, 23504, 23536, 23568, 22928, 22928,
+ 23600, 23600, 23632, 22928, 23664, 23696, 23728, 23760,
+ 23792, 23824, 22928, 22928, 22928, 22928, 22928, 22928,
+ 22928, 22928, 22928, 23856, 23888, 23920, 22928, 23952,
+ 23984, 24016, 24048, 24080, 24112, 24144, 24176, 24208,
// [0x11000..0x110000)
- 23696, 23952, 24208, 24464, 24720, 24976, 25232, 25488,
- 25744, 26000, 26256, 26512, 26768, 27024, 27280, 27536,
- 27792, 27792, 27792, 28048, 28304, 28560, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 28816, 28816, 29072, 29328, 29584, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 29840, 30096, 30352, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 30608, 30608, 30864, 31120, 26512, 26512, 31376, 31632,
- 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888,
- 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888,
- 31888, 31888, 31888, 31888, 31888, 31888, 31888, 32144,
- 31888, 31888, 32400, 32656, 32912, 33168, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 33424, 33680, 33936, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 34192, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 34448, 34704, 34960, 35216, 35472, 35728, 35984, 36240,
- 36496, 36496, 36752, 26512, 26512, 26512, 26512, 26512,
- 37008, 37264, 37520, 26512, 26512, 26512, 26512, 26512,
- 37776, 38032, 38288, 38288, 38544, 38800, 39056, 38288,
- 39312, 39568, 39824, 40080, 40336, 40592, 40848, 41104,
- 41360, 41616, 41872, 42128, 42384, 42384, 42384, 42640,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
-
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 43152, 43408,
- 43408, 43408, 43408, 43408, 43408, 43408, 43408, 43408,
- 43408, 43408, 43408, 43408, 43408, 43408, 43408, 43664,
- 43920, 44176, 44176, 44176, 44176, 44176, 44176, 44176,
- 44176, 44176, 44176, 44176, 44176, 44176, 44176, 44176,
- 44176, 44176, 44176, 44176, 44176, 44176, 44432, 44688,
- 44688, 44688, 44688, 44688, 44688, 44688, 44688, 44688,
- 44688, 44688, 44688, 44688, 44688, 44688, 44688, 44688,
- 44688, 44688, 44688, 44688, 44688, 44688, 44688, 44688,
- 44688, 44688, 44688, 44944, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 45200, 45200, 45456, 42384, 42384, 42384, 42384, 42640,
- 45712, 45712, 45712, 45712, 45712, 45712, 45712, 45712,
- 45712, 45712, 45712, 45712, 45712, 45712, 45712, 45712,
- 45712, 45712, 45712, 45968, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
-
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42640,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 46480, 46736, 46992, 46992, 46992, 46992, 46992, 46992,
- 46992, 46992, 46992, 46992, 46992, 46992, 46992, 46992,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
-
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47504,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
-
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47504,
+ 24240, 24496, 24752, 25008, 25264, 25520, 25776, 26032,
+ 26288, 26544, 26800, 27056, 27312, 27568, 27824, 28080,
+ 28336, 28336, 28336, 28592, 28848, 29104, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29616,
+ 29872, 29872, 30128, 30384, 30640, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 30896, 31152, 31408, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 31664, 31664, 31920, 32176, 29360, 29360, 32432, 32688,
+ 32944, 32944, 32944, 32944, 32944, 32944, 32944, 32944,
+ 32944, 32944, 32944, 32944, 32944, 32944, 32944, 32944,
+ 32944, 32944, 32944, 32944, 32944, 32944, 32944, 33200,
+ 32944, 32944, 33456, 33712, 33968, 34224, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 34480,
+ 34736, 34992, 35248, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 35504, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 35760,
+ 36016, 36272, 36528, 36784, 37040, 37296, 37552, 37808,
+ 38064, 38064, 38320, 29360, 29360, 29360, 29360, 38576,
+ 38832, 39088, 39344, 29360, 39600, 29360, 29360, 39856,
+ 40112, 40368, 40624, 40624, 40880, 41136, 41392, 40624,
+ 41648, 41904, 42160, 42416, 42672, 42928, 43184, 43440,
+ 43696, 43952, 44208, 44464, 44720, 44720, 44720, 44976,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45232, 45232,
+ 45232, 45232, 45232, 45232, 45232, 45232, 45488, 45744,
+ 45744, 45744, 45744, 45744, 45744, 45744, 45744, 45744,
+ 45744, 45744, 45744, 45744, 45744, 45744, 45744, 46000,
+ 46256, 46512, 46512, 46512, 46512, 46512, 46512, 46512,
+ 46512, 46512, 46512, 46512, 46512, 46512, 46512, 46512,
+ 46512, 46512, 46512, 46512, 46512, 46512, 46768, 47024,
+ 47024, 47024, 47024, 47024, 47024, 47024, 47024, 47024,
+ 47024, 47024, 47024, 47024, 47024, 47024, 47024, 47024,
+ 47024, 47024, 47024, 47024, 47024, 47024, 47024, 47024,
+ 47024, 47024, 47024, 47280, 47536, 47536, 47792, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48304, 48560, 48816, 48048, 48048, 48048, 48048, 49072,
+ 49328, 49328, 49328, 49328, 49328, 49328, 49328, 49328,
+ 49328, 49328, 49328, 49328, 49328, 49328, 49328, 49328,
+ 49328, 49328, 49328, 49584, 49840, 49840, 49840, 49840,
+ 49840, 49840, 49840, 49840, 49840, 49840, 49840, 49840,
+ 49840, 49840, 49840, 50096, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 48048,
+ 48048, 48048, 48048, 48048, 48048, 48048, 48048, 49072,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 50608, 50864, 51120, 51120, 51120, 51120, 51120, 51120,
+ 51120, 51120, 51120, 51120, 51120, 51120, 51120, 51120,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 29360,
+ 29360, 29360, 29360, 29360, 29360, 29360, 29360, 50352,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51632,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51376,
+ 51376, 51376, 51376, 51376, 51376, 51376, 51376, 51632,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -892,2590 +856,2190 @@ static const unsigned short uc_property_trie[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 48, 49, 50, 12, 12, 12, 51, 14,
- 52, 51, 53, 54, 36, 55, 51, 52,
- 56, 57, 58, 59, 60, 61, 14, 62,
- 52, 63, 53, 64, 65, 65, 65, 49,
-
- 66, 66, 66, 66, 66, 66, 38, 66,
- 66, 66, 66, 66, 66, 66, 66, 66,
- 38, 66, 66, 66, 66, 66, 66, 36,
- 38, 66, 66, 66, 66, 66, 38, 67,
-
- 68, 68, 68, 68, 68, 68, 44, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 44, 68, 68, 68, 68, 68, 68, 36,
- 44, 68, 68, 68, 68, 68, 44, 69,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 72, 73, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 72, 73,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 74, 75, 76, 77, 70, 71, 70, 71,
- 78, 70, 71, 70, 71, 70, 71, 76,
-
- 77, 72, 73, 70, 71, 70, 71, 70,
- 71, 79, 72, 73, 70, 71, 70, 71,
- 70, 71, 72, 73, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 72, 73,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 80, 70, 71, 70, 71, 70, 71, 81,
-
- 82, 83, 72, 73, 72, 73, 84, 72,
- 73, 85, 85, 72, 73, 78, 86, 87,
- 88, 72, 73, 85, 89, 90, 91, 92,
- 72, 73, 93, 78, 91, 94, 95, 96,
-
- 70, 71, 72, 73, 72, 73, 97, 72,
- 73, 97, 78, 78, 72, 73, 97, 70,
- 71, 98, 98, 72, 73, 72, 73, 99,
- 72, 73, 78, 100, 72, 73, 78, 101,
-
- 100, 100, 100, 100, 102, 103, 104, 102,
- 103, 104, 102, 103, 104, 70, 71, 70,
- 71, 70, 71, 70, 71, 70, 71, 70,
- 71, 70, 71, 70, 71, 105, 70, 71,
-
- 70, 71, 70, 71, 72, 73, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 106, 102, 103, 104, 70, 71, 107, 108,
- 109, 110, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 109, 110, 109, 110, 111, 112, 109, 110,
-
- 113, 114, 111, 112, 111, 112, 109, 110,
- 109, 110, 109, 110, 109, 110, 109, 110,
- 109, 110, 109, 110, 114, 114, 114, 115,
- 115, 115, 116, 117, 118, 119, 120, 121,
-
- 122, 117, 123, 124, 125, 126, 127, 123,
- 127, 123, 127, 123, 127, 123, 127, 123,
- 128, 129, 130, 131, 132, 78, 133, 133,
- 78, 134, 78, 135, 136, 78, 78, 78,
-
- 133, 137, 78, 138, 78, 139, 140, 78,
- 141, 142, 143, 144, 145, 78, 78, 142,
- 78, 146, 147, 78, 78, 148, 78, 78,
- 78, 78, 78, 78, 78, 149, 78, 78,
-
- 150, 78, 151, 150, 78, 78, 78, 152,
- 150, 153, 154, 154, 155, 78, 78, 78,
- 78, 78, 156, 78, 100, 78, 78, 78,
- 78, 78, 78, 78, 78, 157, 158, 78,
-
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 159, 159, 159, 159, 159, 114, 114,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 161, 161, 162, 162, 162, 162, 162,
-
- 163, 163, 164, 164, 164, 164, 161, 161,
- 165, 161, 161, 161, 165, 161, 161, 161,
- 162, 162, 164, 164, 164, 164, 164, 164,
- 52, 52, 52, 52, 52, 52, 164, 166,
-
- 160, 160, 160, 160, 160, 164, 164, 164,
- 164, 164, 167, 167, 168, 169, 170, 171,
- 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171,
-
- 172, 172, 172, 172, 172, 173, 172, 172,
- 172, 172, 172, 172, 172, 173, 173, 172,
- 173, 172, 173, 172, 172, 174, 175, 175,
- 175, 175, 174, 176, 175, 175, 175, 175,
-
- 175, 177, 177, 178, 178, 178, 178, 179,
- 179, 175, 175, 175, 175, 178, 178, 175,
- 178, 178, 175, 175, 180, 180, 180, 180,
- 181, 175, 175, 175, 175, 173, 173, 173,
-
- 182, 182, 172, 182, 182, 183, 184, 185,
- 185, 185, 184, 184, 184, 185, 185, 186,
- 187, 187, 187, 188, 188, 188, 188, 187,
- 189, 190, 190, 191, 192, 193, 193, 194,
-
- 195, 195, 196, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 198, 199, 198, 199, 200, 201, 198, 199,
- 202, 202, 203, 204, 204, 204, 205, 206,
-
- 202, 202, 202, 202, 207, 208, 209, 210,
- 211, 211, 211, 202, 212, 202, 213, 213,
- 214, 215, 215, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 215, 215,
-
- 215, 215, 202, 215, 215, 215, 215, 215,
- 215, 215, 216, 216, 217, 218, 218, 218,
- 219, 220, 220, 220, 220, 220, 220, 220,
- 220, 220, 220, 220, 220, 220, 220, 220,
-
- 220, 220, 221, 220, 220, 220, 220, 220,
- 220, 220, 222, 222, 223, 224, 224, 225,
- 226, 227, 228, 229, 229, 230, 231, 232,
- 233, 234, 235, 236, 235, 236, 235, 236,
-
- 235, 236, 237, 238, 237, 238, 237, 238,
- 237, 238, 237, 238, 237, 238, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 246, 247, 249, 250, 250, 250,
-
- 251, 252, 253, 252, 253, 253, 253, 252,
- 253, 253, 253, 253, 252, 251, 252, 253,
- 254, 254, 254, 254, 254, 254, 254, 254,
- 254, 255, 254, 254, 254, 254, 254, 254,
-
- 254, 254, 254, 254, 254, 254, 254, 254,
- 254, 254, 254, 254, 254, 254, 254, 254,
- 256, 256, 256, 256, 256, 256, 256, 256,
- 256, 257, 256, 256, 256, 256, 256, 256,
-
- 256, 256, 256, 256, 256, 256, 256, 256,
- 256, 256, 256, 256, 256, 256, 256, 256,
- 258, 259, 260, 259, 260, 260, 260, 259,
- 260, 260, 260, 260, 259, 258, 259, 260,
-
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 263, 264,
- 261, 262, 261, 262, 261, 262, 261, 262,
-
- 261, 262, 265, 266, 266, 173, 173, 267,
- 268, 268, 269, 270, 271, 272, 271, 272,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
-
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
-
- 273, 263, 264, 261, 262, 269, 270, 261,
- 262, 269, 270, 261, 262, 269, 270, 274,
- 263, 264, 263, 264, 261, 262, 263, 264,
- 261, 262, 263, 264, 263, 264, 263, 264,
-
- 261, 262, 263, 264, 263, 264, 263, 264,
- 261, 262, 263, 264, 275, 276, 263, 264,
- 263, 264, 263, 264, 263, 264, 277, 278,
- 263, 264, 279, 280, 279, 280, 279, 280,
-
- 269, 270, 269, 270, 269, 270, 269, 270,
- 269, 270, 269, 270, 269, 270, 269, 270,
- 279, 280, 279, 280, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
-
- 281, 282, 281, 282, 283, 284, 285, 286,
- 287, 288, 287, 288, 287, 288, 287, 288,
- 202, 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, 202,
- 202, 290, 291, 291, 291, 292, 291, 293,
-
- 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, 296,
- 294, 297, 298, 202, 202, 299, 299, 300,
- 301, 302, 303, 303, 303, 303, 302, 303,
- 303, 303, 304, 302, 303, 303, 303, 303,
-
- 303, 303, 305, 302, 302, 302, 302, 302,
- 303, 303, 302, 303, 303, 304, 306, 303,
- 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322,
-
- 323, 324, 325, 323, 303, 305, 326, 327,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 328, 328, 328, 328, 328, 328, 328, 328,
- 328, 328, 328, 328, 328, 328, 328, 328,
-
- 328, 328, 328, 328, 328, 328, 328, 328,
- 328, 328, 328, 301, 301, 301, 301, 329,
- 328, 328, 328, 330, 331, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 332, 332, 332, 332, 333, 334, 335, 335,
- 336, 337, 337, 338, 19, 339, 340, 340,
- 341, 341, 341, 341, 341, 341, 342, 342,
- 343, 344, 345, 346, 347, 348, 349, 350,
-
- 351, 352, 353, 353, 353, 353, 354, 355,
- 356, 355, 356, 356, 356, 356, 356, 355,
- 355, 355, 355, 356, 356, 356, 356, 356,
- 356, 356, 356, 357, 357, 357, 357, 357,
-
- 358, 356, 356, 356, 356, 356, 356, 356,
- 355, 356, 356, 359, 360, 361, 362, 363,
- 364, 365, 366, 367, 367, 368, 369, 341,
- 341, 370, 370, 370, 371, 370, 370, 372,
-
- 373, 374, 375, 376, 377, 378, 379, 380,
- 381, 382, 383, 384, 385, 386, 387, 387,
- 388, 355, 355, 355, 352, 389, 389, 389,
- 390, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356,
- 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356,
- 391, 391, 356, 356, 356, 356, 356, 391,
-
- 353, 356, 354, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 356, 355, 356, 392,
- 356, 356, 355, 353, 393, 355, 394, 394,
- 394, 394, 394, 394, 394, 395, 396, 394,
-
- 394, 394, 394, 397, 394, 398, 398, 394,
- 394, 396, 397, 394, 394, 397, 399, 399,
- 400, 401, 402, 403, 404, 405, 406, 407,
- 408, 409, 391, 391, 391, 410, 410, 411,
-
- 412, 412, 412, 413, 413, 413, 413, 413,
- 413, 413, 413, 413, 413, 413, 348, 414,
- 415, 416, 417, 417, 417, 415, 415, 415,
- 415, 415, 417, 417, 417, 417, 415, 417,
-
- 417, 417, 417, 417, 417, 417, 417, 417,
- 415, 417, 415, 417, 415, 418, 418, 419,
- 420, 421, 420, 420, 421, 420, 420, 421,
- 421, 421, 420, 421, 421, 420, 421, 420,
-
- 420, 420, 421, 420, 421, 420, 421, 420,
- 421, 420, 420, 348, 348, 419, 418, 418,
- 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 423, 423, 423, 422, 422, 422, 422,
-
- 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 422, 422, 423, 423, 422, 357, 357,
- 357, 424, 357, 424, 424, 357, 357, 357,
- 424, 424, 357, 357, 357, 357, 357, 357,
-
- 425, 425, 425, 425, 425, 425, 425, 425,
- 425, 425, 425, 425, 425, 425, 425, 425,
- 425, 425, 425, 425, 425, 425, 425, 425,
- 425, 425, 425, 425, 425, 425, 425, 425,
-
- 425, 425, 425, 425, 425, 425, 426, 426,
- 426, 426, 426, 426, 426, 426, 426, 426,
- 426, 427, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
-
- 428, 429, 430, 431, 432, 433, 434, 435,
- 436, 437, 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, 439, 439, 439, 439,
- 439, 439, 440, 439, 441, 441, 442, 443,
- 444, 445, 446, 301, 301, 447, 448, 448,
+ 48, 49, 50, 51, 52, 51, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 54, 69,
+ 55, 70, 57, 71, 72, 72, 72, 49,
+
+ 73, 73, 73, 73, 73, 73, 74, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73,
+ 74, 73, 73, 73, 73, 73, 73, 75,
+ 74, 73, 73, 73, 73, 73, 74, 76,
+
+ 77, 77, 78, 78, 78, 78, 79, 78,
+ 77, 77, 77, 78, 77, 77, 78, 78,
+ 79, 78, 77, 77, 78, 78, 78, 75,
+ 79, 77, 77, 78, 77, 78, 79, 80,
+
+ 81, 82, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 84, 85, 81, 82, 81, 83, 81, 83,
+ 81, 83, 81, 82, 81, 83, 81, 83,
+
+ 81, 83, 81, 83, 81, 83, 86, 85,
+ 81, 83, 81, 82, 81, 83, 81, 83,
+ 87, 88, 89, 90, 81, 83, 81, 83,
+ 91, 81, 83, 81, 83, 81, 83, 89,
+
+ 90, 86, 85, 81, 82, 81, 83, 81,
+ 82, 92, 86, 85, 81, 82, 81, 83,
+ 81, 83, 86, 85, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+
+ 81, 83, 81, 83, 81, 83, 86, 85,
+ 81, 83, 81, 82, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 93, 81, 83, 81, 83, 81, 83, 94,
+
+ 95, 96, 84, 97, 84, 97, 98, 84,
+ 97, 99, 99, 84, 97, 100, 101, 102,
+ 103, 84, 97, 99, 104, 105, 106, 107,
+ 84, 97, 108, 100, 106, 109, 110, 111,
+
+ 81, 83, 84, 97, 84, 97, 112, 84,
+ 97, 112, 100, 100, 84, 97, 112, 81,
+ 83, 113, 113, 84, 97, 84, 97, 114,
+ 84, 97, 100, 115, 84, 97, 100, 116,
+
+ 115, 115, 115, 115, 117, 118, 119, 117,
+ 118, 119, 117, 118, 119, 81, 82, 81,
+ 82, 81, 82, 81, 82, 81, 82, 81,
+ 82, 81, 82, 81, 82, 120, 81, 83,
+
+ 81, 83, 81, 83, 84, 97, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 121, 117, 118, 119, 81, 83, 122, 123,
+ 124, 125, 81, 83, 81, 83, 81, 83,
+
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 124, 125, 124, 125, 126, 127, 124, 125,
+
+ 128, 129, 126, 127, 126, 127, 124, 125,
+ 124, 125, 124, 125, 124, 125, 124, 125,
+ 124, 125, 124, 125, 129, 129, 129, 130,
+ 130, 130, 131, 132, 133, 134, 135, 136,
+
+ 137, 132, 138, 139, 140, 141, 142, 138,
+ 142, 138, 142, 138, 142, 138, 142, 138,
+ 143, 144, 145, 146, 147, 100, 148, 148,
+ 100, 149, 100, 150, 151, 100, 100, 100,
+
+ 148, 152, 100, 153, 100, 154, 155, 100,
+ 156, 157, 158, 159, 160, 100, 100, 157,
+ 100, 161, 162, 100, 100, 163, 100, 100,
+ 100, 100, 100, 100, 100, 164, 100, 100,
+
+ 165, 100, 166, 165, 100, 100, 100, 167,
+ 165, 168, 169, 169, 170, 100, 100, 100,
+ 100, 100, 171, 100, 115, 100, 100, 100,
+ 100, 100, 100, 100, 100, 172, 173, 100,
+
+ 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 174, 174, 174, 174, 174, 129, 129,
+ 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 176, 176, 177, 177, 177, 177, 177,
+
+ 178, 178, 179, 179, 180, 179, 176, 181,
+ 182, 181, 181, 181, 182, 181, 176, 176,
+ 183, 177, 179, 179, 179, 179, 179, 179,
+ 55, 55, 55, 55, 184, 55, 179, 185,
+
+ 175, 175, 175, 175, 175, 179, 179, 179,
+ 179, 179, 186, 186, 187, 188, 189, 190,
+ 190, 190, 190, 190, 190, 190, 190, 190,
+ 190, 190, 190, 190, 190, 190, 190, 190,
+
+ 191, 191, 191, 191, 191, 192, 191, 191,
+ 191, 191, 191, 191, 191, 192, 192, 191,
+ 192, 191, 192, 191, 191, 193, 194, 194,
+ 194, 194, 193, 195, 194, 194, 194, 194,
+
+ 194, 196, 196, 197, 197, 197, 197, 198,
+ 198, 194, 194, 194, 194, 197, 197, 194,
+ 197, 197, 194, 194, 199, 199, 199, 199,
+ 200, 194, 194, 194, 194, 192, 192, 192,
+
+ 201, 201, 191, 201, 201, 202, 203, 204,
+ 204, 204, 203, 203, 203, 204, 204, 205,
+ 206, 206, 206, 207, 207, 207, 207, 206,
+ 208, 209, 209, 210, 211, 212, 212, 213,
+
+ 214, 214, 215, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216,
+ 217, 218, 217, 218, 219, 220, 217, 218,
+ 221, 221, 222, 223, 223, 223, 224, 225,
+
+ 221, 221, 221, 221, 226, 227, 228, 229,
+ 230, 230, 230, 221, 231, 221, 232, 232,
+ 233, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234,
+
+ 234, 234, 221, 234, 234, 234, 234, 234,
+ 234, 234, 235, 235, 236, 237, 237, 237,
+ 238, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239,
+
+ 239, 239, 240, 239, 239, 239, 239, 239,
+ 239, 239, 241, 241, 242, 243, 243, 244,
+ 245, 246, 247, 248, 248, 249, 250, 251,
+ 252, 253, 254, 255, 254, 255, 254, 255,
+
+ 254, 255, 256, 257, 256, 257, 256, 257,
+ 256, 257, 256, 257, 256, 257, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 265, 266, 268, 269, 269, 269,
+
+ 270, 271, 272, 273, 272, 272, 272, 273,
+ 272, 272, 272, 272, 273, 270, 273, 272,
+ 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 275, 274, 274, 274, 274, 274, 274,
+
+ 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274,
+ 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 277, 276, 276, 276, 276, 276, 276,
+
+ 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276,
+ 278, 279, 280, 281, 280, 280, 280, 281,
+ 280, 280, 280, 280, 281, 278, 281, 280,
+
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 284, 285,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+
+ 282, 283, 286, 287, 287, 288, 288, 289,
+ 290, 290, 291, 292, 293, 294, 293, 294,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+
+ 295, 284, 285, 282, 283, 291, 292, 282,
+ 283, 291, 292, 282, 283, 291, 292, 296,
+ 284, 285, 284, 285, 282, 283, 284, 285,
+ 282, 283, 284, 285, 284, 285, 284, 285,
+
+ 282, 283, 284, 285, 284, 285, 284, 285,
+ 282, 283, 284, 285, 297, 298, 284, 285,
+ 284, 285, 284, 285, 284, 285, 299, 300,
+ 284, 285, 301, 302, 301, 302, 301, 302,
+
+ 291, 292, 291, 292, 291, 292, 291, 292,
+ 291, 292, 291, 292, 291, 292, 291, 292,
+ 301, 302, 301, 302, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 303, 304,
+
+ 303, 304, 303, 304, 305, 306, 307, 308,
+ 309, 310, 309, 310, 309, 310, 309, 310,
+ 221, 311, 311, 311, 311, 311, 311, 311,
+ 311, 311, 311, 311, 311, 311, 311, 311,
+
+ 311, 311, 311, 311, 311, 311, 311, 311,
+ 311, 311, 311, 311, 311, 311, 311, 311,
+ 311, 311, 311, 311, 311, 311, 311, 221,
+ 221, 312, 313, 313, 313, 314, 313, 315,
+
+ 316, 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, 317, 317, 317, 317, 317, 317, 318,
+ 316, 319, 320, 221, 221, 321, 321, 322,
+ 323, 324, 325, 325, 325, 325, 324, 325,
+ 325, 325, 326, 324, 325, 325, 325, 325,
+
+ 325, 325, 327, 324, 324, 324, 324, 324,
+ 325, 325, 324, 325, 325, 326, 328, 325,
+ 329, 330, 331, 332, 333, 334, 335, 336,
+ 337, 338, 339, 340, 341, 342, 343, 344,
+
+ 345, 346, 347, 345, 325, 327, 348, 349,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 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, 323, 323, 323, 323, 351,
+ 350, 350, 350, 352, 353, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 354, 354, 354, 354, 355, 356, 357, 357,
+ 358, 359, 359, 360, 361, 362, 363, 363,
+ 364, 364, 364, 364, 364, 364, 365, 365,
+ 366, 367, 368, 369, 370, 371, 372, 373,
+
+ 374, 375, 376, 376, 376, 376, 377, 378,
+ 379, 378, 379, 379, 379, 379, 379, 378,
+ 378, 378, 378, 379, 379, 379, 379, 379,
+ 379, 379, 379, 380, 380, 380, 380, 380,
+
+ 381, 379, 379, 379, 379, 379, 379, 379,
+ 378, 379, 379, 382, 383, 384, 385, 386,
+ 387, 388, 389, 390, 390, 391, 392, 364,
+ 364, 393, 393, 393, 394, 393, 393, 395,
+
+ 396, 397, 398, 399, 400, 401, 402, 403,
+ 404, 405, 406, 407, 408, 409, 410, 410,
+ 411, 378, 378, 378, 375, 412, 412, 412,
+ 413, 379, 379, 379, 379, 379, 379, 379,
+
+ 379, 379, 379, 379, 379, 379, 379, 379,
+ 378, 378, 378, 378, 378, 378, 378, 378,
+ 378, 378, 378, 378, 378, 378, 378, 378,
+ 378, 378, 379, 379, 379, 379, 379, 379,
+
+ 379, 379, 379, 379, 379, 379, 379, 379,
+ 379, 379, 379, 379, 379, 379, 379, 379,
+ 379, 379, 379, 379, 379, 379, 379, 379,
+ 414, 414, 379, 379, 379, 379, 379, 414,
+
+ 376, 379, 377, 378, 378, 378, 378, 378,
+ 378, 378, 378, 378, 379, 378, 379, 415,
+ 379, 379, 378, 376, 416, 378, 417, 417,
+ 417, 417, 417, 417, 417, 418, 419, 417,
+
+ 417, 417, 417, 420, 417, 421, 421, 417,
+ 417, 419, 420, 417, 417, 420, 422, 422,
+ 423, 424, 425, 426, 427, 428, 429, 430,
+ 431, 432, 414, 414, 414, 433, 433, 434,
+
+ 435, 435, 435, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 437, 438,
+ 439, 440, 441, 441, 441, 439, 439, 439,
+ 439, 439, 441, 441, 441, 441, 439, 441,
+
+ 441, 441, 441, 441, 441, 441, 441, 441,
+ 439, 441, 439, 441, 439, 442, 442, 443,
+ 444, 445, 444, 444, 445, 444, 444, 445,
+ 445, 445, 444, 445, 445, 444, 445, 444,
+
+ 444, 444, 445, 444, 445, 444, 445, 444,
+ 445, 444, 444, 437, 437, 443, 442, 442,
+ 446, 446, 446, 446, 446, 446, 446, 446,
+ 446, 447, 447, 447, 446, 446, 446, 446,
+
+ 446, 446, 446, 446, 446, 446, 446, 446,
+ 446, 446, 446, 447, 447, 446, 380, 380,
+ 380, 448, 380, 448, 448, 380, 380, 380,
+ 448, 448, 380, 380, 380, 380, 380, 380,
449, 449, 449, 449, 449, 449, 449, 449,
449, 449, 449, 449, 449, 449, 449, 449,
+ 449, 449, 449, 449, 449, 449, 449, 449,
+ 449, 449, 449, 449, 449, 449, 449, 449,
+
449, 449, 449, 449, 449, 449, 450, 450,
- 450, 450, 451, 450, 450, 450, 450, 450,
-
- 450, 450, 450, 450, 451, 450, 450, 450,
- 451, 450, 450, 450, 450, 450, 301, 301,
- 452, 452, 452, 452, 452, 452, 452, 453,
- 452, 453, 452, 452, 452, 453, 453, 301,
-
- 454, 455, 455, 455, 455, 455, 454, 454,
- 455, 454, 455, 455, 455, 455, 455, 455,
- 455, 455, 455, 455, 454, 455, 454, 454,
- 454, 456, 456, 456, 301, 301, 457, 301,
-
- 458, 459, 458, 458, 458, 458, 459, 460,
- 458, 460, 460, 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, 301, 301, 301, 301, 301,
-
- 461, 462, 461, 461, 461, 461, 461, 461,
- 461, 461, 463, 463, 463, 464, 465, 462,
- 462, 465, 465, 466, 466, 348, 467, 467,
- 467, 468, 467, 467, 467, 467, 469, 469,
-
- 469, 469, 469, 469, 469, 469, 469, 469,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 470, 471, 471, 471, 471,
- 471, 471, 471, 471, 471, 471, 471, 471,
-
- 471, 471, 472, 473, 474, 474, 475, 474,
- 474, 475, 474, 474, 474, 475, 475, 475,
- 476, 477, 478, 474, 474, 474, 475, 474,
- 474, 475, 475, 474, 474, 474, 474, 479,
-
- 480, 481, 481, 482, 483, 484, 484, 484,
- 484, 484, 484, 484, 484, 484, 484, 484,
- 484, 484, 484, 484, 484, 484, 484, 484,
- 484, 484, 484, 484, 484, 484, 484, 484,
-
- 484, 484, 484, 484, 484, 484, 484, 484,
- 484, 485, 484, 484, 484, 484, 484, 484,
- 484, 485, 484, 484, 485, 484, 484, 484,
- 484, 484, 486, 487, 488, 484, 482, 482,
-
- 482, 481, 481, 481, 481, 481, 481, 481,
- 481, 482, 482, 482, 482, 489, 490, 487,
- 484, 173, 175, 173, 173, 480, 486, 486,
- 491, 491, 491, 491, 491, 491, 491, 491,
-
- 484, 484, 481, 481, 492, 492, 493, 494,
- 495, 496, 497, 498, 499, 500, 501, 502,
- 503, 504, 505, 506, 506, 506, 506, 506,
- 507, 508, 508, 509, 509, 510, 509, 509,
-
- 511, 512, 513, 513, 202, 514, 514, 514,
- 514, 514, 514, 514, 514, 202, 202, 514,
- 514, 202, 202, 514, 514, 514, 514, 514,
- 514, 514, 514, 514, 514, 514, 514, 514,
-
- 514, 514, 514, 514, 514, 514, 514, 514,
- 514, 202, 514, 514, 514, 514, 514, 514,
- 514, 202, 514, 202, 202, 202, 514, 514,
- 514, 514, 202, 202, 515, 516, 517, 513,
-
- 513, 512, 512, 512, 512, 202, 202, 513,
- 513, 202, 202, 518, 518, 519, 520, 202,
- 202, 202, 202, 202, 202, 202, 202, 517,
- 202, 202, 202, 202, 521, 521, 202, 521,
-
- 514, 514, 512, 512, 202, 202, 522, 523,
- 524, 525, 526, 527, 528, 529, 530, 531,
- 514, 514, 532, 532, 533, 533, 533, 533,
- 533, 534, 535, 536, 537, 538, 539, 202,
-
- 202, 540, 541, 542, 202, 543, 543, 543,
- 543, 543, 543, 202, 202, 202, 202, 543,
- 543, 202, 202, 543, 543, 543, 543, 543,
- 543, 543, 543, 543, 543, 543, 543, 543,
-
- 543, 543, 543, 543, 543, 543, 543, 543,
- 543, 202, 543, 543, 543, 543, 543, 543,
- 543, 202, 543, 544, 202, 543, 544, 202,
- 543, 543, 202, 202, 545, 202, 546, 546,
-
- 546, 541, 541, 202, 202, 202, 202, 541,
- 541, 202, 202, 541, 541, 547, 202, 202,
- 202, 548, 202, 202, 202, 202, 202, 202,
- 202, 544, 544, 544, 543, 202, 544, 202,
-
- 202, 202, 202, 202, 202, 202, 549, 550,
- 551, 552, 553, 554, 555, 556, 557, 558,
- 541, 541, 543, 543, 543, 548, 559, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 560, 560, 561, 202, 562, 562, 562,
- 562, 562, 562, 562, 563, 562, 202, 562,
- 562, 562, 202, 562, 562, 562, 562, 562,
- 562, 562, 562, 562, 562, 562, 562, 562,
-
- 562, 562, 562, 562, 562, 562, 562, 562,
- 562, 202, 562, 562, 562, 562, 562, 562,
- 562, 202, 562, 562, 202, 562, 562, 562,
- 562, 562, 202, 202, 564, 562, 561, 561,
-
- 561, 560, 560, 560, 560, 560, 202, 560,
- 560, 561, 202, 561, 561, 565, 202, 202,
- 562, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 562, 563, 566, 566, 202, 202, 567, 568,
- 569, 570, 571, 572, 573, 574, 575, 576,
- 577, 578, 202, 202, 202, 202, 202, 202,
- 202, 579, 580, 580, 580, 580, 580, 580,
-
- 202, 581, 582, 582, 202, 583, 583, 583,
- 583, 583, 583, 583, 583, 202, 202, 583,
- 583, 202, 202, 583, 583, 583, 583, 583,
- 583, 583, 583, 583, 583, 583, 583, 583,
-
- 583, 583, 583, 583, 583, 583, 583, 583,
- 583, 202, 583, 583, 583, 583, 583, 583,
- 583, 202, 583, 583, 202, 584, 583, 583,
- 583, 583, 202, 202, 585, 583, 586, 581,
-
- 582, 581, 581, 581, 587, 202, 202, 582,
- 588, 202, 202, 588, 588, 589, 202, 202,
- 202, 202, 202, 202, 202, 590, 591, 586,
- 202, 202, 202, 202, 592, 592, 202, 583,
-
- 583, 583, 587, 587, 202, 202, 593, 594,
- 595, 596, 597, 598, 599, 600, 601, 602,
- 603, 584, 604, 604, 604, 604, 604, 604,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 605, 606, 202, 606, 606, 606,
- 606, 606, 606, 202, 202, 202, 606, 606,
- 606, 202, 606, 606, 607, 606, 202, 202,
- 202, 606, 606, 202, 606, 202, 606, 606,
-
- 202, 202, 202, 606, 606, 202, 202, 202,
- 606, 606, 606, 202, 202, 202, 606, 606,
- 606, 606, 606, 606, 606, 606, 608, 606,
- 606, 606, 202, 202, 202, 202, 609, 610,
-
- 605, 610, 610, 202, 202, 202, 610, 610,
- 610, 202, 611, 611, 611, 612, 202, 202,
- 613, 202, 202, 202, 202, 202, 202, 609,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 614, 615,
- 616, 617, 618, 619, 620, 621, 622, 623,
- 624, 624, 624, 625, 625, 625, 625, 625,
- 625, 626, 625, 202, 202, 202, 202, 202,
-
- 627, 628, 628, 628, 629, 630, 630, 630,
- 630, 630, 630, 630, 630, 202, 630, 630,
- 630, 202, 630, 630, 630, 630, 630, 630,
- 630, 630, 630, 630, 630, 630, 630, 630,
-
- 630, 630, 630, 630, 630, 630, 630, 630,
- 630, 202, 630, 630, 630, 630, 630, 630,
- 630, 630, 630, 630, 631, 630, 630, 630,
- 630, 630, 202, 202, 202, 632, 633, 633,
-
- 633, 628, 628, 628, 628, 202, 633, 633,
- 634, 202, 633, 633, 633, 635, 202, 202,
- 202, 202, 202, 202, 202, 636, 637, 202,
- 632, 632, 638, 202, 202, 202, 202, 202,
-
- 630, 630, 639, 639, 202, 202, 640, 641,
- 642, 643, 644, 645, 646, 647, 648, 649,
- 202, 202, 202, 202, 202, 202, 202, 650,
- 651, 651, 651, 651, 651, 651, 651, 652,
-
- 653, 654, 655, 655, 656, 657, 657, 657,
- 657, 657, 657, 657, 657, 202, 657, 657,
- 657, 202, 657, 657, 657, 657, 657, 657,
- 657, 657, 657, 657, 657, 657, 657, 657,
-
- 657, 657, 657, 657, 657, 657, 657, 657,
- 657, 202, 657, 657, 657, 657, 657, 657,
- 657, 657, 657, 657, 202, 657, 657, 657,
- 657, 657, 202, 202, 658, 659, 655, 660,
-
- 661, 655, 662, 655, 655, 202, 660, 661,
- 661, 202, 661, 661, 663, 664, 202, 202,
- 202, 202, 202, 202, 202, 662, 662, 202,
- 202, 202, 202, 202, 202, 202, 657, 202,
-
- 657, 657, 665, 665, 202, 202, 666, 667,
- 668, 669, 670, 671, 672, 673, 674, 675,
- 202, 676, 676, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 677, 678, 679, 679, 680, 681, 681, 681,
- 681, 681, 681, 681, 681, 202, 681, 681,
- 681, 202, 681, 681, 681, 681, 681, 681,
- 681, 681, 681, 681, 681, 681, 681, 681,
-
- 681, 681, 681, 681, 681, 681, 681, 681,
- 681, 682, 681, 681, 681, 681, 681, 681,
- 681, 681, 681, 681, 681, 681, 681, 681,
- 681, 681, 682, 683, 683, 684, 685, 679,
-
- 679, 686, 686, 686, 687, 202, 679, 679,
- 679, 202, 688, 688, 688, 689, 690, 691,
- 202, 202, 202, 202, 692, 692, 692, 685,
- 693, 693, 693, 693, 693, 693, 693, 694,
-
- 681, 681, 687, 687, 202, 202, 695, 696,
- 697, 698, 699, 700, 701, 702, 703, 704,
- 705, 705, 705, 705, 705, 705, 693, 693,
- 693, 706, 684, 684, 684, 684, 684, 684,
-
- 202, 707, 708, 708, 202, 709, 709, 709,
- 709, 709, 709, 709, 709, 709, 709, 709,
- 709, 709, 709, 709, 709, 709, 709, 202,
- 202, 202, 709, 709, 709, 709, 709, 709,
-
- 709, 709, 709, 709, 709, 709, 709, 709,
- 709, 709, 709, 709, 709, 709, 709, 709,
- 709, 709, 202, 709, 709, 709, 709, 709,
- 709, 709, 709, 709, 202, 709, 202, 202,
-
- 709, 709, 709, 709, 709, 709, 709, 202,
- 202, 202, 710, 202, 202, 202, 202, 711,
- 708, 708, 712, 712, 712, 202, 712, 202,
- 708, 708, 713, 708, 713, 713, 713, 711,
-
- 202, 202, 202, 202, 202, 202, 714, 715,
- 716, 717, 718, 719, 720, 721, 722, 723,
- 202, 202, 708, 708, 724, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
-
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 726, 725, 727, 726, 726, 726, 726,
- 728, 728, 729, 202, 202, 202, 202, 12,
-
- 725, 725, 725, 725, 725, 725, 730, 726,
- 731, 731, 731, 731, 726, 726, 726, 732,
- 733, 734, 735, 736, 737, 738, 739, 740,
- 741, 742, 743, 743, 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, 744, 744, 202, 744, 202, 745, 744,
- 744, 745, 744, 202, 745, 744, 745, 745,
- 745, 745, 745, 745, 744, 744, 744, 744,
- 745, 744, 744, 744, 744, 744, 744, 744,
-
- 745, 744, 744, 744, 202, 744, 202, 744,
- 745, 745, 744, 744, 745, 744, 744, 744,
- 744, 746, 744, 747, 746, 746, 746, 746,
- 748, 748, 749, 746, 746, 744, 202, 202,
-
- 744, 744, 744, 744, 744, 202, 750, 202,
- 751, 751, 751, 751, 746, 746, 202, 202,
- 752, 753, 754, 755, 756, 757, 758, 759,
- 760, 761, 202, 202, 762, 762, 763, 763,
-
- 764, 765, 765, 765, 766, 767, 766, 766,
- 768, 766, 766, 769, 770, 771, 771, 771,
- 771, 771, 768, 772, 771, 772, 772, 772,
- 773, 773, 772, 772, 772, 772, 772, 772,
-
- 774, 775, 776, 777, 778, 779, 780, 781,
- 782, 783, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 785, 773, 772, 773,
- 772, 786, 787, 788, 787, 788, 789, 789,
-
- 764, 764, 764, 790, 764, 764, 764, 764,
- 202, 764, 764, 764, 764, 790, 764, 764,
- 764, 764, 790, 764, 764, 764, 764, 790,
- 764, 764, 764, 764, 790, 764, 764, 764,
-
- 764, 764, 764, 764, 764, 764, 764, 764,
- 764, 790, 791, 792, 792, 202, 202, 202,
- 202, 793, 794, 795, 796, 795, 795, 797,
- 795, 797, 794, 794, 794, 794, 798, 799,
-
- 794, 795, 800, 800, 801, 769, 800, 800,
- 764, 764, 764, 764, 802, 803, 803, 803,
- 798, 798, 798, 795, 798, 798, 804, 798,
- 202, 798, 798, 798, 798, 795, 798, 798,
-
- 798, 798, 795, 798, 798, 798, 798, 795,
- 798, 798, 798, 798, 795, 798, 804, 804,
- 804, 798, 798, 798, 798, 798, 798, 798,
- 804, 795, 804, 804, 804, 202, 805, 805,
-
- 806, 806, 806, 806, 806, 806, 807, 806,
- 806, 806, 806, 806, 806, 202, 808, 806,
- 809, 809, 810, 811, 812, 813, 813, 813,
- 813, 814, 814, 202, 202, 202, 202, 202,
-
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
-
- 815, 815, 816, 815, 815, 815, 817, 815,
- 816, 815, 815, 818, 819, 820, 821, 820,
- 820, 822, 820, 823, 823, 823, 820, 824,
- 819, 825, 826, 827, 827, 823, 823, 816,
-
- 828, 829, 830, 831, 832, 833, 834, 835,
- 836, 837, 838, 838, 839, 839, 839, 839,
- 815, 815, 815, 815, 815, 815, 822, 822,
- 820, 820, 816, 816, 816, 816, 823, 823,
-
- 823, 816, 818, 818, 818, 816, 816, 818,
- 818, 818, 818, 818, 818, 818, 816, 816,
- 816, 823, 823, 823, 823, 816, 816, 816,
- 816, 816, 816, 816, 816, 816, 816, 816,
-
- 816, 816, 823, 818, 827, 823, 823, 818,
- 818, 818, 818, 818, 818, 840, 816, 818,
- 841, 842, 843, 844, 845, 846, 847, 848,
- 849, 850, 851, 851, 851, 852, 853, 853,
-
- 854, 854, 854, 854, 854, 854, 854, 854,
- 854, 854, 854, 854, 854, 854, 854, 854,
- 854, 854, 854, 854, 854, 854, 854, 854,
- 854, 854, 854, 854, 854, 854, 854, 854,
-
- 854, 854, 854, 854, 854, 854, 202, 855,
- 202, 202, 202, 202, 202, 855, 202, 202,
- 856, 856, 856, 856, 856, 856, 856, 856,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 451, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+
+ 452, 453, 454, 455, 456, 457, 458, 459,
+ 460, 461, 462, 462, 462, 462, 462, 462,
+ 462, 462, 462, 462, 462, 462, 462, 462,
+ 462, 462, 462, 462, 462, 462, 462, 462,
+
+ 462, 462, 462, 462, 462, 462, 462, 462,
+ 462, 462, 462, 463, 463, 463, 463, 463,
+ 463, 463, 464, 463, 465, 465, 466, 467,
+ 468, 469, 470, 323, 323, 471, 472, 472,
+
+ 473, 473, 473, 473, 473, 473, 473, 473,
+ 473, 473, 473, 473, 473, 473, 473, 473,
+ 473, 473, 473, 473, 473, 473, 474, 474,
+ 474, 474, 475, 474, 474, 474, 474, 474,
+
+ 474, 474, 474, 474, 475, 474, 474, 474,
+ 475, 474, 474, 474, 474, 474, 323, 323,
+ 476, 476, 476, 476, 476, 476, 476, 477,
+ 476, 477, 476, 476, 476, 477, 477, 323,
+
+ 478, 479, 479, 479, 479, 479, 478, 478,
+ 479, 478, 479, 479, 479, 479, 479, 479,
+ 479, 479, 479, 479, 478, 479, 478, 478,
+ 478, 480, 480, 480, 323, 323, 481, 323,
+
+ 482, 483, 482, 482, 482, 482, 483, 484,
+ 482, 484, 484, 323, 323, 323, 323, 323,
+ 485, 485, 485, 485, 485, 485, 485, 485,
+ 485, 485, 485, 485, 485, 485, 485, 485,
+
+ 485, 485, 485, 486, 486, 486, 487, 488,
+ 489, 487, 487, 487, 487, 487, 485, 323,
+ 490, 490, 323, 323, 323, 323, 323, 323,
+ 491, 492, 492, 492, 491, 491, 491, 491,
+
+ 493, 494, 493, 493, 493, 493, 493, 493,
+ 493, 493, 495, 495, 495, 496, 497, 494,
+ 494, 497, 497, 498, 498, 487, 499, 499,
+ 499, 500, 499, 499, 499, 499, 501, 501,
+
+ 501, 501, 501, 501, 501, 501, 501, 501,
+ 487, 502, 491, 491, 491, 491, 491, 492,
+ 492, 492, 492, 503, 504, 504, 504, 504,
+ 504, 504, 504, 504, 504, 504, 504, 504,
+
+ 504, 504, 505, 506, 507, 507, 508, 507,
+ 507, 508, 507, 507, 507, 508, 508, 508,
+ 509, 510, 511, 507, 507, 507, 508, 507,
+ 507, 508, 508, 507, 507, 507, 507, 512,
+
+ 513, 514, 514, 515, 516, 517, 517, 517,
+ 517, 517, 517, 517, 517, 517, 517, 517,
+ 517, 517, 517, 517, 517, 517, 517, 517,
+ 517, 517, 517, 517, 517, 517, 517, 517,
+
+ 517, 517, 517, 517, 517, 517, 517, 517,
+ 517, 518, 517, 517, 517, 517, 517, 517,
+ 517, 518, 517, 517, 518, 517, 517, 517,
+ 517, 517, 519, 520, 521, 517, 515, 515,
+
+ 515, 514, 514, 514, 514, 514, 514, 514,
+ 514, 515, 515, 515, 515, 522, 523, 520,
+ 517, 288, 524, 288, 288, 513, 519, 519,
+ 525, 525, 525, 525, 525, 525, 525, 525,
+
+ 517, 517, 514, 514, 526, 526, 527, 528,
+ 529, 530, 531, 532, 533, 534, 535, 536,
+ 537, 538, 539, 540, 540, 540, 540, 540,
+ 541, 542, 542, 543, 543, 544, 543, 543,
+
+ 545, 546, 547, 547, 221, 548, 548, 548,
+ 548, 548, 548, 548, 548, 221, 221, 548,
+ 548, 221, 221, 548, 548, 548, 548, 548,
+ 548, 548, 548, 548, 548, 548, 548, 548,
+
+ 548, 548, 548, 548, 548, 548, 548, 548,
+ 548, 221, 548, 548, 548, 548, 548, 548,
+ 548, 221, 548, 221, 221, 221, 548, 548,
+ 548, 548, 221, 221, 549, 550, 551, 547,
+
+ 547, 546, 546, 546, 546, 221, 221, 547,
+ 547, 221, 221, 552, 552, 553, 554, 221,
+ 221, 221, 221, 221, 221, 221, 221, 551,
+ 221, 221, 221, 221, 555, 555, 221, 555,
+
+ 548, 548, 546, 546, 221, 221, 556, 557,
+ 558, 559, 560, 561, 562, 563, 564, 565,
+ 548, 548, 566, 566, 567, 567, 567, 567,
+ 567, 568, 569, 570, 571, 572, 573, 221,
+
+ 221, 574, 575, 576, 221, 577, 577, 577,
+ 577, 577, 577, 221, 221, 221, 221, 577,
+ 577, 221, 221, 577, 577, 577, 577, 577,
+ 577, 577, 577, 577, 577, 577, 577, 577,
+
+ 577, 577, 577, 577, 577, 577, 577, 577,
+ 577, 221, 577, 577, 577, 577, 577, 577,
+ 577, 221, 577, 578, 221, 577, 578, 221,
+ 577, 577, 221, 221, 579, 221, 580, 580,
+
+ 580, 575, 575, 221, 221, 221, 221, 575,
+ 575, 221, 221, 575, 575, 581, 221, 221,
+ 221, 582, 221, 221, 221, 221, 221, 221,
+ 221, 578, 578, 578, 577, 221, 578, 221,
+
+ 221, 221, 221, 221, 221, 221, 583, 584,
+ 585, 586, 587, 588, 589, 590, 591, 592,
+ 575, 575, 577, 577, 577, 582, 593, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 221, 594, 594, 595, 221, 596, 596, 596,
+ 596, 596, 596, 596, 597, 596, 221, 596,
+ 596, 596, 221, 596, 596, 596, 596, 596,
+ 596, 596, 596, 596, 596, 596, 596, 596,
+
+ 596, 596, 596, 596, 596, 596, 596, 596,
+ 596, 221, 596, 596, 596, 596, 596, 596,
+ 596, 221, 596, 596, 221, 596, 596, 596,
+ 596, 596, 221, 221, 598, 596, 595, 595,
+
+ 595, 594, 594, 594, 594, 594, 221, 594,
+ 594, 595, 221, 595, 595, 599, 221, 221,
+ 596, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 596, 597, 600, 600, 221, 221, 601, 602,
+ 603, 604, 605, 606, 607, 608, 609, 610,
+ 611, 612, 221, 221, 221, 221, 221, 221,
+ 221, 613, 614, 614, 614, 614, 614, 614,
+
+ 221, 615, 616, 616, 221, 617, 617, 617,
+ 617, 617, 617, 617, 617, 221, 221, 617,
+ 617, 221, 221, 617, 617, 617, 617, 617,
+ 617, 617, 617, 617, 617, 617, 617, 617,
+
+ 617, 617, 617, 617, 617, 617, 617, 617,
+ 617, 221, 617, 617, 617, 617, 617, 617,
+ 617, 221, 617, 617, 221, 618, 617, 617,
+ 617, 617, 221, 221, 619, 617, 620, 615,
+
+ 616, 615, 615, 615, 621, 221, 221, 616,
+ 622, 221, 221, 622, 622, 623, 221, 221,
+ 221, 221, 221, 221, 221, 624, 625, 620,
+ 221, 221, 221, 221, 626, 626, 221, 617,
+
+ 617, 617, 621, 621, 221, 221, 627, 628,
+ 629, 630, 631, 632, 633, 634, 635, 636,
+ 637, 618, 638, 638, 638, 638, 638, 638,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 221, 221, 639, 640, 221, 640, 640, 640,
+ 640, 640, 640, 221, 221, 221, 640, 640,
+ 640, 221, 640, 640, 641, 640, 221, 221,
+ 221, 640, 640, 221, 640, 221, 640, 640,
+
+ 221, 221, 221, 640, 640, 221, 221, 221,
+ 640, 640, 640, 221, 221, 221, 640, 640,
+ 640, 640, 640, 640, 640, 640, 642, 640,
+ 640, 640, 221, 221, 221, 221, 643, 644,
+
+ 639, 644, 644, 221, 221, 221, 644, 644,
+ 644, 221, 645, 645, 645, 646, 221, 221,
+ 647, 221, 221, 221, 221, 221, 221, 643,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 221, 221, 221, 221, 221, 221, 648, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 658, 658, 659, 659, 659, 659, 659,
+ 659, 660, 659, 221, 221, 221, 221, 221,
+
+ 661, 662, 662, 662, 663, 664, 664, 664,
+ 664, 664, 664, 664, 664, 221, 664, 664,
+ 664, 221, 664, 664, 664, 664, 664, 664,
+ 664, 664, 664, 664, 664, 664, 664, 664,
+
+ 664, 664, 664, 664, 664, 664, 664, 664,
+ 664, 221, 664, 664, 664, 664, 664, 664,
+ 664, 664, 664, 664, 665, 664, 664, 664,
+ 664, 664, 221, 221, 666, 667, 668, 668,
+
+ 668, 662, 662, 662, 662, 221, 668, 668,
+ 669, 221, 668, 668, 668, 670, 221, 221,
+ 221, 221, 221, 221, 221, 671, 672, 221,
+ 667, 667, 673, 221, 221, 674, 221, 221,
+
+ 664, 664, 675, 675, 221, 221, 676, 677,
+ 678, 679, 680, 681, 682, 683, 684, 685,
+ 221, 221, 221, 221, 221, 221, 221, 686,
+ 687, 687, 687, 687, 687, 687, 687, 688,
+
+ 689, 690, 691, 691, 692, 693, 693, 693,
+ 693, 693, 693, 693, 693, 221, 693, 693,
+ 693, 221, 693, 693, 693, 693, 693, 693,
+ 693, 693, 693, 693, 693, 693, 693, 693,
+
+ 693, 693, 693, 693, 693, 693, 693, 693,
+ 693, 221, 693, 693, 693, 693, 693, 693,
+ 693, 693, 693, 693, 221, 693, 693, 693,
+ 693, 693, 221, 221, 694, 695, 691, 696,
+
+ 697, 691, 698, 691, 691, 221, 696, 697,
+ 697, 221, 697, 697, 699, 700, 221, 221,
+ 221, 221, 221, 221, 221, 698, 698, 221,
+ 221, 221, 221, 221, 221, 701, 693, 221,
+
+ 693, 693, 702, 702, 221, 221, 703, 704,
+ 705, 706, 707, 708, 709, 710, 711, 712,
+ 221, 713, 713, 714, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 715, 716, 717, 717, 718, 719, 719, 719,
+ 719, 719, 719, 719, 719, 221, 719, 719,
+ 719, 221, 719, 719, 719, 719, 719, 719,
+ 719, 719, 719, 719, 719, 719, 719, 719,
+
+ 719, 719, 719, 719, 719, 719, 719, 719,
+ 719, 720, 719, 719, 719, 719, 719, 719,
+ 719, 719, 719, 719, 719, 719, 719, 719,
+ 719, 719, 720, 721, 721, 722, 723, 717,
+
+ 717, 724, 724, 724, 725, 221, 717, 717,
+ 717, 221, 726, 726, 726, 727, 728, 729,
+ 221, 221, 221, 221, 730, 730, 730, 723,
+ 731, 731, 731, 731, 731, 731, 731, 732,
+
+ 719, 719, 725, 725, 221, 221, 733, 734,
+ 735, 736, 737, 738, 739, 740, 741, 742,
+ 743, 743, 743, 743, 743, 743, 731, 731,
+ 731, 744, 722, 722, 722, 722, 722, 722,
+
+ 221, 745, 746, 746, 221, 747, 747, 747,
+ 747, 747, 747, 747, 747, 747, 747, 747,
+ 747, 747, 747, 747, 747, 747, 747, 221,
+ 221, 221, 747, 747, 747, 747, 747, 747,
+
+ 747, 747, 747, 747, 747, 747, 747, 747,
+ 747, 747, 747, 747, 747, 747, 747, 747,
+ 747, 747, 221, 747, 747, 747, 747, 747,
+ 747, 747, 747, 747, 221, 747, 221, 221,
+
+ 747, 747, 747, 747, 747, 747, 747, 221,
+ 221, 221, 748, 221, 221, 221, 221, 749,
+ 746, 746, 750, 750, 750, 221, 750, 221,
+ 746, 746, 751, 746, 751, 751, 751, 749,
+
+ 221, 221, 221, 221, 221, 221, 752, 753,
+ 754, 755, 756, 757, 758, 759, 760, 761,
+ 221, 221, 746, 746, 762, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 221, 763, 763, 763, 763, 763, 763, 763,
+ 763, 763, 763, 763, 763, 763, 763, 763,
+ 763, 763, 763, 763, 763, 763, 763, 763,
+ 763, 763, 763, 763, 763, 763, 763, 763,
+
+ 763, 763, 763, 763, 763, 763, 763, 763,
+ 763, 763, 763, 763, 763, 763, 763, 763,
+ 763, 764, 763, 765, 764, 764, 764, 764,
+ 766, 766, 767, 221, 221, 221, 221, 768,
+
+ 763, 763, 763, 763, 763, 763, 769, 764,
+ 770, 770, 770, 770, 764, 764, 764, 771,
+ 772, 773, 774, 775, 776, 777, 778, 779,
+ 780, 781, 782, 782, 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,
+
+ 221, 783, 783, 221, 783, 221, 784, 783,
+ 783, 784, 783, 221, 784, 783, 784, 784,
+ 784, 784, 784, 784, 783, 783, 783, 783,
+ 784, 783, 783, 783, 783, 783, 783, 783,
+
+ 784, 783, 783, 783, 221, 783, 221, 783,
+ 784, 784, 783, 783, 784, 783, 783, 783,
+ 783, 785, 783, 786, 785, 785, 785, 785,
+ 787, 787, 788, 785, 785, 783, 221, 221,
+
+ 783, 783, 783, 783, 783, 221, 789, 221,
+ 790, 790, 790, 790, 785, 785, 791, 221,
+ 792, 793, 794, 795, 796, 797, 798, 799,
+ 800, 801, 221, 221, 802, 802, 803, 803,
+
+ 804, 805, 805, 805, 806, 807, 806, 806,
+ 808, 806, 806, 809, 810, 811, 811, 811,
+ 811, 811, 808, 812, 811, 812, 812, 812,
+ 813, 813, 812, 812, 812, 812, 812, 812,
+
+ 814, 815, 816, 817, 818, 819, 820, 821,
+ 822, 823, 824, 824, 824, 824, 824, 824,
+ 824, 824, 824, 824, 825, 813, 812, 813,
+ 812, 826, 827, 828, 827, 828, 829, 829,
+
+ 804, 804, 804, 830, 804, 804, 804, 804,
+ 221, 804, 804, 804, 804, 830, 804, 804,
+ 804, 804, 830, 804, 804, 804, 804, 830,
+ 804, 804, 804, 804, 830, 804, 804, 804,
+
+ 804, 804, 804, 804, 804, 804, 804, 804,
+ 804, 830, 831, 832, 832, 221, 221, 221,
+ 221, 833, 834, 835, 836, 835, 835, 837,
+ 835, 837, 834, 834, 834, 834, 838, 839,
+
+ 834, 835, 840, 840, 841, 809, 840, 840,
+ 804, 804, 804, 804, 842, 843, 843, 843,
+ 838, 838, 838, 835, 838, 838, 844, 838,
+ 221, 838, 838, 838, 838, 835, 838, 838,
+
+ 838, 838, 835, 838, 838, 838, 838, 835,
+ 838, 838, 838, 838, 835, 838, 844, 844,
+ 844, 838, 838, 838, 838, 838, 838, 838,
+ 844, 835, 844, 844, 844, 221, 845, 845,
+
+ 846, 846, 846, 846, 846, 846, 847, 846,
+ 846, 846, 846, 846, 846, 221, 848, 846,
+ 849, 849, 850, 851, 852, 853, 853, 853,
+ 853, 854, 854, 221, 221, 221, 221, 221,
+
+ 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 855, 855, 855, 855, 855, 855, 855,
+
+ 855, 855, 856, 855, 855, 855, 857, 855,
+ 856, 855, 855, 858, 859, 860, 861, 860,
+ 860, 862, 860, 863, 863, 863, 860, 864,
+ 859, 865, 866, 867, 867, 863, 863, 856,
+
+ 868, 869, 870, 871, 872, 873, 874, 875,
+ 876, 877, 878, 878, 879, 879, 879, 879,
+ 855, 855, 855, 855, 855, 855, 862, 862,
+ 860, 860, 856, 856, 856, 856, 863, 863,
+
+ 863, 856, 858, 858, 858, 856, 856, 858,
+ 858, 858, 858, 858, 858, 858, 856, 856,
+ 856, 863, 863, 863, 863, 856, 856, 856,
856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 856, 856, 857,
- 857, 858, 858, 859, 860, 861, 861, 861,
-
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
-
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 863, 863, 863, 863, 863, 862,
-
- 864, 865, 865, 865, 865, 865, 865, 865,
- 865, 865, 865, 865, 865, 865, 865, 865,
- 865, 865, 865, 865, 865, 865, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
-
- 864, 864, 864, 864, 864, 864, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
-
- 864, 864, 864, 866, 866, 866, 866, 866,
- 867, 867, 867, 867, 867, 867, 867, 867,
- 867, 867, 867, 867, 867, 867, 867, 867,
- 867, 867, 867, 867, 867, 867, 867, 867,
-
- 867, 867, 867, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
-
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 869, 869, 869, 869, 869, 869,
-
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
-
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
-
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 202,
- 870, 202, 870, 870, 870, 870, 202, 202,
-
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
-
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 202,
-
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 202,
- 870, 870, 870, 870, 870, 870, 870, 870,
-
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
-
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 871,
-
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 202, 202, 872, 872, 873,
-
- 874, 875, 876, 877, 877, 877, 877, 876,
- 876, 878, 879, 880, 881, 882, 883, 884,
- 885, 886, 887, 887, 887, 887, 887, 887,
- 887, 887, 887, 887, 887, 202, 202, 202,
-
- 871, 871, 871, 871, 871, 871, 871, 871,
- 871, 871, 871, 871, 871, 871, 871, 871,
- 888, 888, 888, 888, 888, 888, 888, 888,
- 888, 888, 202, 202, 202, 202, 202, 202,
-
- 889, 890, 891, 892, 893, 894, 895, 896,
- 897, 898, 899, 900, 901, 902, 903, 904,
- 905, 906, 907, 908, 909, 910, 911, 912,
- 913, 914, 915, 916, 917, 918, 919, 920,
-
- 921, 922, 923, 924, 925, 926, 927, 928,
- 929, 930, 931, 932, 933, 934, 935, 936,
- 937, 938, 939, 940, 941, 942, 943, 944,
- 945, 946, 947, 948, 949, 950, 951, 952,
-
- 953, 954, 955, 956, 957, 958, 959, 960,
- 961, 962, 963, 964, 965, 966, 967, 968,
- 969, 969, 969, 969, 969, 970, 202, 202,
- 971, 971, 971, 971, 971, 971, 202, 202,
-
- 972, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
-
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
-
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 974, 975, 973,
- 973, 973, 973, 973, 973, 973, 973, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
-
- 977, 978, 978, 978, 978, 978, 978, 978,
- 978, 978, 978, 978, 978, 978, 978, 978,
- 978, 978, 978, 978, 978, 978, 978, 978,
- 978, 978, 978, 979, 980, 202, 202, 202,
-
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 981, 981, 981, 981, 981,
-
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 982, 982, 982, 983, 983,
- 983, 984, 984, 984, 984, 984, 984, 984,
- 984, 202, 202, 202, 202, 202, 202, 202,
-
- 985, 985, 985, 985, 985, 985, 985, 985,
- 985, 985, 985, 985, 985, 202, 985, 985,
- 985, 985, 986, 986, 987, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 988, 988, 988, 988, 988, 988, 988, 988,
- 988, 988, 988, 988, 988, 988, 988, 988,
- 988, 988, 989, 989, 990, 991, 991, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 992, 992, 992, 992, 992, 992, 992, 992,
- 992, 992, 992, 992, 992, 992, 992, 992,
- 992, 992, 993, 993, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 994, 994, 994, 994, 994, 994, 994, 994,
- 994, 994, 994, 994, 994, 202, 994, 994,
- 994, 202, 995, 995, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
-
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 997, 997, 998, 997,
- 997, 997, 997, 997, 997, 997, 998, 998,
-
- 998, 998, 998, 998, 998, 998, 997, 998,
- 998, 997, 997, 997, 997, 997, 997, 997,
- 997, 997, 999, 997, 1000, 1000, 1001, 1002,
- 1000, 1003, 1000, 1004, 996, 1005, 202, 202,
-
- 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
- 1014, 1015, 202, 202, 202, 202, 202, 202,
- 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
- 1016, 1016, 202, 202, 202, 202, 202, 202,
-
- 1017, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
- 1024, 1025, 1026, 1027, 1027, 1027, 1028, 202,
- 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036,
- 1037, 1038, 202, 202, 202, 202, 202, 202,
-
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-
- 1039, 1039, 1039, 1040, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1041, 202, 202, 202, 202, 202, 202, 202,
-
- 1042, 1042, 1042, 1042, 1042, 1027, 1027, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1043, 1044, 202, 202, 202, 202, 202,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
-
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
-
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
- 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
- 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
- 1045, 1045, 1045, 1045, 1045, 1046, 1046, 202,
-
- 1047, 1047, 1047, 1048, 1048, 1048, 1048, 1047,
- 1047, 1048, 1048, 1048, 202, 202, 202, 202,
- 1048, 1048, 1047, 1048, 1048, 1048, 1048, 1048,
- 1048, 1049, 1050, 1051, 202, 202, 202, 202,
-
- 1052, 202, 202, 202, 1053, 1053, 1054, 1055,
- 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
- 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
- 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
-
- 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
- 1064, 1064, 1064, 1064, 1064, 1064, 202, 202,
- 1064, 1064, 1064, 1064, 1064, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
-
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1066, 1066, 202, 202, 202, 202,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
-
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 202, 202, 202, 202, 202, 202,
- 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
- 1075, 1076, 1077, 202, 202, 202, 1078, 1078,
-
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
-
- 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
- 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
- 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1081,
- 1082, 1083, 1083, 1084, 202, 202, 1085, 1085,
+ 856, 856, 863, 858, 867, 863, 863, 858,
+ 858, 858, 858, 858, 858, 880, 856, 858,
+ 881, 882, 883, 884, 885, 886, 887, 888,
+ 889, 890, 891, 891, 891, 892, 893, 893,
+
+ 894, 894, 894, 894, 894, 894, 894, 894,
+ 894, 894, 894, 894, 894, 894, 894, 894,
+ 894, 894, 894, 894, 894, 894, 894, 894,
+ 894, 894, 894, 894, 894, 894, 894, 894,
+
+ 894, 894, 894, 894, 894, 894, 221, 895,
+ 221, 221, 221, 221, 221, 895, 221, 221,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 897,
+ 897, 898, 898, 899, 900, 901, 901, 901,
+
+ 902, 902, 902, 902, 902, 902, 902, 902,
+ 902, 902, 902, 902, 902, 902, 902, 902,
+ 902, 902, 902, 902, 902, 902, 902, 902,
+ 902, 902, 902, 902, 902, 902, 902, 902,
+
+ 902, 902, 902, 902, 902, 902, 902, 902,
+ 902, 902, 902, 902, 902, 902, 902, 902,
+ 902, 902, 902, 902, 902, 902, 902, 902,
+ 902, 902, 903, 903, 903, 903, 903, 904,
+
+ 905, 906, 906, 906, 906, 906, 906, 906,
+ 906, 906, 906, 906, 906, 906, 906, 906,
+ 906, 906, 906, 906, 906, 906, 907, 907,
+ 907, 907, 907, 907, 907, 907, 907, 907,
+
+ 907, 907, 907, 907, 907, 907, 907, 907,
+ 907, 907, 907, 907, 907, 907, 907, 907,
+ 907, 907, 907, 907, 907, 907, 907, 907,
+ 907, 907, 907, 907, 907, 907, 907, 907,
+
+ 907, 907, 907, 908, 908, 908, 908, 908,
+ 909, 909, 909, 909, 909, 909, 909, 909,
+ 909, 909, 909, 909, 909, 909, 909, 909,
+ 909, 909, 909, 909, 909, 909, 909, 909,
+
+ 909, 909, 909, 910, 910, 910, 910, 910,
+ 910, 910, 910, 910, 910, 910, 910, 910,
+ 910, 910, 910, 910, 910, 910, 910, 910,
+ 910, 910, 910, 910, 910, 910, 910, 910,
+
+ 910, 910, 910, 910, 910, 910, 910, 910,
+ 910, 910, 910, 910, 910, 910, 910, 910,
+ 910, 910, 910, 910, 910, 910, 910, 910,
+ 910, 910, 911, 911, 911, 911, 911, 911,
+
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 221, 912, 912, 912, 912, 221, 221,
+ 912, 912, 912, 912, 912, 912, 912, 221,
+ 912, 221, 912, 912, 912, 912, 221, 221,
+
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 221, 912, 912, 912, 912, 221, 221,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 221, 912, 912, 912, 912, 221, 221,
+ 912, 912, 912, 912, 912, 912, 912, 221,
+
+ 912, 221, 912, 912, 912, 912, 221, 221,
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 912, 912, 912, 912, 912, 912, 221,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 221, 912, 912, 912, 912, 221, 221,
+ 912, 912, 912, 912, 912, 912, 912, 913,
+
+ 912, 912, 912, 912, 912, 912, 912, 913,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 912, 912, 912, 912, 912,
+ 912, 912, 912, 221, 221, 914, 914, 915,
+
+ 916, 917, 918, 919, 919, 919, 919, 918,
+ 918, 920, 921, 922, 923, 924, 925, 926,
+ 927, 928, 929, 929, 929, 929, 929, 929,
+ 929, 929, 929, 929, 929, 221, 221, 221,
+
+ 913, 913, 913, 913, 913, 913, 913, 913,
+ 913, 913, 913, 913, 913, 913, 913, 913,
+ 930, 930, 930, 930, 930, 930, 930, 930,
+ 930, 930, 221, 221, 221, 221, 221, 221,
+
+ 931, 932, 933, 934, 935, 936, 937, 938,
+ 939, 940, 941, 942, 943, 944, 945, 946,
+ 947, 948, 949, 950, 951, 952, 953, 954,
+ 955, 956, 957, 958, 959, 960, 961, 962,
+
+ 963, 964, 965, 966, 967, 968, 969, 970,
+ 971, 972, 973, 974, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986,
+ 987, 988, 989, 990, 991, 992, 993, 994,
+
+ 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1011, 1011, 1011, 1011, 1012, 221, 221,
+ 1013, 1013, 1013, 1013, 1013, 1013, 221, 221,
+
+ 1014, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1016, 1017, 1015,
+ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+
+ 1019, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+ 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+ 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+ 1020, 1020, 1020, 1021, 1022, 221, 221, 221,
+
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 1023, 1023, 1023, 1024, 1024, 1024, 1025, 1025,
+ 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ 1026, 221, 221, 221, 221, 221, 221, 221,
+
+ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ 1027, 1027, 1027, 1027, 1027, 1028, 1027, 1027,
+ 1027, 1027, 1029, 1029, 1030, 1031, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 1028,
+
+ 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1032, 1033, 1033, 1034, 1035, 1035, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1037, 1037, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 221, 1038, 1038,
+ 1038, 221, 1039, 1039, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1041, 1041, 1042, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1042, 1042,
+
+ 1042, 1042, 1042, 1042, 1042, 1042, 1043, 1042,
+ 1042, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1044, 1043, 1045, 1045, 1046, 1047,
+ 1048, 1049, 1048, 1050, 1040, 1051, 221, 221,
+
+ 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
+ 1060, 1061, 221, 221, 221, 221, 221, 221,
+ 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+ 1062, 1062, 221, 221, 221, 221, 221, 221,
+
+ 1063, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
+ 1070, 1071, 1072, 1073, 1073, 1073, 1074, 1075,
+ 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1085, 221, 221, 221, 221, 221, 221,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1087, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
- 1086, 1086, 1086, 1086, 1086, 1087, 1088, 1087,
- 1088, 1088, 1088, 1088, 1088, 1088, 1088, 202,
-
- 1089, 1090, 1088, 1090, 1090, 1088, 1088, 1088,
- 1088, 1088, 1088, 1088, 1088, 1087, 1087, 1087,
- 1087, 1087, 1087, 1088, 1088, 1091, 1091, 1091,
- 1091, 1091, 1091, 1091, 1091, 202, 202, 1092,
-
- 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100,
- 1101, 1102, 202, 202, 202, 202, 202, 202,
- 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100,
- 1101, 1102, 202, 202, 202, 202, 202, 202,
-
- 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104,
- 1105, 1105, 1105, 1105, 1103, 1103, 202, 202,
- 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
- 1107, 1107, 1107, 1106, 1106, 1107, 1108, 1109,
-
- 1109, 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,
-
- 1110, 1110, 1110, 1110, 1111, 1112, 1113, 1112,
- 1113, 1112, 1113, 1112, 1113, 1112, 1113, 1112,
- 1112, 1112, 1113, 1112, 1112, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1088, 221, 221, 221, 221, 221, 221, 221,
+
+ 1089, 1089, 1089, 1089, 1089, 1090, 1090, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+
+ 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1091, 1092, 221, 221, 221, 221, 221,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1093, 1094, 1094, 221,
+
+ 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1095,
+ 1095, 1096, 1096, 1096, 221, 221, 221, 221,
+ 1096, 1096, 1095, 1096, 1096, 1096, 1096, 1096,
+ 1096, 1097, 1098, 1099, 221, 221, 221, 221,
+
+ 1100, 221, 221, 221, 1101, 1101, 1102, 1103,
+ 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111,
1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 1114, 1115, 1110, 1110,
- 1110, 1110, 1110, 1116, 1110, 1116, 1111, 1111,
-
- 1116, 1116, 1110, 1116, 1117, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 202, 202, 202, 202,
- 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125,
- 1126, 1127, 1128, 1128, 1129, 1130, 1128, 1128,
-
- 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- 1131, 1131, 1131, 1132, 1133, 1132, 1132, 1132,
- 1132, 1132, 1132, 1132, 1131, 1131, 1131, 1131,
- 1131, 1131, 1131, 1131, 1131, 202, 202, 202,
-
- 1134, 1134, 1135, 1136, 1136, 1136, 1136, 1136,
- 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
- 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
- 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
-
- 1136, 1135, 1134, 1134, 1134, 1134, 1135, 1135,
- 1134, 1134, 1137, 1138, 1139, 1139, 1136, 1136,
- 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
- 1148, 1149, 1150, 1150, 1150, 1150, 1150, 1150,
-
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
-
- 1151, 1151, 1151, 1151, 1151, 1151, 1152, 1153,
- 1154, 1154, 1153, 1153, 1153, 1154, 1153, 1154,
- 1154, 1154, 1155, 1155, 202, 202, 202, 202,
- 202, 202, 202, 202, 1156, 1156, 1156, 1156,
-
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
-
- 1157, 1157, 1157, 1157, 1158, 1158, 1158, 1158,
- 1158, 1158, 1158, 1158, 1159, 1159, 1159, 1159,
- 1159, 1159, 1159, 1159, 1158, 1158, 1159, 1160,
- 202, 202, 202, 1161, 1161, 1162, 1162, 1162,
-
- 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
- 1171, 1172, 202, 202, 202, 1157, 1157, 1157,
- 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180,
- 1181, 1182, 1183, 1183, 1183, 1183, 1183, 1183,
-
- 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1184, 1184, 1184, 1184, 1184, 1184, 1185, 1185,
-
- 1186, 1187, 1188, 1189, 1189, 1190, 1191, 1192,
- 1193, 202, 202, 202, 202, 202, 202, 202,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 202, 202, 1194, 1194, 1194,
-
- 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1196, 1196, 1196, 1197, 1198, 1199, 1199, 1199,
- 1199, 1199, 1196, 1196, 1199, 1199, 1199, 1199,
-
- 1196, 1200, 1198, 1198, 1198, 1198, 1198, 1198,
- 1198, 1201, 1201, 1201, 1201, 1199, 1201, 1201,
- 1201, 1201, 1201, 1202, 1203, 1202, 1202, 1204,
- 1106, 1106, 1205, 202, 202, 202, 202, 202,
-
- 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, 1206, 1206,
- 1206, 1206, 1206, 1207, 1208, 1208, 1208, 1209,
- 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- 1208, 1208, 1208, 1209, 1208, 1208, 1208, 1208,
-
- 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- 1208, 1208, 1208, 1208, 1208, 1208, 1209, 1208,
- 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- 1208, 1208, 1208, 1208, 1208, 1210, 1210, 1210,
-
- 1210, 1210, 1208, 1208, 1208, 1208, 1210, 1210,
- 1210, 1210, 1210, 114, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115,
- 1211, 1212, 115, 115, 115, 1213, 115, 115,
-
- 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 1214, 115,
- 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 1215, 1215, 1215, 1215, 1215,
-
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1216,
-
- 191, 191, 190, 191, 1217, 1217, 1217, 1217,
- 1217, 1217, 1218, 1219, 1219, 1220, 1221, 1222,
- 1223, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
- 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
-
- 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1106,
- 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
- 1106, 1106, 1106, 1106, 1106, 1106, 1224, 1225,
- 1225, 1226, 202, 1227, 1228, 1199, 1217, 1218,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 1229, 1230,
- 1231, 1232, 1233, 1234, 1235, 1235, 1236, 1235,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 1237, 1238, 1237, 1238, 1237, 1238,
-
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
- 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
- 1239, 1239, 1239, 1239, 1239, 1239, 202, 202,
- 1240, 1240, 1240, 1240, 1240, 1240, 202, 202,
-
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
- 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
- 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
-
- 1239, 1239, 1239, 1239, 1239, 1239, 202, 202,
- 1240, 1240, 1240, 1240, 1240, 1240, 202, 202,
- 1241, 1239, 1242, 1239, 1243, 1239, 1244, 1239,
- 202, 1240, 202, 1240, 202, 1240, 202, 1240,
-
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
- 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
- 1245, 1246, 1247, 1248, 1247, 1248, 1249, 1250,
- 1251, 1252, 1253, 1254, 1255, 1256, 202, 202,
-
- 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
- 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272,
- 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280,
- 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288,
-
- 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296,
- 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304,
- 1239, 1239, 1305, 1306, 1307, 202, 1308, 1309,
- 1240, 1240, 1310, 1311, 1312, 207, 1313, 207,
-
- 207, 1314, 1315, 1316, 1317, 202, 1318, 1319,
- 1320, 1321, 1320, 1321, 1322, 1314, 1314, 1314,
- 1239, 1239, 1323, 1324, 202, 202, 1325, 1326,
- 1240, 1240, 1327, 1328, 202, 1314, 1314, 1314,
-
- 1239, 1239, 1329, 1330, 1331, 1332, 1333, 1334,
- 1240, 1240, 1335, 1336, 1337, 1314, 1338, 1338,
- 202, 202, 1339, 1340, 1341, 202, 1342, 1343,
- 1344, 1345, 1346, 1347, 1348, 1349, 207, 202,
-
- 1350, 1350, 1351, 1351, 1351, 1351, 1351, 1352,
- 1351, 1351, 1351, 1353, 1354, 1355, 1356, 1357,
- 1358, 1359, 1358, 1360, 1361, 1362, 14, 1363,
- 1364, 1365, 1366, 1367, 1367, 1368, 1366, 1367,
-
- 14, 14, 14, 14, 1369, 1370, 1370, 1371,
- 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379,
- 13, 13, 13, 1380, 1380, 1381, 1382, 1382,
- 14, 1383, 1384, 14, 1385, 1386, 1363, 43,
-
- 43, 14, 14, 14, 1387, 16, 1388, 1389,
- 1390, 1390, 1391, 1391, 1391, 1391, 1392, 1392,
- 1392, 1392, 1393, 1394, 1395, 1396, 1397, 1398,
- 1397, 1397, 1397, 1397, 1396, 1397, 1397, 1399,
-
- 1400, 1401, 1401, 1401, 1402, 1403, 1404, 1405,
- 1406, 1407, 1408, 1408, 1408, 1408, 1408, 1408,
- 1409, 1410, 202, 202, 1411, 1412, 1413, 1414,
- 1415, 1416, 1417, 1417, 1418, 1419, 1420, 160,
-
- 1409, 63, 58, 59, 1411, 1412, 1413, 1414,
- 1415, 1416, 1417, 1417, 1418, 1419, 1420, 202,
- 1215, 1215, 1215, 1215, 1215, 1421, 1421, 1421,
- 1421, 1421, 1421, 1421, 1421, 202, 202, 202,
-
- 12, 12, 12, 12, 12, 12, 12, 50,
- 1422, 12, 12, 1423, 1424, 1425, 1425, 1425,
- 1426, 1426, 1427, 1427, 1427, 1427, 1428, 1429,
- 1429, 1430, 1431, 1432, 1433, 1433, 1434, 1435,
-
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 173, 173, 180, 180, 173, 173, 173, 173,
- 180, 180, 180, 173, 173, 1437, 1437, 1437,
-
- 1437, 173, 1438, 1438, 1439, 1440, 1440, 197,
- 1441, 197, 1440, 1442, 1218, 1218, 1218, 1218,
- 1219, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1443, 1443, 1444, 1445, 51, 1443, 1443, 1444,
- 51, 1445, 1446, 1444, 1444, 1444, 1446, 1446,
- 1444, 1444, 1444, 1446, 51, 1444, 1447, 51,
- 36, 1444, 1444, 1444, 1444, 1444, 51, 51,
-
- 1443, 1443, 1443, 51, 1444, 51, 1448, 51,
- 1444, 51, 1449, 1450, 1444, 1444, 1451, 1446,
- 1444, 1444, 1452, 1444, 1446, 1453, 1453, 1453,
- 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1459,
-
- 1460, 1393, 1393, 1393, 1393, 1459, 1458, 1458,
- 1458, 1458, 1461, 1393, 1462, 1463, 1464, 1465,
- 1466, 1466, 1466, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65,
-
- 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
- 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
- 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
- 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
- 1469, 1469, 1469, 111, 123, 1470, 1470, 1470,
- 1470, 1466, 1471, 1471, 202, 202, 202, 202,
- 36, 36, 36, 36, 36, 51, 51, 51,
- 51, 51, 1472, 1472, 51, 51, 51, 51,
-
- 36, 51, 51, 36, 51, 51, 36, 51,
- 51, 51, 51, 51, 51, 51, 1472, 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, 1473, 1472, 1472,
- 51, 51, 36, 51, 36, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
-
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 1455, 1455, 1455, 1455, 1455,
- 1455, 1455, 1455, 1455, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 36, 36, 36, 36, 1472, 36, 36, 36,
- 1474, 1475, 1474, 1476, 1477, 1476, 36, 36,
- 36, 36, 18, 57, 36, 1478, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 1479,
-
- 1480, 1481, 1482, 36, 1483, 36, 1472, 36,
- 36, 36, 36, 36, 1418, 1418, 36, 1418,
- 1418, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 1484, 1485, 36, 36,
-
- 36, 1472, 36, 1486, 1472, 1487, 36, 1472,
- 36, 1472, 36, 36, 1488, 36, 36, 36,
- 36, 36, 1484, 1485, 1484, 1485, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36,
-
- 1472, 36, 1472, 36, 1484, 1485, 1484, 1485,
- 1484, 1485, 1484, 1485, 36, 1472, 1489, 1490,
- 1489, 1490, 1484, 1485, 1489, 1490, 1484, 1485,
- 1489, 1490, 1484, 1485, 1484, 1485, 1484, 1485,
-
- 1489, 1490, 1484, 1485, 1489, 1490, 1484, 1485,
- 1489, 1490, 1484, 1485, 36, 36, 36, 1484,
- 1485, 1484, 1485, 36, 36, 36, 36, 36,
- 1491, 36, 36, 36, 36, 36, 36, 36,
-
- 36, 36, 1484, 1485, 36, 36, 1492, 36,
- 1493, 1494, 36, 1494, 1472, 1472, 1472, 1472,
- 1484, 1485, 1484, 1485, 1484, 1485, 1484, 1485,
- 1495, 36, 36, 36, 36, 36, 36, 36,
-
- 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 1484, 1485, 1484, 1485, 1496, 36, 36,
- 1484, 1485, 36, 36, 36, 36, 1484, 1485,
- 1484, 1485, 1484, 1485, 1484, 1485, 1484, 1485,
-
- 1489, 1490, 1489, 1490, 1484, 1485, 1484, 1485,
- 1484, 1485, 1489, 1490, 1489, 1490, 36, 1497,
- 1484, 1485, 1498, 1498, 1498, 1393, 1499, 1499,
- 1393, 1393, 1500, 1500, 1500, 1501, 1501, 1393,
-
- 51, 1455, 51, 51, 51, 51, 51, 51,
- 16, 1388, 16, 1388, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 1502, 1502, 51, 51, 51, 51,
-
- 36, 36, 51, 51, 51, 51, 51, 51,
- 51, 1503, 1504, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
-
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
-
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1455, 1393, 1455, 1455, 1455,
-
- 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455,
- 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455,
- 1455, 1455, 1455, 1455, 1455, 1506, 1455, 1455,
- 1455, 1455, 1455, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
-
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1507,
- 1507, 1462, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1508, 1508, 1508, 1508,
-
- 1508, 1508, 1463, 1463, 1463, 1463, 1463, 1463,
- 1509, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1511, 1511, 1511, 1511, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1513, 1513, 1513, 1513, 1514,
-
- 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, 1455, 1455, 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,
-
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522,
- 1523, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 1515, 1516, 1517, 1518,
- 1519, 1520, 1521, 1522, 1523, 65, 65, 65,
-
- 65, 65, 65, 65, 65, 65, 65, 65,
- 63, 58, 59, 1411, 1412, 1413, 1414, 1415,
- 1416, 1524, 1524, 1524, 1524, 1524, 1524, 1524,
- 1524, 1524, 1524, 1524, 1525, 1525, 1525, 1525,
-
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
-
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
- 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
-
- 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
- 1527, 1527, 1528, 1529, 1529, 1529, 1529, 1529,
- 1529, 1529, 1529, 1529, 1529, 1530, 1531, 1532,
- 1533, 1534, 1535, 1536, 1537, 1538, 1529, 1539,
-
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
-
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 36,
- 51, 51, 51, 51, 51, 51, 51, 51,
-
- 51, 36, 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,
- 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1502, 1502, 1502, 1502, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1540, 1540, 1461, 1461,
- 1541, 1455, 1502, 1502, 1502, 1542, 1502, 1502,
-
- 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, 1502, 1502, 1502, 51, 51, 51, 51,
-
- 51, 51, 51, 51, 51, 51, 51, 51,
- 1502, 51, 51, 51, 51, 51, 51, 36,
- 1455, 1455, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1462, 1541,
-
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1462, 1543, 1509, 1509,
-
- 1507, 1507, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1544, 1462, 1462, 1462,
- 1462, 1462, 1463, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1545, 1545, 1545,
-
- 1546, 1546, 1546, 1546, 1545, 1545, 1545, 1545,
- 1545, 1509, 1509, 1509, 1509, 1545, 1510, 1545,
- 1545, 1545, 1509, 1545, 1545, 1509, 1509, 1509,
- 1545, 1545, 1509, 1509, 1545, 1509, 1509, 1545,
-
- 1545, 1545, 1510, 1509, 1510, 1510, 1510, 1510,
- 1509, 1509, 1545, 1509, 1509, 1509, 1509, 1509,
- 1509, 1545, 1545, 1545, 1545, 1545, 1509, 1545,
- 1545, 1547, 1545, 1509, 1509, 1545, 1545, 1545,
-
- 1548, 1502, 1502, 1502, 1502, 1510, 51, 51,
- 1502, 1502, 1549, 1549, 1542, 1542, 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,
- 1510, 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, 1510, 51, 1510, 51,
- 51, 51, 51, 1510, 1510, 1510, 51, 1509,
- 51, 51, 51, 1550, 1550, 1550, 1550, 1551,
-
- 1551, 51, 1552, 1552, 1502, 51, 51, 51,
- 1553, 1554, 1553, 1554, 1553, 1554, 1553, 1554,
- 1553, 1554, 1553, 1554, 1553, 1554, 1555, 1556,
- 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564,
-
- 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562,
- 1563, 1564, 1555, 1556, 1557, 1558, 1559, 1560,
- 1561, 1562, 1563, 1564, 51, 1510, 1510, 1510,
- 51, 51, 51, 51, 51, 51, 51, 51,
-
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 1510, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 1510,
-
- 1565, 1565, 1565, 1566, 1567, 1568, 1569, 1508,
- 1570, 1571, 1508, 1572, 1573, 1574, 1575, 1575,
- 1393, 1393, 1393, 1393, 1393, 1576, 1577, 1393,
- 1393, 1393, 1393, 1393, 1578, 1576, 1577, 1393,
-
- 1393, 1393, 1576, 1577, 1576, 1577, 1553, 1554,
- 1553, 1554, 1553, 1554, 1579, 1580, 1579, 1580,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1553, 1554, 1553, 1554, 1553,
- 1554, 1553, 1554, 1553, 1554, 1582, 1583, 1584,
- 1585, 1553, 1554, 1553, 1554, 1553, 1554, 1553,
- 1554, 1393, 1393, 1586, 1393, 1393, 1393, 1393,
-
- 1587, 1393, 1393, 1588, 1576, 1577, 1393, 1393,
- 1576, 1577, 1576, 1577, 1576, 1577, 1576, 1577,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1589, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1576, 1577, 1393, 1393, 1576, 1577, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1576,
- 1577, 1576, 1577, 1393, 1576, 1577, 1393, 1393,
- 1553, 1554, 1553, 1554, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1576, 1577, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1590, 1393, 1393,
- 1576, 1577, 1393, 1393, 1553, 1554, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1460, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1576, 1577, 1576, 1577, 1393,
- 1393, 1393, 1393, 1393, 1576, 1577, 1393, 1393,
- 1393, 1393, 1393, 1393, 1576, 1577, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1576, 1577, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1460, 1460, 1460, 1393,
- 1393, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
-
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
-
- 1577, 1576, 1577, 1393, 1393, 1393, 1576, 1577,
- 1576, 1577, 1576, 1577, 1576, 1577, 1393, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
-
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1393,
- 1393, 1393, 1393, 1393, 1591, 1393, 1592, 1393,
-
- 1393, 1393, 1393, 1593, 1594, 1593, 1393, 1393,
- 1393, 1393, 1393, 1393, 1576, 1577, 1595, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1576,
- 1577, 1576, 1577, 1393, 1393, 1393, 1393, 1393,
-
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1462, 1462,
- 1462, 1462, 1462, 1462, 1463, 1463, 1463, 1463,
- 1463, 1463, 1463, 1543, 1543, 1543, 1543, 1543,
-
- 1463, 1463, 1463, 1463, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573,
- 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573,
-
- 1573, 1573, 1573, 1573, 1573, 1543, 1543, 1573,
- 1573, 1573, 1573, 1573, 1573, 1512, 1512, 1512,
- 1543, 1543, 1543, 1543, 1543, 1509, 1509, 1509,
- 1509, 1509, 1512, 1512, 1512, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 202, 202, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 202, 1596,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1597, 1597, 1597, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1598, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1514, 1597, 1597, 1597, 1597, 1597,
- 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
-
- 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- 1597, 1597, 1597, 1597, 1471, 1471, 1471, 1471,
- 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- 1597, 1597, 1597, 1597, 1597, 1597, 1599, 1598,
-
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
-
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 202,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
-
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 202,
-
- 127, 123, 1602, 1603, 1604, 1605, 1606, 127,
- 123, 127, 123, 127, 123, 1607, 1608, 1609,
- 1610, 1235, 1237, 1238, 1611, 127, 123, 1611,
- 1235, 1235, 1235, 1235, 1612, 1612, 1613, 1614,
-
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
-
- 1615, 1616, 1615, 1616, 1617, 1618, 1618, 1618,
- 1618, 1618, 1618, 1619, 1620, 1619, 1620, 1621,
- 1621, 1621, 1622, 1623, 202, 202, 202, 202,
- 202, 1624, 1625, 1625, 1625, 1626, 1624, 1625,
-
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-
- 1627, 1627, 1627, 1627, 1627, 1627, 202, 1628,
- 202, 202, 202, 202, 202, 1628, 202, 202,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
-
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
-
- 1629, 1629, 1629, 1629, 1629, 1629, 1630, 1630,
- 202, 202, 202, 202, 202, 202, 202, 1631,
- 1632, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 1633,
-
- 871, 871, 871, 871, 871, 871, 871, 871,
- 871, 871, 871, 871, 871, 871, 871, 871,
- 871, 871, 871, 871, 871, 871, 871, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 871, 871, 871, 871, 871, 871, 871, 202,
- 871, 871, 871, 871, 871, 871, 871, 202,
- 871, 871, 871, 871, 871, 871, 871, 202,
- 871, 871, 871, 871, 871, 871, 871, 202,
-
- 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,
-
- 1634, 1634, 1635, 1636, 1635, 1636, 1634, 1634,
- 1634, 1635, 1636, 1634, 1635, 1636, 1397, 1397,
- 1397, 1397, 1397, 1397, 1397, 1397, 1396, 1637,
- 1638, 1639, 1640, 1641, 1635, 1636, 1641, 1641,
-
- 1642, 1643, 1579, 1580, 1579, 1580, 1579, 1580,
- 1579, 1580, 1639, 1639, 1639, 1639, 1644, 1645,
- 1639, 1646, 1647, 1648, 1648, 1647, 1647, 1647,
- 1647, 1647, 1649, 1649, 1650, 1651, 1651, 1652,
-
- 1653, 1651, 1654, 1655, 1655, 1656, 1656, 1656,
- 1656, 1656, 1657, 1658, 1657, 1658, 1657, 1659,
- 1596, 1596, 1660, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 202, 1661, 1661, 1661, 1661, 1662,
-
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
-
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1662, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
-
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 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,
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1663, 202, 202, 202, 202,
-
- 1351, 1664, 1665, 1666, 1502, 1667, 1668, 1669,
- 16, 1388, 16, 1388, 16, 1388, 16, 1388,
- 16, 1388, 1502, 1502, 16, 1388, 16, 1388,
- 16, 1388, 16, 1388, 1670, 1366, 1671, 1671,
-
- 1502, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
- 1669, 1669, 1672, 1673, 174, 1674, 1675, 1675,
- 1676, 1677, 1677, 1677, 1677, 1678, 1679, 1502,
- 1680, 1680, 1680, 1681, 1682, 1683, 1663, 1502,
-
- 202, 1684, 1685, 1684, 1685, 1684, 1685, 1684,
- 1685, 1684, 1685, 1685, 1686, 1685, 1686, 1685,
- 1686, 1685, 1686, 1685, 1686, 1685, 1686, 1685,
- 1686, 1685, 1686, 1685, 1686, 1685, 1686, 1685,
-
- 1686, 1685, 1686, 1684, 1685, 1686, 1685, 1686,
- 1685, 1686, 1685, 1685, 1685, 1685, 1685, 1685,
- 1686, 1686, 1685, 1686, 1686, 1685, 1686, 1686,
- 1685, 1686, 1686, 1685, 1686, 1686, 1685, 1685,
-
- 1685, 1685, 1685, 1684, 1685, 1684, 1685, 1684,
- 1685, 1685, 1685, 1685, 1685, 1685, 1684, 1685,
- 1685, 1685, 1685, 1685, 1686, 1687, 1687, 202,
- 202, 1688, 1688, 1689, 1689, 1690, 1691, 1692,
-
- 1693, 1694, 1695, 1694, 1695, 1694, 1695, 1694,
- 1695, 1694, 1695, 1695, 1696, 1695, 1696, 1695,
- 1696, 1695, 1696, 1695, 1696, 1695, 1696, 1695,
- 1696, 1695, 1696, 1695, 1696, 1695, 1696, 1695,
-
- 1696, 1695, 1696, 1694, 1695, 1696, 1695, 1696,
- 1695, 1696, 1695, 1695, 1695, 1695, 1695, 1695,
- 1696, 1696, 1695, 1696, 1696, 1695, 1696, 1696,
- 1695, 1696, 1696, 1695, 1696, 1696, 1695, 1695,
-
- 1695, 1695, 1695, 1694, 1695, 1694, 1695, 1694,
- 1695, 1695, 1695, 1695, 1695, 1695, 1694, 1695,
- 1695, 1695, 1695, 1695, 1696, 1694, 1694, 1696,
- 1696, 1696, 1696, 1697, 1698, 1699, 1700, 1701,
-
- 202, 202, 202, 202, 202, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
-
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1703, 1704, 1705,
- 202, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 202,
- 1707, 1707, 1708, 1708, 1708, 1708, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1711, 1711, 1711, 1712, 1712, 1712, 1712, 1712,
-
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
-
- 1546, 1546, 1546, 1546, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
- 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
-
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1715, 1715, 202,
-
- 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
- 1708, 1708, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1716, 1716, 1716, 1716,
- 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
- 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
- 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
-
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1715, 1715, 1720, 1707,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
- 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1718, 1718, 1718, 1718,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
-
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1722,
-
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
-
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1718,
- 1718, 1718, 1718, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1718, 1718,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1718,
-
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
-
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
-
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
-
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
-
- 1725, 1725, 1725, 1725, 1725, 1725, 1726, 1726,
- 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
- 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
- 1726, 1726, 1726, 1726, 1727, 1727, 1727, 1727,
-
- 1727, 1727, 1727, 1727, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1729, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
-
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1732, 1732, 1732, 1732, 1732,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1733, 1733, 1733,
-
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1735, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
-
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
-
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 202, 202, 202,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
-
- 1736, 1736, 1737, 1737, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1737, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
-
- 1736, 1737, 1736, 1736, 1736, 1737, 1736, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
-
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1739, 1739, 1739, 1739, 1739, 1739, 1740, 1741,
-
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
-
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
- 1742, 1742, 1742, 1742, 1743, 1744, 1745, 1746,
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
-
- 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754,
- 1755, 1756, 1742, 1742, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
-
- 285, 286, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 1757, 267,
- 1758, 1758, 1758, 1759, 1760, 1760, 1760, 1760,
- 1760, 1760, 1760, 1760, 267, 267, 1759, 1761,
-
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 287, 288, 287, 288, 1762, 1762, 1763, 1760,
-
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
-
- 1764, 1764, 1764, 1764, 1764, 1764, 1765, 1765,
- 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
- 1766, 1766, 1767, 1768, 1769, 1769, 1769, 1768,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770,
- 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
- 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1772,
- 1772, 1772, 1772, 1645, 1645, 1645, 1645, 1645,
-
- 1773, 1773, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1235, 1235, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
-
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
-
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1612, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
- 1235, 1237, 1238, 1237, 1238, 1774, 1237, 1238,
-
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1645, 1775, 1775, 1237, 1238, 1776, 1777, 1778,
- 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786,
- 1785, 1786, 1785, 1786, 1785, 1786, 1785, 1786,
-
- 1779, 1780, 1779, 1780, 1779, 1780, 1779, 1780,
- 1779, 1780, 1787, 1788, 1789, 1790, 1791, 1792,
- 1793, 1794, 1795, 1796, 1797, 1798, 1797, 1798,
- 1799, 1800, 1801, 1802, 1801, 1802, 1801, 1802,
-
- 202, 202, 1801, 1802, 1803, 1804, 1805, 1806,
- 1807, 1806, 1807, 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, 1806, 1807, 1808,
- 1809, 1809, 1777, 1810, 1810, 1810, 1810, 1810,
-
- 1811, 1811, 1812, 1811, 1811, 1811, 1813, 1811,
- 1811, 1811, 1811, 1812, 1811, 1811, 1811, 1811,
- 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811,
- 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811,
-
- 1811, 1811, 1811, 1814, 1814, 1812, 1812, 1814,
- 1815, 1815, 1815, 1815, 1816, 202, 202, 202,
- 1717, 1717, 1717, 1717, 1717, 1717, 813, 813,
- 1428, 1817, 202, 202, 202, 202, 202, 202,
-
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
-
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1819, 1820, 1821, 1821, 1822, 1822,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1823, 1823, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
+ 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+ 1112, 1112, 1112, 1112, 1112, 1112, 221, 221,
+ 1112, 1112, 1112, 1112, 1112, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1114, 1114, 221, 221, 221, 221,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 221, 221, 221, 221, 221, 221,
+ 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122,
+ 1123, 1124, 1125, 221, 221, 221, 1126, 1126,
+
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+
+ 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
+ 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
+ 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1129,
+ 1130, 1131, 1131, 1132, 221, 221, 1133, 1133,
+
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1135, 1136, 1135,
+ 1136, 1136, 1136, 1136, 1136, 1136, 1136, 221,
+
+ 1137, 1138, 1136, 1138, 1138, 1136, 1136, 1136,
+ 1136, 1136, 1136, 1136, 1136, 1135, 1135, 1135,
+ 1135, 1135, 1135, 1136, 1136, 1139, 1139, 1139,
+ 1139, 1139, 1139, 1139, 1139, 221, 221, 1140,
+
+ 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
+ 1149, 1150, 221, 221, 221, 221, 221, 221,
+ 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
+ 1149, 1150, 221, 221, 221, 221, 221, 221,
+
+ 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1152,
+ 1153, 1153, 1153, 1153, 1151, 1151, 221, 221,
+ 1154, 1154, 1154, 1154, 1154, 1155, 1155, 1155,
+ 1155, 1155, 1155, 1154, 1154, 1155, 1156, 1157,
+
+ 1157, 1158, 1158, 1159, 1159, 1158, 1158, 1158,
+ 1158, 1158, 1159, 1158, 1158, 1158, 1158, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1160, 1160, 1160, 1160, 1161, 1162, 1163, 1162,
+ 1163, 1162, 1163, 1162, 1163, 1162, 1163, 1162,
+ 1162, 1162, 1163, 1162, 1162, 1162, 1162, 1162,
+ 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+
+ 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+ 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+ 1162, 1162, 1162, 1162, 1164, 1165, 1160, 1160,
+ 1160, 1160, 1160, 1166, 1160, 1166, 1161, 1161,
+
+ 1166, 1166, 1160, 1166, 1167, 1162, 1162, 1162,
+ 1162, 1162, 1162, 1162, 1168, 221, 221, 221,
+ 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
+ 1177, 1178, 1179, 1179, 1180, 1181, 1179, 1179,
+
+ 1181, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
+ 1182, 1182, 1182, 1183, 1184, 1183, 1183, 1183,
+ 1183, 1183, 1183, 1183, 1182, 1182, 1182, 1182,
+ 1182, 1182, 1182, 1182, 1182, 1185, 1185, 221,
+
+ 1186, 1186, 1187, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+
+ 1188, 1187, 1186, 1186, 1186, 1186, 1187, 1187,
+ 1186, 1186, 1189, 1190, 1191, 1191, 1188, 1188,
+ 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199,
+ 1200, 1201, 1202, 1202, 1202, 1202, 1202, 1202,
+
+ 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+ 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+ 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+ 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+
+ 1203, 1203, 1203, 1203, 1203, 1203, 1204, 1205,
+ 1206, 1206, 1205, 1205, 1205, 1206, 1205, 1206,
+ 1206, 1206, 1207, 1207, 221, 221, 221, 221,
+ 221, 221, 221, 221, 1208, 1208, 1208, 1208,
+
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+
+ 1209, 1209, 1209, 1209, 1210, 1210, 1210, 1210,
+ 1210, 1210, 1210, 1210, 1211, 1211, 1211, 1211,
+ 1211, 1211, 1211, 1211, 1210, 1210, 1211, 1212,
+ 221, 221, 221, 1213, 1213, 1214, 1214, 1214,
+
+ 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222,
+ 1223, 1224, 221, 221, 221, 1209, 1209, 1209,
+ 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232,
+ 1233, 1234, 1235, 1235, 1235, 1235, 1235, 1235,
+
+ 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
+ 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
+ 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
+ 1236, 1236, 1236, 1236, 1236, 1236, 1237, 1237,
+
+ 1238, 1239, 1240, 1241, 1241, 1242, 1243, 1244,
+ 1245, 221, 221, 221, 221, 221, 221, 221,
+ 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
+ 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
+
+ 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
+ 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
+ 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
+ 1246, 1246, 1246, 221, 221, 1246, 1246, 1246,
+
+ 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 1248, 1248, 1248, 1249, 1250, 1251, 1251, 1251,
+ 1251, 1251, 1248, 1248, 1251, 1251, 1251, 1251,
+
+ 1248, 1252, 1250, 1250, 1250, 1250, 1250, 1250,
+ 1250, 1253, 1253, 1253, 1253, 1251, 1253, 1253,
+ 1253, 1253, 1253, 1254, 1255, 1254, 1254, 1256,
+ 1154, 1154, 1257, 221, 221, 221, 221, 221,
+
+ 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, 1258, 1258,
+ 1258, 1258, 1258, 1259, 1260, 1260, 1260, 1261,
+ 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+ 1260, 1260, 1260, 1261, 1260, 1260, 1260, 1260,
+
+ 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+ 1260, 1260, 1260, 1260, 1260, 1260, 1261, 1260,
+ 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+ 1260, 1260, 1260, 1260, 1260, 1262, 1262, 1262,
+
+ 1262, 1262, 1260, 1260, 1260, 1260, 1262, 1262,
+ 1262, 1262, 1262, 129, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130,
+ 1263, 1264, 130, 130, 130, 1265, 130, 130,
+
+ 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 1266, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 1267, 1267, 1267, 1267, 1267,
+
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1268,
+
+ 1269, 1269, 1270, 1269, 1271, 1271, 1271, 1271,
+ 1271, 1271, 1272, 1273, 1273, 1274, 1275, 1276,
+ 1277, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+ 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+
+ 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1154,
+ 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+ 1154, 1154, 1154, 1154, 1154, 1154, 1278, 1279,
+ 1279, 1280, 1281, 1282, 1283, 1251, 1271, 1272,
+
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 1284, 1285,
+ 1286, 1287, 1288, 1289, 1290, 1290, 1291, 1290,
+
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 81, 83, 81, 83, 81, 83,
+ 81, 83, 1292, 1293, 1292, 1293, 1292, 1293,
+
+ 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
+ 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295,
+ 1294, 1294, 1294, 1294, 1294, 1294, 221, 221,
+ 1295, 1295, 1295, 1295, 1295, 1295, 221, 221,
+
+ 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
+ 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295,
+ 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
+ 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295,
+
+ 1294, 1294, 1294, 1294, 1294, 1294, 221, 221,
+ 1295, 1295, 1295, 1295, 1295, 1295, 221, 221,
+ 1296, 1294, 1297, 1294, 1298, 1294, 1299, 1294,
+ 221, 1295, 221, 1295, 221, 1295, 221, 1295,
+
+ 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
+ 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295,
+ 1300, 1301, 1302, 1303, 1302, 1303, 1304, 1305,
+ 1306, 1307, 1308, 1309, 1310, 1311, 221, 221,
+
+ 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319,
+ 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
+ 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335,
+ 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343,
+
+ 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351,
+ 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359,
+ 1294, 1294, 1360, 1361, 1362, 221, 1363, 1364,
+ 1295, 1295, 1365, 1366, 1367, 226, 1368, 226,
+
+ 226, 1369, 1370, 1371, 1372, 221, 1373, 1374,
+ 1375, 1376, 1375, 1376, 1377, 1369, 1369, 1369,
+ 1294, 1294, 1378, 1379, 221, 221, 1380, 1381,
+ 1295, 1295, 1382, 1383, 221, 1369, 1369, 1369,
+
+ 1294, 1294, 1384, 1385, 1386, 1387, 1388, 1389,
+ 1295, 1295, 1390, 1391, 1392, 1369, 1393, 1393,
+ 221, 221, 1394, 1395, 1396, 221, 1397, 1398,
+ 1399, 1400, 1401, 1402, 1403, 1404, 226, 221,
+
+ 1405, 1405, 1406, 1406, 1406, 1406, 1406, 1407,
+ 1406, 1406, 1406, 1408, 1409, 1410, 1411, 1412,
+ 1413, 1414, 1415, 1416, 1417, 1418, 54, 1419,
+ 1420, 1421, 1422, 1423, 1424, 1425, 1422, 1423,
+
+ 54, 54, 54, 1426, 1427, 1428, 1428, 1429,
+ 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437,
+ 1438, 1439, 1438, 1440, 1441, 1442, 1443, 1443,
+ 1426, 1444, 1445, 54, 1446, 1447, 1448, 1449,
+
+ 1449, 1426, 1426, 1426, 1450, 1451, 1452, 1453,
+ 1454, 1455, 1456, 1456, 1456, 1456, 1457, 1457,
+ 1457, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
+ 1462, 1462, 1462, 1462, 1461, 1462, 1462, 1464,
+
+ 1465, 1466, 1466, 1466, 1467, 1468, 1469, 1470,
+ 1471, 1472, 1473, 1473, 1473, 1473, 1473, 1473,
+ 1474, 1475, 221, 221, 1476, 1477, 1478, 1479,
+ 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
+
+ 1474, 70, 65, 66, 1476, 1477, 1478, 1479,
+ 1480, 1481, 1482, 1483, 1484, 1485, 1486, 221,
+ 1267, 1267, 1267, 1267, 1267, 1488, 1488, 1488,
+ 1488, 1488, 1488, 1488, 1488, 221, 221, 221,
+
+ 768, 768, 768, 768, 768, 768, 768, 1489,
+ 1490, 1491, 768, 1492, 1493, 1494, 1494, 1494,
+ 1495, 1495, 1496, 1496, 1496, 1496, 1497, 1498,
+ 1498, 1499, 1500, 1501, 1502, 1502, 1503, 1504,
+
+ 1505, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 288, 288, 1507, 1507, 288, 288, 288, 288,
+ 1507, 1507, 1507, 288, 288, 1508, 1508, 1508,
+
+ 1508, 288, 1509, 1509, 1510, 1511, 1511, 1512,
+ 1513, 1512, 1511, 1514, 1272, 1272, 1272, 1272,
+ 1273, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1515, 1515, 1516, 1517, 1518, 1519, 1515, 1516,
+ 1518, 1517, 1520, 1516, 1516, 1516, 1520, 1520,
+ 1516, 1516, 1516, 1521, 1518, 1516, 1522, 1518,
+ 1523, 1516, 1516, 1516, 1516, 1516, 1518, 1518,
+
+ 1524, 1525, 1526, 1518, 1516, 1518, 1527, 1518,
+ 1516, 1518, 1528, 1529, 1516, 1516, 1530, 1520,
+ 1516, 1516, 1531, 1516, 1520, 1532, 1532, 1532,
+ 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1538,
+
+ 1539, 1458, 1458, 1458, 1458, 1538, 1537, 1537,
+ 1537, 1537, 1540, 1458, 1541, 1542, 1543, 1544,
+ 1545, 1545, 1545, 72, 72, 1546, 1546, 1546,
+ 1546, 1546, 1546, 72, 72, 72, 72, 1546,
+
+ 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+ 1547, 1547, 1547, 1547, 1548, 1548, 1548, 1548,
+ 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
+ 1549, 1549, 1550, 1550, 1550, 1550, 1550, 1550,
+
+ 1551, 1551, 1551, 1552, 138, 1553, 1553, 1553,
+ 1553, 1554, 1555, 1555, 221, 221, 221, 221,
+ 75, 75, 75, 75, 1556, 61, 61, 61,
+ 61, 61, 1557, 1557, 1518, 1518, 1518, 1518,
+
+ 1523, 1518, 1518, 1523, 1518, 1518, 1523, 1518,
+ 1518, 56, 56, 1518, 1518, 1518, 1557, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1558, 1558, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1559, 1557, 1557,
+ 1518, 1518, 75, 1518, 75, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1558,
+ 1518, 1518, 1518, 1534, 1534, 1534, 1534, 1534,
+ 1534, 1534, 1534, 1534, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+ 75, 1523, 75, 75, 1557, 1523, 1523, 75,
+ 1560, 1561, 1562, 1563, 1564, 1565, 1523, 75,
+ 1523, 75, 1566, 1567, 1523, 1568, 1523, 1523,
+ 1523, 1523, 75, 1523, 1523, 75, 75, 1569,
+
+ 1570, 1571, 1572, 75, 1573, 75, 1557, 75,
+ 75, 75, 75, 75, 1574, 1575, 75, 1575,
+ 1575, 1523, 1523, 1523, 75, 75, 75, 75,
+ 1523, 1523, 1523, 1523, 1576, 1577, 1523, 1523,
+
+ 1523, 1557, 1523, 1578, 1557, 1579, 1523, 1557,
+ 75, 1557, 1523, 1523, 1580, 1523, 1523, 1523,
+ 1523, 1523, 1576, 1581, 1582, 1581, 1523, 1523,
+ 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
+
+ 1583, 75, 1557, 1523, 1576, 1577, 1576, 1577,
+ 1582, 1581, 1576, 1577, 1523, 1557, 1584, 1585,
+ 1586, 1587, 1582, 1581, 1586, 1587, 1582, 1581,
+ 1586, 1587, 1582, 1581, 1582, 1581, 1582, 1581,
+
+ 1586, 1587, 1576, 1577, 1586, 1587, 1576, 1577,
+ 1586, 1587, 1582, 1581, 1523, 1523, 1523, 1582,
+ 1581, 1582, 1581, 1523, 1523, 75, 1523, 1523,
+ 1588, 75, 1523, 1523, 1523, 1523, 1523, 1523,
+
+ 1523, 1523, 1582, 1581, 1523, 75, 1589, 1523,
+ 1590, 1591, 1523, 1591, 1557, 1557, 1557, 1557,
+ 1582, 1581, 1582, 1581, 1582, 1581, 1582, 1581,
+ 1592, 1523, 1523, 1523, 1523, 1523, 1523, 75,
+
+ 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
+ 1523, 1582, 1581, 1582, 1581, 1593, 1523, 1523,
+ 1582, 1581, 1523, 1523, 1523, 1523, 1582, 1581,
+ 1582, 1581, 1582, 1581, 1582, 1581, 1582, 1581,
+
+ 1586, 1587, 1586, 1587, 1582, 1581, 1582, 1581,
+ 1582, 1581, 1586, 1587, 1586, 1587, 1523, 1594,
+ 1582, 1581, 1595, 1595, 1595, 1458, 1596, 1596,
+ 1458, 1458, 1597, 1597, 1597, 1598, 1598, 1458,
+
+ 1518, 1534, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1451, 1452, 1451, 1452, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1558, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1599, 1599, 1518, 1518, 1518, 1518,
+
+ 1523, 1523, 1518, 1518, 1518, 1518, 1518, 1518,
+ 56, 1600, 1601, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1534, 1458, 1534, 1534, 1534,
+
+ 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
+ 1603, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
+ 1534, 1534, 1534, 1534, 1534, 1604, 1534, 1534,
+ 1534, 1534, 1534, 1458, 1458, 1458, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1540, 1540, 1540, 1540,
+ 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540,
+
+ 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540,
+ 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1605,
+ 1606, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+ 1541, 1541, 1541, 1541, 1607, 1607, 1607, 1607,
+
+ 1607, 1607, 1542, 1542, 1542, 1542, 1542, 1542,
+ 1608, 1609, 1609, 1609, 1609, 1610, 1610, 1610,
+ 1611, 1612, 1612, 1611, 1613, 1613, 1613, 1613,
+ 1614, 1614, 1614, 1615, 1615, 1615, 1615, 1616,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1534, 1534, 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,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624,
+ 1625, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 1626, 1627, 1628, 1629,
+ 1630, 1631, 1632, 1633, 1634, 1635, 1635, 1635,
+
+ 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
+ 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
+ 1644, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1646, 1646, 1646, 1646,
+
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1647, 1647,
+ 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647,
+
+ 1647, 1647, 1648, 1647, 1647, 1647, 1647, 1647,
+ 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647,
+ 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649,
+ 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649,
+
+ 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649,
+ 1649, 1649, 1650, 1651, 1651, 1651, 1651, 1651,
+ 1651, 1651, 1651, 1651, 1651, 1652, 1653, 1654,
+ 1655, 1656, 1657, 1658, 1659, 1660, 1651, 1661,
+
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1518, 1518, 1518, 1518,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
+ 1518, 1518, 1558, 1558, 1558, 1558, 1540, 1540,
+ 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540,
+
+ 1558, 1558, 1518, 1558, 1558, 1558, 1558, 1558,
+ 1558, 1558, 56, 56, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1558, 1558, 1518, 1518, 61, 75,
+ 1518, 1518, 1518, 1518, 1558, 1558, 1518, 1518,
+
+ 61, 75, 1518, 1518, 1518, 1518, 1558, 1558,
+ 1558, 1518, 1518, 1558, 1518, 1518, 1558, 1558,
+ 1558, 1558, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1558, 1558, 1558, 1558, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1558,
+ 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
+ 1458, 1458, 1458, 1662, 1662, 1663, 1663, 1458,
+
+ 1664, 1664, 1664, 1664, 56, 61, 1558, 56,
+ 56, 61, 56, 56, 56, 56, 61, 61,
+ 56, 56, 56, 1518, 1665, 1665, 1666, 1666,
+ 1667, 1603, 1664, 1664, 1668, 1669, 1668, 1664,
+
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 1664, 1664, 1664, 56, 56, 56, 56,
+
+ 61, 56, 61, 56, 56, 56, 56, 56,
+ 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670,
+ 1670, 1670, 1670, 1670, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+
+ 61, 61, 56, 61, 61, 61, 56, 61,
+ 1668, 61, 61, 56, 61, 61, 56, 1556,
+ 1603, 1603, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1671, 1672,
+
+ 1666, 1666, 1666, 1666, 1666, 1666, 1540, 1540,
+ 1540, 1540, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1605, 1605, 1671, 1673, 1671, 1671, 1671, 1671,
+ 1671, 1671, 1671, 1671, 1671, 1674, 1675, 1675,
+
+ 1605, 1676, 1671, 1671, 1671, 1671, 1671, 1671,
+ 1671, 1671, 1673, 1673, 1677, 1671, 1671, 1671,
+ 1671, 1671, 1678, 1674, 1674, 1674, 1674, 1674,
+ 1674, 1674, 1674, 1674, 1674, 1679, 1679, 1680,
+
+ 1681, 1681, 1681, 1681, 1679, 1679, 1680, 1680,
+ 1680, 1675, 1675, 1675, 1675, 1680, 1609, 1680,
+ 1680, 1680, 1675, 1680, 1679, 1675, 1675, 1675,
+ 1680, 1680, 1675, 1675, 1680, 1675, 1675, 1680,
+
+ 1680, 1680, 1610, 1675, 1610, 1610, 1610, 1610,
+ 1675, 1675, 1679, 1675, 1675, 1675, 1675, 1675,
+ 1675, 1680, 1679, 1679, 1680, 1679, 1675, 1680,
+ 1680, 1682, 1679, 1675, 1675, 1679, 1680, 1680,
+
+ 1683, 1664, 1664, 1664, 1664, 1609, 1518, 1518,
+ 1664, 1664, 1684, 1684, 1669, 1669, 56, 56,
+ 56, 56, 56, 1518, 56, 1518, 56, 1518,
+ 1518, 1518, 1518, 1518, 1518, 56, 1518, 1518,
+
+ 1518, 56, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1609, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 56, 56, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1558, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 56, 1518, 1518, 56,
+ 1518, 1518, 1518, 1518, 1609, 1518, 1609, 1518,
+ 1518, 1518, 1518, 1609, 1609, 1609, 1518, 1685,
+ 1518, 1518, 1518, 1686, 1686, 1686, 1686, 1687,
+
+ 1687, 1518, 1688, 1689, 1664, 56, 56, 56,
+ 1690, 1691, 1690, 1691, 1690, 1691, 1690, 1691,
+ 1690, 1691, 1690, 1691, 1690, 1691, 1692, 1693,
+ 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701,
+
+ 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709,
+ 1710, 1711, 1702, 1703, 1704, 1705, 1706, 1707,
+ 1708, 1709, 1710, 1711, 1518, 1609, 1609, 1609,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 56, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1609, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1609,
+
+ 1712, 1712, 1712, 1713, 1714, 1715, 1716, 1607,
+ 1717, 1718, 1607, 1719, 1720, 1721, 1722, 1722,
+ 1458, 1458, 1458, 1458, 1458, 1723, 1724, 1458,
+ 1458, 1458, 1458, 1458, 1725, 1723, 1724, 1458,
+
+ 1458, 1458, 1723, 1724, 1723, 1724, 1726, 1727,
+ 1726, 1727, 1726, 1727, 1728, 1729, 1730, 1731,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1662, 1662, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+ 1458, 1458, 1458, 1690, 1691, 1726, 1727, 1690,
+ 1691, 1690, 1691, 1690, 1691, 1733, 1734, 1735,
+ 1736, 1690, 1691, 1690, 1691, 1690, 1691, 1690,
+ 1691, 1458, 1458, 1737, 1458, 1458, 1458, 1458,
+
+ 1738, 1458, 1458, 1739, 1723, 1724, 1458, 1458,
+ 1723, 1724, 1723, 1724, 1723, 1724, 1723, 1724,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1740, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+ 1723, 1724, 1458, 1458, 1723, 1724, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1723,
+ 1724, 1723, 1724, 1458, 1723, 1724, 1458, 1458,
+ 1690, 1691, 1690, 1691, 1458, 1458, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1723, 1724, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1741, 1458, 1458,
+ 1723, 1724, 1458, 1458, 1690, 1691, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1539, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1723, 1724, 1723, 1724, 1458,
+ 1458, 1458, 1458, 1458, 1723, 1724, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1723, 1724, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1723, 1724, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1742, 1742, 1742, 1458,
+ 1458, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+
+ 1724, 1723, 1724, 1458, 1458, 1458, 1723, 1724,
+ 1723, 1724, 1723, 1724, 1723, 1724, 1458, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1723,
+ 1724, 1723, 1724, 1723, 1724, 1723, 1724, 1458,
+ 1458, 1458, 1458, 1458, 1743, 1458, 1744, 1458,
+
+ 1458, 1458, 1458, 1745, 1746, 1745, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1723, 1724, 1747, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1723,
+ 1724, 1723, 1724, 1458, 1458, 1458, 1458, 1458,
+
+ 1606, 1606, 1606, 1606, 1606, 1605, 1605, 1605,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1541, 1541,
+ 1541, 1541, 1541, 1541, 1542, 1542, 1542, 1542,
+ 1542, 1542, 1542, 1748, 1748, 1749, 1749, 1749,
+
+ 1542, 1542, 1542, 1542, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
+ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
+
+ 1720, 1720, 1720, 1720, 1720, 1749, 1749, 1720,
+ 1720, 1720, 1720, 1720, 1720, 1613, 1613, 1613,
+ 1748, 1749, 1749, 1749, 1749, 1685, 1750, 1750,
+ 1750, 1750, 1613, 1613, 1613, 1613, 1613, 1613,
+
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 221, 221, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 221, 1751,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1752, 1752, 1752, 1613, 1613, 1613,
+
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1753, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1616, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1555, 1555, 1555, 1555,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1754, 1753,
+
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1756,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1758,
+
+ 142, 138, 1759, 1760, 1761, 1762, 1763, 142,
+ 138, 142, 138, 142, 138, 1764, 1765, 1766,
+ 1767, 1290, 1292, 1293, 1768, 142, 138, 1768,
+ 1290, 1290, 1290, 1290, 1769, 1769, 1770, 1771,
+
+ 1772, 1773, 1772, 1773, 1772, 1773, 1772, 1773,
+ 1772, 1773, 1772, 1773, 1772, 1773, 1772, 1773,
+ 1772, 1773, 1772, 1773, 1772, 1773, 1772, 1773,
+ 1772, 1773, 1772, 1773, 1772, 1773, 1772, 1773,
+
+ 1772, 1773, 1772, 1773, 1774, 1775, 1775, 1775,
+ 1775, 1775, 1775, 1776, 1777, 1776, 1777, 1778,
+ 1778, 1778, 1779, 1780, 221, 221, 221, 221,
+ 221, 1781, 1782, 1782, 1782, 1783, 1781, 1782,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1823, 1823, 1823, 1823,
- 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
+ 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
+ 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
+ 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1823, 1823, 1823, 1823, 1825, 1826, 202, 202,
- 202, 202, 202, 202, 202, 202, 1827, 1827,
- 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835,
- 1836, 1837, 202, 202, 202, 202, 202, 202,
-
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 508, 508, 508, 508, 508, 508,
- 1839, 1839, 1839, 508, 1840, 1841, 1842, 1843,
-
- 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851,
- 1852, 1853, 1854, 1854, 1854, 1854, 1854, 1854,
- 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854,
- 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854,
-
- 1854, 1854, 1854, 1854, 1854, 1854, 1855, 1855,
- 1855, 1855, 1855, 1856, 1856, 1856, 1857, 1858,
- 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
- 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
- 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1860,
- 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
- 1860, 1860, 1861, 1862, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 1863,
-
- 863, 863, 863, 863, 863, 863, 863, 863,
- 863, 863, 863, 863, 863, 863, 863, 863,
- 863, 863, 863, 863, 863, 863, 863, 863,
- 863, 863, 863, 863, 863, 202, 202, 202,
-
- 1864, 1864, 1864, 1865, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1867, 1865, 1865, 1864, 1864,
- 1864, 1864, 1865, 1865, 1864, 1864, 1865, 1865,
-
- 1868, 1869, 1869, 1869, 1869, 1869, 1869, 1870,
- 1871, 1871, 1869, 1869, 1869, 1869, 202, 1872,
- 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880,
- 1881, 1882, 202, 202, 202, 202, 1869, 1869,
-
- 1883, 1883, 1883, 1883, 1883, 1884, 1885, 1883,
- 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
- 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893,
- 1894, 1895, 1883, 1883, 1883, 1883, 1883, 202,
-
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
-
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1897, 1897, 1897, 1897, 1897, 1897, 1898,
- 1898, 1897, 1897, 1898, 1898, 1897, 1897, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1896, 1896, 1896, 1897, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1897, 1898, 202, 202,
- 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906,
- 1907, 1908, 202, 202, 1909, 1910, 1910, 1910,
-
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1912, 1911, 1911, 1911, 1911, 1911, 1911, 1913,
- 1913, 1913, 1911, 851, 1884, 1914, 1883, 1883,
-
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
-
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1916, 1915, 1916, 1916, 1917, 1915, 1915, 1916,
- 1916, 1915, 1915, 1915, 1915, 1915, 1916, 1916,
-
- 1915, 1916, 1915, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 1915, 1915, 1918, 1919, 1919,
+ 1784, 1784, 1784, 1784, 1784, 1784, 221, 1785,
+ 221, 221, 221, 221, 221, 1785, 221, 221,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
- 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
- 1920, 1920, 1920, 1921, 1922, 1922, 1921, 1921,
- 1923, 1923, 1920, 1924, 1924, 1921, 1925, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
- 202, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 202, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 202, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+ 1786, 1786, 1786, 1786, 1786, 1786, 1787, 1787,
+ 221, 221, 221, 221, 221, 221, 221, 1788,
+ 1789, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 1790,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
+ 913, 913, 913, 913, 913, 913, 913, 913,
+ 913, 913, 913, 913, 913, 913, 913, 913,
+ 913, 913, 913, 913, 913, 913, 913, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1927, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1928, 1929, 1929, 1929, 1929,
-
- 1930, 1930, 1930, 1930, 1784, 1931, 1932, 1932,
- 1933, 1934, 1935, 1935, 202, 202, 202, 202,
- 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943,
- 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951,
-
- 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959,
- 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
- 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975,
- 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983,
-
- 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
- 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
-
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
-
- 2016, 2016, 2016, 2017, 2017, 2018, 2017, 2017,
- 2018, 2017, 2017, 2019, 2017, 2020, 202, 202,
- 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028,
- 2029, 2030, 202, 202, 202, 202, 202, 202,
-
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 866, 866, 866, 866, 866, 866, 866, 866,
- 866, 866, 866, 866, 866, 866, 866, 866,
-
- 866, 866, 866, 866, 866, 866, 866, 202,
- 202, 202, 202, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
-
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 202, 202, 202, 202,
-
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
-
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
-
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
-
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 1725, 1725,
- 2035, 1725, 2035, 1725, 1725, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 1725,
-
- 2035, 1725, 2035, 1725, 1725, 2035, 2035, 1725,
- 1725, 1725, 2035, 2035, 2035, 2035, 2036, 2036,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+ 913, 913, 913, 913, 913, 913, 913, 221,
+ 913, 913, 913, 913, 913, 913, 913, 221,
+ 913, 913, 913, 913, 913, 913, 913, 221,
+ 913, 913, 913, 913, 913, 913, 913, 221,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+ 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,
+
+ 1791, 1791, 1792, 1793, 1792, 1793, 1791, 1791,
+ 1791, 1792, 1793, 1791, 1792, 1793, 1462, 1462,
+ 1462, 1462, 1462, 1462, 1462, 1462, 1461, 1794,
+ 1795, 1796, 1797, 1798, 1792, 1793, 1798, 1798,
+
+ 1799, 1800, 1730, 1731, 1730, 1731, 1730, 1731,
+ 1730, 1731, 1796, 1796, 1796, 1796, 1801, 1802,
+ 1796, 1803, 1804, 1805, 1805, 1804, 1804, 1804,
+ 1804, 1804, 1806, 1806, 1807, 1808, 1808, 1809,
+
+ 1810, 1808, 1811, 1812, 1812, 1813, 1813, 1813,
+ 1813, 1813, 1814, 1815, 1814, 1815, 1814, 1816,
+ 1751, 1751, 1817, 1818, 1818, 1819, 1820, 1819,
+ 1820, 1819, 1820, 1819, 1820, 1821, 221, 221,
+
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 221, 1822, 1822, 1822, 1822, 1823,
+
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822,
+ 1822, 1822, 1822, 1823, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+
+ 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1823, 1823, 1823, 1823, 1823, 1823, 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,
+ 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
+ 1824, 1824, 1824, 1824, 1825, 1825, 1825, 1825,
+
+ 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833,
+ 1834, 1835, 1834, 1835, 1834, 1835, 1834, 1835,
+ 1834, 1835, 1830, 1830, 1834, 1835, 1834, 1835,
+ 1834, 1835, 1834, 1835, 1836, 1837, 1838, 1838,
+
+ 1830, 1833, 1833, 1833, 1833, 1833, 1833, 1833,
+ 1833, 1833, 1839, 1840, 1841, 1842, 1843, 1843,
+ 1844, 1845, 1845, 1845, 1845, 1846, 1847, 1830,
+ 1848, 1848, 1848, 1849, 1850, 1851, 1852, 1853,
+
+ 221, 1854, 1855, 1854, 1855, 1854, 1855, 1854,
+ 1855, 1854, 1855, 1855, 1856, 1855, 1856, 1855,
+ 1856, 1855, 1856, 1855, 1856, 1855, 1856, 1855,
+ 1856, 1855, 1856, 1855, 1856, 1855, 1856, 1855,
+
+ 1856, 1855, 1856, 1854, 1855, 1856, 1855, 1856,
+ 1855, 1856, 1855, 1855, 1855, 1855, 1855, 1855,
+ 1856, 1856, 1855, 1856, 1856, 1855, 1856, 1856,
+ 1855, 1856, 1856, 1855, 1856, 1856, 1855, 1855,
+
+ 1855, 1855, 1855, 1854, 1855, 1854, 1855, 1854,
+ 1855, 1855, 1855, 1855, 1855, 1855, 1854, 1855,
+ 1855, 1855, 1855, 1855, 1856, 1857, 1857, 221,
+ 221, 1858, 1858, 1859, 1859, 1860, 1861, 1862,
+
+ 1863, 1864, 1865, 1864, 1865, 1864, 1865, 1864,
+ 1865, 1864, 1865, 1865, 1866, 1865, 1866, 1865,
+ 1866, 1865, 1866, 1865, 1866, 1865, 1866, 1865,
+ 1866, 1865, 1866, 1865, 1866, 1865, 1866, 1865,
+
+ 1866, 1865, 1866, 1864, 1865, 1866, 1865, 1866,
+ 1865, 1866, 1865, 1865, 1865, 1865, 1865, 1865,
+ 1866, 1866, 1865, 1866, 1866, 1865, 1866, 1866,
+ 1865, 1866, 1866, 1865, 1866, 1866, 1865, 1865,
+
+ 1865, 1865, 1865, 1864, 1865, 1864, 1865, 1864,
+ 1865, 1865, 1865, 1865, 1865, 1865, 1864, 1865,
+ 1865, 1865, 1865, 1865, 1866, 1864, 1864, 1866,
+ 1866, 1866, 1866, 1867, 1868, 1869, 1870, 1871,
+
+ 221, 221, 221, 221, 221, 1872, 1872, 1872,
+ 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872,
+ 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872,
+ 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872,
+
+ 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872,
+ 1872, 1872, 1872, 1872, 1872, 1873, 1874, 1875,
+ 221, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+
+ 1876, 1876, 1876, 1876, 1877, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
+ 1876, 1876, 1876, 1876, 1876, 1876, 1876, 221,
+ 1878, 1878, 1879, 1879, 1879, 1879, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+
+ 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881,
+ 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881,
+ 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881,
+ 1882, 1882, 1882, 1883, 1883, 1883, 1883, 1883,
+
+ 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+ 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+
+ 1885, 1885, 1885, 1885, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 1825,
+ 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886,
+ 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886,
+
+ 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ 1887, 1887, 1887, 1887, 1887, 1888, 1888, 221,
+
+ 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889,
+ 1889, 1889, 1890, 1890, 1890, 1890, 1890, 1890,
+ 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+ 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+
+ 1890, 1890, 1890, 1890, 1891, 1891, 1891, 1891,
+ 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892,
+ 1893, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+ 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+
+ 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
+ 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
+ 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
+ 1895, 1895, 1895, 1895, 1896, 1896, 1897, 1878,
+
+ 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+ 1879, 1879, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1898,
+ 1880, 1898, 1880, 1880, 1880, 1880, 1880, 1880,
+
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+ 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1893, 1893, 1893, 1893,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1900,
+
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1893,
+ 1893, 1893, 1893, 1880, 1880, 1880, 1880, 1880,
+
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+
+ 1880, 1880, 1890, 1880, 1880, 1880, 1880, 1890,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1890, 1880, 1880, 1880, 1880, 1880, 1893, 1893,
+
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+ 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1893,
+
+ 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+ 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+ 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+ 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+
+ 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+ 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+ 1901, 1901, 1901, 1901, 1901, 1901, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+
+ 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903,
+ 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903,
+ 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903,
+ 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903,
+
+ 1903, 1903, 1903, 1903, 1903, 1903, 1904, 1904,
+ 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+ 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+ 1904, 1904, 1904, 1904, 1905, 1905, 1905, 1905,
+
+ 1905, 1905, 1905, 1905, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1907, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1910, 1910, 1910, 1910, 1910,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1911, 1911, 1911,
+
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 1913, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+
+ 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912,
+ 1912, 1912, 1912, 1912, 1912, 221, 221, 221,
+ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
+ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
+
+ 1914, 1914, 1915, 1915, 1914, 1914, 1914, 1914,
+ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
+ 1914, 1914, 1914, 1914, 1915, 1914, 1914, 1914,
+ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
+
+ 1914, 1915, 1914, 1914, 1914, 1915, 1914, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
+ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
+
+ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
+ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
+ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
+ 1917, 1917, 1917, 1917, 1917, 1917, 1918, 1919,
+
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+ 1920, 1920, 1920, 1920, 1921, 1922, 1923, 1924,
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+ 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
+
+ 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932,
+ 1933, 1934, 1920, 1920, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 303, 304, 303, 304, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 303, 304,
+
+ 307, 308, 303, 304, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 1935, 289,
+ 1936, 1936, 1936, 1937, 1938, 1938, 1938, 1938,
+ 1938, 1938, 1938, 1938, 289, 289, 1937, 1939,
+
+ 303, 304, 303, 304, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 303, 304,
+ 303, 304, 303, 304, 303, 304, 303, 304,
+ 309, 310, 309, 310, 1940, 1940, 1941, 1938,
+
+ 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942,
+ 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942,
+ 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942,
+ 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942,
+
+ 1942, 1942, 1942, 1942, 1942, 1942, 1943, 1943,
+ 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943,
+ 1944, 1944, 1945, 1946, 1947, 1947, 1947, 1946,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
+ 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
+ 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1950,
+ 1950, 1950, 1950, 1802, 1802, 1802, 1802, 1802,
+
+ 1951, 1951, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1290, 1290, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1769, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
+ 1290, 1292, 1293, 1292, 1293, 1952, 1292, 1293,
+
+ 1292, 1293, 1292, 1293, 1292, 1293, 1292, 1293,
+ 1802, 1953, 1953, 1292, 1293, 1954, 1955, 1956,
+ 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964,
+ 1963, 1964, 1963, 1964, 1963, 1964, 1963, 1964,
+
+ 1957, 1958, 1957, 1958, 1957, 1958, 1957, 1958,
+ 1957, 1958, 1965, 1966, 1967, 1968, 1969, 1970,
+ 1971, 1972, 1973, 1974, 1975, 1976, 1975, 1976,
+ 1977, 1978, 1979, 1980, 1979, 1980, 1979, 1980,
+
+ 1981, 1982, 1979, 1980, 1983, 1984, 1985, 1986,
+ 1987, 1986, 1987, 221, 221, 221, 221, 221,
+ 1981, 1982, 221, 1988, 221, 1988, 1981, 1982,
+ 1981, 1982, 221, 221, 221, 221, 221, 221,
+
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 1989, 1989, 1989, 1986, 1987, 1990,
+ 1991, 1991, 1955, 1992, 1992, 1992, 1992, 1992,
+
+ 1993, 1993, 1994, 1993, 1993, 1993, 1995, 1993,
+ 1993, 1993, 1993, 1994, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1996, 1996, 1994, 1994, 1996,
+ 1997, 1997, 1997, 1997, 1998, 221, 221, 221,
+ 1999, 1999, 1999, 1999, 1999, 1999, 853, 853,
+ 1497, 2000, 221, 221, 221, 221, 221, 221,
+
+ 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
+ 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
+ 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
+ 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
+
+ 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
+ 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
+ 2001, 2001, 2002, 2003, 2004, 2004, 2005, 2005,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2006, 2006, 2007, 2007, 2007, 2007, 2007, 2007,
+ 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+ 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+ 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+
+ 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+ 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+ 2007, 2007, 2007, 2007, 2006, 2006, 2006, 2006,
+ 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+
+ 2006, 2006, 2006, 2006, 2008, 2009, 221, 221,
+ 221, 221, 221, 221, 221, 221, 2010, 2010,
+ 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
+ 2019, 2020, 221, 221, 221, 221, 221, 221,
+
+ 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021,
+ 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021,
+ 2021, 2021, 542, 542, 542, 542, 542, 542,
+ 2022, 2022, 2022, 542, 2023, 2024, 2025, 2026,
+
+ 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034,
+ 2035, 2036, 2037, 2037, 2037, 2037, 2037, 2037,
2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2038, 2038, 2038, 1733, 1733,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
-
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
-
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 2040, 2041, 2042, 2043, 2044, 2045, 2045, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 2046, 2047, 2048, 2049, 2050,
- 202, 202, 202, 202, 202, 2051, 2052, 2053,
-
- 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
- 2054, 2055, 2053, 2053, 2053, 2053, 2053, 2053,
- 2053, 2053, 2053, 2053, 2053, 2053, 2053, 301,
- 2053, 2053, 2053, 2053, 2053, 301, 2053, 301,
-
- 2053, 2053, 301, 2053, 2053, 301, 2053, 2053,
- 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2054,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2057, 2057, 2057, 2057, 2057, 2057,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
-
- 2057, 2057, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 1671, 1366,
-
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 348, 348, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
- 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
-
- 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
- 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2059, 340, 348, 348,
-
- 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
- 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
- 2061, 2062, 2063, 2064, 2065, 2066, 2066, 2067,
- 2068, 2069, 202, 202, 202, 202, 202, 202,
-
- 173, 173, 173, 173, 1219, 1219, 1219, 1107,
- 1107, 1107, 1107, 1107, 1107, 1107, 1763, 1763,
- 2070, 2071, 2071, 2072, 2072, 2073, 2074, 2073,
- 2074, 2073, 2074, 2073, 2074, 2073, 2074, 2073,
-
- 2074, 2073, 2074, 2073, 2074, 1683, 1683, 2075,
- 2076, 2070, 2070, 2070, 2070, 2072, 2072, 2072,
- 2077, 2078, 2079, 202, 2080, 2081, 2082, 2082,
- 2071, 1419, 1420, 1419, 1420, 1419, 1420, 2083,
-
- 2070, 2070, 2084, 2085, 2086, 2087, 2088, 202,
- 2070, 1422, 1380, 2070, 202, 202, 202, 202,
- 2056, 2056, 2056, 2089, 2056, 348, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 348, 348, 2090,
-
- 202, 2082, 2070, 2083, 1422, 1380, 2070, 2091,
- 1419, 1420, 2070, 2084, 2077, 2085, 2079, 2092,
- 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100,
- 2101, 2102, 2081, 2080, 2103, 2088, 2104, 2082,
-
- 2070, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
- 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
- 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
- 2105, 2105, 2105, 2106, 2070, 2107, 2108, 2072,
-
- 2108, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
- 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
- 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
- 2109, 2109, 2109, 2106, 2088, 2107, 2088, 2110,
-
- 2111, 2112, 1419, 1420, 2113, 2114, 2115, 2116,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2117, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
-
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2118, 2118,
-
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 202,
-
- 202, 202, 1706, 1706, 1706, 1706, 1706, 1706,
- 202, 202, 1706, 1706, 1706, 1706, 1706, 1706,
- 202, 202, 1706, 1706, 1706, 1706, 1706, 1706,
- 202, 202, 1706, 1706, 1706, 202, 202, 202,
-
- 2119, 1422, 2088, 2108, 1679, 1422, 1422, 202,
- 1443, 1418, 1418, 1418, 1418, 1443, 1443, 202,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 2120, 2120, 2120, 2121, 51, 2122, 2122,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 202, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 202,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 202, 2123, 2123, 202, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 202, 202,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 202, 202,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 202, 202, 202, 202, 202,
-
- 2124, 2125, 2124, 202, 202, 202, 202, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
-
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 202, 202, 202, 2127,
- 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127,
-
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
-
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2129, 2129, 2129,
- 2129, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
-
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2129, 2131, 2132, 2133, 2133, 202,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1596, 202, 202, 202,
-
- 2132, 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,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1222, 202, 202,
-
- 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134,
- 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134,
- 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134,
- 2134, 2134, 2134, 2134, 2134, 202, 202, 202,
-
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
-
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1107, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
- 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
- 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
- 2136, 2136, 2136, 2136, 202, 202, 202, 202,
-
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2138,
-
- 2139, 2139, 2139, 2139, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 2140, 2140, 2140,
- 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141,
- 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141,
-
- 2141, 2142, 2141, 2141, 2141, 2141, 2141, 2141,
- 2141, 2141, 2142, 202, 202, 202, 202, 202,
- 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
- 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
-
- 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
- 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
- 2143, 2143, 2143, 2143, 2143, 2143, 2144, 2144,
- 2144, 2144, 2144, 202, 202, 202, 202, 202,
-
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 202, 2146,
-
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
-
- 2147, 2147, 2147, 2147, 202, 202, 202, 202,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2148, 2149, 2149, 2149, 2149, 2149, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
-
- 2150, 2150, 2150, 2150, 2150, 2150, 2151, 2151,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
-
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2153, 2153,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
-
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
-
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 202, 202,
-
- 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163,
- 2164, 2165, 202, 202, 202, 202, 202, 202,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
-
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
- 2166, 2166, 2166, 2166, 202, 202, 202, 202,
- 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
-
- 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
- 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
- 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
- 2167, 2167, 2167, 2167, 202, 202, 202, 202,
-
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
-
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
-
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
-
- 2169, 2169, 2169, 2169, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2170,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2172, 2172, 2172, 2172, 2172, 2172, 301, 301,
- 2172, 301, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
-
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 301, 2172,
- 2172, 301, 301, 301, 2172, 301, 301, 2172,
-
- 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
- 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
- 2173, 2173, 2173, 2173, 2173, 2173, 301, 2174,
- 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175,
-
- 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176,
- 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176,
- 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2177,
- 2177, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
-
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 2180,
- 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181,
- 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181,
- 2181, 2181, 2181, 301, 2181, 2181, 301, 301,
- 301, 301, 301, 2182, 2182, 2182, 2182, 2182,
-
- 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
- 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
- 2183, 2183, 2183, 2183, 2183, 2183, 2184, 2184,
- 2184, 2184, 2185, 2185, 301, 301, 301, 2186,
-
- 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
- 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
- 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
- 2187, 2187, 301, 301, 301, 301, 301, 2188,
-
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
-
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 301, 301, 301, 301, 2191, 2191, 2190, 2190,
-
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
- 301, 301, 2191, 2191, 2191, 2191, 2191, 2191,
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
- 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-
- 2192, 2193, 2193, 2193, 301, 2193, 2193, 301,
- 301, 301, 301, 301, 2193, 2194, 2193, 2195,
- 2192, 2192, 2192, 2192, 301, 2192, 2192, 2192,
- 301, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
-
- 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
- 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
- 2192, 2192, 2192, 2192, 2196, 2196, 301, 301,
- 2195, 2197, 2194, 301, 301, 301, 301, 2198,
-
- 2199, 2200, 2201, 2202, 2203, 2203, 2203, 2203,
- 2204, 301, 301, 301, 301, 301, 301, 301,
- 2205, 2205, 2205, 2205, 2205, 2205, 2206, 2206,
- 2207, 301, 301, 301, 301, 301, 301, 301,
-
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2209, 2209, 2210,
-
- 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2211, 2211, 2211, 2211, 2211, 2212, 2212, 2212,
-
- 2213, 2213, 2213, 2213, 2213, 2214, 2215, 2214,
- 2216, 2214, 2214, 2215, 2215, 2217, 2214, 2214,
- 2214, 2214, 2214, 2213, 2213, 2213, 2213, 2217,
- 2213, 2213, 2213, 2213, 2213, 2214, 2213, 2213,
-
- 2213, 2214, 2215, 2215, 2214, 2218, 2219, 301,
- 301, 301, 301, 2220, 2220, 2220, 2220, 2221,
- 2222, 2222, 2222, 2222, 2222, 2222, 2223, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
+ 2037, 2037, 2037, 2037, 2037, 2037, 2038, 2038,
+ 2038, 2038, 2038, 2039, 2039, 2039, 2040, 2041,
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2043,
+ 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043,
+ 2043, 2043, 2044, 2045, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 2046,
+
+ 903, 903, 903, 903, 903, 903, 903, 903,
+ 903, 903, 903, 903, 903, 903, 903, 903,
+ 903, 903, 903, 903, 903, 903, 903, 903,
+ 903, 903, 903, 903, 903, 221, 221, 221,
+
+ 2047, 2047, 2047, 2048, 2049, 2049, 2049, 2049,
+ 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049,
+ 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049,
+ 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049,
+
+ 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049,
+ 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049,
+ 2049, 2049, 2049, 2050, 2048, 2048, 2047, 2047,
+ 2047, 2047, 2048, 2048, 2047, 2047, 2048, 2048,
+
+ 2051, 2052, 2052, 2052, 2052, 2052, 2052, 2053,
+ 2054, 2054, 2052, 2052, 2052, 2052, 221, 2055,
+ 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063,
+ 2064, 2065, 221, 221, 221, 221, 2052, 2052,
+
+ 2066, 2066, 2066, 2066, 2066, 2067, 2068, 2066,
+ 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+ 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076,
+ 2077, 2078, 2066, 2066, 2066, 2066, 2066, 221,
+
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2080, 2080, 2080, 2080, 2080, 2080, 2081,
+ 2081, 2080, 2080, 2081, 2081, 2080, 2080, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2082, 2082, 2082, 2080, 2082, 2082, 2082, 2082,
+ 2082, 2082, 2082, 2082, 2080, 2081, 221, 221,
+ 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090,
+ 2091, 2092, 221, 221, 2093, 2094, 2094, 2094,
+
+ 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095,
+ 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095,
+ 2096, 2095, 2095, 2095, 2095, 2095, 2095, 2097,
+ 2097, 2097, 2095, 891, 2067, 2098, 2066, 2066,
+
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2100, 2099, 2100, 2100, 2101, 2099, 2099, 2100,
+ 2100, 2099, 2099, 2099, 2099, 2099, 2100, 2100,
+
+ 2099, 2100, 2099, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 2099, 2099, 2102, 2103, 2103,
+
+ 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+ 2104, 2104, 2104, 2105, 2106, 2106, 2105, 2105,
+ 2107, 2107, 2104, 2108, 2108, 2105, 2109, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 221, 2110, 2110, 2110, 2110, 2110, 2110, 221,
+ 221, 2110, 2110, 2110, 2110, 2110, 2110, 221,
+ 221, 2110, 2110, 2110, 2110, 2110, 2110, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 221,
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 221,
+ 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962,
+ 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962,
+
+ 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962,
+ 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962,
+ 1962, 1962, 1962, 2111, 1962, 1962, 1962, 1962,
+ 1962, 1962, 1962, 2112, 2113, 2113, 2113, 2113,
+
+ 2114, 2114, 2114, 2114, 1962, 2115, 2116, 2116,
+ 2117, 2118, 2119, 2119, 221, 221, 221, 221,
+ 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127,
+ 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135,
+
+ 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143,
+ 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151,
+ 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159,
+ 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
+
+ 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175,
+ 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183,
+ 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191,
+ 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199,
+
+ 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200,
+ 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200,
+ 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200,
+ 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200,
+
+ 2200, 2200, 2200, 2201, 2201, 2202, 2201, 2201,
+ 2202, 2201, 2201, 2203, 2201, 2204, 221, 221,
+ 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212,
+ 2213, 2214, 221, 221, 221, 221, 221, 221,
+
+ 2215, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2215, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2215, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2215, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2215, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2215, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2215, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 2215, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+ 2216, 2216, 2216, 2216, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 908, 908, 908, 908, 908, 908, 908, 908,
+ 908, 908, 908, 908, 908, 908, 908, 908,
+
+ 908, 908, 908, 908, 908, 908, 908, 221,
+ 221, 221, 221, 911, 911, 911, 911, 911,
+ 911, 911, 911, 911, 911, 911, 911, 911,
+ 911, 911, 911, 911, 911, 911, 911, 911,
+
+ 911, 911, 911, 911, 911, 911, 911, 911,
+ 911, 911, 911, 911, 911, 911, 911, 911,
+ 911, 911, 911, 911, 911, 911, 911, 911,
+ 911, 911, 911, 911, 221, 221, 221, 221,
+
+ 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217,
+ 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217,
+ 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217,
+ 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217,
+
+ 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+ 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+ 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+ 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+
+ 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+ 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+ 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+ 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+
+ 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+ 2219, 2219, 2219, 2219, 2219, 2219, 1903, 1903,
+ 2219, 1903, 2219, 1903, 1903, 2219, 2219, 2219,
+ 2219, 2219, 2219, 2219, 2219, 2219, 2219, 1903,
+
+ 2219, 1903, 2219, 1903, 1903, 2219, 2219, 1903,
+ 1903, 1903, 2219, 2219, 2219, 2219, 2220, 2220,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2222, 2222, 2222, 2223, 2223,
+ 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
+ 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
@@ -3484,773 +3048,730 @@ static const unsigned short uc_property_trie[] = {
2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
- 2224, 2224, 2224, 2224, 2224, 2224, 301, 301,
- 301, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
-
- 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226,
- 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226,
- 2226, 2226, 2226, 2226, 2226, 2226, 301, 301,
- 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
-
- 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
- 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
- 2228, 2228, 2228, 301, 301, 301, 301, 301,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
-
- 2230, 2231, 2230, 2231, 2231, 2231, 2230, 2230,
- 2230, 2231, 2230, 2230, 2231, 2230, 2231, 2231,
- 2230, 2231, 301, 301, 301, 301, 301, 301,
- 301, 2232, 2232, 2232, 2232, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 2233, 2233, 2233, 2233, 2234, 2234, 2235,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
-
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
-
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
-
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 301, 301, 301, 301, 301,
- 301, 301, 2239, 2239, 2239, 2239, 2239, 2239,
-
- 2240, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
- 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
- 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
- 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
-
- 2241, 2241, 2242, 2241, 2243, 2243, 2243, 2243,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251,
- 2252, 2253, 301, 301, 301, 301, 301, 301,
-
- 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261,
- 2262, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 301,
-
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
-
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 301, 2265, 2265, 2266, 301, 301,
- 2264, 2264, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2268, 2268, 2268,
-
- 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2267,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 2269, 2269, 2269, 2270, 2269, 2269, 2269, 2269,
- 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
-
- 2269, 2269, 2269, 2269, 2269, 2271, 2272, 2272,
- 2273, 2273, 2273, 2272, 2273, 2272, 2272, 2272,
- 2272, 2274, 2274, 2274, 2275, 2276, 2276, 2276,
- 2276, 2276, 301, 301, 301, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 2277, 2278, 2277, 2277, 2279, 2279, 2279, 2278,
- 2277, 2279, 2279, 2277, 2277, 2279, 2277, 2277,
-
- 2278, 2277, 2279, 2279, 2277, 2280, 2280, 2280,
- 2280, 2281, 2282, 2283, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
- 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
- 2284, 2284, 2284, 2284, 2284, 2284, 2284, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2285, 2286, 2285, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2288, 2289,
- 2289, 2290, 2290, 2290, 2290, 2290, 202, 202,
- 202, 202, 2291, 2292, 2293, 2294, 2295, 2296,
- 2297, 2298, 2299, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2301, 2302,
- 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2311,
- 2312, 2312, 2313, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2315, 2314, 2315, 2314, 2314, 2314,
- 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2314, 2315, 2314, 2314, 2314, 2314,
- 2313, 2313, 2313, 2312, 2312, 2312, 2312, 2313,
- 2313, 2316, 2317, 2318, 2318, 2319, 2320, 2320,
- 2320, 2320, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 2321, 202, 202,
- 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
+ 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
+ 2224, 2224, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 2225, 2226, 2227, 2228, 2229, 2230, 2231, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 2232, 2233, 2234, 2235, 2236,
+ 221, 221, 221, 221, 221, 2237, 2238, 2239,
+
+ 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240,
+ 2240, 2241, 2239, 2239, 2239, 2239, 2239, 2239,
+ 2239, 2239, 2239, 2239, 2239, 2239, 2239, 323,
+ 2239, 2239, 2239, 2239, 2239, 323, 2239, 323,
+
+ 2239, 2239, 323, 2239, 2239, 323, 2239, 2239,
+ 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2240,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2243, 2243, 2243, 2243, 2243, 2243,
+ 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
+
+ 2243, 2243, 489, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2244, 2244,
+
+ 2244, 2244, 2244, 2244, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2245, 1422,
+
+ 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
+ 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 437, 437, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 437, 437, 437, 437, 437, 437, 437, 2246,
+ 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+ 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+
+ 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+ 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2244, 2244, 2248, 363, 2246, 2246,
+
+ 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+ 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+ 2250, 2251, 2252, 2253, 2254, 2255, 2255, 2256,
+ 2257, 2258, 221, 221, 221, 221, 221, 221,
+
+ 288, 288, 288, 288, 1273, 1273, 1273, 1155,
+ 1155, 1155, 1155, 1155, 1155, 1155, 1941, 1941,
+ 2259, 2260, 2260, 2261, 2261, 2262, 2263, 2262,
+ 2263, 2264, 2265, 2264, 2265, 2264, 2265, 2264,
+
+ 2265, 2264, 2265, 2264, 2265, 2266, 2266, 2267,
+ 2268, 2259, 2259, 2259, 2259, 2261, 2261, 2261,
+ 2269, 2270, 2271, 221, 2272, 2273, 2274, 2274,
+ 2260, 2275, 2276, 2275, 2276, 2277, 2278, 2279,
+
+ 2259, 2259, 2280, 2281, 2282, 2283, 2284, 221,
+ 2259, 2285, 2286, 2259, 221, 221, 221, 221,
+ 2244, 2242, 2244, 2287, 2244, 437, 2244, 2242,
+ 2244, 2242, 2244, 2242, 2244, 2242, 2244, 2242,
+
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 437, 437, 2288,
+
+ 221, 2289, 2290, 2291, 2292, 2293, 2290, 2294,
+ 2295, 2296, 2290, 2297, 2298, 2299, 2300, 2301,
+ 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309,
+ 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2289,
+
+ 2290, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+ 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+ 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+ 2317, 2317, 2317, 2318, 2290, 2319, 2320, 2321,
+
+ 2320, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
- 2322, 202, 202, 202, 202, 202, 202, 202,
- 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330,
- 2331, 2332, 202, 202, 202, 202, 202, 202,
-
- 2333, 2333, 2333, 2334, 2334, 2334, 2334, 2334,
- 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
- 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
- 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
- 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2335,
- 2336, 2336, 2336, 2336, 2337, 2336, 2338, 2338,
- 2336, 2336, 2336, 2339, 2339, 202, 2340, 2341,
- 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349,
- 2350, 2351, 2351, 2351, 2352, 2353, 2353, 2354,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2356, 2357, 2358, 2355, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2359, 2359, 2360, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2360, 2360, 2360, 2359, 2359,
- 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2360,
- 2362, 2361, 2363, 2363, 2361, 2364, 2364, 2365,
- 2366, 2367, 2368, 2367, 2367, 2369, 2370, 2371,
- 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379,
- 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2386,
- 202, 2387, 2387, 2387, 2387, 2387, 2387, 2387,
- 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387,
- 2387, 2387, 2387, 2387, 2387, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 202, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2389, 2389, 2389, 2390,
- 2390, 2390, 2389, 2389, 2390, 2391, 2392, 2390,
- 2393, 2393, 2394, 2393, 2393, 2394, 2395, 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, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2396, 2396, 2396, 2396, 2396, 2396, 2396, 202,
- 2396, 202, 2396, 2396, 2396, 2396, 202, 2396,
+ 2322, 2322, 2322, 2318, 2315, 2319, 2315, 2323,
+
+ 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331,
+ 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+ 2332, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+ 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+
+ 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+ 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+ 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+ 2330, 2330, 2330, 2330, 2330, 2330, 2333, 2333,
+
+ 2334, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+ 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+ 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+ 2335, 2335, 2335, 2335, 2335, 2335, 2335, 221,
+
+ 221, 221, 2335, 2335, 2335, 2335, 2335, 2335,
+ 221, 221, 2335, 2335, 2335, 2335, 2335, 2335,
+ 221, 221, 2335, 2335, 2335, 2335, 2335, 2335,
+ 221, 221, 2335, 2335, 2335, 221, 221, 221,
+
+ 2336, 2337, 2338, 2320, 2339, 2337, 2337, 221,
+ 2340, 2341, 2341, 2341, 2341, 2340, 2340, 221,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 2342, 2342, 2342, 2343, 2344, 2345, 2345,
+
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 221, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 221,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 221, 2346, 2346, 221, 2346,
+
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 221, 221,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 221, 221,
+
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+ 2346, 2346, 2346, 221, 221, 221, 221, 221,
+
+ 2347, 2348, 2347, 221, 221, 221, 221, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 221, 221, 221, 2350,
+ 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350,
+
+ 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351,
+ 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351,
+ 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351,
+ 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351,
+
+ 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351,
+ 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351,
+ 2351, 2351, 2351, 2351, 2351, 2352, 2352, 2352,
+ 2352, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2352, 2354, 2355, 2356, 2356, 221,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1751, 221, 221, 221,
+
+ 2355, 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, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
+ 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
+
+ 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
+ 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
+ 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
+ 1544, 1544, 1544, 1544, 1544, 1276, 221, 221,
+
+ 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+ 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+ 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+ 2357, 2357, 2357, 2357, 2357, 221, 221, 221,
+
+ 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358,
+ 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358,
+ 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358,
+ 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358,
+
+ 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358,
+ 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358,
+ 2358, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1155, 2359, 2359, 2359, 2359, 2359, 2359, 2359,
+ 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359,
+ 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359,
+ 2359, 2359, 2359, 2359, 221, 221, 221, 221,
+
+ 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360,
+ 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360,
+ 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360,
+ 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2361,
+
+ 2362, 2362, 2362, 2362, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 2363, 2363, 2363,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+
+ 2364, 2365, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2364, 2365, 221, 221, 221, 221, 221,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2367, 2367,
+ 2367, 2367, 2367, 221, 221, 221, 221, 221,
+
+ 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+ 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+ 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+ 2368, 2368, 2368, 2368, 2368, 2368, 221, 2369,
+
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+
+ 2370, 2370, 2370, 2370, 221, 221, 221, 221,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2371, 2372, 2372, 2372, 2372, 2372, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+
+ 2373, 2373, 2373, 2373, 2373, 2373, 2374, 2374,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2376, 2376,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+
+ 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378,
+ 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378,
+ 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378,
+ 2378, 2378, 2378, 2378, 2378, 2378, 221, 221,
+
+ 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386,
+ 2387, 2388, 221, 221, 221, 221, 221, 221,
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+ 2389, 2389, 2389, 2389, 221, 221, 221, 221,
+ 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
+
+ 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
+ 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
+ 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
+ 2390, 2390, 2390, 2390, 221, 221, 221, 221,
+
+ 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391,
+ 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391,
+ 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391,
+ 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391,
+
+ 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+
+ 2392, 2392, 2392, 2392, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 2393,
+ 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+ 2394, 2394, 2394, 221, 2394, 2394, 2394, 2394,
+
+ 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+ 2394, 2394, 2394, 221, 2394, 2394, 2394, 2394,
+ 2394, 2394, 2394, 221, 2394, 2394, 221, 2395,
+ 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395,
+
+ 2395, 2395, 221, 2395, 2395, 2395, 2395, 2395,
+ 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395,
+ 2395, 2395, 221, 2395, 2395, 2395, 2395, 2395,
+ 2395, 2395, 221, 2395, 2395, 221, 221, 221,
+
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
- 2396, 2396, 2396, 2396, 2396, 2396, 202, 2396,
+
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+ 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+ 2396, 2396, 2396, 2396, 2396, 2396, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
- 2396, 2397, 202, 202, 202, 202, 202, 202,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2399,
- 2400, 2400, 2400, 2399, 2399, 2399, 2399, 2399,
- 2399, 2401, 2402, 202, 202, 202, 202, 202,
- 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410,
- 2411, 2412, 202, 202, 202, 202, 202, 202,
-
- 2413, 2414, 2415, 2415, 202, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 202, 202, 2416,
- 2416, 202, 202, 2416, 2416, 2416, 2416, 2416,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2397, 2398, 2398, 1989, 1989, 1989, 221, 1989,
+ 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+ 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+ 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+
+ 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+ 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+ 1989, 221, 1989, 1989, 1989, 1989, 1989, 1989,
+ 1989, 1989, 1989, 221, 221, 221, 221, 221,
+
+ 2399, 2399, 2399, 2399, 2399, 2399, 323, 323,
+ 2399, 323, 2399, 2399, 2399, 2399, 2399, 2399,
+ 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+ 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+
+ 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+ 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+ 2399, 2399, 2399, 2399, 2399, 2399, 323, 2399,
+ 2399, 323, 323, 323, 2399, 323, 323, 2399,
+
+ 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400,
+ 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400,
+ 2400, 2400, 2400, 2400, 2400, 2400, 323, 2401,
+ 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402,
+
+ 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403,
+ 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403,
+ 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2404,
+ 2404, 2405, 2405, 2405, 2405, 2405, 2405, 2405,
+
+ 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406,
+ 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406,
+ 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406,
+ 2406, 2406, 2406, 2406, 2406, 2406, 2406, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 2407,
+ 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 2408, 323, 2408, 2408, 323, 323,
+ 323, 323, 323, 2409, 2409, 2409, 2409, 2409,
+
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2411, 2411,
+ 2411, 2411, 2412, 2412, 323, 323, 323, 2413,
+
+ 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414,
+ 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414,
+ 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414,
+ 2414, 2414, 323, 323, 323, 323, 323, 2415,
+
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 202, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 202, 2416, 2416, 202, 2416, 2416, 2416,
- 2416, 2416, 202, 2417, 2418, 2416, 2419, 2415,
- 2414, 2415, 2415, 2415, 2415, 202, 202, 2415,
- 2415, 202, 202, 2420, 2420, 2421, 202, 202,
- 2422, 202, 202, 202, 202, 202, 202, 2419,
- 202, 202, 202, 202, 202, 2416, 2416, 2416,
- 2416, 2416, 2415, 2415, 202, 202, 2423, 2423,
- 2423, 2423, 2423, 2423, 2423, 202, 202, 202,
- 2423, 2423, 2423, 2423, 2423, 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, 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, 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,
-
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2425, 2425, 2425,
- 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426,
- 2425, 2425, 2427, 2426, 2426, 2425, 2428, 2424,
- 2424, 2424, 2424, 2429, 2429, 2430, 2430, 2431,
- 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439,
- 2440, 2441, 2442, 2430, 202, 2431, 2443, 2444,
- 2445, 2445, 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,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2447, 2448, 2448, 2449, 2449, 2449, 2449, 2449,
- 2449, 2448, 2450, 2451, 2451, 2447, 2451, 2449,
- 2449, 2448, 2452, 2453, 2446, 2446, 2454, 2446,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462,
- 2463, 2464, 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, 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, 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, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+
+ 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+ 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+ 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+ 323, 323, 323, 323, 2418, 2418, 2417, 2417,
+
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 323, 323, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+
+ 2419, 2420, 2420, 2420, 323, 2420, 2420, 323,
+ 323, 323, 323, 323, 2420, 2421, 2420, 2422,
+ 2419, 2419, 2419, 2419, 323, 2419, 2419, 2419,
+ 323, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+
+ 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+ 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+ 2419, 2419, 2419, 2419, 2423, 2423, 323, 323,
+ 2422, 2424, 2421, 323, 323, 323, 323, 2425,
+
+ 2426, 2427, 2428, 2429, 2430, 2430, 2430, 2430,
+ 2431, 323, 323, 323, 323, 323, 323, 323,
+ 2432, 2432, 2432, 2432, 2432, 2432, 2433, 2433,
+ 2434, 323, 323, 323, 323, 323, 323, 323,
+
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2436, 2436, 2437,
+
+ 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438,
+ 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438,
+ 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438,
+ 2438, 2438, 2438, 2438, 2438, 2439, 2439, 2439,
+
+ 2440, 2440, 2440, 2440, 2440, 2441, 2442, 2441,
+ 2443, 2441, 2441, 2442, 2442, 2444, 2441, 2441,
+ 2441, 2441, 2441, 2440, 2440, 2440, 2440, 2444,
+ 2440, 2440, 2440, 2440, 2440, 2441, 2440, 2440,
+
+ 2440, 2441, 2442, 2442, 2441, 2445, 2446, 323,
+ 323, 323, 323, 2447, 2447, 2447, 2447, 2448,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2450, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 323, 323,
+ 323, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+
+ 2453, 2453, 2453, 2453, 2453, 2453, 2453, 2453,
+ 2453, 2453, 2453, 2453, 2453, 2453, 2453, 2453,
+ 2453, 2453, 2453, 2453, 2453, 2453, 323, 323,
+ 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+
+ 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
+ 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
+ 2455, 2455, 2455, 323, 323, 323, 323, 323,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+
+ 2457, 2458, 2457, 2458, 2458, 2458, 2457, 2457,
+ 2457, 2458, 2457, 2457, 2458, 2457, 2458, 2458,
+ 2457, 2458, 323, 323, 323, 323, 323, 323,
+ 323, 2459, 2459, 2459, 2459, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 2460, 2460, 2460, 2460, 2461, 2461, 2462,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463,
+ 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463,
+ 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463,
+ 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463,
+
+ 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463,
+ 2463, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464,
+ 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464,
+ 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464,
+ 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464,
+
+ 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464,
+ 2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464,
+ 2464, 2464, 2464, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
+
2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2466,
- 2467, 2467, 2468, 2468, 2468, 2468, 202, 202,
- 2467, 2467, 2469, 2469, 2468, 2468, 2467, 2470,
- 2471, 2472, 2473, 2473, 2474, 2474, 2475, 2475,
- 2475, 2473, 2476, 2476, 2476, 2476, 2476, 2476,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
- 2477, 2477, 2477, 2477, 2478, 2478, 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,
-
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2480, 2480, 2480, 2481, 2481, 2481, 2481, 2481,
- 2481, 2481, 2481, 2480, 2480, 2481, 2480, 2482,
- 2481, 2483, 2483, 2484, 2479, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492,
- 2493, 2494, 202, 202, 202, 202, 202, 202,
+ 2465, 2465, 2465, 323, 323, 323, 323, 323,
+ 323, 323, 2466, 2466, 2466, 2466, 2466, 2466,
+
+ 2467, 2468, 2468, 2468, 2468, 2468, 2468, 2468,
+ 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468,
+ 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468,
+ 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468,
+
+ 2468, 2468, 2469, 2468, 2470, 2470, 2470, 2470,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478,
+ 2479, 2480, 323, 323, 323, 323, 323, 323,
+
+ 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488,
+ 2489, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 323,
+
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 323, 2492, 2492, 2493, 323, 323,
+ 2491, 2491, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 2494, 2494, 2494,
+
2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495,
- 2495, 2495, 2495, 2495, 2495, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2497, 2498, 2497, 2498, 2498,
- 2497, 2497, 2497, 2497, 2497, 2497, 2499, 2500,
- 2501, 202, 202, 202, 202, 202, 202, 202,
- 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509,
- 2510, 2511, 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, 202, 202, 202, 202, 202, 202,
-
- 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
- 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
- 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
- 2512, 2512, 2513, 202, 202, 2514, 2514, 2514,
- 2515, 2515, 2514, 2514, 2514, 2514, 2515, 2514,
- 2514, 2514, 2514, 2516, 202, 202, 202, 202,
- 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524,
- 2525, 2526, 2527, 2527, 2528, 2528, 2528, 2529,
- 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,
- 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,
- 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,
- 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,
-
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2531, 2531, 2531, 2532,
- 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532,
- 2531, 2533, 2534, 2535, 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, 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, 202, 202, 202, 202,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545,
- 2546, 2547, 2548, 2548, 2548, 2548, 2548, 2548,
- 2548, 2548, 2548, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2549,
-
- 2550, 2550, 2550, 2550, 2550, 2550, 2550, 202,
- 202, 2550, 202, 202, 2550, 2550, 2550, 2550,
- 2550, 2550, 2550, 2550, 202, 2550, 2550, 202,
+ 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495,
+ 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495,
+ 2495, 2495, 2495, 2495, 2495, 2496, 2496, 2496,
+
+ 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2495,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 2497, 2497, 2497, 2498, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+
+ 2497, 2497, 2497, 2497, 2497, 2499, 2500, 2500,
+ 2501, 2501, 2501, 2500, 2501, 2500, 2500, 2500,
+ 2500, 2502, 2502, 2502, 2503, 2504, 2504, 2504,
+ 2504, 2504, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 2505, 2505, 2505, 2505, 2506, 2506, 2505, 2505,
+ 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505,
+
+ 2505, 2505, 2507, 2508, 2507, 2508, 2509, 2509,
+ 2509, 2509, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 2510, 2511, 2510, 2510, 2512, 2512, 2512, 2511,
+ 2510, 2512, 2512, 2510, 2510, 2512, 2510, 2510,
+
+ 2511, 2510, 2512, 2512, 2510, 2513, 2513, 2513,
+ 2513, 2514, 2515, 2516, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517,
+ 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517,
+ 2517, 2517, 2517, 2517, 2517, 2517, 2517, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 2518, 2519, 2518, 2520, 2520, 2520, 2520, 2520,
+ 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+ 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+ 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+ 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+ 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+ 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+ 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519,
+ 2519, 2519, 2519, 2519, 2519, 2519, 2521, 2522,
+ 2522, 2523, 2523, 2523, 2523, 2523, 221, 221,
+ 221, 221, 2524, 2525, 2526, 2527, 2528, 2529,
+ 2530, 2531, 2532, 2533, 2533, 2533, 2533, 2533,
+ 2533, 2533, 2533, 2533, 2533, 2533, 2534, 2535,
+ 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543,
+ 2544, 2545, 2545, 2546, 2546, 2545, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 2547,
+ 2548, 2548, 2549, 2550, 2550, 2550, 2550, 2550,
2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
+ 2550, 2550, 2551, 2550, 2551, 2550, 2550, 2550,
2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
- 2551, 2552, 2552, 2552, 2552, 2552, 202, 2552,
- 2553, 202, 202, 2554, 2554, 2555, 2556, 2557,
- 2552, 2557, 2552, 2558, 2559, 2560, 2559, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568,
- 2569, 2570, 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, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 202, 202, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
+ 2550, 2550, 2550, 2551, 2550, 2550, 2550, 2550,
+ 2549, 2549, 2549, 2548, 2548, 2548, 2548, 2549,
+ 2549, 2552, 2553, 2554, 2554, 2555, 2556, 2556,
+ 2556, 2556, 2557, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 2558, 221, 221,
+ 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+ 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+ 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+ 2559, 221, 221, 221, 221, 221, 221, 221,
+ 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567,
+ 2568, 2569, 221, 221, 221, 221, 221, 221,
+
+ 2570, 2570, 2570, 2571, 2571, 2571, 2571, 2571,
2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2572, 2572, 2572, 2573, 2573, 2573, 2573,
- 202, 202, 2573, 2573, 2572, 2572, 2572, 2572,
- 2574, 2571, 2575, 2571, 2572, 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,
-
- 2576, 2577, 2577, 2577, 2577, 2577, 2577, 2578,
- 2578, 2577, 2577, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2577, 2579, 2577, 2577, 2577,
- 2577, 2580, 2581, 2577, 2577, 2577, 2577, 2582,
- 2583, 2584, 2585, 2585, 2584, 2582, 2583, 2579,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2586, 2587, 2587, 2587, 2587, 2587, 2587, 2588,
- 2588, 2587, 2587, 2587, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2589, 2589, 2590, 2590,
- 2590, 2590, 2587, 2587, 2587, 2587, 2587, 2587,
- 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2588,
- 2587, 2591, 2592, 2593, 2593, 2594, 2595, 2595,
- 2595, 2592, 2592, 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,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 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, 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, 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, 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, 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, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 202, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2598,
- 2599, 2599, 2599, 2599, 2599, 2599, 2599, 202,
- 2599, 2599, 2599, 2599, 2599, 2599, 2598, 2600,
- 2597, 2601, 2601, 2602, 2602, 2602, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610,
- 2611, 2612, 2613, 2613, 2613, 2613, 2613, 2613,
- 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613,
- 2613, 2613, 2613, 2613, 2613, 202, 202, 202,
- 2614, 2615, 2616, 2616, 2616, 2616, 2616, 2616,
- 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
- 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
- 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
- 202, 202, 2617, 2617, 2617, 2617, 2617, 2617,
- 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
- 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
- 202, 2618, 2617, 2617, 2617, 2617, 2617, 2617,
- 2617, 2618, 2617, 2617, 2618, 2617, 2617, 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, 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,
-
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 202,
- 2619, 2619, 202, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2620, 2620, 2620, 2620, 2620, 2620, 202,
- 202, 202, 2620, 202, 2620, 2620, 202, 2620,
- 2620, 2620, 2621, 2620, 2622, 2622, 2623, 2620,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631,
- 2632, 2633, 202, 202, 202, 202, 202, 202,
- 2634, 2634, 2634, 2634, 2634, 2634, 202, 2634,
- 2634, 202, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2635, 2635, 2635, 2635, 2635, 202,
- 2636, 2636, 202, 2635, 2635, 2636, 2635, 2637,
- 2634, 202, 202, 202, 202, 202, 202, 202,
- 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645,
- 2646, 2647, 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, 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, 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, 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, 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, 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, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
- 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
- 2648, 2648, 2648, 2649, 2649, 2650, 2650, 2651,
- 2651, 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, 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, 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, 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,
- 2652, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
- 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
- 2653, 2653, 2653, 2653, 2653, 2654, 2654, 2654,
- 2654, 2654, 2654, 2654, 2654, 2655, 2655, 2655,
- 2655, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
- 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
- 2654, 2654, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2656,
-
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
-
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2659, 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, 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, 202, 202, 202, 202, 202, 202,
-
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2661, 2661, 2661, 2661, 2661,
- 2661, 2661, 2661, 2661, 2661, 2661, 2661, 202,
- 2662, 2662, 2662, 2662, 2663, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
-
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 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, 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, 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, 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,
+ 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2572,
+ 2573, 2573, 2573, 2573, 2574, 2573, 2575, 2575,
+ 2573, 2573, 2573, 2576, 2576, 221, 2577, 2578,
+ 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586,
+ 2587, 2588, 2588, 2588, 2589, 2590, 2590, 2591,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592,
+ 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592,
+ 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592,
+ 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592,
+ 2592, 2592, 2592, 2593, 2594, 2595, 2592, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2596, 2596, 2597, 2598, 2598, 2598, 2598, 2598,
+ 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+ 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+ 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+ 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+ 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+ 2598, 2598, 2598, 2597, 2597, 2597, 2596, 2596,
+ 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2597,
+ 2599, 2598, 2600, 2600, 2598, 2601, 2601, 2602,
+ 2603, 2604, 2605, 2604, 2604, 2606, 2607, 2608,
+ 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616,
+ 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2623,
+ 221, 2624, 2624, 2624, 2624, 2624, 2624, 2624,
+ 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624,
+ 2624, 2624, 2624, 2624, 2624, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 221, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 2625, 2625, 2626, 2626, 2626, 2627,
+ 2627, 2627, 2626, 2626, 2627, 2628, 2629, 2627,
+ 2630, 2630, 2631, 2630, 2630, 2631, 2632, 2633,
+ 2633, 2634, 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, 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,
+ 2635, 2635, 2635, 2635, 2635, 2635, 2635, 221,
+ 2635, 221, 2635, 2635, 2635, 2635, 221, 2635,
+ 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635,
+ 2635, 2635, 2635, 2635, 2635, 2635, 221, 2635,
+ 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635,
+ 2635, 2636, 221, 221, 221, 221, 221, 221,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2638,
+ 2639, 2639, 2639, 2638, 2638, 2638, 2638, 2638,
+ 2638, 2640, 2641, 221, 221, 221, 221, 221,
+ 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649,
+ 2650, 2651, 221, 221, 221, 221, 221, 221,
+
+ 2652, 2653, 2654, 2654, 221, 2655, 2655, 2655,
+ 2655, 2655, 2655, 2655, 2655, 221, 221, 2655,
+ 2655, 221, 221, 2655, 2655, 2655, 2655, 2655,
+ 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655,
+ 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655,
+ 2655, 221, 2655, 2655, 2655, 2655, 2655, 2655,
+ 2655, 221, 2655, 2655, 221, 2655, 2655, 2655,
+ 2655, 2655, 221, 2656, 2657, 2658, 2659, 2654,
+ 2653, 2654, 2654, 2654, 2654, 221, 221, 2654,
+ 2654, 221, 221, 2660, 2660, 2661, 221, 221,
+ 2662, 221, 221, 221, 221, 221, 221, 2659,
+ 221, 221, 221, 221, 221, 2658, 2655, 2655,
+ 2655, 2655, 2654, 2654, 221, 221, 2663, 2663,
+ 2663, 2663, 2663, 2663, 2663, 221, 221, 221,
+ 2663, 2663, 2663, 2663, 2663, 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, 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, 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, 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,
2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
@@ -4258,5336 +3779,6667 @@ static const unsigned short uc_property_trie[] = {
2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2665, 2665, 2665, 2666, 2666, 2666, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2666, 2664, 2664, 2664, 2665, 2666,
- 2665, 2666, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2665, 2666, 2666, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 202,
- 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2668,
- 2669, 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, 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, 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, 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, 202, 202, 202, 202, 202, 202, 202,
-
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
-
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2671, 2672,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
-
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 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, 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, 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, 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,
-
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
-
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 202, 202, 202, 202, 202, 202, 202,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 202,
- 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682,
- 2683, 2684, 202, 202, 202, 202, 2685, 2685,
- 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,
- 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,
+ 2664, 2664, 2664, 2664, 2664, 2665, 2665, 2665,
+ 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
+ 2665, 2665, 2667, 2666, 2666, 2665, 2668, 2664,
+ 2664, 2664, 2664, 2669, 2669, 2670, 2670, 2671,
+ 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679,
+ 2680, 2681, 2682, 2670, 221, 2671, 2683, 2684,
+ 2685, 2685, 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,
2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
- 2686, 2686, 2686, 2686, 2686, 2686, 202, 202,
- 2687, 2687, 2687, 2687, 2687, 2688, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2691,
- 2691, 2692, 2693, 2693, 2694, 2694, 2694, 2694,
- 2695, 2695, 2695, 2695, 2691, 2694, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703,
- 2704, 2705, 202, 2706, 2706, 2706, 2706, 2706,
- 2706, 2706, 202, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 202, 202, 202, 202, 202, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 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,
- 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,
- 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,
- 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,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
- 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
- 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2710,
- 2711, 2712, 2712, 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, 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, 202, 202, 202, 202, 202,
-
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2714, 2714, 2714,
- 2714, 2714, 2714, 202, 202, 202, 202, 2715,
- 2713, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
+ 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
+ 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
+ 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
+ 2687, 2688, 2688, 2689, 2689, 2689, 2689, 2689,
+ 2689, 2688, 2690, 2691, 2691, 2687, 2691, 2689,
+ 2689, 2688, 2692, 2693, 2686, 2686, 2694, 2686,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702,
+ 2703, 2704, 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, 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, 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, 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, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705,
+ 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705,
+ 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705,
+ 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705,
+ 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705,
+ 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2706,
+ 2707, 2707, 2708, 2708, 2708, 2708, 221, 221,
+ 2707, 2707, 2709, 2709, 2708, 2708, 2707, 2710,
+ 2711, 2712, 2713, 2713, 2714, 2714, 2715, 2715,
+ 2715, 2713, 2716, 2716, 2716, 2716, 2716, 2716,
2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2717,
- 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717,
- 202, 202, 202, 202, 202, 202, 202, 2718,
- 2718, 2718, 2718, 2719, 2719, 2719, 2719, 2719,
- 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
- 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,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2720, 2721, 2722, 2723, 2724, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2725, 2725, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
-
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2727, 2727, 2727,
- 2727, 2727, 2728, 2728, 2728, 2728, 2728, 2728,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2729, 2729, 2729, 2729, 2729,
- 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729,
-
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
-
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 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,
-
- 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729,
- 2729, 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, 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, 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, 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, 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, 202, 202, 202, 202, 202, 202, 202,
-
- 2731, 2732, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
-
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 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, 202,
- 2734, 2734, 2734, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 2735, 2735, 2735, 2735,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
+ 2717, 2717, 2717, 2717, 2718, 2718, 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,
+ 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+ 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+ 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+ 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+ 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+ 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+ 2720, 2720, 2720, 2721, 2721, 2721, 2721, 2721,
+ 2721, 2721, 2721, 2720, 2720, 2721, 2720, 2722,
+ 2721, 2723, 2723, 2724, 2719, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732,
+ 2733, 2734, 221, 221, 221, 221, 221, 221,
+ 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735,
+ 2735, 2735, 2735, 2735, 2735, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 202, 202, 202, 202,
-
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 202, 202, 202, 202, 202,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 202, 202, 202,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 202, 202, 202, 202, 202, 202, 202,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 202, 202, 2738, 2739, 2740, 2741,
- 2742, 2742, 2742, 2742, 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, 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,
-
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 202,
- 202, 1465, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2744, 2744,
- 2744, 2744, 2744, 2744, 2744, 2745, 2746, 2747,
- 2747, 2747, 2743, 2743, 2743, 2748, 2745, 2745,
- 2745, 2745, 2745, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2750, 2750, 2750, 2750, 2750,
- 2750, 2750, 2750, 2743, 2743, 2751, 2751, 2751,
- 2751, 2751, 2750, 2750, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2751, 2751, 2751, 2751, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2744, 2744, 2744, 2744, 2744,
- 2744, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2752, 2752,
- 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752,
- 2752, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2753, 2753, 2753, 2130, 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, 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, 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, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
- 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
- 2754, 2754, 2754, 2754, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2754, 2754, 2754, 2754, 2754, 2754,
- 2754, 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, 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, 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,
-
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 202, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 202, 2756, 2756,
- 202, 202, 2756, 202, 202, 2756, 2756, 202,
- 202, 2756, 2756, 2756, 2756, 202, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 202, 2757, 202, 2757, 2757, 2757,
- 2757, 2758, 2757, 2757, 202, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
-
- 2757, 2757, 2757, 2757, 2756, 2756, 202, 2756,
- 2756, 2756, 2756, 202, 202, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 202, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 202, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 202, 2756, 2756, 2756, 2756, 202,
- 2756, 2756, 2756, 2756, 2756, 202, 2756, 202,
- 202, 202, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 202, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
-
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 1457, 1457, 202, 202,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2759, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2760, 2757, 2757, 2757, 2757,
- 2757, 2757, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2759, 2757, 2757, 2757, 2757,
-
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2760, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2759, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2760,
- 2757, 2757, 2757, 2757, 2757, 2757, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2759,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2760, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2759, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2760, 2757, 2757, 2757, 2757,
- 2757, 2757, 2761, 2762, 202, 202, 2763, 2764,
- 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772,
- 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770,
- 2771, 2772, 2763, 2764, 2765, 2766, 2767, 2768,
- 2769, 2770, 2771, 2772, 2763, 2764, 2765, 2766,
- 2767, 2768, 2769, 2770, 2771, 2772, 2763, 2764,
- 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772,
+ 2736, 2736, 2736, 2737, 2738, 2737, 2738, 2738,
+ 2737, 2737, 2737, 2737, 2737, 2737, 2739, 2740,
+ 2741, 2742, 221, 221, 221, 221, 221, 221,
+ 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750,
+ 2751, 2752, 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, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2754, 221, 221, 2755, 2755, 2755,
+ 2756, 2756, 2755, 2755, 2755, 2755, 2757, 2755,
+ 2755, 2755, 2755, 2758, 221, 221, 221, 221,
+ 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766,
+ 2767, 2768, 2769, 2769, 2770, 2770, 2770, 2771,
+ 2772, 2772, 2772, 2772, 2772, 2772, 2772, 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, 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, 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, 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, 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, 221, 221, 221, 221, 221,
2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
-
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2773,
- 2773, 2773, 2773, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2774, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2774, 2773, 2773, 2775,
- 2776, 2775, 2775, 2777, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 2774, 2774, 2774, 2774, 2774,
- 202, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 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,
- 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,
-
- 2778, 2778, 2778, 2778, 2778, 2778, 2778, 202,
- 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778,
- 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778,
- 2778, 202, 202, 2778, 2778, 2778, 2778, 2778,
- 2778, 2778, 202, 2778, 2778, 202, 2778, 2778,
- 2778, 2778, 2778, 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, 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, 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, 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, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
+ 2773, 2773, 2773, 2773, 2774, 2774, 2774, 2775,
+ 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+ 2774, 2776, 2777, 2778, 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,
+ 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, 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,
2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
- 2779, 2779, 2779, 2779, 2779, 202, 202, 202,
- 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2781,
- 2781, 2781, 2781, 2781, 2781, 2781, 202, 202,
- 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789,
- 2790, 2791, 202, 202, 202, 202, 2779, 2792,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
+ 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780,
+ 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780,
+ 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780,
+ 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780,
+ 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788,
+ 2789, 2790, 2791, 2791, 2791, 2791, 2791, 2791,
+ 2791, 2791, 2791, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 2792,
+
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 221,
+ 221, 2793, 221, 221, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 221, 2793, 2793, 221,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
- 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
- 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
- 2793, 2793, 2793, 2793, 2794, 2794, 2794, 2794,
- 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802,
- 2803, 2804, 202, 202, 202, 202, 202, 2805,
-
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 301, 301, 2807,
- 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
- 2808, 2808, 2808, 2808, 2808, 2808, 2808, 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,
-
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2811, 2811, 2811, 2811,
- 2811, 2811, 2812, 2813, 301, 301, 301, 301,
- 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821,
- 2822, 2823, 301, 301, 301, 301, 2824, 2824,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 301, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2826, 2825, 2825, 2825,
- 2827, 2825, 2825, 2825, 2825, 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, 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, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2829, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 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, 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, 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, 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, 301, 301,
-
- 2830, 2830, 2830, 2830, 348, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 348, 2830, 2830, 348, 2830, 348, 348, 2830,
- 348, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 348, 2830, 2830, 2830, 2830,
- 348, 2830, 348, 2830, 348, 348, 348, 348,
- 348, 348, 2830, 348, 348, 348, 348, 2830,
- 348, 2830, 348, 2830, 348, 2830, 2830, 2830,
- 348, 2830, 2830, 348, 2830, 348, 348, 2830,
- 348, 2830, 348, 2830, 348, 2830, 348, 2830,
- 348, 2830, 2830, 348, 2830, 348, 348, 2830,
- 2830, 2830, 2830, 348, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 348, 2830, 2830, 2830, 2830,
- 348, 2830, 2830, 2830, 2830, 348, 2830, 348,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 348, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 348, 348, 348, 348,
- 348, 2830, 2830, 2830, 348, 2830, 2830, 2830,
- 2830, 2830, 348, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 2831, 2831, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
-
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1733, 1733, 1733, 1733,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1733,
- 1733, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1548,
- 1733, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1733, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 2832, 2832, 2833, 2834, 2835, 2836, 2837, 2838,
- 2839, 2840, 2841, 2842, 2842, 2843, 2843, 2843,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 1597,
- 2845, 2846, 2845, 2845, 2845, 2845, 2845, 2845,
- 2845, 2845, 2845, 2845, 2845, 2846, 2845, 2846,
- 2845, 2845, 2846, 2845, 2845, 2845, 2846, 2845,
- 2845, 2845, 2844, 2844, 2844, 2844, 2844, 2847,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2849,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2849,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
- 2848, 2848, 2850, 2850, 2851, 2843, 2843, 2843,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
- 2848, 2849, 2848, 2849, 2849, 2848, 2848, 2849,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
- 2848, 2848, 813, 813, 813, 813, 2852, 2852,
- 2844, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
- 2852, 2852, 2852, 2853, 2853, 2853, 2853, 2853,
- 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853,
- 2853, 2853, 2853, 2853, 2853, 2843, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 2854, 2854,
- 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854,
- 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854,
- 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854,
-
- 2855, 2856, 2856, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 2856, 2856, 2856, 2856, 2856, 2856,
- 2856, 2856, 2856, 2857, 1733, 1733, 1733, 1733,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2856, 2856, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2858, 2858, 2858, 2858, 2858, 2858, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 2859, 2859, 2859,
- 1511, 1511, 1511, 1511, 1511, 1511, 1548, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1548, 2859, 2859,
- 1511, 1511, 1511, 1511, 1511, 1549, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1512, 1512, 1548, 1548,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1510, 1510, 1511,
- 1511, 1511, 1511, 1511, 1510, 1511, 1511, 1511,
- 1511, 1511, 1549, 1549, 1549, 1548, 1511, 1549,
- 1511, 1511, 1549, 2860, 2860, 1548, 1548, 2859,
- 2859, 2859, 2859, 2859, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 2859, 2859, 2859, 2861, 2861, 2861, 2861, 2861,
-
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1548,
- 1511, 1548, 1549, 1549, 1511, 1511, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1511, 1511, 1511, 1549, 1511, 1511, 1511,
- 1511, 1549, 1549, 1549, 1511, 1549, 1549, 1549,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1549,
- 1511, 1549, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1510, 1511, 1510, 1511, 1510, 1511, 1511, 1511,
- 1511, 1511, 1549, 1511, 1511, 1511, 1511, 1510,
- 1511, 1510, 1510, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1548, 1511, 1511, 1511, 1511, 1548, 1548, 2859,
-
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1512, 1512,
- 2862, 2862, 2862, 2862, 1512, 1512, 1512, 1512,
- 1512, 1512, 1548, 2859, 2859, 2859, 2859, 2859,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 2860, 2860, 1548, 1548,
- 1548, 1548, 2863, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 2860, 1548, 1548, 1548, 1548, 2860, 2860, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 2864, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1512, 1512, 1512, 1512,
- 1512, 1512, 1548, 1511, 1511, 1511, 1511, 1511,
-
- 2865, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 2865, 1511, 1511, 1511, 2865, 1511, 2865,
- 1511, 2865, 1511, 2865, 1511, 1511, 1511, 2865,
- 1511, 1511, 1511, 1511, 1511, 1511, 2865, 2865,
- 1511, 1511, 1511, 1511, 2865, 1511, 2865, 2865,
- 1511, 1511, 1511, 1511, 2865, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1548, 1548, 2859, 2859, 1549, 1549, 1549,
- 1511, 1511, 1511, 1549, 1549, 1549, 1549, 1549,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 2866, 2866,
- 2866, 2867, 2867, 2867, 1512, 1512, 1512, 1512,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1549, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1549, 1549, 1549, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1549, 1511, 1511, 1511, 1511, 1511, 1548, 1548,
- 1548, 1548, 1548, 1548, 2860, 1548, 1548, 1548,
- 2859, 2864, 2864, 2858, 2858, 2868, 2843, 2843,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1733, 1733, 1733,
- 1548, 1548, 1548, 1548, 2864, 2864, 2864, 2858,
- 2858, 2869, 2868, 2843, 2843, 1733, 1733, 1733,
-
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 2869, 2869, 2869,
- 2869, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868,
- 2868, 2868, 2868, 2868, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1733, 1733,
- 2843, 2843, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
- 1514, 1514, 1514, 1514, 2870, 2868, 2868, 2871,
- 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859,
- 2872, 2863, 2863, 2863, 2863, 2863, 2863, 2873,
- 2864, 2864, 2864, 2864, 2864, 2864, 2863, 2864,
+ 2794, 2795, 2795, 2795, 2795, 2795, 221, 2795,
+ 2796, 221, 221, 2797, 2797, 2798, 2799, 2800,
+ 2795, 2800, 2795, 2801, 2802, 2803, 2802, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811,
+ 2812, 2813, 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, 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,
+ 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+ 221, 221, 2814, 2814, 2814, 2814, 2814, 2814,
+ 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+ 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+ 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+ 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+ 2814, 2815, 2815, 2815, 2816, 2816, 2816, 2816,
+ 221, 221, 2816, 2816, 2815, 2815, 2815, 2815,
+ 2817, 2814, 2818, 2814, 2815, 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,
+
+ 2819, 2820, 2820, 2820, 2820, 2820, 2820, 2821,
+ 2821, 2820, 2820, 2819, 2819, 2819, 2819, 2819,
+ 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819,
+ 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819,
+ 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819,
+ 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819,
+ 2819, 2819, 2819, 2820, 2822, 2820, 2820, 2820,
+ 2820, 2823, 2824, 2820, 2820, 2820, 2820, 2825,
+ 2826, 2827, 2828, 2828, 2827, 2825, 2826, 2822,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2829, 2830, 2830, 2830, 2830, 2830, 2830, 2831,
+ 2831, 2830, 2830, 2830, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2832, 2832, 2833, 2833,
+ 2833, 2833, 2830, 2830, 2830, 2830, 2830, 2830,
+ 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2831,
+ 2830, 2834, 2835, 2836, 2836, 2837, 2838, 2838,
+ 2838, 2835, 2835, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+ 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+ 2840, 221, 221, 221, 221, 221, 221, 221,
+
+ 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841,
+ 2841, 2841, 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, 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, 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, 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, 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, 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, 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,
+
+ 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842,
+ 2842, 221, 2842, 2842, 2842, 2842, 2842, 2842,
+ 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842,
+ 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842,
+ 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842,
+ 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2843,
+ 2844, 2844, 2844, 2844, 2844, 2844, 2844, 221,
+ 2844, 2844, 2844, 2844, 2844, 2844, 2843, 2845,
+ 2842, 2846, 2846, 2847, 2847, 2847, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855,
+ 2856, 2857, 2858, 2858, 2858, 2858, 2858, 2858,
2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
- 2863, 2873, 2873, 2863, 2863, 2863, 2863, 2863,
- 2863, 2863, 2864, 2864, 2863, 2863, 2863, 2868,
+ 2858, 2858, 2858, 2858, 2858, 221, 221, 221,
+ 2859, 2860, 2861, 2861, 2861, 2861, 2861, 2861,
+ 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861,
+ 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861,
+ 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861,
+ 221, 221, 2862, 2862, 2862, 2862, 2862, 2862,
+ 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
+ 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
+ 221, 2863, 2862, 2862, 2862, 2862, 2862, 2862,
+ 2862, 2863, 2862, 2862, 2863, 2862, 2862, 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, 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, 221,
+
+ 2864, 2864, 2864, 2864, 2864, 2864, 2864, 221,
+ 2864, 2864, 221, 2864, 2864, 2864, 2864, 2864,
+ 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
- 2864, 2864, 2864, 2864, 2858, 2869, 2869, 2869,
2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
- 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858,
- 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
- 2858, 2858, 2858, 2858, 2869, 2869, 2869, 2869,
- 2869, 2868, 2843, 2869, 2869, 2869, 2869, 2870,
- 2843, 1733, 2869, 2868, 2869, 2869, 2869, 2869,
- 2859, 2859, 2859, 2859, 2859, 2864, 2864, 2864,
2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
- 2864, 2864, 2858, 2858, 2858, 2858, 2858, 2858,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2843, 2843, 2868, 2868, 2868,
- 2868, 2868, 2868, 2843, 2843, 2843, 2868, 2868,
- 2869, 2869, 2869, 2869, 2869, 2874, 2874, 2869,
- 2874, 2874, 2868, 2871, 2868, 2868, 2868, 2868,
- 2859, 2869, 2869, 2868, 2868, 2868, 2868, 2868,
- 2868, 2868, 2868, 2843, 1733, 2871, 2871, 2871,
- 2858, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
- 2873, 2873, 2873, 2873, 2873, 2873, 2858, 2858,
- 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
-
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 1733, 1733,
- 2868, 2868, 2868, 2868, 2843, 1733, 1733, 1733,
- 2868, 2868, 2868, 1733, 1733, 1733, 1733, 1733,
- 2868, 2868, 2868, 2843, 2843, 2843, 2843, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2868, 2868, 2868, 2868, 2868, 2868, 2843, 2843,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
- 2843, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2843, 2843, 2843, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 202, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 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,
- 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882,
- 2883, 2884, 202, 202, 202, 202, 202, 202,
-
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 2885, 2885,
-
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
-
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
-
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
-
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 1733, 1733,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
-
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
-
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
-
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
-
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
-
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
-
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 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,
- 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,
- 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,
- 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,
- 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,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 2885, 2885,
-
- 1403, 2749, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
-
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2885, 2885
+ 2864, 2865, 2865, 2865, 2865, 2865, 2865, 221,
+ 221, 221, 2865, 221, 2865, 2865, 221, 2865,
+ 2865, 2865, 2866, 2865, 2867, 2867, 2868, 2865,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876,
+ 2877, 2878, 221, 221, 221, 221, 221, 221,
+ 2879, 2879, 2879, 2879, 2879, 2879, 221, 2879,
+ 2879, 221, 2879, 2879, 2879, 2879, 2879, 2879,
+ 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+ 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+ 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+ 2879, 2879, 2880, 2880, 2880, 2880, 2880, 221,
+ 2881, 2881, 221, 2880, 2880, 2881, 2880, 2882,
+ 2879, 221, 221, 221, 221, 221, 221, 221,
+ 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890,
+ 2891, 2892, 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, 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, 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, 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, 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, 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, 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, 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, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2893, 2893, 2893, 2893, 2893, 2893, 2893, 2893,
+ 2893, 2893, 2893, 2893, 2893, 2893, 2893, 2893,
+ 2893, 2893, 2894, 2895, 2895, 2896, 2896, 2897,
+ 2897, 221, 221, 221, 221, 221, 221, 221,
+
+ 2898, 2898, 2899, 2900, 2901, 2901, 2901, 2901,
+ 2901, 2901, 2901, 2901, 2901, 2901, 2901, 2901,
+ 2901, 221, 2901, 2901, 2901, 2901, 2901, 2901,
+ 2901, 2901, 2901, 2901, 2901, 2901, 2901, 2901,
+ 2901, 2901, 2901, 2901, 2901, 2901, 2901, 2901,
+ 2901, 2901, 2901, 2901, 2901, 2901, 2901, 2901,
+ 2901, 2901, 2901, 2901, 2900, 2900, 2898, 2898,
+ 2898, 2898, 2898, 221, 221, 221, 2900, 2900,
+ 2898, 2902, 2903, 2904, 2904, 2905, 2905, 2905,
+ 2905, 2905, 2905, 2905, 2905, 2905, 2905, 2905,
+ 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913,
+ 2914, 2915, 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, 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, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2916, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2919, 2919, 2919,
+ 2919, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 2920,
+
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
+ 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2922,
+ 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922,
+ 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922,
+ 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922,
+ 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922,
+ 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922,
+ 2922, 2923, 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, 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, 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,
+
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+ 2924, 2924, 2924, 2925, 2925, 2925, 2925, 2925,
+ 2925, 2925, 2925, 2925, 2925, 2925, 2925, 221,
+ 2926, 2926, 2926, 2926, 2927, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+ 2923, 2923, 2923, 2923, 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,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2928, 2928, 2928, 2928, 2928, 2928, 2928,
+ 2928, 2929, 2929, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2931, 2931, 2931, 2932, 2932, 2932, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2932, 2930, 2930, 2930, 2931, 2932,
+ 2931, 2932, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2931, 2932, 2932, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2930,
+ 2930, 2930, 2930, 2930, 2930, 2930, 2930, 2933,
+ 2934, 2934, 2934, 2934, 2934, 2934, 2934, 2935,
+ 2936, 2937, 2937, 2937, 2938, 2939, 2938, 2939,
+ 2940, 2941, 2941, 2941, 2941, 2941, 2941, 2940,
+ 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
+ 2940, 2940, 2940, 2940, 2940, 2940, 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, 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, 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, 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, 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,
+
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2943, 2944,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+ 2942, 2942, 2942, 2942, 2942, 2942, 2942, 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, 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, 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, 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, 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, 221, 221, 221, 221, 221,
+
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+ 2945, 221, 221, 221, 221, 221, 221, 221,
+ 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+ 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+ 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+ 2946, 2946, 2946, 2946, 2946, 2946, 2946, 221,
+ 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954,
+ 2955, 2956, 221, 221, 221, 221, 2957, 2957,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958,
+ 2958, 2958, 2958, 2958, 2958, 2958, 2958, 221,
+ 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966,
+ 2967, 2968, 221, 221, 221, 221, 221, 221,
+ 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+ 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+ 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+ 2969, 2969, 2969, 2969, 2969, 2969, 221, 221,
+ 2970, 2970, 2970, 2970, 2970, 2971, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2973, 2973, 2973, 2973, 2973, 2973, 2973, 2974,
+ 2974, 2975, 2976, 2976, 2977, 2977, 2977, 2977,
+ 2978, 2978, 2978, 2978, 2974, 2977, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986,
+ 2987, 2988, 221, 2989, 2989, 2989, 2989, 2989,
+ 2989, 2989, 221, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 221, 221, 221, 221, 221, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+ 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, 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,
+ 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, 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,
+ 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,
+ 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990,
+ 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990,
+ 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990,
+ 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990,
+ 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
+ 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
+ 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
+ 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
+ 2992, 2992, 2992, 2992, 2992, 2992, 2992, 2992,
+ 2992, 2992, 2992, 2992, 2992, 2992, 2992, 2992,
+ 2992, 2992, 2992, 2992, 2992, 2992, 2992, 2993,
+ 2994, 2995, 2995, 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, 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, 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,
+
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2996, 2996, 2996,
+ 2996, 2996, 2996, 2996, 2996, 2997, 2997, 2997,
+ 2997, 2997, 2997, 221, 221, 221, 221, 2998,
+ 2996, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
+ 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
+ 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
+ 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
+ 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
+ 2999, 2999, 2999, 2999, 2999, 2999, 2999, 3000,
+ 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000,
+ 221, 221, 221, 221, 221, 221, 221, 3001,
+ 3001, 3001, 3001, 3002, 3002, 3002, 3002, 3002,
+ 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+ 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, 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,
+ 3003, 3004, 3005, 3006, 3007, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3008, 3008, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3010, 3010, 3010,
+ 3010, 3010, 3011, 3011, 3011, 3011, 3011, 3011,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009,
+ 3009, 3009, 3009, 3012, 3012, 3012, 3012, 3012,
+ 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 3013, 3013,
+ 3013, 3013, 3013, 3013, 3013, 3013, 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, 221, 221, 221, 221, 221, 221,
+
+ 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+ 3012, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3014, 3014, 3014, 3014, 221, 3014, 3014, 3014,
+ 3014, 3014, 3014, 3014, 221, 3014, 3014, 221,
+
+ 3015, 3016, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
+ 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3018,
+ 3019, 3019, 3019, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 3020, 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,
+ 3021, 3021, 3021, 221, 221, 3022, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 3023, 3023, 3023, 3023,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+ 3024, 3024, 3024, 3024, 221, 221, 221, 221,
+
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 221, 221, 221, 221, 221,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 3025, 3025, 3025, 221, 221, 221,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 221, 221, 221, 221, 221, 221, 221,
+ 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+ 3025, 3025, 221, 221, 3026, 3027, 3028, 3029,
+ 3030, 3030, 3030, 3030, 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,
+ 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, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 221, 221,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+ 3031, 3031, 3031, 3031, 3031, 3031, 3031, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+ 3032, 3032, 3032, 3032, 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,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 221,
+ 221, 1544, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3034, 3034,
+ 3034, 3034, 3034, 3034, 3034, 3035, 3036, 3037,
+ 3037, 3037, 3033, 3033, 3033, 3038, 3035, 3035,
+ 3035, 3035, 3035, 3039, 3039, 3039, 3039, 3039,
+ 3039, 3039, 3039, 3040, 3040, 3040, 3040, 3040,
+ 3040, 3040, 3040, 3033, 3033, 3041, 3041, 3041,
+ 3041, 3041, 3040, 3040, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3041, 3041, 3041, 3041, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3034, 3034, 3034, 3034, 3034,
+ 3034, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033,
+ 3033, 3033, 3033, 3033, 3033, 3033, 3042, 3042,
+ 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042,
+ 3042, 3043, 3043, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+ 2353, 2353, 3044, 3044, 3044, 2353, 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, 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, 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, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3045, 3045, 3045, 3045, 3045, 3045, 3045, 3045,
+ 3045, 3045, 3045, 3045, 3045, 3045, 3045, 3045,
+ 3045, 3045, 3045, 3045, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+ 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+ 3046, 3046, 3046, 3046, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+ 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+ 3047, 3047, 3046, 3046, 3046, 3046, 3046, 3046,
+ 3046, 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, 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, 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, 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,
+
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 221, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3048, 221, 3048, 3048,
+ 221, 221, 3048, 221, 221, 3048, 3048, 221,
+ 221, 3048, 3048, 3048, 3048, 221, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3049, 3049,
+ 3049, 3049, 221, 3049, 221, 3049, 3049, 3049,
+ 3049, 3050, 3049, 3049, 221, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+
+ 3049, 3049, 3049, 3049, 3048, 3048, 221, 3048,
+ 3048, 3048, 3048, 221, 221, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 221, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 221, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 221, 3048, 3048, 3048, 3048, 221,
+ 3048, 3048, 3048, 3048, 3048, 221, 3048, 221,
+ 221, 221, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 221, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 1536, 1536, 221, 221,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3051, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3052, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3051, 3049, 3049, 3049, 3049,
+
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3052, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3051, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3052,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3051,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3052, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048,
+ 3048, 3051, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3049, 3052, 3049, 3049, 3049, 3049,
+ 3049, 3049, 3053, 3054, 221, 221, 3055, 3056,
+ 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064,
+ 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062,
+ 3063, 3064, 3055, 3056, 3057, 3058, 3059, 3060,
+ 3061, 3062, 3063, 3064, 3055, 3056, 3057, 3058,
+ 3059, 3060, 3061, 3062, 3063, 3064, 3055, 3056,
+ 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064,
+
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3065,
+ 3065, 3065, 3065, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3066, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+ 3065, 3065, 3065, 3065, 3066, 3065, 3065, 3067,
+ 3068, 3067, 3067, 3069, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 3066, 3066, 3066, 3066, 3066,
+ 221, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 3066, 3066, 3066, 3066, 3066, 3066, 3066, 3066,
+ 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, 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,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988,
+ 1988, 1988, 3070, 1988, 1988, 1988, 1988, 1988,
+ 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988,
+ 1988, 1988, 1988, 1988, 1988, 1988, 1988, 221,
+ 221, 221, 221, 221, 221, 3071, 3071, 3071,
+ 3071, 3071, 3071, 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, 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, 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, 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, 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, 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,
+
+ 3072, 3072, 3072, 3072, 3072, 3072, 3072, 221,
+ 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
+ 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
+ 3072, 221, 221, 3072, 3072, 3072, 3072, 3072,
+ 3072, 3072, 221, 3072, 3072, 221, 3072, 3072,
+ 3072, 3072, 3072, 221, 221, 221, 221, 221,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3073,
+ 3073, 3073, 3073, 3073, 3073, 3073, 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, 3074,
+ 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, 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,
+ 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, 221, 221, 221, 221,
+
+ 3075, 3075, 3075, 3075, 3075, 3075, 3075, 3075,
+ 3075, 3075, 3075, 3075, 3075, 3075, 3075, 3075,
+ 3075, 3075, 3075, 3075, 3075, 3075, 3075, 3075,
+ 3075, 3075, 3075, 3075, 3075, 3075, 3075, 3075,
+ 3075, 3075, 3075, 3075, 3075, 3075, 3075, 3075,
+ 3075, 3075, 3075, 3075, 3075, 221, 221, 221,
+ 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3077,
+ 3077, 3077, 3077, 3077, 3077, 3077, 221, 221,
+ 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085,
+ 3086, 3087, 221, 221, 221, 221, 3075, 3088,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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,
+ 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089,
+ 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089,
+ 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089,
+ 3089, 3089, 3089, 3089, 3089, 3089, 3090, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3091, 3091, 3091, 3091, 3091, 3091, 3091, 3091,
+ 3091, 3091, 3091, 3091, 3091, 3091, 3091, 3091,
+ 3091, 3091, 3091, 3091, 3091, 3091, 3091, 3091,
+ 3091, 3091, 3091, 3091, 3091, 3091, 3091, 3091,
+ 3091, 3091, 3091, 3091, 3091, 3091, 3091, 3091,
+ 3091, 3091, 3091, 3091, 3092, 3092, 3092, 3092,
+ 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100,
+ 3101, 3102, 221, 221, 221, 221, 221, 3103,
+
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 3104, 3104, 3104, 3104, 3104, 3104, 3104, 3104,
+ 3104, 3104, 3104, 3104, 3104, 3104, 3104, 3104,
+ 3104, 3104, 3104, 3104, 3104, 3104, 3104, 3104,
+ 3104, 3104, 3104, 3105, 3106, 3106, 3107, 3108,
+ 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116,
+ 3117, 3118, 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, 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, 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, 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, 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, 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, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+ 3119, 3119, 3119, 3119, 3119, 3119, 3119, 221,
+ 3119, 3119, 3119, 3119, 221, 3119, 3119, 221,
+ 3119, 3119, 3119, 3119, 3119, 3119, 3119, 3119,
+ 3119, 3119, 3119, 3119, 3119, 3119, 3119, 221,
+
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
+ 3120, 3120, 3120, 3120, 3120, 323, 323, 3121,
+ 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121,
+ 3122, 3122, 3122, 3122, 3122, 3122, 3122, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
+ 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
+ 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
+ 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
+ 3123, 3123, 3124, 3124, 3124, 3124, 3124, 3124,
+ 3124, 3124, 3124, 3124, 3124, 3124, 3124, 3124,
+ 3124, 3124, 3124, 3124, 3124, 3124, 3124, 3124,
+ 3124, 3124, 3124, 3124, 3124, 3124, 3124, 3124,
+ 3124, 3124, 3124, 3124, 3125, 3125, 3125, 3125,
+ 3125, 3125, 3126, 3127, 323, 323, 323, 323,
+ 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135,
+ 3136, 3137, 323, 323, 323, 323, 3138, 3138,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139,
+ 3139, 3139, 3139, 3139, 3140, 3139, 3139, 3139,
+ 3141, 3139, 3139, 3139, 3139, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 323, 3142, 3142, 3142, 3142, 3142, 3142, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 3142, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 3142, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 3142, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 3142, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 3143, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 3142, 3142,
+ 3142, 3142, 3142, 3142, 3142, 3142, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323,
+
+ 3144, 3144, 3144, 3144, 437, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 437, 3144, 3144, 437, 3144, 437, 437, 3144,
+ 437, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 437, 3144, 3144, 3144, 3144,
+ 437, 3144, 437, 3144, 437, 437, 437, 437,
+ 437, 437, 3144, 437, 437, 437, 437, 3144,
+ 437, 3144, 437, 3144, 437, 3144, 3144, 3144,
+ 437, 3144, 3144, 437, 3144, 437, 437, 3144,
+ 437, 3144, 437, 3144, 437, 3144, 437, 3144,
+ 437, 3144, 3144, 437, 3144, 437, 437, 3144,
+ 3144, 3144, 3144, 437, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 437, 3144, 3144, 3144, 3144,
+ 437, 3144, 3144, 3144, 3144, 437, 3144, 437,
+ 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 437, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 437, 437, 437, 437,
+ 437, 3144, 3144, 3144, 437, 3144, 3144, 3144,
+ 3144, 3144, 437, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
+ 3144, 3144, 3144, 3144, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+ 3145, 3145, 437, 437, 437, 437, 437, 437,
+ 437, 437, 437, 437, 437, 437, 437, 437,
+
+ 1681, 1681, 1681, 1681, 3146, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 3147, 3147, 3147, 3147,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 3147,
+ 3147, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1683,
+ 3147, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1611,
+ 3147, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+
+ 3148, 3148, 3149, 3150, 3151, 3152, 3153, 3154,
+ 3155, 3156, 3157, 3158, 3158, 3159, 3159, 3159,
+ 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160,
+ 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160,
+ 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160,
+ 3160, 3160, 3161, 3161, 3161, 3161, 3162, 3163,
+ 3164, 3165, 3164, 3164, 3164, 3164, 3164, 3164,
+ 3164, 3164, 3164, 3164, 3164, 3165, 3164, 3165,
+ 3164, 3164, 3165, 3164, 3164, 3164, 3165, 3164,
+ 3164, 3164, 3161, 3161, 3161, 3161, 3161, 3166,
+ 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3168,
+ 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3168,
+ 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167,
+ 3167, 3167, 3169, 3169, 3170, 3159, 3159, 3159,
+ 3171, 3171, 3167, 3167, 3167, 3167, 3167, 3167,
+ 3167, 3168, 3167, 3168, 3168, 3167, 3171, 3172,
+ 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167,
+ 3167, 3167, 3173, 3173, 3173, 3173, 3174, 3175,
+ 3161, 3174, 3174, 3174, 3174, 3174, 3174, 3174,
+ 3174, 3174, 3174, 3176, 3176, 3176, 3176, 3176,
+ 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
+ 3176, 3176, 3176, 3176, 3176, 3159, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3177, 3177,
+ 3177, 3177, 3177, 3177, 3177, 3177, 3177, 3177,
+ 3177, 3177, 3177, 3177, 3177, 3177, 3177, 3177,
+ 3177, 3177, 3177, 3177, 3177, 3177, 3177, 3177,
+
+ 3178, 3179, 3179, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
+ 1891, 1891, 3180, 1891, 1891, 1891, 1891, 1891,
+ 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
+ 1891, 1891, 1891, 1891, 1891, 1891, 1891, 3180,
+ 1891, 1891, 3179, 3179, 3179, 3179, 3179, 3179,
+ 3179, 3179, 3179, 3181, 3147, 3147, 3147, 3147,
+ 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
+ 1891, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3179, 3179, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3182, 3182, 3182, 3182, 3182, 3182, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 3183, 3183, 3183,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1683, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1683, 3183, 3183,
+ 1611, 1611, 1611, 1611, 1611, 1684, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1614, 1614, 1683, 1683,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1609, 1609, 1611,
+ 1611, 1611, 1611, 1611, 1609, 1611, 1611, 1611,
+ 1611, 1611, 1684, 1684, 1684, 3184, 1611, 1684,
+ 1611, 1611, 1684, 3185, 3185, 1683, 1683, 3183,
+ 3183, 3183, 3183, 3183, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1683, 1683, 1683, 3184, 1683, 1683, 1683,
+ 3183, 3183, 3183, 3186, 3186, 3186, 3186, 3186,
+
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1683,
+ 1611, 1683, 1684, 1684, 1611, 1611, 1684, 1684,
+ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ 1684, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1684, 1684,
+ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ 1684, 1611, 1611, 1611, 1684, 1611, 1611, 1611,
+ 1611, 1684, 1684, 1684, 1611, 1684, 1684, 1684,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1684,
+ 1611, 1684, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1609, 1611, 1609, 1611, 1609, 1611, 1611, 1611,
+ 1611, 1611, 1684, 1611, 1611, 1611, 1611, 1609,
+ 1611, 1609, 1609, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 3184, 1611, 1611, 1611, 1611, 1683, 1683, 3183,
+
+ 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1609,
+ 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
+ 1609, 1609, 1609, 1609, 1609, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1609, 1609, 1609, 1609, 1609, 1609,
+ 1609, 1609, 1609, 1609, 1609, 1609, 1613, 1613,
+ 3187, 3187, 3187, 3187, 1613, 1613, 1614, 1614,
+ 1614, 1614, 1683, 3183, 3183, 3183, 3183, 3188,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 3185, 3185, 1683, 1683,
+ 1683, 1683, 3189, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 3185, 1683, 1683, 1683, 1683, 3190, 3190, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 3191, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1614, 1614, 1614, 1614,
+ 1614, 1614, 1614, 1614, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1614, 1614, 1614, 1614,
+ 1614, 1614, 1683, 1611, 1611, 1611, 1611, 1611,
+
+ 3192, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 3192, 1611, 1611, 1611, 3192, 1611, 3192,
+ 1611, 3192, 1611, 3192, 1611, 1611, 1611, 3192,
+ 1611, 1611, 1611, 1611, 1611, 1611, 3192, 3192,
+ 1611, 1611, 1611, 1611, 3192, 1611, 3192, 3192,
+ 1611, 1611, 1611, 1611, 3192, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 3184, 3184, 3183, 3183, 1684, 1684, 1684,
+ 1611, 1611, 1611, 1684, 1684, 1684, 1684, 1684,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 3193, 3193,
+ 3193, 3194, 3194, 3194, 1613, 1613, 1613, 1613,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1684, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1684, 1684, 1684, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1684, 1611, 1611, 1611, 1611, 1611, 1683, 1683,
+ 1683, 1683, 1683, 1683, 3190, 1683, 1683, 1683,
+ 3183, 3191, 3191, 3195, 3195, 3196, 3197, 3197,
+ 3147, 3147, 3147, 3147, 3198, 3199, 3199, 3199,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 3184, 3184, 3147, 3147, 3147,
+ 1683, 1683, 1683, 1683, 3191, 3191, 3191, 3182,
+ 3182, 3200, 3196, 3197, 3197, 3147, 3147, 3147,
+
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
+ 3201, 3201, 3201, 3201, 3202, 3202, 3202, 3147,
+ 3147, 3147, 3147, 3202, 3202, 3202, 3202, 3202,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 3203, 3203, 3203,
+ 3203, 3202, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3196, 3196, 3196, 3196, 3196, 3196, 3196, 3196,
+ 3196, 3196, 3196, 3196, 3147, 3147, 3147, 3147,
+ 3199, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 3147, 3147, 3147, 3147,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 3147, 3147, 3147, 3147, 3147, 3147,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1613, 1613, 1613, 1613, 1613, 3147, 3147,
+ 3159, 3159, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
+ 1616, 1616, 1616, 1616, 3204, 3196, 3196, 3205,
+ 3183, 3183, 3183, 3183, 3183, 3183, 3183, 3183,
+ 3206, 3189, 3189, 3189, 3189, 3189, 3189, 3207,
+ 3191, 3191, 3191, 3191, 3191, 3191, 3189, 3191,
+ 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182,
+ 3189, 3207, 3207, 3189, 3189, 3189, 3189, 3189,
+ 3189, 3189, 3191, 3208, 3189, 3189, 3189, 3196,
+ 3191, 3191, 3191, 3191, 3191, 3191, 3208, 3191,
+ 3191, 3191, 3191, 3191, 3182, 3200, 3200, 3200,
+ 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191,
+ 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3182,
+ 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182,
+ 3182, 3182, 3182, 3182, 3200, 3200, 3200, 3200,
+ 3200, 3196, 3197, 3200, 3200, 3200, 3200, 3204,
+ 3197, 3199, 3200, 3196, 3200, 3200, 3200, 3200,
+ 3183, 3183, 3183, 3183, 3183, 3191, 3191, 3191,
+ 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191,
+ 3191, 3191, 3182, 3182, 3182, 3182, 3182, 3182,
+ 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200,
+ 3200, 3200, 3200, 3197, 3197, 3196, 3196, 3196,
+ 3196, 3196, 3196, 3197, 3197, 3197, 3196, 3196,
+ 3200, 3200, 3200, 3200, 3200, 3209, 3209, 3200,
+ 3209, 3209, 3196, 3205, 3196, 3196, 3196, 3196,
+ 3183, 3200, 3200, 3196, 3196, 3196, 3196, 3196,
+ 3196, 3196, 3196, 3197, 3199, 3205, 3205, 3205,
+ 3182, 3207, 3207, 3207, 3207, 3207, 3207, 3207,
+ 3207, 3207, 3207, 3207, 3207, 3207, 3182, 3182,
+ 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3200,
+ 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200,
+ 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200,
+ 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200,
+
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3203, 3203, 3203, 3203, 3203, 3203, 3203, 3203,
+ 3203, 3203, 3203, 3203, 3203, 3203, 3147, 3147,
+ 3196, 3196, 3196, 3196, 3197, 3198, 3198, 3198,
+ 3196, 3196, 3196, 3199, 3199, 3147, 3147, 3147,
+ 3196, 3196, 3196, 3197, 3197, 3197, 3197, 3198,
+ 3198, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3196, 3196, 3196, 3196, 3196, 3196, 3197, 3197,
+ 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+ 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+ 3197, 3199, 3199, 3199, 3199, 3198, 3198, 3198,
+ 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3199,
+ 3199, 3199, 3199, 3198, 3198, 3198, 3147, 3198,
+ 3197, 3197, 3197, 3211, 3211, 3211, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3198, 3198,
+ 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3199,
+ 3199, 3199, 3198, 3198, 3147, 3147, 3147, 3147,
+ 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
+ 3198, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3212,
+ 3212, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 221, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+ 1751, 1751, 1751, 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, 221,
+ 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220,
+ 3221, 3222, 221, 221, 221, 221, 221, 221,
+
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+ 3147, 3147, 3147, 3147, 3147, 3147, 3223, 3223,
+
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 3224,
+ 3224, 3224, 3224, 3224, 3224, 3224, 3224, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1911, 1911,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906,
+ 1906, 1906, 1906, 1906, 1906, 1911, 1911, 1911,
+ 1911, 3225, 2223, 2223, 2223, 2223, 2223, 2223,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 3226, 3226,
+ 3226, 3226, 3226, 3226, 3226, 3226, 2223, 2223,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
+ 1908, 1908, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+ 1909, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 3227, 3227,
+ 3227, 3227, 3227, 3227, 3227, 3227, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3229, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3229, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3229,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3229,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3229,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
+ 3228, 3228, 3228, 3228, 3228, 3228, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 3223, 3223,
+
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 2223, 2223, 2223, 2223, 2223,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+ 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+
+ 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, 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,
+ 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, 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,
+ 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, 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,
+ 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, 221, 221, 3223, 3223,
+
+ 1468, 3039, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 3230, 3230, 3230, 3230, 3230, 3230, 3230, 3230,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 3231, 3231, 3231, 3231, 3231, 3231, 3231, 3231,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+ 3232, 3232, 3232, 3232, 3232, 3232, 3223, 3223
};
-static const Properties uc_properties[] = {
- { 9, 18, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 21, 0, 2 },
- { 9, 8, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 17, 5, 2 },
- { 9, 7, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 2, 2, 37, 2, 2 },
- { 9, 8, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 38, 5, 2 },
- { 9, 9, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 38, 5, 2 },
- { 9, 7, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 1, 1, 36, 1, 2 },
- { 9, 7, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 21, 0, 2 },
- { 9, 8, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 21, 0, 2 },
- { 6, 9, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 22, 35, 5, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 12, 3, 13, 2 },
- { 25, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 25, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 11, 3, 13, 2 },
- { 21, 10, 0, 0, -1, 1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 2, 13, 2 },
- { 26, 3, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 11, 2 },
- { 20, 3, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 11, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 10, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 2 },
- { 3, 2, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 0, 2 },
- { 26, 10, 0, 0, -1, 2, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 3 },
- { 21, 10, 0, 0, -1, 2, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 22, 10, 0, 0, -1, -2, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 2, 13, 2 },
- { 28, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 19, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 12, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 26, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 22, 10, 0, 0, -1, -2, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 9, 7, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 38, 3, 2 },
- { 6, 6, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 4, 5, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 28, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 23, 10, 0, 0, -1, 16, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 10, 18, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 17, 4, 2 },
- { 29, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 26, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 5, 2, 0, 0, 2, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 3, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 28, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 743}, {0, 743}, {0, 775} }, 0, 10, 12, 6, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 12, 0, 2 },
- { 5, 2, 0, 0, 1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 24, 10, 0, 0, -1, -16, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 5, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 418}, {1, 415}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 121}, {0, 121}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {1, 421}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -232}, {0, -232}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 80, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 500}, {1, 500}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -121}, {0, 0}, {0, 0}, {0, -121} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -300}, {0, -300}, {0, -268} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 195}, {0, 195}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 210}, {0, 0}, {0, 0}, {0, 210} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 206}, {0, 0}, {0, 0}, {0, 206} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 205}, {0, 0}, {0, 0}, {0, 205} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 79}, {0, 0}, {0, 0}, {0, 79} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 202}, {0, 0}, {0, 0}, {0, 202} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 203}, {0, 0}, {0, 0}, {0, 203} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 207}, {0, 0}, {0, 0}, {0, 207} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 97}, {0, 97}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 211}, {0, 0}, {0, 0}, {0, 211} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 209}, {0, 0}, {0, 0}, {0, 209} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 163}, {0, 163}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 213}, {0, 0}, {0, 0}, {0, 213} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 130}, {0, 130}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 214}, {0, 0}, {0, 0}, {0, 214} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 218}, {0, 0}, {0, 0}, {0, 218} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 217}, {0, 0}, {0, 0}, {0, 217} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 219}, {0, 0}, {0, 0}, {0, 219} }, 0, 10, 12, 7, 3 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 56}, {0, 56}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 80, { {0, 2}, {0, 0}, {0, 1}, {0, 2} }, 0, 10, 12, 7, 3 },
- { 16, 0, 0, 0, -1, 0, 1, 80, { {0, 1}, {0, -1}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -2}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -79}, {0, -79}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 511}, {1, 511}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {0, -97}, {0, 0}, {0, 0}, {0, -97} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {0, -56}, {0, 0}, {0, 0}, {0, -56} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 4, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 4, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 6, 0, { {0, -130}, {0, 0}, {0, 0}, {0, -130} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {1, 1}, {0, 0}, {0, 0}, {1, 1} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {0, -163}, {0, 0}, {0, 0}, {0, -163} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {1, 3}, {0, 0}, {0, 0}, {1, 3} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {1, 5}, {1, 5}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {1, 7}, {1, 7}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {0, -195}, {0, 0}, {0, 0}, {0, -195} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {0, 69}, {0, 0}, {0, 0}, {0, 69} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {0, 71}, {0, 0}, {0, 0}, {0, 71} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 9}, {1, 9}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 11}, {1, 11}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 13}, {1, 13}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -210}, {0, -210}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -206}, {0, -206}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -205}, {0, -205}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -202}, {0, -202}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -203}, {0, -203}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 15}, {1, 15}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 17}, {1, 17}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -207}, {0, -207}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 19}, {1, 19}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 21}, {1, 21}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -209}, {0, -209}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -211}, {0, -211}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 23}, {1, 23}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 25}, {1, 25}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 27}, {1, 27}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 29}, {1, 29}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -213}, {0, -213}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -214}, {0, -214}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 31}, {1, 31}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -218}, {0, -218}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 33}, {1, 33}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 35}, {1, 35}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -69}, {0, -69}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -217}, {0, -217}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -71}, {0, -71}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -219}, {0, -219}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 37}, {1, 37}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {1, 39}, {1, 39}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 28, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 17, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 18, 8, 2 },
- { 28, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 18, 0, 2 },
- { 28, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 36 },
- { 17, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 28, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 28, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 0, 17, 230, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 232, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 216, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 202, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 202, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 1, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 1, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 240, 5, -1, 0, 1, 204, { {0, 0}, {0, 84}, {0, 84}, {0, 116} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 232, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 233, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 1 },
- { 0, 17, 234, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 1 },
- { 0, 17, 233, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 1 },
- { 0, 17, 234, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 1 },
- { 0, 17, 233, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 17, 10, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 28, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 13, 0, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 17, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 130}, {0, 130}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 25, 10, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {0, 116}, {0, 0}, {0, 0}, {0, 116} }, 0, 10, 12, 7, 4 },
- { 28, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 28, 10, 0, 0, -1, 0, 1, 81, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 38}, {0, 0}, {0, 0}, {0, 38} }, 0, 10, 12, 7, 4 },
- { 25, 10, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 37}, {0, 0}, {0, 0}, {0, 37} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 64}, {0, 0}, {0, 0}, {0, 64} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 63}, {0, 0}, {0, 0}, {0, 63} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 503}, {1, 503}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -38}, {0, -38}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -37}, {0, -37}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 507}, {1, 507}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -31}, {0, -31}, {0, 1} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -64}, {0, -64}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -63}, {0, -63}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {0, 8}, {0, 0}, {0, 0}, {0, 8} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -62}, {0, -62}, {0, -30} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -57}, {0, -57}, {0, -25} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 81, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -47}, {0, -47}, {0, -15} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -54}, {0, -54}, {0, -22} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, -8}, {0, -8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 6, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 46 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 46 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -86}, {0, -86}, {0, -54} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -80}, {0, -80}, {0, -48} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 7}, {0, 7}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -116}, {0, -116}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 5, 80, { {0, -60}, {0, 0}, {0, 0}, {0, -60} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 5, 80, { {0, 0}, {0, -96}, {0, -96}, {0, -64} }, 0, 10, 12, 6, 4 },
- { 26, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 14, 0, 0, 0, -1, 0, 7, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 7, 80, { {0, -7}, {0, 0}, {0, 0}, {0, -7} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {0, -130}, {0, 0}, {0, 0}, {0, -130} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 4, 17, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 12, 7, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 12, 7, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 12, 7, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 4, 17, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 29, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 5 },
- { 0, 17, 230, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 5 },
- { 0, 17, 230, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 5 },
- { 2, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 5 },
- { 14, 0, 0, 0, -1, 0, 6, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 15}, {0, 0}, {0, 0}, {0, 15} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, -15}, {0, -15}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 4, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 4, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 11, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 12, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 5 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 48}, {0, 0}, {0, 0}, {0, 48} }, 0, 10, 12, 7, 6 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 6 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 6 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 11, 6 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 12, 0, 6 },
- { 15, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, -48}, {0, -48}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 467}, {1, 464}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 12, 6 },
- { 20, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 17, 0, 6 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 6 },
- { 27, 4, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 6 },
- { 13, 1, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 0, 17, 220, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 230, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 222, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 220, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 228, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 10, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 11, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 12, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 13, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 14, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 15, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 16, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 17, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 18, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 19, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 19, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 20, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 21, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 22, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 20, 1, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 7 },
- { 0, 17, 23, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 25, 1, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 7 },
- { 0, 17, 24, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 0, 17, 25, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 25, 1, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 7 },
- { 0, 17, 18, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 18, 1, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 13, 8, 7 },
- { 18, 1, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 13, 8, 7 },
- { 25, 1, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 7 },
- { 25, 1, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 12, 0, 7 },
- { 10, 5, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 8 },
- { 10, 5, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 8 },
- { 10, 5, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 2 },
- { 26, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 26, 13, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 25, 4, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 8 },
- { 27, 13, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 8 },
- { 25, 13, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 11, 8 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 0, 17, 230, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 230, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 30, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 31, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 32, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 25, 13, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 2 },
- { 10, 13, 0, 5, -1, 0, 15, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 8 },
- { 13, 13, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 25, 13, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 8 },
- { 25, 13, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 2 },
- { 18, 13, 0, 2, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 17, 13, 0, 1, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 0, 17, 27, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 28, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 29, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 30, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 31, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 32, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 33, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 34, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 4, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 4, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 230, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 220, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 220, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 3, 5, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 5, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 25, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 8 },
- { 25, 5, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 25, 5, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 11, 9, 8 },
- { 25, 13, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 18, 13, 0, 2, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 0, 17, 35, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 18, 13, 0, 3, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 25, 13, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 8 },
- { 0, 17, 230, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 10, 5, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 0, 17, 220, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 17, 13, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 3, 2, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 3, 2, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 8 },
- { 29, 13, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 18, 13, 0, 2, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 25, 13, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 9 },
- { 25, 13, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 9 },
- { 10, 13, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 9 },
- { 18, 13, 0, 3, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 0, 17, 36, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 9 },
- { 18, 13, 0, 2, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 18, 13, 0, 2, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 18, 13, 0, 3, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 0, 17, 230, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 9 },
- { 0, 17, 220, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 9 },
- { 18, 13, 0, 2, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 10 },
- { 0, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 10 },
- { 18, 13, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 10 },
- { 3, 1, 0, 0, 0, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 2, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 3, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 4, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 5, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 6, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 7, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 8, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 3, 1, 0, 0, 9, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 66 },
- { 18, 1, 0, 2, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 66 },
- { 0, 17, 230, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 66 },
- { 0, 17, 220, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 66 },
- { 17, 1, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 66 },
- { 29, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 66 },
- { 25, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 66 },
- { 25, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 11, 66 },
- { 25, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 66 },
- { 17, 1, 0, 1, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 66 },
- { 0, 17, 220, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 66 },
- { 27, 1, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 66 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 82 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 82 },
- { 17, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 82 },
- { 25, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 82 },
- { 25, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 82 },
- { 18, 1, 0, 3, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 95 },
- { 18, 1, 0, 2, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 95 },
- { 0, 17, 220, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 95 },
- { 25, 1, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 95 },
- { 18, 13, 0, 2, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 18, 13, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 18, 13, 0, 3, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 9 },
- { 18, 13, 0, 2, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 3, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 18, 13, 0, 2, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 0, 17, 220, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 230, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 10, 5, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 2 },
- { 0, 17, 220, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 230, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 220, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 27, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 28, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 29, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 230, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 8 },
- { 0, 17, 0, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 11 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 0, 17, 0, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 1, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 11 },
- { 0, 17, 7, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 11 },
- { 18, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 2 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 11 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 11 },
- { 17, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 12 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 12 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 12 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 12 },
- { 0, 17, 7, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 12 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 12 },
- { 1, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 12 },
- { 1, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 12 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 12 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 12 },
- { 18, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 12 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 12 },
- { 27, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 12 },
- { 5, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 12 },
- { 5, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 12 },
- { 29, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 12 },
- { 27, 4, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 12 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 12 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 12 },
- { 0, 17, 230, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 12 },
- { 0, 17, 0, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 13 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 13 },
- { 1, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 13 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 13 },
- { 18, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 13 },
- { 0, 17, 7, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 13 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 13 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 13 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 13 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 13 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 13 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 14 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 14 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 14 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 14 },
- { 0, 17, 7, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 14 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 14 },
- { 0, 17, 0, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 14 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 14 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 14 },
- { 27, 4, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 14 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 14 },
- { 0, 17, 0, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 14 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 15 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 15 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 15 },
- { 0, 17, 7, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 1, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 1, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 15 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 0, 17, 0, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 0, 17, 0, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 15 },
- { 18, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 15 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 15 },
- { 29, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 15 },
- { 5, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 15 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 16 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 16 },
- { 18, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 16 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 16 },
- { 1, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 16 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 16 },
- { 1, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 16 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 16 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 16 },
- { 3, 0, 0, 0, 0, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 16 },
- { 5, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 16 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 16 },
- { 27, 4, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 16 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 17 },
- { 0, 17, 0, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 17 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 17 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 17 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 0, 17, 0, 5, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 0, 17, 84, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 0, 17, 91, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 17 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 17 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 17 },
- { 25, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 17 },
- { 5, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 17 },
- { 29, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 17 },
- { 18, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 18 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 18 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 18 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 18 },
- { 0, 17, 7, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 18 },
- { 0, 0, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 1, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 18 },
- { 1, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 0, 17, 0, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 18 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 18 },
- { 18, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 18 },
- { 0, 17, 0, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 1, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 19 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 19 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 19 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 19 },
- { 0, 17, 9, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 19 },
- { 1, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 1, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 19 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 19 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 19 },
- { 29, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 19 },
- { 18, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 19 },
- { 5, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 19 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 19 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 19 },
- { 5, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 19 },
- { 29, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 19 },
- { 0, 17, 0, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 20 },
- { 1, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 20 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 20 },
- { 0, 17, 9, 5, -1, 0, 4, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 20 },
- { 1, 0, 0, 0, -1, 0, 4, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 20 },
- { 0, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 20 },
- { 1, 0, 0, 0, -1, 0, 4, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 20 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 20 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 20 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 21 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 21 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 0, 33, 8, 21 },
- { 0, 17, 103, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 21 },
- { 0, 17, 9, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 21 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 21 },
- { 0, 17, 107, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 21 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 21 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 21 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 21 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 22 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 22 },
- { 0, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 22 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 0, 33, 8, 22 },
- { 0, 17, 118, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 22 },
- { 0, 17, 9, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 22 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 22 },
- { 0, 17, 122, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 22 },
- { 3, 0, 0, 0, 0, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 3, 0, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 22 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 22 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 22 },
- { 18, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 23 },
- { 29, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 4, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 4, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 23 },
- { 29, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 23 },
- { 0, 17, 220, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 3, 0, 0, 0, 0, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 2, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 3, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 4, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 5, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 6, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 7, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 8, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 3, 0, 0, 0, 9, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 23 },
- { 5, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 23 },
- { 29, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 23 },
- { 0, 17, 216, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 21, 10, 0, 0, -1, 1, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 23 },
- { 22, 10, 0, 0, -1, -1, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 23 },
- { 1, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 23 },
- { 18, 0, 0, 0, -1, 0, 2, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 23 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 23 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 23 },
- { 0, 17, 129, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 130, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 0, 5, -1, 0, 2, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 132, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 0, 5, -1, 0, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 0, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 1, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 17, 4, 23 },
- { 0, 17, 230, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 9, 5, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 23 },
- { 0, 17, 0, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 0, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 29, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 23 },
- { 29, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 23 },
- { 0, 17, 220, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 23 },
- { 29, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 23 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 23 },
- { 29, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 4, 0, 23 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 18, 0, 0, 0, -1, 0, 4, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 33, 4, 24 },
- { 1, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 33, 4, 24 },
- { 0, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 0, 17, 0, 5, -1, 0, 4, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 1, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 33, 4, 24 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 0, 17, 7, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 0, 17, 9, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 0, 17, 9, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 33, 4, 24 },
- { 3, 0, 0, 0, 0, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 2, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 3, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 4, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 5, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 6, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 7, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 8, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 9, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 24 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 24 },
- { 0, 17, 220, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 33, 4, 24 },
- { 0, 17, 0, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 29, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 24 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 7264}, {0, 0}, {0, 0}, {0, 7264} }, 0, 10, 12, 7, 25 },
- { 14, 0, 0, 0, -1, 0, 13, 0, { {0, 7264}, {0, 0}, {0, 0}, {0, 7264} }, 0, 10, 12, 7, 25 },
- { 15, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 25 },
- { 15, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 25 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 25 },
- { 25, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 25 },
- { 15, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 25 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 9, 10, 25, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 9, 10, 25, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 26, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 26, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 26, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 11, 10, 27, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 11, 10, 27, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 11, 10, 27, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 27 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 27 },
- { 0, 17, 230, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 27 },
- { 0, 17, 230, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 27 },
- { 25, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 27 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 27 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 2, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 3, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 4, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 5, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 6, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 7, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 8, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, 9, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 5, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 27 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 41}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 43}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 45}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 47}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 49}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 51}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 53}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 55}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 57}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 59}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 61}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 63}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 65}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 67}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 69}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 71}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 73}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 75}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 77}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 79}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 81}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 83}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 85}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 87}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 89}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 91}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 93}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 95}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 97}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 99}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 101}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 103}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 105}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 107}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 109}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 111}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 113}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 115}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 117}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 119}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 121}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 123}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 125}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 127}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 129}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 131}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 133}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 135}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 137}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 139}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 141}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 143}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 145}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 147}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 149}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 151}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 153}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 155}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 157}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 159}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 161}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 163}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 165}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 167}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 169}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 171}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 173}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 175}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 177}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 179}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 181}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 183}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 185}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 187}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 189}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 191}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 193}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 195}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 197}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {1, 199}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 4, 0, { {0, 8}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 14, 0, 0, 0, -1, 0, 17, 0, { {0, 8}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, -8}, {0, -8}, {0, -8} }, 0, 10, 12, 6, 28 },
- { 20, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 29 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 29 },
- { 29, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 29 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 29 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 29 },
- { 6, 9, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 22, 17, 5, 30 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 30 },
- { 21, 10, 0, 0, -1, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 30 },
- { 22, 10, 0, 0, -1, -1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 30 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 31 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 4, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 31 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 31 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 42 },
- { 0, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 42 },
- { 0, 17, 9, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 42 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 43 },
- { 0, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 43 },
- { 0, 17, 9, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 43 },
- { 25, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 2 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 44 },
- { 0, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 44 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 45 },
- { 0, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 45 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 32 },
- { 0, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 32 },
- { 1, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 33, 4, 32 },
- { 0, 17, 9, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 32 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 32 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 32 },
- { 17, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 32 },
- { 25, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 32 },
- { 27, 4, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 32 },
- { 0, 17, 230, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 32 },
- { 3, 0, 0, 0, 0, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 2, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 3, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 4, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 5, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 6, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 7, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 8, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 3, 0, 0, 0, 9, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 32 },
- { 5, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 32 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 33 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 33 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 33 },
- { 25, 10, 0, 2, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 33 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 11, 33 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 33 },
- { 25, 10, 0, 1, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 33 },
- { 0, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 33 },
- { 10, 18, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 4, 4, 33 },
- { 3, 0, 0, 0, 0, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 2, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 3, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 4, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 5, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 6, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 7, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 8, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 3, 0, 0, 0, 9, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 33 },
- { 18, 0, 0, 2, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 33 },
- { 17, 0, 0, 2, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 33 },
- { 18, 0, 0, 2, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 33 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 33 },
- { 0, 17, 228, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 33 },
- { 18, 0, 0, 2, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 33 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 47 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 47 },
- { 0, 17, 0, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 47 },
- { 1, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 47 },
- { 0, 17, 222, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 47 },
- { 0, 17, 230, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 47 },
- { 0, 17, 220, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 47 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 47 },
- { 25, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 47 },
- { 3, 0, 0, 0, 0, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 2, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 3, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 4, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 5, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 6, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 7, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 8, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 3, 0, 0, 0, 9, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 47 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 48 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 56 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 56 },
- { 3, 0, 0, 0, 0, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 2, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 3, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 4, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 5, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 6, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 7, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 8, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 3, 0, 0, 0, 9, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 56 },
- { 5, 0, 0, 0, 1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 56 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 56 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 32 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 55 },
- { 0, 17, 230, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 55 },
- { 0, 17, 220, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 55 },
- { 1, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 55 },
- { 0, 17, 0, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 55 },
- { 25, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 55 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 78 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 33, 4, 78 },
- { 0, 17, 0, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 78 },
- { 0, 17, 9, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 78 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 33, 4, 78 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 78 },
- { 0, 17, 220, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 78 },
- { 3, 0, 0, 0, 0, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 2, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 3, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 4, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 5, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 6, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 7, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 8, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 3, 0, 0, 0, 9, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 78 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 78 },
- { 17, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 78 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 12, 78 },
- { 0, 17, 230, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 2, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 0, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 62 },
- { 1, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 62 },
- { 18, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 62 },
- { 18, 0, 0, 0, -1, 0, 9, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 62 },
- { 0, 17, 7, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 62 },
- { 1, 0, 0, 0, -1, 0, 9, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 62 },
- { 1, 0, 0, 0, -1, 0, 9, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 62 },
- { 1, 0, 9, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 62 },
- { 3, 0, 0, 0, 0, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 2, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 3, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 4, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 5, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 6, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 7, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 8, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 3, 0, 0, 0, 9, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 62 },
- { 25, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 62 },
- { 25, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 62 },
- { 25, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 62 },
- { 29, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 62 },
- { 0, 17, 230, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 62 },
- { 0, 17, 220, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 62 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 67 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 67 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 67 },
- { 1, 0, 9, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 67 },
- { 0, 17, 9, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 67 },
- { 0, 17, 0, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 67 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 67 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 67 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 93 },
- { 0, 17, 7, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 93 },
- { 1, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 93 },
- { 0, 17, 0, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 93 },
- { 1, 0, 9, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 93 },
- { 25, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 93 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 68 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 68 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 68 },
- { 0, 17, 7, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 68 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 68 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 68 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 68 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 69 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 69 },
- { 17, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 69 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 69 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6254}, {0, -6254}, {0, -6222} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6253}, {0, -6253}, {0, -6221} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6244}, {0, -6244}, {0, -6212} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6242}, {0, -6242}, {0, -6210} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6243}, {0, -6243}, {0, -6211} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6236}, {0, -6236}, {0, -6204} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -6181}, {0, -6181}, {0, -6180} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {1, 201}, {1, 201}, {1, 719} }, 0, 10, 12, 6, 5 },
- { 14, 0, 0, 0, -1, 0, 20, 0, { {0, -3008}, {0, 0}, {0, 0}, {0, -3008} }, 0, 10, 12, 8, 25 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 67 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 0, 17, 1, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 2 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 0, 17, 230, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 1, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 2 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 15, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 17, 0, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 17, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {1, 203}, {1, 203}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 3814}, {0, 3814}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {1, 205}, {1, 205}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 0, 17, 230, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 234, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 214, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 202, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 232, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 228, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 233, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 514}, {1, 514}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 517}, {1, 517}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 520}, {1, 520}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 523}, {1, 523}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 526}, {1, 526}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 2, 81, { {0, 0}, {0, -59}, {0, -59}, {0, -58} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {0, -7615}, {0, 0}, {0, 0}, {0, -7615} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 8}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {0, 0}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 529}, {1, 529}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 532}, {1, 532}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 536}, {1, 536}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 540}, {1, 540}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 74}, {0, 74}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 74}, {0, 74}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 86}, {0, 86}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 86}, {0, 86}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 100}, {0, 100}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 100}, {0, 100}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 128}, {0, 128}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 128}, {0, 128}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 112}, {0, 112}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 112}, {0, 112}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 126}, {0, 126}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 126}, {0, 126}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 578}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 581}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 584}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 587}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 590}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 593}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 596}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 599}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 578}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 581}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 584}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 587}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 590}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 593}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 596}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 599}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 602}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 605}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 608}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 611}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 614}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 617}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 620}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 623}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 602}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 605}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 608}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 611}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 614}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 617}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 620}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 623}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 626}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 629}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 632}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 635}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 638}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 641}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 644}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 647}, {0, 8}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 626}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 629}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 632}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 635}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 638}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 641}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 644}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -8}, {1, 647}, {0, 0}, {0, -8} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 662}, {1, 659}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 650}, {0, 9}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 668}, {1, 665}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 544}, {1, 544}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 699}, {1, 695}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -74}, {0, 0}, {0, 0}, {0, -74} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -74}, {0, 0}, {0, 0}, {0, -74} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -9}, {1, 650}, {0, 0}, {0, -9} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, -7205}, {0, -7205}, {0, -7173} }, 0, 10, 12, 6, 4 },
- { 28, 10, 0, 0, -1, 0, 1, 81, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 674}, {1, 671}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 653}, {0, 9}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 680}, {1, 677}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 547}, {1, 547}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 707}, {1, 703}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -86}, {0, 0}, {0, 0}, {0, -86} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -86}, {0, 0}, {0, 0}, {0, -86} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -9}, {1, 653}, {0, 0}, {0, -9} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 550}, {1, 550}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {1, 503}, {1, 503}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 554}, {1, 554}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 557}, {1, 557}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -100}, {0, 0}, {0, 0}, {0, -100} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -100}, {0, 0}, {0, 0}, {0, -100} }, 0, 10, 12, 7, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 561}, {1, 561}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {1, 507}, {1, 507}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 565}, {1, 565}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 7}, {0, 7}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 568}, {1, 568}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 571}, {1, 571}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -112}, {0, 0}, {0, 0}, {0, -112} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -112}, {0, 0}, {0, 0}, {0, -112} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -7}, {0, 0}, {0, 0}, {0, -7} }, 0, 10, 12, 7, 4 },
- { 28, 10, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 686}, {1, 683}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 656}, {0, 9}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 692}, {1, 689}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 575}, {1, 575}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {1, 715}, {1, 711}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -128}, {0, 0}, {0, 0}, {0, -128} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -128}, {0, 0}, {0, 0}, {0, -128} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 17, { {0, -126}, {0, 0}, {0, 0}, {0, -126} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -126}, {0, 0}, {0, 0}, {0, -126} }, 0, 10, 12, 7, 4 },
- { 16, 0, 0, 0, -1, 0, 1, 17, { {0, -9}, {1, 656}, {0, 0}, {0, -9} }, 0, 10, 12, 7, 4 },
- { 28, 10, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 4 },
- { 6, 9, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 22, 17, 5, 2 },
- { 6, 9, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 22, 17, 5, 2 },
- { 6, 9, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 4, 5, 2 },
- { 10, 18, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 20, 4, 2 },
- { 10, 18, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 10, 18, 0, 1, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 5, 5, 32, 4, 1 },
- { 10, 0, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 1, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 4, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 11, 2 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 11, 2 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 23, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 3, 13, 2 },
- { 24, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 3, 13, 2 },
- { 21, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 23, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 24, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 15, 10, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 15, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 17, 0, 2 },
- { 7, 9, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 38, 3, 2 },
- { 8, 7, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 38, 3, 2 },
- { 10, 11, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 14, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 16, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 12, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 15, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 6, 6, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 4, 5, 2 },
- { 25, 4, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 23, 10, 0, 0, -1, 1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 24, 10, 0, 0, -1, -1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
- { 26, 6, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 0, 2 },
- { 22, 10, 0, 0, -1, -1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 19, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 6, 9, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 22, 17, 5, 2 },
- { 10, 18, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 22, 4, 2 },
- { 10, 18, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 12, 4, 2 },
- { 10, 18, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 12, 4, 2 },
- { 13, 18, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 12, 0, 0 },
- { 10, 19, 0, 0, -1, 0, 15, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 20, 0, 0, -1, 0, 15, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 21, 0, 0, -1, 0, 15, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 22, 0, 0, -1, 0, 15, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 10, 18, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 5, 2, 0, 0, 0, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 5, 2, 0, 0, 4, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 5, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 6, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 7, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 8, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 9, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 3, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 21, 10, 0, 0, -1, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 17, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 27, 4, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 14, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 27, 4, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 13, 4, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 0 },
- { 2, 17, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 2, 17, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 2, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 1, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 220, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 1, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {0, -7517}, {0, 0}, {0, 0}, {0, -7517} }, 0, 10, 12, 7, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {1, 207}, {0, 0}, {0, 0}, {1, 207} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 85, { {1, 209}, {0, 0}, {0, 0}, {1, 209} }, 0, 10, 12, 7, 3 },
- { 29, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 0, { {0, 28}, {0, 0}, {0, 0}, {0, 28} }, 0, 10, 12, 7, 3 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 15, 0, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 29, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 15, 0, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 14, 0, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 26, 10, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, -28}, {0, -28}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 29, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 4, 0, 0, 0, -1, 0, 1, 80, { {0, 16}, {0, 0}, {0, 0}, {0, 16} }, 0, 10, 12, 7, 3 },
- { 4, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -16}, {0, -16}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 4, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 4, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 3, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 3, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -3, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -3, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2016, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2527, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1923, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1914, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1918, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2250, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 138, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 7, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -7, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1824, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2104, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2108, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2106, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1316, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -138, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 15, 0, 2 },
- { 26, 10, 0, 0, -1, 8, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 7, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -8, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -7, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 21, 10, 0, 0, -1, 1, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 29, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 2, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 3, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 4, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 5, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 6, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 7, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 8, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 9, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 26}, {0, 0}, {0, 0}, {0, 26} }, 0, 10, 12, 7, 2 },
- { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -26}, {0, -26}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 5, 10, 0, 0, 0, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 2, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 3, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 4, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 5, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 6, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 7, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 8, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 9, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 0, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 2 },
- { 21, 10, 0, 0, -1, 1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 5, 10, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 2, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 3, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 4, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 5, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 6, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 7, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 8, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, 9, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 21, 10, 0, 0, -1, 1, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 26, 10, 0, 0, -1, 1, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 2, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1316, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 21, 10, 0, 0, -1, 1, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 29, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 54 },
- { 21, 10, 0, 0, -1, 3, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, 1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 21, 10, 0, 0, -1, -1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -3, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 26, 10, 0, 0, -1, -1914, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1918, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1923, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -1824, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2016, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 6, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2104, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2106, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2108, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, -2250, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, -2527, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {0, 48}, {0, 0}, {0, 0}, {0, 48} }, 0, 10, 12, 7, 57 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, -48}, {0, -48}, {0, 0} }, 0, 10, 12, 6, 57 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {1, 211}, {0, 0}, {0, 0}, {1, 211} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {0, -3814}, {0, 0}, {0, 0}, {0, -3814} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 9, 0, { {1, 213}, {0, 0}, {0, 0}, {1, 213} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {1, 215}, {1, 215}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {1, 217}, {1, 217}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {1, 219}, {0, 0}, {0, 0}, {1, 219} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {1, 221}, {0, 0}, {0, 0}, {1, 221} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {1, 223}, {0, 0}, {0, 0}, {1, 223} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 11, 0, { {1, 225}, {0, 0}, {0, 0}, {1, 225} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 10, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 11, 0, { {1, 227}, {0, 0}, {0, 0}, {1, 227} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 11, 0, { {1, 229}, {0, 0}, {0, 0}, {1, 229} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 8, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 46 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 46 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 46 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 46 },
- { 14, 0, 0, 0, -1, 0, 11, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 46 },
- { 15, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 46 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 46 },
- { 14, 0, 0, 0, -1, 0, 13, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 46 },
- { 15, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 46 },
- { 25, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 46 },
- { 25, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 46 },
- { 5, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 46 },
- { 15, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, -7264}, {0, -7264}, {0, 0} }, 0, 10, 12, 6, 25 },
- { 15, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, -7264}, {0, -7264}, {0, 0} }, 0, 10, 12, 6, 25 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 58 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 58 },
- { 17, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 58 },
- { 25, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 58 },
- { 0, 17, 9, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 58 },
- { 25, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 23, 10, 0, 0, -1, 1, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 24, 10, 0, 0, -1, -1, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 20, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 23, 10, 0, 0, -1, 1, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 24, 10, 0, 0, -1, -1, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 2 },
- { 17, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 25, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 21, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 37 },
- { 29, 10, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 37 },
- { 29, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 2 },
- { 4, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 2 },
- { 22, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 0, 17, 218, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 228, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 222, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 1, 0, 224, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 26 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 21, 8, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 4, 0, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 17, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 2 },
- { 25, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 8, 34 },
- { 0, 17, 8, 5, -1, 0, 1, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 28, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 8, 34 },
- { 17, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
- { 20, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 35 },
- { 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
- { 17, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 26 },
- { 29, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 5, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
- { 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
- { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 26 },
- { 29, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 26 },
- { 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 5, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 5, 10, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 26 },
- { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 0, 35 },
- { 29, 0, 0, 0, -1, 0, 22, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 13, 0, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0 },
- { 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 38 },
- { 17, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 38 },
- { 29, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 38 },
- { 29, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 38 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 83 },
- { 17, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 83 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 83 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 83 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 70 },
- { 17, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 70 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 70 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 70 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 70 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 70 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 5 },
- { 2, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 5 },
- { 25, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 5 },
- { 0, 17, 230, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 5 },
- { 17, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 5 },
- { 17, 0, 0, 0, -1, 0, 16, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 5 },
- { 0, 17, 230, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 5 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 84 },
- { 4, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 84 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 84 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 84 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 84 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 84 },
- { 28, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 28, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 17, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 28, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 10, 0, { {1, 231}, {0, 0}, {0, 0}, {1, 231} }, 0, 10, 12, 7, 3 },
- { 28, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 12, 0, { {1, 233}, {0, 0}, {0, 0}, {1, 233} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 14, 0, 0, 0, -1, 0, 12, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 13, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 48}, {0, 48}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 13, 0, { {1, 235}, {0, 0}, {0, 0}, {1, 235} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {1, 237}, {0, 0}, {0, 0}, {1, 237} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {1, 239}, {0, 0}, {0, 0}, {1, 239} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {1, 241}, {0, 0}, {0, 0}, {1, 241} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 18, 0, { {1, 243}, {0, 0}, {0, 0}, {1, 243} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {1, 245}, {0, 0}, {0, 0}, {1, 245} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {1, 247}, {0, 0}, {0, 0}, {1, 247} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 17, 0, { {1, 249}, {0, 0}, {0, 0}, {1, 249} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 17, 0, { {0, 928}, {0, 0}, {0, 0}, {0, 928} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 17, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 20, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 21, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 14, 0, 0, 0, -1, 0, 21, 0, { {0, -48}, {0, 0}, {0, 0}, {0, -48} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 21, 0, { {1, 251}, {0, 0}, {0, 0}, {1, 251} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 21, 0, { {1, 253}, {0, 0}, {0, 0}, {1, 253} }, 0, 10, 12, 7, 3 },
- { 14, 0, 0, 0, -1, 0, 23, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 12, 7, 3 },
- { 15, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 17, 0, 0, 0, -1, 0, 13, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 59 },
- { 0, 17, 0, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 59 },
- { 0, 17, 9, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 59 },
- { 1, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 59 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 59 },
- { 0, 17, 9, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 59 },
- { 29, 4, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 18, 0, 0, 2, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 65 },
- { 18, 0, 0, 4, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 65 },
- { 18, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 65 },
- { 25, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 65 },
- { 25, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 65 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 71 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 71 },
- { 0, 17, 9, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 71 },
- { 0, 17, 0, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 71 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 71 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 71 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 11 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 11 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 11 },
- { 0, 17, 0, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 11 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 72 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 72 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 72 },
- { 0, 17, 220, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 72 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 72 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 73 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 73 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 73 },
- { 1, 0, 9, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 73 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 73 },
- { 0, 17, 0, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 85 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 85 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 85 },
- { 0, 17, 7, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 85 },
- { 1, 0, 9, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 85 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 85 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 85 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 85 },
- { 17, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 3, 0, 0, 0, 0, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 2, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 3, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 4, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 5, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 6, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 7, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 8, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 3, 0, 0, 0, 9, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 85 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 24 },
- { 17, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 24 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 77 },
- { 0, 17, 0, 5, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 77 },
- { 1, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 77 },
- { 3, 0, 0, 0, 0, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 2, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 3, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 4, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 5, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 6, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 7, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 8, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 3, 0, 0, 0, 9, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 77 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 77 },
- { 25, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 77 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 17, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 24 },
- { 29, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 24 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 33, 4, 24 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 79 },
- { 0, 17, 230, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 79 },
- { 0, 17, 220, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 79 },
- { 17, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 79 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 79 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 86 },
- { 1, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 86 },
- { 0, 17, 0, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 86 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 86 },
- { 17, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 86 },
- { 0, 17, 9, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 86 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 27 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, -928}, {0, -928}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 28, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 16, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 4 },
- { 15, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 17, 0, 0, 0, -1, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
- { 28, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 255}, {1, 255}, {1, 255} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 257}, {1, 257}, {1, 257} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 259}, {1, 259}, {1, 259} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 261}, {1, 261}, {1, 261} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 263}, {1, 263}, {1, 263} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 265}, {1, 265}, {1, 265} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 267}, {1, 267}, {1, 267} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 269}, {1, 269}, {1, 269} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 271}, {1, 271}, {1, 271} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 273}, {1, 273}, {1, 273} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 275}, {1, 275}, {1, 275} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 277}, {1, 277}, {1, 277} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 279}, {1, 279}, {1, 279} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 281}, {1, 281}, {1, 281} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 283}, {1, 283}, {1, 283} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 285}, {1, 285}, {1, 285} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 287}, {1, 287}, {1, 287} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 289}, {1, 289}, {1, 289} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 291}, {1, 291}, {1, 291} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 293}, {1, 293}, {1, 293} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 295}, {1, 295}, {1, 295} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 297}, {1, 297}, {1, 297} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 299}, {1, 299}, {1, 299} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 301}, {1, 301}, {1, 301} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 303}, {1, 303}, {1, 303} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 305}, {1, 305}, {1, 305} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 307}, {1, 307}, {1, 307} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 309}, {1, 309}, {1, 309} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 311}, {1, 311}, {1, 311} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 313}, {1, 313}, {1, 313} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 315}, {1, 315}, {1, 315} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 317}, {1, 317}, {1, 317} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 319}, {1, 319}, {1, 319} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 321}, {1, 321}, {1, 321} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 323}, {1, 323}, {1, 323} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 325}, {1, 325}, {1, 325} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 327}, {1, 327}, {1, 327} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 329}, {1, 329}, {1, 329} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 331}, {1, 331}, {1, 331} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 333}, {1, 333}, {1, 333} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 335}, {1, 335}, {1, 335} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 337}, {1, 337}, {1, 337} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 339}, {1, 339}, {1, 339} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 341}, {1, 341}, {1, 341} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 343}, {1, 343}, {1, 343} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 345}, {1, 345}, {1, 345} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 347}, {1, 347}, {1, 347} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 349}, {1, 349}, {1, 349} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 351}, {1, 351}, {1, 351} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 353}, {1, 353}, {1, 353} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 355}, {1, 355}, {1, 355} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 357}, {1, 357}, {1, 357} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 359}, {1, 359}, {1, 359} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 361}, {1, 361}, {1, 361} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 363}, {1, 363}, {1, 363} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 365}, {1, 365}, {1, 365} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 367}, {1, 367}, {1, 367} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 369}, {1, 369}, {1, 369} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 371}, {1, 371}, {1, 371} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 373}, {1, 373}, {1, 373} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 375}, {1, 375}, {1, 375} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 377}, {1, 377}, {1, 377} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 379}, {1, 379}, {1, 379} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 381}, {1, 381}, {1, 381} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 383}, {1, 383}, {1, 383} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 385}, {1, 385}, {1, 385} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 387}, {1, 387}, {1, 387} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 389}, {1, 389}, {1, 389} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 391}, {1, 391}, {1, 391} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 393}, {1, 393}, {1, 393} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 395}, {1, 395}, {1, 395} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 397}, {1, 397}, {1, 397} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 399}, {1, 399}, {1, 399} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 401}, {1, 401}, {1, 401} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 403}, {1, 403}, {1, 403} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 405}, {1, 405}, {1, 405} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 407}, {1, 407}, {1, 407} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 409}, {1, 409}, {1, 409} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 411}, {1, 411}, {1, 411} }, 0, 10, 12, 6, 28 },
- { 15, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {1, 413}, {1, 413}, {1, 413} }, 0, 10, 12, 6, 28 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 86 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 86 },
- { 0, 17, 0, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 86 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 86 },
- { 0, 17, 9, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 86 },
- { 3, 0, 0, 0, 0, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 2, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 3, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 4, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 5, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 6, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 7, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 8, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 3, 0, 0, 0, 9, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 86 },
- { 18, 0, 0, 0, -1, 0, 2, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 12, 10, 23, 8, 26 },
- { 18, 0, 0, 0, -1, 0, 2, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 13, 10, 24, 8, 26 },
- { 11, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 34, 0, 0 },
- { 12, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 18, 0, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 13, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 6, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 11, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 8, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 427}, {1, 424}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 433}, {1, 430}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 439}, {1, 436}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 446}, {1, 442}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 454}, {1, 450}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 461}, {1, 458}, {0, 0} }, 0, 10, 12, 6, 3 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 473}, {1, 470}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 479}, {1, 476}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 485}, {1, 482}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 491}, {1, 488}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {1, 497}, {1, 494}, {0, 0} }, 0, 10, 12, 6, 6 },
- { 18, 1, 0, 0, -1, 0, 4, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 13, 8, 7 },
- { 0, 17, 26, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 7 },
- { 18, 1, 0, 0, -1, 0, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 13, 8, 7 },
- { 18, 1, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 13, 8, 7 },
- { 26, 3, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 7 },
- { 18, 13, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 28, 13, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 13, 18, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 27, 13, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 8 },
- { 0, 17, 0, 5, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 8, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 2 },
- { 21, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 15, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 20, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 11, 2 },
- { 19, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 14, 0, 2 },
- { 21, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 21, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 1, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 11, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 1, 10, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 5, 0, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 5, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 12, 2 },
- { 25, 4, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 26, 3, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 20, 3, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 11, 2 },
- { 26, 10, 0, 0, -1, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 26, 10, 0, 0, -1, -1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 18, 13, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 10, 18, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 22, 4, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 14, 0, 2 },
- { 25, 6, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 3, 2, 0, 0, 0, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 2, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 3, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 4, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 5, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 6, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 7, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 8, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 3, 2, 0, 0, 9, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 2 },
- { 26, 10, 0, 0, -1, 2, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 26, 10, 0, 0, -1, -2, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 80, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3 },
- { 21, 10, 0, 0, -1, 2, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -2, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 28, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 3 },
- { 21, 10, 0, 0, -1, 1, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
- { 22, 10, 0, 0, -1, -1, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
- { 17, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 2 },
- { 17, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 5, 4, 2 },
- { 27, 4, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 10, 10, 0, 5, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 29, 10, 0, 0, -1, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 29, 0, 2 },
- { 13, 18, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 49 },
- { 25, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 25, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 2 },
- { 5, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 4, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 4 },
- { 5, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 5, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 29, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 4 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 74 },
- { 18, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 75 },
- { 5, 2, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 18, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 39 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 39 },
- { 5, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 39 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 39 },
- { 18, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 40 },
- { 4, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 40 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 120 },
- { 0, 17, 230, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 120 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 50 },
- { 25, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 50 },
- { 18, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 60 },
- { 25, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 60 },
- { 4, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 60 },
- { 14, 0, 0, 0, -1, 0, 5, 0, { {0, 40}, {0, 0}, {0, 0}, {0, 40} }, 0, 10, 12, 7, 41 },
- { 14, 0, 0, 0, -1, 0, 7, 0, { {0, 40}, {0, 0}, {0, 0}, {0, 40} }, 0, 10, 12, 7, 41 },
- { 15, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, -40}, {0, -40}, {0, 0} }, 0, 10, 12, 6, 41 },
- { 15, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, -40}, {0, -40}, {0, 0} }, 0, 10, 12, 6, 41 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 51 },
- { 18, 0, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 52 },
- { 3, 0, 0, 0, 0, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 2, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 3, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 4, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 5, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 6, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 7, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 8, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 3, 0, 0, 0, 9, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 52 },
- { 14, 0, 0, 0, -1, 0, 18, 0, { {0, 40}, {0, 0}, {0, 0}, {0, 40} }, 0, 10, 12, 7, 136 },
- { 15, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, -40}, {0, -40}, {0, 0} }, 0, 10, 12, 6, 136 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 106 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 103 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 103 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 110 },
- { 18, 1, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 53 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 87 },
- { 25, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 87 },
- { 5, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 87 },
- { 18, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 118 },
- { 29, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 118 },
- { 5, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 118 },
- { 18, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 117 },
- { 5, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 117 },
- { 18, 1, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 128 },
- { 5, 1, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 128 },
- { 18, 1, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 64 },
- { 5, 1, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 64 },
- { 5, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 64 },
- { 25, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 64 },
- { 18, 1, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 76 },
- { 25, 1, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 76 },
- { 18, 1, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 98 },
- { 18, 1, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 97 },
- { 5, 1, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 97 },
- { 18, 1, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 61 },
- { 0, 17, 0, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 61 },
- { 0, 17, 220, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 61 },
- { 0, 17, 230, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 61 },
- { 18, 1, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 61 },
- { 0, 17, 1, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 61 },
- { 0, 17, 9, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 61 },
- { 5, 1, 0, 0, 1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 5, 1, 0, 0, 2, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 5, 1, 0, 0, 3, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 5, 1, 0, 0, 4, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 5, 1, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 5, 1, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 25, 1, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 61 },
- { 25, 1, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 61 },
- { 25, 1, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 61 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 88 },
- { 5, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 88 },
- { 25, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 88 },
- { 18, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 116 },
- { 5, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 116 },
- { 18, 1, 0, 2, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 112 },
- { 18, 1, 0, 3, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 112 },
- { 18, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 112 },
- { 29, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 112 },
- { 18, 1, 0, 4, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 112 },
- { 0, 17, 230, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 112 },
- { 0, 17, 220, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 112 },
- { 5, 1, 0, 2, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 112 },
- { 5, 1, 0, 3, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 112 },
- { 25, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 112 },
- { 25, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 15, 0, 112 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 80 },
- { 25, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 80 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 89 },
- { 5, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 89 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 90 },
- { 5, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 90 },
- { 18, 1, 0, 2, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 121 },
- { 18, 1, 0, 3, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 121 },
- { 25, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 121 },
- { 5, 1, 0, 3, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 121 },
- { 5, 1, 0, 2, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 121 },
- { 5, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 121 },
- { 18, 1, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 91 },
- { 14, 1, 0, 0, -1, 0, 17, 0, { {0, 64}, {0, 0}, {0, 0}, {0, 64} }, 0, 10, 12, 7, 130 },
- { 15, 1, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, -64}, {0, -64}, {0, 0} }, 0, 10, 12, 6, 130 },
- { 5, 1, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 130 },
- { 18, 13, 0, 4, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 144 },
- { 18, 13, 0, 2, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 144 },
- { 18, 13, 0, 3, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 144 },
- { 0, 17, 230, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 144 },
- { 3, 5, 0, 0, 0, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 2, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 3, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 4, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 5, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 6, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 7, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 8, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 3, 5, 0, 0, 9, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 144 },
- { 5, 5, 0, 0, 1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 2, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 3, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 4, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 5, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 6, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 7, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 8, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, 9, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 5, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 18, 1, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 156 },
- { 0, 17, 230, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 156 },
- { 20, 1, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 156 },
- { 18, 1, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 147 },
- { 5, 1, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 147 },
- { 18, 13, 0, 2, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 148 },
- { 18, 13, 0, 3, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 148 },
- { 18, 13, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 148 },
- { 0, 17, 220, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 148 },
- { 0, 17, 230, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 148 },
- { 5, 13, 0, 2, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 148 },
- { 5, 13, 0, 3, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 148 },
- { 25, 13, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 148 },
- { 18, 1, 0, 2, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 153 },
- { 18, 1, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 153 },
- { 18, 1, 0, 3, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 153 },
- { 5, 1, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 153 },
- { 5, 1, 0, 3, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 153 },
- { 5, 1, 0, 2, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 153 },
- { 5, 1, 0, 4, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 153 },
- { 18, 1, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 149 },
- { 1, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 94 },
- { 0, 17, 0, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 94 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 94 },
- { 0, 17, 9, 5, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 94 },
- { 25, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 94 },
- { 25, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 2, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 3, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 4, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 5, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 6, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 7, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 8, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, 9, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 5, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 94 },
- { 3, 0, 0, 0, 0, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 2, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 3, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 4, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 5, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 6, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 7, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 8, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 3, 0, 0, 0, 9, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 94 },
- { 0, 17, 9, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 94 },
- { 0, 17, 0, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 92 },
- { 1, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 92 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 92 },
- { 18, 0, 0, 0, -1, 0, 11, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 92 },
- { 0, 17, 9, 5, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 92 },
- { 0, 17, 7, 5, -1, 0, 11, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 92 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 92 },
- { 10, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 92 },
- { 25, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 92 },
- { 10, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 6, 12, 4, 92 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 101 },
- { 3, 0, 0, 0, 0, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 2, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 3, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 4, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 5, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 6, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 7, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 8, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 3, 0, 0, 0, 9, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 101 },
- { 0, 17, 230, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 96 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 96 },
- { 0, 17, 0, 5, -1, 0, 13, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 96 },
- { 0, 17, 0, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 96 },
- { 1, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 96 },
- { 0, 17, 0, 5, -1, 0, 13, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 96 },
- { 0, 17, 9, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 96 },
- { 3, 0, 0, 0, 0, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 2, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 3, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 4, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 5, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 6, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 7, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 8, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 3, 0, 0, 0, 9, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 96 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 96 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 96 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 96 },
- { 1, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 96 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 96 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 111 },
- { 0, 17, 7, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 111 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 111 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 111 },
- { 0, 17, 0, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 100 },
- { 1, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 100 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 100 },
- { 1, 0, 9, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 100 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 100 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 100 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 100 },
- { 25, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 100 },
- { 0, 17, 0, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 100 },
- { 0, 17, 7, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 100 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 100 },
- { 1, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 100 },
- { 0, 17, 0, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 100 },
- { 3, 0, 0, 0, 0, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 2, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 3, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 4, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 5, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 6, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 7, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 8, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 3, 0, 0, 0, 9, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 100 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 100 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 100 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 100 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 100 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 100 },
- { 5, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 20 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 109 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 109 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 109 },
- { 1, 0, 9, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 109 },
- { 0, 17, 7, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 109 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 109 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 109 },
- { 0, 17, 0, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 109 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 129 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 129 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 123 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 123 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 123 },
- { 0, 17, 7, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 123 },
- { 0, 17, 9, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 123 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 123 },
- { 0, 17, 0, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 107 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 107 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 107 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 107 },
- { 0, 17, 7, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 7, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 107 },
- { 1, 0, 0, 0, -1, 0, 16, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 107 },
- { 1, 0, 0, 0, -1, 0, 16, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 107 },
- { 1, 0, 9, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 107 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 107 },
- { 0, 17, 230, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 107 },
- { 18, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 135 },
- { 1, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 135 },
- { 0, 17, 0, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 135 },
- { 0, 17, 9, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 135 },
- { 0, 17, 7, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 135 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 135 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 135 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 135 },
- { 3, 0, 0, 0, 0, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 2, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 3, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 4, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 5, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 6, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 7, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 8, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 3, 0, 0, 0, 9, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 135 },
- { 25, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 135 },
- { 0, 17, 230, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 135 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 135 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 135 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 124 },
- { 1, 0, 0, 0, -1, 0, 16, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 124 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 124 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 124 },
- { 0, 17, 0, 5, -1, 0, 16, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 124 },
- { 1, 0, 0, 0, -1, 0, 16, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 124 },
- { 0, 17, 9, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 124 },
- { 0, 17, 7, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 124 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 124 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 124 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 122 },
- { 1, 0, 0, 0, -1, 0, 16, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 122 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 122 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 122 },
- { 1, 0, 0, 0, -1, 0, 16, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 122 },
- { 0, 17, 9, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 122 },
- { 0, 17, 7, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 122 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 122 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 122 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 122 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 122 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 122 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 122 },
- { 0, 17, 0, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 122 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 114 },
- { 1, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 114 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 114 },
- { 0, 17, 9, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 114 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 114 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 114 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 114 },
- { 25, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 33 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 102 },
- { 0, 17, 0, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 102 },
- { 1, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 102 },
- { 1, 0, 9, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 102 },
- { 0, 17, 7, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 102 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 102 },
- { 3, 0, 0, 0, 0, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 2, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 3, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 4, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 5, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 6, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 7, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 8, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 3, 0, 0, 0, 9, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 102 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 126 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 8, 126 },
- { 0, 17, 0, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 126 },
- { 1, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 33, 4, 126 },
- { 0, 17, 9, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 4, 126 },
- { 3, 0, 0, 0, 0, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 2, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 3, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 4, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 5, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 6, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 7, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 8, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 3, 0, 0, 0, 9, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 126 },
- { 5, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 126 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 126 },
- { 29, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 33, 0, 126 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 142 },
- { 1, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 142 },
- { 0, 17, 0, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 142 },
- { 0, 17, 9, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 142 },
- { 0, 17, 7, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 142 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 142 },
- { 14, 0, 0, 0, -1, 0, 16, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 125 },
- { 15, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 125 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 125 },
- { 5, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 125 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 125 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 154 },
- { 1, 0, 0, 0, -1, 0, 23, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 154 },
- { 1, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 154 },
- { 1, 0, 0, 0, -1, 0, 23, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 154 },
- { 0, 17, 0, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 154 },
- { 1, 0, 9, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 154 },
- { 0, 17, 9, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 154 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 154 },
- { 0, 17, 7, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 154 },
- { 25, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 154 },
- { 25, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 154 },
- { 3, 0, 0, 0, 0, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 2, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 3, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 4, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 5, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 6, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 7, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 8, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 3, 0, 0, 0, 9, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 154 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 150 },
- { 1, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 150 },
- { 0, 17, 0, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 150 },
- { 0, 17, 9, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 150 },
- { 25, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 150 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 141 },
- { 0, 17, 0, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 141 },
- { 0, 0, 0, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 141 },
- { 0, 17, 9, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 141 },
- { 1, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 141 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 141 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 141 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 141 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 141 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 141 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 140 },
- { 0, 17, 0, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 140 },
- { 1, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 140 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 140 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 140 },
- { 0, 17, 9, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 140 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 140 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 140 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 140 },
- { 25, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 140 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 119 },
- { 18, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 133 },
- { 1, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 133 },
- { 0, 17, 0, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 133 },
- { 0, 0, 9, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 133 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 133 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 133 },
- { 3, 0, 0, 0, 0, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 2, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 3, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 4, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 5, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 6, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 7, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 8, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 3, 0, 0, 0, 9, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 133 },
- { 5, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 133 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 0, 134 },
- { 25, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 134 },
- { 18, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 134 },
- { 0, 17, 0, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 134 },
- { 1, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 134 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 138 },
- { 0, 17, 0, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 138 },
- { 0, 17, 7, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 138 },
- { 0, 17, 9, 5, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 138 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 12, 8, 138 },
- { 3, 0, 0, 0, 0, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 2, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 3, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 4, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 5, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 6, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 7, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 8, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 3, 0, 0, 0, 9, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 138 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 143 },
- { 1, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 143 },
- { 0, 17, 0, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 143 },
- { 0, 17, 9, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 143 },
- { 3, 0, 0, 0, 0, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 2, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 3, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 4, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 5, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 6, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 7, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 8, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 3, 0, 0, 0, 9, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 143 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 145 },
- { 0, 17, 0, 5, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 145 },
- { 1, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 145 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 12, 145 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 83 },
- { 5, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 16 },
- { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 16 },
- { 27, 4, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 16 },
- { 25, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 16 },
- { 18, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 63 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 63 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 63 },
- { 4, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 63 },
- { 4, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 63 },
- { 25, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 63 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 63 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 81 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 0, 8, 81 },
- { 18, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 1, 8, 81 },
- { 10, 0, 0, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 4, 4, 81 },
- { 10, 0, 0, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 0, 4, 81 },
- { 10, 0, 0, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 1, 4, 81 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 127 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 0, 8, 127 },
- { 18, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 1, 8, 127 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 84 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 115 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 115 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 115 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 104 },
- { 0, 17, 1, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 104 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 104 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 108 },
- { 0, 17, 230, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 108 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 108 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 108 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 108 },
- { 29, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 108 },
- { 17, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 108 },
- { 3, 0, 0, 0, 0, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 2, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 3, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 4, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 5, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 6, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 7, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 8, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 3, 0, 0, 0, 9, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 108 },
- { 5, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 108 },
- { 14, 0, 0, 0, -1, 0, 20, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 12, 7, 146 },
- { 15, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 12, 6, 146 },
- { 5, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 146 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 146 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 146 },
- { 25, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 146 },
- { 18, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 99 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 99 },
- { 0, 17, 0, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 99 },
- { 1, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 99 },
- { 1, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 99 },
- { 0, 17, 0, 5, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 99 },
- { 17, 0, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 99 },
- { 17, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 137 },
- { 17, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 139 },
- { 25, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 2 },
- { 17, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 2 },
- { 0, 17, 0, 5, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 4, 4, 155 },
- { 1, 0, 6, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 37 },
- { 18, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 137 },
- { 18, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 137 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 137 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 137 },
- { 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 8, 155 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 8, 34 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
- { 18, 0, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 139 },
- { 18, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 105 },
- { 29, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 105 },
- { 0, 17, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 105 },
- { 0, 17, 1, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 105 },
- { 25, 0, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 105 },
- { 10, 18, 0, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 29, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 1, 0, 216, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 2 },
- { 1, 0, 216, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 2 },
- { 0, 17, 1, 5, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 1, 0, 226, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 21, 4, 2 },
- { 10, 18, 0, 5, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 21, 4, 2 },
- { 0, 17, 220, 5, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 0, 17, 230, 5, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 29, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 0, 17, 230, 5, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 4 },
- { 5, 0, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 0, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 15, 0, 0, 0, -1, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 15, 0, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 26, 0, 0, 0, -1, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 26, 10, 0, 0, -1, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 14, 0, 0, 0, -1, 0, 9, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 15, 0, 0, 0, -1, 0, 9, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
- { 3, 2, 0, 0, 0, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 1, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 2, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 3, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 4, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 5, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 6, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 7, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 8, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 9, 0, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 29, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 131 },
- { 0, 17, 0, 5, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 131 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 131 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 12, 131 },
- { 25, 0, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 131 },
- { 0, 17, 230, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 57 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 151 },
- { 0, 17, 230, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 151 },
- { 17, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 151 },
- { 3, 0, 0, 0, 0, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 2, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 3, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 4, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 5, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 6, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 7, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 8, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 3, 0, 0, 0, 9, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 151 },
- { 29, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 151 },
- { 18, 0, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 152 },
- { 0, 17, 230, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 152 },
- { 3, 0, 0, 0, 0, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 2, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 3, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 4, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 5, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 6, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 7, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 8, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 3, 0, 0, 0, 9, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 152 },
- { 27, 4, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 152 },
- { 18, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 113 },
- { 5, 1, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 113 },
- { 0, 17, 220, 5, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 113 },
- { 14, 1, 0, 2, -1, 0, 18, 0, { {0, 34}, {0, 0}, {0, 0}, {0, 34} }, 0, 10, 12, 7, 132 },
- { 15, 1, 0, 2, -1, 0, 18, 0, { {0, 0}, {0, -34}, {0, -34}, {0, 0} }, 0, 10, 12, 6, 132 },
- { 0, 17, 230, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 132 },
- { 0, 17, 7, 5, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 132 },
- { 17, 1, 0, 5, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 132 },
- { 3, 1, 0, 0, 0, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 2, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 3, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 4, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 5, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 6, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 7, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 8, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 3, 1, 0, 0, 9, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 132 },
- { 25, 1, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 0, 132 },
- { 5, 13, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 13, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 27, 13, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
- { 5, 13, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 13, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 18, 13, 0, 0, -1, 0, 13, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
- { 26, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
- { 5, 2, 0, 0, 0, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 2, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 3, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 4, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 5, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 6, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 7, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 8, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 2, 0, 0, 9, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 5, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 29, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
- { 29, 10, 0, 0, -1, 0, 13, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 6, 7, 28, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 34 },
- { 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 18, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 28, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 31, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 3, 2, 0, 0, 0, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 1, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 2, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 3, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 4, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 5, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 6, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 7, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 8, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 3, 2, 0, 0, 9, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
- { 13, 18, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 },
- { 18, 0, 0, 0, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 18, 0, 0, 0, -1, 0, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
- { 10, 18, 0, 5, -1, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 2 },
- { 0, 17, 0, 5, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
- { 12, 0, 0, 0, -1, 0, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0 }
+static constexpr Properties uc_properties[] = {
+ { 9, 18, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 23, 0, 0, 2 },
+ { 9, 8, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 19, 5, 0, 2 },
+ { 9, 7, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 2, 2, 39, 2, 0, 2 },
+ { 9, 8, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 40, 5, 0, 2 },
+ { 9, 9, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 40, 5, 0, 2 },
+ { 9, 7, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 1, 1, 38, 1, 0, 2 },
+ { 9, 7, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 23, 0, 0, 2 },
+ { 9, 8, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 23, 0, 0, 2 },
+ { 6, 9, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 18, 37, 5, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 12, 3, 13, 0, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 0, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 11, 3, 13, 0, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 2, 13, 0, 2 },
+ { 26, 3, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 0, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 11, 0, 2 },
+ { 20, 3, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 18, 11, 1, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 10, 1, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 0, 2 },
+ { 3, 2, 0, 0, 0, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 2, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 3, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 4, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 5, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 6, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 7, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 8, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 3, 2, 0, 0, 9, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 11, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, 2, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, -2, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 4, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 3 },
+ { 21, 10, 0, 0, -1, 2, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 0, 2 },
+ { 22, 10, 0, 0, -1, -2, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 2, 13, 0, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 19, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 14, 0, 1, 2 },
+ { 15, 0, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 26, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 0, 2 },
+ { 22, 10, 0, 0, -1, -2, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 9, 7, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 40, 3, 0, 2 },
+ { 6, 6, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 5, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 23, 10, 0, 0, -1, 16, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 10, 18, 0, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 19, 4, 2, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 29, 4, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 26, 4, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 5, 2, 0, 0, 2, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 2, 0, 0, 3, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 0, 2 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 743}, {0, 743}, {0, 775} }, 0, 10, 14, 6, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 14, 0, 1, 2 },
+ { 5, 2, 0, 0, 1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 24, 10, 0, 0, -1, -16, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 5, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 3 },
+ { 26, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {1, 418}, {1, 415}, {0, 0} }, 0, 10, 14, 6, 4, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 121}, {0, 121}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {1, 421}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, -232}, {0, -232}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {1, 500}, {1, 500}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -121}, {0, 0}, {0, 0}, {0, -121} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -300}, {0, -300}, {0, -268} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 195}, {0, 195}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 210}, {0, 0}, {0, 0}, {0, 210} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 206}, {0, 0}, {0, 0}, {0, 206} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 205}, {0, 0}, {0, 0}, {0, 205} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 79}, {0, 0}, {0, 0}, {0, 79} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 202}, {0, 0}, {0, 0}, {0, 202} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 203}, {0, 0}, {0, 0}, {0, 203} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 207}, {0, 0}, {0, 0}, {0, 207} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 97}, {0, 97}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 211}, {0, 0}, {0, 0}, {0, 211} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 209}, {0, 0}, {0, 0}, {0, 209} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 163}, {0, 163}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 213}, {0, 0}, {0, 0}, {0, 213} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 130}, {0, 130}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 214}, {0, 0}, {0, 0}, {0, 214} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 218}, {0, 0}, {0, 0}, {0, 218} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 217}, {0, 0}, {0, 0}, {0, 217} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 219}, {0, 0}, {0, 0}, {0, 219} }, 0, 10, 14, 7, 3, 3 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 56}, {0, 56}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 2}, {0, 0}, {0, 1}, {0, 2} }, 0, 10, 14, 7, 3, 3 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 1}, {0, -1}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -2}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -79}, {0, -79}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 511}, {1, 511}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {0, -97}, {0, 0}, {0, 0}, {0, -97} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {0, -56}, {0, 0}, {0, 0}, {0, -56} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 6, 3, 0, { {0, -130}, {0, 0}, {0, 0}, {0, -130} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {1, 1}, {0, 0}, {0, 0}, {1, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {0, -163}, {0, 0}, {0, 0}, {0, -163} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {1, 3}, {0, 0}, {0, 0}, {1, 3} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {1, 5}, {1, 5}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {1, 7}, {1, 7}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {0, -195}, {0, 0}, {0, 0}, {0, -195} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 69}, {0, 0}, {0, 0}, {0, 69} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 71}, {0, 0}, {0, 0}, {0, 71} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 9}, {1, 9}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {1, 11}, {1, 11}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 13}, {1, 13}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -210}, {0, -210}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -206}, {0, -206}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -205}, {0, -205}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -202}, {0, -202}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -203}, {0, -203}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 15}, {1, 15}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {1, 17}, {1, 17}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -207}, {0, -207}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 19}, {1, 19}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 21}, {1, 21}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -209}, {0, -209}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -211}, {0, -211}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 23}, {1, 23}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 25}, {1, 25}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 27}, {1, 27}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 29}, {1, 29}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -213}, {0, -213}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -214}, {0, -214}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 31}, {1, 31}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -218}, {0, -218}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 33}, {1, 33}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 35}, {1, 35}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -69}, {0, -69}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -217}, {0, -217}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -71}, {0, -71}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -219}, {0, -219}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 37}, {1, 37}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {1, 39}, {1, 39}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 17, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 17, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 17, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 20, 8, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 28, 10, 0, 0, -1, 0, 4, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 20, 0, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 36 },
+ { 17, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 0, 17, 230, 5, -1, 0, 1, 0, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 232, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 216, 5, -1, 0, 1, 0, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 202, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 1, 0, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 202, 5, -1, 0, 1, 0, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 1, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 1, 5, -1, 0, 1, 0, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 1, 0, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 3, 1 },
+ { 0, 17, 240, 5, -1, 0, 1, 0, 204, { {0, 0}, {0, 84}, {0, 84}, {0, 116} }, 4, 4, 23, 4, 3, 1 },
+ { 0, 17, 230, 5, -1, 0, 4, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 4, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 0, 5, -1, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 2, 1 },
+ { 0, 17, 230, 5, -1, 0, 7, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 7, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 232, 5, -1, 0, 8, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 8, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 8, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 233, 5, -1, 0, 8, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 0, 17, 234, 5, -1, 0, 7, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 0, 17, 233, 5, -1, 0, 7, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 0, 17, 234, 5, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 0, 17, 233, 5, -1, 0, 4, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 17, 10, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 13, 0, 0, 0, -1, 0, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 0, 4 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 130}, {0, 130}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 0, 0, 2 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 116}, {0, 0}, {0, 0}, {0, 116} }, 0, 10, 14, 7, 3, 4 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 4 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 81, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 38}, {0, 0}, {0, 0}, {0, 38} }, 0, 10, 14, 7, 3, 4 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 14, 0, 3, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 37}, {0, 0}, {0, 0}, {0, 37} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 64}, {0, 0}, {0, 0}, {0, 64} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 63}, {0, 0}, {0, 0}, {0, 63} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 503}, {1, 503}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -38}, {0, -38}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -37}, {0, -37}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 507}, {1, 507}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -31}, {0, -31}, {0, 1} }, 0, 10, 14, 6, 4, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -64}, {0, -64}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -63}, {0, -63}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 8}, {0, 0}, {0, 0}, {0, 8} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -62}, {0, -62}, {0, -30} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -57}, {0, -57}, {0, -25} }, 0, 10, 14, 6, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 81, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -47}, {0, -47}, {0, -15} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -54}, {0, -54}, {0, -22} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, -8}, {0, -8}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 46 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 46 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -86}, {0, -86}, {0, -54} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -80}, {0, -80}, {0, -48} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 7}, {0, 7}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -116}, {0, -116}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 5, 3, 80, { {0, -60}, {0, 0}, {0, 0}, {0, -60} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 5, 3, 80, { {0, 0}, {0, -96}, {0, -96}, {0, -64} }, 0, 10, 14, 6, 3, 4 },
+ { 26, 10, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 7, 3, 80, { {0, -7}, {0, 0}, {0, 0}, {0, -7} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {0, -130}, {0, 0}, {0, 0}, {0, -130} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 14, 7, 3, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 17, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 14, 7, 3, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 14, 7, 3, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 80}, {0, 0}, {0, 0}, {0, 80} }, 0, 10, 14, 7, 3, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 17, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 17, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 17, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -80}, {0, -80}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 29, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 5 },
+ { 0, 17, 230, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 0, 17, 230, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 2, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 15}, {0, 0}, {0, 0}, {0, 15} }, 0, 10, 14, 7, 0, 5 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, -15}, {0, -15}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 48}, {0, 0}, {0, 0}, {0, 48} }, 0, 10, 14, 7, 3, 6 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 6 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 6 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 11, 1, 6 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 14, 0, 1, 6 },
+ { 15, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 6 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, -48}, {0, -48}, {0, 0} }, 0, 10, 14, 6, 1, 6 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 467}, {1, 464}, {0, 0} }, 0, 10, 14, 6, 3, 6 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 12, 1, 6 },
+ { 20, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 19, 0, 1, 6 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 6 },
+ { 27, 4, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 6 },
+ { 13, 1, 0, 0, -1, 0, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 0, 17, 220, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 230, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 222, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 220, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 228, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 10, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 11, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 12, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 13, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 14, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 15, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 16, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 17, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 18, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 19, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 19, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 20, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 21, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 22, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 20, 1, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 7 },
+ { 0, 17, 23, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 25, 1, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 7 },
+ { 0, 17, 24, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 0, 17, 25, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 25, 1, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 7 },
+ { 0, 17, 18, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 18, 1, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 15, 8, 1, 7 },
+ { 18, 1, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 15, 8, 1, 7 },
+ { 25, 1, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 7 },
+ { 25, 1, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 14, 0, 1, 7 },
+ { 10, 5, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 8 },
+ { 10, 5, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 8 },
+ { 10, 5, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 26, 13, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 25, 4, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 8 },
+ { 27, 13, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 8 },
+ { 25, 6, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 11, 1, 2 },
+ { 25, 13, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 11, 1, 8 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 30, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 31, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 32, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 25, 13, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 2 },
+ { 10, 13, 0, 5, -1, 0, 15, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 8 },
+ { 25, 13, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 8 },
+ { 25, 13, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 8 },
+ { 25, 13, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 2 },
+ { 18, 13, 0, 2, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 17, 13, 0, 1, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 0, 17, 27, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 28, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 29, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 30, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 31, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 32, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 33, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 34, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 4, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 4, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 220, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 220, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 3, 5, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 5, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 25, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 8 },
+ { 25, 5, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 25, 5, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 13, 9, 1, 8 },
+ { 25, 13, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 0, 17, 35, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 18, 13, 0, 3, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 8 },
+ { 18, 13, 0, 2, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 8 },
+ { 18, 13, 0, 2, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 25, 13, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 10, 5, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 0, 17, 220, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 17, 13, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 3, 2, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 3, 2, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 8 },
+ { 29, 13, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 25, 13, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 9 },
+ { 25, 13, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 9 },
+ { 13, 13, 0, 0, -1, 0, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 10, 13, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 4, 0, 9 },
+ { 18, 13, 0, 3, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 0, 17, 36, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 9 },
+ { 18, 13, 0, 2, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 18, 13, 0, 2, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 18, 13, 0, 3, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 0, 17, 230, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 9 },
+ { 0, 17, 220, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 9 },
+ { 18, 13, 0, 2, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 10 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 10 },
+ { 18, 13, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 10 },
+ { 3, 1, 0, 0, 0, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 2, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 3, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 4, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 5, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 6, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 7, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 8, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 3, 1, 0, 0, 9, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 66 },
+ { 18, 1, 0, 2, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 66 },
+ { 0, 17, 230, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 66 },
+ { 0, 17, 220, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 66 },
+ { 17, 1, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 66 },
+ { 29, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 66 },
+ { 25, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 66 },
+ { 25, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 11, 1, 66 },
+ { 25, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 66 },
+ { 17, 1, 0, 1, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 66 },
+ { 0, 17, 220, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 66 },
+ { 27, 1, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 66 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 82 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 82 },
+ { 17, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 82 },
+ { 25, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 82 },
+ { 25, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 82 },
+ { 18, 1, 0, 3, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 95 },
+ { 18, 1, 0, 2, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 95 },
+ { 0, 17, 220, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 95 },
+ { 25, 1, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 95 },
+ { 18, 13, 0, 2, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 18, 13, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 18, 13, 0, 3, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 9 },
+ { 18, 13, 0, 3, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 1, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 28, 13, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 10, 5, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 8 },
+ { 0, 17, 230, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 220, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 3, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 18, 13, 0, 2, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 17, 13, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 0, 17, 220, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 10, 5, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 2 },
+ { 0, 17, 220, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 220, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 27, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 28, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 29, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 230, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 0, 17, 0, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 0, 17, 0, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 1, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 11 },
+ { 0, 17, 7, 5, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 11 },
+ { 0, 17, 220, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 11 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 2 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 11 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 11 },
+ { 17, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 12 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 12 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 12 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 12 },
+ { 0, 17, 7, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 12 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 12 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 12 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 12 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 12 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 12 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 12 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 12 },
+ { 27, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 12 },
+ { 5, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 12 },
+ { 5, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 12 },
+ { 29, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 12 },
+ { 27, 4, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 12 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 12 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 12 },
+ { 0, 17, 230, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 12 },
+ { 0, 17, 0, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 13 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 13 },
+ { 1, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 13 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 13 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 13 },
+ { 0, 17, 7, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 13 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 13 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 13 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 13 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 13 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 13 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 14 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 14 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 14 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 14 },
+ { 0, 17, 7, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 14 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 14 },
+ { 0, 17, 0, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 14 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 14 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 14 },
+ { 27, 4, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 14 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 14 },
+ { 0, 17, 0, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 14 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 15 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 15 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 15 },
+ { 0, 17, 7, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 15 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 0, 17, 0, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 15 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 15 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 15 },
+ { 29, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 15 },
+ { 5, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 15 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 16 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 16 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 16 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 16 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 16 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 16 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 16 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 16 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 16 },
+ { 3, 0, 0, 0, 0, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 16 },
+ { 5, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 16 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 16 },
+ { 27, 4, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 16 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 17 },
+ { 0, 17, 0, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 17 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 17 },
+ { 0, 17, 7, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 17 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 0, 17, 84, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 0, 17, 91, 5, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 17 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 17 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 17 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 17 },
+ { 25, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 17 },
+ { 5, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 17 },
+ { 29, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 17 },
+ { 18, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 18 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 18 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 18 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 18 },
+ { 0, 17, 7, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 18 },
+ { 0, 0, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 18 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 18 },
+ { 0, 17, 0, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 18 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 18 },
+ { 18, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 18 },
+ { 1, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 18 },
+ { 0, 17, 0, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 19 },
+ { 0, 17, 9, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 19 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 1, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 19 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 19 },
+ { 29, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 19 },
+ { 5, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 19 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 19 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 19 },
+ { 5, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 19 },
+ { 29, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 19 },
+ { 0, 17, 0, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 20 },
+ { 1, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 20 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 20 },
+ { 0, 17, 9, 5, -1, 0, 4, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 20 },
+ { 1, 0, 0, 0, -1, 0, 4, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 20 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 20 },
+ { 1, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 20 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 20 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 20 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 21 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 21 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 0, 35, 8, 3, 21 },
+ { 0, 17, 103, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 21 },
+ { 0, 17, 9, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 21 },
+ { 27, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 21 },
+ { 0, 17, 107, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 21 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 21 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 21 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 21 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 22 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 22 },
+ { 0, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 22 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 0, 35, 8, 3, 22 },
+ { 0, 17, 118, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 22 },
+ { 0, 17, 9, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 22 },
+ { 17, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 22 },
+ { 0, 17, 122, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 22 },
+ { 0, 17, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 22 },
+ { 3, 0, 0, 0, 0, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 3, 0, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 22 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 3, 22 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 22 },
+ { 18, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 2, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 3, 23 },
+ { 25, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 23 },
+ { 0, 17, 220, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 3, 0, 0, 0, 0, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 2, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 3, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 4, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 5, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 6, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 7, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 8, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 3, 0, 0, 0, 9, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 23 },
+ { 5, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 23 },
+ { 0, 17, 216, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 21, 10, 0, 0, -1, 1, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 23 },
+ { 22, 10, 0, 0, -1, -1, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 23 },
+ { 1, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 23 },
+ { 18, 0, 0, 0, -1, 0, 2, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 23 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 23 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 23 },
+ { 0, 17, 129, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 0, 17, 130, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 0, 17, 0, 5, -1, 0, 2, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 3, 23 },
+ { 0, 17, 132, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 0, 17, 0, 5, -1, 0, 2, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 3, 23 },
+ { 0, 17, 0, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 1, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 19, 4, 1, 23 },
+ { 0, 17, 230, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 0, 17, 9, 5, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 23 },
+ { 0, 17, 0, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 23 },
+ { 0, 17, 220, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 23 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 23 },
+ { 29, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 1, 23 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 35, 4, 1, 24 },
+ { 1, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 35, 4, 1, 24 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 1, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 35, 4, 1, 24 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 0, 17, 7, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 0, 17, 9, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 0, 17, 9, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 35, 4, 1, 24 },
+ { 3, 0, 0, 0, 0, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 2, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 3, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 4, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 5, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 6, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 7, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 8, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 9, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 24 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 24 },
+ { 0, 17, 220, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 35, 4, 1, 24 },
+ { 0, 17, 0, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 29, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 24 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 7264}, {0, 0}, {0, 0}, {0, 7264} }, 0, 10, 14, 7, 0, 25 },
+ { 14, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 7264}, {0, 0}, {0, 0}, {0, 7264} }, 0, 10, 14, 7, 3, 25 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 25 },
+ { 15, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 25 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 25 },
+ { 25, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 8, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 25 },
+ { 15, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 3008}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 25 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 9, 10, 27, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 11, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 9, 10, 27, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 9, 10, 27, 8, 0, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 28, 8, 0, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 28, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 28, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 10, 10, 28, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 11, 10, 29, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 11, 10, 29, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 11, 10, 29, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 27 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 27 },
+ { 0, 17, 230, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 27 },
+ { 0, 17, 230, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 27 },
+ { 25, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 27 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 27 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 2, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 3, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 4, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 5, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 6, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 7, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 8, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, 9, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 5, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 27 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 41}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 43}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 45}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 47}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 49}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 51}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 53}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 55}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 57}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 59}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 61}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 63}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 65}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 67}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 69}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 71}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 73}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 75}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 77}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 79}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 81}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 83}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 85}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 87}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 89}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 91}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 93}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 95}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 97}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 99}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 101}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 103}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 105}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 107}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 109}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 111}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 113}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 115}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 117}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 119}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 121}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 123}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 125}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 127}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 129}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 131}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 133}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 135}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 137}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 139}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 141}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 143}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 145}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 147}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 149}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 151}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 153}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 155}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 157}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 159}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 161}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 163}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 165}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 167}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 169}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 171}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 173}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 175}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 177}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 179}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 181}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 183}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 185}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 187}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 189}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 191}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 193}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 195}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 197}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {1, 199}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 8}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 14, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 8}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, -8}, {0, -8}, {0, -8} }, 0, 10, 14, 6, 3, 28 },
+ { 20, 10, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 29 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 29 },
+ { 29, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 29 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 29 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 29 },
+ { 6, 9, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 18, 19, 5, 0, 30 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 30 },
+ { 21, 10, 0, 0, -1, 1, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 30 },
+ { 22, 10, 0, 0, -1, -1, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 30 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 31 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 4, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 31 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 31 },
+ { 18, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 42 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 42 },
+ { 0, 17, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 42 },
+ { 0, 17, 9, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 42 },
+ { 1, 0, 9, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 42 },
+ { 18, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 43 },
+ { 0, 17, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 43 },
+ { 1, 0, 9, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 43 },
+ { 25, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 44 },
+ { 0, 17, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 44 },
+ { 18, 0, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 45 },
+ { 0, 17, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 45 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 32 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 0, 32 },
+ { 1, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 35, 4, 1, 32 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 32 },
+ { 0, 17, 9, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 32 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 32 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 1, 32 },
+ { 17, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 32 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 32 },
+ { 25, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 32 },
+ { 27, 4, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 32 },
+ { 0, 17, 230, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 32 },
+ { 3, 0, 0, 0, 0, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 2, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 3, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 4, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 5, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 6, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 7, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 8, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 3, 0, 0, 0, 9, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 32 },
+ { 5, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 32 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 33 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 11, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 33 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 0, 33 },
+ { 25, 10, 0, 2, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 33 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 11, 1, 33 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 33 },
+ { 25, 10, 0, 1, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 33 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 2, 33 },
+ { 10, 18, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 6, 4, 0, 33 },
+ { 0, 17, 0, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 2, 33 },
+ { 3, 0, 0, 0, 0, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 2, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 3, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 4, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 5, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 6, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 7, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 8, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 3, 0, 0, 0, 9, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 33 },
+ { 18, 0, 0, 2, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 33 },
+ { 17, 0, 0, 2, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 33 },
+ { 18, 0, 0, 2, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 33 },
+ { 18, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 33 },
+ { 0, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 33 },
+ { 0, 17, 228, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 33 },
+ { 18, 0, 0, 2, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 33 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 47 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 47 },
+ { 0, 17, 0, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 47 },
+ { 1, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 47 },
+ { 0, 17, 222, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 47 },
+ { 0, 17, 230, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 47 },
+ { 0, 17, 220, 5, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 47 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 47 },
+ { 25, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 47 },
+ { 3, 0, 0, 0, 0, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 2, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 3, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 4, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 5, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 6, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 7, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 8, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 3, 0, 0, 0, 9, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 47 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 48 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 56 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 56 },
+ { 3, 0, 0, 0, 0, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 2, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 3, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 4, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 5, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 6, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 7, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 8, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 3, 0, 0, 0, 9, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 56 },
+ { 5, 0, 0, 0, 1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 56 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 56 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 32 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 55 },
+ { 0, 17, 230, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 55 },
+ { 0, 17, 220, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 55 },
+ { 1, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 55 },
+ { 0, 17, 0, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 55 },
+ { 25, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 55 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 78 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 35, 4, 1, 78 },
+ { 0, 17, 0, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 78 },
+ { 0, 17, 9, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 78 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 35, 4, 1, 78 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 78 },
+ { 0, 17, 220, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 78 },
+ { 3, 0, 0, 0, 0, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 2, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 3, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 4, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 5, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 6, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 7, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 8, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 3, 0, 0, 0, 9, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 78 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 78 },
+ { 17, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 78 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 12, 1, 78 },
+ { 0, 17, 230, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 2, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 0, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 62 },
+ { 1, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 62 },
+ { 18, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 62 },
+ { 18, 0, 0, 0, -1, 0, 9, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 62 },
+ { 0, 17, 7, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 62 },
+ { 1, 0, 0, 0, -1, 0, 9, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 62 },
+ { 1, 0, 0, 0, -1, 0, 9, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 62 },
+ { 1, 0, 9, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 62 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 62 },
+ { 3, 0, 0, 0, 0, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 2, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 3, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 4, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 5, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 6, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 7, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 8, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 3, 0, 0, 0, 9, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 62 },
+ { 25, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 62 },
+ { 25, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 62 },
+ { 25, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 62 },
+ { 29, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 62 },
+ { 0, 17, 230, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 62 },
+ { 0, 17, 220, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 62 },
+ { 25, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 62 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 67 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 67 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 67 },
+ { 1, 0, 9, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 67 },
+ { 0, 17, 9, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 67 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 67 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 67 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 67 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 93 },
+ { 0, 17, 7, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 93 },
+ { 1, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 93 },
+ { 0, 17, 0, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 93 },
+ { 1, 0, 9, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 93 },
+ { 25, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 93 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 68 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 68 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 68 },
+ { 0, 17, 7, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 68 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 68 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 68 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 68 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 69 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 69 },
+ { 17, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 69 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 69 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6254}, {0, -6254}, {0, -6222} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6253}, {0, -6253}, {0, -6221} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6244}, {0, -6244}, {0, -6212} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6242}, {0, -6242}, {0, -6210} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6243}, {0, -6243}, {0, -6211} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6236}, {0, -6236}, {0, -6204} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -6181}, {0, -6181}, {0, -6180} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {1, 201}, {1, 201}, {1, 719} }, 0, 10, 14, 6, 3, 5 },
+ { 14, 0, 0, 0, -1, 0, 20, 3, 0, { {0, -3008}, {0, 0}, {0, 0}, {0, -3008} }, 0, 10, 14, 8, 3, 25 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 67 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 0, 17, 1, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 0, 17, 230, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 1, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 15, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 5 },
+ { 17, 0, 0, 0, -1, 0, 7, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 17, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 7, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 17, 0, 0, 0, -1, 0, 8, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 5 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {1, 203}, {1, 203}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 3814}, {0, 3814}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {1, 205}, {1, 205}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 8, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 17, 0, 0, 0, -1, 0, 8, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 0, 17, 230, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 234, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 0, 17, 214, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 202, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 232, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 228, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 218, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 233, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 1 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 514}, {1, 514}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 517}, {1, 517}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 520}, {1, 520}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 523}, {1, 523}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 526}, {1, 526}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 2, 3, 81, { {0, 0}, {0, -59}, {0, -59}, {0, -58} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {0, -7615}, {0, 0}, {0, 0}, {0, -7615} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 8}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {0, 0}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 529}, {1, 529}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 532}, {1, 532}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 536}, {1, 536}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 540}, {1, 540}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 74}, {0, 74}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 74}, {0, 74}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 86}, {0, 86}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 86}, {0, 86}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 100}, {0, 100}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 100}, {0, 100}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 128}, {0, 128}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 128}, {0, 128}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 112}, {0, 112}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 112}, {0, 112}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 126}, {0, 126}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 126}, {0, 126}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 578}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 581}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 584}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 587}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 590}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 593}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 596}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 599}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 578}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 581}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 584}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 587}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 590}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 593}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 596}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 599}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 602}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 605}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 608}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 611}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 614}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 617}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 620}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 623}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 602}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 605}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 608}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 611}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 614}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 617}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 620}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 623}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 626}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 629}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 632}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 635}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 638}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 641}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 644}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 647}, {0, 8}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 626}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 629}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 632}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 635}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 638}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 641}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 644}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -8}, {1, 647}, {0, 0}, {0, -8} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 662}, {1, 659}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 650}, {0, 9}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 668}, {1, 665}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 544}, {1, 544}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 699}, {1, 695}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -74}, {0, 0}, {0, 0}, {0, -74} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {0, -74}, {0, 0}, {0, 0}, {0, -74} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -9}, {1, 650}, {0, 0}, {0, -9} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, -7205}, {0, -7205}, {0, -7173} }, 0, 10, 14, 6, 3, 4 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 81, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 674}, {1, 671}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 653}, {0, 9}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 680}, {1, 677}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 547}, {1, 547}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 707}, {1, 703}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -86}, {0, 0}, {0, 0}, {0, -86} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {0, -86}, {0, 0}, {0, 0}, {0, -86} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -9}, {1, 653}, {0, 0}, {0, -9} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 550}, {1, 550}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {1, 503}, {1, 503}, {0, -7235} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 554}, {1, 554}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 557}, {1, 557}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -100}, {0, 0}, {0, 0}, {0, -100} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {0, -100}, {0, 0}, {0, 0}, {0, -100} }, 0, 10, 14, 7, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 561}, {1, 561}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {1, 507}, {1, 507}, {0, -7219} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 565}, {1, 565}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 7}, {0, 7}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 568}, {1, 568}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 571}, {1, 571}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -112}, {0, 0}, {0, 0}, {0, -112} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {0, -112}, {0, 0}, {0, 0}, {0, -112} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -7}, {0, 0}, {0, 0}, {0, -7} }, 0, 10, 14, 7, 3, 4 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 686}, {1, 683}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 656}, {0, 9}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 692}, {1, 689}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 575}, {1, 575}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {1, 715}, {1, 711}, {0, 0} }, 0, 10, 14, 6, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -128}, {0, 0}, {0, 0}, {0, -128} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {0, -128}, {0, 0}, {0, 0}, {0, -128} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -126}, {0, 0}, {0, 0}, {0, -126} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {0, -126}, {0, 0}, {0, 0}, {0, -126} }, 0, 10, 14, 7, 3, 4 },
+ { 16, 0, 0, 0, -1, 0, 1, 3, 17, { {0, -9}, {1, 656}, {0, 0}, {0, -9} }, 0, 10, 14, 7, 3, 4 },
+ { 28, 10, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 0, 4 },
+ { 6, 9, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 18, 19, 5, 0, 2 },
+ { 6, 9, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 18, 19, 5, 0, 2 },
+ { 6, 9, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 5, 0, 2 },
+ { 10, 18, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 22, 4, 2, 2 },
+ { 10, 18, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 4, 1 },
+ { 10, 18, 0, 1, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 5, 5, 34, 4, 4, 1 },
+ { 10, 0, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 1, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 3, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 11, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 21, 11, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 23, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 3, 13, 1, 2 },
+ { 24, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 3, 13, 1, 2 },
+ { 21, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 23, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 23, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 24, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 17, 10, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 19, 0, 1, 2 },
+ { 7, 9, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 40, 3, 0, 2 },
+ { 8, 7, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 3, 40, 3, 0, 2 },
+ { 10, 11, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 14, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 16, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 12, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 15, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 6, 6, 0, 0, -1, 0, 4, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 6, 5, 0, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 2 },
+ { 23, 10, 0, 0, -1, 1, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 24, 10, 0, 0, -1, -1, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 7, 12, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 12, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 19, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 14, 0, 1, 2 },
+ { 26, 6, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 12, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 12, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 7, 12, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 19, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 2 },
+ { 6, 9, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 18, 19, 5, 0, 2 },
+ { 10, 18, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 24, 4, 2, 2 },
+ { 10, 18, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 14, 4, 0, 2 },
+ { 10, 18, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 14, 4, 2, 2 },
+ { 13, 18, 0, 0, -1, 0, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 0, 14, 0, 0, 0 },
+ { 10, 19, 0, 0, -1, 0, 15, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 20, 0, 0, -1, 0, 15, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 21, 0, 0, -1, 0, 15, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 22, 0, 0, -1, 0, 15, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 10, 18, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 5, 2, 0, 0, 0, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 17, 0, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 5, 2, 0, 0, 4, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 2, 0, 0, 5, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 2, 0, 0, 6, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 2, 0, 0, 7, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 2, 0, 0, 8, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 2, 0, 0, 9, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 3, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 26, 3, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 17, 0, 0, 0, -1, 0, 12, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 27, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 3, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 2, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 3, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 14, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 27, 4, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 13, 4, 0, 0, -1, 0, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 0, 0 },
+ { 0, 17, 1, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 2, 17, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 2, 17, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 2, 17, 0, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 1, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 220, 5, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 1, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 3, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 85, { {0, -7517}, {0, 0}, {0, 0}, {0, -7517} }, 0, 10, 14, 7, 3, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 85, { {1, 207}, {0, 0}, {0, 0}, {1, 207} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 0, 85, { {1, 209}, {0, 0}, {0, 0}, {1, 209} }, 0, 10, 14, 7, 3, 3 },
+ { 29, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 28}, {0, 0}, {0, 0}, {0, 28} }, 0, 10, 14, 7, 0, 3 },
+ { 18, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 4, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 10, 14, 6, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 14, 0, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, -28}, {0, -28}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 29, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, -1, 0, 11, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 4, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 16}, {0, 0}, {0, 0}, {0, 16} }, 0, 10, 14, 7, 3, 3 },
+ { 4, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 16}, {0, 0}, {0, 0}, {0, 16} }, 0, 10, 14, 7, 3, 3 },
+ { 4, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, -16}, {0, -16}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 4, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, -16}, {0, -16}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 4, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 0, 3 },
+ { 4, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 5, 10, 0, 0, -1, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 3, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 3, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 3, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -3, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -3, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -3, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 3, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 26, 4, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2016, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2527, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1923, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1914, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1918, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2250, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 1, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 138, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 7, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -7, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 0, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1, 1, 0, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 1, 0, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 1, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1824, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2104, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2108, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2106, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1316, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -138, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 8, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 7, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -8, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -7, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 3, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 2, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 3, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 4, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 5, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 6, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 7, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 8, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 9, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, 1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 2, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 3, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 4, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 5, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 6, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 7, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 8, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, 9, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 2, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 3, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 4, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 5, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 6, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 7, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 8, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 9, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 26}, {0, 0}, {0, 0}, {0, 26} }, 0, 10, 14, 7, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 26}, {0, 0}, {0, 0}, {0, 26} }, 14, 10, 14, 7, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 0, 80, { {0, 0}, {0, -26}, {0, -26}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 5, 10, 0, 0, 0, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 5, 10, 0, 0, -1, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 1, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 2, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 3, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 4, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 5, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 6, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 7, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 8, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 9, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 0, 0, 7, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 8, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 5, 10, 0, 0, 1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 2, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 3, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 4, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 5, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 6, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 7, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 8, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 9, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 2, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 3, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 4, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 5, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 6, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 7, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 8, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, 9, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 26, 10, 0, 0, -1, 1, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 2, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -2, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 1, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1316, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 6, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 6, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 10, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 10, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 54 },
+ { 21, 10, 0, 0, -1, 3, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, 1, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 21, 10, 0, 0, -1, -1, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -3, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 26, 10, 0, 0, -1, -1914, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1918, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1923, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -1824, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -2016, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, -2104, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -2106, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -2108, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 26, 10, 0, 0, -1, -2250, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, -2527, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 48}, {0, 0}, {0, 0}, {0, 48} }, 0, 10, 14, 7, 3, 57 },
+ { 14, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 48}, {0, 0}, {0, 0}, {0, 48} }, 0, 10, 14, 7, 3, 57 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, -48}, {0, -48}, {0, 0} }, 0, 10, 14, 6, 1, 57 },
+ { 15, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, -48}, {0, -48}, {0, 0} }, 0, 10, 14, 6, 1, 57 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {1, 211}, {0, 0}, {0, 0}, {1, 211} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {0, -3814}, {0, 0}, {0, 0}, {0, -3814} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 0, { {1, 213}, {0, 0}, {0, 0}, {1, 213} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {1, 215}, {1, 215}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {1, 217}, {1, 217}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {1, 219}, {0, 0}, {0, 0}, {1, 219} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {1, 221}, {0, 0}, {0, 0}, {1, 221} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {1, 223}, {0, 0}, {0, 0}, {1, 223} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 11, 3, 0, { {1, 225}, {0, 0}, {0, 0}, {1, 225} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 10, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 11, 3, 0, { {1, 227}, {0, 0}, {0, 0}, {1, 227} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 11, 3, 0, { {1, 229}, {0, 0}, {0, 0}, {1, 229} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 46 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 46 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 46 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 46 },
+ { 14, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 46 },
+ { 15, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 46 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 46 },
+ { 14, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 46 },
+ { 15, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 46 },
+ { 25, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 46 },
+ { 25, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 46 },
+ { 5, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 46 },
+ { 15, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, -7264}, {0, -7264}, {0, 0} }, 0, 10, 14, 6, 1, 25 },
+ { 15, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, -7264}, {0, -7264}, {0, 0} }, 0, 10, 14, 6, 1, 25 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 58 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 58 },
+ { 17, 0, 0, 0, -1, 0, 8, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 58 },
+ { 25, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 58 },
+ { 0, 17, 9, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 58 },
+ { 25, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 23, 10, 0, 0, -1, 1, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 24, 10, 0, 0, -1, -1, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 23, 10, 0, 0, -1, 1, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 24, 10, 0, 0, -1, -1, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 2 },
+ { 17, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 21, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 2 },
+ { 21, 10, 0, 0, -1, 1, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 37 },
+ { 29, 10, 0, 0, -1, 0, 4, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 37 },
+ { 29, 10, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 26, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 6, 9, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 18, 19, 5, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 12, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 2 },
+ { 4, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 21, 10, 0, 0, -1, 1, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 1, 2 },
+ { 22, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 0, 17, 218, 5, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 228, 5, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 232, 5, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 222, 5, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 1, 0, 224, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 26 },
+ { 20, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 23, 8, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 4, 0, 0, 0, -1, 0, 4, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 17, 0, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 8, 1, 34 },
+ { 0, 17, 8, 5, -1, 0, 1, 5, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 28, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 0, 0, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 8, 1, 34 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 6, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 34 },
+ { 20, 10, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 0, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 1, 35 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 35 },
+ { 17, 0, 0, 0, -1, 0, 1, 5, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 6, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 3, 35 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 18, 0, 0, 0, -1, 0, 10, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 18, 0, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 18, 0, 0, 0, -1, 0, 20, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 3, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 0, 26 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 5, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 18, 0, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 18, 0, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 18, 0, 0, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 36 },
+ { 29, 10, 0, 0, -1, 0, 8, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 35 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 26 },
+ { 29, 10, 0, 0, -1, 0, 7, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 26 },
+ { 5, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 5, 0, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 5, 10, 0, 0, -1, 0, 6, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 26 },
+ { 29, 10, 0, 0, -1, 0, 7, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 26 },
+ { 29, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 26 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 0, 3, 35 },
+ { 29, 0, 0, 0, -1, 0, 22, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 18, 0, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 8, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 10, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 11, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 13, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 17, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 20, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 24, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 1, 38 },
+ { 17, 0, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 38 },
+ { 29, 10, 0, 0, -1, 0, 4, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 38 },
+ { 29, 10, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 38 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 83 },
+ { 17, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 83 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 83 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 83 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 70 },
+ { 17, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 70 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 70 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 70 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 70 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 70 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 5 },
+ { 2, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 25, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 5 },
+ { 0, 17, 230, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 17, 10, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 5 },
+ { 17, 0, 0, 0, -1, 0, 16, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 5 },
+ { 0, 17, 230, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 84 },
+ { 4, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 84 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 84 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 84 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 84 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 84 },
+ { 28, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 17, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 14, 0, 0, 0, -1, 0, 10, 3, 0, { {1, 231}, {0, 0}, {0, 0}, {1, 231} }, 0, 10, 14, 7, 3, 3 },
+ { 28, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 14, 0, 0, 0, -1, 0, 12, 3, 0, { {1, 233}, {0, 0}, {0, 0}, {1, 233} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 48}, {0, 48}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 13, 3, 0, { {1, 235}, {0, 0}, {0, 0}, {1, 235} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {1, 237}, {0, 0}, {0, 0}, {1, 237} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {1, 239}, {0, 0}, {0, 0}, {1, 239} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {1, 241}, {0, 0}, {0, 0}, {1, 241} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 18, 3, 0, { {1, 243}, {0, 0}, {0, 0}, {1, 243} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {1, 245}, {0, 0}, {0, 0}, {1, 245} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {1, 247}, {0, 0}, {0, 0}, {1, 247} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 17, 3, 0, { {1, 249}, {0, 0}, {0, 0}, {1, 249} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 928}, {0, 0}, {0, 0}, {0, 928} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 14, 0, 0, 0, -1, 0, 21, 3, 0, { {0, -48}, {0, 0}, {0, 0}, {0, -48} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 21, 3, 0, { {1, 251}, {0, 0}, {0, 0}, {1, 251} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 21, 3, 0, { {1, 253}, {0, 0}, {0, 0}, {1, 253} }, 0, 10, 14, 7, 3, 3 },
+ { 14, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 1}, {0, 0}, {0, 0}, {0, 1} }, 0, 10, 14, 7, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, -1}, {0, -1}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 24, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 13, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 59 },
+ { 0, 17, 0, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 59 },
+ { 0, 17, 9, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 59 },
+ { 1, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 59 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 59 },
+ { 0, 17, 9, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 59 },
+ { 5, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 4, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 18, 0, 0, 2, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 65 },
+ { 18, 0, 0, 4, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 65 },
+ { 18, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 65 },
+ { 25, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 65 },
+ { 25, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 1, 65 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 71 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 71 },
+ { 0, 17, 9, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 71 },
+ { 0, 17, 0, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 71 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 71 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 71 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 11 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 11 },
+ { 0, 17, 0, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 11 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 72 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 72 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 72 },
+ { 0, 17, 220, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 72 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 72 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 73 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 73 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 73 },
+ { 1, 0, 9, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 73 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 73 },
+ { 0, 17, 0, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 85 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 85 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 85 },
+ { 0, 17, 7, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 85 },
+ { 1, 0, 9, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 85 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 85 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 85 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 85 },
+ { 17, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 19, 8, 1, 2 },
+ { 3, 0, 0, 0, 0, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 2, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 3, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 4, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 5, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 6, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 7, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 8, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 3, 0, 0, 0, 9, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 85 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 24 },
+ { 17, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 24 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 77 },
+ { 0, 17, 0, 5, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 77 },
+ { 1, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 77 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 19, 8, 1, 77 },
+ { 3, 0, 0, 0, 0, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 2, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 3, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 4, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 5, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 6, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 7, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 8, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 3, 0, 0, 0, 9, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 77 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 77 },
+ { 25, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 77 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 17, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 24 },
+ { 29, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 24 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 35, 4, 1, 24 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 79 },
+ { 0, 17, 230, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 79 },
+ { 0, 17, 220, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 79 },
+ { 17, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 79 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 79 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 86 },
+ { 1, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 86 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 86 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 86 },
+ { 17, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 86 },
+ { 0, 17, 9, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 86 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 27 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, -928}, {0, -928}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 28, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 0, 1, 2 },
+ { 17, 0, 0, 0, -1, 0, 16, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 4 },
+ { 15, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 28, 10, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 255}, {1, 255}, {1, 255} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 257}, {1, 257}, {1, 257} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 259}, {1, 259}, {1, 259} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 261}, {1, 261}, {1, 261} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 263}, {1, 263}, {1, 263} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 265}, {1, 265}, {1, 265} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 267}, {1, 267}, {1, 267} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 269}, {1, 269}, {1, 269} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 271}, {1, 271}, {1, 271} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 273}, {1, 273}, {1, 273} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 275}, {1, 275}, {1, 275} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 277}, {1, 277}, {1, 277} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 279}, {1, 279}, {1, 279} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 281}, {1, 281}, {1, 281} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 283}, {1, 283}, {1, 283} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 285}, {1, 285}, {1, 285} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 287}, {1, 287}, {1, 287} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 289}, {1, 289}, {1, 289} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 291}, {1, 291}, {1, 291} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 293}, {1, 293}, {1, 293} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 295}, {1, 295}, {1, 295} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 297}, {1, 297}, {1, 297} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 299}, {1, 299}, {1, 299} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 301}, {1, 301}, {1, 301} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 303}, {1, 303}, {1, 303} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 305}, {1, 305}, {1, 305} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 307}, {1, 307}, {1, 307} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 309}, {1, 309}, {1, 309} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 311}, {1, 311}, {1, 311} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 313}, {1, 313}, {1, 313} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 315}, {1, 315}, {1, 315} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 317}, {1, 317}, {1, 317} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 319}, {1, 319}, {1, 319} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 321}, {1, 321}, {1, 321} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 323}, {1, 323}, {1, 323} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 325}, {1, 325}, {1, 325} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 327}, {1, 327}, {1, 327} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 329}, {1, 329}, {1, 329} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 331}, {1, 331}, {1, 331} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 333}, {1, 333}, {1, 333} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 335}, {1, 335}, {1, 335} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 337}, {1, 337}, {1, 337} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 339}, {1, 339}, {1, 339} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 341}, {1, 341}, {1, 341} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 343}, {1, 343}, {1, 343} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 345}, {1, 345}, {1, 345} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 347}, {1, 347}, {1, 347} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 349}, {1, 349}, {1, 349} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 351}, {1, 351}, {1, 351} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 353}, {1, 353}, {1, 353} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 355}, {1, 355}, {1, 355} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 357}, {1, 357}, {1, 357} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 359}, {1, 359}, {1, 359} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 361}, {1, 361}, {1, 361} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 363}, {1, 363}, {1, 363} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 365}, {1, 365}, {1, 365} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 367}, {1, 367}, {1, 367} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 369}, {1, 369}, {1, 369} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 371}, {1, 371}, {1, 371} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 373}, {1, 373}, {1, 373} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 375}, {1, 375}, {1, 375} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 377}, {1, 377}, {1, 377} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 379}, {1, 379}, {1, 379} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 381}, {1, 381}, {1, 381} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 383}, {1, 383}, {1, 383} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 385}, {1, 385}, {1, 385} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 387}, {1, 387}, {1, 387} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 389}, {1, 389}, {1, 389} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 391}, {1, 391}, {1, 391} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 393}, {1, 393}, {1, 393} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 395}, {1, 395}, {1, 395} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 397}, {1, 397}, {1, 397} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 399}, {1, 399}, {1, 399} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 401}, {1, 401}, {1, 401} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 403}, {1, 403}, {1, 403} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 405}, {1, 405}, {1, 405} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 407}, {1, 407}, {1, 407} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 409}, {1, 409}, {1, 409} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 411}, {1, 411}, {1, 411} }, 0, 10, 14, 6, 3, 28 },
+ { 15, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {1, 413}, {1, 413}, {1, 413} }, 0, 10, 14, 6, 3, 28 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 86 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 86 },
+ { 0, 17, 0, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 86 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 86 },
+ { 0, 17, 9, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 86 },
+ { 3, 0, 0, 0, 0, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 2, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 3, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 4, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 5, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 6, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 7, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 8, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 3, 0, 0, 0, 9, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 86 },
+ { 18, 0, 0, 0, -1, 0, 2, 5, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 12, 10, 25, 8, 1, 26 },
+ { 18, 0, 0, 0, -1, 0, 2, 5, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 13, 10, 26, 8, 1, 26 },
+ { 11, 0, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 36, 0, 0, 0 },
+ { 12, 0, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 18, 0, 0, 0, -1, 0, 1, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 18, 0, 0, 0, -1, 0, 13, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 18, 0, 0, 0, -1, 0, 6, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 18, 0, 0, 0, -1, 0, 11, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 13, 0, 0, 0, -1, 0, 0, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 0 },
+ { 18, 0, 0, 0, -1, 0, 8, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 427}, {1, 424}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 433}, {1, 430}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 439}, {1, 436}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 446}, {1, 442}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 454}, {1, 450}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 461}, {1, 458}, {0, 1} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 461}, {1, 458}, {0, 0} }, 0, 10, 14, 6, 3, 3 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 473}, {1, 470}, {0, 0} }, 0, 10, 14, 6, 3, 6 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 479}, {1, 476}, {0, 0} }, 0, 10, 14, 6, 3, 6 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 485}, {1, 482}, {0, 0} }, 0, 10, 14, 6, 3, 6 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 491}, {1, 488}, {0, 0} }, 0, 10, 14, 6, 3, 6 },
+ { 15, 0, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {1, 497}, {1, 494}, {0, 0} }, 0, 10, 14, 6, 3, 6 },
+ { 18, 1, 0, 0, -1, 0, 4, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 15, 8, 3, 7 },
+ { 0, 17, 26, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 7 },
+ { 18, 1, 0, 0, -1, 0, 1, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 15, 8, 3, 7 },
+ { 18, 1, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 9, 15, 8, 3, 7 },
+ { 26, 3, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 7 },
+ { 18, 13, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 8 },
+ { 28, 13, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 18, 13, 0, 0, -1, 0, 1, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 0, 8 },
+ { 22, 10, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 13, 18, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 27, 13, 0, 0, -1, 0, 6, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 8 },
+ { 0, 17, 0, 5, -1, 0, 6, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 2, 1 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 11, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 10, 11, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 10, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 0, 2 },
+ { 21, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 3, 2 },
+ { 22, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 8, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 11, 3, 2 },
+ { 19, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 16, 0, 3, 2 },
+ { 21, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 21, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 3, 2 },
+ { 22, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 21, 10, 0, 0, -1, 0, 7, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, 0, 7, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 1, 11, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 11, 3, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 1, 10, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 7, 0, 0, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 7, 11, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 0, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 3, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 3, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 26, 3, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 20, 3, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 11, 3, 2 },
+ { 26, 10, 0, 0, -1, 1, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, -1, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 0, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0, 2 },
+ { 18, 13, 0, 0, -1, 0, 6, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 8 },
+ { 10, 18, 0, 5, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 24, 4, 2, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 12, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 0, 2 },
+ { 25, 4, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 16, 0, 0, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 26, 3, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 1, 11, 0, 2 },
+ { 20, 3, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 11, 3, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 13, 1, 10, 3, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 3, 2, 0, 0, 0, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 2, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 3, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 4, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 5, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 6, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 7, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 8, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 3, 2, 0, 0, 9, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 3, 2 },
+ { 25, 6, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 14, 7, 11, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 7, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, 2, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 26, 10, 0, 0, -1, -2, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 1, 80, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 16, 7, 3, 3 },
+ { 21, 10, 0, 0, -1, 2, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 0, 2 },
+ { 22, 10, 0, 0, -1, -2, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 0, 2 },
+ { 28, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 0, 2 },
+ { 19, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 16, 0, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 16, 6, 3, 3 },
+ { 21, 10, 0, 0, -1, 1, 6, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 3, 2 },
+ { 22, 10, 0, 0, -1, -1, 6, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 12, 3, 2 },
+ { 21, 10, 0, 0, -1, 1, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 3, 2 },
+ { 22, 10, 0, 0, -1, -1, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 3, 2 },
+ { 18, 0, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 3, 35 },
+ { 18, 0, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 3, 35 },
+ { 17, 0, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 3, 2 },
+ { 17, 0, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 7, 4, 3, 2 },
+ { 18, 0, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 0, 26 },
+ { 18, 0, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 16, 8, 3, 26 },
+ { 27, 4, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 3, 2 },
+ { 27, 4, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 2, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 10, 10, 0, 5, -1, 0, 4, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 3, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 31, 0, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 13, 18, 0, 0, -1, 0, 1, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 49 },
+ { 25, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 2 },
+ { 5, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 4, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 4 },
+ { 5, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 29, 10, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 5, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 29, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 4 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 74 },
+ { 18, 0, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 75 },
+ { 5, 2, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 18, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 39 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 39 },
+ { 5, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 39 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 39 },
+ { 18, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 40 },
+ { 4, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 40 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 120 },
+ { 0, 17, 230, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 120 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 50 },
+ { 25, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 50 },
+ { 18, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 60 },
+ { 25, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 60 },
+ { 4, 0, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 60 },
+ { 14, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 40}, {0, 0}, {0, 0}, {0, 40} }, 0, 10, 14, 7, 3, 41 },
+ { 14, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 40}, {0, 0}, {0, 0}, {0, 40} }, 0, 10, 14, 7, 3, 41 },
+ { 15, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, -40}, {0, -40}, {0, 0} }, 0, 10, 14, 6, 1, 41 },
+ { 15, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, -40}, {0, -40}, {0, 0} }, 0, 10, 14, 6, 1, 41 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 51 },
+ { 18, 0, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 52 },
+ { 3, 0, 0, 0, 0, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 2, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 3, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 4, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 5, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 6, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 7, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 8, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 3, 0, 0, 0, 9, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 52 },
+ { 14, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 40}, {0, 0}, {0, 0}, {0, 40} }, 0, 10, 14, 7, 3, 136 },
+ { 15, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, -40}, {0, -40}, {0, 0} }, 0, 10, 14, 6, 1, 136 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 106 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 103 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 103 },
+ { 14, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 39}, {0, 0}, {0, 0}, {0, 39} }, 0, 10, 14, 7, 3, 161 },
+ { 15, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, -39}, {0, -39}, {0, 0} }, 0, 10, 14, 6, 1, 161 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 110 },
+ { 17, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 17, 0, 0, 0, -1, 0, 24, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 3 },
+ { 18, 1, 0, 0, -1, 0, 7, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 53 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 87 },
+ { 25, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 87 },
+ { 5, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 87 },
+ { 18, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 118 },
+ { 29, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 118 },
+ { 5, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 118 },
+ { 18, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 117 },
+ { 5, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 117 },
+ { 18, 1, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 128 },
+ { 5, 1, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 128 },
+ { 18, 1, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 64 },
+ { 5, 1, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 64 },
+ { 5, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 64 },
+ { 25, 10, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 64 },
+ { 18, 1, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 76 },
+ { 25, 1, 0, 0, -1, 0, 10, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 76 },
+ { 18, 1, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 98 },
+ { 18, 1, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 97 },
+ { 5, 1, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 97 },
+ { 18, 1, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 61 },
+ { 0, 17, 0, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 61 },
+ { 0, 17, 220, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 61 },
+ { 0, 17, 230, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 61 },
+ { 18, 1, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 61 },
+ { 0, 17, 1, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 61 },
+ { 0, 17, 9, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 61 },
+ { 5, 1, 0, 0, 1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 5, 1, 0, 0, 2, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 5, 1, 0, 0, 3, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 5, 1, 0, 0, 4, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 5, 1, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 5, 1, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 25, 1, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 61 },
+ { 25, 1, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 61 },
+ { 25, 1, 0, 0, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 61 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 88 },
+ { 5, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 88 },
+ { 25, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 88 },
+ { 18, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 116 },
+ { 5, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 116 },
+ { 18, 1, 0, 2, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 112 },
+ { 18, 1, 0, 3, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 112 },
+ { 18, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 112 },
+ { 29, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 112 },
+ { 18, 1, 0, 4, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 112 },
+ { 0, 17, 230, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 112 },
+ { 0, 17, 220, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 112 },
+ { 5, 1, 0, 2, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 112 },
+ { 5, 1, 0, 3, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 112 },
+ { 25, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 112 },
+ { 25, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 17, 0, 1, 112 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 80 },
+ { 25, 10, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 80 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 89 },
+ { 5, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 89 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 90 },
+ { 5, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 90 },
+ { 18, 1, 0, 2, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 121 },
+ { 18, 1, 0, 3, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 121 },
+ { 25, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 121 },
+ { 5, 1, 0, 3, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 121 },
+ { 5, 1, 0, 2, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 121 },
+ { 5, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 121 },
+ { 18, 1, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 91 },
+ { 14, 1, 0, 0, -1, 0, 17, 3, 0, { {0, 64}, {0, 0}, {0, 0}, {0, 64} }, 0, 10, 14, 7, 3, 130 },
+ { 15, 1, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, -64}, {0, -64}, {0, 0} }, 0, 10, 14, 6, 1, 130 },
+ { 5, 1, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 130 },
+ { 18, 13, 0, 4, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 144 },
+ { 18, 13, 0, 2, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 144 },
+ { 18, 13, 0, 3, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 144 },
+ { 0, 17, 230, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 144 },
+ { 3, 5, 0, 0, 0, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 2, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 3, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 4, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 5, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 6, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 7, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 8, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 3, 5, 0, 0, 9, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 144 },
+ { 5, 5, 0, 0, 1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 2, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 3, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 4, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 5, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 6, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 7, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 8, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, 9, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 5, 5, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 18, 1, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 156 },
+ { 0, 17, 230, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 156 },
+ { 20, 1, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 156 },
+ { 0, 17, 220, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 8 },
+ { 18, 1, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 147 },
+ { 5, 1, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 147 },
+ { 18, 13, 0, 2, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 148 },
+ { 18, 13, 0, 3, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 148 },
+ { 18, 13, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 148 },
+ { 0, 17, 220, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 148 },
+ { 0, 17, 230, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 148 },
+ { 5, 13, 0, 2, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 148 },
+ { 5, 13, 0, 3, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 148 },
+ { 25, 13, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 148 },
+ { 18, 1, 0, 2, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 158 },
+ { 18, 1, 0, 3, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 158 },
+ { 0, 17, 230, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 158 },
+ { 0, 17, 220, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 158 },
+ { 25, 1, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 158 },
+ { 18, 1, 0, 2, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 153 },
+ { 18, 1, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 153 },
+ { 18, 1, 0, 3, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 153 },
+ { 5, 1, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 153 },
+ { 5, 1, 0, 3, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 153 },
+ { 5, 1, 0, 2, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 153 },
+ { 5, 1, 0, 4, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 153 },
+ { 18, 1, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 149 },
+ { 1, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 94 },
+ { 0, 17, 0, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 94 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 94 },
+ { 0, 17, 9, 5, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 94 },
+ { 25, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 94 },
+ { 25, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 2, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 3, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 4, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 5, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 6, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 7, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 8, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, 9, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 5, 10, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 94 },
+ { 3, 0, 0, 0, 0, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 2, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 3, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 4, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 5, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 6, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 7, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 8, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 3, 0, 0, 0, 9, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 94 },
+ { 0, 17, 9, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 94 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 94 },
+ { 0, 17, 0, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 94 },
+ { 0, 17, 9, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 94 },
+ { 0, 17, 0, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 92 },
+ { 1, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 92 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 92 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 92 },
+ { 0, 17, 9, 5, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 92 },
+ { 0, 17, 7, 5, -1, 0, 11, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 92 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 92 },
+ { 10, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 92 },
+ { 25, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 92 },
+ { 0, 17, 0, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 92 },
+ { 10, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 16, 13, 9, 0, 92 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 101 },
+ { 3, 0, 0, 0, 0, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 2, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 3, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 4, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 5, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 6, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 7, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 8, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 3, 0, 0, 0, 9, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 101 },
+ { 0, 17, 230, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 96 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 96 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 96 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 96 },
+ { 1, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 96 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 96 },
+ { 0, 17, 9, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 96 },
+ { 3, 0, 0, 0, 0, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 2, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 3, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 4, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 5, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 6, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 7, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 8, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 3, 0, 0, 0, 9, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 96 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 96 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 96 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 96 },
+ { 1, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 96 },
+ { 18, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 96 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 111 },
+ { 0, 17, 7, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 111 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 111 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 111 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 100 },
+ { 1, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 100 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 100 },
+ { 1, 0, 9, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 100 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 100 },
+ { 0, 17, 0, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 100 },
+ { 0, 17, 7, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 12, 1, 100 },
+ { 1, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 100 },
+ { 0, 17, 0, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 100 },
+ { 3, 0, 0, 0, 0, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 2, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 3, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 4, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 5, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 6, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 7, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 8, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 3, 0, 0, 0, 9, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 100 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 100 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 100 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 100 },
+ { 5, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 20 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 109 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 109 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 109 },
+ { 1, 0, 9, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 109 },
+ { 0, 17, 7, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 109 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 109 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 109 },
+ { 0, 17, 0, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 109 },
+ { 18, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 109 },
+ { 0, 17, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 109 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 129 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 129 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 123 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 123 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 123 },
+ { 0, 17, 7, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 123 },
+ { 0, 17, 9, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 123 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 123 },
+ { 0, 17, 0, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 107 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 107 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 107 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 107 },
+ { 0, 17, 7, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 7, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 107 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 19, 8, 1, 107 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 107 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 107 },
+ { 1, 0, 9, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 107 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 107 },
+ { 0, 17, 230, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 107 },
+ { 18, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 135 },
+ { 1, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 135 },
+ { 0, 17, 0, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 135 },
+ { 0, 17, 9, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 135 },
+ { 0, 17, 7, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 135 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 135 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 135 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 135 },
+ { 3, 0, 0, 0, 0, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 2, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 3, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 4, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 5, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 6, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 7, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 8, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 3, 0, 0, 0, 9, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 135 },
+ { 25, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 135 },
+ { 0, 17, 230, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 135 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 135 },
+ { 18, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 135 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 124 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 124 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 124 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 124 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 124 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 124 },
+ { 0, 17, 9, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 124 },
+ { 0, 17, 7, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 124 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 124 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 124 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 122 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 122 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 122 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 122 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 122 },
+ { 0, 17, 9, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 122 },
+ { 0, 17, 7, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 122 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 122 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 122 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 122 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 122 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 122 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 122 },
+ { 0, 17, 0, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 122 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 114 },
+ { 1, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 114 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 114 },
+ { 0, 17, 9, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 114 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 114 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 114 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 114 },
+ { 25, 10, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 33 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 102 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 102 },
+ { 1, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 102 },
+ { 1, 0, 9, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 102 },
+ { 0, 17, 7, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 102 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 102 },
+ { 25, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 102 },
+ { 3, 0, 0, 0, 0, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 2, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 3, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 4, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 5, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 6, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 7, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 8, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 3, 0, 0, 0, 9, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 102 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 126 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 126 },
+ { 0, 17, 0, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 126 },
+ { 1, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 4, 35, 4, 1, 126 },
+ { 1, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 35, 4, 1, 126 },
+ { 0, 17, 9, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 35, 4, 1, 126 },
+ { 3, 0, 0, 0, 0, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 2, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 3, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 4, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 5, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 6, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 7, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 8, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 3, 0, 0, 0, 9, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 126 },
+ { 5, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 126 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 126 },
+ { 29, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 0, 1, 126 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 35, 8, 1, 126 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 142 },
+ { 1, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 142 },
+ { 0, 17, 0, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 142 },
+ { 0, 17, 9, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 142 },
+ { 0, 17, 7, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 142 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 142 },
+ { 14, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 125 },
+ { 15, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 125 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 125 },
+ { 5, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 125 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 125 },
+ { 18, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 154 },
+ { 1, 0, 0, 0, -1, 0, 23, 3, 204, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 154 },
+ { 1, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 154 },
+ { 1, 0, 0, 0, -1, 0, 23, 3, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 154 },
+ { 0, 17, 0, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 154 },
+ { 1, 0, 9, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 154 },
+ { 0, 17, 9, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 154 },
+ { 18, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 154 },
+ { 0, 17, 7, 5, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 154 },
+ { 25, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 154 },
+ { 25, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 154 },
+ { 3, 0, 0, 0, 0, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 2, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 3, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 4, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 5, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 6, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 7, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 8, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 3, 0, 0, 0, 9, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 16, 9, 1, 154 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 150 },
+ { 1, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 150 },
+ { 0, 17, 0, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 150 },
+ { 0, 17, 9, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 150 },
+ { 25, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 150 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 141 },
+ { 0, 17, 0, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 141 },
+ { 0, 0, 0, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 141 },
+ { 0, 17, 9, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 141 },
+ { 1, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 141 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 141 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 141 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 141 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 141 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 141 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 140 },
+ { 0, 17, 0, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 140 },
+ { 1, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 140 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 140 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 140 },
+ { 0, 17, 9, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 140 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 140 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 140 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 140 },
+ { 25, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 140 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 29 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 119 },
+ { 25, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 11 },
+ { 18, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 133 },
+ { 1, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 133 },
+ { 0, 17, 0, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 133 },
+ { 0, 0, 9, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 133 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 133 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 133 },
+ { 3, 0, 0, 0, 0, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 2, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 3, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 4, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 5, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 6, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 7, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 8, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 3, 0, 0, 0, 9, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 133 },
+ { 5, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 133 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 20, 0, 1, 134 },
+ { 25, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 8, 0, 1, 134 },
+ { 18, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 134 },
+ { 0, 17, 0, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 134 },
+ { 1, 0, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 134 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 138 },
+ { 0, 17, 0, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 138 },
+ { 0, 17, 7, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 138 },
+ { 0, 17, 9, 5, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 138 },
+ { 18, 0, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 138 },
+ { 3, 0, 0, 0, 0, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 2, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 3, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 4, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 5, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 6, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 7, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 8, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 3, 0, 0, 0, 9, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 138 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 143 },
+ { 1, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 143 },
+ { 0, 17, 0, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 143 },
+ { 0, 17, 9, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 143 },
+ { 3, 0, 0, 0, 0, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 2, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 3, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 4, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 5, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 6, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 7, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 8, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 3, 0, 0, 0, 9, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 143 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 145 },
+ { 18, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 19, 8, 1, 145 },
+ { 0, 17, 0, 5, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 145 },
+ { 1, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 145 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 145 },
+ { 0, 17, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 162 },
+ { 18, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 7, 10, 14, 8, 1, 162 },
+ { 1, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 162 },
+ { 18, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 162 },
+ { 1, 0, 9, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 162 },
+ { 0, 17, 9, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 162 },
+ { 25, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 162 },
+ { 25, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 162 },
+ { 3, 0, 0, 0, 0, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 2, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 3, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 4, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 5, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 6, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 7, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 8, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 3, 0, 0, 0, 9, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 14, 9, 1, 162 },
+ { 18, 0, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 83 },
+ { 5, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 16 },
+ { 29, 10, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 16 },
+ { 27, 4, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 16 },
+ { 25, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 16 },
+ { 18, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 63 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 63 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 63 },
+ { 4, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 63 },
+ { 4, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 63 },
+ { 25, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 63 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 63 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 157 },
+ { 25, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 157 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 0, 8, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 11, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 1, 8, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 0, 8, 1, 81 },
+ { 10, 0, 0, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 6, 4, 0, 81 },
+ { 10, 0, 0, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 0, 4, 0, 81 },
+ { 10, 0, 0, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 1, 4, 0, 81 },
+ { 10, 0, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 6, 4, 0, 81 },
+ { 10, 0, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 0, 4, 0, 81 },
+ { 10, 0, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 1, 4, 0, 81 },
+ { 0, 17, 0, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 127 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 0, 8, 1, 127 },
+ { 18, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 1, 8, 1, 127 },
+ { 18, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 84 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 115 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 115 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 115 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 159 },
+ { 3, 0, 0, 0, 0, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 2, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 3, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 4, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 5, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 6, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 7, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 8, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 3, 0, 0, 0, 9, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 159 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 104 },
+ { 0, 17, 1, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 104 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 104 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 108 },
+ { 0, 17, 230, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 108 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 108 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 108 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 108 },
+ { 29, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 108 },
+ { 17, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 108 },
+ { 3, 0, 0, 0, 0, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 2, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 3, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 4, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 5, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 6, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 7, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 8, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 3, 0, 0, 0, 9, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 108 },
+ { 5, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 108 },
+ { 14, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 32}, {0, 0}, {0, 0}, {0, 32} }, 0, 10, 14, 7, 3, 146 },
+ { 15, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, -32}, {0, -32}, {0, 0} }, 0, 10, 14, 6, 1, 146 },
+ { 5, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 146 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 146 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 146 },
+ { 25, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 146 },
+ { 18, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 99 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 99 },
+ { 0, 17, 0, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 99 },
+ { 1, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 99 },
+ { 1, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 99 },
+ { 0, 17, 0, 5, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 99 },
+ { 17, 0, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 99 },
+ { 17, 0, 0, 0, -1, 0, 18, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 137 },
+ { 17, 0, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 139 },
+ { 25, 10, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 1, 37 },
+ { 17, 0, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 7, 8, 1, 37 },
+ { 0, 17, 0, 5, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 6, 4, 1, 155 },
+ { 1, 0, 6, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 18, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 137 },
+ { 18, 0, 0, 0, -1, 0, 20, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 137 },
+ { 18, 0, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 137 },
+ { 18, 0, 0, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 137 },
+ { 18, 0, 0, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 1, 155 },
+ { 17, 0, 0, 0, -1, 0, 24, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 24, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 24, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 16, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 25, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 8, 1, 34 },
+ { 18, 0, 0, 0, -1, 0, 25, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 7, 8, 1, 35 },
+ { 18, 0, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 139 },
+ { 18, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 105 },
+ { 29, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 105 },
+ { 0, 17, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 105 },
+ { 0, 17, 1, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 105 },
+ { 25, 0, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 105 },
+ { 10, 18, 0, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 2, 2 },
+ { 0, 17, 0, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 29, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 5, 3, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 1, 0, 216, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 2 },
+ { 1, 0, 216, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 2 },
+ { 0, 17, 1, 5, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 1, 0, 226, 0, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 8, 4, 23, 4, 1, 2 },
+ { 10, 18, 0, 5, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 23, 4, 0, 2 },
+ { 0, 17, 220, 5, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 0, 17, 230, 5, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 1 },
+ { 29, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 0, 17, 230, 5, -1, 0, 8, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 4 },
+ { 5, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 0, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 5, 0, 0, 0, -1, 0, 9, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 14, 0, 0, 0, -1, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 7, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 26, 0, 0, 0, -1, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 26, 10, 0, 0, -1, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 14, 0, 0, 0, -1, 0, 9, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 2 },
+ { 15, 0, 0, 0, -1, 0, 9, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 2 },
+ { 3, 2, 0, 0, 0, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 1, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 2, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 3, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 4, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 5, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 6, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 7, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 8, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 9, 0, 5, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 131 },
+ { 0, 17, 0, 5, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 131 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 0, 1, 131 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 19, 12, 1, 131 },
+ { 25, 0, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 131 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 3 },
+ { 15, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 1, 3 },
+ { 0, 17, 230, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 57 },
+ { 17, 0, 0, 0, -1, 0, 25, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 6, 3, 5 },
+ { 0, 17, 230, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 5 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 151 },
+ { 0, 17, 230, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 151 },
+ { 17, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 151 },
+ { 3, 0, 0, 0, 0, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 2, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 3, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 4, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 5, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 6, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 7, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 8, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 3, 0, 0, 0, 9, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 151 },
+ { 29, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 151 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 160 },
+ { 0, 17, 230, 5, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 160 },
+ { 18, 0, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 152 },
+ { 0, 17, 230, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 152 },
+ { 3, 0, 0, 0, 0, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 2, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 3, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 4, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 5, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 6, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 7, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 8, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 3, 0, 0, 0, 9, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 152 },
+ { 27, 4, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 11, 0, 1, 152 },
+ { 18, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 163 },
+ { 17, 0, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 163 },
+ { 0, 17, 232, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 163 },
+ { 0, 17, 220, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 163 },
+ { 0, 17, 230, 5, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 163 },
+ { 3, 0, 0, 0, 0, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 2, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 3, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 4, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 5, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 6, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 7, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 8, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 3, 0, 0, 0, 9, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 163 },
+ { 18, 0, 0, 0, -1, 0, 24, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 27 },
+ { 18, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 113 },
+ { 5, 1, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 113 },
+ { 0, 17, 220, 5, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 113 },
+ { 14, 1, 0, 2, -1, 0, 18, 3, 0, { {0, 34}, {0, 0}, {0, 0}, {0, 34} }, 0, 10, 14, 7, 3, 132 },
+ { 15, 1, 0, 2, -1, 0, 18, 3, 0, { {0, 0}, {0, -34}, {0, -34}, {0, 0} }, 0, 10, 14, 6, 1, 132 },
+ { 0, 17, 230, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 132 },
+ { 0, 17, 7, 5, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 1, 132 },
+ { 17, 1, 0, 5, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 1, 132 },
+ { 3, 1, 0, 0, 0, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 2, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 3, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 4, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 5, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 6, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 7, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 8, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 3, 1, 0, 0, 9, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 1, 132 },
+ { 25, 1, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 0, 1, 132 },
+ { 5, 13, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 13, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 27, 13, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 1, 2 },
+ { 5, 13, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 13, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 18, 13, 0, 0, -1, 0, 13, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 3, 8 },
+ { 26, 10, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 8 },
+ { 29, 10, 0, 0, -1, 0, 10, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 13, 0, 0, 0, -1, 0, 0, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 0, 0 },
+ { 5, 2, 0, 0, 0, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 1, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 2, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 3, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 4, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 5, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 6, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 7, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 8, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 2, 0, 0, 9, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 5, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 23, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 7, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 13, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 10, 14, 7, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 10, 14, 7, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 18, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 6, 7, 30, 0, 1, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 34 },
+ { 29, 0, 0, 0, -1, 0, 12, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 3, 2 },
+ { 29, 0, 0, 0, -1, 0, 18, 5, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 3, 2 },
+ { 29, 10, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 17, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 28, 10, 0, 0, -1, 0, 17, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 33, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 13, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 17, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 13, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 7, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 19, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 25, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 24, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 25, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 23, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 17, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 19, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 24, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 29, 10, 0, 0, -1, 0, 25, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 32, 0, 1, 2 },
+ { 3, 2, 0, 0, 0, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 1, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 2, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 3, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 4, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 5, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 6, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 7, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 8, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 3, 2, 0, 0, 9, 0, 23, 3, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 13, 9, 3, 2 },
+ { 13, 18, 0, 0, -1, 0, 2, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 },
+ { 18, 0, 0, 0, -1, 0, 5, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 25, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 12, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 26, 5, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 1, 37 },
+ { 18, 0, 0, 0, -1, 0, 5, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 3, 37 },
+ { 18, 0, 0, 0, -1, 0, 5, 5, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 16, 8, 0, 37 },
+ { 10, 18, 0, 5, -1, 0, 5, 3, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 0, 2 },
+ { 0, 17, 0, 5, -1, 0, 7, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 23, 4, 2, 1 },
+ { 12, 0, 0, 0, -1, 0, 2, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 0, 0 }
};
Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(char32_t ucs4) noexcept
@@ -9635,7 +10487,17 @@ Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(char32_t ucs4) noexcept
return static_cast<LineBreakClass>(qGetProp(ucs4)->lineBreakClass);
}
-static const unsigned short specialCaseMap[] = {
+Q_CORE_EXPORT IdnaStatus QT_FASTCALL idnaStatus(char32_t ucs4) noexcept
+{
+ return static_cast<IdnaStatus>(qGetProp(ucs4)->idnaStatus);
+}
+
+Q_CORE_EXPORT EastAsianWidth QT_FASTCALL eastAsianWidth(char32_t ucs4) noexcept
+{
+ return static_cast<EastAsianWidth>(qGetProp(ucs4)->eastAsianWidth);
+}
+
+static constexpr unsigned short specialCaseMap[] = {
0x0, // placeholder
0x1, 0x2c65,
0x1, 0x2c66,
@@ -9942,9 +10804,9 @@ static const unsigned short specialCaseMap[] = {
0x1, 0xa64b
};
-const unsigned int MaxSpecialCaseLength = 3;
+constexpr unsigned int MaxSpecialCaseLength = 3;
-static const unsigned short uc_decomposition_trie[] = {
+static constexpr unsigned short uc_decomposition_trie[] = {
// 0 - 0x3400
1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
@@ -10084,9 +10946,9 @@ static const unsigned short uc_decomposition_trie[] = {
5356, 5356, 5356, 5356, 5356, 6380, 6636, 6892,
7148, 7404, 7660, 7916, 5356, 5356, 5356, 5356,
- 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
- 5356, 5356, 5356, 5356, 8172, 8428, 5356, 8684,
- 8940, 9196, 5356, 5356, 5356, 9452, 5356, 5356,
+ 5356, 5356, 5356, 8172, 5356, 5356, 5356, 5356,
+ 5356, 5356, 5356, 5356, 8428, 8684, 5356, 8940,
+ 9196, 9452, 5356, 5356, 5356, 9708, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
@@ -10109,13 +10971,13 @@ static const unsigned short uc_decomposition_trie[] = {
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
- 5356, 5356, 5356, 5356, 5356, 9708, 5356, 5356,
- 9964, 10220, 10476, 10732, 5356, 5356, 5356, 5356,
+ 5356, 5356, 5356, 5356, 5356, 9964, 5356, 5356,
+ 10220, 10476, 10732, 10988, 5356, 5356, 5356, 5356,
+ 5356, 5356, 5356, 5356, 11244, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
- 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
- 5356, 5356, 10988, 5356, 5356, 11244, 11500, 5356,
+ 5356, 5356, 11500, 5356, 5356, 11756, 12012, 5356,
- 5356, 5356, 5356, 5356, 5356, 5356, 5356, 11756,
+ 5356, 5356, 5356, 5356, 5356, 5356, 5356, 12268,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
@@ -10148,7 +11010,7 @@ static const unsigned short uc_decomposition_trie[] = {
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356,
- 5356, 5356, 5356, 5356, 12012, 12268, 12524, 5356,
+ 5356, 5356, 5356, 5356, 12524, 12780, 13036, 5356,
5356, 5356, 5356, 5356,
@@ -10962,8 +11824,8 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x19fe, 0x1a00, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0x19fe, 0x1a00, 0x1a02, 0xffff, 0xffff, 0xffff,
+ 0x1a04, 0x1a06, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -10976,9 +11838,9 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0x1a02, 0x1a04, 0x1a06, 0x1a08,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0x1a08, 0x1a0a, 0x1a0c, 0x1a0e,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0x1a0a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x1a10, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -10998,234 +11860,267 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x1a0c, 0x1a0e, 0x1a10, 0x1a12, 0x1a14, 0x1a16, 0x1a18, 0x1a1a,
- 0x1a1c, 0x1a1e, 0x1a20, 0x1a22, 0x1a24, 0x1a26, 0x1a28, 0x1a2a,
- 0x1a2c, 0x1a2e, 0x1a30, 0x1a32, 0x1a34, 0x1a36, 0x1a38, 0x1a3a,
- 0x1a3c, 0x1a3e, 0x1a40, 0x1a42, 0x1a44, 0x1a46, 0x1a48, 0x1a4a,
- 0x1a4c, 0x1a4e, 0x1a50, 0x1a52, 0x1a54, 0x1a56, 0x1a58, 0x1a5a,
- 0x1a5c, 0x1a5e, 0x1a60, 0x1a62, 0x1a64, 0x1a66, 0x1a68, 0x1a6a,
- 0x1a6c, 0x1a6e, 0x1a70, 0x1a72, 0x1a74, 0x1a76, 0x1a78, 0x1a7a,
- 0x1a7c, 0x1a7e, 0x1a80, 0x1a82, 0x1a84, 0x1a86, 0x1a88, 0x1a8a,
- 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, 0x1a96, 0x1a98, 0x1a9a,
- 0x1a9c, 0x1a9e, 0x1aa0, 0x1aa2, 0x1aa4, 0x1aa6, 0x1aa8, 0x1aaa,
- 0x1aac, 0x1aae, 0x1ab0, 0x1ab2, 0x1ab4, 0x1ab6, 0x1ab8, 0x1aba,
- 0x1abc, 0x1abe, 0x1ac0, 0x1ac2, 0x1ac4, 0x1ac6, 0x1ac8, 0x1aca,
- 0x1acc, 0x1ace, 0x1ad0, 0x1ad2, 0x1ad4, 0x1ad6, 0x1ad8, 0x1ada,
- 0x1adc, 0x1ade, 0x1ae0, 0x1ae2, 0x1ae4, 0x1ae6, 0x1ae8, 0x1aea,
- 0x1aec, 0x1aee, 0x1af0, 0x1af2, 0x1af4, 0x1af6, 0x1af8, 0x1afa,
- 0x1afc, 0x1afe, 0x1b00, 0x1b02, 0x1b04, 0x1b06, 0x1b08, 0x1b0a,
- 0x1b0c, 0x1b0e, 0x1b10, 0x1b12, 0x1b14, 0x1b16, 0x1b18, 0x1b1a,
- 0x1b1c, 0x1b1e, 0x1b20, 0x1b22, 0x1b24, 0x1b26, 0x1b28, 0x1b2a,
- 0x1b2c, 0x1b2e, 0x1b30, 0x1b32, 0x1b34, 0x1b36, 0x1b38, 0x1b3a,
- 0x1b3c, 0x1b3e, 0x1b40, 0x1b42, 0x1b44, 0x1b46, 0x1b48, 0x1b4a,
- 0x1b4c, 0x1b4e, 0x1b50, 0x1b52, 0x1b54, 0x1b56, 0x1b58, 0x1b5a,
- 0x1b5c, 0x1b5e, 0x1b60, 0x1b62, 0x1b64, 0x1b66, 0x1b68, 0x1b6a,
- 0x1b6c, 0x1b6e, 0x1b70, 0x1b72, 0x1b74, 0x1b76, 0x1b78, 0x1b7a,
- 0x1b7c, 0x1b7e, 0x1b80, 0x1b82, 0x1b84, 0x1b86, 0x1b88, 0x1b8a,
- 0x1b8c, 0x1b8e, 0x1b90, 0x1b92, 0x1b94, 0x1b96, 0x1b98, 0x1b9a,
- 0x1b9c, 0x1b9e, 0x1ba0, 0x1ba2, 0x1ba4, 0x1ba6, 0x1ba8, 0x1baa,
- 0x1bac, 0x1bae, 0x1bb0, 0x1bb2, 0x1bb4, 0x1bb6, 0x1bb8, 0x1bba,
- 0x1bbc, 0x1bbe, 0x1bc0, 0x1bc2, 0x1bc4, 0x1bc6, 0x1bc8, 0x1bca,
- 0x1bcc, 0x1bce, 0x1bd0, 0x1bd2, 0x1bd4, 0x1bd6, 0x1bd8, 0x1bda,
- 0x1bdc, 0x1bde, 0x1be0, 0x1be2, 0x1be4, 0x1be6, 0x1be8, 0x1bea,
- 0x1bec, 0x1bee, 0x1bf0, 0x1bf2, 0x1bf4, 0x1bf6, 0x1bf8, 0x1bfa,
- 0x1bfc, 0x1bfe, 0x1c00, 0x1c02, 0x1c04, 0x1c06, 0x1c08, 0x1c0a,
+ 0x1a12, 0x1a14, 0x1a16, 0x1a18, 0x1a1a, 0x1a1c, 0x1a1e, 0x1a20,
+ 0x1a22, 0x1a24, 0x1a26, 0x1a28, 0x1a2a, 0x1a2c, 0x1a2e, 0x1a30,
+ 0x1a32, 0x1a34, 0x1a36, 0x1a38, 0x1a3a, 0x1a3c, 0x1a3e, 0x1a40,
+ 0x1a42, 0x1a44, 0x1a46, 0x1a48, 0x1a4a, 0x1a4c, 0x1a4e, 0x1a50,
+ 0x1a52, 0x1a54, 0x1a56, 0x1a58, 0x1a5a, 0x1a5c, 0x1a5e, 0x1a60,
+ 0x1a62, 0x1a64, 0x1a66, 0x1a68, 0x1a6a, 0x1a6c, 0x1a6e, 0x1a70,
+ 0x1a72, 0x1a74, 0x1a76, 0x1a78, 0x1a7a, 0x1a7c, 0x1a7e, 0x1a80,
+ 0x1a82, 0x1a84, 0x1a86, 0x1a88, 0x1a8a, 0x1a8c, 0x1a8e, 0x1a90,
+ 0x1a92, 0x1a94, 0x1a96, 0x1a98, 0x1a9a, 0x1a9c, 0x1a9e, 0x1aa0,
+ 0x1aa2, 0x1aa4, 0x1aa6, 0x1aa8, 0x1aaa, 0x1aac, 0x1aae, 0x1ab0,
+ 0x1ab2, 0x1ab4, 0x1ab6, 0x1ab8, 0x1aba, 0x1abc, 0x1abe, 0x1ac0,
+ 0x1ac2, 0x1ac4, 0x1ac6, 0x1ac8, 0x1aca, 0x1acc, 0x1ace, 0x1ad0,
+ 0x1ad2, 0x1ad4, 0x1ad6, 0x1ad8, 0x1ada, 0x1adc, 0x1ade, 0x1ae0,
+ 0x1ae2, 0x1ae4, 0x1ae6, 0x1ae8, 0x1aea, 0x1aec, 0x1aee, 0x1af0,
+ 0x1af2, 0x1af4, 0x1af6, 0x1af8, 0x1afa, 0x1afc, 0x1afe, 0x1b00,
+ 0x1b02, 0x1b04, 0x1b06, 0x1b08, 0x1b0a, 0x1b0c, 0x1b0e, 0x1b10,
+ 0x1b12, 0x1b14, 0x1b16, 0x1b18, 0x1b1a, 0x1b1c, 0x1b1e, 0x1b20,
+ 0x1b22, 0x1b24, 0x1b26, 0x1b28, 0x1b2a, 0x1b2c, 0x1b2e, 0x1b30,
+ 0x1b32, 0x1b34, 0x1b36, 0x1b38, 0x1b3a, 0x1b3c, 0x1b3e, 0x1b40,
+ 0x1b42, 0x1b44, 0x1b46, 0x1b48, 0x1b4a, 0x1b4c, 0x1b4e, 0x1b50,
+ 0x1b52, 0x1b54, 0x1b56, 0x1b58, 0x1b5a, 0x1b5c, 0x1b5e, 0x1b60,
+ 0x1b62, 0x1b64, 0x1b66, 0x1b68, 0x1b6a, 0x1b6c, 0x1b6e, 0x1b70,
+ 0x1b72, 0x1b74, 0x1b76, 0x1b78, 0x1b7a, 0x1b7c, 0x1b7e, 0x1b80,
+ 0x1b82, 0x1b84, 0x1b86, 0x1b88, 0x1b8a, 0x1b8c, 0x1b8e, 0x1b90,
+ 0x1b92, 0x1b94, 0x1b96, 0x1b98, 0x1b9a, 0x1b9c, 0x1b9e, 0x1ba0,
+ 0x1ba2, 0x1ba4, 0x1ba6, 0x1ba8, 0x1baa, 0x1bac, 0x1bae, 0x1bb0,
+ 0x1bb2, 0x1bb4, 0x1bb6, 0x1bb8, 0x1bba, 0x1bbc, 0x1bbe, 0x1bc0,
+ 0x1bc2, 0x1bc4, 0x1bc6, 0x1bc8, 0x1bca, 0x1bcc, 0x1bce, 0x1bd0,
+ 0x1bd2, 0x1bd4, 0x1bd6, 0x1bd8, 0x1bda, 0x1bdc, 0x1bde, 0x1be0,
+ 0x1be2, 0x1be4, 0x1be6, 0x1be8, 0x1bea, 0x1bec, 0x1bee, 0x1bf0,
+ 0x1bf2, 0x1bf4, 0x1bf6, 0x1bf8, 0x1bfa, 0x1bfc, 0x1bfe, 0x1c00,
+ 0x1c02, 0x1c04, 0x1c06, 0x1c08, 0x1c0a, 0x1c0c, 0x1c0e, 0x1c10,
- 0x1c0c, 0x1c0e, 0x1c10, 0x1c12, 0x1c14, 0x1c16, 0x1c18, 0x1c1a,
- 0x1c1c, 0x1c1e, 0x1c20, 0x1c22, 0x1c24, 0x1c26, 0xffff, 0xffff,
- 0x1c28, 0xffff, 0x1c2a, 0xffff, 0xffff, 0x1c2c, 0x1c2e, 0x1c30,
- 0x1c32, 0x1c34, 0x1c36, 0x1c38, 0x1c3a, 0x1c3c, 0x1c3e, 0xffff,
- 0x1c40, 0xffff, 0x1c42, 0xffff, 0xffff, 0x1c44, 0x1c46, 0xffff,
- 0xffff, 0xffff, 0x1c48, 0x1c4a, 0x1c4c, 0x1c4e, 0x1c50, 0x1c52,
- 0x1c54, 0x1c56, 0x1c58, 0x1c5a, 0x1c5c, 0x1c5e, 0x1c60, 0x1c62,
- 0x1c64, 0x1c66, 0x1c68, 0x1c6a, 0x1c6c, 0x1c6e, 0x1c70, 0x1c72,
- 0x1c74, 0x1c76, 0x1c78, 0x1c7a, 0x1c7c, 0x1c7e, 0x1c80, 0x1c82,
- 0x1c84, 0x1c86, 0x1c88, 0x1c8a, 0x1c8c, 0x1c8e, 0x1c90, 0x1c92,
- 0x1c94, 0x1c96, 0x1c98, 0x1c9a, 0x1c9c, 0x1c9e, 0x1ca0, 0x1ca2,
- 0x1ca4, 0x1ca6, 0x1ca8, 0x1caa, 0x1cac, 0x1cae, 0x1cb0, 0x1cb2,
- 0x1cb4, 0x1cb6, 0x1cb8, 0x1cba, 0x1cbc, 0x1cbe, 0x1cc0, 0x1cc2,
- 0x1cc4, 0x1cc6, 0x1cc8, 0x1cca, 0x1ccc, 0x1ccf, 0xffff, 0xffff,
- 0x1cd1, 0x1cd3, 0x1cd5, 0x1cd7, 0x1cd9, 0x1cdb, 0x1cdd, 0x1cdf,
- 0x1ce1, 0x1ce3, 0x1ce5, 0x1ce7, 0x1ce9, 0x1ceb, 0x1ced, 0x1cef,
- 0x1cf1, 0x1cf3, 0x1cf5, 0x1cf7, 0x1cf9, 0x1cfb, 0x1cfd, 0x1cff,
- 0x1d01, 0x1d03, 0x1d05, 0x1d07, 0x1d09, 0x1d0b, 0x1d0d, 0x1d0f,
- 0x1d11, 0x1d13, 0x1d15, 0x1d17, 0x1d19, 0x1d1b, 0x1d1d, 0x1d1f,
- 0x1d21, 0x1d23, 0x1d25, 0x1d27, 0x1d29, 0x1d2b, 0x1d2d, 0x1d2f,
- 0x1d31, 0x1d33, 0x1d35, 0x1d37, 0x1d39, 0x1d3b, 0x1d3d, 0x1d3f,
- 0x1d41, 0x1d43, 0x1d45, 0x1d47, 0x1d49, 0x1d4b, 0x1d4d, 0x1d4f,
- 0x1d51, 0x1d53, 0x1d55, 0x1d57, 0x1d59, 0x1d5b, 0x1d5d, 0x1d5f,
- 0x1d61, 0x1d63, 0x1d65, 0x1d67, 0x1d69, 0x1d6b, 0x1d6d, 0x1d6f,
- 0x1d71, 0x1d73, 0x1d75, 0x1d77, 0x1d79, 0x1d7b, 0x1d7d, 0x1d7f,
- 0x1d81, 0x1d83, 0x1d85, 0x1d87, 0x1d89, 0x1d8b, 0x1d8d, 0x1d8f,
- 0x1d92, 0x1d95, 0x1d98, 0x1d9a, 0x1d9c, 0x1d9e, 0x1da1, 0x1da4,
- 0x1da7, 0x1da9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x1c12, 0x1c14, 0x1c16, 0x1c18, 0x1c1a, 0x1c1c, 0x1c1e, 0x1c20,
+ 0x1c22, 0x1c24, 0x1c26, 0x1c28, 0x1c2a, 0x1c2c, 0xffff, 0xffff,
+ 0x1c2e, 0xffff, 0x1c30, 0xffff, 0xffff, 0x1c32, 0x1c34, 0x1c36,
+ 0x1c38, 0x1c3a, 0x1c3c, 0x1c3e, 0x1c40, 0x1c42, 0x1c44, 0xffff,
+ 0x1c46, 0xffff, 0x1c48, 0xffff, 0xffff, 0x1c4a, 0x1c4c, 0xffff,
+ 0xffff, 0xffff, 0x1c4e, 0x1c50, 0x1c52, 0x1c54, 0x1c56, 0x1c58,
+ 0x1c5a, 0x1c5c, 0x1c5e, 0x1c60, 0x1c62, 0x1c64, 0x1c66, 0x1c68,
+ 0x1c6a, 0x1c6c, 0x1c6e, 0x1c70, 0x1c72, 0x1c74, 0x1c76, 0x1c78,
+ 0x1c7a, 0x1c7c, 0x1c7e, 0x1c80, 0x1c82, 0x1c84, 0x1c86, 0x1c88,
+ 0x1c8a, 0x1c8c, 0x1c8e, 0x1c90, 0x1c92, 0x1c94, 0x1c96, 0x1c98,
+ 0x1c9a, 0x1c9c, 0x1c9e, 0x1ca0, 0x1ca2, 0x1ca4, 0x1ca6, 0x1ca8,
+ 0x1caa, 0x1cac, 0x1cae, 0x1cb0, 0x1cb2, 0x1cb4, 0x1cb6, 0x1cb8,
+ 0x1cba, 0x1cbc, 0x1cbe, 0x1cc0, 0x1cc2, 0x1cc4, 0x1cc6, 0x1cc8,
+ 0x1cca, 0x1ccc, 0x1cce, 0x1cd0, 0x1cd2, 0x1cd5, 0xffff, 0xffff,
+ 0x1cd7, 0x1cd9, 0x1cdb, 0x1cdd, 0x1cdf, 0x1ce1, 0x1ce3, 0x1ce5,
+ 0x1ce7, 0x1ce9, 0x1ceb, 0x1ced, 0x1cef, 0x1cf1, 0x1cf3, 0x1cf5,
+ 0x1cf7, 0x1cf9, 0x1cfb, 0x1cfd, 0x1cff, 0x1d01, 0x1d03, 0x1d05,
+ 0x1d07, 0x1d09, 0x1d0b, 0x1d0d, 0x1d0f, 0x1d11, 0x1d13, 0x1d15,
+ 0x1d17, 0x1d19, 0x1d1b, 0x1d1d, 0x1d1f, 0x1d21, 0x1d23, 0x1d25,
+ 0x1d27, 0x1d29, 0x1d2b, 0x1d2d, 0x1d2f, 0x1d31, 0x1d33, 0x1d35,
+ 0x1d37, 0x1d39, 0x1d3b, 0x1d3d, 0x1d3f, 0x1d41, 0x1d43, 0x1d45,
+ 0x1d47, 0x1d49, 0x1d4b, 0x1d4d, 0x1d4f, 0x1d51, 0x1d53, 0x1d55,
+ 0x1d57, 0x1d59, 0x1d5b, 0x1d5d, 0x1d5f, 0x1d61, 0x1d63, 0x1d65,
+ 0x1d67, 0x1d69, 0x1d6b, 0x1d6d, 0x1d6f, 0x1d71, 0x1d73, 0x1d75,
+ 0x1d77, 0x1d79, 0x1d7b, 0x1d7d, 0x1d7f, 0x1d81, 0x1d83, 0x1d85,
+ 0x1d87, 0x1d89, 0x1d8b, 0x1d8d, 0x1d8f, 0x1d91, 0x1d93, 0x1d95,
+ 0x1d98, 0x1d9b, 0x1d9e, 0x1da0, 0x1da2, 0x1da4, 0x1da7, 0x1daa,
+ 0x1dad, 0x1daf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x1dab, 0x1dae, 0x1db1, 0x1db4, 0x1db8, 0x1dbc, 0x1dbf, 0xffff,
+ 0x1db1, 0x1db4, 0x1db7, 0x1dba, 0x1dbe, 0x1dc2, 0x1dc5, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0x1dc8, 0x1dcb, 0x1dce, 0x1dd1, 0x1dd4,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dd7, 0xffff, 0x1dda,
+ 0x1ddd, 0x1ddf, 0x1de1, 0x1de3, 0x1de5, 0x1de7, 0x1de9, 0x1deb,
+ 0x1ded, 0x1def, 0x1df1, 0x1df4, 0x1df7, 0x1dfa, 0x1dfd, 0x1e00,
+ 0x1e03, 0x1e06, 0x1e09, 0x1e0c, 0x1e0f, 0x1e12, 0x1e15, 0xffff,
+ 0x1e18, 0x1e1b, 0x1e1e, 0x1e21, 0x1e24, 0xffff, 0x1e27, 0xffff,
+ 0x1e2a, 0x1e2d, 0xffff, 0x1e30, 0x1e33, 0xffff, 0x1e36, 0x1e39,
+ 0x1e3c, 0x1e3f, 0x1e42, 0x1e45, 0x1e48, 0x1e4b, 0x1e4e, 0x1e51,
+ 0x1e54, 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e60, 0x1e62,
+ 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72,
+ 0x1e74, 0x1e76, 0x1e78, 0x1e7a, 0x1e7c, 0x1e7e, 0x1e80, 0x1e82,
+ 0x1e84, 0x1e86, 0x1e88, 0x1e8a, 0x1e8c, 0x1e8e, 0x1e90, 0x1e92,
+ 0x1e94, 0x1e96, 0x1e98, 0x1e9a, 0x1e9c, 0x1e9e, 0x1ea0, 0x1ea2,
+ 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, 0x1eae, 0x1eb0, 0x1eb2,
+ 0x1eb4, 0x1eb6, 0x1eb8, 0x1eba, 0x1ebc, 0x1ebe, 0x1ec0, 0x1ec2,
+ 0x1ec4, 0x1ec6, 0x1ec8, 0x1eca, 0x1ecc, 0x1ece, 0x1ed0, 0x1ed2,
+ 0x1ed4, 0x1ed6, 0x1ed8, 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2,
+ 0x1ee4, 0x1ee6, 0x1ee8, 0x1eea, 0x1eec, 0x1eee, 0x1ef0, 0x1ef2,
+ 0x1ef4, 0x1ef6, 0x1ef8, 0x1efa, 0x1efc, 0x1efe, 0x1f00, 0x1f02,
+ 0x1f04, 0x1f06, 0x1f08, 0x1f0a, 0x1f0c, 0x1f0e, 0x1f10, 0x1f12,
+ 0x1f14, 0x1f16, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0x1f18, 0x1f1a, 0x1f1c, 0x1f1e, 0x1f20,
+ 0x1f22, 0x1f24, 0x1f26, 0x1f28, 0x1f2a, 0x1f2c, 0x1f2e, 0x1f30,
+ 0x1f32, 0x1f34, 0x1f36, 0x1f38, 0x1f3a, 0x1f3c, 0x1f3e, 0x1f40,
+ 0x1f42, 0x1f44, 0x1f46, 0x1f49, 0x1f4c, 0x1f4f, 0x1f52, 0x1f55,
+ 0x1f58, 0x1f5b, 0x1f5e, 0x1f61, 0x1f64, 0x1f67, 0x1f6a, 0x1f6d,
+ 0x1f70, 0x1f73, 0x1f76, 0x1f79, 0x1f7c, 0x1f7e, 0x1f80, 0x1f82,
+
+ 0x1f84, 0x1f87, 0x1f8a, 0x1f8d, 0x1f90, 0x1f93, 0x1f96, 0x1f99,
+ 0x1f9c, 0x1f9f, 0x1fa2, 0x1fa5, 0x1fa8, 0x1fab, 0x1fae, 0x1fb1,
+ 0x1fb4, 0x1fb7, 0x1fba, 0x1fbd, 0x1fc0, 0x1fc3, 0x1fc6, 0x1fc9,
+ 0x1fcc, 0x1fcf, 0x1fd2, 0x1fd5, 0x1fd8, 0x1fdb, 0x1fde, 0x1fe1,
+ 0x1fe4, 0x1fe7, 0x1fea, 0x1fed, 0x1ff0, 0x1ff3, 0x1ff6, 0x1ff9,
+ 0x1ffc, 0x1fff, 0x2002, 0x2005, 0x2008, 0x200b, 0x200e, 0x2011,
+ 0x2014, 0x2017, 0x201a, 0x201d, 0x2020, 0x2023, 0x2026, 0x2029,
+ 0x202c, 0x202f, 0x2032, 0x2035, 0x2038, 0x203b, 0x203e, 0x2041,
+ 0x2044, 0x2047, 0x204a, 0x204d, 0x2050, 0x2053, 0x2056, 0x2059,
+ 0x205c, 0x205f, 0x2062, 0x2065, 0x2068, 0x206b, 0x206e, 0x2071,
+ 0x2074, 0x2077, 0x207a, 0x207d, 0x2080, 0x2083, 0x2086, 0x2089,
+ 0x208c, 0x208f, 0x2092, 0x2095, 0x2098, 0x209b, 0x209e, 0x20a2,
+ 0x20a6, 0x20aa, 0x20ae, 0x20b2, 0x20b6, 0x20b9, 0x20bc, 0x20bf,
+ 0x20c2, 0x20c5, 0x20c8, 0x20cb, 0x20ce, 0x20d1, 0x20d4, 0x20d7,
+ 0x20da, 0x20dd, 0x20e0, 0x20e3, 0x20e6, 0x20e9, 0x20ec, 0x20ef,
+ 0x20f2, 0x20f5, 0x20f8, 0x20fb, 0x20fe, 0x2101, 0x2104, 0x2107,
+ 0x210a, 0x210d, 0x2110, 0x2113, 0x2116, 0x2119, 0x211c, 0x211f,
+ 0x2122, 0x2125, 0x2128, 0x212b, 0x212e, 0x2131, 0x2134, 0x2137,
+ 0x213a, 0x213d, 0x2140, 0x2143, 0x2146, 0x2149, 0x214c, 0x214f,
+ 0x2152, 0x2155, 0x2158, 0x215b, 0x215e, 0x2161, 0x2164, 0x2167,
+ 0x216a, 0x216d, 0x2170, 0x2173, 0x2176, 0x2179, 0x217c, 0x217f,
+ 0x2182, 0x2185, 0x2188, 0x218b, 0x218e, 0x2191, 0x2194, 0x2197,
+ 0x219a, 0x219d, 0x21a0, 0x21a3, 0x21a6, 0x21a9, 0x21ac, 0x21af,
+ 0x21b2, 0x21b5, 0x21b8, 0x21bb, 0x21be, 0x21c1, 0x21c4, 0x21c7,
+ 0x21ca, 0x21cd, 0x21d0, 0x21d3, 0x21d6, 0x21d9, 0x21dc, 0x21df,
+ 0x21e2, 0x21e5, 0x21e8, 0x21eb, 0x21ee, 0x21f1, 0x21f4, 0x21f7,
+ 0x21fa, 0x21fd, 0x2200, 0x2203, 0x2206, 0x2209, 0x220c, 0x220f,
+ 0x2212, 0x2215, 0x2218, 0x221b, 0x221e, 0x2221, 0x2224, 0x2227,
+ 0x222a, 0x222d, 0x2230, 0x2233, 0x2236, 0x2239, 0x223c, 0x223f,
+ 0x2242, 0x2245, 0x2248, 0x224b, 0x224e, 0x2251, 0x2254, 0x2257,
+ 0x225a, 0x225d, 0x2260, 0x2264, 0x2268, 0x226c, 0x226f, 0x2272,
+ 0x2275, 0x2278, 0x227b, 0x227e, 0x2281, 0x2284, 0x2287, 0x228a,
+
+ 0x228d, 0x2290, 0x2293, 0x2296, 0x2299, 0x229c, 0x229f, 0x22a2,
+ 0x22a5, 0x22a8, 0x22ab, 0x22ae, 0x22b1, 0x22b4, 0x22b7, 0x22ba,
+ 0x22bd, 0x22c0, 0x22c3, 0x22c6, 0x22c9, 0x22cc, 0x22cf, 0x22d2,
+ 0x22d5, 0x22d8, 0x22db, 0x22de, 0x22e1, 0x22e4, 0x22e7, 0x22ea,
+ 0x22ed, 0x22f0, 0x22f3, 0x22f6, 0x22f9, 0x22fc, 0x22ff, 0x2302,
+ 0x2305, 0x2308, 0x230b, 0x230e, 0x2311, 0x2314, 0x2317, 0x231a,
+ 0x231d, 0x2320, 0x2323, 0x2326, 0x2329, 0x232c, 0x232f, 0x2332,
+ 0x2335, 0x2338, 0x233b, 0x233e, 0x2341, 0x2344, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x2347, 0x234b, 0x234f, 0x2353, 0x2357, 0x235b, 0x235f, 0x2363,
+ 0x2367, 0x236b, 0x236f, 0x2373, 0x2377, 0x237b, 0x237f, 0x2383,
+ 0x2387, 0x238b, 0x238f, 0x2393, 0x2397, 0x239b, 0x239f, 0x23a3,
+ 0x23a7, 0x23ab, 0x23af, 0x23b3, 0x23b7, 0x23bb, 0x23bf, 0x23c3,
+ 0x23c7, 0x23cb, 0x23cf, 0x23d3, 0x23d7, 0x23db, 0x23df, 0x23e3,
+ 0x23e7, 0x23eb, 0x23ef, 0x23f3, 0x23f7, 0x23fb, 0x23ff, 0x2403,
+ 0x2407, 0x240b, 0x240f, 0x2413, 0x2417, 0x241b, 0x241f, 0x2423,
+ 0x2427, 0x242b, 0x242f, 0x2433, 0x2437, 0x243b, 0x243f, 0x2443,
+ 0xffff, 0xffff, 0x2447, 0x244b, 0x244f, 0x2453, 0x2457, 0x245b,
+ 0x245f, 0x2463, 0x2467, 0x246b, 0x246f, 0x2473, 0x2477, 0x247b,
+ 0x247f, 0x2483, 0x2487, 0x248b, 0x248f, 0x2493, 0x2497, 0x249b,
+ 0x249f, 0x24a3, 0x24a7, 0x24ab, 0x24af, 0x24b3, 0x24b7, 0x24bb,
+ 0x24bf, 0x24c3, 0x24c7, 0x24cb, 0x24cf, 0x24d3, 0x24d7, 0x24db,
+ 0x24df, 0x24e3, 0x24e7, 0x24eb, 0x24ef, 0x24f3, 0x24f7, 0x24fb,
+ 0x24ff, 0x2503, 0x2507, 0x250b, 0x250f, 0x2513, 0x2517, 0x251b,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0x1dc2, 0x1dc5, 0x1dc8, 0x1dcb, 0x1dce,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dd1, 0xffff, 0x1dd4,
- 0x1dd7, 0x1dd9, 0x1ddb, 0x1ddd, 0x1ddf, 0x1de1, 0x1de3, 0x1de5,
- 0x1de7, 0x1de9, 0x1deb, 0x1dee, 0x1df1, 0x1df4, 0x1df7, 0x1dfa,
- 0x1dfd, 0x1e00, 0x1e03, 0x1e06, 0x1e09, 0x1e0c, 0x1e0f, 0xffff,
- 0x1e12, 0x1e15, 0x1e18, 0x1e1b, 0x1e1e, 0xffff, 0x1e21, 0xffff,
- 0x1e24, 0x1e27, 0xffff, 0x1e2a, 0x1e2d, 0xffff, 0x1e30, 0x1e33,
- 0x1e36, 0x1e39, 0x1e3c, 0x1e3f, 0x1e42, 0x1e45, 0x1e48, 0x1e4b,
- 0x1e4e, 0x1e50, 0x1e52, 0x1e54, 0x1e56, 0x1e58, 0x1e5a, 0x1e5c,
- 0x1e5e, 0x1e60, 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c,
- 0x1e6e, 0x1e70, 0x1e72, 0x1e74, 0x1e76, 0x1e78, 0x1e7a, 0x1e7c,
- 0x1e7e, 0x1e80, 0x1e82, 0x1e84, 0x1e86, 0x1e88, 0x1e8a, 0x1e8c,
- 0x1e8e, 0x1e90, 0x1e92, 0x1e94, 0x1e96, 0x1e98, 0x1e9a, 0x1e9c,
- 0x1e9e, 0x1ea0, 0x1ea2, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac,
- 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, 0x1eb8, 0x1eba, 0x1ebc,
- 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ec8, 0x1eca, 0x1ecc,
- 0x1ece, 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1eda, 0x1edc,
- 0x1ede, 0x1ee0, 0x1ee2, 0x1ee4, 0x1ee6, 0x1ee8, 0x1eea, 0x1eec,
- 0x1eee, 0x1ef0, 0x1ef2, 0x1ef4, 0x1ef6, 0x1ef8, 0x1efa, 0x1efc,
- 0x1efe, 0x1f00, 0x1f02, 0x1f04, 0x1f06, 0x1f08, 0x1f0a, 0x1f0c,
- 0x1f0e, 0x1f10, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0x1f12, 0x1f14, 0x1f16, 0x1f18, 0x1f1a,
- 0x1f1c, 0x1f1e, 0x1f20, 0x1f22, 0x1f24, 0x1f26, 0x1f28, 0x1f2a,
- 0x1f2c, 0x1f2e, 0x1f30, 0x1f32, 0x1f34, 0x1f36, 0x1f38, 0x1f3a,
- 0x1f3c, 0x1f3e, 0x1f40, 0x1f43, 0x1f46, 0x1f49, 0x1f4c, 0x1f4f,
- 0x1f52, 0x1f55, 0x1f58, 0x1f5b, 0x1f5e, 0x1f61, 0x1f64, 0x1f67,
- 0x1f6a, 0x1f6d, 0x1f70, 0x1f73, 0x1f76, 0x1f78, 0x1f7a, 0x1f7c,
-
- 0x1f7e, 0x1f81, 0x1f84, 0x1f87, 0x1f8a, 0x1f8d, 0x1f90, 0x1f93,
- 0x1f96, 0x1f99, 0x1f9c, 0x1f9f, 0x1fa2, 0x1fa5, 0x1fa8, 0x1fab,
- 0x1fae, 0x1fb1, 0x1fb4, 0x1fb7, 0x1fba, 0x1fbd, 0x1fc0, 0x1fc3,
- 0x1fc6, 0x1fc9, 0x1fcc, 0x1fcf, 0x1fd2, 0x1fd5, 0x1fd8, 0x1fdb,
- 0x1fde, 0x1fe1, 0x1fe4, 0x1fe7, 0x1fea, 0x1fed, 0x1ff0, 0x1ff3,
- 0x1ff6, 0x1ff9, 0x1ffc, 0x1fff, 0x2002, 0x2005, 0x2008, 0x200b,
- 0x200e, 0x2011, 0x2014, 0x2017, 0x201a, 0x201d, 0x2020, 0x2023,
- 0x2026, 0x2029, 0x202c, 0x202f, 0x2032, 0x2035, 0x2038, 0x203b,
- 0x203e, 0x2041, 0x2044, 0x2047, 0x204a, 0x204d, 0x2050, 0x2053,
- 0x2056, 0x2059, 0x205c, 0x205f, 0x2062, 0x2065, 0x2068, 0x206b,
- 0x206e, 0x2071, 0x2074, 0x2077, 0x207a, 0x207d, 0x2080, 0x2083,
- 0x2086, 0x2089, 0x208c, 0x208f, 0x2092, 0x2095, 0x2098, 0x209c,
- 0x20a0, 0x20a4, 0x20a8, 0x20ac, 0x20b0, 0x20b3, 0x20b6, 0x20b9,
- 0x20bc, 0x20bf, 0x20c2, 0x20c5, 0x20c8, 0x20cb, 0x20ce, 0x20d1,
- 0x20d4, 0x20d7, 0x20da, 0x20dd, 0x20e0, 0x20e3, 0x20e6, 0x20e9,
- 0x20ec, 0x20ef, 0x20f2, 0x20f5, 0x20f8, 0x20fb, 0x20fe, 0x2101,
- 0x2104, 0x2107, 0x210a, 0x210d, 0x2110, 0x2113, 0x2116, 0x2119,
- 0x211c, 0x211f, 0x2122, 0x2125, 0x2128, 0x212b, 0x212e, 0x2131,
- 0x2134, 0x2137, 0x213a, 0x213d, 0x2140, 0x2143, 0x2146, 0x2149,
- 0x214c, 0x214f, 0x2152, 0x2155, 0x2158, 0x215b, 0x215e, 0x2161,
- 0x2164, 0x2167, 0x216a, 0x216d, 0x2170, 0x2173, 0x2176, 0x2179,
- 0x217c, 0x217f, 0x2182, 0x2185, 0x2188, 0x218b, 0x218e, 0x2191,
- 0x2194, 0x2197, 0x219a, 0x219d, 0x21a0, 0x21a3, 0x21a6, 0x21a9,
- 0x21ac, 0x21af, 0x21b2, 0x21b5, 0x21b8, 0x21bb, 0x21be, 0x21c1,
- 0x21c4, 0x21c7, 0x21ca, 0x21cd, 0x21d0, 0x21d3, 0x21d6, 0x21d9,
- 0x21dc, 0x21df, 0x21e2, 0x21e5, 0x21e8, 0x21eb, 0x21ee, 0x21f1,
- 0x21f4, 0x21f7, 0x21fa, 0x21fd, 0x2200, 0x2203, 0x2206, 0x2209,
- 0x220c, 0x220f, 0x2212, 0x2215, 0x2218, 0x221b, 0x221e, 0x2221,
- 0x2224, 0x2227, 0x222a, 0x222d, 0x2230, 0x2233, 0x2236, 0x2239,
- 0x223c, 0x223f, 0x2242, 0x2245, 0x2248, 0x224b, 0x224e, 0x2251,
- 0x2254, 0x2257, 0x225a, 0x225e, 0x2262, 0x2266, 0x2269, 0x226c,
- 0x226f, 0x2272, 0x2275, 0x2278, 0x227b, 0x227e, 0x2281, 0x2284,
-
- 0x2287, 0x228a, 0x228d, 0x2290, 0x2293, 0x2296, 0x2299, 0x229c,
- 0x229f, 0x22a2, 0x22a5, 0x22a8, 0x22ab, 0x22ae, 0x22b1, 0x22b4,
- 0x22b7, 0x22ba, 0x22bd, 0x22c0, 0x22c3, 0x22c6, 0x22c9, 0x22cc,
- 0x22cf, 0x22d2, 0x22d5, 0x22d8, 0x22db, 0x22de, 0x22e1, 0x22e4,
- 0x22e7, 0x22ea, 0x22ed, 0x22f0, 0x22f3, 0x22f6, 0x22f9, 0x22fc,
- 0x22ff, 0x2302, 0x2305, 0x2308, 0x230b, 0x230e, 0x2311, 0x2314,
- 0x2317, 0x231a, 0x231d, 0x2320, 0x2323, 0x2326, 0x2329, 0x232c,
- 0x232f, 0x2332, 0x2335, 0x2338, 0x233b, 0x233e, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x2341, 0x2345, 0x2349, 0x234d, 0x2351, 0x2355, 0x2359, 0x235d,
- 0x2361, 0x2365, 0x2369, 0x236d, 0x2371, 0x2375, 0x2379, 0x237d,
- 0x2381, 0x2385, 0x2389, 0x238d, 0x2391, 0x2395, 0x2399, 0x239d,
- 0x23a1, 0x23a5, 0x23a9, 0x23ad, 0x23b1, 0x23b5, 0x23b9, 0x23bd,
- 0x23c1, 0x23c5, 0x23c9, 0x23cd, 0x23d1, 0x23d5, 0x23d9, 0x23dd,
- 0x23e1, 0x23e5, 0x23e9, 0x23ed, 0x23f1, 0x23f5, 0x23f9, 0x23fd,
- 0x2401, 0x2405, 0x2409, 0x240d, 0x2411, 0x2415, 0x2419, 0x241d,
- 0x2421, 0x2425, 0x2429, 0x242d, 0x2431, 0x2435, 0x2439, 0x243d,
- 0xffff, 0xffff, 0x2441, 0x2445, 0x2449, 0x244d, 0x2451, 0x2455,
- 0x2459, 0x245d, 0x2461, 0x2465, 0x2469, 0x246d, 0x2471, 0x2475,
- 0x2479, 0x247d, 0x2481, 0x2485, 0x2489, 0x248d, 0x2491, 0x2495,
- 0x2499, 0x249d, 0x24a1, 0x24a5, 0x24a9, 0x24ad, 0x24b1, 0x24b5,
- 0x24b9, 0x24bd, 0x24c1, 0x24c5, 0x24c9, 0x24cd, 0x24d1, 0x24d5,
- 0x24d9, 0x24dd, 0x24e1, 0x24e5, 0x24e9, 0x24ed, 0x24f1, 0x24f5,
- 0x24f9, 0x24fd, 0x2501, 0x2505, 0x2509, 0x250d, 0x2511, 0x2515,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x251f, 0x2523, 0x2527, 0x252c, 0x2531, 0x2536, 0x253b, 0x2540,
+ 0x2545, 0x254a, 0x254e, 0x2561, 0x256a, 0xffff, 0xffff, 0xffff,
+
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x256f, 0x2571, 0x2573, 0x2575, 0x2577, 0x2579, 0x257b, 0x257d,
+ 0x257f, 0x2581, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x2519, 0x251d, 0x2521, 0x2526, 0x252b, 0x2530, 0x2535, 0x253a,
- 0x253f, 0x2544, 0x2548, 0x255b, 0x2564, 0xffff, 0xffff, 0xffff,
+ 0x2583, 0x2585, 0x2587, 0x2589, 0x258b, 0x258d, 0x258f, 0x2591,
+ 0x2593, 0x2595, 0x2597, 0x2599, 0x259b, 0x259d, 0x259f, 0x25a1,
+ 0x25a3, 0x25a5, 0x25a7, 0x25a9, 0x25ab, 0xffff, 0xffff, 0x25ad,
+ 0x25af, 0x25b1, 0x25b3, 0x25b5, 0x25b7, 0x25b9, 0x25bb, 0x25bd,
+ 0x25bf, 0x25c1, 0x25c3, 0xffff, 0x25c5, 0x25c7, 0x25c9, 0x25cb,
+ 0x25cd, 0x25cf, 0x25d1, 0x25d3, 0x25d5, 0x25d7, 0x25d9, 0x25db,
+ 0x25dd, 0x25df, 0x25e1, 0x25e3, 0x25e5, 0x25e7, 0x25e9, 0xffff,
+ 0x25eb, 0x25ed, 0x25ef, 0x25f1, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x25f3, 0x25f6, 0x25f9, 0xffff, 0x25fc, 0xffff, 0x25ff, 0x2602,
+ 0x2605, 0x2608, 0x260b, 0x260e, 0x2611, 0x2614, 0x2617, 0x261a,
+ 0x261d, 0x261f, 0x2621, 0x2623, 0x2625, 0x2627, 0x2629, 0x262b,
+ 0x262d, 0x262f, 0x2631, 0x2633, 0x2635, 0x2637, 0x2639, 0x263b,
+ 0x263d, 0x263f, 0x2641, 0x2643, 0x2645, 0x2647, 0x2649, 0x264b,
+ 0x264d, 0x264f, 0x2651, 0x2653, 0x2655, 0x2657, 0x2659, 0x265b,
+ 0x265d, 0x265f, 0x2661, 0x2663, 0x2665, 0x2667, 0x2669, 0x266b,
+ 0x266d, 0x266f, 0x2671, 0x2673, 0x2675, 0x2677, 0x2679, 0x267b,
+ 0x267d, 0x267f, 0x2681, 0x2683, 0x2685, 0x2687, 0x2689, 0x268b,
+ 0x268d, 0x268f, 0x2691, 0x2693, 0x2695, 0x2697, 0x2699, 0x269b,
+ 0x269d, 0x269f, 0x26a1, 0x26a3, 0x26a5, 0x26a7, 0x26a9, 0x26ab,
+ 0x26ad, 0x26af, 0x26b1, 0x26b3, 0x26b5, 0x26b7, 0x26b9, 0x26bb,
+ 0x26bd, 0x26bf, 0x26c1, 0x26c3, 0x26c5, 0x26c7, 0x26c9, 0x26cb,
+ 0x26cd, 0x26cf, 0x26d1, 0x26d3, 0x26d5, 0x26d7, 0x26d9, 0x26db,
+ 0x26dd, 0x26df, 0x26e1, 0x26e3, 0x26e5, 0x26e7, 0x26e9, 0x26eb,
+ 0x26ed, 0x26ef, 0x26f1, 0x26f3, 0x26f5, 0x26f7, 0x26f9, 0x26fb,
+ 0x26fd, 0x26ff, 0x2701, 0x2703, 0x2705, 0x2707, 0x270a, 0x270d,
+ 0x2710, 0x2713, 0x2716, 0x2719, 0x271c, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x271f, 0x2721, 0x2723, 0x2725, 0x2727, 0x2729, 0x272b,
+ 0x272d, 0x272f, 0x2731, 0x2733, 0x2735, 0x2737, 0x2739, 0x273b,
+ 0x273d, 0x273f, 0x2741, 0x2743, 0x2745, 0x2747, 0x2749, 0x274b,
+ 0x274d, 0x274f, 0x2751, 0x2753, 0x2755, 0x2757, 0x2759, 0x275b,
+ 0x275d, 0x275f, 0x2761, 0x2763, 0x2765, 0x2767, 0x2769, 0x276b,
+ 0x276d, 0x276f, 0x2771, 0x2773, 0x2775, 0x2777, 0x2779, 0x277b,
+ 0x277d, 0x277f, 0x2781, 0x2783, 0x2785, 0x2787, 0x2789, 0x278b,
+ 0x278d, 0x278f, 0x2791, 0x2793, 0x2795, 0x2797, 0x2799, 0x279b,
+ 0x279d, 0x279f, 0x27a1, 0x27a3, 0x27a5, 0x27a7, 0x27a9, 0x27ab,
+ 0x27ad, 0x27af, 0x27b1, 0x27b3, 0x27b5, 0x27b7, 0x27b9, 0x27bb,
+ 0x27bd, 0x27bf, 0x27c1, 0x27c3, 0x27c5, 0x27c7, 0x27c9, 0x27cb,
+ 0x27cd, 0x27cf, 0x27d1, 0x27d3, 0x27d5, 0x27d7, 0x27d9, 0x27db,
+ 0x27dd, 0x27df, 0x27e1, 0x27e3, 0x27e5, 0x27e7, 0x27e9, 0x27eb,
+ 0x27ed, 0x27ef, 0x27f1, 0x27f3, 0x27f5, 0x27f7, 0x27f9, 0x27fb,
+ 0x27fd, 0x27ff, 0x2801, 0x2803, 0x2805, 0x2807, 0x2809, 0x280b,
+ 0x280d, 0x280f, 0x2811, 0x2813, 0x2815, 0x2817, 0x2819, 0x281b,
+ 0x281d, 0x281f, 0x2821, 0x2823, 0x2825, 0x2827, 0x2829, 0x282b,
+ 0x282d, 0x282f, 0x2831, 0x2833, 0x2835, 0x2837, 0x2839, 0x283b,
+ 0x283d, 0x283f, 0x2841, 0x2843, 0x2845, 0x2847, 0x2849, 0x284b,
+ 0x284d, 0x284f, 0x2851, 0x2853, 0x2855, 0x2857, 0x2859, 0x285b,
+ 0x285d, 0x285f, 0x2861, 0x2863, 0x2865, 0x2867, 0x2869, 0x286b,
+ 0x286d, 0x286f, 0x2871, 0x2873, 0x2875, 0x2877, 0x2879, 0x287b,
+ 0x287d, 0x287f, 0x2881, 0x2883, 0x2885, 0x2887, 0x2889, 0x288b,
+ 0x288d, 0x288f, 0x2891, 0x2893, 0x2895, 0x2897, 0x2899, 0xffff,
+ 0xffff, 0xffff, 0x289b, 0x289d, 0x289f, 0x28a1, 0x28a3, 0x28a5,
+ 0xffff, 0xffff, 0x28a7, 0x28a9, 0x28ab, 0x28ad, 0x28af, 0x28b1,
+ 0xffff, 0xffff, 0x28b3, 0x28b5, 0x28b7, 0x28b9, 0x28bb, 0x28bd,
+ 0xffff, 0xffff, 0x28bf, 0x28c1, 0x28c3, 0xffff, 0xffff, 0xffff,
+ 0x28c5, 0x28c7, 0x28c9, 0x28cb, 0x28cd, 0x28cf, 0x28d1, 0xffff,
+ 0x28d3, 0x28d5, 0x28d7, 0x28d9, 0x28db, 0x28dd, 0x28df, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x28e1, 0x28e3, 0x28e5, 0x28e7, 0x28e9, 0xffff, 0x28eb,
+ 0x28ed, 0x28ef, 0x28f1, 0x28f3, 0x28f5, 0x28f7, 0x28f9, 0x28fb,
+ 0x28fd, 0x28ff, 0x2901, 0x2903, 0x2905, 0x2907, 0x2909, 0x290b,
+ 0x290d, 0x290f, 0x2911, 0x2913, 0x2915, 0x2918, 0x291a, 0x291c,
+ 0x291f, 0x2921, 0x2924, 0x2926, 0x2928, 0x292a, 0x292c, 0x292e,
+ 0x2931, 0x2933, 0x2935, 0x2937, 0x2939, 0x293b, 0x293d, 0x293f,
+ 0x2941, 0xffff, 0x2943, 0x2945, 0x2947, 0x2949, 0x294b, 0x294d,
+ 0x294f, 0x2951, 0x2954, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x2569, 0x256b, 0x256d, 0x256f, 0x2571, 0x2573, 0x2575, 0x2577,
- 0x2579, 0x257b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x257d, 0x257f, 0x2581, 0x2583, 0x2585, 0x2587, 0x2589, 0x258b,
- 0x258d, 0x258f, 0x2591, 0x2593, 0x2595, 0x2597, 0x2599, 0x259b,
- 0x259d, 0x259f, 0x25a1, 0x25a3, 0x25a5, 0xffff, 0xffff, 0x25a7,
- 0x25a9, 0x25ab, 0x25ad, 0x25af, 0x25b1, 0x25b3, 0x25b5, 0x25b7,
- 0x25b9, 0x25bb, 0x25bd, 0xffff, 0x25bf, 0x25c1, 0x25c3, 0x25c5,
- 0x25c7, 0x25c9, 0x25cb, 0x25cd, 0x25cf, 0x25d1, 0x25d3, 0x25d5,
- 0x25d7, 0x25d9, 0x25db, 0x25dd, 0x25df, 0x25e1, 0x25e3, 0xffff,
- 0x25e5, 0x25e7, 0x25e9, 0x25eb, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x25ed, 0x25f0, 0x25f3, 0xffff, 0x25f6, 0xffff, 0x25f9, 0x25fc,
- 0x25ff, 0x2602, 0x2605, 0x2608, 0x260b, 0x260e, 0x2611, 0x2614,
- 0x2617, 0x2619, 0x261b, 0x261d, 0x261f, 0x2621, 0x2623, 0x2625,
- 0x2627, 0x2629, 0x262b, 0x262d, 0x262f, 0x2631, 0x2633, 0x2635,
- 0x2637, 0x2639, 0x263b, 0x263d, 0x263f, 0x2641, 0x2643, 0x2645,
- 0x2647, 0x2649, 0x264b, 0x264d, 0x264f, 0x2651, 0x2653, 0x2655,
- 0x2657, 0x2659, 0x265b, 0x265d, 0x265f, 0x2661, 0x2663, 0x2665,
- 0x2667, 0x2669, 0x266b, 0x266d, 0x266f, 0x2671, 0x2673, 0x2675,
- 0x2677, 0x2679, 0x267b, 0x267d, 0x267f, 0x2681, 0x2683, 0x2685,
- 0x2687, 0x2689, 0x268b, 0x268d, 0x268f, 0x2691, 0x2693, 0x2695,
- 0x2697, 0x2699, 0x269b, 0x269d, 0x269f, 0x26a1, 0x26a3, 0x26a5,
- 0x26a7, 0x26a9, 0x26ab, 0x26ad, 0x26af, 0x26b1, 0x26b3, 0x26b5,
- 0x26b7, 0x26b9, 0x26bb, 0x26bd, 0x26bf, 0x26c1, 0x26c3, 0x26c5,
- 0x26c7, 0x26c9, 0x26cb, 0x26cd, 0x26cf, 0x26d1, 0x26d3, 0x26d5,
- 0x26d7, 0x26d9, 0x26db, 0x26dd, 0x26df, 0x26e1, 0x26e3, 0x26e5,
- 0x26e7, 0x26e9, 0x26eb, 0x26ed, 0x26ef, 0x26f1, 0x26f3, 0x26f5,
- 0x26f7, 0x26f9, 0x26fb, 0x26fd, 0x26ff, 0x2701, 0x2704, 0x2707,
- 0x270a, 0x270d, 0x2710, 0x2713, 0x2716, 0xffff, 0xffff, 0xffff,
-
- 0xffff, 0x2719, 0x271b, 0x271d, 0x271f, 0x2721, 0x2723, 0x2725,
- 0x2727, 0x2729, 0x272b, 0x272d, 0x272f, 0x2731, 0x2733, 0x2735,
- 0x2737, 0x2739, 0x273b, 0x273d, 0x273f, 0x2741, 0x2743, 0x2745,
- 0x2747, 0x2749, 0x274b, 0x274d, 0x274f, 0x2751, 0x2753, 0x2755,
- 0x2757, 0x2759, 0x275b, 0x275d, 0x275f, 0x2761, 0x2763, 0x2765,
- 0x2767, 0x2769, 0x276b, 0x276d, 0x276f, 0x2771, 0x2773, 0x2775,
- 0x2777, 0x2779, 0x277b, 0x277d, 0x277f, 0x2781, 0x2783, 0x2785,
- 0x2787, 0x2789, 0x278b, 0x278d, 0x278f, 0x2791, 0x2793, 0x2795,
- 0x2797, 0x2799, 0x279b, 0x279d, 0x279f, 0x27a1, 0x27a3, 0x27a5,
- 0x27a7, 0x27a9, 0x27ab, 0x27ad, 0x27af, 0x27b1, 0x27b3, 0x27b5,
- 0x27b7, 0x27b9, 0x27bb, 0x27bd, 0x27bf, 0x27c1, 0x27c3, 0x27c5,
- 0x27c7, 0x27c9, 0x27cb, 0x27cd, 0x27cf, 0x27d1, 0x27d3, 0x27d5,
- 0x27d7, 0x27d9, 0x27db, 0x27dd, 0x27df, 0x27e1, 0x27e3, 0x27e5,
- 0x27e7, 0x27e9, 0x27eb, 0x27ed, 0x27ef, 0x27f1, 0x27f3, 0x27f5,
- 0x27f7, 0x27f9, 0x27fb, 0x27fd, 0x27ff, 0x2801, 0x2803, 0x2805,
- 0x2807, 0x2809, 0x280b, 0x280d, 0x280f, 0x2811, 0x2813, 0x2815,
- 0x2817, 0x2819, 0x281b, 0x281d, 0x281f, 0x2821, 0x2823, 0x2825,
- 0x2827, 0x2829, 0x282b, 0x282d, 0x282f, 0x2831, 0x2833, 0x2835,
- 0x2837, 0x2839, 0x283b, 0x283d, 0x283f, 0x2841, 0x2843, 0x2845,
- 0x2847, 0x2849, 0x284b, 0x284d, 0x284f, 0x2851, 0x2853, 0x2855,
- 0x2857, 0x2859, 0x285b, 0x285d, 0x285f, 0x2861, 0x2863, 0x2865,
- 0x2867, 0x2869, 0x286b, 0x286d, 0x286f, 0x2871, 0x2873, 0x2875,
- 0x2877, 0x2879, 0x287b, 0x287d, 0x287f, 0x2881, 0x2883, 0x2885,
- 0x2887, 0x2889, 0x288b, 0x288d, 0x288f, 0x2891, 0x2893, 0xffff,
- 0xffff, 0xffff, 0x2895, 0x2897, 0x2899, 0x289b, 0x289d, 0x289f,
- 0xffff, 0xffff, 0x28a1, 0x28a3, 0x28a5, 0x28a7, 0x28a9, 0x28ab,
- 0xffff, 0xffff, 0x28ad, 0x28af, 0x28b1, 0x28b3, 0x28b5, 0x28b7,
- 0xffff, 0xffff, 0x28b9, 0x28bb, 0x28bd, 0xffff, 0xffff, 0xffff,
- 0x28bf, 0x28c1, 0x28c3, 0x28c5, 0x28c7, 0x28c9, 0x28cb, 0xffff,
- 0x28cd, 0x28cf, 0x28d1, 0x28d3, 0x28d5, 0x28d7, 0x28d9, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11248,9 +12143,9 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0x28db, 0xffff, 0x28e0, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0x2957, 0xffff, 0x295c, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0x28e5, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0x2961, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11267,7 +12162,7 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28ea, 0x28ef,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2966, 0x296b,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11304,7 +12199,7 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0x28f4, 0x28f9, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0x2970, 0x2975, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11351,7 +12246,7 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0x28fe, 0x2903, 0xffff, 0x2908, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0x297a, 0x297f, 0xffff, 0x2984, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11384,7 +12279,7 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0x290d, 0x2912, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0x2989, 0x298e, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11401,7 +12296,7 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x2917, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x2993, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11438,8 +12333,8 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x291c, 0x2921,
- 0x2926, 0x292b, 0x2930, 0x2935, 0x293a, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2998, 0x299d,
+ 0x29a2, 0x29a7, 0x29ac, 0x29b1, 0x29b6, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11450,8 +12345,8 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0xffff, 0x293f, 0x2944, 0x2949, 0x294e, 0x2953,
- 0x2958, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0x29bb, 0x29c0, 0x29c5, 0x29ca, 0x29cf,
+ 0x29d4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11460,93 +12355,85 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x295d, 0x295f, 0x2961, 0x2963, 0x2965, 0x2967, 0x2969, 0x296b,
- 0x296d, 0x296f, 0x2971, 0x2973, 0x2975, 0x2977, 0x2979, 0x297b,
- 0x297d, 0x297f, 0x2981, 0x2983, 0x2985, 0x2987, 0x2989, 0x298b,
- 0x298d, 0x298f, 0x2991, 0x2993, 0x2995, 0x2997, 0x2999, 0x299b,
- 0x299d, 0x299f, 0x29a1, 0x29a3, 0x29a5, 0x29a7, 0x29a9, 0x29ab,
- 0x29ad, 0x29af, 0x29b1, 0x29b3, 0x29b5, 0x29b7, 0x29b9, 0x29bb,
- 0x29bd, 0x29bf, 0x29c1, 0x29c3, 0x29c5, 0x29c7, 0x29c9, 0x29cb,
- 0x29cd, 0x29cf, 0x29d1, 0x29d3, 0x29d5, 0x29d7, 0x29d9, 0x29db,
- 0x29dd, 0x29df, 0x29e1, 0x29e3, 0x29e5, 0x29e7, 0x29e9, 0x29eb,
- 0x29ed, 0x29ef, 0x29f1, 0x29f3, 0x29f5, 0x29f7, 0x29f9, 0x29fb,
- 0x29fd, 0x29ff, 0x2a01, 0x2a03, 0x2a05, 0xffff, 0x2a07, 0x2a09,
- 0x2a0b, 0x2a0d, 0x2a0f, 0x2a11, 0x2a13, 0x2a15, 0x2a17, 0x2a19,
- 0x2a1b, 0x2a1d, 0x2a1f, 0x2a21, 0x2a23, 0x2a25, 0x2a27, 0x2a29,
- 0x2a2b, 0x2a2d, 0x2a2f, 0x2a31, 0x2a33, 0x2a35, 0x2a37, 0x2a39,
- 0x2a3b, 0x2a3d, 0x2a3f, 0x2a41, 0x2a43, 0x2a45, 0x2a47, 0x2a49,
- 0x2a4b, 0x2a4d, 0x2a4f, 0x2a51, 0x2a53, 0x2a55, 0x2a57, 0x2a59,
- 0x2a5b, 0x2a5d, 0x2a5f, 0x2a61, 0x2a63, 0x2a65, 0x2a67, 0x2a69,
- 0x2a6b, 0x2a6d, 0x2a6f, 0x2a71, 0x2a73, 0x2a75, 0x2a77, 0x2a79,
- 0x2a7b, 0x2a7d, 0x2a7f, 0x2a81, 0x2a83, 0x2a85, 0x2a87, 0x2a89,
- 0x2a8b, 0x2a8d, 0x2a8f, 0x2a91, 0x2a93, 0xffff, 0x2a95, 0x2a97,
- 0xffff, 0xffff, 0x2a99, 0xffff, 0xffff, 0x2a9b, 0x2a9d, 0xffff,
- 0xffff, 0x2a9f, 0x2aa1, 0x2aa3, 0x2aa5, 0xffff, 0x2aa7, 0x2aa9,
- 0x2aab, 0x2aad, 0x2aaf, 0x2ab1, 0x2ab3, 0x2ab5, 0x2ab7, 0x2ab9,
- 0x2abb, 0x2abd, 0xffff, 0x2abf, 0xffff, 0x2ac1, 0x2ac3, 0x2ac5,
- 0x2ac7, 0x2ac9, 0x2acb, 0x2acd, 0xffff, 0x2acf, 0x2ad1, 0x2ad3,
- 0x2ad5, 0x2ad7, 0x2ad9, 0x2adb, 0x2add, 0x2adf, 0x2ae1, 0x2ae3,
- 0x2ae5, 0x2ae7, 0x2ae9, 0x2aeb, 0x2aed, 0x2aef, 0x2af1, 0x2af3,
- 0x2af5, 0x2af7, 0x2af9, 0x2afb, 0x2afd, 0x2aff, 0x2b01, 0x2b03,
- 0x2b05, 0x2b07, 0x2b09, 0x2b0b, 0x2b0d, 0x2b0f, 0x2b11, 0x2b13,
- 0x2b15, 0x2b17, 0x2b19, 0x2b1b, 0x2b1d, 0x2b1f, 0x2b21, 0x2b23,
- 0x2b25, 0x2b27, 0x2b29, 0x2b2b, 0x2b2d, 0x2b2f, 0x2b31, 0x2b33,
- 0x2b35, 0x2b37, 0x2b39, 0x2b3b, 0x2b3d, 0x2b3f, 0x2b41, 0x2b43,
+ 0x29d9, 0x29db, 0x29dd, 0x29df, 0x29e1, 0x29e3, 0x29e5, 0x29e7,
+ 0x29e9, 0x29eb, 0x29ed, 0x29ef, 0x29f1, 0x29f3, 0x29f5, 0x29f7,
+ 0x29f9, 0x29fb, 0x29fd, 0x29ff, 0x2a01, 0x2a03, 0x2a05, 0x2a07,
+ 0x2a09, 0x2a0b, 0x2a0d, 0x2a0f, 0x2a11, 0x2a13, 0x2a15, 0x2a17,
+ 0x2a19, 0x2a1b, 0x2a1d, 0x2a1f, 0x2a21, 0x2a23, 0x2a25, 0x2a27,
+ 0x2a29, 0x2a2b, 0x2a2d, 0x2a2f, 0x2a31, 0x2a33, 0x2a35, 0x2a37,
+ 0x2a39, 0x2a3b, 0x2a3d, 0x2a3f, 0x2a41, 0x2a43, 0x2a45, 0x2a47,
+ 0x2a49, 0x2a4b, 0x2a4d, 0x2a4f, 0x2a51, 0x2a53, 0x2a55, 0x2a57,
+ 0x2a59, 0x2a5b, 0x2a5d, 0x2a5f, 0x2a61, 0x2a63, 0x2a65, 0x2a67,
+ 0x2a69, 0x2a6b, 0x2a6d, 0x2a6f, 0x2a71, 0x2a73, 0x2a75, 0x2a77,
+ 0x2a79, 0x2a7b, 0x2a7d, 0x2a7f, 0x2a81, 0xffff, 0x2a83, 0x2a85,
+ 0x2a87, 0x2a89, 0x2a8b, 0x2a8d, 0x2a8f, 0x2a91, 0x2a93, 0x2a95,
+ 0x2a97, 0x2a99, 0x2a9b, 0x2a9d, 0x2a9f, 0x2aa1, 0x2aa3, 0x2aa5,
+ 0x2aa7, 0x2aa9, 0x2aab, 0x2aad, 0x2aaf, 0x2ab1, 0x2ab3, 0x2ab5,
+ 0x2ab7, 0x2ab9, 0x2abb, 0x2abd, 0x2abf, 0x2ac1, 0x2ac3, 0x2ac5,
+ 0x2ac7, 0x2ac9, 0x2acb, 0x2acd, 0x2acf, 0x2ad1, 0x2ad3, 0x2ad5,
+ 0x2ad7, 0x2ad9, 0x2adb, 0x2add, 0x2adf, 0x2ae1, 0x2ae3, 0x2ae5,
+ 0x2ae7, 0x2ae9, 0x2aeb, 0x2aed, 0x2aef, 0x2af1, 0x2af3, 0x2af5,
+ 0x2af7, 0x2af9, 0x2afb, 0x2afd, 0x2aff, 0x2b01, 0x2b03, 0x2b05,
+ 0x2b07, 0x2b09, 0x2b0b, 0x2b0d, 0x2b0f, 0xffff, 0x2b11, 0x2b13,
+ 0xffff, 0xffff, 0x2b15, 0xffff, 0xffff, 0x2b17, 0x2b19, 0xffff,
+ 0xffff, 0x2b1b, 0x2b1d, 0x2b1f, 0x2b21, 0xffff, 0x2b23, 0x2b25,
+ 0x2b27, 0x2b29, 0x2b2b, 0x2b2d, 0x2b2f, 0x2b31, 0x2b33, 0x2b35,
+ 0x2b37, 0x2b39, 0xffff, 0x2b3b, 0xffff, 0x2b3d, 0x2b3f, 0x2b41,
+ 0x2b43, 0x2b45, 0x2b47, 0x2b49, 0xffff, 0x2b4b, 0x2b4d, 0x2b4f,
+ 0x2b51, 0x2b53, 0x2b55, 0x2b57, 0x2b59, 0x2b5b, 0x2b5d, 0x2b5f,
+ 0x2b61, 0x2b63, 0x2b65, 0x2b67, 0x2b69, 0x2b6b, 0x2b6d, 0x2b6f,
+ 0x2b71, 0x2b73, 0x2b75, 0x2b77, 0x2b79, 0x2b7b, 0x2b7d, 0x2b7f,
+ 0x2b81, 0x2b83, 0x2b85, 0x2b87, 0x2b89, 0x2b8b, 0x2b8d, 0x2b8f,
+ 0x2b91, 0x2b93, 0x2b95, 0x2b97, 0x2b99, 0x2b9b, 0x2b9d, 0x2b9f,
+ 0x2ba1, 0x2ba3, 0x2ba5, 0x2ba7, 0x2ba9, 0x2bab, 0x2bad, 0x2baf,
+ 0x2bb1, 0x2bb3, 0x2bb5, 0x2bb7, 0x2bb9, 0x2bbb, 0x2bbd, 0x2bbf,
- 0x2b45, 0x2b47, 0x2b49, 0x2b4b, 0x2b4d, 0x2b4f, 0xffff, 0x2b51,
- 0x2b53, 0x2b55, 0x2b57, 0xffff, 0xffff, 0x2b59, 0x2b5b, 0x2b5d,
- 0x2b5f, 0x2b61, 0x2b63, 0x2b65, 0x2b67, 0xffff, 0x2b69, 0x2b6b,
- 0x2b6d, 0x2b6f, 0x2b71, 0x2b73, 0x2b75, 0xffff, 0x2b77, 0x2b79,
- 0x2b7b, 0x2b7d, 0x2b7f, 0x2b81, 0x2b83, 0x2b85, 0x2b87, 0x2b89,
- 0x2b8b, 0x2b8d, 0x2b8f, 0x2b91, 0x2b93, 0x2b95, 0x2b97, 0x2b99,
- 0x2b9b, 0x2b9d, 0x2b9f, 0x2ba1, 0x2ba3, 0x2ba5, 0x2ba7, 0x2ba9,
- 0x2bab, 0x2bad, 0xffff, 0x2baf, 0x2bb1, 0x2bb3, 0x2bb5, 0xffff,
- 0x2bb7, 0x2bb9, 0x2bbb, 0x2bbd, 0x2bbf, 0xffff, 0x2bc1, 0xffff,
- 0xffff, 0xffff, 0x2bc3, 0x2bc5, 0x2bc7, 0x2bc9, 0x2bcb, 0x2bcd,
- 0x2bcf, 0xffff, 0x2bd1, 0x2bd3, 0x2bd5, 0x2bd7, 0x2bd9, 0x2bdb,
- 0x2bdd, 0x2bdf, 0x2be1, 0x2be3, 0x2be5, 0x2be7, 0x2be9, 0x2beb,
- 0x2bed, 0x2bef, 0x2bf1, 0x2bf3, 0x2bf5, 0x2bf7, 0x2bf9, 0x2bfb,
- 0x2bfd, 0x2bff, 0x2c01, 0x2c03, 0x2c05, 0x2c07, 0x2c09, 0x2c0b,
- 0x2c0d, 0x2c0f, 0x2c11, 0x2c13, 0x2c15, 0x2c17, 0x2c19, 0x2c1b,
- 0x2c1d, 0x2c1f, 0x2c21, 0x2c23, 0x2c25, 0x2c27, 0x2c29, 0x2c2b,
- 0x2c2d, 0x2c2f, 0x2c31, 0x2c33, 0x2c35, 0x2c37, 0x2c39, 0x2c3b,
- 0x2c3d, 0x2c3f, 0x2c41, 0x2c43, 0x2c45, 0x2c47, 0x2c49, 0x2c4b,
- 0x2c4d, 0x2c4f, 0x2c51, 0x2c53, 0x2c55, 0x2c57, 0x2c59, 0x2c5b,
- 0x2c5d, 0x2c5f, 0x2c61, 0x2c63, 0x2c65, 0x2c67, 0x2c69, 0x2c6b,
- 0x2c6d, 0x2c6f, 0x2c71, 0x2c73, 0x2c75, 0x2c77, 0x2c79, 0x2c7b,
- 0x2c7d, 0x2c7f, 0x2c81, 0x2c83, 0x2c85, 0x2c87, 0x2c89, 0x2c8b,
- 0x2c8d, 0x2c8f, 0x2c91, 0x2c93, 0x2c95, 0x2c97, 0x2c99, 0x2c9b,
- 0x2c9d, 0x2c9f, 0x2ca1, 0x2ca3, 0x2ca5, 0x2ca7, 0x2ca9, 0x2cab,
- 0x2cad, 0x2caf, 0x2cb1, 0x2cb3, 0x2cb5, 0x2cb7, 0x2cb9, 0x2cbb,
- 0x2cbd, 0x2cbf, 0x2cc1, 0x2cc3, 0x2cc5, 0x2cc7, 0x2cc9, 0x2ccb,
- 0x2ccd, 0x2ccf, 0x2cd1, 0x2cd3, 0x2cd5, 0x2cd7, 0x2cd9, 0x2cdb,
- 0x2cdd, 0x2cdf, 0x2ce1, 0x2ce3, 0x2ce5, 0x2ce7, 0x2ce9, 0x2ceb,
- 0x2ced, 0x2cef, 0x2cf1, 0x2cf3, 0x2cf5, 0x2cf7, 0x2cf9, 0x2cfb,
- 0x2cfd, 0x2cff, 0x2d01, 0x2d03, 0x2d05, 0x2d07, 0x2d09, 0x2d0b,
- 0x2d0d, 0x2d0f, 0x2d11, 0x2d13, 0x2d15, 0x2d17, 0x2d19, 0x2d1b,
- 0x2d1d, 0x2d1f, 0x2d21, 0x2d23, 0x2d25, 0x2d27, 0x2d29, 0x2d2b,
+ 0x2bc1, 0x2bc3, 0x2bc5, 0x2bc7, 0x2bc9, 0x2bcb, 0xffff, 0x2bcd,
+ 0x2bcf, 0x2bd1, 0x2bd3, 0xffff, 0xffff, 0x2bd5, 0x2bd7, 0x2bd9,
+ 0x2bdb, 0x2bdd, 0x2bdf, 0x2be1, 0x2be3, 0xffff, 0x2be5, 0x2be7,
+ 0x2be9, 0x2beb, 0x2bed, 0x2bef, 0x2bf1, 0xffff, 0x2bf3, 0x2bf5,
+ 0x2bf7, 0x2bf9, 0x2bfb, 0x2bfd, 0x2bff, 0x2c01, 0x2c03, 0x2c05,
+ 0x2c07, 0x2c09, 0x2c0b, 0x2c0d, 0x2c0f, 0x2c11, 0x2c13, 0x2c15,
+ 0x2c17, 0x2c19, 0x2c1b, 0x2c1d, 0x2c1f, 0x2c21, 0x2c23, 0x2c25,
+ 0x2c27, 0x2c29, 0xffff, 0x2c2b, 0x2c2d, 0x2c2f, 0x2c31, 0xffff,
+ 0x2c33, 0x2c35, 0x2c37, 0x2c39, 0x2c3b, 0xffff, 0x2c3d, 0xffff,
+ 0xffff, 0xffff, 0x2c3f, 0x2c41, 0x2c43, 0x2c45, 0x2c47, 0x2c49,
+ 0x2c4b, 0xffff, 0x2c4d, 0x2c4f, 0x2c51, 0x2c53, 0x2c55, 0x2c57,
+ 0x2c59, 0x2c5b, 0x2c5d, 0x2c5f, 0x2c61, 0x2c63, 0x2c65, 0x2c67,
+ 0x2c69, 0x2c6b, 0x2c6d, 0x2c6f, 0x2c71, 0x2c73, 0x2c75, 0x2c77,
+ 0x2c79, 0x2c7b, 0x2c7d, 0x2c7f, 0x2c81, 0x2c83, 0x2c85, 0x2c87,
+ 0x2c89, 0x2c8b, 0x2c8d, 0x2c8f, 0x2c91, 0x2c93, 0x2c95, 0x2c97,
+ 0x2c99, 0x2c9b, 0x2c9d, 0x2c9f, 0x2ca1, 0x2ca3, 0x2ca5, 0x2ca7,
+ 0x2ca9, 0x2cab, 0x2cad, 0x2caf, 0x2cb1, 0x2cb3, 0x2cb5, 0x2cb7,
+ 0x2cb9, 0x2cbb, 0x2cbd, 0x2cbf, 0x2cc1, 0x2cc3, 0x2cc5, 0x2cc7,
+ 0x2cc9, 0x2ccb, 0x2ccd, 0x2ccf, 0x2cd1, 0x2cd3, 0x2cd5, 0x2cd7,
+ 0x2cd9, 0x2cdb, 0x2cdd, 0x2cdf, 0x2ce1, 0x2ce3, 0x2ce5, 0x2ce7,
+ 0x2ce9, 0x2ceb, 0x2ced, 0x2cef, 0x2cf1, 0x2cf3, 0x2cf5, 0x2cf7,
+ 0x2cf9, 0x2cfb, 0x2cfd, 0x2cff, 0x2d01, 0x2d03, 0x2d05, 0x2d07,
+ 0x2d09, 0x2d0b, 0x2d0d, 0x2d0f, 0x2d11, 0x2d13, 0x2d15, 0x2d17,
+ 0x2d19, 0x2d1b, 0x2d1d, 0x2d1f, 0x2d21, 0x2d23, 0x2d25, 0x2d27,
+ 0x2d29, 0x2d2b, 0x2d2d, 0x2d2f, 0x2d31, 0x2d33, 0x2d35, 0x2d37,
+ 0x2d39, 0x2d3b, 0x2d3d, 0x2d3f, 0x2d41, 0x2d43, 0x2d45, 0x2d47,
+ 0x2d49, 0x2d4b, 0x2d4d, 0x2d4f, 0x2d51, 0x2d53, 0x2d55, 0x2d57,
+ 0x2d59, 0x2d5b, 0x2d5d, 0x2d5f, 0x2d61, 0x2d63, 0x2d65, 0x2d67,
+ 0x2d69, 0x2d6b, 0x2d6d, 0x2d6f, 0x2d71, 0x2d73, 0x2d75, 0x2d77,
+ 0x2d79, 0x2d7b, 0x2d7d, 0x2d7f, 0x2d81, 0x2d83, 0x2d85, 0x2d87,
+ 0x2d89, 0x2d8b, 0x2d8d, 0x2d8f, 0x2d91, 0x2d93, 0x2d95, 0x2d97,
+ 0x2d99, 0x2d9b, 0x2d9d, 0x2d9f, 0x2da1, 0x2da3, 0x2da5, 0x2da7,
- 0x2d2d, 0x2d2f, 0x2d31, 0x2d33, 0x2d35, 0x2d37, 0x2d39, 0x2d3b,
- 0x2d3d, 0x2d3f, 0x2d41, 0x2d43, 0x2d45, 0x2d47, 0x2d49, 0x2d4b,
- 0x2d4d, 0x2d4f, 0x2d51, 0x2d53, 0x2d55, 0x2d57, 0x2d59, 0x2d5b,
- 0x2d5d, 0x2d5f, 0x2d61, 0x2d63, 0x2d65, 0x2d67, 0x2d69, 0x2d6b,
- 0x2d6d, 0x2d6f, 0x2d71, 0x2d73, 0x2d75, 0x2d77, 0x2d79, 0x2d7b,
- 0x2d7d, 0x2d7f, 0x2d81, 0x2d83, 0x2d85, 0x2d87, 0x2d89, 0x2d8b,
- 0x2d8d, 0x2d8f, 0x2d91, 0x2d93, 0x2d95, 0x2d97, 0x2d99, 0x2d9b,
- 0x2d9d, 0x2d9f, 0x2da1, 0x2da3, 0x2da5, 0x2da7, 0x2da9, 0x2dab,
- 0x2dad, 0x2daf, 0x2db1, 0x2db3, 0x2db5, 0x2db7, 0x2db9, 0x2dbb,
- 0x2dbd, 0x2dbf, 0x2dc1, 0x2dc3, 0x2dc5, 0x2dc7, 0x2dc9, 0x2dcb,
- 0x2dcd, 0x2dcf, 0x2dd1, 0x2dd3, 0x2dd5, 0x2dd7, 0x2dd9, 0x2ddb,
- 0x2ddd, 0x2ddf, 0x2de1, 0x2de3, 0x2de5, 0x2de7, 0x2de9, 0x2deb,
- 0x2ded, 0x2def, 0x2df1, 0x2df3, 0x2df5, 0x2df7, 0x2df9, 0x2dfb,
- 0x2dfd, 0x2dff, 0x2e01, 0x2e03, 0x2e05, 0x2e07, 0x2e09, 0x2e0b,
- 0x2e0d, 0x2e0f, 0x2e11, 0x2e13, 0x2e15, 0x2e17, 0x2e19, 0x2e1b,
- 0x2e1d, 0x2e1f, 0x2e21, 0x2e23, 0x2e25, 0x2e27, 0x2e29, 0x2e2b,
- 0x2e2d, 0x2e2f, 0x2e31, 0x2e33, 0x2e35, 0x2e37, 0x2e39, 0x2e3b,
- 0x2e3d, 0x2e3f, 0x2e41, 0x2e43, 0x2e45, 0x2e47, 0x2e49, 0x2e4b,
- 0x2e4d, 0x2e4f, 0x2e51, 0x2e53, 0x2e55, 0x2e57, 0x2e59, 0x2e5b,
- 0x2e5d, 0x2e5f, 0x2e61, 0x2e63, 0x2e65, 0x2e67, 0x2e69, 0x2e6b,
- 0x2e6d, 0x2e6f, 0x2e71, 0x2e73, 0x2e75, 0x2e77, 0xffff, 0xffff,
+ 0x2da9, 0x2dab, 0x2dad, 0x2daf, 0x2db1, 0x2db3, 0x2db5, 0x2db7,
+ 0x2db9, 0x2dbb, 0x2dbd, 0x2dbf, 0x2dc1, 0x2dc3, 0x2dc5, 0x2dc7,
+ 0x2dc9, 0x2dcb, 0x2dcd, 0x2dcf, 0x2dd1, 0x2dd3, 0x2dd5, 0x2dd7,
+ 0x2dd9, 0x2ddb, 0x2ddd, 0x2ddf, 0x2de1, 0x2de3, 0x2de5, 0x2de7,
+ 0x2de9, 0x2deb, 0x2ded, 0x2def, 0x2df1, 0x2df3, 0x2df5, 0x2df7,
+ 0x2df9, 0x2dfb, 0x2dfd, 0x2dff, 0x2e01, 0x2e03, 0x2e05, 0x2e07,
+ 0x2e09, 0x2e0b, 0x2e0d, 0x2e0f, 0x2e11, 0x2e13, 0x2e15, 0x2e17,
+ 0x2e19, 0x2e1b, 0x2e1d, 0x2e1f, 0x2e21, 0x2e23, 0x2e25, 0x2e27,
+ 0x2e29, 0x2e2b, 0x2e2d, 0x2e2f, 0x2e31, 0x2e33, 0x2e35, 0x2e37,
+ 0x2e39, 0x2e3b, 0x2e3d, 0x2e3f, 0x2e41, 0x2e43, 0x2e45, 0x2e47,
+ 0x2e49, 0x2e4b, 0x2e4d, 0x2e4f, 0x2e51, 0x2e53, 0x2e55, 0x2e57,
+ 0x2e59, 0x2e5b, 0x2e5d, 0x2e5f, 0x2e61, 0x2e63, 0x2e65, 0x2e67,
+ 0x2e69, 0x2e6b, 0x2e6d, 0x2e6f, 0x2e71, 0x2e73, 0x2e75, 0x2e77,
0x2e79, 0x2e7b, 0x2e7d, 0x2e7f, 0x2e81, 0x2e83, 0x2e85, 0x2e87,
0x2e89, 0x2e8b, 0x2e8d, 0x2e8f, 0x2e91, 0x2e93, 0x2e95, 0x2e97,
0x2e99, 0x2e9b, 0x2e9d, 0x2e9f, 0x2ea1, 0x2ea3, 0x2ea5, 0x2ea7,
@@ -11554,68 +12441,76 @@ static const unsigned short uc_decomposition_trie[] = {
0x2eb9, 0x2ebb, 0x2ebd, 0x2ebf, 0x2ec1, 0x2ec3, 0x2ec5, 0x2ec7,
0x2ec9, 0x2ecb, 0x2ecd, 0x2ecf, 0x2ed1, 0x2ed3, 0x2ed5, 0x2ed7,
0x2ed9, 0x2edb, 0x2edd, 0x2edf, 0x2ee1, 0x2ee3, 0x2ee5, 0x2ee7,
- 0x2ee9, 0x2eeb, 0x2eed, 0x2eef, 0x2ef1, 0x2ef3, 0x2ef5, 0x2ef7,
- 0x2ef9, 0x2efb, 0x2efd, 0x2eff, 0x2f01, 0x2f03, 0x2f05, 0x2f07,
- 0x2f09, 0x2f0b, 0x2f0d, 0x2f0f, 0x2f11, 0x2f13, 0x2f15, 0x2f17,
- 0x2f19, 0x2f1b, 0x2f1d, 0x2f1f, 0x2f21, 0x2f23, 0x2f25, 0x2f27,
-
- 0x2f29, 0x2f2b, 0x2f2d, 0x2f2f, 0x2f31, 0x2f33, 0x2f35, 0x2f37,
- 0x2f39, 0x2f3b, 0x2f3d, 0x2f3f, 0x2f41, 0x2f43, 0x2f45, 0x2f47,
- 0x2f49, 0x2f4b, 0x2f4d, 0x2f4f, 0x2f51, 0x2f53, 0x2f55, 0x2f57,
- 0x2f59, 0x2f5b, 0x2f5d, 0x2f5f, 0x2f61, 0x2f63, 0x2f65, 0x2f67,
- 0x2f69, 0x2f6b, 0x2f6d, 0x2f6f, 0x2f71, 0x2f73, 0x2f75, 0x2f77,
- 0x2f79, 0x2f7b, 0x2f7d, 0x2f7f, 0x2f81, 0x2f83, 0x2f85, 0x2f87,
- 0x2f89, 0x2f8b, 0x2f8d, 0x2f8f, 0x2f91, 0x2f93, 0x2f95, 0x2f97,
- 0x2f99, 0x2f9b, 0x2f9d, 0x2f9f, 0x2fa1, 0x2fa3, 0x2fa5, 0x2fa7,
- 0x2fa9, 0x2fab, 0x2fad, 0x2faf, 0x2fb1, 0x2fb3, 0x2fb5, 0x2fb7,
- 0x2fb9, 0x2fbb, 0x2fbd, 0x2fbf, 0x2fc1, 0x2fc3, 0x2fc5, 0x2fc7,
- 0x2fc9, 0x2fcb, 0x2fcd, 0x2fcf, 0x2fd1, 0x2fd3, 0x2fd5, 0x2fd7,
- 0x2fd9, 0x2fdb, 0x2fdd, 0x2fdf, 0x2fe1, 0x2fe3, 0x2fe5, 0x2fe7,
- 0x2fe9, 0x2feb, 0x2fed, 0x2fef, 0x2ff1, 0x2ff3, 0x2ff5, 0x2ff7,
- 0x2ff9, 0x2ffb, 0x2ffd, 0x2fff, 0x3001, 0x3003, 0x3005, 0x3007,
- 0x3009, 0x300b, 0x300d, 0x300f, 0x3011, 0x3013, 0x3015, 0x3017,
- 0x3019, 0x301b, 0x301d, 0x301f, 0x3021, 0x3023, 0x3025, 0x3027,
- 0x3029, 0x302b, 0x302d, 0x302f, 0x3031, 0x3033, 0x3035, 0x3037,
- 0x3039, 0x303b, 0x303d, 0x303f, 0x3041, 0x3043, 0x3045, 0x3047,
- 0x3049, 0x304b, 0x304d, 0x304f, 0x3051, 0x3053, 0x3055, 0x3057,
- 0x3059, 0x305b, 0x305d, 0x305f, 0x3061, 0x3063, 0x3065, 0x3067,
- 0x3069, 0x306b, 0x306d, 0x306f, 0x3071, 0x3073, 0x3075, 0x3077,
- 0x3079, 0x307b, 0x307d, 0x307f, 0x3081, 0x3083, 0x3085, 0x3087,
- 0x3089, 0x308b, 0x308d, 0x308f, 0x3091, 0x3093, 0x3095, 0x3097,
- 0x3099, 0x309b, 0x309d, 0x309f, 0x30a1, 0x30a3, 0x30a5, 0x30a7,
- 0x30a9, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7,
- 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0xffff, 0xffff, 0x30c1, 0x30c3,
+ 0x2ee9, 0x2eeb, 0x2eed, 0x2eef, 0x2ef1, 0x2ef3, 0xffff, 0xffff,
+ 0x2ef5, 0x2ef7, 0x2ef9, 0x2efb, 0x2efd, 0x2eff, 0x2f01, 0x2f03,
+ 0x2f05, 0x2f07, 0x2f09, 0x2f0b, 0x2f0d, 0x2f0f, 0x2f11, 0x2f13,
+ 0x2f15, 0x2f17, 0x2f19, 0x2f1b, 0x2f1d, 0x2f1f, 0x2f21, 0x2f23,
+ 0x2f25, 0x2f27, 0x2f29, 0x2f2b, 0x2f2d, 0x2f2f, 0x2f31, 0x2f33,
+ 0x2f35, 0x2f37, 0x2f39, 0x2f3b, 0x2f3d, 0x2f3f, 0x2f41, 0x2f43,
+ 0x2f45, 0x2f47, 0x2f49, 0x2f4b, 0x2f4d, 0x2f4f, 0x2f51, 0x2f53,
+ 0x2f55, 0x2f57, 0x2f59, 0x2f5b, 0x2f5d, 0x2f5f, 0x2f61, 0x2f63,
+ 0x2f65, 0x2f67, 0x2f69, 0x2f6b, 0x2f6d, 0x2f6f, 0x2f71, 0x2f73,
+ 0x2f75, 0x2f77, 0x2f79, 0x2f7b, 0x2f7d, 0x2f7f, 0x2f81, 0x2f83,
+ 0x2f85, 0x2f87, 0x2f89, 0x2f8b, 0x2f8d, 0x2f8f, 0x2f91, 0x2f93,
+ 0x2f95, 0x2f97, 0x2f99, 0x2f9b, 0x2f9d, 0x2f9f, 0x2fa1, 0x2fa3,
+
+ 0x2fa5, 0x2fa7, 0x2fa9, 0x2fab, 0x2fad, 0x2faf, 0x2fb1, 0x2fb3,
+ 0x2fb5, 0x2fb7, 0x2fb9, 0x2fbb, 0x2fbd, 0x2fbf, 0x2fc1, 0x2fc3,
+ 0x2fc5, 0x2fc7, 0x2fc9, 0x2fcb, 0x2fcd, 0x2fcf, 0x2fd1, 0x2fd3,
+ 0x2fd5, 0x2fd7, 0x2fd9, 0x2fdb, 0x2fdd, 0x2fdf, 0x2fe1, 0x2fe3,
+ 0x2fe5, 0x2fe7, 0x2fe9, 0x2feb, 0x2fed, 0x2fef, 0x2ff1, 0x2ff3,
+ 0x2ff5, 0x2ff7, 0x2ff9, 0x2ffb, 0x2ffd, 0x2fff, 0x3001, 0x3003,
+ 0x3005, 0x3007, 0x3009, 0x300b, 0x300d, 0x300f, 0x3011, 0x3013,
+ 0x3015, 0x3017, 0x3019, 0x301b, 0x301d, 0x301f, 0x3021, 0x3023,
+ 0x3025, 0x3027, 0x3029, 0x302b, 0x302d, 0x302f, 0x3031, 0x3033,
+ 0x3035, 0x3037, 0x3039, 0x303b, 0x303d, 0x303f, 0x3041, 0x3043,
+ 0x3045, 0x3047, 0x3049, 0x304b, 0x304d, 0x304f, 0x3051, 0x3053,
+ 0x3055, 0x3057, 0x3059, 0x305b, 0x305d, 0x305f, 0x3061, 0x3063,
+ 0x3065, 0x3067, 0x3069, 0x306b, 0x306d, 0x306f, 0x3071, 0x3073,
+ 0x3075, 0x3077, 0x3079, 0x307b, 0x307d, 0x307f, 0x3081, 0x3083,
+ 0x3085, 0x3087, 0x3089, 0x308b, 0x308d, 0x308f, 0x3091, 0x3093,
+ 0x3095, 0x3097, 0x3099, 0x309b, 0x309d, 0x309f, 0x30a1, 0x30a3,
+ 0x30a5, 0x30a7, 0x30a9, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3,
+ 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3,
0x30c5, 0x30c7, 0x30c9, 0x30cb, 0x30cd, 0x30cf, 0x30d1, 0x30d3,
0x30d5, 0x30d7, 0x30d9, 0x30db, 0x30dd, 0x30df, 0x30e1, 0x30e3,
0x30e5, 0x30e7, 0x30e9, 0x30eb, 0x30ed, 0x30ef, 0x30f1, 0x30f3,
0x30f5, 0x30f7, 0x30f9, 0x30fb, 0x30fd, 0x30ff, 0x3101, 0x3103,
0x3105, 0x3107, 0x3109, 0x310b, 0x310d, 0x310f, 0x3111, 0x3113,
0x3115, 0x3117, 0x3119, 0x311b, 0x311d, 0x311f, 0x3121, 0x3123,
+ 0x3125, 0x3127, 0x3129, 0x312b, 0x312d, 0x312f, 0x3131, 0x3133,
+ 0x3135, 0x3137, 0x3139, 0x313b, 0xffff, 0xffff, 0x313d, 0x313f,
+ 0x3141, 0x3143, 0x3145, 0x3147, 0x3149, 0x314b, 0x314d, 0x314f,
+ 0x3151, 0x3153, 0x3155, 0x3157, 0x3159, 0x315b, 0x315d, 0x315f,
+ 0x3161, 0x3163, 0x3165, 0x3167, 0x3169, 0x316b, 0x316d, 0x316f,
+ 0x3171, 0x3173, 0x3175, 0x3177, 0x3179, 0x317b, 0x317d, 0x317f,
+ 0x3181, 0x3183, 0x3185, 0x3187, 0x3189, 0x318b, 0x318d, 0x318f,
+ 0x3191, 0x3193, 0x3195, 0x3197, 0x3199, 0x319b, 0x319d, 0x319f,
- 0x3125, 0x3127, 0x3129, 0x312b, 0xffff, 0x312d, 0x312f, 0x3131,
- 0x3133, 0x3135, 0x3137, 0x3139, 0x313b, 0x313d, 0x313f, 0x3141,
- 0x3143, 0x3145, 0x3147, 0x3149, 0x314b, 0x314d, 0x314f, 0x3151,
- 0x3153, 0x3155, 0x3157, 0x3159, 0x315b, 0x315d, 0x315f, 0x3161,
- 0xffff, 0x3163, 0x3165, 0xffff, 0x3167, 0xffff, 0xffff, 0x3169,
- 0xffff, 0x316b, 0x316d, 0x316f, 0x3171, 0x3173, 0x3175, 0x3177,
- 0x3179, 0x317b, 0x317d, 0xffff, 0x317f, 0x3181, 0x3183, 0x3185,
- 0xffff, 0x3187, 0xffff, 0x3189, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0x318b, 0xffff, 0xffff, 0xffff, 0xffff, 0x318d,
- 0xffff, 0x318f, 0xffff, 0x3191, 0xffff, 0x3193, 0x3195, 0x3197,
- 0xffff, 0x3199, 0x319b, 0xffff, 0x319d, 0xffff, 0xffff, 0x319f,
- 0xffff, 0x31a1, 0xffff, 0x31a3, 0xffff, 0x31a5, 0xffff, 0x31a7,
- 0xffff, 0x31a9, 0x31ab, 0xffff, 0x31ad, 0xffff, 0xffff, 0x31af,
- 0x31b1, 0x31b3, 0x31b5, 0xffff, 0x31b7, 0x31b9, 0x31bb, 0x31bd,
- 0x31bf, 0x31c1, 0x31c3, 0xffff, 0x31c5, 0x31c7, 0x31c9, 0x31cb,
- 0xffff, 0x31cd, 0x31cf, 0x31d1, 0x31d3, 0xffff, 0x31d5, 0xffff,
- 0x31d7, 0x31d9, 0x31db, 0x31dd, 0x31df, 0x31e1, 0x31e3, 0x31e5,
- 0x31e7, 0x31e9, 0xffff, 0x31eb, 0x31ed, 0x31ef, 0x31f1, 0x31f3,
- 0x31f5, 0x31f7, 0x31f9, 0x31fb, 0x31fd, 0x31ff, 0x3201, 0x3203,
- 0x3205, 0x3207, 0x3209, 0x320b, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0x320d, 0x320f, 0x3211, 0xffff, 0x3213, 0x3215, 0x3217,
- 0x3219, 0x321b, 0xffff, 0x321d, 0x321f, 0x3221, 0x3223, 0x3225,
- 0x3227, 0x3229, 0x322b, 0x322d, 0x322f, 0x3231, 0x3233, 0x3235,
- 0x3237, 0x3239, 0x323b, 0x323d, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x31a1, 0x31a3, 0x31a5, 0x31a7, 0x31a9, 0x31ab, 0x31ad, 0x31af,
+ 0x31b1, 0x31b3, 0x31b5, 0x31b7, 0x31b9, 0x31bb, 0x31bd, 0x31bf,
+ 0x31c1, 0x31c3, 0x31c5, 0x31c7, 0x31c9, 0x31cb, 0x31cd, 0x31cf,
+ 0x31d1, 0x31d3, 0x31d5, 0x31d7, 0x31d9, 0x31db, 0x31dd, 0x31df,
+ 0x31e1, 0x31e3, 0x31e5, 0x31e7, 0x31e9, 0x31eb, 0x31ed, 0x31ef,
+ 0x31f1, 0x31f3, 0x31f5, 0x31f7, 0x31f9, 0x31fb, 0x31fd, 0x31ff,
+ 0x3201, 0x3203, 0x3205, 0x3207, 0x3209, 0x320b, 0x320d, 0x320f,
+ 0x3211, 0x3213, 0x3215, 0x3217, 0x3219, 0x321b, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11625,25 +12520,58 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x323f, 0x3242, 0x3245, 0x3248, 0x324b, 0x324e, 0x3251, 0x3254,
- 0x3257, 0x325a, 0x325d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x3260, 0x3264, 0x3268, 0x326c, 0x3270, 0x3274, 0x3278, 0x327c,
- 0x3280, 0x3284, 0x3288, 0x328c, 0x3290, 0x3294, 0x3298, 0x329c,
- 0x32a0, 0x32a4, 0x32a8, 0x32ac, 0x32b0, 0x32b4, 0x32b8, 0x32bc,
- 0x32c0, 0x32c4, 0x32c8, 0x32cc, 0x32ce, 0x32d0, 0x32d3, 0xffff,
- 0x32d6, 0x32d8, 0x32da, 0x32dc, 0x32de, 0x32e0, 0x32e2, 0x32e4,
- 0x32e6, 0x32e8, 0x32ea, 0x32ec, 0x32ee, 0x32f0, 0x32f2, 0x32f4,
- 0x32f6, 0x32f8, 0x32fa, 0x32fc, 0x32fe, 0x3300, 0x3302, 0x3304,
- 0x3306, 0x3308, 0x330a, 0x330d, 0x3310, 0x3313, 0x3316, 0x331a,
+ 0x321d, 0x321f, 0x3221, 0x3223, 0xffff, 0x3225, 0x3227, 0x3229,
+ 0x322b, 0x322d, 0x322f, 0x3231, 0x3233, 0x3235, 0x3237, 0x3239,
+ 0x323b, 0x323d, 0x323f, 0x3241, 0x3243, 0x3245, 0x3247, 0x3249,
+ 0x324b, 0x324d, 0x324f, 0x3251, 0x3253, 0x3255, 0x3257, 0x3259,
+ 0xffff, 0x325b, 0x325d, 0xffff, 0x325f, 0xffff, 0xffff, 0x3261,
+ 0xffff, 0x3263, 0x3265, 0x3267, 0x3269, 0x326b, 0x326d, 0x326f,
+ 0x3271, 0x3273, 0x3275, 0xffff, 0x3277, 0x3279, 0x327b, 0x327d,
+ 0xffff, 0x327f, 0xffff, 0x3281, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0x3283, 0xffff, 0xffff, 0xffff, 0xffff, 0x3285,
+ 0xffff, 0x3287, 0xffff, 0x3289, 0xffff, 0x328b, 0x328d, 0x328f,
+ 0xffff, 0x3291, 0x3293, 0xffff, 0x3295, 0xffff, 0xffff, 0x3297,
+ 0xffff, 0x3299, 0xffff, 0x329b, 0xffff, 0x329d, 0xffff, 0x329f,
+ 0xffff, 0x32a1, 0x32a3, 0xffff, 0x32a5, 0xffff, 0xffff, 0x32a7,
+ 0x32a9, 0x32ab, 0x32ad, 0xffff, 0x32af, 0x32b1, 0x32b3, 0x32b5,
+ 0x32b7, 0x32b9, 0x32bb, 0xffff, 0x32bd, 0x32bf, 0x32c1, 0x32c3,
+ 0xffff, 0x32c5, 0x32c7, 0x32c9, 0x32cb, 0xffff, 0x32cd, 0xffff,
+ 0x32cf, 0x32d1, 0x32d3, 0x32d5, 0x32d7, 0x32d9, 0x32db, 0x32dd,
+ 0x32df, 0x32e1, 0xffff, 0x32e3, 0x32e5, 0x32e7, 0x32e9, 0x32eb,
+ 0x32ed, 0x32ef, 0x32f1, 0x32f3, 0x32f5, 0x32f7, 0x32f9, 0x32fb,
+ 0x32fd, 0x32ff, 0x3301, 0x3303, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0x3305, 0x3307, 0x3309, 0xffff, 0x330b, 0x330d, 0x330f,
+ 0x3311, 0x3313, 0xffff, 0x3315, 0x3317, 0x3319, 0x331b, 0x331d,
+ 0x331f, 0x3321, 0x3323, 0x3325, 0x3327, 0x3329, 0x332b, 0x332d,
+ 0x332f, 0x3331, 0x3333, 0x3335, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0xffff, 0xffff, 0x331d, 0x3320, 0x3323, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+
+ 0x3337, 0x333a, 0x333d, 0x3340, 0x3343, 0x3346, 0x3349, 0x334c,
+ 0x334f, 0x3352, 0x3355, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x3358, 0x335c, 0x3360, 0x3364, 0x3368, 0x336c, 0x3370, 0x3374,
+ 0x3378, 0x337c, 0x3380, 0x3384, 0x3388, 0x338c, 0x3390, 0x3394,
+ 0x3398, 0x339c, 0x33a0, 0x33a4, 0x33a8, 0x33ac, 0x33b0, 0x33b4,
+ 0x33b8, 0x33bc, 0x33c0, 0x33c4, 0x33c6, 0x33c8, 0x33cb, 0xffff,
+ 0x33ce, 0x33d0, 0x33d2, 0x33d4, 0x33d6, 0x33d8, 0x33da, 0x33dc,
+ 0x33de, 0x33e0, 0x33e2, 0x33e4, 0x33e6, 0x33e8, 0x33ea, 0x33ec,
+ 0x33ee, 0x33f0, 0x33f2, 0x33f4, 0x33f6, 0x33f8, 0x33fa, 0x33fc,
+ 0x33fe, 0x3400, 0x3402, 0x3405, 0x3408, 0x340b, 0x340e, 0x3412,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0x3415, 0x3418, 0x341b, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x3326, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x341e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11658,17 +12586,17 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x3329, 0x332c, 0x332f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x3421, 0x3424, 0x3427, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x3331, 0x3333, 0x3335, 0x3337, 0x3339, 0x333b, 0x333d, 0x333f,
- 0x3341, 0x3343, 0x3345, 0x3347, 0x3349, 0x334b, 0x334d, 0x334f,
- 0x3351, 0x3353, 0x3355, 0x3357, 0x3359, 0x335b, 0x335d, 0x335f,
- 0x3361, 0x3363, 0x3365, 0x3367, 0x3369, 0x336b, 0x336d, 0x336f,
- 0x3371, 0x3373, 0x3375, 0x3377, 0x3379, 0x337b, 0x337d, 0x337f,
- 0x3381, 0x3383, 0x3385, 0x3387, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x3389, 0x338d, 0x3391, 0x3395, 0x3399, 0x339d, 0x33a1, 0x33a5,
- 0x33a9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x33ad, 0x33af, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x3429, 0x342b, 0x342d, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437,
+ 0x3439, 0x343b, 0x343d, 0x343f, 0x3441, 0x3443, 0x3445, 0x3447,
+ 0x3449, 0x344b, 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3457,
+ 0x3459, 0x345b, 0x345d, 0x345f, 0x3461, 0x3463, 0x3465, 0x3467,
+ 0x3469, 0x346b, 0x346d, 0x346f, 0x3471, 0x3473, 0x3475, 0x3477,
+ 0x3479, 0x347b, 0x347d, 0x347f, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x3481, 0x3485, 0x3489, 0x348d, 0x3491, 0x3495, 0x3499, 0x349d,
+ 0x34a1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x34a5, 0x34a7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11721,79 +12649,79 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x33b1, 0x33b3, 0x33b5, 0x33b7, 0x33b9, 0x33bb, 0x33bd, 0x33bf,
- 0x33c1, 0x33c3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x34a9, 0x34ab, 0x34ad, 0x34af, 0x34b1, 0x34b3, 0x34b5, 0x34b7,
+ 0x34b9, 0x34bb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x33c5, 0x33c7, 0x33c9, 0x33cb, 0x33ce, 0x33d0, 0x33d2, 0x33d4,
- 0x33d6, 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e0, 0x33e3, 0x33e5,
- 0x33e7, 0x33e9, 0x33eb, 0x33ee, 0x33f0, 0x33f2, 0x33f4, 0x33f7,
- 0x33f9, 0x33fb, 0x33fd, 0x33ff, 0x3401, 0x3404, 0x3406, 0x3408,
- 0x340a, 0x340c, 0x340e, 0x3410, 0x3412, 0x3414, 0x3416, 0x3418,
- 0x341a, 0x341c, 0x341e, 0x3420, 0x3422, 0x3424, 0x3426, 0x3428,
- 0x342a, 0x342c, 0x342e, 0x3430, 0x3432, 0x3435, 0x3437, 0x3439,
- 0x343b, 0x343e, 0x3440, 0x3442, 0x3444, 0x3446, 0x3448, 0x344a,
- 0x344c, 0x344e, 0x3450, 0x3452, 0x3454, 0x3456, 0x3458, 0x345a,
- 0x345c, 0x345e, 0x3460, 0x3462, 0x3464, 0x3466, 0x3468, 0x346a,
- 0x346c, 0x346e, 0x3470, 0x3472, 0x3474, 0x3476, 0x3478, 0x347a,
- 0x347c, 0x347e, 0x3481, 0x3483, 0x3485, 0x3487, 0x3489, 0x348b,
- 0x348d, 0x3490, 0x3493, 0x3495, 0x3497, 0x3499, 0x349b, 0x349d,
- 0x349f, 0x34a1, 0x34a3, 0x34a5, 0x34a7, 0x34aa, 0x34ac, 0x34ae,
- 0x34b0, 0x34b2, 0x34b5, 0x34b7, 0x34b9, 0x34bb, 0x34bd, 0x34bf,
- 0x34c1, 0x34c3, 0x34c5, 0x34c7, 0x34ca, 0x34cc, 0x34cf, 0x34d1,
- 0x34d3, 0x34d5, 0x34d7, 0x34d9, 0x34db, 0x34dd, 0x34df, 0x34e1,
- 0x34e3, 0x34e5, 0x34e8, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2,
- 0x34f5, 0x34f7, 0x34fa, 0x34fd, 0x34ff, 0x3501, 0x3503, 0x3505,
- 0x3508, 0x350b, 0x350d, 0x350f, 0x3511, 0x3513, 0x3515, 0x3517,
- 0x3519, 0x351b, 0x351d, 0x351f, 0x3521, 0x3524, 0x3526, 0x3528,
- 0x352a, 0x352c, 0x352e, 0x3530, 0x3532, 0x3534, 0x3536, 0x3538,
- 0x353a, 0x353c, 0x353e, 0x3540, 0x3542, 0x3544, 0x3546, 0x3548,
- 0x354a, 0x354d, 0x354f, 0x3551, 0x3553, 0x3555, 0x3557, 0x355a,
- 0x355c, 0x355e, 0x3560, 0x3562, 0x3564, 0x3566, 0x3568, 0x356a,
- 0x356c, 0x356e, 0x3570, 0x3573, 0x3575, 0x3577, 0x3579, 0x357b,
- 0x357d, 0x357f, 0x3581, 0x3583, 0x3585, 0x3587, 0x3589, 0x358b,
- 0x358d, 0x358f, 0x3591, 0x3593, 0x3595, 0x3597, 0x359a, 0x359c,
- 0x359e, 0x35a0, 0x35a2, 0x35a4, 0x35a7, 0x35a9, 0x35ab, 0x35ad,
- 0x35af, 0x35b1, 0x35b3, 0x35b5, 0x35b7, 0x35ba, 0x35bc, 0x35be,
- 0x35c0, 0x35c3, 0x35c5, 0x35c7, 0x35c9, 0x35cb, 0x35cd, 0x35cf,
- 0x35d2, 0x35d5, 0x35d8, 0x35da, 0x35dd, 0x35df, 0x35e1, 0x35e3,
+ 0x34bd, 0x34bf, 0x34c1, 0x34c3, 0x34c6, 0x34c8, 0x34ca, 0x34cc,
+ 0x34ce, 0x34d0, 0x34d2, 0x34d4, 0x34d6, 0x34d8, 0x34db, 0x34dd,
+ 0x34df, 0x34e1, 0x34e3, 0x34e6, 0x34e8, 0x34ea, 0x34ec, 0x34ef,
+ 0x34f1, 0x34f3, 0x34f5, 0x34f7, 0x34f9, 0x34fc, 0x34fe, 0x3500,
+ 0x3502, 0x3504, 0x3506, 0x3508, 0x350a, 0x350c, 0x350e, 0x3510,
+ 0x3512, 0x3514, 0x3516, 0x3518, 0x351a, 0x351c, 0x351e, 0x3520,
+ 0x3522, 0x3524, 0x3526, 0x3528, 0x352a, 0x352d, 0x352f, 0x3531,
+ 0x3533, 0x3536, 0x3538, 0x353a, 0x353c, 0x353e, 0x3540, 0x3542,
+ 0x3544, 0x3546, 0x3548, 0x354a, 0x354c, 0x354e, 0x3550, 0x3552,
+ 0x3554, 0x3556, 0x3558, 0x355a, 0x355c, 0x355e, 0x3560, 0x3562,
+ 0x3564, 0x3566, 0x3568, 0x356a, 0x356c, 0x356e, 0x3570, 0x3572,
+ 0x3574, 0x3576, 0x3579, 0x357b, 0x357d, 0x357f, 0x3581, 0x3583,
+ 0x3585, 0x3588, 0x358b, 0x358d, 0x358f, 0x3591, 0x3593, 0x3595,
+ 0x3597, 0x3599, 0x359b, 0x359d, 0x359f, 0x35a2, 0x35a4, 0x35a6,
+ 0x35a8, 0x35aa, 0x35ad, 0x35af, 0x35b1, 0x35b3, 0x35b5, 0x35b7,
+ 0x35b9, 0x35bb, 0x35bd, 0x35bf, 0x35c2, 0x35c4, 0x35c7, 0x35c9,
+ 0x35cb, 0x35cd, 0x35cf, 0x35d1, 0x35d3, 0x35d5, 0x35d7, 0x35d9,
+ 0x35db, 0x35dd, 0x35e0, 0x35e2, 0x35e4, 0x35e6, 0x35e8, 0x35ea,
+ 0x35ed, 0x35ef, 0x35f2, 0x35f5, 0x35f7, 0x35f9, 0x35fb, 0x35fd,
+ 0x3600, 0x3603, 0x3605, 0x3607, 0x3609, 0x360b, 0x360d, 0x360f,
+ 0x3611, 0x3613, 0x3615, 0x3617, 0x3619, 0x361c, 0x361e, 0x3620,
+ 0x3622, 0x3624, 0x3626, 0x3628, 0x362a, 0x362c, 0x362e, 0x3630,
+ 0x3632, 0x3634, 0x3636, 0x3638, 0x363a, 0x363c, 0x363e, 0x3640,
+ 0x3642, 0x3645, 0x3647, 0x3649, 0x364b, 0x364d, 0x364f, 0x3652,
+ 0x3654, 0x3656, 0x3658, 0x365a, 0x365c, 0x365e, 0x3660, 0x3662,
+ 0x3664, 0x3666, 0x3668, 0x366b, 0x366d, 0x366f, 0x3671, 0x3673,
+ 0x3675, 0x3677, 0x3679, 0x367b, 0x367d, 0x367f, 0x3681, 0x3683,
+ 0x3685, 0x3687, 0x3689, 0x368b, 0x368d, 0x368f, 0x3692, 0x3694,
+ 0x3696, 0x3698, 0x369a, 0x369c, 0x369f, 0x36a1, 0x36a3, 0x36a5,
+ 0x36a7, 0x36a9, 0x36ab, 0x36ad, 0x36af, 0x36b2, 0x36b4, 0x36b6,
+ 0x36b8, 0x36bb, 0x36bd, 0x36bf, 0x36c1, 0x36c3, 0x36c5, 0x36c7,
+ 0x36ca, 0x36cd, 0x36d0, 0x36d2, 0x36d5, 0x36d7, 0x36d9, 0x36db,
- 0x35e5, 0x35e7, 0x35e9, 0x35eb, 0x35ed, 0x35ef, 0x35f1, 0x35f4,
- 0x35f6, 0x35f8, 0x35fa, 0x35fc, 0x35fe, 0x3600, 0x3603, 0x3605,
- 0x3607, 0x360a, 0x360d, 0x360f, 0x3611, 0x3613, 0x3615, 0x3617,
- 0x3619, 0x361b, 0x361d, 0x361f, 0x3622, 0x3624, 0x3627, 0x3629,
- 0x362c, 0x362e, 0x3630, 0x3632, 0x3635, 0x3637, 0x3639, 0x363c,
- 0x363f, 0x3641, 0x3643, 0x3645, 0x3647, 0x3649, 0x364b, 0x364d,
- 0x364f, 0x3651, 0x3653, 0x3655, 0x3657, 0x3659, 0x365c, 0x365e,
- 0x3661, 0x3663, 0x3666, 0x3668, 0x366b, 0x366e, 0x3671, 0x3673,
- 0x3675, 0x3677, 0x367a, 0x367d, 0x3680, 0x3683, 0x3685, 0x3687,
- 0x3689, 0x368b, 0x368d, 0x368f, 0x3691, 0x3693, 0x3696, 0x3698,
- 0x369a, 0x369c, 0x369e, 0x36a1, 0x36a3, 0x36a6, 0x36a9, 0x36ab,
- 0x36ad, 0x36af, 0x36b1, 0x36b3, 0x36b5, 0x36b8, 0x36bb, 0x36be,
- 0x36c0, 0x36c2, 0x36c5, 0x36c7, 0x36c9, 0x36cb, 0x36ce, 0x36d0,
- 0x36d2, 0x36d4, 0x36d6, 0x36d8, 0x36db, 0x36dd, 0x36df, 0x36e1,
- 0x36e3, 0x36e5, 0x36e7, 0x36ea, 0x36ed, 0x36ef, 0x36f2, 0x36f4,
- 0x36f7, 0x36f9, 0x36fb, 0x36fd, 0x3700, 0x3703, 0x3705, 0x3708,
- 0x370a, 0x370d, 0x370f, 0x3711, 0x3713, 0x3715, 0x3717, 0x3719,
- 0x371c, 0x371f, 0x3722, 0x3725, 0x3727, 0x3729, 0x372b, 0x372d,
- 0x372f, 0x3731, 0x3733, 0x3735, 0x3737, 0x3739, 0x373b, 0x373d,
- 0x3740, 0x3742, 0x3744, 0x3746, 0x3748, 0x374a, 0x374c, 0x374e,
- 0x3750, 0x3752, 0x3754, 0x3756, 0x3758, 0x375b, 0x375e, 0x3761,
- 0x3763, 0x3765, 0x3767, 0x3769, 0x376c, 0x376e, 0x3771, 0x3773,
- 0x3775, 0x3778, 0x377b, 0x377d, 0x377f, 0x3781, 0x3783, 0x3785,
- 0x3787, 0x3789, 0x378b, 0x378d, 0x378f, 0x3791, 0x3793, 0x3795,
- 0x3797, 0x3799, 0x379b, 0x379d, 0x379f, 0x37a1, 0x37a4, 0x37a6,
- 0x37a8, 0x37aa, 0x37ac, 0x37ae, 0x37b1, 0x37b4, 0x37b6, 0x37b8,
- 0x37ba, 0x37bc, 0x37be, 0x37c0, 0x37c3, 0x37c5, 0x37c7, 0x37c9,
- 0x37cb, 0x37ce, 0x37d1, 0x37d3, 0x37d5, 0x37d7, 0x37da, 0x37dc,
- 0x37de, 0x37e1, 0x37e4, 0x37e6, 0x37e8, 0x37ea, 0x37ed, 0x37ef,
- 0x37f1, 0x37f3, 0x37f5, 0x37f7, 0x37f9, 0x37fb, 0x37fe, 0x3800,
- 0x3802, 0x3804, 0x3807, 0x3809, 0x380b, 0x380d, 0x380f, 0x3812,
- 0x3815, 0x3817, 0x3819, 0x381b, 0x381e, 0x3820, 0x3823, 0x3825,
+ 0x36dd, 0x36df, 0x36e1, 0x36e3, 0x36e5, 0x36e7, 0x36e9, 0x36ec,
+ 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6, 0x36f8, 0x36fb, 0x36fd,
+ 0x36ff, 0x3702, 0x3705, 0x3707, 0x3709, 0x370b, 0x370d, 0x370f,
+ 0x3711, 0x3713, 0x3715, 0x3717, 0x371a, 0x371c, 0x371f, 0x3721,
+ 0x3724, 0x3726, 0x3728, 0x372a, 0x372d, 0x372f, 0x3731, 0x3734,
+ 0x3737, 0x3739, 0x373b, 0x373d, 0x373f, 0x3741, 0x3743, 0x3745,
+ 0x3747, 0x3749, 0x374b, 0x374d, 0x374f, 0x3751, 0x3754, 0x3756,
+ 0x3759, 0x375b, 0x375e, 0x3760, 0x3763, 0x3766, 0x3769, 0x376b,
+ 0x376d, 0x376f, 0x3772, 0x3775, 0x3778, 0x377b, 0x377d, 0x377f,
+ 0x3781, 0x3783, 0x3785, 0x3787, 0x3789, 0x378b, 0x378e, 0x3790,
+ 0x3792, 0x3794, 0x3796, 0x3799, 0x379b, 0x379e, 0x37a1, 0x37a3,
+ 0x37a5, 0x37a7, 0x37a9, 0x37ab, 0x37ad, 0x37b0, 0x37b3, 0x37b6,
+ 0x37b8, 0x37ba, 0x37bd, 0x37bf, 0x37c1, 0x37c3, 0x37c6, 0x37c8,
+ 0x37ca, 0x37cc, 0x37ce, 0x37d0, 0x37d3, 0x37d5, 0x37d7, 0x37d9,
+ 0x37db, 0x37dd, 0x37df, 0x37e2, 0x37e5, 0x37e7, 0x37ea, 0x37ec,
+ 0x37ef, 0x37f1, 0x37f3, 0x37f5, 0x37f8, 0x37fb, 0x37fd, 0x3800,
+ 0x3802, 0x3805, 0x3807, 0x3809, 0x380b, 0x380d, 0x380f, 0x3811,
+ 0x3814, 0x3817, 0x381a, 0x381d, 0x381f, 0x3821, 0x3823, 0x3825,
+ 0x3827, 0x3829, 0x382b, 0x382d, 0x382f, 0x3831, 0x3833, 0x3835,
+ 0x3838, 0x383a, 0x383c, 0x383e, 0x3840, 0x3842, 0x3844, 0x3846,
+ 0x3848, 0x384a, 0x384c, 0x384e, 0x3850, 0x3853, 0x3856, 0x3859,
+ 0x385b, 0x385d, 0x385f, 0x3861, 0x3864, 0x3866, 0x3869, 0x386b,
+ 0x386d, 0x3870, 0x3873, 0x3875, 0x3877, 0x3879, 0x387b, 0x387d,
+ 0x387f, 0x3881, 0x3883, 0x3885, 0x3887, 0x3889, 0x388b, 0x388d,
+ 0x388f, 0x3891, 0x3893, 0x3895, 0x3897, 0x3899, 0x389c, 0x389e,
+ 0x38a0, 0x38a2, 0x38a4, 0x38a6, 0x38a9, 0x38ac, 0x38ae, 0x38b0,
+ 0x38b2, 0x38b4, 0x38b6, 0x38b8, 0x38bb, 0x38bd, 0x38bf, 0x38c1,
+ 0x38c3, 0x38c6, 0x38c9, 0x38cb, 0x38cd, 0x38cf, 0x38d2, 0x38d4,
+ 0x38d6, 0x38d9, 0x38dc, 0x38de, 0x38e0, 0x38e2, 0x38e5, 0x38e7,
+ 0x38e9, 0x38eb, 0x38ed, 0x38ef, 0x38f1, 0x38f3, 0x38f6, 0x38f8,
+ 0x38fa, 0x38fc, 0x38ff, 0x3901, 0x3903, 0x3905, 0x3907, 0x390a,
+ 0x390d, 0x390f, 0x3911, 0x3913, 0x3916, 0x3918, 0x391b, 0x391d,
- 0x3827, 0x3829, 0x382c, 0x382e, 0x3830, 0x3832, 0x3834, 0x3836,
- 0x3838, 0x383a, 0x383d, 0x383f, 0x3841, 0x3843, 0x3845, 0x3847,
- 0x3849, 0x384c, 0x384e, 0x3851, 0x3854, 0x3857, 0x3859, 0x385b,
- 0x385d, 0x385f, 0x3861, 0x3863, 0x3865, 0x3867, 0xffff, 0xffff,
+ 0x391f, 0x3921, 0x3924, 0x3926, 0x3928, 0x392a, 0x392c, 0x392e,
+ 0x3930, 0x3932, 0x3935, 0x3937, 0x3939, 0x393b, 0x393d, 0x393f,
+ 0x3941, 0x3944, 0x3946, 0x3949, 0x394c, 0x394f, 0x3951, 0x3953,
+ 0x3955, 0x3957, 0x3959, 0x395b, 0x395d, 0x395f, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -11831,7 +12759,7 @@ static const unsigned short uc_decomposition_trie[] = {
? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400) >> 8) + 0x340] + (ucs4 & 0xff)] \
: 0xffff)
-static const unsigned short uc_decomposition_map[] = {
+static constexpr unsigned short uc_decomposition_map[] = {
0x103, 0x20, 0x210, 0x20, 0x308, 0x109, 0x61, 0x210,
0x20, 0x304, 0x109, 0x32, 0x109, 0x33, 0x210, 0x20,
0x301, 0x110, 0x3bc, 0x210, 0x20, 0x327, 0x109, 0x31,
@@ -12663,677 +13591,678 @@ static const unsigned short uc_decomposition_map[] = {
0x310, 0x32, 0x37, 0x65e5, 0x310, 0x32, 0x38, 0x65e5,
0x310, 0x32, 0x39, 0x65e5, 0x310, 0x33, 0x30, 0x65e5,
0x310, 0x33, 0x31, 0x65e5, 0x30f, 0x67, 0x61, 0x6c,
- 0x109, 0x44a, 0x109, 0x44c, 0x109, 0xa76f, 0x109, 0x126,
- 0x109, 0x153, 0x109, 0xa727, 0x109, 0xab37, 0x109, 0x26b,
- 0x109, 0xab52, 0x109, 0x28d, 0x101, 0x8c48, 0x101, 0x66f4,
- 0x101, 0x8eca, 0x101, 0x8cc8, 0x101, 0x6ed1, 0x101, 0x4e32,
- 0x101, 0x53e5, 0x101, 0x9f9c, 0x101, 0x9f9c, 0x101, 0x5951,
- 0x101, 0x91d1, 0x101, 0x5587, 0x101, 0x5948, 0x101, 0x61f6,
- 0x101, 0x7669, 0x101, 0x7f85, 0x101, 0x863f, 0x101, 0x87ba,
- 0x101, 0x88f8, 0x101, 0x908f, 0x101, 0x6a02, 0x101, 0x6d1b,
- 0x101, 0x70d9, 0x101, 0x73de, 0x101, 0x843d, 0x101, 0x916a,
- 0x101, 0x99f1, 0x101, 0x4e82, 0x101, 0x5375, 0x101, 0x6b04,
- 0x101, 0x721b, 0x101, 0x862d, 0x101, 0x9e1e, 0x101, 0x5d50,
- 0x101, 0x6feb, 0x101, 0x85cd, 0x101, 0x8964, 0x101, 0x62c9,
- 0x101, 0x81d8, 0x101, 0x881f, 0x101, 0x5eca, 0x101, 0x6717,
- 0x101, 0x6d6a, 0x101, 0x72fc, 0x101, 0x90ce, 0x101, 0x4f86,
- 0x101, 0x51b7, 0x101, 0x52de, 0x101, 0x64c4, 0x101, 0x6ad3,
- 0x101, 0x7210, 0x101, 0x76e7, 0x101, 0x8001, 0x101, 0x8606,
- 0x101, 0x865c, 0x101, 0x8def, 0x101, 0x9732, 0x101, 0x9b6f,
- 0x101, 0x9dfa, 0x101, 0x788c, 0x101, 0x797f, 0x101, 0x7da0,
- 0x101, 0x83c9, 0x101, 0x9304, 0x101, 0x9e7f, 0x101, 0x8ad6,
- 0x101, 0x58df, 0x101, 0x5f04, 0x101, 0x7c60, 0x101, 0x807e,
- 0x101, 0x7262, 0x101, 0x78ca, 0x101, 0x8cc2, 0x101, 0x96f7,
- 0x101, 0x58d8, 0x101, 0x5c62, 0x101, 0x6a13, 0x101, 0x6dda,
- 0x101, 0x6f0f, 0x101, 0x7d2f, 0x101, 0x7e37, 0x101, 0x964b,
- 0x101, 0x52d2, 0x101, 0x808b, 0x101, 0x51dc, 0x101, 0x51cc,
- 0x101, 0x7a1c, 0x101, 0x7dbe, 0x101, 0x83f1, 0x101, 0x9675,
- 0x101, 0x8b80, 0x101, 0x62cf, 0x101, 0x6a02, 0x101, 0x8afe,
- 0x101, 0x4e39, 0x101, 0x5be7, 0x101, 0x6012, 0x101, 0x7387,
- 0x101, 0x7570, 0x101, 0x5317, 0x101, 0x78fb, 0x101, 0x4fbf,
- 0x101, 0x5fa9, 0x101, 0x4e0d, 0x101, 0x6ccc, 0x101, 0x6578,
- 0x101, 0x7d22, 0x101, 0x53c3, 0x101, 0x585e, 0x101, 0x7701,
- 0x101, 0x8449, 0x101, 0x8aaa, 0x101, 0x6bba, 0x101, 0x8fb0,
- 0x101, 0x6c88, 0x101, 0x62fe, 0x101, 0x82e5, 0x101, 0x63a0,
- 0x101, 0x7565, 0x101, 0x4eae, 0x101, 0x5169, 0x101, 0x51c9,
- 0x101, 0x6881, 0x101, 0x7ce7, 0x101, 0x826f, 0x101, 0x8ad2,
- 0x101, 0x91cf, 0x101, 0x52f5, 0x101, 0x5442, 0x101, 0x5973,
- 0x101, 0x5eec, 0x101, 0x65c5, 0x101, 0x6ffe, 0x101, 0x792a,
- 0x101, 0x95ad, 0x101, 0x9a6a, 0x101, 0x9e97, 0x101, 0x9ece,
- 0x101, 0x529b, 0x101, 0x66c6, 0x101, 0x6b77, 0x101, 0x8f62,
- 0x101, 0x5e74, 0x101, 0x6190, 0x101, 0x6200, 0x101, 0x649a,
- 0x101, 0x6f23, 0x101, 0x7149, 0x101, 0x7489, 0x101, 0x79ca,
- 0x101, 0x7df4, 0x101, 0x806f, 0x101, 0x8f26, 0x101, 0x84ee,
- 0x101, 0x9023, 0x101, 0x934a, 0x101, 0x5217, 0x101, 0x52a3,
- 0x101, 0x54bd, 0x101, 0x70c8, 0x101, 0x88c2, 0x101, 0x8aaa,
- 0x101, 0x5ec9, 0x101, 0x5ff5, 0x101, 0x637b, 0x101, 0x6bae,
- 0x101, 0x7c3e, 0x101, 0x7375, 0x101, 0x4ee4, 0x101, 0x56f9,
- 0x101, 0x5be7, 0x101, 0x5dba, 0x101, 0x601c, 0x101, 0x73b2,
- 0x101, 0x7469, 0x101, 0x7f9a, 0x101, 0x8046, 0x101, 0x9234,
- 0x101, 0x96f6, 0x101, 0x9748, 0x101, 0x9818, 0x101, 0x4f8b,
- 0x101, 0x79ae, 0x101, 0x91b4, 0x101, 0x96b8, 0x101, 0x60e1,
- 0x101, 0x4e86, 0x101, 0x50da, 0x101, 0x5bee, 0x101, 0x5c3f,
- 0x101, 0x6599, 0x101, 0x6a02, 0x101, 0x71ce, 0x101, 0x7642,
- 0x101, 0x84fc, 0x101, 0x907c, 0x101, 0x9f8d, 0x101, 0x6688,
- 0x101, 0x962e, 0x101, 0x5289, 0x101, 0x677b, 0x101, 0x67f3,
- 0x101, 0x6d41, 0x101, 0x6e9c, 0x101, 0x7409, 0x101, 0x7559,
- 0x101, 0x786b, 0x101, 0x7d10, 0x101, 0x985e, 0x101, 0x516d,
- 0x101, 0x622e, 0x101, 0x9678, 0x101, 0x502b, 0x101, 0x5d19,
- 0x101, 0x6dea, 0x101, 0x8f2a, 0x101, 0x5f8b, 0x101, 0x6144,
- 0x101, 0x6817, 0x101, 0x7387, 0x101, 0x9686, 0x101, 0x5229,
- 0x101, 0x540f, 0x101, 0x5c65, 0x101, 0x6613, 0x101, 0x674e,
- 0x101, 0x68a8, 0x101, 0x6ce5, 0x101, 0x7406, 0x101, 0x75e2,
- 0x101, 0x7f79, 0x101, 0x88cf, 0x101, 0x88e1, 0x101, 0x91cc,
- 0x101, 0x96e2, 0x101, 0x533f, 0x101, 0x6eba, 0x101, 0x541d,
- 0x101, 0x71d0, 0x101, 0x7498, 0x101, 0x85fa, 0x101, 0x96a3,
- 0x101, 0x9c57, 0x101, 0x9e9f, 0x101, 0x6797, 0x101, 0x6dcb,
- 0x101, 0x81e8, 0x101, 0x7acb, 0x101, 0x7b20, 0x101, 0x7c92,
- 0x101, 0x72c0, 0x101, 0x7099, 0x101, 0x8b58, 0x101, 0x4ec0,
- 0x101, 0x8336, 0x101, 0x523a, 0x101, 0x5207, 0x101, 0x5ea6,
- 0x101, 0x62d3, 0x101, 0x7cd6, 0x101, 0x5b85, 0x101, 0x6d1e,
- 0x101, 0x66b4, 0x101, 0x8f3b, 0x101, 0x884c, 0x101, 0x964d,
- 0x101, 0x898b, 0x101, 0x5ed3, 0x101, 0x5140, 0x101, 0x55c0,
- 0x101, 0x585a, 0x101, 0x6674, 0x101, 0x51de, 0x101, 0x732a,
- 0x101, 0x76ca, 0x101, 0x793c, 0x101, 0x795e, 0x101, 0x7965,
- 0x101, 0x798f, 0x101, 0x9756, 0x101, 0x7cbe, 0x101, 0x7fbd,
- 0x101, 0x8612, 0x101, 0x8af8, 0x101, 0x9038, 0x101, 0x90fd,
- 0x101, 0x98ef, 0x101, 0x98fc, 0x101, 0x9928, 0x101, 0x9db4,
- 0x101, 0x90de, 0x101, 0x96b7, 0x101, 0x4fae, 0x101, 0x50e7,
- 0x101, 0x514d, 0x101, 0x52c9, 0x101, 0x52e4, 0x101, 0x5351,
- 0x101, 0x559d, 0x101, 0x5606, 0x101, 0x5668, 0x101, 0x5840,
- 0x101, 0x58a8, 0x101, 0x5c64, 0x101, 0x5c6e, 0x101, 0x6094,
- 0x101, 0x6168, 0x101, 0x618e, 0x101, 0x61f2, 0x101, 0x654f,
- 0x101, 0x65e2, 0x101, 0x6691, 0x101, 0x6885, 0x101, 0x6d77,
- 0x101, 0x6e1a, 0x101, 0x6f22, 0x101, 0x716e, 0x101, 0x722b,
- 0x101, 0x7422, 0x101, 0x7891, 0x101, 0x793e, 0x101, 0x7949,
- 0x101, 0x7948, 0x101, 0x7950, 0x101, 0x7956, 0x101, 0x795d,
- 0x101, 0x798d, 0x101, 0x798e, 0x101, 0x7a40, 0x101, 0x7a81,
- 0x101, 0x7bc0, 0x101, 0x7df4, 0x101, 0x7e09, 0x101, 0x7e41,
- 0x101, 0x7f72, 0x101, 0x8005, 0x101, 0x81ed, 0x101, 0x8279,
- 0x101, 0x8279, 0x101, 0x8457, 0x101, 0x8910, 0x101, 0x8996,
- 0x101, 0x8b01, 0x101, 0x8b39, 0x101, 0x8cd3, 0x101, 0x8d08,
- 0x101, 0x8fb6, 0x101, 0x9038, 0x101, 0x96e3, 0x101, 0x97ff,
- 0x101, 0x983b, 0x101, 0x6075, 0x201, 0xd850, 0xdeee, 0x101,
- 0x8218, 0x101, 0x4e26, 0x101, 0x51b5, 0x101, 0x5168, 0x101,
- 0x4f80, 0x101, 0x5145, 0x101, 0x5180, 0x101, 0x52c7, 0x101,
- 0x52fa, 0x101, 0x559d, 0x101, 0x5555, 0x101, 0x5599, 0x101,
- 0x55e2, 0x101, 0x585a, 0x101, 0x58b3, 0x101, 0x5944, 0x101,
- 0x5954, 0x101, 0x5a62, 0x101, 0x5b28, 0x101, 0x5ed2, 0x101,
- 0x5ed9, 0x101, 0x5f69, 0x101, 0x5fad, 0x101, 0x60d8, 0x101,
- 0x614e, 0x101, 0x6108, 0x101, 0x618e, 0x101, 0x6160, 0x101,
- 0x61f2, 0x101, 0x6234, 0x101, 0x63c4, 0x101, 0x641c, 0x101,
- 0x6452, 0x101, 0x6556, 0x101, 0x6674, 0x101, 0x6717, 0x101,
- 0x671b, 0x101, 0x6756, 0x101, 0x6b79, 0x101, 0x6bba, 0x101,
- 0x6d41, 0x101, 0x6edb, 0x101, 0x6ecb, 0x101, 0x6f22, 0x101,
- 0x701e, 0x101, 0x716e, 0x101, 0x77a7, 0x101, 0x7235, 0x101,
- 0x72af, 0x101, 0x732a, 0x101, 0x7471, 0x101, 0x7506, 0x101,
- 0x753b, 0x101, 0x761d, 0x101, 0x761f, 0x101, 0x76ca, 0x101,
- 0x76db, 0x101, 0x76f4, 0x101, 0x774a, 0x101, 0x7740, 0x101,
- 0x78cc, 0x101, 0x7ab1, 0x101, 0x7bc0, 0x101, 0x7c7b, 0x101,
- 0x7d5b, 0x101, 0x7df4, 0x101, 0x7f3e, 0x101, 0x8005, 0x101,
- 0x8352, 0x101, 0x83ef, 0x101, 0x8779, 0x101, 0x8941, 0x101,
- 0x8986, 0x101, 0x8996, 0x101, 0x8abf, 0x101, 0x8af8, 0x101,
- 0x8acb, 0x101, 0x8b01, 0x101, 0x8afe, 0x101, 0x8aed, 0x101,
- 0x8b39, 0x101, 0x8b8a, 0x101, 0x8d08, 0x101, 0x8f38, 0x101,
- 0x9072, 0x101, 0x9199, 0x101, 0x9276, 0x101, 0x967c, 0x101,
- 0x96e3, 0x101, 0x9756, 0x101, 0x97db, 0x101, 0x97ff, 0x101,
- 0x980b, 0x101, 0x983b, 0x101, 0x9b12, 0x101, 0x9f9c, 0x201,
- 0xd84a, 0xdc4a, 0x201, 0xd84a, 0xdc44, 0x201, 0xd84c, 0xdfd5,
- 0x101, 0x3b9d, 0x101, 0x4018, 0x101, 0x4039, 0x201, 0xd854,
- 0xde49, 0x201, 0xd857, 0xdcd0, 0x201, 0xd85f, 0xded3, 0x101,
- 0x9f43, 0x101, 0x9f8e, 0x210, 0x66, 0x66, 0x210, 0x66,
- 0x69, 0x210, 0x66, 0x6c, 0x310, 0x66, 0x66, 0x69,
- 0x310, 0x66, 0x66, 0x6c, 0x210, 0x17f, 0x74, 0x210,
- 0x73, 0x74, 0x210, 0x574, 0x576, 0x210, 0x574, 0x565,
- 0x210, 0x574, 0x56b, 0x210, 0x57e, 0x576, 0x210, 0x574,
- 0x56d, 0x201, 0x5d9, 0x5b4, 0x201, 0x5f2, 0x5b7, 0x102,
- 0x5e2, 0x102, 0x5d0, 0x102, 0x5d3, 0x102, 0x5d4, 0x102,
- 0x5db, 0x102, 0x5dc, 0x102, 0x5dd, 0x102, 0x5e8, 0x102,
- 0x5ea, 0x102, 0x2b, 0x201, 0x5e9, 0x5c1, 0x201, 0x5e9,
- 0x5c2, 0x201, 0xfb49, 0x5c1, 0x201, 0xfb49, 0x5c2, 0x201,
- 0x5d0, 0x5b7, 0x201, 0x5d0, 0x5b8, 0x201, 0x5d0, 0x5bc,
- 0x201, 0x5d1, 0x5bc, 0x201, 0x5d2, 0x5bc, 0x201, 0x5d3,
- 0x5bc, 0x201, 0x5d4, 0x5bc, 0x201, 0x5d5, 0x5bc, 0x201,
- 0x5d6, 0x5bc, 0x201, 0x5d8, 0x5bc, 0x201, 0x5d9, 0x5bc,
- 0x201, 0x5da, 0x5bc, 0x201, 0x5db, 0x5bc, 0x201, 0x5dc,
- 0x5bc, 0x201, 0x5de, 0x5bc, 0x201, 0x5e0, 0x5bc, 0x201,
- 0x5e1, 0x5bc, 0x201, 0x5e3, 0x5bc, 0x201, 0x5e4, 0x5bc,
- 0x201, 0x5e6, 0x5bc, 0x201, 0x5e7, 0x5bc, 0x201, 0x5e8,
- 0x5bc, 0x201, 0x5e9, 0x5bc, 0x201, 0x5ea, 0x5bc, 0x201,
- 0x5d5, 0x5b9, 0x201, 0x5d1, 0x5bf, 0x201, 0x5db, 0x5bf,
- 0x201, 0x5e4, 0x5bf, 0x210, 0x5d0, 0x5dc, 0x107, 0x671,
- 0x106, 0x671, 0x107, 0x67b, 0x106, 0x67b, 0x104, 0x67b,
- 0x105, 0x67b, 0x107, 0x67e, 0x106, 0x67e, 0x104, 0x67e,
- 0x105, 0x67e, 0x107, 0x680, 0x106, 0x680, 0x104, 0x680,
- 0x105, 0x680, 0x107, 0x67a, 0x106, 0x67a, 0x104, 0x67a,
- 0x105, 0x67a, 0x107, 0x67f, 0x106, 0x67f, 0x104, 0x67f,
- 0x105, 0x67f, 0x107, 0x679, 0x106, 0x679, 0x104, 0x679,
- 0x105, 0x679, 0x107, 0x6a4, 0x106, 0x6a4, 0x104, 0x6a4,
- 0x105, 0x6a4, 0x107, 0x6a6, 0x106, 0x6a6, 0x104, 0x6a6,
- 0x105, 0x6a6, 0x107, 0x684, 0x106, 0x684, 0x104, 0x684,
- 0x105, 0x684, 0x107, 0x683, 0x106, 0x683, 0x104, 0x683,
- 0x105, 0x683, 0x107, 0x686, 0x106, 0x686, 0x104, 0x686,
- 0x105, 0x686, 0x107, 0x687, 0x106, 0x687, 0x104, 0x687,
- 0x105, 0x687, 0x107, 0x68d, 0x106, 0x68d, 0x107, 0x68c,
- 0x106, 0x68c, 0x107, 0x68e, 0x106, 0x68e, 0x107, 0x688,
- 0x106, 0x688, 0x107, 0x698, 0x106, 0x698, 0x107, 0x691,
- 0x106, 0x691, 0x107, 0x6a9, 0x106, 0x6a9, 0x104, 0x6a9,
- 0x105, 0x6a9, 0x107, 0x6af, 0x106, 0x6af, 0x104, 0x6af,
- 0x105, 0x6af, 0x107, 0x6b3, 0x106, 0x6b3, 0x104, 0x6b3,
- 0x105, 0x6b3, 0x107, 0x6b1, 0x106, 0x6b1, 0x104, 0x6b1,
- 0x105, 0x6b1, 0x107, 0x6ba, 0x106, 0x6ba, 0x107, 0x6bb,
- 0x106, 0x6bb, 0x104, 0x6bb, 0x105, 0x6bb, 0x107, 0x6c0,
- 0x106, 0x6c0, 0x107, 0x6c1, 0x106, 0x6c1, 0x104, 0x6c1,
- 0x105, 0x6c1, 0x107, 0x6be, 0x106, 0x6be, 0x104, 0x6be,
- 0x105, 0x6be, 0x107, 0x6d2, 0x106, 0x6d2, 0x107, 0x6d3,
- 0x106, 0x6d3, 0x107, 0x6ad, 0x106, 0x6ad, 0x104, 0x6ad,
- 0x105, 0x6ad, 0x107, 0x6c7, 0x106, 0x6c7, 0x107, 0x6c6,
- 0x106, 0x6c6, 0x107, 0x6c8, 0x106, 0x6c8, 0x107, 0x677,
- 0x107, 0x6cb, 0x106, 0x6cb, 0x107, 0x6c5, 0x106, 0x6c5,
- 0x107, 0x6c9, 0x106, 0x6c9, 0x107, 0x6d0, 0x106, 0x6d0,
- 0x104, 0x6d0, 0x105, 0x6d0, 0x104, 0x649, 0x105, 0x649,
- 0x207, 0x626, 0x627, 0x206, 0x626, 0x627, 0x207, 0x626,
- 0x6d5, 0x206, 0x626, 0x6d5, 0x207, 0x626, 0x648, 0x206,
- 0x626, 0x648, 0x207, 0x626, 0x6c7, 0x206, 0x626, 0x6c7,
- 0x207, 0x626, 0x6c6, 0x206, 0x626, 0x6c6, 0x207, 0x626,
- 0x6c8, 0x206, 0x626, 0x6c8, 0x207, 0x626, 0x6d0, 0x206,
- 0x626, 0x6d0, 0x204, 0x626, 0x6d0, 0x207, 0x626, 0x649,
- 0x206, 0x626, 0x649, 0x204, 0x626, 0x649, 0x107, 0x6cc,
- 0x106, 0x6cc, 0x104, 0x6cc, 0x105, 0x6cc, 0x207, 0x626,
- 0x62c, 0x207, 0x626, 0x62d, 0x207, 0x626, 0x645, 0x207,
- 0x626, 0x649, 0x207, 0x626, 0x64a, 0x207, 0x628, 0x62c,
- 0x207, 0x628, 0x62d, 0x207, 0x628, 0x62e, 0x207, 0x628,
- 0x645, 0x207, 0x628, 0x649, 0x207, 0x628, 0x64a, 0x207,
- 0x62a, 0x62c, 0x207, 0x62a, 0x62d, 0x207, 0x62a, 0x62e,
- 0x207, 0x62a, 0x645, 0x207, 0x62a, 0x649, 0x207, 0x62a,
- 0x64a, 0x207, 0x62b, 0x62c, 0x207, 0x62b, 0x645, 0x207,
- 0x62b, 0x649, 0x207, 0x62b, 0x64a, 0x207, 0x62c, 0x62d,
- 0x207, 0x62c, 0x645, 0x207, 0x62d, 0x62c, 0x207, 0x62d,
- 0x645, 0x207, 0x62e, 0x62c, 0x207, 0x62e, 0x62d, 0x207,
- 0x62e, 0x645, 0x207, 0x633, 0x62c, 0x207, 0x633, 0x62d,
- 0x207, 0x633, 0x62e, 0x207, 0x633, 0x645, 0x207, 0x635,
- 0x62d, 0x207, 0x635, 0x645, 0x207, 0x636, 0x62c, 0x207,
- 0x636, 0x62d, 0x207, 0x636, 0x62e, 0x207, 0x636, 0x645,
- 0x207, 0x637, 0x62d, 0x207, 0x637, 0x645, 0x207, 0x638,
- 0x645, 0x207, 0x639, 0x62c, 0x207, 0x639, 0x645, 0x207,
- 0x63a, 0x62c, 0x207, 0x63a, 0x645, 0x207, 0x641, 0x62c,
- 0x207, 0x641, 0x62d, 0x207, 0x641, 0x62e, 0x207, 0x641,
- 0x645, 0x207, 0x641, 0x649, 0x207, 0x641, 0x64a, 0x207,
- 0x642, 0x62d, 0x207, 0x642, 0x645, 0x207, 0x642, 0x649,
- 0x207, 0x642, 0x64a, 0x207, 0x643, 0x627, 0x207, 0x643,
- 0x62c, 0x207, 0x643, 0x62d, 0x207, 0x643, 0x62e, 0x207,
- 0x643, 0x644, 0x207, 0x643, 0x645, 0x207, 0x643, 0x649,
- 0x207, 0x643, 0x64a, 0x207, 0x644, 0x62c, 0x207, 0x644,
- 0x62d, 0x207, 0x644, 0x62e, 0x207, 0x644, 0x645, 0x207,
- 0x644, 0x649, 0x207, 0x644, 0x64a, 0x207, 0x645, 0x62c,
- 0x207, 0x645, 0x62d, 0x207, 0x645, 0x62e, 0x207, 0x645,
- 0x645, 0x207, 0x645, 0x649, 0x207, 0x645, 0x64a, 0x207,
- 0x646, 0x62c, 0x207, 0x646, 0x62d, 0x207, 0x646, 0x62e,
- 0x207, 0x646, 0x645, 0x207, 0x646, 0x649, 0x207, 0x646,
- 0x64a, 0x207, 0x647, 0x62c, 0x207, 0x647, 0x645, 0x207,
- 0x647, 0x649, 0x207, 0x647, 0x64a, 0x207, 0x64a, 0x62c,
- 0x207, 0x64a, 0x62d, 0x207, 0x64a, 0x62e, 0x207, 0x64a,
- 0x645, 0x207, 0x64a, 0x649, 0x207, 0x64a, 0x64a, 0x207,
- 0x630, 0x670, 0x207, 0x631, 0x670, 0x207, 0x649, 0x670,
- 0x307, 0x20, 0x64c, 0x651, 0x307, 0x20, 0x64d, 0x651,
- 0x307, 0x20, 0x64e, 0x651, 0x307, 0x20, 0x64f, 0x651,
- 0x307, 0x20, 0x650, 0x651, 0x307, 0x20, 0x651, 0x670,
- 0x206, 0x626, 0x631, 0x206, 0x626, 0x632, 0x206, 0x626,
- 0x645, 0x206, 0x626, 0x646, 0x206, 0x626, 0x649, 0x206,
- 0x626, 0x64a, 0x206, 0x628, 0x631, 0x206, 0x628, 0x632,
- 0x206, 0x628, 0x645, 0x206, 0x628, 0x646, 0x206, 0x628,
- 0x649, 0x206, 0x628, 0x64a, 0x206, 0x62a, 0x631, 0x206,
- 0x62a, 0x632, 0x206, 0x62a, 0x645, 0x206, 0x62a, 0x646,
- 0x206, 0x62a, 0x649, 0x206, 0x62a, 0x64a, 0x206, 0x62b,
- 0x631, 0x206, 0x62b, 0x632, 0x206, 0x62b, 0x645, 0x206,
- 0x62b, 0x646, 0x206, 0x62b, 0x649, 0x206, 0x62b, 0x64a,
- 0x206, 0x641, 0x649, 0x206, 0x641, 0x64a, 0x206, 0x642,
- 0x649, 0x206, 0x642, 0x64a, 0x206, 0x643, 0x627, 0x206,
- 0x643, 0x644, 0x206, 0x643, 0x645, 0x206, 0x643, 0x649,
- 0x206, 0x643, 0x64a, 0x206, 0x644, 0x645, 0x206, 0x644,
- 0x649, 0x206, 0x644, 0x64a, 0x206, 0x645, 0x627, 0x206,
- 0x645, 0x645, 0x206, 0x646, 0x631, 0x206, 0x646, 0x632,
- 0x206, 0x646, 0x645, 0x206, 0x646, 0x646, 0x206, 0x646,
- 0x649, 0x206, 0x646, 0x64a, 0x206, 0x649, 0x670, 0x206,
- 0x64a, 0x631, 0x206, 0x64a, 0x632, 0x206, 0x64a, 0x645,
- 0x206, 0x64a, 0x646, 0x206, 0x64a, 0x649, 0x206, 0x64a,
- 0x64a, 0x204, 0x626, 0x62c, 0x204, 0x626, 0x62d, 0x204,
- 0x626, 0x62e, 0x204, 0x626, 0x645, 0x204, 0x626, 0x647,
- 0x204, 0x628, 0x62c, 0x204, 0x628, 0x62d, 0x204, 0x628,
- 0x62e, 0x204, 0x628, 0x645, 0x204, 0x628, 0x647, 0x204,
- 0x62a, 0x62c, 0x204, 0x62a, 0x62d, 0x204, 0x62a, 0x62e,
- 0x204, 0x62a, 0x645, 0x204, 0x62a, 0x647, 0x204, 0x62b,
- 0x645, 0x204, 0x62c, 0x62d, 0x204, 0x62c, 0x645, 0x204,
- 0x62d, 0x62c, 0x204, 0x62d, 0x645, 0x204, 0x62e, 0x62c,
- 0x204, 0x62e, 0x645, 0x204, 0x633, 0x62c, 0x204, 0x633,
- 0x62d, 0x204, 0x633, 0x62e, 0x204, 0x633, 0x645, 0x204,
- 0x635, 0x62d, 0x204, 0x635, 0x62e, 0x204, 0x635, 0x645,
- 0x204, 0x636, 0x62c, 0x204, 0x636, 0x62d, 0x204, 0x636,
- 0x62e, 0x204, 0x636, 0x645, 0x204, 0x637, 0x62d, 0x204,
- 0x638, 0x645, 0x204, 0x639, 0x62c, 0x204, 0x639, 0x645,
- 0x204, 0x63a, 0x62c, 0x204, 0x63a, 0x645, 0x204, 0x641,
- 0x62c, 0x204, 0x641, 0x62d, 0x204, 0x641, 0x62e, 0x204,
- 0x641, 0x645, 0x204, 0x642, 0x62d, 0x204, 0x642, 0x645,
- 0x204, 0x643, 0x62c, 0x204, 0x643, 0x62d, 0x204, 0x643,
- 0x62e, 0x204, 0x643, 0x644, 0x204, 0x643, 0x645, 0x204,
- 0x644, 0x62c, 0x204, 0x644, 0x62d, 0x204, 0x644, 0x62e,
- 0x204, 0x644, 0x645, 0x204, 0x644, 0x647, 0x204, 0x645,
- 0x62c, 0x204, 0x645, 0x62d, 0x204, 0x645, 0x62e, 0x204,
- 0x645, 0x645, 0x204, 0x646, 0x62c, 0x204, 0x646, 0x62d,
- 0x204, 0x646, 0x62e, 0x204, 0x646, 0x645, 0x204, 0x646,
- 0x647, 0x204, 0x647, 0x62c, 0x204, 0x647, 0x645, 0x204,
- 0x647, 0x670, 0x204, 0x64a, 0x62c, 0x204, 0x64a, 0x62d,
- 0x204, 0x64a, 0x62e, 0x204, 0x64a, 0x645, 0x204, 0x64a,
- 0x647, 0x205, 0x626, 0x645, 0x205, 0x626, 0x647, 0x205,
- 0x628, 0x645, 0x205, 0x628, 0x647, 0x205, 0x62a, 0x645,
- 0x205, 0x62a, 0x647, 0x205, 0x62b, 0x645, 0x205, 0x62b,
- 0x647, 0x205, 0x633, 0x645, 0x205, 0x633, 0x647, 0x205,
- 0x634, 0x645, 0x205, 0x634, 0x647, 0x205, 0x643, 0x644,
- 0x205, 0x643, 0x645, 0x205, 0x644, 0x645, 0x205, 0x646,
- 0x645, 0x205, 0x646, 0x647, 0x205, 0x64a, 0x645, 0x205,
- 0x64a, 0x647, 0x305, 0x640, 0x64e, 0x651, 0x305, 0x640,
- 0x64f, 0x651, 0x305, 0x640, 0x650, 0x651, 0x207, 0x637,
- 0x649, 0x207, 0x637, 0x64a, 0x207, 0x639, 0x649, 0x207,
- 0x639, 0x64a, 0x207, 0x63a, 0x649, 0x207, 0x63a, 0x64a,
- 0x207, 0x633, 0x649, 0x207, 0x633, 0x64a, 0x207, 0x634,
- 0x649, 0x207, 0x634, 0x64a, 0x207, 0x62d, 0x649, 0x207,
- 0x62d, 0x64a, 0x207, 0x62c, 0x649, 0x207, 0x62c, 0x64a,
- 0x207, 0x62e, 0x649, 0x207, 0x62e, 0x64a, 0x207, 0x635,
- 0x649, 0x207, 0x635, 0x64a, 0x207, 0x636, 0x649, 0x207,
- 0x636, 0x64a, 0x207, 0x634, 0x62c, 0x207, 0x634, 0x62d,
- 0x207, 0x634, 0x62e, 0x207, 0x634, 0x645, 0x207, 0x634,
- 0x631, 0x207, 0x633, 0x631, 0x207, 0x635, 0x631, 0x207,
- 0x636, 0x631, 0x206, 0x637, 0x649, 0x206, 0x637, 0x64a,
- 0x206, 0x639, 0x649, 0x206, 0x639, 0x64a, 0x206, 0x63a,
- 0x649, 0x206, 0x63a, 0x64a, 0x206, 0x633, 0x649, 0x206,
- 0x633, 0x64a, 0x206, 0x634, 0x649, 0x206, 0x634, 0x64a,
- 0x206, 0x62d, 0x649, 0x206, 0x62d, 0x64a, 0x206, 0x62c,
- 0x649, 0x206, 0x62c, 0x64a, 0x206, 0x62e, 0x649, 0x206,
- 0x62e, 0x64a, 0x206, 0x635, 0x649, 0x206, 0x635, 0x64a,
- 0x206, 0x636, 0x649, 0x206, 0x636, 0x64a, 0x206, 0x634,
- 0x62c, 0x206, 0x634, 0x62d, 0x206, 0x634, 0x62e, 0x206,
- 0x634, 0x645, 0x206, 0x634, 0x631, 0x206, 0x633, 0x631,
- 0x206, 0x635, 0x631, 0x206, 0x636, 0x631, 0x204, 0x634,
- 0x62c, 0x204, 0x634, 0x62d, 0x204, 0x634, 0x62e, 0x204,
- 0x634, 0x645, 0x204, 0x633, 0x647, 0x204, 0x634, 0x647,
- 0x204, 0x637, 0x645, 0x205, 0x633, 0x62c, 0x205, 0x633,
- 0x62d, 0x205, 0x633, 0x62e, 0x205, 0x634, 0x62c, 0x205,
- 0x634, 0x62d, 0x205, 0x634, 0x62e, 0x205, 0x637, 0x645,
- 0x205, 0x638, 0x645, 0x206, 0x627, 0x64b, 0x207, 0x627,
- 0x64b, 0x304, 0x62a, 0x62c, 0x645, 0x306, 0x62a, 0x62d,
- 0x62c, 0x304, 0x62a, 0x62d, 0x62c, 0x304, 0x62a, 0x62d,
- 0x645, 0x304, 0x62a, 0x62e, 0x645, 0x304, 0x62a, 0x645,
- 0x62c, 0x304, 0x62a, 0x645, 0x62d, 0x304, 0x62a, 0x645,
- 0x62e, 0x306, 0x62c, 0x645, 0x62d, 0x304, 0x62c, 0x645,
- 0x62d, 0x306, 0x62d, 0x645, 0x64a, 0x306, 0x62d, 0x645,
- 0x649, 0x304, 0x633, 0x62d, 0x62c, 0x304, 0x633, 0x62c,
- 0x62d, 0x306, 0x633, 0x62c, 0x649, 0x306, 0x633, 0x645,
- 0x62d, 0x304, 0x633, 0x645, 0x62d, 0x304, 0x633, 0x645,
- 0x62c, 0x306, 0x633, 0x645, 0x645, 0x304, 0x633, 0x645,
- 0x645, 0x306, 0x635, 0x62d, 0x62d, 0x304, 0x635, 0x62d,
- 0x62d, 0x306, 0x635, 0x645, 0x645, 0x306, 0x634, 0x62d,
- 0x645, 0x304, 0x634, 0x62d, 0x645, 0x306, 0x634, 0x62c,
- 0x64a, 0x306, 0x634, 0x645, 0x62e, 0x304, 0x634, 0x645,
- 0x62e, 0x306, 0x634, 0x645, 0x645, 0x304, 0x634, 0x645,
- 0x645, 0x306, 0x636, 0x62d, 0x649, 0x306, 0x636, 0x62e,
- 0x645, 0x304, 0x636, 0x62e, 0x645, 0x306, 0x637, 0x645,
- 0x62d, 0x304, 0x637, 0x645, 0x62d, 0x304, 0x637, 0x645,
- 0x645, 0x306, 0x637, 0x645, 0x64a, 0x306, 0x639, 0x62c,
- 0x645, 0x306, 0x639, 0x645, 0x645, 0x304, 0x639, 0x645,
- 0x645, 0x306, 0x639, 0x645, 0x649, 0x306, 0x63a, 0x645,
- 0x645, 0x306, 0x63a, 0x645, 0x64a, 0x306, 0x63a, 0x645,
- 0x649, 0x306, 0x641, 0x62e, 0x645, 0x304, 0x641, 0x62e,
- 0x645, 0x306, 0x642, 0x645, 0x62d, 0x306, 0x642, 0x645,
- 0x645, 0x306, 0x644, 0x62d, 0x645, 0x306, 0x644, 0x62d,
- 0x64a, 0x306, 0x644, 0x62d, 0x649, 0x304, 0x644, 0x62c,
- 0x62c, 0x306, 0x644, 0x62c, 0x62c, 0x306, 0x644, 0x62e,
- 0x645, 0x304, 0x644, 0x62e, 0x645, 0x306, 0x644, 0x645,
- 0x62d, 0x304, 0x644, 0x645, 0x62d, 0x304, 0x645, 0x62d,
- 0x62c, 0x304, 0x645, 0x62d, 0x645, 0x306, 0x645, 0x62d,
- 0x64a, 0x304, 0x645, 0x62c, 0x62d, 0x304, 0x645, 0x62c,
- 0x645, 0x304, 0x645, 0x62e, 0x62c, 0x304, 0x645, 0x62e,
- 0x645, 0x304, 0x645, 0x62c, 0x62e, 0x304, 0x647, 0x645,
- 0x62c, 0x304, 0x647, 0x645, 0x645, 0x304, 0x646, 0x62d,
- 0x645, 0x306, 0x646, 0x62d, 0x649, 0x306, 0x646, 0x62c,
- 0x645, 0x304, 0x646, 0x62c, 0x645, 0x306, 0x646, 0x62c,
- 0x649, 0x306, 0x646, 0x645, 0x64a, 0x306, 0x646, 0x645,
- 0x649, 0x306, 0x64a, 0x645, 0x645, 0x304, 0x64a, 0x645,
- 0x645, 0x306, 0x628, 0x62e, 0x64a, 0x306, 0x62a, 0x62c,
- 0x64a, 0x306, 0x62a, 0x62c, 0x649, 0x306, 0x62a, 0x62e,
- 0x64a, 0x306, 0x62a, 0x62e, 0x649, 0x306, 0x62a, 0x645,
- 0x64a, 0x306, 0x62a, 0x645, 0x649, 0x306, 0x62c, 0x645,
- 0x64a, 0x306, 0x62c, 0x62d, 0x649, 0x306, 0x62c, 0x645,
- 0x649, 0x306, 0x633, 0x62e, 0x649, 0x306, 0x635, 0x62d,
- 0x64a, 0x306, 0x634, 0x62d, 0x64a, 0x306, 0x636, 0x62d,
- 0x64a, 0x306, 0x644, 0x62c, 0x64a, 0x306, 0x644, 0x645,
- 0x64a, 0x306, 0x64a, 0x62d, 0x64a, 0x306, 0x64a, 0x62c,
- 0x64a, 0x306, 0x64a, 0x645, 0x64a, 0x306, 0x645, 0x645,
- 0x64a, 0x306, 0x642, 0x645, 0x64a, 0x306, 0x646, 0x62d,
- 0x64a, 0x304, 0x642, 0x645, 0x62d, 0x304, 0x644, 0x62d,
- 0x645, 0x306, 0x639, 0x645, 0x64a, 0x306, 0x643, 0x645,
- 0x64a, 0x304, 0x646, 0x62c, 0x62d, 0x306, 0x645, 0x62e,
- 0x64a, 0x304, 0x644, 0x62c, 0x645, 0x306, 0x643, 0x645,
- 0x645, 0x306, 0x644, 0x62c, 0x645, 0x306, 0x646, 0x62c,
- 0x62d, 0x306, 0x62c, 0x62d, 0x64a, 0x306, 0x62d, 0x62c,
- 0x64a, 0x306, 0x645, 0x62c, 0x64a, 0x306, 0x641, 0x645,
- 0x64a, 0x306, 0x628, 0x62d, 0x64a, 0x304, 0x643, 0x645,
- 0x645, 0x304, 0x639, 0x62c, 0x645, 0x304, 0x635, 0x645,
- 0x645, 0x306, 0x633, 0x62e, 0x64a, 0x306, 0x646, 0x62c,
- 0x64a, 0x307, 0x635, 0x644, 0x6d2, 0x307, 0x642, 0x644,
- 0x6d2, 0x407, 0x627, 0x644, 0x644, 0x647, 0x407, 0x627,
- 0x643, 0x628, 0x631, 0x407, 0x645, 0x62d, 0x645, 0x62f,
- 0x407, 0x635, 0x644, 0x639, 0x645, 0x407, 0x631, 0x633,
- 0x648, 0x644, 0x407, 0x639, 0x644, 0x64a, 0x647, 0x407,
- 0x648, 0x633, 0x644, 0x645, 0x307, 0x635, 0x644, 0x649,
- 0x1207, 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644,
- 0x647, 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648,
- 0x633, 0x644, 0x645, 0x807, 0x62c, 0x644, 0x20, 0x62c,
- 0x644, 0x627, 0x644, 0x647, 0x407, 0x631, 0x6cc, 0x627,
- 0x644, 0x10b, 0x2c, 0x10b, 0x3001, 0x10b, 0x3002, 0x10b,
- 0x3a, 0x10b, 0x3b, 0x10b, 0x21, 0x10b, 0x3f, 0x10b,
- 0x3016, 0x10b, 0x3017, 0x10b, 0x2026, 0x10b, 0x2025, 0x10b,
- 0x2014, 0x10b, 0x2013, 0x10b, 0x5f, 0x10b, 0x5f, 0x10b,
- 0x28, 0x10b, 0x29, 0x10b, 0x7b, 0x10b, 0x7d, 0x10b,
- 0x3014, 0x10b, 0x3015, 0x10b, 0x3010, 0x10b, 0x3011, 0x10b,
- 0x300a, 0x10b, 0x300b, 0x10b, 0x3008, 0x10b, 0x3009, 0x10b,
- 0x300c, 0x10b, 0x300d, 0x10b, 0x300e, 0x10b, 0x300f, 0x10b,
- 0x5b, 0x10b, 0x5d, 0x110, 0x203e, 0x110, 0x203e, 0x110,
- 0x203e, 0x110, 0x203e, 0x110, 0x5f, 0x110, 0x5f, 0x110,
- 0x5f, 0x10e, 0x2c, 0x10e, 0x3001, 0x10e, 0x2e, 0x10e,
- 0x3b, 0x10e, 0x3a, 0x10e, 0x3f, 0x10e, 0x21, 0x10e,
- 0x2014, 0x10e, 0x28, 0x10e, 0x29, 0x10e, 0x7b, 0x10e,
- 0x7d, 0x10e, 0x3014, 0x10e, 0x3015, 0x10e, 0x23, 0x10e,
- 0x26, 0x10e, 0x2a, 0x10e, 0x2b, 0x10e, 0x2d, 0x10e,
- 0x3c, 0x10e, 0x3e, 0x10e, 0x3d, 0x10e, 0x5c, 0x10e,
- 0x24, 0x10e, 0x25, 0x10e, 0x40, 0x207, 0x20, 0x64b,
- 0x205, 0x640, 0x64b, 0x207, 0x20, 0x64c, 0x207, 0x20,
- 0x64d, 0x207, 0x20, 0x64e, 0x205, 0x640, 0x64e, 0x207,
- 0x20, 0x64f, 0x205, 0x640, 0x64f, 0x207, 0x20, 0x650,
- 0x205, 0x640, 0x650, 0x207, 0x20, 0x651, 0x205, 0x640,
- 0x651, 0x207, 0x20, 0x652, 0x205, 0x640, 0x652, 0x107,
- 0x621, 0x107, 0x622, 0x106, 0x622, 0x107, 0x623, 0x106,
- 0x623, 0x107, 0x624, 0x106, 0x624, 0x107, 0x625, 0x106,
- 0x625, 0x107, 0x626, 0x106, 0x626, 0x104, 0x626, 0x105,
- 0x626, 0x107, 0x627, 0x106, 0x627, 0x107, 0x628, 0x106,
- 0x628, 0x104, 0x628, 0x105, 0x628, 0x107, 0x629, 0x106,
- 0x629, 0x107, 0x62a, 0x106, 0x62a, 0x104, 0x62a, 0x105,
- 0x62a, 0x107, 0x62b, 0x106, 0x62b, 0x104, 0x62b, 0x105,
- 0x62b, 0x107, 0x62c, 0x106, 0x62c, 0x104, 0x62c, 0x105,
- 0x62c, 0x107, 0x62d, 0x106, 0x62d, 0x104, 0x62d, 0x105,
- 0x62d, 0x107, 0x62e, 0x106, 0x62e, 0x104, 0x62e, 0x105,
- 0x62e, 0x107, 0x62f, 0x106, 0x62f, 0x107, 0x630, 0x106,
- 0x630, 0x107, 0x631, 0x106, 0x631, 0x107, 0x632, 0x106,
- 0x632, 0x107, 0x633, 0x106, 0x633, 0x104, 0x633, 0x105,
- 0x633, 0x107, 0x634, 0x106, 0x634, 0x104, 0x634, 0x105,
- 0x634, 0x107, 0x635, 0x106, 0x635, 0x104, 0x635, 0x105,
- 0x635, 0x107, 0x636, 0x106, 0x636, 0x104, 0x636, 0x105,
- 0x636, 0x107, 0x637, 0x106, 0x637, 0x104, 0x637, 0x105,
- 0x637, 0x107, 0x638, 0x106, 0x638, 0x104, 0x638, 0x105,
- 0x638, 0x107, 0x639, 0x106, 0x639, 0x104, 0x639, 0x105,
- 0x639, 0x107, 0x63a, 0x106, 0x63a, 0x104, 0x63a, 0x105,
- 0x63a, 0x107, 0x641, 0x106, 0x641, 0x104, 0x641, 0x105,
- 0x641, 0x107, 0x642, 0x106, 0x642, 0x104, 0x642, 0x105,
- 0x642, 0x107, 0x643, 0x106, 0x643, 0x104, 0x643, 0x105,
- 0x643, 0x107, 0x644, 0x106, 0x644, 0x104, 0x644, 0x105,
- 0x644, 0x107, 0x645, 0x106, 0x645, 0x104, 0x645, 0x105,
- 0x645, 0x107, 0x646, 0x106, 0x646, 0x104, 0x646, 0x105,
- 0x646, 0x107, 0x647, 0x106, 0x647, 0x104, 0x647, 0x105,
- 0x647, 0x107, 0x648, 0x106, 0x648, 0x107, 0x649, 0x106,
- 0x649, 0x107, 0x64a, 0x106, 0x64a, 0x104, 0x64a, 0x105,
- 0x64a, 0x207, 0x644, 0x622, 0x206, 0x644, 0x622, 0x207,
- 0x644, 0x623, 0x206, 0x644, 0x623, 0x207, 0x644, 0x625,
- 0x206, 0x644, 0x625, 0x207, 0x644, 0x627, 0x206, 0x644,
- 0x627, 0x10c, 0x21, 0x10c, 0x22, 0x10c, 0x23, 0x10c,
- 0x24, 0x10c, 0x25, 0x10c, 0x26, 0x10c, 0x27, 0x10c,
- 0x28, 0x10c, 0x29, 0x10c, 0x2a, 0x10c, 0x2b, 0x10c,
- 0x2c, 0x10c, 0x2d, 0x10c, 0x2e, 0x10c, 0x2f, 0x10c,
- 0x30, 0x10c, 0x31, 0x10c, 0x32, 0x10c, 0x33, 0x10c,
- 0x34, 0x10c, 0x35, 0x10c, 0x36, 0x10c, 0x37, 0x10c,
- 0x38, 0x10c, 0x39, 0x10c, 0x3a, 0x10c, 0x3b, 0x10c,
- 0x3c, 0x10c, 0x3d, 0x10c, 0x3e, 0x10c, 0x3f, 0x10c,
- 0x40, 0x10c, 0x41, 0x10c, 0x42, 0x10c, 0x43, 0x10c,
- 0x44, 0x10c, 0x45, 0x10c, 0x46, 0x10c, 0x47, 0x10c,
- 0x48, 0x10c, 0x49, 0x10c, 0x4a, 0x10c, 0x4b, 0x10c,
- 0x4c, 0x10c, 0x4d, 0x10c, 0x4e, 0x10c, 0x4f, 0x10c,
- 0x50, 0x10c, 0x51, 0x10c, 0x52, 0x10c, 0x53, 0x10c,
- 0x54, 0x10c, 0x55, 0x10c, 0x56, 0x10c, 0x57, 0x10c,
- 0x58, 0x10c, 0x59, 0x10c, 0x5a, 0x10c, 0x5b, 0x10c,
- 0x5c, 0x10c, 0x5d, 0x10c, 0x5e, 0x10c, 0x5f, 0x10c,
- 0x60, 0x10c, 0x61, 0x10c, 0x62, 0x10c, 0x63, 0x10c,
- 0x64, 0x10c, 0x65, 0x10c, 0x66, 0x10c, 0x67, 0x10c,
- 0x68, 0x10c, 0x69, 0x10c, 0x6a, 0x10c, 0x6b, 0x10c,
- 0x6c, 0x10c, 0x6d, 0x10c, 0x6e, 0x10c, 0x6f, 0x10c,
- 0x70, 0x10c, 0x71, 0x10c, 0x72, 0x10c, 0x73, 0x10c,
- 0x74, 0x10c, 0x75, 0x10c, 0x76, 0x10c, 0x77, 0x10c,
- 0x78, 0x10c, 0x79, 0x10c, 0x7a, 0x10c, 0x7b, 0x10c,
- 0x7c, 0x10c, 0x7d, 0x10c, 0x7e, 0x10c, 0x2985, 0x10c,
- 0x2986, 0x10d, 0x3002, 0x10d, 0x300c, 0x10d, 0x300d, 0x10d,
- 0x3001, 0x10d, 0x30fb, 0x10d, 0x30f2, 0x10d, 0x30a1, 0x10d,
- 0x30a3, 0x10d, 0x30a5, 0x10d, 0x30a7, 0x10d, 0x30a9, 0x10d,
- 0x30e3, 0x10d, 0x30e5, 0x10d, 0x30e7, 0x10d, 0x30c3, 0x10d,
- 0x30fc, 0x10d, 0x30a2, 0x10d, 0x30a4, 0x10d, 0x30a6, 0x10d,
- 0x30a8, 0x10d, 0x30aa, 0x10d, 0x30ab, 0x10d, 0x30ad, 0x10d,
- 0x30af, 0x10d, 0x30b1, 0x10d, 0x30b3, 0x10d, 0x30b5, 0x10d,
- 0x30b7, 0x10d, 0x30b9, 0x10d, 0x30bb, 0x10d, 0x30bd, 0x10d,
- 0x30bf, 0x10d, 0x30c1, 0x10d, 0x30c4, 0x10d, 0x30c6, 0x10d,
- 0x30c8, 0x10d, 0x30ca, 0x10d, 0x30cb, 0x10d, 0x30cc, 0x10d,
- 0x30cd, 0x10d, 0x30ce, 0x10d, 0x30cf, 0x10d, 0x30d2, 0x10d,
- 0x30d5, 0x10d, 0x30d8, 0x10d, 0x30db, 0x10d, 0x30de, 0x10d,
- 0x30df, 0x10d, 0x30e0, 0x10d, 0x30e1, 0x10d, 0x30e2, 0x10d,
- 0x30e4, 0x10d, 0x30e6, 0x10d, 0x30e8, 0x10d, 0x30e9, 0x10d,
- 0x30ea, 0x10d, 0x30eb, 0x10d, 0x30ec, 0x10d, 0x30ed, 0x10d,
- 0x30ef, 0x10d, 0x30f3, 0x10d, 0x3099, 0x10d, 0x309a, 0x10d,
- 0x3164, 0x10d, 0x3131, 0x10d, 0x3132, 0x10d, 0x3133, 0x10d,
- 0x3134, 0x10d, 0x3135, 0x10d, 0x3136, 0x10d, 0x3137, 0x10d,
- 0x3138, 0x10d, 0x3139, 0x10d, 0x313a, 0x10d, 0x313b, 0x10d,
- 0x313c, 0x10d, 0x313d, 0x10d, 0x313e, 0x10d, 0x313f, 0x10d,
- 0x3140, 0x10d, 0x3141, 0x10d, 0x3142, 0x10d, 0x3143, 0x10d,
- 0x3144, 0x10d, 0x3145, 0x10d, 0x3146, 0x10d, 0x3147, 0x10d,
- 0x3148, 0x10d, 0x3149, 0x10d, 0x314a, 0x10d, 0x314b, 0x10d,
- 0x314c, 0x10d, 0x314d, 0x10d, 0x314e, 0x10d, 0x314f, 0x10d,
- 0x3150, 0x10d, 0x3151, 0x10d, 0x3152, 0x10d, 0x3153, 0x10d,
- 0x3154, 0x10d, 0x3155, 0x10d, 0x3156, 0x10d, 0x3157, 0x10d,
- 0x3158, 0x10d, 0x3159, 0x10d, 0x315a, 0x10d, 0x315b, 0x10d,
- 0x315c, 0x10d, 0x315d, 0x10d, 0x315e, 0x10d, 0x315f, 0x10d,
- 0x3160, 0x10d, 0x3161, 0x10d, 0x3162, 0x10d, 0x3163, 0x10c,
- 0xa2, 0x10c, 0xa3, 0x10c, 0xac, 0x10c, 0xaf, 0x10c,
- 0xa6, 0x10c, 0xa5, 0x10c, 0x20a9, 0x10d, 0x2502, 0x10d,
- 0x2190, 0x10d, 0x2191, 0x10d, 0x2192, 0x10d, 0x2193, 0x10d,
- 0x25a0, 0x10d, 0x25cb, 0x401, 0xd804, 0xdc99, 0xd804, 0xdcba,
- 0x401, 0xd804, 0xdc9b, 0xd804, 0xdcba, 0x401, 0xd804, 0xdca5,
- 0xd804, 0xdcba, 0x401, 0xd804, 0xdd31, 0xd804, 0xdd27, 0x401,
- 0xd804, 0xdd32, 0xd804, 0xdd27, 0x401, 0xd804, 0xdf47, 0xd804,
- 0xdf3e, 0x401, 0xd804, 0xdf47, 0xd804, 0xdf57, 0x401, 0xd805,
- 0xdcb9, 0xd805, 0xdcba, 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcb0,
- 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcbd, 0x401, 0xd805, 0xddb8,
- 0xd805, 0xddaf, 0x401, 0xd805, 0xddb9, 0xd805, 0xddaf, 0x401,
- 0xd806, 0xdd35, 0xd806, 0xdd30, 0x401, 0xd834, 0xdd57, 0xd834,
- 0xdd65, 0x401, 0xd834, 0xdd58, 0xd834, 0xdd65, 0x401, 0xd834,
- 0xdd5f, 0xd834, 0xdd6e, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd6f,
- 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd70, 0x401, 0xd834, 0xdd5f,
- 0xd834, 0xdd71, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd72, 0x401,
- 0xd834, 0xddb9, 0xd834, 0xdd65, 0x401, 0xd834, 0xddba, 0xd834,
- 0xdd65, 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6e, 0x401, 0xd834,
- 0xddbc, 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6f,
- 0x401, 0xd834, 0xddbc, 0xd834, 0xdd6f, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102,
- 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102,
- 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102,
- 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102,
- 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102,
- 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102,
- 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102,
- 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102,
- 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102,
- 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102,
- 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102,
- 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102,
- 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102,
- 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102,
- 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102,
- 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102,
- 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102,
- 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x43, 0x102,
- 0x44, 0x102, 0x47, 0x102, 0x4a, 0x102, 0x4b, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102,
- 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102,
- 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102,
- 0x66, 0x102, 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102,
+ 0x109, 0x44a, 0x109, 0x44c, 0x109, 0xa76f, 0x109, 0x43,
+ 0x109, 0x46, 0x109, 0x51, 0x109, 0x126, 0x109, 0x153,
+ 0x109, 0xa727, 0x109, 0xab37, 0x109, 0x26b, 0x109, 0xab52,
+ 0x109, 0x28d, 0x101, 0x8c48, 0x101, 0x66f4, 0x101, 0x8eca,
+ 0x101, 0x8cc8, 0x101, 0x6ed1, 0x101, 0x4e32, 0x101, 0x53e5,
+ 0x101, 0x9f9c, 0x101, 0x9f9c, 0x101, 0x5951, 0x101, 0x91d1,
+ 0x101, 0x5587, 0x101, 0x5948, 0x101, 0x61f6, 0x101, 0x7669,
+ 0x101, 0x7f85, 0x101, 0x863f, 0x101, 0x87ba, 0x101, 0x88f8,
+ 0x101, 0x908f, 0x101, 0x6a02, 0x101, 0x6d1b, 0x101, 0x70d9,
+ 0x101, 0x73de, 0x101, 0x843d, 0x101, 0x916a, 0x101, 0x99f1,
+ 0x101, 0x4e82, 0x101, 0x5375, 0x101, 0x6b04, 0x101, 0x721b,
+ 0x101, 0x862d, 0x101, 0x9e1e, 0x101, 0x5d50, 0x101, 0x6feb,
+ 0x101, 0x85cd, 0x101, 0x8964, 0x101, 0x62c9, 0x101, 0x81d8,
+ 0x101, 0x881f, 0x101, 0x5eca, 0x101, 0x6717, 0x101, 0x6d6a,
+ 0x101, 0x72fc, 0x101, 0x90ce, 0x101, 0x4f86, 0x101, 0x51b7,
+ 0x101, 0x52de, 0x101, 0x64c4, 0x101, 0x6ad3, 0x101, 0x7210,
+ 0x101, 0x76e7, 0x101, 0x8001, 0x101, 0x8606, 0x101, 0x865c,
+ 0x101, 0x8def, 0x101, 0x9732, 0x101, 0x9b6f, 0x101, 0x9dfa,
+ 0x101, 0x788c, 0x101, 0x797f, 0x101, 0x7da0, 0x101, 0x83c9,
+ 0x101, 0x9304, 0x101, 0x9e7f, 0x101, 0x8ad6, 0x101, 0x58df,
+ 0x101, 0x5f04, 0x101, 0x7c60, 0x101, 0x807e, 0x101, 0x7262,
+ 0x101, 0x78ca, 0x101, 0x8cc2, 0x101, 0x96f7, 0x101, 0x58d8,
+ 0x101, 0x5c62, 0x101, 0x6a13, 0x101, 0x6dda, 0x101, 0x6f0f,
+ 0x101, 0x7d2f, 0x101, 0x7e37, 0x101, 0x964b, 0x101, 0x52d2,
+ 0x101, 0x808b, 0x101, 0x51dc, 0x101, 0x51cc, 0x101, 0x7a1c,
+ 0x101, 0x7dbe, 0x101, 0x83f1, 0x101, 0x9675, 0x101, 0x8b80,
+ 0x101, 0x62cf, 0x101, 0x6a02, 0x101, 0x8afe, 0x101, 0x4e39,
+ 0x101, 0x5be7, 0x101, 0x6012, 0x101, 0x7387, 0x101, 0x7570,
+ 0x101, 0x5317, 0x101, 0x78fb, 0x101, 0x4fbf, 0x101, 0x5fa9,
+ 0x101, 0x4e0d, 0x101, 0x6ccc, 0x101, 0x6578, 0x101, 0x7d22,
+ 0x101, 0x53c3, 0x101, 0x585e, 0x101, 0x7701, 0x101, 0x8449,
+ 0x101, 0x8aaa, 0x101, 0x6bba, 0x101, 0x8fb0, 0x101, 0x6c88,
+ 0x101, 0x62fe, 0x101, 0x82e5, 0x101, 0x63a0, 0x101, 0x7565,
+ 0x101, 0x4eae, 0x101, 0x5169, 0x101, 0x51c9, 0x101, 0x6881,
+ 0x101, 0x7ce7, 0x101, 0x826f, 0x101, 0x8ad2, 0x101, 0x91cf,
+ 0x101, 0x52f5, 0x101, 0x5442, 0x101, 0x5973, 0x101, 0x5eec,
+ 0x101, 0x65c5, 0x101, 0x6ffe, 0x101, 0x792a, 0x101, 0x95ad,
+ 0x101, 0x9a6a, 0x101, 0x9e97, 0x101, 0x9ece, 0x101, 0x529b,
+ 0x101, 0x66c6, 0x101, 0x6b77, 0x101, 0x8f62, 0x101, 0x5e74,
+ 0x101, 0x6190, 0x101, 0x6200, 0x101, 0x649a, 0x101, 0x6f23,
+ 0x101, 0x7149, 0x101, 0x7489, 0x101, 0x79ca, 0x101, 0x7df4,
+ 0x101, 0x806f, 0x101, 0x8f26, 0x101, 0x84ee, 0x101, 0x9023,
+ 0x101, 0x934a, 0x101, 0x5217, 0x101, 0x52a3, 0x101, 0x54bd,
+ 0x101, 0x70c8, 0x101, 0x88c2, 0x101, 0x8aaa, 0x101, 0x5ec9,
+ 0x101, 0x5ff5, 0x101, 0x637b, 0x101, 0x6bae, 0x101, 0x7c3e,
+ 0x101, 0x7375, 0x101, 0x4ee4, 0x101, 0x56f9, 0x101, 0x5be7,
+ 0x101, 0x5dba, 0x101, 0x601c, 0x101, 0x73b2, 0x101, 0x7469,
+ 0x101, 0x7f9a, 0x101, 0x8046, 0x101, 0x9234, 0x101, 0x96f6,
+ 0x101, 0x9748, 0x101, 0x9818, 0x101, 0x4f8b, 0x101, 0x79ae,
+ 0x101, 0x91b4, 0x101, 0x96b8, 0x101, 0x60e1, 0x101, 0x4e86,
+ 0x101, 0x50da, 0x101, 0x5bee, 0x101, 0x5c3f, 0x101, 0x6599,
+ 0x101, 0x6a02, 0x101, 0x71ce, 0x101, 0x7642, 0x101, 0x84fc,
+ 0x101, 0x907c, 0x101, 0x9f8d, 0x101, 0x6688, 0x101, 0x962e,
+ 0x101, 0x5289, 0x101, 0x677b, 0x101, 0x67f3, 0x101, 0x6d41,
+ 0x101, 0x6e9c, 0x101, 0x7409, 0x101, 0x7559, 0x101, 0x786b,
+ 0x101, 0x7d10, 0x101, 0x985e, 0x101, 0x516d, 0x101, 0x622e,
+ 0x101, 0x9678, 0x101, 0x502b, 0x101, 0x5d19, 0x101, 0x6dea,
+ 0x101, 0x8f2a, 0x101, 0x5f8b, 0x101, 0x6144, 0x101, 0x6817,
+ 0x101, 0x7387, 0x101, 0x9686, 0x101, 0x5229, 0x101, 0x540f,
+ 0x101, 0x5c65, 0x101, 0x6613, 0x101, 0x674e, 0x101, 0x68a8,
+ 0x101, 0x6ce5, 0x101, 0x7406, 0x101, 0x75e2, 0x101, 0x7f79,
+ 0x101, 0x88cf, 0x101, 0x88e1, 0x101, 0x91cc, 0x101, 0x96e2,
+ 0x101, 0x533f, 0x101, 0x6eba, 0x101, 0x541d, 0x101, 0x71d0,
+ 0x101, 0x7498, 0x101, 0x85fa, 0x101, 0x96a3, 0x101, 0x9c57,
+ 0x101, 0x9e9f, 0x101, 0x6797, 0x101, 0x6dcb, 0x101, 0x81e8,
+ 0x101, 0x7acb, 0x101, 0x7b20, 0x101, 0x7c92, 0x101, 0x72c0,
+ 0x101, 0x7099, 0x101, 0x8b58, 0x101, 0x4ec0, 0x101, 0x8336,
+ 0x101, 0x523a, 0x101, 0x5207, 0x101, 0x5ea6, 0x101, 0x62d3,
+ 0x101, 0x7cd6, 0x101, 0x5b85, 0x101, 0x6d1e, 0x101, 0x66b4,
+ 0x101, 0x8f3b, 0x101, 0x884c, 0x101, 0x964d, 0x101, 0x898b,
+ 0x101, 0x5ed3, 0x101, 0x5140, 0x101, 0x55c0, 0x101, 0x585a,
+ 0x101, 0x6674, 0x101, 0x51de, 0x101, 0x732a, 0x101, 0x76ca,
+ 0x101, 0x793c, 0x101, 0x795e, 0x101, 0x7965, 0x101, 0x798f,
+ 0x101, 0x9756, 0x101, 0x7cbe, 0x101, 0x7fbd, 0x101, 0x8612,
+ 0x101, 0x8af8, 0x101, 0x9038, 0x101, 0x90fd, 0x101, 0x98ef,
+ 0x101, 0x98fc, 0x101, 0x9928, 0x101, 0x9db4, 0x101, 0x90de,
+ 0x101, 0x96b7, 0x101, 0x4fae, 0x101, 0x50e7, 0x101, 0x514d,
+ 0x101, 0x52c9, 0x101, 0x52e4, 0x101, 0x5351, 0x101, 0x559d,
+ 0x101, 0x5606, 0x101, 0x5668, 0x101, 0x5840, 0x101, 0x58a8,
+ 0x101, 0x5c64, 0x101, 0x5c6e, 0x101, 0x6094, 0x101, 0x6168,
+ 0x101, 0x618e, 0x101, 0x61f2, 0x101, 0x654f, 0x101, 0x65e2,
+ 0x101, 0x6691, 0x101, 0x6885, 0x101, 0x6d77, 0x101, 0x6e1a,
+ 0x101, 0x6f22, 0x101, 0x716e, 0x101, 0x722b, 0x101, 0x7422,
+ 0x101, 0x7891, 0x101, 0x793e, 0x101, 0x7949, 0x101, 0x7948,
+ 0x101, 0x7950, 0x101, 0x7956, 0x101, 0x795d, 0x101, 0x798d,
+ 0x101, 0x798e, 0x101, 0x7a40, 0x101, 0x7a81, 0x101, 0x7bc0,
+ 0x101, 0x7df4, 0x101, 0x7e09, 0x101, 0x7e41, 0x101, 0x7f72,
+ 0x101, 0x8005, 0x101, 0x81ed, 0x101, 0x8279, 0x101, 0x8279,
+ 0x101, 0x8457, 0x101, 0x8910, 0x101, 0x8996, 0x101, 0x8b01,
+ 0x101, 0x8b39, 0x101, 0x8cd3, 0x101, 0x8d08, 0x101, 0x8fb6,
+ 0x101, 0x9038, 0x101, 0x96e3, 0x101, 0x97ff, 0x101, 0x983b,
+ 0x101, 0x6075, 0x201, 0xd850, 0xdeee, 0x101, 0x8218, 0x101,
+ 0x4e26, 0x101, 0x51b5, 0x101, 0x5168, 0x101, 0x4f80, 0x101,
+ 0x5145, 0x101, 0x5180, 0x101, 0x52c7, 0x101, 0x52fa, 0x101,
+ 0x559d, 0x101, 0x5555, 0x101, 0x5599, 0x101, 0x55e2, 0x101,
+ 0x585a, 0x101, 0x58b3, 0x101, 0x5944, 0x101, 0x5954, 0x101,
+ 0x5a62, 0x101, 0x5b28, 0x101, 0x5ed2, 0x101, 0x5ed9, 0x101,
+ 0x5f69, 0x101, 0x5fad, 0x101, 0x60d8, 0x101, 0x614e, 0x101,
+ 0x6108, 0x101, 0x618e, 0x101, 0x6160, 0x101, 0x61f2, 0x101,
+ 0x6234, 0x101, 0x63c4, 0x101, 0x641c, 0x101, 0x6452, 0x101,
+ 0x6556, 0x101, 0x6674, 0x101, 0x6717, 0x101, 0x671b, 0x101,
+ 0x6756, 0x101, 0x6b79, 0x101, 0x6bba, 0x101, 0x6d41, 0x101,
+ 0x6edb, 0x101, 0x6ecb, 0x101, 0x6f22, 0x101, 0x701e, 0x101,
+ 0x716e, 0x101, 0x77a7, 0x101, 0x7235, 0x101, 0x72af, 0x101,
+ 0x732a, 0x101, 0x7471, 0x101, 0x7506, 0x101, 0x753b, 0x101,
+ 0x761d, 0x101, 0x761f, 0x101, 0x76ca, 0x101, 0x76db, 0x101,
+ 0x76f4, 0x101, 0x774a, 0x101, 0x7740, 0x101, 0x78cc, 0x101,
+ 0x7ab1, 0x101, 0x7bc0, 0x101, 0x7c7b, 0x101, 0x7d5b, 0x101,
+ 0x7df4, 0x101, 0x7f3e, 0x101, 0x8005, 0x101, 0x8352, 0x101,
+ 0x83ef, 0x101, 0x8779, 0x101, 0x8941, 0x101, 0x8986, 0x101,
+ 0x8996, 0x101, 0x8abf, 0x101, 0x8af8, 0x101, 0x8acb, 0x101,
+ 0x8b01, 0x101, 0x8afe, 0x101, 0x8aed, 0x101, 0x8b39, 0x101,
+ 0x8b8a, 0x101, 0x8d08, 0x101, 0x8f38, 0x101, 0x9072, 0x101,
+ 0x9199, 0x101, 0x9276, 0x101, 0x967c, 0x101, 0x96e3, 0x101,
+ 0x9756, 0x101, 0x97db, 0x101, 0x97ff, 0x101, 0x980b, 0x101,
+ 0x983b, 0x101, 0x9b12, 0x101, 0x9f9c, 0x201, 0xd84a, 0xdc4a,
+ 0x201, 0xd84a, 0xdc44, 0x201, 0xd84c, 0xdfd5, 0x101, 0x3b9d,
+ 0x101, 0x4018, 0x101, 0x4039, 0x201, 0xd854, 0xde49, 0x201,
+ 0xd857, 0xdcd0, 0x201, 0xd85f, 0xded3, 0x101, 0x9f43, 0x101,
+ 0x9f8e, 0x210, 0x66, 0x66, 0x210, 0x66, 0x69, 0x210,
+ 0x66, 0x6c, 0x310, 0x66, 0x66, 0x69, 0x310, 0x66,
+ 0x66, 0x6c, 0x210, 0x17f, 0x74, 0x210, 0x73, 0x74,
+ 0x210, 0x574, 0x576, 0x210, 0x574, 0x565, 0x210, 0x574,
+ 0x56b, 0x210, 0x57e, 0x576, 0x210, 0x574, 0x56d, 0x201,
+ 0x5d9, 0x5b4, 0x201, 0x5f2, 0x5b7, 0x102, 0x5e2, 0x102,
+ 0x5d0, 0x102, 0x5d3, 0x102, 0x5d4, 0x102, 0x5db, 0x102,
+ 0x5dc, 0x102, 0x5dd, 0x102, 0x5e8, 0x102, 0x5ea, 0x102,
+ 0x2b, 0x201, 0x5e9, 0x5c1, 0x201, 0x5e9, 0x5c2, 0x201,
+ 0xfb49, 0x5c1, 0x201, 0xfb49, 0x5c2, 0x201, 0x5d0, 0x5b7,
+ 0x201, 0x5d0, 0x5b8, 0x201, 0x5d0, 0x5bc, 0x201, 0x5d1,
+ 0x5bc, 0x201, 0x5d2, 0x5bc, 0x201, 0x5d3, 0x5bc, 0x201,
+ 0x5d4, 0x5bc, 0x201, 0x5d5, 0x5bc, 0x201, 0x5d6, 0x5bc,
+ 0x201, 0x5d8, 0x5bc, 0x201, 0x5d9, 0x5bc, 0x201, 0x5da,
+ 0x5bc, 0x201, 0x5db, 0x5bc, 0x201, 0x5dc, 0x5bc, 0x201,
+ 0x5de, 0x5bc, 0x201, 0x5e0, 0x5bc, 0x201, 0x5e1, 0x5bc,
+ 0x201, 0x5e3, 0x5bc, 0x201, 0x5e4, 0x5bc, 0x201, 0x5e6,
+ 0x5bc, 0x201, 0x5e7, 0x5bc, 0x201, 0x5e8, 0x5bc, 0x201,
+ 0x5e9, 0x5bc, 0x201, 0x5ea, 0x5bc, 0x201, 0x5d5, 0x5b9,
+ 0x201, 0x5d1, 0x5bf, 0x201, 0x5db, 0x5bf, 0x201, 0x5e4,
+ 0x5bf, 0x210, 0x5d0, 0x5dc, 0x107, 0x671, 0x106, 0x671,
+ 0x107, 0x67b, 0x106, 0x67b, 0x104, 0x67b, 0x105, 0x67b,
+ 0x107, 0x67e, 0x106, 0x67e, 0x104, 0x67e, 0x105, 0x67e,
+ 0x107, 0x680, 0x106, 0x680, 0x104, 0x680, 0x105, 0x680,
+ 0x107, 0x67a, 0x106, 0x67a, 0x104, 0x67a, 0x105, 0x67a,
+ 0x107, 0x67f, 0x106, 0x67f, 0x104, 0x67f, 0x105, 0x67f,
+ 0x107, 0x679, 0x106, 0x679, 0x104, 0x679, 0x105, 0x679,
+ 0x107, 0x6a4, 0x106, 0x6a4, 0x104, 0x6a4, 0x105, 0x6a4,
+ 0x107, 0x6a6, 0x106, 0x6a6, 0x104, 0x6a6, 0x105, 0x6a6,
+ 0x107, 0x684, 0x106, 0x684, 0x104, 0x684, 0x105, 0x684,
+ 0x107, 0x683, 0x106, 0x683, 0x104, 0x683, 0x105, 0x683,
+ 0x107, 0x686, 0x106, 0x686, 0x104, 0x686, 0x105, 0x686,
+ 0x107, 0x687, 0x106, 0x687, 0x104, 0x687, 0x105, 0x687,
+ 0x107, 0x68d, 0x106, 0x68d, 0x107, 0x68c, 0x106, 0x68c,
+ 0x107, 0x68e, 0x106, 0x68e, 0x107, 0x688, 0x106, 0x688,
+ 0x107, 0x698, 0x106, 0x698, 0x107, 0x691, 0x106, 0x691,
+ 0x107, 0x6a9, 0x106, 0x6a9, 0x104, 0x6a9, 0x105, 0x6a9,
+ 0x107, 0x6af, 0x106, 0x6af, 0x104, 0x6af, 0x105, 0x6af,
+ 0x107, 0x6b3, 0x106, 0x6b3, 0x104, 0x6b3, 0x105, 0x6b3,
+ 0x107, 0x6b1, 0x106, 0x6b1, 0x104, 0x6b1, 0x105, 0x6b1,
+ 0x107, 0x6ba, 0x106, 0x6ba, 0x107, 0x6bb, 0x106, 0x6bb,
+ 0x104, 0x6bb, 0x105, 0x6bb, 0x107, 0x6c0, 0x106, 0x6c0,
+ 0x107, 0x6c1, 0x106, 0x6c1, 0x104, 0x6c1, 0x105, 0x6c1,
+ 0x107, 0x6be, 0x106, 0x6be, 0x104, 0x6be, 0x105, 0x6be,
+ 0x107, 0x6d2, 0x106, 0x6d2, 0x107, 0x6d3, 0x106, 0x6d3,
+ 0x107, 0x6ad, 0x106, 0x6ad, 0x104, 0x6ad, 0x105, 0x6ad,
+ 0x107, 0x6c7, 0x106, 0x6c7, 0x107, 0x6c6, 0x106, 0x6c6,
+ 0x107, 0x6c8, 0x106, 0x6c8, 0x107, 0x677, 0x107, 0x6cb,
+ 0x106, 0x6cb, 0x107, 0x6c5, 0x106, 0x6c5, 0x107, 0x6c9,
+ 0x106, 0x6c9, 0x107, 0x6d0, 0x106, 0x6d0, 0x104, 0x6d0,
+ 0x105, 0x6d0, 0x104, 0x649, 0x105, 0x649, 0x207, 0x626,
+ 0x627, 0x206, 0x626, 0x627, 0x207, 0x626, 0x6d5, 0x206,
+ 0x626, 0x6d5, 0x207, 0x626, 0x648, 0x206, 0x626, 0x648,
+ 0x207, 0x626, 0x6c7, 0x206, 0x626, 0x6c7, 0x207, 0x626,
+ 0x6c6, 0x206, 0x626, 0x6c6, 0x207, 0x626, 0x6c8, 0x206,
+ 0x626, 0x6c8, 0x207, 0x626, 0x6d0, 0x206, 0x626, 0x6d0,
+ 0x204, 0x626, 0x6d0, 0x207, 0x626, 0x649, 0x206, 0x626,
+ 0x649, 0x204, 0x626, 0x649, 0x107, 0x6cc, 0x106, 0x6cc,
+ 0x104, 0x6cc, 0x105, 0x6cc, 0x207, 0x626, 0x62c, 0x207,
+ 0x626, 0x62d, 0x207, 0x626, 0x645, 0x207, 0x626, 0x649,
+ 0x207, 0x626, 0x64a, 0x207, 0x628, 0x62c, 0x207, 0x628,
+ 0x62d, 0x207, 0x628, 0x62e, 0x207, 0x628, 0x645, 0x207,
+ 0x628, 0x649, 0x207, 0x628, 0x64a, 0x207, 0x62a, 0x62c,
+ 0x207, 0x62a, 0x62d, 0x207, 0x62a, 0x62e, 0x207, 0x62a,
+ 0x645, 0x207, 0x62a, 0x649, 0x207, 0x62a, 0x64a, 0x207,
+ 0x62b, 0x62c, 0x207, 0x62b, 0x645, 0x207, 0x62b, 0x649,
+ 0x207, 0x62b, 0x64a, 0x207, 0x62c, 0x62d, 0x207, 0x62c,
+ 0x645, 0x207, 0x62d, 0x62c, 0x207, 0x62d, 0x645, 0x207,
+ 0x62e, 0x62c, 0x207, 0x62e, 0x62d, 0x207, 0x62e, 0x645,
+ 0x207, 0x633, 0x62c, 0x207, 0x633, 0x62d, 0x207, 0x633,
+ 0x62e, 0x207, 0x633, 0x645, 0x207, 0x635, 0x62d, 0x207,
+ 0x635, 0x645, 0x207, 0x636, 0x62c, 0x207, 0x636, 0x62d,
+ 0x207, 0x636, 0x62e, 0x207, 0x636, 0x645, 0x207, 0x637,
+ 0x62d, 0x207, 0x637, 0x645, 0x207, 0x638, 0x645, 0x207,
+ 0x639, 0x62c, 0x207, 0x639, 0x645, 0x207, 0x63a, 0x62c,
+ 0x207, 0x63a, 0x645, 0x207, 0x641, 0x62c, 0x207, 0x641,
+ 0x62d, 0x207, 0x641, 0x62e, 0x207, 0x641, 0x645, 0x207,
+ 0x641, 0x649, 0x207, 0x641, 0x64a, 0x207, 0x642, 0x62d,
+ 0x207, 0x642, 0x645, 0x207, 0x642, 0x649, 0x207, 0x642,
+ 0x64a, 0x207, 0x643, 0x627, 0x207, 0x643, 0x62c, 0x207,
+ 0x643, 0x62d, 0x207, 0x643, 0x62e, 0x207, 0x643, 0x644,
+ 0x207, 0x643, 0x645, 0x207, 0x643, 0x649, 0x207, 0x643,
+ 0x64a, 0x207, 0x644, 0x62c, 0x207, 0x644, 0x62d, 0x207,
+ 0x644, 0x62e, 0x207, 0x644, 0x645, 0x207, 0x644, 0x649,
+ 0x207, 0x644, 0x64a, 0x207, 0x645, 0x62c, 0x207, 0x645,
+ 0x62d, 0x207, 0x645, 0x62e, 0x207, 0x645, 0x645, 0x207,
+ 0x645, 0x649, 0x207, 0x645, 0x64a, 0x207, 0x646, 0x62c,
+ 0x207, 0x646, 0x62d, 0x207, 0x646, 0x62e, 0x207, 0x646,
+ 0x645, 0x207, 0x646, 0x649, 0x207, 0x646, 0x64a, 0x207,
+ 0x647, 0x62c, 0x207, 0x647, 0x645, 0x207, 0x647, 0x649,
+ 0x207, 0x647, 0x64a, 0x207, 0x64a, 0x62c, 0x207, 0x64a,
+ 0x62d, 0x207, 0x64a, 0x62e, 0x207, 0x64a, 0x645, 0x207,
+ 0x64a, 0x649, 0x207, 0x64a, 0x64a, 0x207, 0x630, 0x670,
+ 0x207, 0x631, 0x670, 0x207, 0x649, 0x670, 0x307, 0x20,
+ 0x64c, 0x651, 0x307, 0x20, 0x64d, 0x651, 0x307, 0x20,
+ 0x64e, 0x651, 0x307, 0x20, 0x64f, 0x651, 0x307, 0x20,
+ 0x650, 0x651, 0x307, 0x20, 0x651, 0x670, 0x206, 0x626,
+ 0x631, 0x206, 0x626, 0x632, 0x206, 0x626, 0x645, 0x206,
+ 0x626, 0x646, 0x206, 0x626, 0x649, 0x206, 0x626, 0x64a,
+ 0x206, 0x628, 0x631, 0x206, 0x628, 0x632, 0x206, 0x628,
+ 0x645, 0x206, 0x628, 0x646, 0x206, 0x628, 0x649, 0x206,
+ 0x628, 0x64a, 0x206, 0x62a, 0x631, 0x206, 0x62a, 0x632,
+ 0x206, 0x62a, 0x645, 0x206, 0x62a, 0x646, 0x206, 0x62a,
+ 0x649, 0x206, 0x62a, 0x64a, 0x206, 0x62b, 0x631, 0x206,
+ 0x62b, 0x632, 0x206, 0x62b, 0x645, 0x206, 0x62b, 0x646,
+ 0x206, 0x62b, 0x649, 0x206, 0x62b, 0x64a, 0x206, 0x641,
+ 0x649, 0x206, 0x641, 0x64a, 0x206, 0x642, 0x649, 0x206,
+ 0x642, 0x64a, 0x206, 0x643, 0x627, 0x206, 0x643, 0x644,
+ 0x206, 0x643, 0x645, 0x206, 0x643, 0x649, 0x206, 0x643,
+ 0x64a, 0x206, 0x644, 0x645, 0x206, 0x644, 0x649, 0x206,
+ 0x644, 0x64a, 0x206, 0x645, 0x627, 0x206, 0x645, 0x645,
+ 0x206, 0x646, 0x631, 0x206, 0x646, 0x632, 0x206, 0x646,
+ 0x645, 0x206, 0x646, 0x646, 0x206, 0x646, 0x649, 0x206,
+ 0x646, 0x64a, 0x206, 0x649, 0x670, 0x206, 0x64a, 0x631,
+ 0x206, 0x64a, 0x632, 0x206, 0x64a, 0x645, 0x206, 0x64a,
+ 0x646, 0x206, 0x64a, 0x649, 0x206, 0x64a, 0x64a, 0x204,
+ 0x626, 0x62c, 0x204, 0x626, 0x62d, 0x204, 0x626, 0x62e,
+ 0x204, 0x626, 0x645, 0x204, 0x626, 0x647, 0x204, 0x628,
+ 0x62c, 0x204, 0x628, 0x62d, 0x204, 0x628, 0x62e, 0x204,
+ 0x628, 0x645, 0x204, 0x628, 0x647, 0x204, 0x62a, 0x62c,
+ 0x204, 0x62a, 0x62d, 0x204, 0x62a, 0x62e, 0x204, 0x62a,
+ 0x645, 0x204, 0x62a, 0x647, 0x204, 0x62b, 0x645, 0x204,
+ 0x62c, 0x62d, 0x204, 0x62c, 0x645, 0x204, 0x62d, 0x62c,
+ 0x204, 0x62d, 0x645, 0x204, 0x62e, 0x62c, 0x204, 0x62e,
+ 0x645, 0x204, 0x633, 0x62c, 0x204, 0x633, 0x62d, 0x204,
+ 0x633, 0x62e, 0x204, 0x633, 0x645, 0x204, 0x635, 0x62d,
+ 0x204, 0x635, 0x62e, 0x204, 0x635, 0x645, 0x204, 0x636,
+ 0x62c, 0x204, 0x636, 0x62d, 0x204, 0x636, 0x62e, 0x204,
+ 0x636, 0x645, 0x204, 0x637, 0x62d, 0x204, 0x638, 0x645,
+ 0x204, 0x639, 0x62c, 0x204, 0x639, 0x645, 0x204, 0x63a,
+ 0x62c, 0x204, 0x63a, 0x645, 0x204, 0x641, 0x62c, 0x204,
+ 0x641, 0x62d, 0x204, 0x641, 0x62e, 0x204, 0x641, 0x645,
+ 0x204, 0x642, 0x62d, 0x204, 0x642, 0x645, 0x204, 0x643,
+ 0x62c, 0x204, 0x643, 0x62d, 0x204, 0x643, 0x62e, 0x204,
+ 0x643, 0x644, 0x204, 0x643, 0x645, 0x204, 0x644, 0x62c,
+ 0x204, 0x644, 0x62d, 0x204, 0x644, 0x62e, 0x204, 0x644,
+ 0x645, 0x204, 0x644, 0x647, 0x204, 0x645, 0x62c, 0x204,
+ 0x645, 0x62d, 0x204, 0x645, 0x62e, 0x204, 0x645, 0x645,
+ 0x204, 0x646, 0x62c, 0x204, 0x646, 0x62d, 0x204, 0x646,
+ 0x62e, 0x204, 0x646, 0x645, 0x204, 0x646, 0x647, 0x204,
+ 0x647, 0x62c, 0x204, 0x647, 0x645, 0x204, 0x647, 0x670,
+ 0x204, 0x64a, 0x62c, 0x204, 0x64a, 0x62d, 0x204, 0x64a,
+ 0x62e, 0x204, 0x64a, 0x645, 0x204, 0x64a, 0x647, 0x205,
+ 0x626, 0x645, 0x205, 0x626, 0x647, 0x205, 0x628, 0x645,
+ 0x205, 0x628, 0x647, 0x205, 0x62a, 0x645, 0x205, 0x62a,
+ 0x647, 0x205, 0x62b, 0x645, 0x205, 0x62b, 0x647, 0x205,
+ 0x633, 0x645, 0x205, 0x633, 0x647, 0x205, 0x634, 0x645,
+ 0x205, 0x634, 0x647, 0x205, 0x643, 0x644, 0x205, 0x643,
+ 0x645, 0x205, 0x644, 0x645, 0x205, 0x646, 0x645, 0x205,
+ 0x646, 0x647, 0x205, 0x64a, 0x645, 0x205, 0x64a, 0x647,
+ 0x305, 0x640, 0x64e, 0x651, 0x305, 0x640, 0x64f, 0x651,
+ 0x305, 0x640, 0x650, 0x651, 0x207, 0x637, 0x649, 0x207,
+ 0x637, 0x64a, 0x207, 0x639, 0x649, 0x207, 0x639, 0x64a,
+ 0x207, 0x63a, 0x649, 0x207, 0x63a, 0x64a, 0x207, 0x633,
+ 0x649, 0x207, 0x633, 0x64a, 0x207, 0x634, 0x649, 0x207,
+ 0x634, 0x64a, 0x207, 0x62d, 0x649, 0x207, 0x62d, 0x64a,
+ 0x207, 0x62c, 0x649, 0x207, 0x62c, 0x64a, 0x207, 0x62e,
+ 0x649, 0x207, 0x62e, 0x64a, 0x207, 0x635, 0x649, 0x207,
+ 0x635, 0x64a, 0x207, 0x636, 0x649, 0x207, 0x636, 0x64a,
+ 0x207, 0x634, 0x62c, 0x207, 0x634, 0x62d, 0x207, 0x634,
+ 0x62e, 0x207, 0x634, 0x645, 0x207, 0x634, 0x631, 0x207,
+ 0x633, 0x631, 0x207, 0x635, 0x631, 0x207, 0x636, 0x631,
+ 0x206, 0x637, 0x649, 0x206, 0x637, 0x64a, 0x206, 0x639,
+ 0x649, 0x206, 0x639, 0x64a, 0x206, 0x63a, 0x649, 0x206,
+ 0x63a, 0x64a, 0x206, 0x633, 0x649, 0x206, 0x633, 0x64a,
+ 0x206, 0x634, 0x649, 0x206, 0x634, 0x64a, 0x206, 0x62d,
+ 0x649, 0x206, 0x62d, 0x64a, 0x206, 0x62c, 0x649, 0x206,
+ 0x62c, 0x64a, 0x206, 0x62e, 0x649, 0x206, 0x62e, 0x64a,
+ 0x206, 0x635, 0x649, 0x206, 0x635, 0x64a, 0x206, 0x636,
+ 0x649, 0x206, 0x636, 0x64a, 0x206, 0x634, 0x62c, 0x206,
+ 0x634, 0x62d, 0x206, 0x634, 0x62e, 0x206, 0x634, 0x645,
+ 0x206, 0x634, 0x631, 0x206, 0x633, 0x631, 0x206, 0x635,
+ 0x631, 0x206, 0x636, 0x631, 0x204, 0x634, 0x62c, 0x204,
+ 0x634, 0x62d, 0x204, 0x634, 0x62e, 0x204, 0x634, 0x645,
+ 0x204, 0x633, 0x647, 0x204, 0x634, 0x647, 0x204, 0x637,
+ 0x645, 0x205, 0x633, 0x62c, 0x205, 0x633, 0x62d, 0x205,
+ 0x633, 0x62e, 0x205, 0x634, 0x62c, 0x205, 0x634, 0x62d,
+ 0x205, 0x634, 0x62e, 0x205, 0x637, 0x645, 0x205, 0x638,
+ 0x645, 0x206, 0x627, 0x64b, 0x207, 0x627, 0x64b, 0x304,
+ 0x62a, 0x62c, 0x645, 0x306, 0x62a, 0x62d, 0x62c, 0x304,
+ 0x62a, 0x62d, 0x62c, 0x304, 0x62a, 0x62d, 0x645, 0x304,
+ 0x62a, 0x62e, 0x645, 0x304, 0x62a, 0x645, 0x62c, 0x304,
+ 0x62a, 0x645, 0x62d, 0x304, 0x62a, 0x645, 0x62e, 0x306,
+ 0x62c, 0x645, 0x62d, 0x304, 0x62c, 0x645, 0x62d, 0x306,
+ 0x62d, 0x645, 0x64a, 0x306, 0x62d, 0x645, 0x649, 0x304,
+ 0x633, 0x62d, 0x62c, 0x304, 0x633, 0x62c, 0x62d, 0x306,
+ 0x633, 0x62c, 0x649, 0x306, 0x633, 0x645, 0x62d, 0x304,
+ 0x633, 0x645, 0x62d, 0x304, 0x633, 0x645, 0x62c, 0x306,
+ 0x633, 0x645, 0x645, 0x304, 0x633, 0x645, 0x645, 0x306,
+ 0x635, 0x62d, 0x62d, 0x304, 0x635, 0x62d, 0x62d, 0x306,
+ 0x635, 0x645, 0x645, 0x306, 0x634, 0x62d, 0x645, 0x304,
+ 0x634, 0x62d, 0x645, 0x306, 0x634, 0x62c, 0x64a, 0x306,
+ 0x634, 0x645, 0x62e, 0x304, 0x634, 0x645, 0x62e, 0x306,
+ 0x634, 0x645, 0x645, 0x304, 0x634, 0x645, 0x645, 0x306,
+ 0x636, 0x62d, 0x649, 0x306, 0x636, 0x62e, 0x645, 0x304,
+ 0x636, 0x62e, 0x645, 0x306, 0x637, 0x645, 0x62d, 0x304,
+ 0x637, 0x645, 0x62d, 0x304, 0x637, 0x645, 0x645, 0x306,
+ 0x637, 0x645, 0x64a, 0x306, 0x639, 0x62c, 0x645, 0x306,
+ 0x639, 0x645, 0x645, 0x304, 0x639, 0x645, 0x645, 0x306,
+ 0x639, 0x645, 0x649, 0x306, 0x63a, 0x645, 0x645, 0x306,
+ 0x63a, 0x645, 0x64a, 0x306, 0x63a, 0x645, 0x649, 0x306,
+ 0x641, 0x62e, 0x645, 0x304, 0x641, 0x62e, 0x645, 0x306,
+ 0x642, 0x645, 0x62d, 0x306, 0x642, 0x645, 0x645, 0x306,
+ 0x644, 0x62d, 0x645, 0x306, 0x644, 0x62d, 0x64a, 0x306,
+ 0x644, 0x62d, 0x649, 0x304, 0x644, 0x62c, 0x62c, 0x306,
+ 0x644, 0x62c, 0x62c, 0x306, 0x644, 0x62e, 0x645, 0x304,
+ 0x644, 0x62e, 0x645, 0x306, 0x644, 0x645, 0x62d, 0x304,
+ 0x644, 0x645, 0x62d, 0x304, 0x645, 0x62d, 0x62c, 0x304,
+ 0x645, 0x62d, 0x645, 0x306, 0x645, 0x62d, 0x64a, 0x304,
+ 0x645, 0x62c, 0x62d, 0x304, 0x645, 0x62c, 0x645, 0x304,
+ 0x645, 0x62e, 0x62c, 0x304, 0x645, 0x62e, 0x645, 0x304,
+ 0x645, 0x62c, 0x62e, 0x304, 0x647, 0x645, 0x62c, 0x304,
+ 0x647, 0x645, 0x645, 0x304, 0x646, 0x62d, 0x645, 0x306,
+ 0x646, 0x62d, 0x649, 0x306, 0x646, 0x62c, 0x645, 0x304,
+ 0x646, 0x62c, 0x645, 0x306, 0x646, 0x62c, 0x649, 0x306,
+ 0x646, 0x645, 0x64a, 0x306, 0x646, 0x645, 0x649, 0x306,
+ 0x64a, 0x645, 0x645, 0x304, 0x64a, 0x645, 0x645, 0x306,
+ 0x628, 0x62e, 0x64a, 0x306, 0x62a, 0x62c, 0x64a, 0x306,
+ 0x62a, 0x62c, 0x649, 0x306, 0x62a, 0x62e, 0x64a, 0x306,
+ 0x62a, 0x62e, 0x649, 0x306, 0x62a, 0x645, 0x64a, 0x306,
+ 0x62a, 0x645, 0x649, 0x306, 0x62c, 0x645, 0x64a, 0x306,
+ 0x62c, 0x62d, 0x649, 0x306, 0x62c, 0x645, 0x649, 0x306,
+ 0x633, 0x62e, 0x649, 0x306, 0x635, 0x62d, 0x64a, 0x306,
+ 0x634, 0x62d, 0x64a, 0x306, 0x636, 0x62d, 0x64a, 0x306,
+ 0x644, 0x62c, 0x64a, 0x306, 0x644, 0x645, 0x64a, 0x306,
+ 0x64a, 0x62d, 0x64a, 0x306, 0x64a, 0x62c, 0x64a, 0x306,
+ 0x64a, 0x645, 0x64a, 0x306, 0x645, 0x645, 0x64a, 0x306,
+ 0x642, 0x645, 0x64a, 0x306, 0x646, 0x62d, 0x64a, 0x304,
+ 0x642, 0x645, 0x62d, 0x304, 0x644, 0x62d, 0x645, 0x306,
+ 0x639, 0x645, 0x64a, 0x306, 0x643, 0x645, 0x64a, 0x304,
+ 0x646, 0x62c, 0x62d, 0x306, 0x645, 0x62e, 0x64a, 0x304,
+ 0x644, 0x62c, 0x645, 0x306, 0x643, 0x645, 0x645, 0x306,
+ 0x644, 0x62c, 0x645, 0x306, 0x646, 0x62c, 0x62d, 0x306,
+ 0x62c, 0x62d, 0x64a, 0x306, 0x62d, 0x62c, 0x64a, 0x306,
+ 0x645, 0x62c, 0x64a, 0x306, 0x641, 0x645, 0x64a, 0x306,
+ 0x628, 0x62d, 0x64a, 0x304, 0x643, 0x645, 0x645, 0x304,
+ 0x639, 0x62c, 0x645, 0x304, 0x635, 0x645, 0x645, 0x306,
+ 0x633, 0x62e, 0x64a, 0x306, 0x646, 0x62c, 0x64a, 0x307,
+ 0x635, 0x644, 0x6d2, 0x307, 0x642, 0x644, 0x6d2, 0x407,
+ 0x627, 0x644, 0x644, 0x647, 0x407, 0x627, 0x643, 0x628,
+ 0x631, 0x407, 0x645, 0x62d, 0x645, 0x62f, 0x407, 0x635,
+ 0x644, 0x639, 0x645, 0x407, 0x631, 0x633, 0x648, 0x644,
+ 0x407, 0x639, 0x644, 0x64a, 0x647, 0x407, 0x648, 0x633,
+ 0x644, 0x645, 0x307, 0x635, 0x644, 0x649, 0x1207, 0x635,
+ 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, 0x20,
+ 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, 0x644,
+ 0x645, 0x807, 0x62c, 0x644, 0x20, 0x62c, 0x644, 0x627,
+ 0x644, 0x647, 0x407, 0x631, 0x6cc, 0x627, 0x644, 0x10b,
+ 0x2c, 0x10b, 0x3001, 0x10b, 0x3002, 0x10b, 0x3a, 0x10b,
+ 0x3b, 0x10b, 0x21, 0x10b, 0x3f, 0x10b, 0x3016, 0x10b,
+ 0x3017, 0x10b, 0x2026, 0x10b, 0x2025, 0x10b, 0x2014, 0x10b,
+ 0x2013, 0x10b, 0x5f, 0x10b, 0x5f, 0x10b, 0x28, 0x10b,
+ 0x29, 0x10b, 0x7b, 0x10b, 0x7d, 0x10b, 0x3014, 0x10b,
+ 0x3015, 0x10b, 0x3010, 0x10b, 0x3011, 0x10b, 0x300a, 0x10b,
+ 0x300b, 0x10b, 0x3008, 0x10b, 0x3009, 0x10b, 0x300c, 0x10b,
+ 0x300d, 0x10b, 0x300e, 0x10b, 0x300f, 0x10b, 0x5b, 0x10b,
+ 0x5d, 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x203e, 0x110,
+ 0x203e, 0x110, 0x5f, 0x110, 0x5f, 0x110, 0x5f, 0x10e,
+ 0x2c, 0x10e, 0x3001, 0x10e, 0x2e, 0x10e, 0x3b, 0x10e,
+ 0x3a, 0x10e, 0x3f, 0x10e, 0x21, 0x10e, 0x2014, 0x10e,
+ 0x28, 0x10e, 0x29, 0x10e, 0x7b, 0x10e, 0x7d, 0x10e,
+ 0x3014, 0x10e, 0x3015, 0x10e, 0x23, 0x10e, 0x26, 0x10e,
+ 0x2a, 0x10e, 0x2b, 0x10e, 0x2d, 0x10e, 0x3c, 0x10e,
+ 0x3e, 0x10e, 0x3d, 0x10e, 0x5c, 0x10e, 0x24, 0x10e,
+ 0x25, 0x10e, 0x40, 0x207, 0x20, 0x64b, 0x205, 0x640,
+ 0x64b, 0x207, 0x20, 0x64c, 0x207, 0x20, 0x64d, 0x207,
+ 0x20, 0x64e, 0x205, 0x640, 0x64e, 0x207, 0x20, 0x64f,
+ 0x205, 0x640, 0x64f, 0x207, 0x20, 0x650, 0x205, 0x640,
+ 0x650, 0x207, 0x20, 0x651, 0x205, 0x640, 0x651, 0x207,
+ 0x20, 0x652, 0x205, 0x640, 0x652, 0x107, 0x621, 0x107,
+ 0x622, 0x106, 0x622, 0x107, 0x623, 0x106, 0x623, 0x107,
+ 0x624, 0x106, 0x624, 0x107, 0x625, 0x106, 0x625, 0x107,
+ 0x626, 0x106, 0x626, 0x104, 0x626, 0x105, 0x626, 0x107,
+ 0x627, 0x106, 0x627, 0x107, 0x628, 0x106, 0x628, 0x104,
+ 0x628, 0x105, 0x628, 0x107, 0x629, 0x106, 0x629, 0x107,
+ 0x62a, 0x106, 0x62a, 0x104, 0x62a, 0x105, 0x62a, 0x107,
+ 0x62b, 0x106, 0x62b, 0x104, 0x62b, 0x105, 0x62b, 0x107,
+ 0x62c, 0x106, 0x62c, 0x104, 0x62c, 0x105, 0x62c, 0x107,
+ 0x62d, 0x106, 0x62d, 0x104, 0x62d, 0x105, 0x62d, 0x107,
+ 0x62e, 0x106, 0x62e, 0x104, 0x62e, 0x105, 0x62e, 0x107,
+ 0x62f, 0x106, 0x62f, 0x107, 0x630, 0x106, 0x630, 0x107,
+ 0x631, 0x106, 0x631, 0x107, 0x632, 0x106, 0x632, 0x107,
+ 0x633, 0x106, 0x633, 0x104, 0x633, 0x105, 0x633, 0x107,
+ 0x634, 0x106, 0x634, 0x104, 0x634, 0x105, 0x634, 0x107,
+ 0x635, 0x106, 0x635, 0x104, 0x635, 0x105, 0x635, 0x107,
+ 0x636, 0x106, 0x636, 0x104, 0x636, 0x105, 0x636, 0x107,
+ 0x637, 0x106, 0x637, 0x104, 0x637, 0x105, 0x637, 0x107,
+ 0x638, 0x106, 0x638, 0x104, 0x638, 0x105, 0x638, 0x107,
+ 0x639, 0x106, 0x639, 0x104, 0x639, 0x105, 0x639, 0x107,
+ 0x63a, 0x106, 0x63a, 0x104, 0x63a, 0x105, 0x63a, 0x107,
+ 0x641, 0x106, 0x641, 0x104, 0x641, 0x105, 0x641, 0x107,
+ 0x642, 0x106, 0x642, 0x104, 0x642, 0x105, 0x642, 0x107,
+ 0x643, 0x106, 0x643, 0x104, 0x643, 0x105, 0x643, 0x107,
+ 0x644, 0x106, 0x644, 0x104, 0x644, 0x105, 0x644, 0x107,
+ 0x645, 0x106, 0x645, 0x104, 0x645, 0x105, 0x645, 0x107,
+ 0x646, 0x106, 0x646, 0x104, 0x646, 0x105, 0x646, 0x107,
+ 0x647, 0x106, 0x647, 0x104, 0x647, 0x105, 0x647, 0x107,
+ 0x648, 0x106, 0x648, 0x107, 0x649, 0x106, 0x649, 0x107,
+ 0x64a, 0x106, 0x64a, 0x104, 0x64a, 0x105, 0x64a, 0x207,
+ 0x644, 0x622, 0x206, 0x644, 0x622, 0x207, 0x644, 0x623,
+ 0x206, 0x644, 0x623, 0x207, 0x644, 0x625, 0x206, 0x644,
+ 0x625, 0x207, 0x644, 0x627, 0x206, 0x644, 0x627, 0x10c,
+ 0x21, 0x10c, 0x22, 0x10c, 0x23, 0x10c, 0x24, 0x10c,
+ 0x25, 0x10c, 0x26, 0x10c, 0x27, 0x10c, 0x28, 0x10c,
+ 0x29, 0x10c, 0x2a, 0x10c, 0x2b, 0x10c, 0x2c, 0x10c,
+ 0x2d, 0x10c, 0x2e, 0x10c, 0x2f, 0x10c, 0x30, 0x10c,
+ 0x31, 0x10c, 0x32, 0x10c, 0x33, 0x10c, 0x34, 0x10c,
+ 0x35, 0x10c, 0x36, 0x10c, 0x37, 0x10c, 0x38, 0x10c,
+ 0x39, 0x10c, 0x3a, 0x10c, 0x3b, 0x10c, 0x3c, 0x10c,
+ 0x3d, 0x10c, 0x3e, 0x10c, 0x3f, 0x10c, 0x40, 0x10c,
+ 0x41, 0x10c, 0x42, 0x10c, 0x43, 0x10c, 0x44, 0x10c,
+ 0x45, 0x10c, 0x46, 0x10c, 0x47, 0x10c, 0x48, 0x10c,
+ 0x49, 0x10c, 0x4a, 0x10c, 0x4b, 0x10c, 0x4c, 0x10c,
+ 0x4d, 0x10c, 0x4e, 0x10c, 0x4f, 0x10c, 0x50, 0x10c,
+ 0x51, 0x10c, 0x52, 0x10c, 0x53, 0x10c, 0x54, 0x10c,
+ 0x55, 0x10c, 0x56, 0x10c, 0x57, 0x10c, 0x58, 0x10c,
+ 0x59, 0x10c, 0x5a, 0x10c, 0x5b, 0x10c, 0x5c, 0x10c,
+ 0x5d, 0x10c, 0x5e, 0x10c, 0x5f, 0x10c, 0x60, 0x10c,
+ 0x61, 0x10c, 0x62, 0x10c, 0x63, 0x10c, 0x64, 0x10c,
+ 0x65, 0x10c, 0x66, 0x10c, 0x67, 0x10c, 0x68, 0x10c,
+ 0x69, 0x10c, 0x6a, 0x10c, 0x6b, 0x10c, 0x6c, 0x10c,
+ 0x6d, 0x10c, 0x6e, 0x10c, 0x6f, 0x10c, 0x70, 0x10c,
+ 0x71, 0x10c, 0x72, 0x10c, 0x73, 0x10c, 0x74, 0x10c,
+ 0x75, 0x10c, 0x76, 0x10c, 0x77, 0x10c, 0x78, 0x10c,
+ 0x79, 0x10c, 0x7a, 0x10c, 0x7b, 0x10c, 0x7c, 0x10c,
+ 0x7d, 0x10c, 0x7e, 0x10c, 0x2985, 0x10c, 0x2986, 0x10d,
+ 0x3002, 0x10d, 0x300c, 0x10d, 0x300d, 0x10d, 0x3001, 0x10d,
+ 0x30fb, 0x10d, 0x30f2, 0x10d, 0x30a1, 0x10d, 0x30a3, 0x10d,
+ 0x30a5, 0x10d, 0x30a7, 0x10d, 0x30a9, 0x10d, 0x30e3, 0x10d,
+ 0x30e5, 0x10d, 0x30e7, 0x10d, 0x30c3, 0x10d, 0x30fc, 0x10d,
+ 0x30a2, 0x10d, 0x30a4, 0x10d, 0x30a6, 0x10d, 0x30a8, 0x10d,
+ 0x30aa, 0x10d, 0x30ab, 0x10d, 0x30ad, 0x10d, 0x30af, 0x10d,
+ 0x30b1, 0x10d, 0x30b3, 0x10d, 0x30b5, 0x10d, 0x30b7, 0x10d,
+ 0x30b9, 0x10d, 0x30bb, 0x10d, 0x30bd, 0x10d, 0x30bf, 0x10d,
+ 0x30c1, 0x10d, 0x30c4, 0x10d, 0x30c6, 0x10d, 0x30c8, 0x10d,
+ 0x30ca, 0x10d, 0x30cb, 0x10d, 0x30cc, 0x10d, 0x30cd, 0x10d,
+ 0x30ce, 0x10d, 0x30cf, 0x10d, 0x30d2, 0x10d, 0x30d5, 0x10d,
+ 0x30d8, 0x10d, 0x30db, 0x10d, 0x30de, 0x10d, 0x30df, 0x10d,
+ 0x30e0, 0x10d, 0x30e1, 0x10d, 0x30e2, 0x10d, 0x30e4, 0x10d,
+ 0x30e6, 0x10d, 0x30e8, 0x10d, 0x30e9, 0x10d, 0x30ea, 0x10d,
+ 0x30eb, 0x10d, 0x30ec, 0x10d, 0x30ed, 0x10d, 0x30ef, 0x10d,
+ 0x30f3, 0x10d, 0x3099, 0x10d, 0x309a, 0x10d, 0x3164, 0x10d,
+ 0x3131, 0x10d, 0x3132, 0x10d, 0x3133, 0x10d, 0x3134, 0x10d,
+ 0x3135, 0x10d, 0x3136, 0x10d, 0x3137, 0x10d, 0x3138, 0x10d,
+ 0x3139, 0x10d, 0x313a, 0x10d, 0x313b, 0x10d, 0x313c, 0x10d,
+ 0x313d, 0x10d, 0x313e, 0x10d, 0x313f, 0x10d, 0x3140, 0x10d,
+ 0x3141, 0x10d, 0x3142, 0x10d, 0x3143, 0x10d, 0x3144, 0x10d,
+ 0x3145, 0x10d, 0x3146, 0x10d, 0x3147, 0x10d, 0x3148, 0x10d,
+ 0x3149, 0x10d, 0x314a, 0x10d, 0x314b, 0x10d, 0x314c, 0x10d,
+ 0x314d, 0x10d, 0x314e, 0x10d, 0x314f, 0x10d, 0x3150, 0x10d,
+ 0x3151, 0x10d, 0x3152, 0x10d, 0x3153, 0x10d, 0x3154, 0x10d,
+ 0x3155, 0x10d, 0x3156, 0x10d, 0x3157, 0x10d, 0x3158, 0x10d,
+ 0x3159, 0x10d, 0x315a, 0x10d, 0x315b, 0x10d, 0x315c, 0x10d,
+ 0x315d, 0x10d, 0x315e, 0x10d, 0x315f, 0x10d, 0x3160, 0x10d,
+ 0x3161, 0x10d, 0x3162, 0x10d, 0x3163, 0x10c, 0xa2, 0x10c,
+ 0xa3, 0x10c, 0xac, 0x10c, 0xaf, 0x10c, 0xa6, 0x10c,
+ 0xa5, 0x10c, 0x20a9, 0x10d, 0x2502, 0x10d, 0x2190, 0x10d,
+ 0x2191, 0x10d, 0x2192, 0x10d, 0x2193, 0x10d, 0x25a0, 0x10d,
+ 0x25cb, 0x109, 0x2d0, 0x109, 0x2d1, 0x109, 0xe6, 0x109,
+ 0x299, 0x109, 0x253, 0x109, 0x2a3, 0x109, 0xab66, 0x109,
+ 0x2a5, 0x109, 0x2a4, 0x109, 0x256, 0x109, 0x257, 0x109,
+ 0x1d91, 0x109, 0x258, 0x109, 0x25e, 0x109, 0x2a9, 0x109,
+ 0x264, 0x109, 0x262, 0x109, 0x260, 0x109, 0x29b, 0x109,
+ 0x127, 0x109, 0x29c, 0x109, 0x267, 0x109, 0x284, 0x109,
+ 0x2aa, 0x109, 0x2ab, 0x109, 0x26c, 0x209, 0xd837, 0xdf04,
+ 0x109, 0xa78e, 0x109, 0x26e, 0x209, 0xd837, 0xdf05, 0x109,
+ 0x28e, 0x209, 0xd837, 0xdf06, 0x109, 0xf8, 0x109, 0x276,
+ 0x109, 0x277, 0x109, 0x71, 0x109, 0x27a, 0x209, 0xd837,
+ 0xdf08, 0x109, 0x27d, 0x109, 0x27e, 0x109, 0x280, 0x109,
+ 0x2a8, 0x109, 0x2a6, 0x109, 0xab67, 0x109, 0x2a7, 0x109,
+ 0x288, 0x109, 0x2c71, 0x109, 0x28f, 0x109, 0x2a1, 0x109,
+ 0x2a2, 0x109, 0x298, 0x109, 0x1c0, 0x109, 0x1c1, 0x109,
+ 0x1c2, 0x209, 0xd837, 0xdf0a, 0x209, 0xd837, 0xdf1e, 0x401,
+ 0xd804, 0xdc99, 0xd804, 0xdcba, 0x401, 0xd804, 0xdc9b, 0xd804,
+ 0xdcba, 0x401, 0xd804, 0xdca5, 0xd804, 0xdcba, 0x401, 0xd804,
+ 0xdd31, 0xd804, 0xdd27, 0x401, 0xd804, 0xdd32, 0xd804, 0xdd27,
+ 0x401, 0xd804, 0xdf47, 0xd804, 0xdf3e, 0x401, 0xd804, 0xdf47,
+ 0xd804, 0xdf57, 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcba, 0x401,
+ 0xd805, 0xdcb9, 0xd805, 0xdcb0, 0x401, 0xd805, 0xdcb9, 0xd805,
+ 0xdcbd, 0x401, 0xd805, 0xddb8, 0xd805, 0xddaf, 0x401, 0xd805,
+ 0xddb9, 0xd805, 0xddaf, 0x401, 0xd806, 0xdd35, 0xd806, 0xdd30,
+ 0x401, 0xd834, 0xdd57, 0xd834, 0xdd65, 0x401, 0xd834, 0xdd58,
+ 0xd834, 0xdd65, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd6e, 0x401,
+ 0xd834, 0xdd5f, 0xd834, 0xdd6f, 0x401, 0xd834, 0xdd5f, 0xd834,
+ 0xdd70, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd71, 0x401, 0xd834,
+ 0xdd5f, 0xd834, 0xdd72, 0x401, 0xd834, 0xddb9, 0xd834, 0xdd65,
+ 0x401, 0xd834, 0xddba, 0xd834, 0xdd65, 0x401, 0xd834, 0xddbb,
+ 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbc, 0xd834, 0xdd6e, 0x401,
+ 0xd834, 0xddbb, 0xd834, 0xdd6f, 0x401, 0xd834, 0xddbc, 0xd834,
+ 0xdd6f, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x69, 0x102, 0x6a, 0x102,
0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102,
- 0x47, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102,
+ 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, 0x72, 0x102,
+ 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, 0x76, 0x102,
+ 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102,
+ 0x41, 0x102, 0x42, 0x102, 0x43, 0x102, 0x44, 0x102,
+ 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, 0x48, 0x102,
+ 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102,
0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102,
- 0x51, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102,
- 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102,
+ 0x51, 0x102, 0x52, 0x102, 0x53, 0x102, 0x54, 0x102,
+ 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, 0x58, 0x102,
+ 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102,
+ 0x63, 0x102, 0x64, 0x102, 0x65, 0x102, 0x66, 0x102,
+ 0x67, 0x102, 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102,
+ 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102,
+ 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, 0x72, 0x102,
+ 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, 0x76, 0x102,
+ 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102,
+ 0x41, 0x102, 0x43, 0x102, 0x44, 0x102, 0x47, 0x102,
+ 0x4a, 0x102, 0x4b, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x53, 0x102, 0x54, 0x102,
+ 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, 0x58, 0x102,
+ 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102,
+ 0x63, 0x102, 0x64, 0x102, 0x66, 0x102, 0x68, 0x102,
0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102,
- 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102,
- 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102,
- 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102,
- 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102,
+ 0x6d, 0x102, 0x6e, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
- 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102,
- 0x4d, 0x102, 0x4f, 0x102, 0x53, 0x102, 0x54, 0x102,
- 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, 0x58, 0x102,
- 0x59, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102,
- 0x42, 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102,
- 0x46, 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102,
- 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102,
- 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102,
- 0x52, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102,
- 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102,
- 0x5a, 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102,
- 0x64, 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102,
- 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102,
- 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102,
- 0x70, 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102,
- 0x74, 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102,
- 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102, 0x131, 0x102,
- 0x237, 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102,
- 0x394, 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102,
- 0x398, 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102,
- 0x39c, 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102,
- 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102,
- 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102,
- 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102,
- 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102,
- 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102,
- 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102,
- 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102,
- 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102,
- 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102,
- 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102,
- 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x44, 0x102,
+ 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, 0x4a, 0x102,
+ 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102,
+ 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x61, 0x102, 0x62, 0x102,
+ 0x63, 0x102, 0x64, 0x102, 0x65, 0x102, 0x66, 0x102,
+ 0x67, 0x102, 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102,
+ 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102,
+ 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, 0x72, 0x102,
+ 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, 0x76, 0x102,
+ 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, 0x7a, 0x102,
+ 0x41, 0x102, 0x42, 0x102, 0x44, 0x102, 0x45, 0x102,
+ 0x46, 0x102, 0x47, 0x102, 0x49, 0x102, 0x4a, 0x102,
+ 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4f, 0x102,
+ 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102,
+ 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102,
+ 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102,
+ 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102,
+ 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102,
+ 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102,
+ 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102,
+ 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102,
+ 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102,
+ 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102,
+ 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102,
+ 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102,
+ 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102,
+ 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102,
+ 0x7a, 0x102, 0x131, 0x102, 0x237, 0x102, 0x391, 0x102,
0x392, 0x102, 0x393, 0x102, 0x394, 0x102, 0x395, 0x102,
0x396, 0x102, 0x397, 0x102, 0x398, 0x102, 0x399, 0x102,
0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102,
@@ -13391,10 +14320,22 @@ static const unsigned short uc_decomposition_map[] = {
0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102,
0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102,
0x2202, 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102,
- 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x3dc, 0x102,
- 0x3dd, 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102,
- 0x33, 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102,
- 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, 0x30, 0x102,
+ 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102,
+ 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, 0x395, 0x102,
+ 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, 0x399, 0x102,
+ 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102,
+ 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102,
+ 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102,
+ 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102,
+ 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102,
+ 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102,
+ 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102,
+ 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102,
+ 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102,
+ 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102,
+ 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102,
+ 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102,
+ 0x3d6, 0x102, 0x3dc, 0x102, 0x3dd, 0x102, 0x30, 0x102,
0x31, 0x102, 0x32, 0x102, 0x33, 0x102, 0x34, 0x102,
0x35, 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102,
0x39, 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102,
@@ -13404,7 +14345,25 @@ static const unsigned short uc_decomposition_map[] = {
0x35, 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102,
0x39, 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102,
0x33, 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102,
- 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, 0x627, 0x102,
+ 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, 0x30, 0x102,
+ 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, 0x34, 0x102,
+ 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102,
+ 0x39, 0x109, 0x430, 0x109, 0x431, 0x109, 0x432, 0x109,
+ 0x433, 0x109, 0x434, 0x109, 0x435, 0x109, 0x436, 0x109,
+ 0x437, 0x109, 0x438, 0x109, 0x43a, 0x109, 0x43b, 0x109,
+ 0x43c, 0x109, 0x43e, 0x109, 0x43f, 0x109, 0x440, 0x109,
+ 0x441, 0x109, 0x442, 0x109, 0x443, 0x109, 0x444, 0x109,
+ 0x445, 0x109, 0x446, 0x109, 0x447, 0x109, 0x448, 0x109,
+ 0x44b, 0x109, 0x44d, 0x109, 0x44e, 0x109, 0xa689, 0x109,
+ 0x4d9, 0x109, 0x456, 0x109, 0x458, 0x109, 0x4e9, 0x109,
+ 0x4af, 0x109, 0x4cf, 0x10a, 0x430, 0x10a, 0x431, 0x10a,
+ 0x432, 0x10a, 0x433, 0x10a, 0x434, 0x10a, 0x435, 0x10a,
+ 0x436, 0x10a, 0x437, 0x10a, 0x438, 0x10a, 0x43a, 0x10a,
+ 0x43b, 0x10a, 0x43e, 0x10a, 0x43f, 0x10a, 0x441, 0x10a,
+ 0x443, 0x10a, 0x444, 0x10a, 0x445, 0x10a, 0x446, 0x10a,
+ 0x447, 0x10a, 0x448, 0x10a, 0x44a, 0x10a, 0x44b, 0x10a,
+ 0x491, 0x10a, 0x456, 0x10a, 0x455, 0x10a, 0x45f, 0x109,
+ 0x4ab, 0x109, 0xa651, 0x109, 0x4b1, 0x102, 0x627, 0x102,
0x628, 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x648, 0x102,
0x632, 0x102, 0x62d, 0x102, 0x637, 0x102, 0x64a, 0x102,
0x643, 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, 0x102,
@@ -13640,7 +14599,7 @@ static const unsigned short uc_decomposition_map[] = {
0xd869, 0xde00
};
-static const unsigned short uc_ligature_trie[] = {
+static constexpr unsigned short uc_ligature_trie[] = {
// 0 - 0x3100
631, 631, 631, 631, 631, 631, 631, 631,
@@ -14070,7 +15029,7 @@ static const unsigned short uc_ligature_trie[] = {
? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100) >> 8) + 0x188] + (ucs4 & 0xff)] \
: 0xffff)
-static const unsigned short uc_ligature_map[] = {
+static constexpr unsigned short uc_ligature_map[] = {
0x54, 0x41, 0xc0, 0x45, 0xc8, 0x49, 0xcc, 0x4e,
0x1f8, 0x4f, 0xd2, 0x55, 0xd9, 0x57, 0x1e80, 0x59,
0x1ef2, 0x61, 0xe0, 0x65, 0xe8, 0x69, 0xec, 0x6e,
@@ -14326,7 +15285,7 @@ struct NormalizationCorrection {
int version;
};
-static const NormalizationCorrection uc_normalization_corrections[] = {
+static constexpr NormalizationCorrection uc_normalization_corrections[] = {
{ 0xf951, 0x96fb, 6 },
{ 0x2f868, 0x2136a, 7 },
{ 0x2f874, 0x5f33, 7 },
@@ -14338,6 +15297,6023 @@ static const NormalizationCorrection uc_normalization_corrections[] = {
enum { NumNormalizationCorrections = 6 };
enum { NormalizationCorrectionsVersionMax = 7 };
+static constexpr char16_t idnaMappingData[] = {
+ 0x31, 0x31, 0x65e5, 0x31, 0x31, 0x6708, 0x31, 0x31, 0x70b9, 0x31, 0x32, 0x65e5,
+ 0x31, 0x32, 0x6708, 0x31, 0x32, 0x70b9, 0x31, 0x33, 0x65e5, 0x31, 0x33, 0x70b9,
+ 0x31, 0x34, 0x65e5, 0x31, 0x34, 0x70b9, 0x31, 0x35, 0x65e5, 0x31, 0x35, 0x70b9,
+ 0x31, 0x36, 0x65e5, 0x31, 0x36, 0x70b9, 0x31, 0x37, 0x65e5, 0x31, 0x37, 0x70b9,
+ 0x31, 0x38, 0x65e5, 0x31, 0x38, 0x70b9, 0x31, 0x39, 0x65e5, 0x31, 0x39, 0x70b9,
+ 0x31, 0x2044, 0x36, 0x31, 0x2044, 0x35, 0x31, 0x2044, 0x34, 0x31, 0x2044, 0x33,
+ 0x31, 0x2044, 0x32, 0x35, 0x65e5, 0x62, 0x61, 0x72, 0x61, 0x64, 0x2215, 0x73,
+ 0x32, 0x2044, 0x35, 0x65, 0x72, 0x67, 0x61, 0x6c, 0x6d, 0x68, 0x7a, 0x70,
+ 0x74, 0x65, 0x6c, 0x6f, 0x67, 0x68, 0x7a, 0x6d, 0x69, 0x6c, 0x74, 0x68,
+ 0x7a, 0x5e9, 0x5bc, 0x5c1, 0x628, 0x62d, 0x64a, 0x62a, 0x62c, 0x645, 0x62a, 0x62c,
+ 0x64a, 0x62a, 0x62d, 0x645, 0x62a, 0x62e, 0x649, 0x62a, 0x645, 0x62c, 0x62e, 0x646,
+ 0x62d, 0x649, 0x222e, 0x222e, 0x222e, 0x3014, 0x6253, 0x3015, 0x30a4, 0x30f3, 0x30c1, 0x30ac,
+ 0x30f3, 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0xd834,
+ 0xddba, 0xd834, 0xdd65, 0xd834, 0xdd6f, 0xd834, 0xddba, 0xd834, 0xdd65, 0xd834, 0xdd6e, 0xd834,
+ 0xddb9, 0xd834, 0xdd65, 0xd834, 0xdd6f, 0xd834, 0xddb9, 0xd834, 0xdd65, 0xd834, 0xdd6e, 0xd834,
+ 0xdd58, 0xd834, 0xdd65, 0xd834, 0xdd72, 0xd834, 0xdd58, 0xd834, 0xdd65, 0xd834, 0xdd71, 0xd834,
+ 0xdd58, 0xd834, 0xdd65, 0xd834, 0xdd70, 0xd834, 0xdd58, 0xd834, 0xdd65, 0xd834, 0xdd6f, 0xd834,
+ 0xdd58, 0xd834, 0xdd65, 0xd834, 0xdd6e, 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30fc,
+ 0x30d6, 0x30eb, 0x30df, 0x30af, 0x30ed, 0x30f3, 0x30d0, 0x30fc, 0x30ec, 0x30eb, 0x30b5, 0x30a4,
+ 0x30af, 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3,
+ 0x30d4, 0x30a2, 0x30b9, 0x30c8, 0x30eb, 0x30d1, 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0x30b5, 0x30f3,
+ 0x30c1, 0x30fc, 0x30e0, 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0x30a8, 0x30b9, 0x30af, 0x30fc,
+ 0x30c9, 0xd834, 0xdd57, 0xd834, 0xdd65, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x30e1, 0x30ac, 0x30c8,
+ 0x30f3, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x30b9, 0x30d5, 0x30e9,
+ 0x30f3, 0x30da, 0x30fc, 0x30b8, 0x30de, 0x30a4, 0x30eb, 0x30e6, 0x30a2, 0x30f3, 0x30da, 0x30a2,
+ 0x30eb, 0x30d5, 0x30a1, 0x30e9, 0x30c3, 0x30c9, 0x30d6, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30d8,
+ 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x30df, 0x30ea, 0x30d0, 0x30fc, 0x30eb, 0x30d4, 0x30fc, 0x627,
+ 0x643, 0x628, 0x631, 0x6cc, 0x627, 0x644, 0x644, 0x647, 0x645, 0x62c, 0x64a, 0x646,
+ 0x62d, 0x645, 0x64a, 0x633, 0x645, 0x645, 0x635, 0x62d, 0x64a, 0x636, 0x62e, 0x645,
+ 0x639, 0x645, 0x649, 0x640, 0x64f, 0x651, 0x642, 0x645, 0x645, 0x644, 0x62c, 0x645,
+ 0x62d, 0x633, 0x62d, 0x62c, 0x634, 0x62d, 0x64a, 0x635, 0x645, 0x645, 0x637, 0x645,
+ 0x64a, 0x63a, 0x645, 0x649, 0x641, 0x645, 0x64a, 0x643, 0x645, 0x64a, 0x644, 0x62d,
+ 0x649, 0x646, 0x62c, 0x62d, 0x64a, 0x633, 0x62c, 0x649, 0x634, 0x62d, 0x645, 0x635,
+ 0x644, 0x6d2, 0x637, 0x645, 0x645, 0x63a, 0x645, 0x645, 0x641, 0x62e, 0x645, 0x643,
+ 0x645, 0x645, 0x644, 0x62d, 0x645, 0x649, 0x633, 0x645, 0x62d, 0x635, 0x62d, 0x62d,
+ 0x636, 0x62d, 0x64a, 0x639, 0x645, 0x645, 0x640, 0x64e, 0x651, 0x642, 0x645, 0x62d,
+ 0x64a, 0x646, 0x62d, 0x64a, 0x3014, 0x73, 0x3015, 0x3014, 0x6557, 0x3015, 0x30a6, 0x30a9,
+ 0x30f3, 0x30ae, 0x30cb, 0x30fc, 0x30bb, 0x30f3, 0x30c1, 0x30d4, 0x30af, 0x30eb, 0x30da, 0x30f3,
+ 0x30b9, 0x30dd, 0x30f3, 0x30c9, 0x30e4, 0x30fc, 0x30eb, 0x6b, 0x63, 0x61, 0x6c, 0x74,
+ 0x64, 0x6d, 0x33, 0x2044, 0x34, 0x2044, 0x35, 0x2044, 0x38, 0x6b, 0x68, 0x7a,
+ 0x70, 0x70, 0x6d, 0x70, 0x61, 0x2215, 0x6d, 0x6f, 0x6c, 0x76, 0x2215, 0x6d,
+ 0x2215, 0x73, 0x32, 0x2044, 0x33, 0x30, 0x65e5, 0x66, 0x61, 0x78, 0x69, 0x69,
+ 0x5e9, 0x5bc, 0x5c2, 0x628, 0x62e, 0x64a, 0x62a, 0x62c, 0x649, 0x62a, 0x62d, 0x62c,
+ 0x62a, 0x62e, 0x645, 0x62a, 0x62e, 0x64a, 0x62a, 0x645, 0x62d, 0x62a, 0x645, 0x64a,
+ 0x62a, 0x645, 0x649, 0x62a, 0x645, 0x62e, 0x645, 0x62c, 0x62d, 0x649, 0x633, 0x62c,
+ 0x62d, 0x634, 0x62c, 0x64a, 0x635, 0x644, 0x649, 0x637, 0x645, 0x62d, 0x62c, 0x64a,
+ 0x633, 0x645, 0x62c, 0x645, 0x649, 0x633, 0x62e, 0x64a, 0x634, 0x645, 0x645, 0x636,
+ 0x62d, 0x649, 0x639, 0x62c, 0x645, 0x63a, 0x645, 0x64a, 0x642, 0x644, 0x6d2, 0x644,
+ 0x62c, 0x62c, 0x644, 0x62d, 0x64a, 0x646, 0x62c, 0x645, 0x64a, 0x633, 0x62e, 0x649,
+ 0x634, 0x645, 0x62e, 0x64a, 0x646, 0x645, 0x64a, 0x62c, 0x64a, 0x62d, 0x64a, 0x645,
+ 0x64a, 0x645, 0x645, 0x64a, 0xfb2, 0xf71, 0xf80, 0x3014, 0x4e8c, 0x3015, 0x3014, 0x70b9,
+ 0x3015, 0x30aa, 0x30fc, 0x30e0, 0x30b3, 0x30eb, 0x30ca, 0x30d1, 0x30fc, 0x30c4, 0x30da, 0x30cb,
+ 0x30d2, 0x30dc, 0x30eb, 0x30c8, 0x30e4, 0x30fc, 0x30c9, 0x63, 0x2215, 0x6b, 0x67, 0x70,
+ 0x61, 0x6d, 0x6d, 0x32, 0x39, 0x65e5, 0x64, 0x6d, 0x32, 0x37, 0x65e5, 0x63,
+ 0x6d, 0x32, 0x36, 0x65e5, 0x32, 0x34, 0x70b9, 0x32, 0x34, 0x65e5, 0x32, 0x33,
+ 0x70b9, 0x32, 0x33, 0x65e5, 0x32, 0x32, 0x70b9, 0x32, 0x32, 0x65e5, 0x32, 0x31,
+ 0x70b9, 0x32, 0x31, 0x65e5, 0x32, 0x30, 0x70b9, 0x32, 0x30, 0x65e5, 0x31, 0x2044,
+ 0x39, 0x31, 0x2044, 0x38, 0x31, 0x2044, 0x37, 0x2044, 0x38, 0x6b, 0x6d, 0x32,
+ 0x38, 0x65e5, 0x63, 0x6d, 0x33, 0x31, 0x65e5, 0x66, 0x66, 0x69, 0x6b, 0x6d,
+ 0x33, 0x2044, 0x35, 0x2044, 0x36, 0x68, 0x70, 0x61, 0x6d, 0x6d, 0x33, 0x2044,
+ 0x38, 0x66, 0x66, 0x6c, 0x6b, 0x70, 0x61, 0x70, 0x70, 0x76, 0x69, 0x69,
+ 0x69, 0x631, 0x633, 0x648, 0x644, 0x645, 0x62d, 0x645, 0x62f, 0x635, 0x644, 0x639,
+ 0x645, 0x64a, 0x640, 0x650, 0x651, 0x642, 0x645, 0x64a, 0x644, 0x62c, 0x64a, 0x644,
+ 0x62e, 0x645, 0x646, 0x62c, 0x64a, 0x2035, 0x2035, 0x2035, 0x3014, 0x5b89, 0x3015, 0x30a2,
+ 0x30fc, 0x30eb, 0x30ac, 0x30ed, 0x30f3, 0x30b3, 0x30fc, 0x30dd, 0x30a4, 0x30f3, 0x30c8, 0x30b7,
+ 0x30ea, 0x30f3, 0x30b0, 0x30ad, 0x30e5, 0x30ea, 0x30fc, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x30a4,
+ 0x30cb, 0x30f3, 0x30b0, 0x222b, 0x222b, 0x222b, 0x222b, 0x648, 0x633, 0x644, 0x645, 0x64a,
+ 0x646, 0x62c, 0x649, 0xfb3, 0xf71, 0xf80, 0x3014, 0x52dd, 0x3015, 0x3014, 0x76d7, 0x3015,
+ 0x30ab, 0x30a4, 0x30ea, 0x30c3, 0x30c8, 0x30eb, 0x30de, 0x30a4, 0x30af, 0x30ed, 0x30fc, 0x30cd,
+ 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x30a2, 0x30d1, 0x30fc, 0x30c8,
+ 0x2032, 0x2032, 0x2032, 0x2032, 0x639, 0x644, 0x64a, 0x647, 0x645, 0x645, 0x62e, 0x62c,
+ 0x646, 0x645, 0x649, 0x3014, 0x4e09, 0x3015, 0x3014, 0x672c, 0x3015, 0x30aa, 0x30f3, 0x30b9,
+ 0x30b1, 0x30fc, 0x30b9, 0x30ce, 0x30c3, 0x30c8, 0x30d8, 0x30eb, 0x30c4, 0x30db, 0x30fc, 0x30eb,
+ 0x30de, 0x30c3, 0x30cf, 0x30a4, 0x30c4, 0x30d9, 0x30fc, 0x30bf, 0x30db, 0x30fc, 0x30f3, 0x30de,
+ 0x30eb, 0x30af, 0x31, 0x2044, 0x31, 0x30, 0x70b9, 0x31, 0x30, 0x6708, 0x31, 0x30,
+ 0x65e5, 0x30, 0x2044, 0x33,
+};
+
+struct IdnaMapEntry {
+ // 21 bits suffice for any valid code-point (LastValidCodePoint = 0x10ffff)
+ unsigned codePoint : 24;
+ unsigned size : 8;
+ char16_t ucs[2]; // ucs[0] is offset if size > 2
+};
+static_assert(sizeof(IdnaMapEntry) == 8);
+
+static constexpr IdnaMapEntry idnaMap[] = {
+ { 0xaa, 1, { 0x61, 0 } },
+ { 0xb2, 1, { 0x32, 0 } },
+ { 0xb3, 1, { 0x33, 0 } },
+ { 0xb5, 1, { 0x3bc, 0 } },
+ { 0xb9, 1, { 0x31, 0 } },
+ { 0xba, 1, { 0x6f, 0 } },
+ { 0xbc, 3, { 66, 0 } },
+ { 0xbd, 3, { 72, 0 } },
+ { 0xbe, 3, { 470, 0 } },
+ { 0xc0, 1, { 0xe0, 0 } },
+ { 0xc1, 1, { 0xe1, 0 } },
+ { 0xc2, 1, { 0xe2, 0 } },
+ { 0xc3, 1, { 0xe3, 0 } },
+ { 0xc4, 1, { 0xe4, 0 } },
+ { 0xc5, 1, { 0xe5, 0 } },
+ { 0xc6, 1, { 0xe6, 0 } },
+ { 0xc7, 1, { 0xe7, 0 } },
+ { 0xc8, 1, { 0xe8, 0 } },
+ { 0xc9, 1, { 0xe9, 0 } },
+ { 0xca, 1, { 0xea, 0 } },
+ { 0xcb, 1, { 0xeb, 0 } },
+ { 0xcc, 1, { 0xec, 0 } },
+ { 0xcd, 1, { 0xed, 0 } },
+ { 0xce, 1, { 0xee, 0 } },
+ { 0xcf, 1, { 0xef, 0 } },
+ { 0xd0, 1, { 0xf0, 0 } },
+ { 0xd1, 1, { 0xf1, 0 } },
+ { 0xd2, 1, { 0xf2, 0 } },
+ { 0xd3, 1, { 0xf3, 0 } },
+ { 0xd4, 1, { 0xf4, 0 } },
+ { 0xd5, 1, { 0xf5, 0 } },
+ { 0xd6, 1, { 0xf6, 0 } },
+ { 0xd8, 1, { 0xf8, 0 } },
+ { 0xd9, 1, { 0xf9, 0 } },
+ { 0xda, 1, { 0xfa, 0 } },
+ { 0xdb, 1, { 0xfb, 0 } },
+ { 0xdc, 1, { 0xfc, 0 } },
+ { 0xdd, 1, { 0xfd, 0 } },
+ { 0xde, 1, { 0xfe, 0 } },
+ { 0xdf, 2, { 0x73, 0x73 } },
+ { 0x100, 1, { 0x101, 0 } },
+ { 0x102, 1, { 0x103, 0 } },
+ { 0x104, 1, { 0x105, 0 } },
+ { 0x106, 1, { 0x107, 0 } },
+ { 0x108, 1, { 0x109, 0 } },
+ { 0x10a, 1, { 0x10b, 0 } },
+ { 0x10c, 1, { 0x10d, 0 } },
+ { 0x10e, 1, { 0x10f, 0 } },
+ { 0x110, 1, { 0x111, 0 } },
+ { 0x112, 1, { 0x113, 0 } },
+ { 0x114, 1, { 0x115, 0 } },
+ { 0x116, 1, { 0x117, 0 } },
+ { 0x118, 1, { 0x119, 0 } },
+ { 0x11a, 1, { 0x11b, 0 } },
+ { 0x11c, 1, { 0x11d, 0 } },
+ { 0x11e, 1, { 0x11f, 0 } },
+ { 0x120, 1, { 0x121, 0 } },
+ { 0x122, 1, { 0x123, 0 } },
+ { 0x124, 1, { 0x125, 0 } },
+ { 0x126, 1, { 0x127, 0 } },
+ { 0x128, 1, { 0x129, 0 } },
+ { 0x12a, 1, { 0x12b, 0 } },
+ { 0x12c, 1, { 0x12d, 0 } },
+ { 0x12e, 1, { 0x12f, 0 } },
+ { 0x130, 2, { 0x69, 0x307 } },
+ { 0x132, 2, { 0x69, 0x6a } },
+ { 0x133, 2, { 0x69, 0x6a } },
+ { 0x134, 1, { 0x135, 0 } },
+ { 0x136, 1, { 0x137, 0 } },
+ { 0x139, 1, { 0x13a, 0 } },
+ { 0x13b, 1, { 0x13c, 0 } },
+ { 0x13d, 1, { 0x13e, 0 } },
+ { 0x13f, 2, { 0x6c, 0xb7 } },
+ { 0x140, 2, { 0x6c, 0xb7 } },
+ { 0x141, 1, { 0x142, 0 } },
+ { 0x143, 1, { 0x144, 0 } },
+ { 0x145, 1, { 0x146, 0 } },
+ { 0x147, 1, { 0x148, 0 } },
+ { 0x149, 2, { 0x2bc, 0x6e } },
+ { 0x14a, 1, { 0x14b, 0 } },
+ { 0x14c, 1, { 0x14d, 0 } },
+ { 0x14e, 1, { 0x14f, 0 } },
+ { 0x150, 1, { 0x151, 0 } },
+ { 0x152, 1, { 0x153, 0 } },
+ { 0x154, 1, { 0x155, 0 } },
+ { 0x156, 1, { 0x157, 0 } },
+ { 0x158, 1, { 0x159, 0 } },
+ { 0x15a, 1, { 0x15b, 0 } },
+ { 0x15c, 1, { 0x15d, 0 } },
+ { 0x15e, 1, { 0x15f, 0 } },
+ { 0x160, 1, { 0x161, 0 } },
+ { 0x162, 1, { 0x163, 0 } },
+ { 0x164, 1, { 0x165, 0 } },
+ { 0x166, 1, { 0x167, 0 } },
+ { 0x168, 1, { 0x169, 0 } },
+ { 0x16a, 1, { 0x16b, 0 } },
+ { 0x16c, 1, { 0x16d, 0 } },
+ { 0x16e, 1, { 0x16f, 0 } },
+ { 0x170, 1, { 0x171, 0 } },
+ { 0x172, 1, { 0x173, 0 } },
+ { 0x174, 1, { 0x175, 0 } },
+ { 0x176, 1, { 0x177, 0 } },
+ { 0x178, 1, { 0xff, 0 } },
+ { 0x179, 1, { 0x17a, 0 } },
+ { 0x17b, 1, { 0x17c, 0 } },
+ { 0x17d, 1, { 0x17e, 0 } },
+ { 0x17f, 1, { 0x73, 0 } },
+ { 0x181, 1, { 0x253, 0 } },
+ { 0x182, 1, { 0x183, 0 } },
+ { 0x184, 1, { 0x185, 0 } },
+ { 0x186, 1, { 0x254, 0 } },
+ { 0x187, 1, { 0x188, 0 } },
+ { 0x189, 1, { 0x256, 0 } },
+ { 0x18a, 1, { 0x257, 0 } },
+ { 0x18b, 1, { 0x18c, 0 } },
+ { 0x18e, 1, { 0x1dd, 0 } },
+ { 0x18f, 1, { 0x259, 0 } },
+ { 0x190, 1, { 0x25b, 0 } },
+ { 0x191, 1, { 0x192, 0 } },
+ { 0x193, 1, { 0x260, 0 } },
+ { 0x194, 1, { 0x263, 0 } },
+ { 0x196, 1, { 0x269, 0 } },
+ { 0x197, 1, { 0x268, 0 } },
+ { 0x198, 1, { 0x199, 0 } },
+ { 0x19c, 1, { 0x26f, 0 } },
+ { 0x19d, 1, { 0x272, 0 } },
+ { 0x19f, 1, { 0x275, 0 } },
+ { 0x1a0, 1, { 0x1a1, 0 } },
+ { 0x1a2, 1, { 0x1a3, 0 } },
+ { 0x1a4, 1, { 0x1a5, 0 } },
+ { 0x1a6, 1, { 0x280, 0 } },
+ { 0x1a7, 1, { 0x1a8, 0 } },
+ { 0x1a9, 1, { 0x283, 0 } },
+ { 0x1ac, 1, { 0x1ad, 0 } },
+ { 0x1ae, 1, { 0x288, 0 } },
+ { 0x1af, 1, { 0x1b0, 0 } },
+ { 0x1b1, 1, { 0x28a, 0 } },
+ { 0x1b2, 1, { 0x28b, 0 } },
+ { 0x1b3, 1, { 0x1b4, 0 } },
+ { 0x1b5, 1, { 0x1b6, 0 } },
+ { 0x1b7, 1, { 0x292, 0 } },
+ { 0x1b8, 1, { 0x1b9, 0 } },
+ { 0x1bc, 1, { 0x1bd, 0 } },
+ { 0x1c4, 2, { 0x64, 0x17e } },
+ { 0x1c5, 2, { 0x64, 0x17e } },
+ { 0x1c6, 2, { 0x64, 0x17e } },
+ { 0x1c7, 2, { 0x6c, 0x6a } },
+ { 0x1c8, 2, { 0x6c, 0x6a } },
+ { 0x1c9, 2, { 0x6c, 0x6a } },
+ { 0x1ca, 2, { 0x6e, 0x6a } },
+ { 0x1cb, 2, { 0x6e, 0x6a } },
+ { 0x1cc, 2, { 0x6e, 0x6a } },
+ { 0x1cd, 1, { 0x1ce, 0 } },
+ { 0x1cf, 1, { 0x1d0, 0 } },
+ { 0x1d1, 1, { 0x1d2, 0 } },
+ { 0x1d3, 1, { 0x1d4, 0 } },
+ { 0x1d5, 1, { 0x1d6, 0 } },
+ { 0x1d7, 1, { 0x1d8, 0 } },
+ { 0x1d9, 1, { 0x1da, 0 } },
+ { 0x1db, 1, { 0x1dc, 0 } },
+ { 0x1de, 1, { 0x1df, 0 } },
+ { 0x1e0, 1, { 0x1e1, 0 } },
+ { 0x1e2, 1, { 0x1e3, 0 } },
+ { 0x1e4, 1, { 0x1e5, 0 } },
+ { 0x1e6, 1, { 0x1e7, 0 } },
+ { 0x1e8, 1, { 0x1e9, 0 } },
+ { 0x1ea, 1, { 0x1eb, 0 } },
+ { 0x1ec, 1, { 0x1ed, 0 } },
+ { 0x1ee, 1, { 0x1ef, 0 } },
+ { 0x1f1, 2, { 0x64, 0x7a } },
+ { 0x1f2, 2, { 0x64, 0x7a } },
+ { 0x1f3, 2, { 0x64, 0x7a } },
+ { 0x1f4, 1, { 0x1f5, 0 } },
+ { 0x1f6, 1, { 0x195, 0 } },
+ { 0x1f7, 1, { 0x1bf, 0 } },
+ { 0x1f8, 1, { 0x1f9, 0 } },
+ { 0x1fa, 1, { 0x1fb, 0 } },
+ { 0x1fc, 1, { 0x1fd, 0 } },
+ { 0x1fe, 1, { 0x1ff, 0 } },
+ { 0x200, 1, { 0x201, 0 } },
+ { 0x202, 1, { 0x203, 0 } },
+ { 0x204, 1, { 0x205, 0 } },
+ { 0x206, 1, { 0x207, 0 } },
+ { 0x208, 1, { 0x209, 0 } },
+ { 0x20a, 1, { 0x20b, 0 } },
+ { 0x20c, 1, { 0x20d, 0 } },
+ { 0x20e, 1, { 0x20f, 0 } },
+ { 0x210, 1, { 0x211, 0 } },
+ { 0x212, 1, { 0x213, 0 } },
+ { 0x214, 1, { 0x215, 0 } },
+ { 0x216, 1, { 0x217, 0 } },
+ { 0x218, 1, { 0x219, 0 } },
+ { 0x21a, 1, { 0x21b, 0 } },
+ { 0x21c, 1, { 0x21d, 0 } },
+ { 0x21e, 1, { 0x21f, 0 } },
+ { 0x220, 1, { 0x19e, 0 } },
+ { 0x222, 1, { 0x223, 0 } },
+ { 0x224, 1, { 0x225, 0 } },
+ { 0x226, 1, { 0x227, 0 } },
+ { 0x228, 1, { 0x229, 0 } },
+ { 0x22a, 1, { 0x22b, 0 } },
+ { 0x22c, 1, { 0x22d, 0 } },
+ { 0x22e, 1, { 0x22f, 0 } },
+ { 0x230, 1, { 0x231, 0 } },
+ { 0x232, 1, { 0x233, 0 } },
+ { 0x23a, 1, { 0x2c65, 0 } },
+ { 0x23b, 1, { 0x23c, 0 } },
+ { 0x23d, 1, { 0x19a, 0 } },
+ { 0x23e, 1, { 0x2c66, 0 } },
+ { 0x241, 1, { 0x242, 0 } },
+ { 0x243, 1, { 0x180, 0 } },
+ { 0x244, 1, { 0x289, 0 } },
+ { 0x245, 1, { 0x28c, 0 } },
+ { 0x246, 1, { 0x247, 0 } },
+ { 0x248, 1, { 0x249, 0 } },
+ { 0x24a, 1, { 0x24b, 0 } },
+ { 0x24c, 1, { 0x24d, 0 } },
+ { 0x24e, 1, { 0x24f, 0 } },
+ { 0x2b0, 1, { 0x68, 0 } },
+ { 0x2b1, 1, { 0x266, 0 } },
+ { 0x2b2, 1, { 0x6a, 0 } },
+ { 0x2b3, 1, { 0x72, 0 } },
+ { 0x2b4, 1, { 0x279, 0 } },
+ { 0x2b5, 1, { 0x27b, 0 } },
+ { 0x2b6, 1, { 0x281, 0 } },
+ { 0x2b7, 1, { 0x77, 0 } },
+ { 0x2b8, 1, { 0x79, 0 } },
+ { 0x2e0, 1, { 0x263, 0 } },
+ { 0x2e1, 1, { 0x6c, 0 } },
+ { 0x2e2, 1, { 0x73, 0 } },
+ { 0x2e3, 1, { 0x78, 0 } },
+ { 0x2e4, 1, { 0x295, 0 } },
+ { 0x340, 1, { 0x300, 0 } },
+ { 0x341, 1, { 0x301, 0 } },
+ { 0x343, 1, { 0x313, 0 } },
+ { 0x344, 2, { 0x308, 0x301 } },
+ { 0x345, 1, { 0x3b9, 0 } },
+ { 0x370, 1, { 0x371, 0 } },
+ { 0x372, 1, { 0x373, 0 } },
+ { 0x374, 1, { 0x2b9, 0 } },
+ { 0x376, 1, { 0x377, 0 } },
+ { 0x37f, 1, { 0x3f3, 0 } },
+ { 0x386, 1, { 0x3ac, 0 } },
+ { 0x387, 1, { 0xb7, 0 } },
+ { 0x388, 1, { 0x3ad, 0 } },
+ { 0x389, 1, { 0x3ae, 0 } },
+ { 0x38a, 1, { 0x3af, 0 } },
+ { 0x38c, 1, { 0x3cc, 0 } },
+ { 0x38e, 1, { 0x3cd, 0 } },
+ { 0x38f, 1, { 0x3ce, 0 } },
+ { 0x391, 1, { 0x3b1, 0 } },
+ { 0x392, 1, { 0x3b2, 0 } },
+ { 0x393, 1, { 0x3b3, 0 } },
+ { 0x394, 1, { 0x3b4, 0 } },
+ { 0x395, 1, { 0x3b5, 0 } },
+ { 0x396, 1, { 0x3b6, 0 } },
+ { 0x397, 1, { 0x3b7, 0 } },
+ { 0x398, 1, { 0x3b8, 0 } },
+ { 0x399, 1, { 0x3b9, 0 } },
+ { 0x39a, 1, { 0x3ba, 0 } },
+ { 0x39b, 1, { 0x3bb, 0 } },
+ { 0x39c, 1, { 0x3bc, 0 } },
+ { 0x39d, 1, { 0x3bd, 0 } },
+ { 0x39e, 1, { 0x3be, 0 } },
+ { 0x39f, 1, { 0x3bf, 0 } },
+ { 0x3a0, 1, { 0x3c0, 0 } },
+ { 0x3a1, 1, { 0x3c1, 0 } },
+ { 0x3a3, 1, { 0x3c3, 0 } },
+ { 0x3a4, 1, { 0x3c4, 0 } },
+ { 0x3a5, 1, { 0x3c5, 0 } },
+ { 0x3a6, 1, { 0x3c6, 0 } },
+ { 0x3a7, 1, { 0x3c7, 0 } },
+ { 0x3a8, 1, { 0x3c8, 0 } },
+ { 0x3a9, 1, { 0x3c9, 0 } },
+ { 0x3aa, 1, { 0x3ca, 0 } },
+ { 0x3ab, 1, { 0x3cb, 0 } },
+ { 0x3c2, 1, { 0x3c3, 0 } },
+ { 0x3cf, 1, { 0x3d7, 0 } },
+ { 0x3d0, 1, { 0x3b2, 0 } },
+ { 0x3d1, 1, { 0x3b8, 0 } },
+ { 0x3d2, 1, { 0x3c5, 0 } },
+ { 0x3d3, 1, { 0x3cd, 0 } },
+ { 0x3d4, 1, { 0x3cb, 0 } },
+ { 0x3d5, 1, { 0x3c6, 0 } },
+ { 0x3d6, 1, { 0x3c0, 0 } },
+ { 0x3d8, 1, { 0x3d9, 0 } },
+ { 0x3da, 1, { 0x3db, 0 } },
+ { 0x3dc, 1, { 0x3dd, 0 } },
+ { 0x3de, 1, { 0x3df, 0 } },
+ { 0x3e0, 1, { 0x3e1, 0 } },
+ { 0x3e2, 1, { 0x3e3, 0 } },
+ { 0x3e4, 1, { 0x3e5, 0 } },
+ { 0x3e6, 1, { 0x3e7, 0 } },
+ { 0x3e8, 1, { 0x3e9, 0 } },
+ { 0x3ea, 1, { 0x3eb, 0 } },
+ { 0x3ec, 1, { 0x3ed, 0 } },
+ { 0x3ee, 1, { 0x3ef, 0 } },
+ { 0x3f0, 1, { 0x3ba, 0 } },
+ { 0x3f1, 1, { 0x3c1, 0 } },
+ { 0x3f2, 1, { 0x3c3, 0 } },
+ { 0x3f4, 1, { 0x3b8, 0 } },
+ { 0x3f5, 1, { 0x3b5, 0 } },
+ { 0x3f7, 1, { 0x3f8, 0 } },
+ { 0x3f9, 1, { 0x3c3, 0 } },
+ { 0x3fa, 1, { 0x3fb, 0 } },
+ { 0x3fd, 1, { 0x37b, 0 } },
+ { 0x3fe, 1, { 0x37c, 0 } },
+ { 0x3ff, 1, { 0x37d, 0 } },
+ { 0x400, 1, { 0x450, 0 } },
+ { 0x401, 1, { 0x451, 0 } },
+ { 0x402, 1, { 0x452, 0 } },
+ { 0x403, 1, { 0x453, 0 } },
+ { 0x404, 1, { 0x454, 0 } },
+ { 0x405, 1, { 0x455, 0 } },
+ { 0x406, 1, { 0x456, 0 } },
+ { 0x407, 1, { 0x457, 0 } },
+ { 0x408, 1, { 0x458, 0 } },
+ { 0x409, 1, { 0x459, 0 } },
+ { 0x40a, 1, { 0x45a, 0 } },
+ { 0x40b, 1, { 0x45b, 0 } },
+ { 0x40c, 1, { 0x45c, 0 } },
+ { 0x40d, 1, { 0x45d, 0 } },
+ { 0x40e, 1, { 0x45e, 0 } },
+ { 0x40f, 1, { 0x45f, 0 } },
+ { 0x410, 1, { 0x430, 0 } },
+ { 0x411, 1, { 0x431, 0 } },
+ { 0x412, 1, { 0x432, 0 } },
+ { 0x413, 1, { 0x433, 0 } },
+ { 0x414, 1, { 0x434, 0 } },
+ { 0x415, 1, { 0x435, 0 } },
+ { 0x416, 1, { 0x436, 0 } },
+ { 0x417, 1, { 0x437, 0 } },
+ { 0x418, 1, { 0x438, 0 } },
+ { 0x419, 1, { 0x439, 0 } },
+ { 0x41a, 1, { 0x43a, 0 } },
+ { 0x41b, 1, { 0x43b, 0 } },
+ { 0x41c, 1, { 0x43c, 0 } },
+ { 0x41d, 1, { 0x43d, 0 } },
+ { 0x41e, 1, { 0x43e, 0 } },
+ { 0x41f, 1, { 0x43f, 0 } },
+ { 0x420, 1, { 0x440, 0 } },
+ { 0x421, 1, { 0x441, 0 } },
+ { 0x422, 1, { 0x442, 0 } },
+ { 0x423, 1, { 0x443, 0 } },
+ { 0x424, 1, { 0x444, 0 } },
+ { 0x425, 1, { 0x445, 0 } },
+ { 0x426, 1, { 0x446, 0 } },
+ { 0x427, 1, { 0x447, 0 } },
+ { 0x428, 1, { 0x448, 0 } },
+ { 0x429, 1, { 0x449, 0 } },
+ { 0x42a, 1, { 0x44a, 0 } },
+ { 0x42b, 1, { 0x44b, 0 } },
+ { 0x42c, 1, { 0x44c, 0 } },
+ { 0x42d, 1, { 0x44d, 0 } },
+ { 0x42e, 1, { 0x44e, 0 } },
+ { 0x42f, 1, { 0x44f, 0 } },
+ { 0x460, 1, { 0x461, 0 } },
+ { 0x462, 1, { 0x463, 0 } },
+ { 0x464, 1, { 0x465, 0 } },
+ { 0x466, 1, { 0x467, 0 } },
+ { 0x468, 1, { 0x469, 0 } },
+ { 0x46a, 1, { 0x46b, 0 } },
+ { 0x46c, 1, { 0x46d, 0 } },
+ { 0x46e, 1, { 0x46f, 0 } },
+ { 0x470, 1, { 0x471, 0 } },
+ { 0x472, 1, { 0x473, 0 } },
+ { 0x474, 1, { 0x475, 0 } },
+ { 0x476, 1, { 0x477, 0 } },
+ { 0x478, 1, { 0x479, 0 } },
+ { 0x47a, 1, { 0x47b, 0 } },
+ { 0x47c, 1, { 0x47d, 0 } },
+ { 0x47e, 1, { 0x47f, 0 } },
+ { 0x480, 1, { 0x481, 0 } },
+ { 0x48a, 1, { 0x48b, 0 } },
+ { 0x48c, 1, { 0x48d, 0 } },
+ { 0x48e, 1, { 0x48f, 0 } },
+ { 0x490, 1, { 0x491, 0 } },
+ { 0x492, 1, { 0x493, 0 } },
+ { 0x494, 1, { 0x495, 0 } },
+ { 0x496, 1, { 0x497, 0 } },
+ { 0x498, 1, { 0x499, 0 } },
+ { 0x49a, 1, { 0x49b, 0 } },
+ { 0x49c, 1, { 0x49d, 0 } },
+ { 0x49e, 1, { 0x49f, 0 } },
+ { 0x4a0, 1, { 0x4a1, 0 } },
+ { 0x4a2, 1, { 0x4a3, 0 } },
+ { 0x4a4, 1, { 0x4a5, 0 } },
+ { 0x4a6, 1, { 0x4a7, 0 } },
+ { 0x4a8, 1, { 0x4a9, 0 } },
+ { 0x4aa, 1, { 0x4ab, 0 } },
+ { 0x4ac, 1, { 0x4ad, 0 } },
+ { 0x4ae, 1, { 0x4af, 0 } },
+ { 0x4b0, 1, { 0x4b1, 0 } },
+ { 0x4b2, 1, { 0x4b3, 0 } },
+ { 0x4b4, 1, { 0x4b5, 0 } },
+ { 0x4b6, 1, { 0x4b7, 0 } },
+ { 0x4b8, 1, { 0x4b9, 0 } },
+ { 0x4ba, 1, { 0x4bb, 0 } },
+ { 0x4bc, 1, { 0x4bd, 0 } },
+ { 0x4be, 1, { 0x4bf, 0 } },
+ { 0x4c1, 1, { 0x4c2, 0 } },
+ { 0x4c3, 1, { 0x4c4, 0 } },
+ { 0x4c5, 1, { 0x4c6, 0 } },
+ { 0x4c7, 1, { 0x4c8, 0 } },
+ { 0x4c9, 1, { 0x4ca, 0 } },
+ { 0x4cb, 1, { 0x4cc, 0 } },
+ { 0x4cd, 1, { 0x4ce, 0 } },
+ { 0x4d0, 1, { 0x4d1, 0 } },
+ { 0x4d2, 1, { 0x4d3, 0 } },
+ { 0x4d4, 1, { 0x4d5, 0 } },
+ { 0x4d6, 1, { 0x4d7, 0 } },
+ { 0x4d8, 1, { 0x4d9, 0 } },
+ { 0x4da, 1, { 0x4db, 0 } },
+ { 0x4dc, 1, { 0x4dd, 0 } },
+ { 0x4de, 1, { 0x4df, 0 } },
+ { 0x4e0, 1, { 0x4e1, 0 } },
+ { 0x4e2, 1, { 0x4e3, 0 } },
+ { 0x4e4, 1, { 0x4e5, 0 } },
+ { 0x4e6, 1, { 0x4e7, 0 } },
+ { 0x4e8, 1, { 0x4e9, 0 } },
+ { 0x4ea, 1, { 0x4eb, 0 } },
+ { 0x4ec, 1, { 0x4ed, 0 } },
+ { 0x4ee, 1, { 0x4ef, 0 } },
+ { 0x4f0, 1, { 0x4f1, 0 } },
+ { 0x4f2, 1, { 0x4f3, 0 } },
+ { 0x4f4, 1, { 0x4f5, 0 } },
+ { 0x4f6, 1, { 0x4f7, 0 } },
+ { 0x4f8, 1, { 0x4f9, 0 } },
+ { 0x4fa, 1, { 0x4fb, 0 } },
+ { 0x4fc, 1, { 0x4fd, 0 } },
+ { 0x4fe, 1, { 0x4ff, 0 } },
+ { 0x500, 1, { 0x501, 0 } },
+ { 0x502, 1, { 0x503, 0 } },
+ { 0x504, 1, { 0x505, 0 } },
+ { 0x506, 1, { 0x507, 0 } },
+ { 0x508, 1, { 0x509, 0 } },
+ { 0x50a, 1, { 0x50b, 0 } },
+ { 0x50c, 1, { 0x50d, 0 } },
+ { 0x50e, 1, { 0x50f, 0 } },
+ { 0x510, 1, { 0x511, 0 } },
+ { 0x512, 1, { 0x513, 0 } },
+ { 0x514, 1, { 0x515, 0 } },
+ { 0x516, 1, { 0x517, 0 } },
+ { 0x518, 1, { 0x519, 0 } },
+ { 0x51a, 1, { 0x51b, 0 } },
+ { 0x51c, 1, { 0x51d, 0 } },
+ { 0x51e, 1, { 0x51f, 0 } },
+ { 0x520, 1, { 0x521, 0 } },
+ { 0x522, 1, { 0x523, 0 } },
+ { 0x524, 1, { 0x525, 0 } },
+ { 0x526, 1, { 0x527, 0 } },
+ { 0x528, 1, { 0x529, 0 } },
+ { 0x52a, 1, { 0x52b, 0 } },
+ { 0x52c, 1, { 0x52d, 0 } },
+ { 0x52e, 1, { 0x52f, 0 } },
+ { 0x531, 1, { 0x561, 0 } },
+ { 0x532, 1, { 0x562, 0 } },
+ { 0x533, 1, { 0x563, 0 } },
+ { 0x534, 1, { 0x564, 0 } },
+ { 0x535, 1, { 0x565, 0 } },
+ { 0x536, 1, { 0x566, 0 } },
+ { 0x537, 1, { 0x567, 0 } },
+ { 0x538, 1, { 0x568, 0 } },
+ { 0x539, 1, { 0x569, 0 } },
+ { 0x53a, 1, { 0x56a, 0 } },
+ { 0x53b, 1, { 0x56b, 0 } },
+ { 0x53c, 1, { 0x56c, 0 } },
+ { 0x53d, 1, { 0x56d, 0 } },
+ { 0x53e, 1, { 0x56e, 0 } },
+ { 0x53f, 1, { 0x56f, 0 } },
+ { 0x540, 1, { 0x570, 0 } },
+ { 0x541, 1, { 0x571, 0 } },
+ { 0x542, 1, { 0x572, 0 } },
+ { 0x543, 1, { 0x573, 0 } },
+ { 0x544, 1, { 0x574, 0 } },
+ { 0x545, 1, { 0x575, 0 } },
+ { 0x546, 1, { 0x576, 0 } },
+ { 0x547, 1, { 0x577, 0 } },
+ { 0x548, 1, { 0x578, 0 } },
+ { 0x549, 1, { 0x579, 0 } },
+ { 0x54a, 1, { 0x57a, 0 } },
+ { 0x54b, 1, { 0x57b, 0 } },
+ { 0x54c, 1, { 0x57c, 0 } },
+ { 0x54d, 1, { 0x57d, 0 } },
+ { 0x54e, 1, { 0x57e, 0 } },
+ { 0x54f, 1, { 0x57f, 0 } },
+ { 0x550, 1, { 0x580, 0 } },
+ { 0x551, 1, { 0x581, 0 } },
+ { 0x552, 1, { 0x582, 0 } },
+ { 0x553, 1, { 0x583, 0 } },
+ { 0x554, 1, { 0x584, 0 } },
+ { 0x555, 1, { 0x585, 0 } },
+ { 0x556, 1, { 0x586, 0 } },
+ { 0x587, 2, { 0x565, 0x582 } },
+ { 0x675, 2, { 0x627, 0x674 } },
+ { 0x676, 2, { 0x648, 0x674 } },
+ { 0x677, 2, { 0x6c7, 0x674 } },
+ { 0x678, 2, { 0x64a, 0x674 } },
+ { 0x958, 2, { 0x915, 0x93c } },
+ { 0x959, 2, { 0x916, 0x93c } },
+ { 0x95a, 2, { 0x917, 0x93c } },
+ { 0x95b, 2, { 0x91c, 0x93c } },
+ { 0x95c, 2, { 0x921, 0x93c } },
+ { 0x95d, 2, { 0x922, 0x93c } },
+ { 0x95e, 2, { 0x92b, 0x93c } },
+ { 0x95f, 2, { 0x92f, 0x93c } },
+ { 0x9dc, 2, { 0x9a1, 0x9bc } },
+ { 0x9dd, 2, { 0x9a2, 0x9bc } },
+ { 0x9df, 2, { 0x9af, 0x9bc } },
+ { 0xa33, 2, { 0xa32, 0xa3c } },
+ { 0xa36, 2, { 0xa38, 0xa3c } },
+ { 0xa59, 2, { 0xa16, 0xa3c } },
+ { 0xa5a, 2, { 0xa17, 0xa3c } },
+ { 0xa5b, 2, { 0xa1c, 0xa3c } },
+ { 0xa5e, 2, { 0xa2b, 0xa3c } },
+ { 0xb5c, 2, { 0xb21, 0xb3c } },
+ { 0xb5d, 2, { 0xb22, 0xb3c } },
+ { 0xe33, 2, { 0xe4d, 0xe32 } },
+ { 0xeb3, 2, { 0xecd, 0xeb2 } },
+ { 0xedc, 2, { 0xeab, 0xe99 } },
+ { 0xedd, 2, { 0xeab, 0xea1 } },
+ { 0xf0c, 1, { 0xf0b, 0 } },
+ { 0xf43, 2, { 0xf42, 0xfb7 } },
+ { 0xf4d, 2, { 0xf4c, 0xfb7 } },
+ { 0xf52, 2, { 0xf51, 0xfb7 } },
+ { 0xf57, 2, { 0xf56, 0xfb7 } },
+ { 0xf5c, 2, { 0xf5b, 0xfb7 } },
+ { 0xf69, 2, { 0xf40, 0xfb5 } },
+ { 0xf73, 2, { 0xf71, 0xf72 } },
+ { 0xf75, 2, { 0xf71, 0xf74 } },
+ { 0xf76, 2, { 0xfb2, 0xf80 } },
+ { 0xf77, 3, { 604, 0 } },
+ { 0xf78, 2, { 0xfb3, 0xf80 } },
+ { 0xf79, 3, { 807, 0 } },
+ { 0xf81, 2, { 0xf71, 0xf80 } },
+ { 0xf93, 2, { 0xf92, 0xfb7 } },
+ { 0xf9d, 2, { 0xf9c, 0xfb7 } },
+ { 0xfa2, 2, { 0xfa1, 0xfb7 } },
+ { 0xfa7, 2, { 0xfa6, 0xfb7 } },
+ { 0xfac, 2, { 0xfab, 0xfb7 } },
+ { 0xfb9, 2, { 0xf90, 0xfb5 } },
+ { 0x10c7, 1, { 0x2d27, 0 } },
+ { 0x10cd, 1, { 0x2d2d, 0 } },
+ { 0x10fc, 1, { 0x10dc, 0 } },
+ { 0x13f8, 1, { 0x13f0, 0 } },
+ { 0x13f9, 1, { 0x13f1, 0 } },
+ { 0x13fa, 1, { 0x13f2, 0 } },
+ { 0x13fb, 1, { 0x13f3, 0 } },
+ { 0x13fc, 1, { 0x13f4, 0 } },
+ { 0x13fd, 1, { 0x13f5, 0 } },
+ { 0x1c80, 1, { 0x432, 0 } },
+ { 0x1c81, 1, { 0x434, 0 } },
+ { 0x1c82, 1, { 0x43e, 0 } },
+ { 0x1c83, 1, { 0x441, 0 } },
+ { 0x1c84, 1, { 0x442, 0 } },
+ { 0x1c85, 1, { 0x442, 0 } },
+ { 0x1c86, 1, { 0x44a, 0 } },
+ { 0x1c87, 1, { 0x463, 0 } },
+ { 0x1c88, 1, { 0xa64b, 0 } },
+ { 0x1c90, 1, { 0x10d0, 0 } },
+ { 0x1c91, 1, { 0x10d1, 0 } },
+ { 0x1c92, 1, { 0x10d2, 0 } },
+ { 0x1c93, 1, { 0x10d3, 0 } },
+ { 0x1c94, 1, { 0x10d4, 0 } },
+ { 0x1c95, 1, { 0x10d5, 0 } },
+ { 0x1c96, 1, { 0x10d6, 0 } },
+ { 0x1c97, 1, { 0x10d7, 0 } },
+ { 0x1c98, 1, { 0x10d8, 0 } },
+ { 0x1c99, 1, { 0x10d9, 0 } },
+ { 0x1c9a, 1, { 0x10da, 0 } },
+ { 0x1c9b, 1, { 0x10db, 0 } },
+ { 0x1c9c, 1, { 0x10dc, 0 } },
+ { 0x1c9d, 1, { 0x10dd, 0 } },
+ { 0x1c9e, 1, { 0x10de, 0 } },
+ { 0x1c9f, 1, { 0x10df, 0 } },
+ { 0x1ca0, 1, { 0x10e0, 0 } },
+ { 0x1ca1, 1, { 0x10e1, 0 } },
+ { 0x1ca2, 1, { 0x10e2, 0 } },
+ { 0x1ca3, 1, { 0x10e3, 0 } },
+ { 0x1ca4, 1, { 0x10e4, 0 } },
+ { 0x1ca5, 1, { 0x10e5, 0 } },
+ { 0x1ca6, 1, { 0x10e6, 0 } },
+ { 0x1ca7, 1, { 0x10e7, 0 } },
+ { 0x1ca8, 1, { 0x10e8, 0 } },
+ { 0x1ca9, 1, { 0x10e9, 0 } },
+ { 0x1caa, 1, { 0x10ea, 0 } },
+ { 0x1cab, 1, { 0x10eb, 0 } },
+ { 0x1cac, 1, { 0x10ec, 0 } },
+ { 0x1cad, 1, { 0x10ed, 0 } },
+ { 0x1cae, 1, { 0x10ee, 0 } },
+ { 0x1caf, 1, { 0x10ef, 0 } },
+ { 0x1cb0, 1, { 0x10f0, 0 } },
+ { 0x1cb1, 1, { 0x10f1, 0 } },
+ { 0x1cb2, 1, { 0x10f2, 0 } },
+ { 0x1cb3, 1, { 0x10f3, 0 } },
+ { 0x1cb4, 1, { 0x10f4, 0 } },
+ { 0x1cb5, 1, { 0x10f5, 0 } },
+ { 0x1cb6, 1, { 0x10f6, 0 } },
+ { 0x1cb7, 1, { 0x10f7, 0 } },
+ { 0x1cb8, 1, { 0x10f8, 0 } },
+ { 0x1cb9, 1, { 0x10f9, 0 } },
+ { 0x1cba, 1, { 0x10fa, 0 } },
+ { 0x1cbd, 1, { 0x10fd, 0 } },
+ { 0x1cbe, 1, { 0x10fe, 0 } },
+ { 0x1cbf, 1, { 0x10ff, 0 } },
+ { 0x1d2c, 1, { 0x61, 0 } },
+ { 0x1d2d, 1, { 0xe6, 0 } },
+ { 0x1d2e, 1, { 0x62, 0 } },
+ { 0x1d30, 1, { 0x64, 0 } },
+ { 0x1d31, 1, { 0x65, 0 } },
+ { 0x1d32, 1, { 0x1dd, 0 } },
+ { 0x1d33, 1, { 0x67, 0 } },
+ { 0x1d34, 1, { 0x68, 0 } },
+ { 0x1d35, 1, { 0x69, 0 } },
+ { 0x1d36, 1, { 0x6a, 0 } },
+ { 0x1d37, 1, { 0x6b, 0 } },
+ { 0x1d38, 1, { 0x6c, 0 } },
+ { 0x1d39, 1, { 0x6d, 0 } },
+ { 0x1d3a, 1, { 0x6e, 0 } },
+ { 0x1d3c, 1, { 0x6f, 0 } },
+ { 0x1d3d, 1, { 0x223, 0 } },
+ { 0x1d3e, 1, { 0x70, 0 } },
+ { 0x1d3f, 1, { 0x72, 0 } },
+ { 0x1d40, 1, { 0x74, 0 } },
+ { 0x1d41, 1, { 0x75, 0 } },
+ { 0x1d42, 1, { 0x77, 0 } },
+ { 0x1d43, 1, { 0x61, 0 } },
+ { 0x1d44, 1, { 0x250, 0 } },
+ { 0x1d45, 1, { 0x251, 0 } },
+ { 0x1d46, 1, { 0x1d02, 0 } },
+ { 0x1d47, 1, { 0x62, 0 } },
+ { 0x1d48, 1, { 0x64, 0 } },
+ { 0x1d49, 1, { 0x65, 0 } },
+ { 0x1d4a, 1, { 0x259, 0 } },
+ { 0x1d4b, 1, { 0x25b, 0 } },
+ { 0x1d4c, 1, { 0x25c, 0 } },
+ { 0x1d4d, 1, { 0x67, 0 } },
+ { 0x1d4f, 1, { 0x6b, 0 } },
+ { 0x1d50, 1, { 0x6d, 0 } },
+ { 0x1d51, 1, { 0x14b, 0 } },
+ { 0x1d52, 1, { 0x6f, 0 } },
+ { 0x1d53, 1, { 0x254, 0 } },
+ { 0x1d54, 1, { 0x1d16, 0 } },
+ { 0x1d55, 1, { 0x1d17, 0 } },
+ { 0x1d56, 1, { 0x70, 0 } },
+ { 0x1d57, 1, { 0x74, 0 } },
+ { 0x1d58, 1, { 0x75, 0 } },
+ { 0x1d59, 1, { 0x1d1d, 0 } },
+ { 0x1d5a, 1, { 0x26f, 0 } },
+ { 0x1d5b, 1, { 0x76, 0 } },
+ { 0x1d5c, 1, { 0x1d25, 0 } },
+ { 0x1d5d, 1, { 0x3b2, 0 } },
+ { 0x1d5e, 1, { 0x3b3, 0 } },
+ { 0x1d5f, 1, { 0x3b4, 0 } },
+ { 0x1d60, 1, { 0x3c6, 0 } },
+ { 0x1d61, 1, { 0x3c7, 0 } },
+ { 0x1d62, 1, { 0x69, 0 } },
+ { 0x1d63, 1, { 0x72, 0 } },
+ { 0x1d64, 1, { 0x75, 0 } },
+ { 0x1d65, 1, { 0x76, 0 } },
+ { 0x1d66, 1, { 0x3b2, 0 } },
+ { 0x1d67, 1, { 0x3b3, 0 } },
+ { 0x1d68, 1, { 0x3c1, 0 } },
+ { 0x1d69, 1, { 0x3c6, 0 } },
+ { 0x1d6a, 1, { 0x3c7, 0 } },
+ { 0x1d78, 1, { 0x43d, 0 } },
+ { 0x1d9b, 1, { 0x252, 0 } },
+ { 0x1d9c, 1, { 0x63, 0 } },
+ { 0x1d9d, 1, { 0x255, 0 } },
+ { 0x1d9e, 1, { 0xf0, 0 } },
+ { 0x1d9f, 1, { 0x25c, 0 } },
+ { 0x1da0, 1, { 0x66, 0 } },
+ { 0x1da1, 1, { 0x25f, 0 } },
+ { 0x1da2, 1, { 0x261, 0 } },
+ { 0x1da3, 1, { 0x265, 0 } },
+ { 0x1da4, 1, { 0x268, 0 } },
+ { 0x1da5, 1, { 0x269, 0 } },
+ { 0x1da6, 1, { 0x26a, 0 } },
+ { 0x1da7, 1, { 0x1d7b, 0 } },
+ { 0x1da8, 1, { 0x29d, 0 } },
+ { 0x1da9, 1, { 0x26d, 0 } },
+ { 0x1daa, 1, { 0x1d85, 0 } },
+ { 0x1dab, 1, { 0x29f, 0 } },
+ { 0x1dac, 1, { 0x271, 0 } },
+ { 0x1dad, 1, { 0x270, 0 } },
+ { 0x1dae, 1, { 0x272, 0 } },
+ { 0x1daf, 1, { 0x273, 0 } },
+ { 0x1db0, 1, { 0x274, 0 } },
+ { 0x1db1, 1, { 0x275, 0 } },
+ { 0x1db2, 1, { 0x278, 0 } },
+ { 0x1db3, 1, { 0x282, 0 } },
+ { 0x1db4, 1, { 0x283, 0 } },
+ { 0x1db5, 1, { 0x1ab, 0 } },
+ { 0x1db6, 1, { 0x289, 0 } },
+ { 0x1db7, 1, { 0x28a, 0 } },
+ { 0x1db8, 1, { 0x1d1c, 0 } },
+ { 0x1db9, 1, { 0x28b, 0 } },
+ { 0x1dba, 1, { 0x28c, 0 } },
+ { 0x1dbb, 1, { 0x7a, 0 } },
+ { 0x1dbc, 1, { 0x290, 0 } },
+ { 0x1dbd, 1, { 0x291, 0 } },
+ { 0x1dbe, 1, { 0x292, 0 } },
+ { 0x1dbf, 1, { 0x3b8, 0 } },
+ { 0x1e00, 1, { 0x1e01, 0 } },
+ { 0x1e02, 1, { 0x1e03, 0 } },
+ { 0x1e04, 1, { 0x1e05, 0 } },
+ { 0x1e06, 1, { 0x1e07, 0 } },
+ { 0x1e08, 1, { 0x1e09, 0 } },
+ { 0x1e0a, 1, { 0x1e0b, 0 } },
+ { 0x1e0c, 1, { 0x1e0d, 0 } },
+ { 0x1e0e, 1, { 0x1e0f, 0 } },
+ { 0x1e10, 1, { 0x1e11, 0 } },
+ { 0x1e12, 1, { 0x1e13, 0 } },
+ { 0x1e14, 1, { 0x1e15, 0 } },
+ { 0x1e16, 1, { 0x1e17, 0 } },
+ { 0x1e18, 1, { 0x1e19, 0 } },
+ { 0x1e1a, 1, { 0x1e1b, 0 } },
+ { 0x1e1c, 1, { 0x1e1d, 0 } },
+ { 0x1e1e, 1, { 0x1e1f, 0 } },
+ { 0x1e20, 1, { 0x1e21, 0 } },
+ { 0x1e22, 1, { 0x1e23, 0 } },
+ { 0x1e24, 1, { 0x1e25, 0 } },
+ { 0x1e26, 1, { 0x1e27, 0 } },
+ { 0x1e28, 1, { 0x1e29, 0 } },
+ { 0x1e2a, 1, { 0x1e2b, 0 } },
+ { 0x1e2c, 1, { 0x1e2d, 0 } },
+ { 0x1e2e, 1, { 0x1e2f, 0 } },
+ { 0x1e30, 1, { 0x1e31, 0 } },
+ { 0x1e32, 1, { 0x1e33, 0 } },
+ { 0x1e34, 1, { 0x1e35, 0 } },
+ { 0x1e36, 1, { 0x1e37, 0 } },
+ { 0x1e38, 1, { 0x1e39, 0 } },
+ { 0x1e3a, 1, { 0x1e3b, 0 } },
+ { 0x1e3c, 1, { 0x1e3d, 0 } },
+ { 0x1e3e, 1, { 0x1e3f, 0 } },
+ { 0x1e40, 1, { 0x1e41, 0 } },
+ { 0x1e42, 1, { 0x1e43, 0 } },
+ { 0x1e44, 1, { 0x1e45, 0 } },
+ { 0x1e46, 1, { 0x1e47, 0 } },
+ { 0x1e48, 1, { 0x1e49, 0 } },
+ { 0x1e4a, 1, { 0x1e4b, 0 } },
+ { 0x1e4c, 1, { 0x1e4d, 0 } },
+ { 0x1e4e, 1, { 0x1e4f, 0 } },
+ { 0x1e50, 1, { 0x1e51, 0 } },
+ { 0x1e52, 1, { 0x1e53, 0 } },
+ { 0x1e54, 1, { 0x1e55, 0 } },
+ { 0x1e56, 1, { 0x1e57, 0 } },
+ { 0x1e58, 1, { 0x1e59, 0 } },
+ { 0x1e5a, 1, { 0x1e5b, 0 } },
+ { 0x1e5c, 1, { 0x1e5d, 0 } },
+ { 0x1e5e, 1, { 0x1e5f, 0 } },
+ { 0x1e60, 1, { 0x1e61, 0 } },
+ { 0x1e62, 1, { 0x1e63, 0 } },
+ { 0x1e64, 1, { 0x1e65, 0 } },
+ { 0x1e66, 1, { 0x1e67, 0 } },
+ { 0x1e68, 1, { 0x1e69, 0 } },
+ { 0x1e6a, 1, { 0x1e6b, 0 } },
+ { 0x1e6c, 1, { 0x1e6d, 0 } },
+ { 0x1e6e, 1, { 0x1e6f, 0 } },
+ { 0x1e70, 1, { 0x1e71, 0 } },
+ { 0x1e72, 1, { 0x1e73, 0 } },
+ { 0x1e74, 1, { 0x1e75, 0 } },
+ { 0x1e76, 1, { 0x1e77, 0 } },
+ { 0x1e78, 1, { 0x1e79, 0 } },
+ { 0x1e7a, 1, { 0x1e7b, 0 } },
+ { 0x1e7c, 1, { 0x1e7d, 0 } },
+ { 0x1e7e, 1, { 0x1e7f, 0 } },
+ { 0x1e80, 1, { 0x1e81, 0 } },
+ { 0x1e82, 1, { 0x1e83, 0 } },
+ { 0x1e84, 1, { 0x1e85, 0 } },
+ { 0x1e86, 1, { 0x1e87, 0 } },
+ { 0x1e88, 1, { 0x1e89, 0 } },
+ { 0x1e8a, 1, { 0x1e8b, 0 } },
+ { 0x1e8c, 1, { 0x1e8d, 0 } },
+ { 0x1e8e, 1, { 0x1e8f, 0 } },
+ { 0x1e90, 1, { 0x1e91, 0 } },
+ { 0x1e92, 1, { 0x1e93, 0 } },
+ { 0x1e94, 1, { 0x1e95, 0 } },
+ { 0x1e9a, 2, { 0x61, 0x2be } },
+ { 0x1e9b, 1, { 0x1e61, 0 } },
+ { 0x1e9e, 1, { 0xdf, 0 } },
+ { 0x1ea0, 1, { 0x1ea1, 0 } },
+ { 0x1ea2, 1, { 0x1ea3, 0 } },
+ { 0x1ea4, 1, { 0x1ea5, 0 } },
+ { 0x1ea6, 1, { 0x1ea7, 0 } },
+ { 0x1ea8, 1, { 0x1ea9, 0 } },
+ { 0x1eaa, 1, { 0x1eab, 0 } },
+ { 0x1eac, 1, { 0x1ead, 0 } },
+ { 0x1eae, 1, { 0x1eaf, 0 } },
+ { 0x1eb0, 1, { 0x1eb1, 0 } },
+ { 0x1eb2, 1, { 0x1eb3, 0 } },
+ { 0x1eb4, 1, { 0x1eb5, 0 } },
+ { 0x1eb6, 1, { 0x1eb7, 0 } },
+ { 0x1eb8, 1, { 0x1eb9, 0 } },
+ { 0x1eba, 1, { 0x1ebb, 0 } },
+ { 0x1ebc, 1, { 0x1ebd, 0 } },
+ { 0x1ebe, 1, { 0x1ebf, 0 } },
+ { 0x1ec0, 1, { 0x1ec1, 0 } },
+ { 0x1ec2, 1, { 0x1ec3, 0 } },
+ { 0x1ec4, 1, { 0x1ec5, 0 } },
+ { 0x1ec6, 1, { 0x1ec7, 0 } },
+ { 0x1ec8, 1, { 0x1ec9, 0 } },
+ { 0x1eca, 1, { 0x1ecb, 0 } },
+ { 0x1ecc, 1, { 0x1ecd, 0 } },
+ { 0x1ece, 1, { 0x1ecf, 0 } },
+ { 0x1ed0, 1, { 0x1ed1, 0 } },
+ { 0x1ed2, 1, { 0x1ed3, 0 } },
+ { 0x1ed4, 1, { 0x1ed5, 0 } },
+ { 0x1ed6, 1, { 0x1ed7, 0 } },
+ { 0x1ed8, 1, { 0x1ed9, 0 } },
+ { 0x1eda, 1, { 0x1edb, 0 } },
+ { 0x1edc, 1, { 0x1edd, 0 } },
+ { 0x1ede, 1, { 0x1edf, 0 } },
+ { 0x1ee0, 1, { 0x1ee1, 0 } },
+ { 0x1ee2, 1, { 0x1ee3, 0 } },
+ { 0x1ee4, 1, { 0x1ee5, 0 } },
+ { 0x1ee6, 1, { 0x1ee7, 0 } },
+ { 0x1ee8, 1, { 0x1ee9, 0 } },
+ { 0x1eea, 1, { 0x1eeb, 0 } },
+ { 0x1eec, 1, { 0x1eed, 0 } },
+ { 0x1eee, 1, { 0x1eef, 0 } },
+ { 0x1ef0, 1, { 0x1ef1, 0 } },
+ { 0x1ef2, 1, { 0x1ef3, 0 } },
+ { 0x1ef4, 1, { 0x1ef5, 0 } },
+ { 0x1ef6, 1, { 0x1ef7, 0 } },
+ { 0x1ef8, 1, { 0x1ef9, 0 } },
+ { 0x1efa, 1, { 0x1efb, 0 } },
+ { 0x1efc, 1, { 0x1efd, 0 } },
+ { 0x1efe, 1, { 0x1eff, 0 } },
+ { 0x1f08, 1, { 0x1f00, 0 } },
+ { 0x1f09, 1, { 0x1f01, 0 } },
+ { 0x1f0a, 1, { 0x1f02, 0 } },
+ { 0x1f0b, 1, { 0x1f03, 0 } },
+ { 0x1f0c, 1, { 0x1f04, 0 } },
+ { 0x1f0d, 1, { 0x1f05, 0 } },
+ { 0x1f0e, 1, { 0x1f06, 0 } },
+ { 0x1f0f, 1, { 0x1f07, 0 } },
+ { 0x1f18, 1, { 0x1f10, 0 } },
+ { 0x1f19, 1, { 0x1f11, 0 } },
+ { 0x1f1a, 1, { 0x1f12, 0 } },
+ { 0x1f1b, 1, { 0x1f13, 0 } },
+ { 0x1f1c, 1, { 0x1f14, 0 } },
+ { 0x1f1d, 1, { 0x1f15, 0 } },
+ { 0x1f28, 1, { 0x1f20, 0 } },
+ { 0x1f29, 1, { 0x1f21, 0 } },
+ { 0x1f2a, 1, { 0x1f22, 0 } },
+ { 0x1f2b, 1, { 0x1f23, 0 } },
+ { 0x1f2c, 1, { 0x1f24, 0 } },
+ { 0x1f2d, 1, { 0x1f25, 0 } },
+ { 0x1f2e, 1, { 0x1f26, 0 } },
+ { 0x1f2f, 1, { 0x1f27, 0 } },
+ { 0x1f38, 1, { 0x1f30, 0 } },
+ { 0x1f39, 1, { 0x1f31, 0 } },
+ { 0x1f3a, 1, { 0x1f32, 0 } },
+ { 0x1f3b, 1, { 0x1f33, 0 } },
+ { 0x1f3c, 1, { 0x1f34, 0 } },
+ { 0x1f3d, 1, { 0x1f35, 0 } },
+ { 0x1f3e, 1, { 0x1f36, 0 } },
+ { 0x1f3f, 1, { 0x1f37, 0 } },
+ { 0x1f48, 1, { 0x1f40, 0 } },
+ { 0x1f49, 1, { 0x1f41, 0 } },
+ { 0x1f4a, 1, { 0x1f42, 0 } },
+ { 0x1f4b, 1, { 0x1f43, 0 } },
+ { 0x1f4c, 1, { 0x1f44, 0 } },
+ { 0x1f4d, 1, { 0x1f45, 0 } },
+ { 0x1f59, 1, { 0x1f51, 0 } },
+ { 0x1f5b, 1, { 0x1f53, 0 } },
+ { 0x1f5d, 1, { 0x1f55, 0 } },
+ { 0x1f5f, 1, { 0x1f57, 0 } },
+ { 0x1f68, 1, { 0x1f60, 0 } },
+ { 0x1f69, 1, { 0x1f61, 0 } },
+ { 0x1f6a, 1, { 0x1f62, 0 } },
+ { 0x1f6b, 1, { 0x1f63, 0 } },
+ { 0x1f6c, 1, { 0x1f64, 0 } },
+ { 0x1f6d, 1, { 0x1f65, 0 } },
+ { 0x1f6e, 1, { 0x1f66, 0 } },
+ { 0x1f6f, 1, { 0x1f67, 0 } },
+ { 0x1f71, 1, { 0x3ac, 0 } },
+ { 0x1f73, 1, { 0x3ad, 0 } },
+ { 0x1f75, 1, { 0x3ae, 0 } },
+ { 0x1f77, 1, { 0x3af, 0 } },
+ { 0x1f79, 1, { 0x3cc, 0 } },
+ { 0x1f7b, 1, { 0x3cd, 0 } },
+ { 0x1f7d, 1, { 0x3ce, 0 } },
+ { 0x1f80, 2, { 0x1f00, 0x3b9 } },
+ { 0x1f81, 2, { 0x1f01, 0x3b9 } },
+ { 0x1f82, 2, { 0x1f02, 0x3b9 } },
+ { 0x1f83, 2, { 0x1f03, 0x3b9 } },
+ { 0x1f84, 2, { 0x1f04, 0x3b9 } },
+ { 0x1f85, 2, { 0x1f05, 0x3b9 } },
+ { 0x1f86, 2, { 0x1f06, 0x3b9 } },
+ { 0x1f87, 2, { 0x1f07, 0x3b9 } },
+ { 0x1f88, 2, { 0x1f00, 0x3b9 } },
+ { 0x1f89, 2, { 0x1f01, 0x3b9 } },
+ { 0x1f8a, 2, { 0x1f02, 0x3b9 } },
+ { 0x1f8b, 2, { 0x1f03, 0x3b9 } },
+ { 0x1f8c, 2, { 0x1f04, 0x3b9 } },
+ { 0x1f8d, 2, { 0x1f05, 0x3b9 } },
+ { 0x1f8e, 2, { 0x1f06, 0x3b9 } },
+ { 0x1f8f, 2, { 0x1f07, 0x3b9 } },
+ { 0x1f90, 2, { 0x1f20, 0x3b9 } },
+ { 0x1f91, 2, { 0x1f21, 0x3b9 } },
+ { 0x1f92, 2, { 0x1f22, 0x3b9 } },
+ { 0x1f93, 2, { 0x1f23, 0x3b9 } },
+ { 0x1f94, 2, { 0x1f24, 0x3b9 } },
+ { 0x1f95, 2, { 0x1f25, 0x3b9 } },
+ { 0x1f96, 2, { 0x1f26, 0x3b9 } },
+ { 0x1f97, 2, { 0x1f27, 0x3b9 } },
+ { 0x1f98, 2, { 0x1f20, 0x3b9 } },
+ { 0x1f99, 2, { 0x1f21, 0x3b9 } },
+ { 0x1f9a, 2, { 0x1f22, 0x3b9 } },
+ { 0x1f9b, 2, { 0x1f23, 0x3b9 } },
+ { 0x1f9c, 2, { 0x1f24, 0x3b9 } },
+ { 0x1f9d, 2, { 0x1f25, 0x3b9 } },
+ { 0x1f9e, 2, { 0x1f26, 0x3b9 } },
+ { 0x1f9f, 2, { 0x1f27, 0x3b9 } },
+ { 0x1fa0, 2, { 0x1f60, 0x3b9 } },
+ { 0x1fa1, 2, { 0x1f61, 0x3b9 } },
+ { 0x1fa2, 2, { 0x1f62, 0x3b9 } },
+ { 0x1fa3, 2, { 0x1f63, 0x3b9 } },
+ { 0x1fa4, 2, { 0x1f64, 0x3b9 } },
+ { 0x1fa5, 2, { 0x1f65, 0x3b9 } },
+ { 0x1fa6, 2, { 0x1f66, 0x3b9 } },
+ { 0x1fa7, 2, { 0x1f67, 0x3b9 } },
+ { 0x1fa8, 2, { 0x1f60, 0x3b9 } },
+ { 0x1fa9, 2, { 0x1f61, 0x3b9 } },
+ { 0x1faa, 2, { 0x1f62, 0x3b9 } },
+ { 0x1fab, 2, { 0x1f63, 0x3b9 } },
+ { 0x1fac, 2, { 0x1f64, 0x3b9 } },
+ { 0x1fad, 2, { 0x1f65, 0x3b9 } },
+ { 0x1fae, 2, { 0x1f66, 0x3b9 } },
+ { 0x1faf, 2, { 0x1f67, 0x3b9 } },
+ { 0x1fb2, 2, { 0x1f70, 0x3b9 } },
+ { 0x1fb3, 2, { 0x3b1, 0x3b9 } },
+ { 0x1fb4, 2, { 0x3ac, 0x3b9 } },
+ { 0x1fb7, 2, { 0x1fb6, 0x3b9 } },
+ { 0x1fb8, 1, { 0x1fb0, 0 } },
+ { 0x1fb9, 1, { 0x1fb1, 0 } },
+ { 0x1fba, 1, { 0x1f70, 0 } },
+ { 0x1fbb, 1, { 0x3ac, 0 } },
+ { 0x1fbc, 2, { 0x3b1, 0x3b9 } },
+ { 0x1fbe, 1, { 0x3b9, 0 } },
+ { 0x1fc2, 2, { 0x1f74, 0x3b9 } },
+ { 0x1fc3, 2, { 0x3b7, 0x3b9 } },
+ { 0x1fc4, 2, { 0x3ae, 0x3b9 } },
+ { 0x1fc7, 2, { 0x1fc6, 0x3b9 } },
+ { 0x1fc8, 1, { 0x1f72, 0 } },
+ { 0x1fc9, 1, { 0x3ad, 0 } },
+ { 0x1fca, 1, { 0x1f74, 0 } },
+ { 0x1fcb, 1, { 0x3ae, 0 } },
+ { 0x1fcc, 2, { 0x3b7, 0x3b9 } },
+ { 0x1fd3, 1, { 0x390, 0 } },
+ { 0x1fd8, 1, { 0x1fd0, 0 } },
+ { 0x1fd9, 1, { 0x1fd1, 0 } },
+ { 0x1fda, 1, { 0x1f76, 0 } },
+ { 0x1fdb, 1, { 0x3af, 0 } },
+ { 0x1fe3, 1, { 0x3b0, 0 } },
+ { 0x1fe8, 1, { 0x1fe0, 0 } },
+ { 0x1fe9, 1, { 0x1fe1, 0 } },
+ { 0x1fea, 1, { 0x1f7a, 0 } },
+ { 0x1feb, 1, { 0x3cd, 0 } },
+ { 0x1fec, 1, { 0x1fe5, 0 } },
+ { 0x1ff2, 2, { 0x1f7c, 0x3b9 } },
+ { 0x1ff3, 2, { 0x3c9, 0x3b9 } },
+ { 0x1ff4, 2, { 0x3ce, 0x3b9 } },
+ { 0x1ff7, 2, { 0x1ff6, 0x3b9 } },
+ { 0x1ff8, 1, { 0x1f78, 0 } },
+ { 0x1ff9, 1, { 0x3cc, 0 } },
+ { 0x1ffa, 1, { 0x1f7c, 0 } },
+ { 0x1ffb, 1, { 0x3ce, 0 } },
+ { 0x1ffc, 2, { 0x3c9, 0x3b9 } },
+ { 0x2011, 1, { 0x2010, 0 } },
+ { 0x2033, 2, { 0x2032, 0x2032 } },
+ { 0x2034, 3, { 840, 0 } },
+ { 0x2036, 2, { 0x2035, 0x2035 } },
+ { 0x2037, 3, { 761, 0 } },
+ { 0x2057, 4, { 840, 0 } },
+ { 0x2070, 1, { 0x30, 0 } },
+ { 0x2071, 1, { 0x69, 0 } },
+ { 0x2074, 1, { 0x34, 0 } },
+ { 0x2075, 1, { 0x35, 0 } },
+ { 0x2076, 1, { 0x36, 0 } },
+ { 0x2077, 1, { 0x37, 0 } },
+ { 0x2078, 1, { 0x38, 0 } },
+ { 0x2079, 1, { 0x39, 0 } },
+ { 0x207b, 1, { 0x2212, 0 } },
+ { 0x207f, 1, { 0x6e, 0 } },
+ { 0x2080, 1, { 0x30, 0 } },
+ { 0x2081, 1, { 0x31, 0 } },
+ { 0x2082, 1, { 0x32, 0 } },
+ { 0x2083, 1, { 0x33, 0 } },
+ { 0x2084, 1, { 0x34, 0 } },
+ { 0x2085, 1, { 0x35, 0 } },
+ { 0x2086, 1, { 0x36, 0 } },
+ { 0x2087, 1, { 0x37, 0 } },
+ { 0x2088, 1, { 0x38, 0 } },
+ { 0x2089, 1, { 0x39, 0 } },
+ { 0x208b, 1, { 0x2212, 0 } },
+ { 0x2090, 1, { 0x61, 0 } },
+ { 0x2091, 1, { 0x65, 0 } },
+ { 0x2092, 1, { 0x6f, 0 } },
+ { 0x2093, 1, { 0x78, 0 } },
+ { 0x2094, 1, { 0x259, 0 } },
+ { 0x2095, 1, { 0x68, 0 } },
+ { 0x2096, 1, { 0x6b, 0 } },
+ { 0x2097, 1, { 0x6c, 0 } },
+ { 0x2098, 1, { 0x6d, 0 } },
+ { 0x2099, 1, { 0x6e, 0 } },
+ { 0x209a, 1, { 0x70, 0 } },
+ { 0x209b, 1, { 0x73, 0 } },
+ { 0x209c, 1, { 0x74, 0 } },
+ { 0x20a8, 2, { 0x72, 0x73 } },
+ { 0x2102, 1, { 0x63, 0 } },
+ { 0x2103, 2, { 0xb0, 0x63 } },
+ { 0x2107, 1, { 0x25b, 0 } },
+ { 0x2109, 2, { 0xb0, 0x66 } },
+ { 0x210a, 1, { 0x67, 0 } },
+ { 0x210b, 1, { 0x68, 0 } },
+ { 0x210c, 1, { 0x68, 0 } },
+ { 0x210d, 1, { 0x68, 0 } },
+ { 0x210e, 1, { 0x68, 0 } },
+ { 0x210f, 1, { 0x127, 0 } },
+ { 0x2110, 1, { 0x69, 0 } },
+ { 0x2111, 1, { 0x69, 0 } },
+ { 0x2112, 1, { 0x6c, 0 } },
+ { 0x2113, 1, { 0x6c, 0 } },
+ { 0x2115, 1, { 0x6e, 0 } },
+ { 0x2116, 2, { 0x6e, 0x6f } },
+ { 0x2119, 1, { 0x70, 0 } },
+ { 0x211a, 1, { 0x71, 0 } },
+ { 0x211b, 1, { 0x72, 0 } },
+ { 0x211c, 1, { 0x72, 0 } },
+ { 0x211d, 1, { 0x72, 0 } },
+ { 0x2120, 2, { 0x73, 0x6d } },
+ { 0x2121, 3, { 96, 0 } },
+ { 0x2122, 2, { 0x74, 0x6d } },
+ { 0x2124, 1, { 0x7a, 0 } },
+ { 0x2126, 1, { 0x3c9, 0 } },
+ { 0x2128, 1, { 0x7a, 0 } },
+ { 0x212a, 1, { 0x6b, 0 } },
+ { 0x212b, 1, { 0xe5, 0 } },
+ { 0x212c, 1, { 0x62, 0 } },
+ { 0x212d, 1, { 0x63, 0 } },
+ { 0x212f, 1, { 0x65, 0 } },
+ { 0x2130, 1, { 0x65, 0 } },
+ { 0x2131, 1, { 0x66, 0 } },
+ { 0x2133, 1, { 0x6d, 0 } },
+ { 0x2134, 1, { 0x6f, 0 } },
+ { 0x2135, 1, { 0x5d0, 0 } },
+ { 0x2136, 1, { 0x5d1, 0 } },
+ { 0x2137, 1, { 0x5d2, 0 } },
+ { 0x2138, 1, { 0x5d3, 0 } },
+ { 0x2139, 1, { 0x69, 0 } },
+ { 0x213b, 3, { 499, 0 } },
+ { 0x213c, 1, { 0x3c0, 0 } },
+ { 0x213d, 1, { 0x3b3, 0 } },
+ { 0x213e, 1, { 0x3b3, 0 } },
+ { 0x213f, 1, { 0x3c0, 0 } },
+ { 0x2140, 1, { 0x2211, 0 } },
+ { 0x2145, 1, { 0x64, 0 } },
+ { 0x2146, 1, { 0x64, 0 } },
+ { 0x2147, 1, { 0x65, 0 } },
+ { 0x2148, 1, { 0x69, 0 } },
+ { 0x2149, 1, { 0x6a, 0 } },
+ { 0x2150, 3, { 688, 0 } },
+ { 0x2151, 3, { 682, 0 } },
+ { 0x2152, 4, { 890, 0 } },
+ { 0x2153, 3, { 69, 0 } },
+ { 0x2154, 3, { 494, 0 } },
+ { 0x2155, 3, { 63, 0 } },
+ { 0x2156, 3, { 84, 0 } },
+ { 0x2157, 3, { 708, 0 } },
+ { 0x2158, 3, { 472, 0 } },
+ { 0x2159, 3, { 60, 0 } },
+ { 0x215a, 3, { 710, 0 } },
+ { 0x215b, 3, { 685, 0 } },
+ { 0x215c, 3, { 718, 0 } },
+ { 0x215d, 3, { 474, 0 } },
+ { 0x215e, 3, { 690, 0 } },
+ { 0x215f, 2, { 0x31, 0x2044 } },
+ { 0x2160, 1, { 0x69, 0 } },
+ { 0x2161, 2, { 0x69, 0x69 } },
+ { 0x2162, 3, { 730, 0 } },
+ { 0x2163, 2, { 0x69, 0x76 } },
+ { 0x2164, 1, { 0x76, 0 } },
+ { 0x2165, 2, { 0x76, 0x69 } },
+ { 0x2166, 3, { 729, 0 } },
+ { 0x2167, 4, { 729, 0 } },
+ { 0x2168, 2, { 0x69, 0x78 } },
+ { 0x2169, 1, { 0x78, 0 } },
+ { 0x216a, 2, { 0x78, 0x69 } },
+ { 0x216b, 3, { 501, 0 } },
+ { 0x216c, 1, { 0x6c, 0 } },
+ { 0x216d, 1, { 0x63, 0 } },
+ { 0x216e, 1, { 0x64, 0 } },
+ { 0x216f, 1, { 0x6d, 0 } },
+ { 0x2170, 1, { 0x69, 0 } },
+ { 0x2171, 2, { 0x69, 0x69 } },
+ { 0x2172, 3, { 730, 0 } },
+ { 0x2173, 2, { 0x69, 0x76 } },
+ { 0x2174, 1, { 0x76, 0 } },
+ { 0x2175, 2, { 0x76, 0x69 } },
+ { 0x2176, 3, { 729, 0 } },
+ { 0x2177, 4, { 729, 0 } },
+ { 0x2178, 2, { 0x69, 0x78 } },
+ { 0x2179, 1, { 0x78, 0 } },
+ { 0x217a, 2, { 0x78, 0x69 } },
+ { 0x217b, 3, { 501, 0 } },
+ { 0x217c, 1, { 0x6c, 0 } },
+ { 0x217d, 1, { 0x63, 0 } },
+ { 0x217e, 1, { 0x64, 0 } },
+ { 0x217f, 1, { 0x6d, 0 } },
+ { 0x2189, 3, { 901, 0 } },
+ { 0x222c, 2, { 0x222b, 0x222b } },
+ { 0x222d, 3, { 795, 0 } },
+ { 0x222f, 2, { 0x222e, 0x222e } },
+ { 0x2230, 3, { 134, 0 } },
+ { 0x2329, 1, { 0x3008, 0 } },
+ { 0x232a, 1, { 0x3009, 0 } },
+ { 0x2460, 1, { 0x31, 0 } },
+ { 0x2461, 1, { 0x32, 0 } },
+ { 0x2462, 1, { 0x33, 0 } },
+ { 0x2463, 1, { 0x34, 0 } },
+ { 0x2464, 1, { 0x35, 0 } },
+ { 0x2465, 1, { 0x36, 0 } },
+ { 0x2466, 1, { 0x37, 0 } },
+ { 0x2467, 1, { 0x38, 0 } },
+ { 0x2468, 1, { 0x39, 0 } },
+ { 0x2469, 2, { 0x31, 0x30 } },
+ { 0x246a, 2, { 0x31, 0x31 } },
+ { 0x246b, 2, { 0x31, 0x32 } },
+ { 0x246c, 2, { 0x31, 0x33 } },
+ { 0x246d, 2, { 0x31, 0x34 } },
+ { 0x246e, 2, { 0x31, 0x35 } },
+ { 0x246f, 2, { 0x31, 0x36 } },
+ { 0x2470, 2, { 0x31, 0x37 } },
+ { 0x2471, 2, { 0x31, 0x38 } },
+ { 0x2472, 2, { 0x31, 0x39 } },
+ { 0x2473, 2, { 0x32, 0x30 } },
+ { 0x24b6, 1, { 0x61, 0 } },
+ { 0x24b7, 1, { 0x62, 0 } },
+ { 0x24b8, 1, { 0x63, 0 } },
+ { 0x24b9, 1, { 0x64, 0 } },
+ { 0x24ba, 1, { 0x65, 0 } },
+ { 0x24bb, 1, { 0x66, 0 } },
+ { 0x24bc, 1, { 0x67, 0 } },
+ { 0x24bd, 1, { 0x68, 0 } },
+ { 0x24be, 1, { 0x69, 0 } },
+ { 0x24bf, 1, { 0x6a, 0 } },
+ { 0x24c0, 1, { 0x6b, 0 } },
+ { 0x24c1, 1, { 0x6c, 0 } },
+ { 0x24c2, 1, { 0x6d, 0 } },
+ { 0x24c3, 1, { 0x6e, 0 } },
+ { 0x24c4, 1, { 0x6f, 0 } },
+ { 0x24c5, 1, { 0x70, 0 } },
+ { 0x24c6, 1, { 0x71, 0 } },
+ { 0x24c7, 1, { 0x72, 0 } },
+ { 0x24c8, 1, { 0x73, 0 } },
+ { 0x24c9, 1, { 0x74, 0 } },
+ { 0x24ca, 1, { 0x75, 0 } },
+ { 0x24cb, 1, { 0x76, 0 } },
+ { 0x24cc, 1, { 0x77, 0 } },
+ { 0x24cd, 1, { 0x78, 0 } },
+ { 0x24ce, 1, { 0x79, 0 } },
+ { 0x24cf, 1, { 0x7a, 0 } },
+ { 0x24d0, 1, { 0x61, 0 } },
+ { 0x24d1, 1, { 0x62, 0 } },
+ { 0x24d2, 1, { 0x63, 0 } },
+ { 0x24d3, 1, { 0x64, 0 } },
+ { 0x24d4, 1, { 0x65, 0 } },
+ { 0x24d5, 1, { 0x66, 0 } },
+ { 0x24d6, 1, { 0x67, 0 } },
+ { 0x24d7, 1, { 0x68, 0 } },
+ { 0x24d8, 1, { 0x69, 0 } },
+ { 0x24d9, 1, { 0x6a, 0 } },
+ { 0x24da, 1, { 0x6b, 0 } },
+ { 0x24db, 1, { 0x6c, 0 } },
+ { 0x24dc, 1, { 0x6d, 0 } },
+ { 0x24dd, 1, { 0x6e, 0 } },
+ { 0x24de, 1, { 0x6f, 0 } },
+ { 0x24df, 1, { 0x70, 0 } },
+ { 0x24e0, 1, { 0x71, 0 } },
+ { 0x24e1, 1, { 0x72, 0 } },
+ { 0x24e2, 1, { 0x73, 0 } },
+ { 0x24e3, 1, { 0x74, 0 } },
+ { 0x24e4, 1, { 0x75, 0 } },
+ { 0x24e5, 1, { 0x76, 0 } },
+ { 0x24e6, 1, { 0x77, 0 } },
+ { 0x24e7, 1, { 0x78, 0 } },
+ { 0x24e8, 1, { 0x79, 0 } },
+ { 0x24e9, 1, { 0x7a, 0 } },
+ { 0x24ea, 1, { 0x30, 0 } },
+ { 0x2a0c, 4, { 795, 0 } },
+ { 0x2adc, 2, { 0x2add, 0x338 } },
+ { 0x2c00, 1, { 0x2c30, 0 } },
+ { 0x2c01, 1, { 0x2c31, 0 } },
+ { 0x2c02, 1, { 0x2c32, 0 } },
+ { 0x2c03, 1, { 0x2c33, 0 } },
+ { 0x2c04, 1, { 0x2c34, 0 } },
+ { 0x2c05, 1, { 0x2c35, 0 } },
+ { 0x2c06, 1, { 0x2c36, 0 } },
+ { 0x2c07, 1, { 0x2c37, 0 } },
+ { 0x2c08, 1, { 0x2c38, 0 } },
+ { 0x2c09, 1, { 0x2c39, 0 } },
+ { 0x2c0a, 1, { 0x2c3a, 0 } },
+ { 0x2c0b, 1, { 0x2c3b, 0 } },
+ { 0x2c0c, 1, { 0x2c3c, 0 } },
+ { 0x2c0d, 1, { 0x2c3d, 0 } },
+ { 0x2c0e, 1, { 0x2c3e, 0 } },
+ { 0x2c0f, 1, { 0x2c3f, 0 } },
+ { 0x2c10, 1, { 0x2c40, 0 } },
+ { 0x2c11, 1, { 0x2c41, 0 } },
+ { 0x2c12, 1, { 0x2c42, 0 } },
+ { 0x2c13, 1, { 0x2c43, 0 } },
+ { 0x2c14, 1, { 0x2c44, 0 } },
+ { 0x2c15, 1, { 0x2c45, 0 } },
+ { 0x2c16, 1, { 0x2c46, 0 } },
+ { 0x2c17, 1, { 0x2c47, 0 } },
+ { 0x2c18, 1, { 0x2c48, 0 } },
+ { 0x2c19, 1, { 0x2c49, 0 } },
+ { 0x2c1a, 1, { 0x2c4a, 0 } },
+ { 0x2c1b, 1, { 0x2c4b, 0 } },
+ { 0x2c1c, 1, { 0x2c4c, 0 } },
+ { 0x2c1d, 1, { 0x2c4d, 0 } },
+ { 0x2c1e, 1, { 0x2c4e, 0 } },
+ { 0x2c1f, 1, { 0x2c4f, 0 } },
+ { 0x2c20, 1, { 0x2c50, 0 } },
+ { 0x2c21, 1, { 0x2c51, 0 } },
+ { 0x2c22, 1, { 0x2c52, 0 } },
+ { 0x2c23, 1, { 0x2c53, 0 } },
+ { 0x2c24, 1, { 0x2c54, 0 } },
+ { 0x2c25, 1, { 0x2c55, 0 } },
+ { 0x2c26, 1, { 0x2c56, 0 } },
+ { 0x2c27, 1, { 0x2c57, 0 } },
+ { 0x2c28, 1, { 0x2c58, 0 } },
+ { 0x2c29, 1, { 0x2c59, 0 } },
+ { 0x2c2a, 1, { 0x2c5a, 0 } },
+ { 0x2c2b, 1, { 0x2c5b, 0 } },
+ { 0x2c2c, 1, { 0x2c5c, 0 } },
+ { 0x2c2d, 1, { 0x2c5d, 0 } },
+ { 0x2c2e, 1, { 0x2c5e, 0 } },
+ { 0x2c2f, 1, { 0x2c5f, 0 } },
+ { 0x2c60, 1, { 0x2c61, 0 } },
+ { 0x2c62, 1, { 0x26b, 0 } },
+ { 0x2c63, 1, { 0x1d7d, 0 } },
+ { 0x2c64, 1, { 0x27d, 0 } },
+ { 0x2c67, 1, { 0x2c68, 0 } },
+ { 0x2c69, 1, { 0x2c6a, 0 } },
+ { 0x2c6b, 1, { 0x2c6c, 0 } },
+ { 0x2c6d, 1, { 0x251, 0 } },
+ { 0x2c6e, 1, { 0x271, 0 } },
+ { 0x2c6f, 1, { 0x250, 0 } },
+ { 0x2c70, 1, { 0x252, 0 } },
+ { 0x2c72, 1, { 0x2c73, 0 } },
+ { 0x2c75, 1, { 0x2c76, 0 } },
+ { 0x2c7c, 1, { 0x6a, 0 } },
+ { 0x2c7d, 1, { 0x76, 0 } },
+ { 0x2c7e, 1, { 0x23f, 0 } },
+ { 0x2c7f, 1, { 0x240, 0 } },
+ { 0x2c80, 1, { 0x2c81, 0 } },
+ { 0x2c82, 1, { 0x2c83, 0 } },
+ { 0x2c84, 1, { 0x2c85, 0 } },
+ { 0x2c86, 1, { 0x2c87, 0 } },
+ { 0x2c88, 1, { 0x2c89, 0 } },
+ { 0x2c8a, 1, { 0x2c8b, 0 } },
+ { 0x2c8c, 1, { 0x2c8d, 0 } },
+ { 0x2c8e, 1, { 0x2c8f, 0 } },
+ { 0x2c90, 1, { 0x2c91, 0 } },
+ { 0x2c92, 1, { 0x2c93, 0 } },
+ { 0x2c94, 1, { 0x2c95, 0 } },
+ { 0x2c96, 1, { 0x2c97, 0 } },
+ { 0x2c98, 1, { 0x2c99, 0 } },
+ { 0x2c9a, 1, { 0x2c9b, 0 } },
+ { 0x2c9c, 1, { 0x2c9d, 0 } },
+ { 0x2c9e, 1, { 0x2c9f, 0 } },
+ { 0x2ca0, 1, { 0x2ca1, 0 } },
+ { 0x2ca2, 1, { 0x2ca3, 0 } },
+ { 0x2ca4, 1, { 0x2ca5, 0 } },
+ { 0x2ca6, 1, { 0x2ca7, 0 } },
+ { 0x2ca8, 1, { 0x2ca9, 0 } },
+ { 0x2caa, 1, { 0x2cab, 0 } },
+ { 0x2cac, 1, { 0x2cad, 0 } },
+ { 0x2cae, 1, { 0x2caf, 0 } },
+ { 0x2cb0, 1, { 0x2cb1, 0 } },
+ { 0x2cb2, 1, { 0x2cb3, 0 } },
+ { 0x2cb4, 1, { 0x2cb5, 0 } },
+ { 0x2cb6, 1, { 0x2cb7, 0 } },
+ { 0x2cb8, 1, { 0x2cb9, 0 } },
+ { 0x2cba, 1, { 0x2cbb, 0 } },
+ { 0x2cbc, 1, { 0x2cbd, 0 } },
+ { 0x2cbe, 1, { 0x2cbf, 0 } },
+ { 0x2cc0, 1, { 0x2cc1, 0 } },
+ { 0x2cc2, 1, { 0x2cc3, 0 } },
+ { 0x2cc4, 1, { 0x2cc5, 0 } },
+ { 0x2cc6, 1, { 0x2cc7, 0 } },
+ { 0x2cc8, 1, { 0x2cc9, 0 } },
+ { 0x2cca, 1, { 0x2ccb, 0 } },
+ { 0x2ccc, 1, { 0x2ccd, 0 } },
+ { 0x2cce, 1, { 0x2ccf, 0 } },
+ { 0x2cd0, 1, { 0x2cd1, 0 } },
+ { 0x2cd2, 1, { 0x2cd3, 0 } },
+ { 0x2cd4, 1, { 0x2cd5, 0 } },
+ { 0x2cd6, 1, { 0x2cd7, 0 } },
+ { 0x2cd8, 1, { 0x2cd9, 0 } },
+ { 0x2cda, 1, { 0x2cdb, 0 } },
+ { 0x2cdc, 1, { 0x2cdd, 0 } },
+ { 0x2cde, 1, { 0x2cdf, 0 } },
+ { 0x2ce0, 1, { 0x2ce1, 0 } },
+ { 0x2ce2, 1, { 0x2ce3, 0 } },
+ { 0x2ceb, 1, { 0x2cec, 0 } },
+ { 0x2ced, 1, { 0x2cee, 0 } },
+ { 0x2cf2, 1, { 0x2cf3, 0 } },
+ { 0x2d6f, 1, { 0x2d61, 0 } },
+ { 0x2e9f, 1, { 0x6bcd, 0 } },
+ { 0x2ef3, 1, { 0x9f9f, 0 } },
+ { 0x2f00, 1, { 0x4e00, 0 } },
+ { 0x2f01, 1, { 0x4e28, 0 } },
+ { 0x2f02, 1, { 0x4e36, 0 } },
+ { 0x2f03, 1, { 0x4e3f, 0 } },
+ { 0x2f04, 1, { 0x4e59, 0 } },
+ { 0x2f05, 1, { 0x4e85, 0 } },
+ { 0x2f06, 1, { 0x4e8c, 0 } },
+ { 0x2f07, 1, { 0x4ea0, 0 } },
+ { 0x2f08, 1, { 0x4eba, 0 } },
+ { 0x2f09, 1, { 0x513f, 0 } },
+ { 0x2f0a, 1, { 0x5165, 0 } },
+ { 0x2f0b, 1, { 0x516b, 0 } },
+ { 0x2f0c, 1, { 0x5182, 0 } },
+ { 0x2f0d, 1, { 0x5196, 0 } },
+ { 0x2f0e, 1, { 0x51ab, 0 } },
+ { 0x2f0f, 1, { 0x51e0, 0 } },
+ { 0x2f10, 1, { 0x51f5, 0 } },
+ { 0x2f11, 1, { 0x5200, 0 } },
+ { 0x2f12, 1, { 0x529b, 0 } },
+ { 0x2f13, 1, { 0x52f9, 0 } },
+ { 0x2f14, 1, { 0x5315, 0 } },
+ { 0x2f15, 1, { 0x531a, 0 } },
+ { 0x2f16, 1, { 0x5338, 0 } },
+ { 0x2f17, 1, { 0x5341, 0 } },
+ { 0x2f18, 1, { 0x535c, 0 } },
+ { 0x2f19, 1, { 0x5369, 0 } },
+ { 0x2f1a, 1, { 0x5382, 0 } },
+ { 0x2f1b, 1, { 0x53b6, 0 } },
+ { 0x2f1c, 1, { 0x53c8, 0 } },
+ { 0x2f1d, 1, { 0x53e3, 0 } },
+ { 0x2f1e, 1, { 0x56d7, 0 } },
+ { 0x2f1f, 1, { 0x571f, 0 } },
+ { 0x2f20, 1, { 0x58eb, 0 } },
+ { 0x2f21, 1, { 0x5902, 0 } },
+ { 0x2f22, 1, { 0x590a, 0 } },
+ { 0x2f23, 1, { 0x5915, 0 } },
+ { 0x2f24, 1, { 0x5927, 0 } },
+ { 0x2f25, 1, { 0x5973, 0 } },
+ { 0x2f26, 1, { 0x5b50, 0 } },
+ { 0x2f27, 1, { 0x5b80, 0 } },
+ { 0x2f28, 1, { 0x5bf8, 0 } },
+ { 0x2f29, 1, { 0x5c0f, 0 } },
+ { 0x2f2a, 1, { 0x5c22, 0 } },
+ { 0x2f2b, 1, { 0x5c38, 0 } },
+ { 0x2f2c, 1, { 0x5c6e, 0 } },
+ { 0x2f2d, 1, { 0x5c71, 0 } },
+ { 0x2f2e, 1, { 0x5ddb, 0 } },
+ { 0x2f2f, 1, { 0x5de5, 0 } },
+ { 0x2f30, 1, { 0x5df1, 0 } },
+ { 0x2f31, 1, { 0x5dfe, 0 } },
+ { 0x2f32, 1, { 0x5e72, 0 } },
+ { 0x2f33, 1, { 0x5e7a, 0 } },
+ { 0x2f34, 1, { 0x5e7f, 0 } },
+ { 0x2f35, 1, { 0x5ef4, 0 } },
+ { 0x2f36, 1, { 0x5efe, 0 } },
+ { 0x2f37, 1, { 0x5f0b, 0 } },
+ { 0x2f38, 1, { 0x5f13, 0 } },
+ { 0x2f39, 1, { 0x5f50, 0 } },
+ { 0x2f3a, 1, { 0x5f61, 0 } },
+ { 0x2f3b, 1, { 0x5f73, 0 } },
+ { 0x2f3c, 1, { 0x5fc3, 0 } },
+ { 0x2f3d, 1, { 0x6208, 0 } },
+ { 0x2f3e, 1, { 0x6236, 0 } },
+ { 0x2f3f, 1, { 0x624b, 0 } },
+ { 0x2f40, 1, { 0x652f, 0 } },
+ { 0x2f41, 1, { 0x6534, 0 } },
+ { 0x2f42, 1, { 0x6587, 0 } },
+ { 0x2f43, 1, { 0x6597, 0 } },
+ { 0x2f44, 1, { 0x65a4, 0 } },
+ { 0x2f45, 1, { 0x65b9, 0 } },
+ { 0x2f46, 1, { 0x65e0, 0 } },
+ { 0x2f47, 1, { 0x65e5, 0 } },
+ { 0x2f48, 1, { 0x66f0, 0 } },
+ { 0x2f49, 1, { 0x6708, 0 } },
+ { 0x2f4a, 1, { 0x6728, 0 } },
+ { 0x2f4b, 1, { 0x6b20, 0 } },
+ { 0x2f4c, 1, { 0x6b62, 0 } },
+ { 0x2f4d, 1, { 0x6b79, 0 } },
+ { 0x2f4e, 1, { 0x6bb3, 0 } },
+ { 0x2f4f, 1, { 0x6bcb, 0 } },
+ { 0x2f50, 1, { 0x6bd4, 0 } },
+ { 0x2f51, 1, { 0x6bdb, 0 } },
+ { 0x2f52, 1, { 0x6c0f, 0 } },
+ { 0x2f53, 1, { 0x6c14, 0 } },
+ { 0x2f54, 1, { 0x6c34, 0 } },
+ { 0x2f55, 1, { 0x706b, 0 } },
+ { 0x2f56, 1, { 0x722a, 0 } },
+ { 0x2f57, 1, { 0x7236, 0 } },
+ { 0x2f58, 1, { 0x723b, 0 } },
+ { 0x2f59, 1, { 0x723f, 0 } },
+ { 0x2f5a, 1, { 0x7247, 0 } },
+ { 0x2f5b, 1, { 0x7259, 0 } },
+ { 0x2f5c, 1, { 0x725b, 0 } },
+ { 0x2f5d, 1, { 0x72ac, 0 } },
+ { 0x2f5e, 1, { 0x7384, 0 } },
+ { 0x2f5f, 1, { 0x7389, 0 } },
+ { 0x2f60, 1, { 0x74dc, 0 } },
+ { 0x2f61, 1, { 0x74e6, 0 } },
+ { 0x2f62, 1, { 0x7518, 0 } },
+ { 0x2f63, 1, { 0x751f, 0 } },
+ { 0x2f64, 1, { 0x7528, 0 } },
+ { 0x2f65, 1, { 0x7530, 0 } },
+ { 0x2f66, 1, { 0x758b, 0 } },
+ { 0x2f67, 1, { 0x7592, 0 } },
+ { 0x2f68, 1, { 0x7676, 0 } },
+ { 0x2f69, 1, { 0x767d, 0 } },
+ { 0x2f6a, 1, { 0x76ae, 0 } },
+ { 0x2f6b, 1, { 0x76bf, 0 } },
+ { 0x2f6c, 1, { 0x76ee, 0 } },
+ { 0x2f6d, 1, { 0x77db, 0 } },
+ { 0x2f6e, 1, { 0x77e2, 0 } },
+ { 0x2f6f, 1, { 0x77f3, 0 } },
+ { 0x2f70, 1, { 0x793a, 0 } },
+ { 0x2f71, 1, { 0x79b8, 0 } },
+ { 0x2f72, 1, { 0x79be, 0 } },
+ { 0x2f73, 1, { 0x7a74, 0 } },
+ { 0x2f74, 1, { 0x7acb, 0 } },
+ { 0x2f75, 1, { 0x7af9, 0 } },
+ { 0x2f76, 1, { 0x7c73, 0 } },
+ { 0x2f77, 1, { 0x7cf8, 0 } },
+ { 0x2f78, 1, { 0x7f36, 0 } },
+ { 0x2f79, 1, { 0x7f51, 0 } },
+ { 0x2f7a, 1, { 0x7f8a, 0 } },
+ { 0x2f7b, 1, { 0x7fbd, 0 } },
+ { 0x2f7c, 1, { 0x8001, 0 } },
+ { 0x2f7d, 1, { 0x800c, 0 } },
+ { 0x2f7e, 1, { 0x8012, 0 } },
+ { 0x2f7f, 1, { 0x8033, 0 } },
+ { 0x2f80, 1, { 0x807f, 0 } },
+ { 0x2f81, 1, { 0x8089, 0 } },
+ { 0x2f82, 1, { 0x81e3, 0 } },
+ { 0x2f83, 1, { 0x81ea, 0 } },
+ { 0x2f84, 1, { 0x81f3, 0 } },
+ { 0x2f85, 1, { 0x81fc, 0 } },
+ { 0x2f86, 1, { 0x820c, 0 } },
+ { 0x2f87, 1, { 0x821b, 0 } },
+ { 0x2f88, 1, { 0x821f, 0 } },
+ { 0x2f89, 1, { 0x826e, 0 } },
+ { 0x2f8a, 1, { 0x8272, 0 } },
+ { 0x2f8b, 1, { 0x8278, 0 } },
+ { 0x2f8c, 1, { 0x864d, 0 } },
+ { 0x2f8d, 1, { 0x866b, 0 } },
+ { 0x2f8e, 1, { 0x8840, 0 } },
+ { 0x2f8f, 1, { 0x884c, 0 } },
+ { 0x2f90, 1, { 0x8863, 0 } },
+ { 0x2f91, 1, { 0x897e, 0 } },
+ { 0x2f92, 1, { 0x898b, 0 } },
+ { 0x2f93, 1, { 0x89d2, 0 } },
+ { 0x2f94, 1, { 0x8a00, 0 } },
+ { 0x2f95, 1, { 0x8c37, 0 } },
+ { 0x2f96, 1, { 0x8c46, 0 } },
+ { 0x2f97, 1, { 0x8c55, 0 } },
+ { 0x2f98, 1, { 0x8c78, 0 } },
+ { 0x2f99, 1, { 0x8c9d, 0 } },
+ { 0x2f9a, 1, { 0x8d64, 0 } },
+ { 0x2f9b, 1, { 0x8d70, 0 } },
+ { 0x2f9c, 1, { 0x8db3, 0 } },
+ { 0x2f9d, 1, { 0x8eab, 0 } },
+ { 0x2f9e, 1, { 0x8eca, 0 } },
+ { 0x2f9f, 1, { 0x8f9b, 0 } },
+ { 0x2fa0, 1, { 0x8fb0, 0 } },
+ { 0x2fa1, 1, { 0x8fb5, 0 } },
+ { 0x2fa2, 1, { 0x9091, 0 } },
+ { 0x2fa3, 1, { 0x9149, 0 } },
+ { 0x2fa4, 1, { 0x91c6, 0 } },
+ { 0x2fa5, 1, { 0x91cc, 0 } },
+ { 0x2fa6, 1, { 0x91d1, 0 } },
+ { 0x2fa7, 1, { 0x9577, 0 } },
+ { 0x2fa8, 1, { 0x9580, 0 } },
+ { 0x2fa9, 1, { 0x961c, 0 } },
+ { 0x2faa, 1, { 0x96b6, 0 } },
+ { 0x2fab, 1, { 0x96b9, 0 } },
+ { 0x2fac, 1, { 0x96e8, 0 } },
+ { 0x2fad, 1, { 0x9751, 0 } },
+ { 0x2fae, 1, { 0x975e, 0 } },
+ { 0x2faf, 1, { 0x9762, 0 } },
+ { 0x2fb0, 1, { 0x9769, 0 } },
+ { 0x2fb1, 1, { 0x97cb, 0 } },
+ { 0x2fb2, 1, { 0x97ed, 0 } },
+ { 0x2fb3, 1, { 0x97f3, 0 } },
+ { 0x2fb4, 1, { 0x9801, 0 } },
+ { 0x2fb5, 1, { 0x98a8, 0 } },
+ { 0x2fb6, 1, { 0x98db, 0 } },
+ { 0x2fb7, 1, { 0x98df, 0 } },
+ { 0x2fb8, 1, { 0x9996, 0 } },
+ { 0x2fb9, 1, { 0x9999, 0 } },
+ { 0x2fba, 1, { 0x99ac, 0 } },
+ { 0x2fbb, 1, { 0x9aa8, 0 } },
+ { 0x2fbc, 1, { 0x9ad8, 0 } },
+ { 0x2fbd, 1, { 0x9adf, 0 } },
+ { 0x2fbe, 1, { 0x9b25, 0 } },
+ { 0x2fbf, 1, { 0x9b2f, 0 } },
+ { 0x2fc0, 1, { 0x9b32, 0 } },
+ { 0x2fc1, 1, { 0x9b3c, 0 } },
+ { 0x2fc2, 1, { 0x9b5a, 0 } },
+ { 0x2fc3, 1, { 0x9ce5, 0 } },
+ { 0x2fc4, 1, { 0x9e75, 0 } },
+ { 0x2fc5, 1, { 0x9e7f, 0 } },
+ { 0x2fc6, 1, { 0x9ea5, 0 } },
+ { 0x2fc7, 1, { 0x9ebb, 0 } },
+ { 0x2fc8, 1, { 0x9ec3, 0 } },
+ { 0x2fc9, 1, { 0x9ecd, 0 } },
+ { 0x2fca, 1, { 0x9ed1, 0 } },
+ { 0x2fcb, 1, { 0x9ef9, 0 } },
+ { 0x2fcc, 1, { 0x9efd, 0 } },
+ { 0x2fcd, 1, { 0x9f0e, 0 } },
+ { 0x2fce, 1, { 0x9f13, 0 } },
+ { 0x2fcf, 1, { 0x9f20, 0 } },
+ { 0x2fd0, 1, { 0x9f3b, 0 } },
+ { 0x2fd1, 1, { 0x9f4a, 0 } },
+ { 0x2fd2, 1, { 0x9f52, 0 } },
+ { 0x2fd3, 1, { 0x9f8d, 0 } },
+ { 0x2fd4, 1, { 0x9f9c, 0 } },
+ { 0x2fd5, 1, { 0x9fa0, 0 } },
+ { 0x3002, 1, { 0x2e, 0 } },
+ { 0x3036, 1, { 0x3012, 0 } },
+ { 0x3038, 1, { 0x5341, 0 } },
+ { 0x3039, 1, { 0x5344, 0 } },
+ { 0x303a, 1, { 0x5345, 0 } },
+ { 0x309f, 2, { 0x3088, 0x308a } },
+ { 0x30ff, 2, { 0x30b3, 0x30c8 } },
+ { 0x3131, 1, { 0x1100, 0 } },
+ { 0x3132, 1, { 0x1101, 0 } },
+ { 0x3133, 1, { 0x11aa, 0 } },
+ { 0x3134, 1, { 0x1102, 0 } },
+ { 0x3135, 1, { 0x11ac, 0 } },
+ { 0x3136, 1, { 0x11ad, 0 } },
+ { 0x3137, 1, { 0x1103, 0 } },
+ { 0x3138, 1, { 0x1104, 0 } },
+ { 0x3139, 1, { 0x1105, 0 } },
+ { 0x313a, 1, { 0x11b0, 0 } },
+ { 0x313b, 1, { 0x11b1, 0 } },
+ { 0x313c, 1, { 0x11b2, 0 } },
+ { 0x313d, 1, { 0x11b3, 0 } },
+ { 0x313e, 1, { 0x11b4, 0 } },
+ { 0x313f, 1, { 0x11b5, 0 } },
+ { 0x3140, 1, { 0x111a, 0 } },
+ { 0x3141, 1, { 0x1106, 0 } },
+ { 0x3142, 1, { 0x1107, 0 } },
+ { 0x3143, 1, { 0x1108, 0 } },
+ { 0x3144, 1, { 0x1121, 0 } },
+ { 0x3145, 1, { 0x1109, 0 } },
+ { 0x3146, 1, { 0x110a, 0 } },
+ { 0x3147, 1, { 0x110b, 0 } },
+ { 0x3148, 1, { 0x110c, 0 } },
+ { 0x3149, 1, { 0x110d, 0 } },
+ { 0x314a, 1, { 0x110e, 0 } },
+ { 0x314b, 1, { 0x110f, 0 } },
+ { 0x314c, 1, { 0x1110, 0 } },
+ { 0x314d, 1, { 0x1111, 0 } },
+ { 0x314e, 1, { 0x1112, 0 } },
+ { 0x314f, 1, { 0x1161, 0 } },
+ { 0x3150, 1, { 0x1162, 0 } },
+ { 0x3151, 1, { 0x1163, 0 } },
+ { 0x3152, 1, { 0x1164, 0 } },
+ { 0x3153, 1, { 0x1165, 0 } },
+ { 0x3154, 1, { 0x1166, 0 } },
+ { 0x3155, 1, { 0x1167, 0 } },
+ { 0x3156, 1, { 0x1168, 0 } },
+ { 0x3157, 1, { 0x1169, 0 } },
+ { 0x3158, 1, { 0x116a, 0 } },
+ { 0x3159, 1, { 0x116b, 0 } },
+ { 0x315a, 1, { 0x116c, 0 } },
+ { 0x315b, 1, { 0x116d, 0 } },
+ { 0x315c, 1, { 0x116e, 0 } },
+ { 0x315d, 1, { 0x116f, 0 } },
+ { 0x315e, 1, { 0x1170, 0 } },
+ { 0x315f, 1, { 0x1171, 0 } },
+ { 0x3160, 1, { 0x1172, 0 } },
+ { 0x3161, 1, { 0x1173, 0 } },
+ { 0x3162, 1, { 0x1174, 0 } },
+ { 0x3163, 1, { 0x1175, 0 } },
+ { 0x3165, 1, { 0x1114, 0 } },
+ { 0x3166, 1, { 0x1115, 0 } },
+ { 0x3167, 1, { 0x11c7, 0 } },
+ { 0x3168, 1, { 0x11c8, 0 } },
+ { 0x3169, 1, { 0x11cc, 0 } },
+ { 0x316a, 1, { 0x11ce, 0 } },
+ { 0x316b, 1, { 0x11d3, 0 } },
+ { 0x316c, 1, { 0x11d7, 0 } },
+ { 0x316d, 1, { 0x11d9, 0 } },
+ { 0x316e, 1, { 0x111c, 0 } },
+ { 0x316f, 1, { 0x11dd, 0 } },
+ { 0x3170, 1, { 0x11df, 0 } },
+ { 0x3171, 1, { 0x111d, 0 } },
+ { 0x3172, 1, { 0x111e, 0 } },
+ { 0x3173, 1, { 0x1120, 0 } },
+ { 0x3174, 1, { 0x1122, 0 } },
+ { 0x3175, 1, { 0x1123, 0 } },
+ { 0x3176, 1, { 0x1127, 0 } },
+ { 0x3177, 1, { 0x1129, 0 } },
+ { 0x3178, 1, { 0x112b, 0 } },
+ { 0x3179, 1, { 0x112c, 0 } },
+ { 0x317a, 1, { 0x112d, 0 } },
+ { 0x317b, 1, { 0x112e, 0 } },
+ { 0x317c, 1, { 0x112f, 0 } },
+ { 0x317d, 1, { 0x1132, 0 } },
+ { 0x317e, 1, { 0x1136, 0 } },
+ { 0x317f, 1, { 0x1140, 0 } },
+ { 0x3180, 1, { 0x1147, 0 } },
+ { 0x3181, 1, { 0x114c, 0 } },
+ { 0x3182, 1, { 0x11f1, 0 } },
+ { 0x3183, 1, { 0x11f2, 0 } },
+ { 0x3184, 1, { 0x1157, 0 } },
+ { 0x3185, 1, { 0x1158, 0 } },
+ { 0x3186, 1, { 0x1159, 0 } },
+ { 0x3187, 1, { 0x1184, 0 } },
+ { 0x3188, 1, { 0x1185, 0 } },
+ { 0x3189, 1, { 0x1188, 0 } },
+ { 0x318a, 1, { 0x1191, 0 } },
+ { 0x318b, 1, { 0x1192, 0 } },
+ { 0x318c, 1, { 0x1194, 0 } },
+ { 0x318d, 1, { 0x119e, 0 } },
+ { 0x318e, 1, { 0x11a1, 0 } },
+ { 0x3192, 1, { 0x4e00, 0 } },
+ { 0x3193, 1, { 0x4e8c, 0 } },
+ { 0x3194, 1, { 0x4e09, 0 } },
+ { 0x3195, 1, { 0x56db, 0 } },
+ { 0x3196, 1, { 0x4e0a, 0 } },
+ { 0x3197, 1, { 0x4e2d, 0 } },
+ { 0x3198, 1, { 0x4e0b, 0 } },
+ { 0x3199, 1, { 0x7532, 0 } },
+ { 0x319a, 1, { 0x4e59, 0 } },
+ { 0x319b, 1, { 0x4e19, 0 } },
+ { 0x319c, 1, { 0x4e01, 0 } },
+ { 0x319d, 1, { 0x5929, 0 } },
+ { 0x319e, 1, { 0x5730, 0 } },
+ { 0x319f, 1, { 0x4eba, 0 } },
+ { 0x3244, 1, { 0x554f, 0 } },
+ { 0x3245, 1, { 0x5e7c, 0 } },
+ { 0x3246, 1, { 0x6587, 0 } },
+ { 0x3247, 1, { 0x7b8f, 0 } },
+ { 0x3250, 3, { 95, 0 } },
+ { 0x3251, 2, { 0x32, 0x31 } },
+ { 0x3252, 2, { 0x32, 0x32 } },
+ { 0x3253, 2, { 0x32, 0x33 } },
+ { 0x3254, 2, { 0x32, 0x34 } },
+ { 0x3255, 2, { 0x32, 0x35 } },
+ { 0x3256, 2, { 0x32, 0x36 } },
+ { 0x3257, 2, { 0x32, 0x37 } },
+ { 0x3258, 2, { 0x32, 0x38 } },
+ { 0x3259, 2, { 0x32, 0x39 } },
+ { 0x325a, 2, { 0x33, 0x30 } },
+ { 0x325b, 2, { 0x33, 0x31 } },
+ { 0x325c, 2, { 0x33, 0x32 } },
+ { 0x325d, 2, { 0x33, 0x33 } },
+ { 0x325e, 2, { 0x33, 0x34 } },
+ { 0x325f, 2, { 0x33, 0x35 } },
+ { 0x3260, 1, { 0x1100, 0 } },
+ { 0x3261, 1, { 0x1102, 0 } },
+ { 0x3262, 1, { 0x1103, 0 } },
+ { 0x3263, 1, { 0x1105, 0 } },
+ { 0x3264, 1, { 0x1106, 0 } },
+ { 0x3265, 1, { 0x1107, 0 } },
+ { 0x3266, 1, { 0x1109, 0 } },
+ { 0x3267, 1, { 0x110b, 0 } },
+ { 0x3268, 1, { 0x110c, 0 } },
+ { 0x3269, 1, { 0x110e, 0 } },
+ { 0x326a, 1, { 0x110f, 0 } },
+ { 0x326b, 1, { 0x1110, 0 } },
+ { 0x326c, 1, { 0x1111, 0 } },
+ { 0x326d, 1, { 0x1112, 0 } },
+ { 0x326e, 1, { 0xac00, 0 } },
+ { 0x326f, 1, { 0xb098, 0 } },
+ { 0x3270, 1, { 0xb2e4, 0 } },
+ { 0x3271, 1, { 0xb77c, 0 } },
+ { 0x3272, 1, { 0xb9c8, 0 } },
+ { 0x3273, 1, { 0xbc14, 0 } },
+ { 0x3274, 1, { 0xc0ac, 0 } },
+ { 0x3275, 1, { 0xc544, 0 } },
+ { 0x3276, 1, { 0xc790, 0 } },
+ { 0x3277, 1, { 0xcc28, 0 } },
+ { 0x3278, 1, { 0xce74, 0 } },
+ { 0x3279, 1, { 0xd0c0, 0 } },
+ { 0x327a, 1, { 0xd30c, 0 } },
+ { 0x327b, 1, { 0xd558, 0 } },
+ { 0x327c, 2, { 0xcc38, 0xace0 } },
+ { 0x327d, 2, { 0xc8fc, 0xc758 } },
+ { 0x327e, 1, { 0xc6b0, 0 } },
+ { 0x3280, 1, { 0x4e00, 0 } },
+ { 0x3281, 1, { 0x4e8c, 0 } },
+ { 0x3282, 1, { 0x4e09, 0 } },
+ { 0x3283, 1, { 0x56db, 0 } },
+ { 0x3284, 1, { 0x4e94, 0 } },
+ { 0x3285, 1, { 0x516d, 0 } },
+ { 0x3286, 1, { 0x4e03, 0 } },
+ { 0x3287, 1, { 0x516b, 0 } },
+ { 0x3288, 1, { 0x4e5d, 0 } },
+ { 0x3289, 1, { 0x5341, 0 } },
+ { 0x328a, 1, { 0x6708, 0 } },
+ { 0x328b, 1, { 0x706b, 0 } },
+ { 0x328c, 1, { 0x6c34, 0 } },
+ { 0x328d, 1, { 0x6728, 0 } },
+ { 0x328e, 1, { 0x91d1, 0 } },
+ { 0x328f, 1, { 0x571f, 0 } },
+ { 0x3290, 1, { 0x65e5, 0 } },
+ { 0x3291, 1, { 0x682a, 0 } },
+ { 0x3292, 1, { 0x6709, 0 } },
+ { 0x3293, 1, { 0x793e, 0 } },
+ { 0x3294, 1, { 0x540d, 0 } },
+ { 0x3295, 1, { 0x7279, 0 } },
+ { 0x3296, 1, { 0x8ca1, 0 } },
+ { 0x3297, 1, { 0x795d, 0 } },
+ { 0x3298, 1, { 0x52b4, 0 } },
+ { 0x3299, 1, { 0x79d8, 0 } },
+ { 0x329a, 1, { 0x7537, 0 } },
+ { 0x329b, 1, { 0x5973, 0 } },
+ { 0x329c, 1, { 0x9069, 0 } },
+ { 0x329d, 1, { 0x512a, 0 } },
+ { 0x329e, 1, { 0x5370, 0 } },
+ { 0x329f, 1, { 0x6ce8, 0 } },
+ { 0x32a0, 1, { 0x9805, 0 } },
+ { 0x32a1, 1, { 0x4f11, 0 } },
+ { 0x32a2, 1, { 0x5199, 0 } },
+ { 0x32a3, 1, { 0x6b63, 0 } },
+ { 0x32a4, 1, { 0x4e0a, 0 } },
+ { 0x32a5, 1, { 0x4e2d, 0 } },
+ { 0x32a6, 1, { 0x4e0b, 0 } },
+ { 0x32a7, 1, { 0x5de6, 0 } },
+ { 0x32a8, 1, { 0x53f3, 0 } },
+ { 0x32a9, 1, { 0x533b, 0 } },
+ { 0x32aa, 1, { 0x5b97, 0 } },
+ { 0x32ab, 1, { 0x5b66, 0 } },
+ { 0x32ac, 1, { 0x76e3, 0 } },
+ { 0x32ad, 1, { 0x4f01, 0 } },
+ { 0x32ae, 1, { 0x8cc7, 0 } },
+ { 0x32af, 1, { 0x5354, 0 } },
+ { 0x32b0, 1, { 0x591c, 0 } },
+ { 0x32b1, 2, { 0x33, 0x36 } },
+ { 0x32b2, 2, { 0x33, 0x37 } },
+ { 0x32b3, 2, { 0x33, 0x38 } },
+ { 0x32b4, 2, { 0x33, 0x39 } },
+ { 0x32b5, 2, { 0x34, 0x30 } },
+ { 0x32b6, 2, { 0x34, 0x31 } },
+ { 0x32b7, 2, { 0x34, 0x32 } },
+ { 0x32b8, 2, { 0x34, 0x33 } },
+ { 0x32b9, 2, { 0x34, 0x34 } },
+ { 0x32ba, 2, { 0x34, 0x35 } },
+ { 0x32bb, 2, { 0x34, 0x36 } },
+ { 0x32bc, 2, { 0x34, 0x37 } },
+ { 0x32bd, 2, { 0x34, 0x38 } },
+ { 0x32be, 2, { 0x34, 0x39 } },
+ { 0x32bf, 2, { 0x35, 0x30 } },
+ { 0x32c0, 2, { 0x31, 0x6708 } },
+ { 0x32c1, 2, { 0x32, 0x6708 } },
+ { 0x32c2, 2, { 0x33, 0x6708 } },
+ { 0x32c3, 2, { 0x34, 0x6708 } },
+ { 0x32c4, 2, { 0x35, 0x6708 } },
+ { 0x32c5, 2, { 0x36, 0x6708 } },
+ { 0x32c6, 2, { 0x37, 0x6708 } },
+ { 0x32c7, 2, { 0x38, 0x6708 } },
+ { 0x32c8, 2, { 0x39, 0x6708 } },
+ { 0x32c9, 3, { 895, 0 } },
+ { 0x32ca, 3, { 3, 0 } },
+ { 0x32cb, 3, { 12, 0 } },
+ { 0x32cc, 2, { 0x68, 0x67 } },
+ { 0x32cd, 3, { 87, 0 } },
+ { 0x32ce, 2, { 0x65, 0x76 } },
+ { 0x32cf, 3, { 466, 0 } },
+ { 0x32d0, 1, { 0x30a2, 0 } },
+ { 0x32d1, 1, { 0x30a4, 0 } },
+ { 0x32d2, 1, { 0x30a6, 0 } },
+ { 0x32d3, 1, { 0x30a8, 0 } },
+ { 0x32d4, 1, { 0x30aa, 0 } },
+ { 0x32d5, 1, { 0x30ab, 0 } },
+ { 0x32d6, 1, { 0x30ad, 0 } },
+ { 0x32d7, 1, { 0x30af, 0 } },
+ { 0x32d8, 1, { 0x30b1, 0 } },
+ { 0x32d9, 1, { 0x30b3, 0 } },
+ { 0x32da, 1, { 0x30b5, 0 } },
+ { 0x32db, 1, { 0x30b7, 0 } },
+ { 0x32dc, 1, { 0x30b9, 0 } },
+ { 0x32dd, 1, { 0x30bb, 0 } },
+ { 0x32de, 1, { 0x30bd, 0 } },
+ { 0x32df, 1, { 0x30bf, 0 } },
+ { 0x32e0, 1, { 0x30c1, 0 } },
+ { 0x32e1, 1, { 0x30c4, 0 } },
+ { 0x32e2, 1, { 0x30c6, 0 } },
+ { 0x32e3, 1, { 0x30c8, 0 } },
+ { 0x32e4, 1, { 0x30ca, 0 } },
+ { 0x32e5, 1, { 0x30cb, 0 } },
+ { 0x32e6, 1, { 0x30cc, 0 } },
+ { 0x32e7, 1, { 0x30cd, 0 } },
+ { 0x32e8, 1, { 0x30ce, 0 } },
+ { 0x32e9, 1, { 0x30cf, 0 } },
+ { 0x32ea, 1, { 0x30d2, 0 } },
+ { 0x32eb, 1, { 0x30d5, 0 } },
+ { 0x32ec, 1, { 0x30d8, 0 } },
+ { 0x32ed, 1, { 0x30db, 0 } },
+ { 0x32ee, 1, { 0x30de, 0 } },
+ { 0x32ef, 1, { 0x30df, 0 } },
+ { 0x32f0, 1, { 0x30e0, 0 } },
+ { 0x32f1, 1, { 0x30e1, 0 } },
+ { 0x32f2, 1, { 0x30e2, 0 } },
+ { 0x32f3, 1, { 0x30e4, 0 } },
+ { 0x32f4, 1, { 0x30e6, 0 } },
+ { 0x32f5, 1, { 0x30e8, 0 } },
+ { 0x32f6, 1, { 0x30e9, 0 } },
+ { 0x32f7, 1, { 0x30ea, 0 } },
+ { 0x32f8, 1, { 0x30eb, 0 } },
+ { 0x32f9, 1, { 0x30ec, 0 } },
+ { 0x32fa, 1, { 0x30ed, 0 } },
+ { 0x32fb, 1, { 0x30ef, 0 } },
+ { 0x32fc, 1, { 0x30f0, 0 } },
+ { 0x32fd, 1, { 0x30f1, 0 } },
+ { 0x32fe, 1, { 0x30f2, 0 } },
+ { 0x32ff, 2, { 0x4ee4, 0x548c } },
+ { 0x3300, 4, { 836, 0 } },
+ { 0x3301, 4, { 299, 0 } },
+ { 0x3302, 4, { 296, 0 } },
+ { 0x3303, 3, { 767, 0 } },
+ { 0x3304, 4, { 791, 0 } },
+ { 0x3305, 3, { 140, 0 } },
+ { 0x3306, 3, { 442, 0 } },
+ { 0x3307, 5, { 260, 0 } },
+ { 0x3308, 4, { 832, 0 } },
+ { 0x3309, 3, { 861, 0 } },
+ { 0x330a, 3, { 613, 0 } },
+ { 0x330b, 3, { 816, 0 } },
+ { 0x330c, 4, { 787, 0 } },
+ { 0x330d, 4, { 828, 0 } },
+ { 0x330e, 3, { 770, 0 } },
+ { 0x330f, 3, { 143, 0 } },
+ { 0x3310, 2, { 0x30ae, 0x30ac } },
+ { 0x3311, 3, { 445, 0 } },
+ { 0x3312, 4, { 783, 0 } },
+ { 0x3313, 4, { 281, 0 } },
+ { 0x3314, 2, { 0x30ad, 0x30ed } },
+ { 0x3315, 5, { 233, 0 } },
+ { 0x3316, 6, { 209, 0 } },
+ { 0x3317, 5, { 255, 0 } },
+ { 0x3318, 3, { 235, 0 } },
+ { 0x3319, 5, { 235, 0 } },
+ { 0x331a, 5, { 228, 0 } },
+ { 0x331b, 4, { 824, 0 } },
+ { 0x331c, 3, { 864, 0 } },
+ { 0x331d, 3, { 616, 0 } },
+ { 0x331e, 3, { 773, 0 } },
+ { 0x331f, 4, { 226, 0 } },
+ { 0x3320, 5, { 250, 0 } },
+ { 0x3321, 4, { 779, 0 } },
+ { 0x3322, 3, { 448, 0 } },
+ { 0x3323, 3, { 247, 0 } },
+ { 0x3324, 3, { 283, 0 } },
+ { 0x3325, 2, { 0x30c7, 0x30b7 } },
+ { 0x3326, 2, { 0x30c9, 0x30eb } },
+ { 0x3327, 2, { 0x30c8, 0x30f3 } },
+ { 0x3328, 2, { 0x30ca, 0x30ce } },
+ { 0x3329, 3, { 867, 0 } },
+ { 0x332a, 3, { 878, 0 } },
+ { 0x332b, 5, { 245, 0 } },
+ { 0x332c, 3, { 619, 0 } },
+ { 0x332d, 4, { 222, 0 } },
+ { 0x332e, 5, { 240, 0 } },
+ { 0x332f, 3, { 451, 0 } },
+ { 0x3330, 2, { 0x30d4, 0x30b3 } },
+ { 0x3331, 2, { 0x30d3, 0x30eb } },
+ { 0x3332, 5, { 301, 0 } },
+ { 0x3333, 4, { 277, 0 } },
+ { 0x3334, 5, { 306, 0 } },
+ { 0x3335, 3, { 286, 0 } },
+ { 0x3336, 5, { 311, 0 } },
+ { 0x3337, 2, { 0x30da, 0x30bd } },
+ { 0x3338, 3, { 622, 0 } },
+ { 0x3339, 3, { 870, 0 } },
+ { 0x333a, 3, { 454, 0 } },
+ { 0x333b, 3, { 289, 0 } },
+ { 0x333c, 3, { 881, 0 } },
+ { 0x333d, 4, { 775, 0 } },
+ { 0x333e, 3, { 625, 0 } },
+ { 0x333f, 2, { 0x30db, 0x30f3 } },
+ { 0x3340, 3, { 457, 0 } },
+ { 0x3341, 3, { 873, 0 } },
+ { 0x3342, 3, { 884, 0 } },
+ { 0x3343, 4, { 822, 0 } },
+ { 0x3344, 3, { 292, 0 } },
+ { 0x3345, 3, { 876, 0 } },
+ { 0x3346, 3, { 887, 0 } },
+ { 0x3347, 5, { 145, 0 } },
+ { 0x3348, 4, { 218, 0 } },
+ { 0x3349, 2, { 0x30df, 0x30ea } },
+ { 0x334a, 5, { 316, 0 } },
+ { 0x334b, 2, { 0x30e1, 0x30ac } },
+ { 0x334c, 4, { 273, 0 } },
+ { 0x334d, 4, { 211, 0 } },
+ { 0x334e, 3, { 628, 0 } },
+ { 0x334f, 3, { 460, 0 } },
+ { 0x3350, 3, { 295, 0 } },
+ { 0x3351, 4, { 818, 0 } },
+ { 0x3352, 2, { 0x30ea, 0x30e9 } },
+ { 0x3353, 3, { 320, 0 } },
+ { 0x3354, 4, { 214, 0 } },
+ { 0x3355, 2, { 0x30ec, 0x30e0 } },
+ { 0x3356, 5, { 150, 0 } },
+ { 0x3357, 3, { 257, 0 } },
+ { 0x3358, 2, { 0x30, 0x70b9 } },
+ { 0x3359, 2, { 0x31, 0x70b9 } },
+ { 0x335a, 2, { 0x32, 0x70b9 } },
+ { 0x335b, 2, { 0x33, 0x70b9 } },
+ { 0x335c, 2, { 0x34, 0x70b9 } },
+ { 0x335d, 2, { 0x35, 0x70b9 } },
+ { 0x335e, 2, { 0x36, 0x70b9 } },
+ { 0x335f, 2, { 0x37, 0x70b9 } },
+ { 0x3360, 2, { 0x38, 0x70b9 } },
+ { 0x3361, 2, { 0x39, 0x70b9 } },
+ { 0x3362, 3, { 892, 0 } },
+ { 0x3363, 3, { 6, 0 } },
+ { 0x3364, 3, { 15, 0 } },
+ { 0x3365, 3, { 21, 0 } },
+ { 0x3366, 3, { 27, 0 } },
+ { 0x3367, 3, { 33, 0 } },
+ { 0x3368, 3, { 39, 0 } },
+ { 0x3369, 3, { 45, 0 } },
+ { 0x336a, 3, { 51, 0 } },
+ { 0x336b, 3, { 57, 0 } },
+ { 0x336c, 3, { 676, 0 } },
+ { 0x336d, 3, { 670, 0 } },
+ { 0x336e, 3, { 664, 0 } },
+ { 0x336f, 3, { 658, 0 } },
+ { 0x3370, 3, { 652, 0 } },
+ { 0x3371, 3, { 713, 0 } },
+ { 0x3372, 2, { 0x64, 0x61 } },
+ { 0x3373, 2, { 0x61, 0x75 } },
+ { 0x3374, 3, { 77, 0 } },
+ { 0x3375, 2, { 0x6f, 0x76 } },
+ { 0x3376, 2, { 0x70, 0x63 } },
+ { 0x3377, 2, { 0x64, 0x6d } },
+ { 0x3378, 3, { 642, 0 } },
+ { 0x3379, 3, { 468, 0 } },
+ { 0x337a, 2, { 0x69, 0x75 } },
+ { 0x337b, 2, { 0x5e73, 0x6210 } },
+ { 0x337c, 2, { 0x662d, 0x548c } },
+ { 0x337d, 2, { 0x5927, 0x6b63 } },
+ { 0x337e, 2, { 0x660e, 0x6cbb } },
+ { 0x337f, 4, { 269, 0 } },
+ { 0x3380, 2, { 0x70, 0x61 } },
+ { 0x3381, 2, { 0x6e, 0x61 } },
+ { 0x3382, 2, { 0x3bc, 0x61 } },
+ { 0x3383, 2, { 0x6d, 0x61 } },
+ { 0x3384, 2, { 0x6b, 0x61 } },
+ { 0x3385, 2, { 0x6b, 0x62 } },
+ { 0x3386, 2, { 0x6d, 0x62 } },
+ { 0x3387, 2, { 0x67, 0x62 } },
+ { 0x3388, 3, { 464, 0 } },
+ { 0x3389, 4, { 463, 0 } },
+ { 0x338a, 2, { 0x70, 0x66 } },
+ { 0x338b, 2, { 0x6e, 0x66 } },
+ { 0x338c, 2, { 0x3bc, 0x66 } },
+ { 0x338d, 2, { 0x3bc, 0x67 } },
+ { 0x338e, 2, { 0x6d, 0x67 } },
+ { 0x338f, 2, { 0x6b, 0x67 } },
+ { 0x3390, 2, { 0x68, 0x7a } },
+ { 0x3391, 3, { 477, 0 } },
+ { 0x3392, 3, { 92, 0 } },
+ { 0x3393, 3, { 100, 0 } },
+ { 0x3394, 3, { 106, 0 } },
+ { 0x3395, 2, { 0x3bc, 0x6c } },
+ { 0x3396, 2, { 0x6d, 0x6c } },
+ { 0x3397, 2, { 0x64, 0x6c } },
+ { 0x3398, 2, { 0x6b, 0x6c } },
+ { 0x3399, 2, { 0x66, 0x6d } },
+ { 0x339a, 2, { 0x6e, 0x6d } },
+ { 0x339b, 2, { 0x3bc, 0x6d } },
+ { 0x339c, 2, { 0x6d, 0x6d } },
+ { 0x339d, 2, { 0x63, 0x6d } },
+ { 0x339e, 2, { 0x6b, 0x6d } },
+ { 0x339f, 3, { 637, 0 } },
+ { 0x33a0, 3, { 647, 0 } },
+ { 0x33a1, 2, { 0x6d, 0x32 } },
+ { 0x33a2, 3, { 693, 0 } },
+ { 0x33a3, 3, { 716, 0 } },
+ { 0x33a4, 3, { 698, 0 } },
+ { 0x33a5, 2, { 0x6d, 0x33 } },
+ { 0x33a6, 3, { 706, 0 } },
+ { 0x33a7, 3, { 491, 0 } },
+ { 0x33a8, 4, { 491, 0 } },
+ { 0x33a9, 2, { 0x70, 0x61 } },
+ { 0x33aa, 3, { 724, 0 } },
+ { 0x33ab, 3, { 482, 0 } },
+ { 0x33ac, 3, { 634, 0 } },
+ { 0x33ad, 3, { 79, 0 } },
+ { 0x33ae, 5, { 79, 0 } },
+ { 0x33af, 6, { 79, 0 } },
+ { 0x33b0, 2, { 0x70, 0x73 } },
+ { 0x33b1, 2, { 0x6e, 0x73 } },
+ { 0x33b2, 2, { 0x3bc, 0x73 } },
+ { 0x33b3, 2, { 0x6d, 0x73 } },
+ { 0x33b4, 2, { 0x70, 0x76 } },
+ { 0x33b5, 2, { 0x6e, 0x76 } },
+ { 0x33b6, 2, { 0x3bc, 0x76 } },
+ { 0x33b7, 2, { 0x6d, 0x76 } },
+ { 0x33b8, 2, { 0x6b, 0x76 } },
+ { 0x33b9, 2, { 0x6d, 0x76 } },
+ { 0x33ba, 2, { 0x70, 0x77 } },
+ { 0x33bb, 2, { 0x6e, 0x77 } },
+ { 0x33bc, 2, { 0x3bc, 0x77 } },
+ { 0x33bd, 2, { 0x6d, 0x77 } },
+ { 0x33be, 2, { 0x6b, 0x77 } },
+ { 0x33bf, 2, { 0x6d, 0x77 } },
+ { 0x33c0, 2, { 0x6b, 0x3c9 } },
+ { 0x33c1, 2, { 0x6d, 0x3c9 } },
+ { 0x33c3, 2, { 0x62, 0x71 } },
+ { 0x33c4, 2, { 0x63, 0x63 } },
+ { 0x33c5, 2, { 0x63, 0x64 } },
+ { 0x33c6, 4, { 631, 0 } },
+ { 0x33c8, 2, { 0x64, 0x62 } },
+ { 0x33c9, 2, { 0x67, 0x79 } },
+ { 0x33ca, 2, { 0x68, 0x61 } },
+ { 0x33cb, 2, { 0x68, 0x70 } },
+ { 0x33cc, 2, { 0x69, 0x6e } },
+ { 0x33cd, 2, { 0x6b, 0x6b } },
+ { 0x33ce, 2, { 0x6b, 0x6d } },
+ { 0x33cf, 2, { 0x6b, 0x74 } },
+ { 0x33d0, 2, { 0x6c, 0x6d } },
+ { 0x33d1, 2, { 0x6c, 0x6e } },
+ { 0x33d2, 3, { 98, 0 } },
+ { 0x33d3, 2, { 0x6c, 0x78 } },
+ { 0x33d4, 2, { 0x6d, 0x62 } },
+ { 0x33d5, 3, { 103, 0 } },
+ { 0x33d6, 3, { 486, 0 } },
+ { 0x33d7, 2, { 0x70, 0x68 } },
+ { 0x33d9, 3, { 480, 0 } },
+ { 0x33da, 2, { 0x70, 0x72 } },
+ { 0x33db, 2, { 0x73, 0x72 } },
+ { 0x33dc, 2, { 0x73, 0x76 } },
+ { 0x33dd, 2, { 0x77, 0x62 } },
+ { 0x33de, 3, { 489, 0 } },
+ { 0x33df, 3, { 484, 0 } },
+ { 0x33e0, 2, { 0x31, 0x65e5 } },
+ { 0x33e1, 2, { 0x32, 0x65e5 } },
+ { 0x33e2, 2, { 0x33, 0x65e5 } },
+ { 0x33e3, 2, { 0x34, 0x65e5 } },
+ { 0x33e4, 2, { 0x35, 0x65e5 } },
+ { 0x33e5, 2, { 0x36, 0x65e5 } },
+ { 0x33e6, 2, { 0x37, 0x65e5 } },
+ { 0x33e7, 2, { 0x38, 0x65e5 } },
+ { 0x33e8, 2, { 0x39, 0x65e5 } },
+ { 0x33e9, 3, { 898, 0 } },
+ { 0x33ea, 3, { 0, 0 } },
+ { 0x33eb, 3, { 9, 0 } },
+ { 0x33ec, 3, { 18, 0 } },
+ { 0x33ed, 3, { 24, 0 } },
+ { 0x33ee, 3, { 30, 0 } },
+ { 0x33ef, 3, { 36, 0 } },
+ { 0x33f0, 3, { 42, 0 } },
+ { 0x33f1, 3, { 48, 0 } },
+ { 0x33f2, 3, { 54, 0 } },
+ { 0x33f3, 3, { 679, 0 } },
+ { 0x33f4, 3, { 673, 0 } },
+ { 0x33f5, 3, { 667, 0 } },
+ { 0x33f6, 3, { 661, 0 } },
+ { 0x33f7, 3, { 655, 0 } },
+ { 0x33f8, 3, { 74, 0 } },
+ { 0x33f9, 3, { 649, 0 } },
+ { 0x33fa, 3, { 644, 0 } },
+ { 0x33fb, 3, { 695, 0 } },
+ { 0x33fc, 3, { 639, 0 } },
+ { 0x33fd, 3, { 496, 0 } },
+ { 0x33fe, 3, { 700, 0 } },
+ { 0x33ff, 3, { 89, 0 } },
+ { 0xa640, 1, { 0xa641, 0 } },
+ { 0xa642, 1, { 0xa643, 0 } },
+ { 0xa644, 1, { 0xa645, 0 } },
+ { 0xa646, 1, { 0xa647, 0 } },
+ { 0xa648, 1, { 0xa649, 0 } },
+ { 0xa64a, 1, { 0xa64b, 0 } },
+ { 0xa64c, 1, { 0xa64d, 0 } },
+ { 0xa64e, 1, { 0xa64f, 0 } },
+ { 0xa650, 1, { 0xa651, 0 } },
+ { 0xa652, 1, { 0xa653, 0 } },
+ { 0xa654, 1, { 0xa655, 0 } },
+ { 0xa656, 1, { 0xa657, 0 } },
+ { 0xa658, 1, { 0xa659, 0 } },
+ { 0xa65a, 1, { 0xa65b, 0 } },
+ { 0xa65c, 1, { 0xa65d, 0 } },
+ { 0xa65e, 1, { 0xa65f, 0 } },
+ { 0xa660, 1, { 0xa661, 0 } },
+ { 0xa662, 1, { 0xa663, 0 } },
+ { 0xa664, 1, { 0xa665, 0 } },
+ { 0xa666, 1, { 0xa667, 0 } },
+ { 0xa668, 1, { 0xa669, 0 } },
+ { 0xa66a, 1, { 0xa66b, 0 } },
+ { 0xa66c, 1, { 0xa66d, 0 } },
+ { 0xa680, 1, { 0xa681, 0 } },
+ { 0xa682, 1, { 0xa683, 0 } },
+ { 0xa684, 1, { 0xa685, 0 } },
+ { 0xa686, 1, { 0xa687, 0 } },
+ { 0xa688, 1, { 0xa689, 0 } },
+ { 0xa68a, 1, { 0xa68b, 0 } },
+ { 0xa68c, 1, { 0xa68d, 0 } },
+ { 0xa68e, 1, { 0xa68f, 0 } },
+ { 0xa690, 1, { 0xa691, 0 } },
+ { 0xa692, 1, { 0xa693, 0 } },
+ { 0xa694, 1, { 0xa695, 0 } },
+ { 0xa696, 1, { 0xa697, 0 } },
+ { 0xa698, 1, { 0xa699, 0 } },
+ { 0xa69a, 1, { 0xa69b, 0 } },
+ { 0xa69c, 1, { 0x44a, 0 } },
+ { 0xa69d, 1, { 0x44c, 0 } },
+ { 0xa722, 1, { 0xa723, 0 } },
+ { 0xa724, 1, { 0xa725, 0 } },
+ { 0xa726, 1, { 0xa727, 0 } },
+ { 0xa728, 1, { 0xa729, 0 } },
+ { 0xa72a, 1, { 0xa72b, 0 } },
+ { 0xa72c, 1, { 0xa72d, 0 } },
+ { 0xa72e, 1, { 0xa72f, 0 } },
+ { 0xa732, 1, { 0xa733, 0 } },
+ { 0xa734, 1, { 0xa735, 0 } },
+ { 0xa736, 1, { 0xa737, 0 } },
+ { 0xa738, 1, { 0xa739, 0 } },
+ { 0xa73a, 1, { 0xa73b, 0 } },
+ { 0xa73c, 1, { 0xa73d, 0 } },
+ { 0xa73e, 1, { 0xa73f, 0 } },
+ { 0xa740, 1, { 0xa741, 0 } },
+ { 0xa742, 1, { 0xa743, 0 } },
+ { 0xa744, 1, { 0xa745, 0 } },
+ { 0xa746, 1, { 0xa747, 0 } },
+ { 0xa748, 1, { 0xa749, 0 } },
+ { 0xa74a, 1, { 0xa74b, 0 } },
+ { 0xa74c, 1, { 0xa74d, 0 } },
+ { 0xa74e, 1, { 0xa74f, 0 } },
+ { 0xa750, 1, { 0xa751, 0 } },
+ { 0xa752, 1, { 0xa753, 0 } },
+ { 0xa754, 1, { 0xa755, 0 } },
+ { 0xa756, 1, { 0xa757, 0 } },
+ { 0xa758, 1, { 0xa759, 0 } },
+ { 0xa75a, 1, { 0xa75b, 0 } },
+ { 0xa75c, 1, { 0xa75d, 0 } },
+ { 0xa75e, 1, { 0xa75f, 0 } },
+ { 0xa760, 1, { 0xa761, 0 } },
+ { 0xa762, 1, { 0xa763, 0 } },
+ { 0xa764, 1, { 0xa765, 0 } },
+ { 0xa766, 1, { 0xa767, 0 } },
+ { 0xa768, 1, { 0xa769, 0 } },
+ { 0xa76a, 1, { 0xa76b, 0 } },
+ { 0xa76c, 1, { 0xa76d, 0 } },
+ { 0xa76e, 1, { 0xa76f, 0 } },
+ { 0xa770, 1, { 0xa76f, 0 } },
+ { 0xa779, 1, { 0xa77a, 0 } },
+ { 0xa77b, 1, { 0xa77c, 0 } },
+ { 0xa77d, 1, { 0x1d79, 0 } },
+ { 0xa77e, 1, { 0xa77f, 0 } },
+ { 0xa780, 1, { 0xa781, 0 } },
+ { 0xa782, 1, { 0xa783, 0 } },
+ { 0xa784, 1, { 0xa785, 0 } },
+ { 0xa786, 1, { 0xa787, 0 } },
+ { 0xa78b, 1, { 0xa78c, 0 } },
+ { 0xa78d, 1, { 0x265, 0 } },
+ { 0xa790, 1, { 0xa791, 0 } },
+ { 0xa792, 1, { 0xa793, 0 } },
+ { 0xa796, 1, { 0xa797, 0 } },
+ { 0xa798, 1, { 0xa799, 0 } },
+ { 0xa79a, 1, { 0xa79b, 0 } },
+ { 0xa79c, 1, { 0xa79d, 0 } },
+ { 0xa79e, 1, { 0xa79f, 0 } },
+ { 0xa7a0, 1, { 0xa7a1, 0 } },
+ { 0xa7a2, 1, { 0xa7a3, 0 } },
+ { 0xa7a4, 1, { 0xa7a5, 0 } },
+ { 0xa7a6, 1, { 0xa7a7, 0 } },
+ { 0xa7a8, 1, { 0xa7a9, 0 } },
+ { 0xa7aa, 1, { 0x266, 0 } },
+ { 0xa7ab, 1, { 0x25c, 0 } },
+ { 0xa7ac, 1, { 0x261, 0 } },
+ { 0xa7ad, 1, { 0x26c, 0 } },
+ { 0xa7ae, 1, { 0x26a, 0 } },
+ { 0xa7b0, 1, { 0x29e, 0 } },
+ { 0xa7b1, 1, { 0x287, 0 } },
+ { 0xa7b2, 1, { 0x29d, 0 } },
+ { 0xa7b3, 1, { 0xab53, 0 } },
+ { 0xa7b4, 1, { 0xa7b5, 0 } },
+ { 0xa7b6, 1, { 0xa7b7, 0 } },
+ { 0xa7b8, 1, { 0xa7b9, 0 } },
+ { 0xa7ba, 1, { 0xa7bb, 0 } },
+ { 0xa7bc, 1, { 0xa7bd, 0 } },
+ { 0xa7be, 1, { 0xa7bf, 0 } },
+ { 0xa7c0, 1, { 0xa7c1, 0 } },
+ { 0xa7c2, 1, { 0xa7c3, 0 } },
+ { 0xa7c4, 1, { 0xa794, 0 } },
+ { 0xa7c5, 1, { 0x282, 0 } },
+ { 0xa7c6, 1, { 0x1d8e, 0 } },
+ { 0xa7c7, 1, { 0xa7c8, 0 } },
+ { 0xa7c9, 1, { 0xa7ca, 0 } },
+ { 0xa7d0, 1, { 0xa7d1, 0 } },
+ { 0xa7d6, 1, { 0xa7d7, 0 } },
+ { 0xa7d8, 1, { 0xa7d9, 0 } },
+ { 0xa7f2, 1, { 0x63, 0 } },
+ { 0xa7f3, 1, { 0x66, 0 } },
+ { 0xa7f4, 1, { 0x71, 0 } },
+ { 0xa7f5, 1, { 0xa7f6, 0 } },
+ { 0xa7f8, 1, { 0x127, 0 } },
+ { 0xa7f9, 1, { 0x153, 0 } },
+ { 0xab5c, 1, { 0xa727, 0 } },
+ { 0xab5d, 1, { 0xab37, 0 } },
+ { 0xab5e, 1, { 0x26b, 0 } },
+ { 0xab5f, 1, { 0xab52, 0 } },
+ { 0xab69, 1, { 0x28d, 0 } },
+ { 0xab70, 1, { 0x13a0, 0 } },
+ { 0xab71, 1, { 0x13a1, 0 } },
+ { 0xab72, 1, { 0x13a2, 0 } },
+ { 0xab73, 1, { 0x13a3, 0 } },
+ { 0xab74, 1, { 0x13a4, 0 } },
+ { 0xab75, 1, { 0x13a5, 0 } },
+ { 0xab76, 1, { 0x13a6, 0 } },
+ { 0xab77, 1, { 0x13a7, 0 } },
+ { 0xab78, 1, { 0x13a8, 0 } },
+ { 0xab79, 1, { 0x13a9, 0 } },
+ { 0xab7a, 1, { 0x13aa, 0 } },
+ { 0xab7b, 1, { 0x13ab, 0 } },
+ { 0xab7c, 1, { 0x13ac, 0 } },
+ { 0xab7d, 1, { 0x13ad, 0 } },
+ { 0xab7e, 1, { 0x13ae, 0 } },
+ { 0xab7f, 1, { 0x13af, 0 } },
+ { 0xab80, 1, { 0x13b0, 0 } },
+ { 0xab81, 1, { 0x13b1, 0 } },
+ { 0xab82, 1, { 0x13b2, 0 } },
+ { 0xab83, 1, { 0x13b3, 0 } },
+ { 0xab84, 1, { 0x13b4, 0 } },
+ { 0xab85, 1, { 0x13b5, 0 } },
+ { 0xab86, 1, { 0x13b6, 0 } },
+ { 0xab87, 1, { 0x13b7, 0 } },
+ { 0xab88, 1, { 0x13b8, 0 } },
+ { 0xab89, 1, { 0x13b9, 0 } },
+ { 0xab8a, 1, { 0x13ba, 0 } },
+ { 0xab8b, 1, { 0x13bb, 0 } },
+ { 0xab8c, 1, { 0x13bc, 0 } },
+ { 0xab8d, 1, { 0x13bd, 0 } },
+ { 0xab8e, 1, { 0x13be, 0 } },
+ { 0xab8f, 1, { 0x13bf, 0 } },
+ { 0xab90, 1, { 0x13c0, 0 } },
+ { 0xab91, 1, { 0x13c1, 0 } },
+ { 0xab92, 1, { 0x13c2, 0 } },
+ { 0xab93, 1, { 0x13c3, 0 } },
+ { 0xab94, 1, { 0x13c4, 0 } },
+ { 0xab95, 1, { 0x13c5, 0 } },
+ { 0xab96, 1, { 0x13c6, 0 } },
+ { 0xab97, 1, { 0x13c7, 0 } },
+ { 0xab98, 1, { 0x13c8, 0 } },
+ { 0xab99, 1, { 0x13c9, 0 } },
+ { 0xab9a, 1, { 0x13ca, 0 } },
+ { 0xab9b, 1, { 0x13cb, 0 } },
+ { 0xab9c, 1, { 0x13cc, 0 } },
+ { 0xab9d, 1, { 0x13cd, 0 } },
+ { 0xab9e, 1, { 0x13ce, 0 } },
+ { 0xab9f, 1, { 0x13cf, 0 } },
+ { 0xaba0, 1, { 0x13d0, 0 } },
+ { 0xaba1, 1, { 0x13d1, 0 } },
+ { 0xaba2, 1, { 0x13d2, 0 } },
+ { 0xaba3, 1, { 0x13d3, 0 } },
+ { 0xaba4, 1, { 0x13d4, 0 } },
+ { 0xaba5, 1, { 0x13d5, 0 } },
+ { 0xaba6, 1, { 0x13d6, 0 } },
+ { 0xaba7, 1, { 0x13d7, 0 } },
+ { 0xaba8, 1, { 0x13d8, 0 } },
+ { 0xaba9, 1, { 0x13d9, 0 } },
+ { 0xabaa, 1, { 0x13da, 0 } },
+ { 0xabab, 1, { 0x13db, 0 } },
+ { 0xabac, 1, { 0x13dc, 0 } },
+ { 0xabad, 1, { 0x13dd, 0 } },
+ { 0xabae, 1, { 0x13de, 0 } },
+ { 0xabaf, 1, { 0x13df, 0 } },
+ { 0xabb0, 1, { 0x13e0, 0 } },
+ { 0xabb1, 1, { 0x13e1, 0 } },
+ { 0xabb2, 1, { 0x13e2, 0 } },
+ { 0xabb3, 1, { 0x13e3, 0 } },
+ { 0xabb4, 1, { 0x13e4, 0 } },
+ { 0xabb5, 1, { 0x13e5, 0 } },
+ { 0xabb6, 1, { 0x13e6, 0 } },
+ { 0xabb7, 1, { 0x13e7, 0 } },
+ { 0xabb8, 1, { 0x13e8, 0 } },
+ { 0xabb9, 1, { 0x13e9, 0 } },
+ { 0xabba, 1, { 0x13ea, 0 } },
+ { 0xabbb, 1, { 0x13eb, 0 } },
+ { 0xabbc, 1, { 0x13ec, 0 } },
+ { 0xabbd, 1, { 0x13ed, 0 } },
+ { 0xabbe, 1, { 0x13ee, 0 } },
+ { 0xabbf, 1, { 0x13ef, 0 } },
+ { 0xf900, 1, { 0x8c48, 0 } },
+ { 0xf901, 1, { 0x66f4, 0 } },
+ { 0xf902, 1, { 0x8eca, 0 } },
+ { 0xf903, 1, { 0x8cc8, 0 } },
+ { 0xf904, 1, { 0x6ed1, 0 } },
+ { 0xf905, 1, { 0x4e32, 0 } },
+ { 0xf906, 1, { 0x53e5, 0 } },
+ { 0xf907, 1, { 0x9f9c, 0 } },
+ { 0xf908, 1, { 0x9f9c, 0 } },
+ { 0xf909, 1, { 0x5951, 0 } },
+ { 0xf90a, 1, { 0x91d1, 0 } },
+ { 0xf90b, 1, { 0x5587, 0 } },
+ { 0xf90c, 1, { 0x5948, 0 } },
+ { 0xf90d, 1, { 0x61f6, 0 } },
+ { 0xf90e, 1, { 0x7669, 0 } },
+ { 0xf90f, 1, { 0x7f85, 0 } },
+ { 0xf910, 1, { 0x863f, 0 } },
+ { 0xf911, 1, { 0x87ba, 0 } },
+ { 0xf912, 1, { 0x88f8, 0 } },
+ { 0xf913, 1, { 0x908f, 0 } },
+ { 0xf914, 1, { 0x6a02, 0 } },
+ { 0xf915, 1, { 0x6d1b, 0 } },
+ { 0xf916, 1, { 0x70d9, 0 } },
+ { 0xf917, 1, { 0x73de, 0 } },
+ { 0xf918, 1, { 0x843d, 0 } },
+ { 0xf919, 1, { 0x916a, 0 } },
+ { 0xf91a, 1, { 0x99f1, 0 } },
+ { 0xf91b, 1, { 0x4e82, 0 } },
+ { 0xf91c, 1, { 0x5375, 0 } },
+ { 0xf91d, 1, { 0x6b04, 0 } },
+ { 0xf91e, 1, { 0x721b, 0 } },
+ { 0xf91f, 1, { 0x862d, 0 } },
+ { 0xf920, 1, { 0x9e1e, 0 } },
+ { 0xf921, 1, { 0x5d50, 0 } },
+ { 0xf922, 1, { 0x6feb, 0 } },
+ { 0xf923, 1, { 0x85cd, 0 } },
+ { 0xf924, 1, { 0x8964, 0 } },
+ { 0xf925, 1, { 0x62c9, 0 } },
+ { 0xf926, 1, { 0x81d8, 0 } },
+ { 0xf927, 1, { 0x881f, 0 } },
+ { 0xf928, 1, { 0x5eca, 0 } },
+ { 0xf929, 1, { 0x6717, 0 } },
+ { 0xf92a, 1, { 0x6d6a, 0 } },
+ { 0xf92b, 1, { 0x72fc, 0 } },
+ { 0xf92c, 1, { 0x90ce, 0 } },
+ { 0xf92d, 1, { 0x4f86, 0 } },
+ { 0xf92e, 1, { 0x51b7, 0 } },
+ { 0xf92f, 1, { 0x52de, 0 } },
+ { 0xf930, 1, { 0x64c4, 0 } },
+ { 0xf931, 1, { 0x6ad3, 0 } },
+ { 0xf932, 1, { 0x7210, 0 } },
+ { 0xf933, 1, { 0x76e7, 0 } },
+ { 0xf934, 1, { 0x8001, 0 } },
+ { 0xf935, 1, { 0x8606, 0 } },
+ { 0xf936, 1, { 0x865c, 0 } },
+ { 0xf937, 1, { 0x8def, 0 } },
+ { 0xf938, 1, { 0x9732, 0 } },
+ { 0xf939, 1, { 0x9b6f, 0 } },
+ { 0xf93a, 1, { 0x9dfa, 0 } },
+ { 0xf93b, 1, { 0x788c, 0 } },
+ { 0xf93c, 1, { 0x797f, 0 } },
+ { 0xf93d, 1, { 0x7da0, 0 } },
+ { 0xf93e, 1, { 0x83c9, 0 } },
+ { 0xf93f, 1, { 0x9304, 0 } },
+ { 0xf940, 1, { 0x9e7f, 0 } },
+ { 0xf941, 1, { 0x8ad6, 0 } },
+ { 0xf942, 1, { 0x58df, 0 } },
+ { 0xf943, 1, { 0x5f04, 0 } },
+ { 0xf944, 1, { 0x7c60, 0 } },
+ { 0xf945, 1, { 0x807e, 0 } },
+ { 0xf946, 1, { 0x7262, 0 } },
+ { 0xf947, 1, { 0x78ca, 0 } },
+ { 0xf948, 1, { 0x8cc2, 0 } },
+ { 0xf949, 1, { 0x96f7, 0 } },
+ { 0xf94a, 1, { 0x58d8, 0 } },
+ { 0xf94b, 1, { 0x5c62, 0 } },
+ { 0xf94c, 1, { 0x6a13, 0 } },
+ { 0xf94d, 1, { 0x6dda, 0 } },
+ { 0xf94e, 1, { 0x6f0f, 0 } },
+ { 0xf94f, 1, { 0x7d2f, 0 } },
+ { 0xf950, 1, { 0x7e37, 0 } },
+ { 0xf951, 1, { 0x964b, 0 } },
+ { 0xf952, 1, { 0x52d2, 0 } },
+ { 0xf953, 1, { 0x808b, 0 } },
+ { 0xf954, 1, { 0x51dc, 0 } },
+ { 0xf955, 1, { 0x51cc, 0 } },
+ { 0xf956, 1, { 0x7a1c, 0 } },
+ { 0xf957, 1, { 0x7dbe, 0 } },
+ { 0xf958, 1, { 0x83f1, 0 } },
+ { 0xf959, 1, { 0x9675, 0 } },
+ { 0xf95a, 1, { 0x8b80, 0 } },
+ { 0xf95b, 1, { 0x62cf, 0 } },
+ { 0xf95c, 1, { 0x6a02, 0 } },
+ { 0xf95d, 1, { 0x8afe, 0 } },
+ { 0xf95e, 1, { 0x4e39, 0 } },
+ { 0xf95f, 1, { 0x5be7, 0 } },
+ { 0xf960, 1, { 0x6012, 0 } },
+ { 0xf961, 1, { 0x7387, 0 } },
+ { 0xf962, 1, { 0x7570, 0 } },
+ { 0xf963, 1, { 0x5317, 0 } },
+ { 0xf964, 1, { 0x78fb, 0 } },
+ { 0xf965, 1, { 0x4fbf, 0 } },
+ { 0xf966, 1, { 0x5fa9, 0 } },
+ { 0xf967, 1, { 0x4e0d, 0 } },
+ { 0xf968, 1, { 0x6ccc, 0 } },
+ { 0xf969, 1, { 0x6578, 0 } },
+ { 0xf96a, 1, { 0x7d22, 0 } },
+ { 0xf96b, 1, { 0x53c3, 0 } },
+ { 0xf96c, 1, { 0x585e, 0 } },
+ { 0xf96d, 1, { 0x7701, 0 } },
+ { 0xf96e, 1, { 0x8449, 0 } },
+ { 0xf96f, 1, { 0x8aaa, 0 } },
+ { 0xf970, 1, { 0x6bba, 0 } },
+ { 0xf971, 1, { 0x8fb0, 0 } },
+ { 0xf972, 1, { 0x6c88, 0 } },
+ { 0xf973, 1, { 0x62fe, 0 } },
+ { 0xf974, 1, { 0x82e5, 0 } },
+ { 0xf975, 1, { 0x63a0, 0 } },
+ { 0xf976, 1, { 0x7565, 0 } },
+ { 0xf977, 1, { 0x4eae, 0 } },
+ { 0xf978, 1, { 0x5169, 0 } },
+ { 0xf979, 1, { 0x51c9, 0 } },
+ { 0xf97a, 1, { 0x6881, 0 } },
+ { 0xf97b, 1, { 0x7ce7, 0 } },
+ { 0xf97c, 1, { 0x826f, 0 } },
+ { 0xf97d, 1, { 0x8ad2, 0 } },
+ { 0xf97e, 1, { 0x91cf, 0 } },
+ { 0xf97f, 1, { 0x52f5, 0 } },
+ { 0xf980, 1, { 0x5442, 0 } },
+ { 0xf981, 1, { 0x5973, 0 } },
+ { 0xf982, 1, { 0x5eec, 0 } },
+ { 0xf983, 1, { 0x65c5, 0 } },
+ { 0xf984, 1, { 0x6ffe, 0 } },
+ { 0xf985, 1, { 0x792a, 0 } },
+ { 0xf986, 1, { 0x95ad, 0 } },
+ { 0xf987, 1, { 0x9a6a, 0 } },
+ { 0xf988, 1, { 0x9e97, 0 } },
+ { 0xf989, 1, { 0x9ece, 0 } },
+ { 0xf98a, 1, { 0x529b, 0 } },
+ { 0xf98b, 1, { 0x66c6, 0 } },
+ { 0xf98c, 1, { 0x6b77, 0 } },
+ { 0xf98d, 1, { 0x8f62, 0 } },
+ { 0xf98e, 1, { 0x5e74, 0 } },
+ { 0xf98f, 1, { 0x6190, 0 } },
+ { 0xf990, 1, { 0x6200, 0 } },
+ { 0xf991, 1, { 0x649a, 0 } },
+ { 0xf992, 1, { 0x6f23, 0 } },
+ { 0xf993, 1, { 0x7149, 0 } },
+ { 0xf994, 1, { 0x7489, 0 } },
+ { 0xf995, 1, { 0x79ca, 0 } },
+ { 0xf996, 1, { 0x7df4, 0 } },
+ { 0xf997, 1, { 0x806f, 0 } },
+ { 0xf998, 1, { 0x8f26, 0 } },
+ { 0xf999, 1, { 0x84ee, 0 } },
+ { 0xf99a, 1, { 0x9023, 0 } },
+ { 0xf99b, 1, { 0x934a, 0 } },
+ { 0xf99c, 1, { 0x5217, 0 } },
+ { 0xf99d, 1, { 0x52a3, 0 } },
+ { 0xf99e, 1, { 0x54bd, 0 } },
+ { 0xf99f, 1, { 0x70c8, 0 } },
+ { 0xf9a0, 1, { 0x88c2, 0 } },
+ { 0xf9a1, 1, { 0x8aaa, 0 } },
+ { 0xf9a2, 1, { 0x5ec9, 0 } },
+ { 0xf9a3, 1, { 0x5ff5, 0 } },
+ { 0xf9a4, 1, { 0x637b, 0 } },
+ { 0xf9a5, 1, { 0x6bae, 0 } },
+ { 0xf9a6, 1, { 0x7c3e, 0 } },
+ { 0xf9a7, 1, { 0x7375, 0 } },
+ { 0xf9a8, 1, { 0x4ee4, 0 } },
+ { 0xf9a9, 1, { 0x56f9, 0 } },
+ { 0xf9aa, 1, { 0x5be7, 0 } },
+ { 0xf9ab, 1, { 0x5dba, 0 } },
+ { 0xf9ac, 1, { 0x601c, 0 } },
+ { 0xf9ad, 1, { 0x73b2, 0 } },
+ { 0xf9ae, 1, { 0x7469, 0 } },
+ { 0xf9af, 1, { 0x7f9a, 0 } },
+ { 0xf9b0, 1, { 0x8046, 0 } },
+ { 0xf9b1, 1, { 0x9234, 0 } },
+ { 0xf9b2, 1, { 0x96f6, 0 } },
+ { 0xf9b3, 1, { 0x9748, 0 } },
+ { 0xf9b4, 1, { 0x9818, 0 } },
+ { 0xf9b5, 1, { 0x4f8b, 0 } },
+ { 0xf9b6, 1, { 0x79ae, 0 } },
+ { 0xf9b7, 1, { 0x91b4, 0 } },
+ { 0xf9b8, 1, { 0x96b8, 0 } },
+ { 0xf9b9, 1, { 0x60e1, 0 } },
+ { 0xf9ba, 1, { 0x4e86, 0 } },
+ { 0xf9bb, 1, { 0x50da, 0 } },
+ { 0xf9bc, 1, { 0x5bee, 0 } },
+ { 0xf9bd, 1, { 0x5c3f, 0 } },
+ { 0xf9be, 1, { 0x6599, 0 } },
+ { 0xf9bf, 1, { 0x6a02, 0 } },
+ { 0xf9c0, 1, { 0x71ce, 0 } },
+ { 0xf9c1, 1, { 0x7642, 0 } },
+ { 0xf9c2, 1, { 0x84fc, 0 } },
+ { 0xf9c3, 1, { 0x907c, 0 } },
+ { 0xf9c4, 1, { 0x9f8d, 0 } },
+ { 0xf9c5, 1, { 0x6688, 0 } },
+ { 0xf9c6, 1, { 0x962e, 0 } },
+ { 0xf9c7, 1, { 0x5289, 0 } },
+ { 0xf9c8, 1, { 0x677b, 0 } },
+ { 0xf9c9, 1, { 0x67f3, 0 } },
+ { 0xf9ca, 1, { 0x6d41, 0 } },
+ { 0xf9cb, 1, { 0x6e9c, 0 } },
+ { 0xf9cc, 1, { 0x7409, 0 } },
+ { 0xf9cd, 1, { 0x7559, 0 } },
+ { 0xf9ce, 1, { 0x786b, 0 } },
+ { 0xf9cf, 1, { 0x7d10, 0 } },
+ { 0xf9d0, 1, { 0x985e, 0 } },
+ { 0xf9d1, 1, { 0x516d, 0 } },
+ { 0xf9d2, 1, { 0x622e, 0 } },
+ { 0xf9d3, 1, { 0x9678, 0 } },
+ { 0xf9d4, 1, { 0x502b, 0 } },
+ { 0xf9d5, 1, { 0x5d19, 0 } },
+ { 0xf9d6, 1, { 0x6dea, 0 } },
+ { 0xf9d7, 1, { 0x8f2a, 0 } },
+ { 0xf9d8, 1, { 0x5f8b, 0 } },
+ { 0xf9d9, 1, { 0x6144, 0 } },
+ { 0xf9da, 1, { 0x6817, 0 } },
+ { 0xf9db, 1, { 0x7387, 0 } },
+ { 0xf9dc, 1, { 0x9686, 0 } },
+ { 0xf9dd, 1, { 0x5229, 0 } },
+ { 0xf9de, 1, { 0x540f, 0 } },
+ { 0xf9df, 1, { 0x5c65, 0 } },
+ { 0xf9e0, 1, { 0x6613, 0 } },
+ { 0xf9e1, 1, { 0x674e, 0 } },
+ { 0xf9e2, 1, { 0x68a8, 0 } },
+ { 0xf9e3, 1, { 0x6ce5, 0 } },
+ { 0xf9e4, 1, { 0x7406, 0 } },
+ { 0xf9e5, 1, { 0x75e2, 0 } },
+ { 0xf9e6, 1, { 0x7f79, 0 } },
+ { 0xf9e7, 1, { 0x88cf, 0 } },
+ { 0xf9e8, 1, { 0x88e1, 0 } },
+ { 0xf9e9, 1, { 0x91cc, 0 } },
+ { 0xf9ea, 1, { 0x96e2, 0 } },
+ { 0xf9eb, 1, { 0x533f, 0 } },
+ { 0xf9ec, 1, { 0x6eba, 0 } },
+ { 0xf9ed, 1, { 0x541d, 0 } },
+ { 0xf9ee, 1, { 0x71d0, 0 } },
+ { 0xf9ef, 1, { 0x7498, 0 } },
+ { 0xf9f0, 1, { 0x85fa, 0 } },
+ { 0xf9f1, 1, { 0x96a3, 0 } },
+ { 0xf9f2, 1, { 0x9c57, 0 } },
+ { 0xf9f3, 1, { 0x9e9f, 0 } },
+ { 0xf9f4, 1, { 0x6797, 0 } },
+ { 0xf9f5, 1, { 0x6dcb, 0 } },
+ { 0xf9f6, 1, { 0x81e8, 0 } },
+ { 0xf9f7, 1, { 0x7acb, 0 } },
+ { 0xf9f8, 1, { 0x7b20, 0 } },
+ { 0xf9f9, 1, { 0x7c92, 0 } },
+ { 0xf9fa, 1, { 0x72c0, 0 } },
+ { 0xf9fb, 1, { 0x7099, 0 } },
+ { 0xf9fc, 1, { 0x8b58, 0 } },
+ { 0xf9fd, 1, { 0x4ec0, 0 } },
+ { 0xf9fe, 1, { 0x8336, 0 } },
+ { 0xf9ff, 1, { 0x523a, 0 } },
+ { 0xfa00, 1, { 0x5207, 0 } },
+ { 0xfa01, 1, { 0x5ea6, 0 } },
+ { 0xfa02, 1, { 0x62d3, 0 } },
+ { 0xfa03, 1, { 0x7cd6, 0 } },
+ { 0xfa04, 1, { 0x5b85, 0 } },
+ { 0xfa05, 1, { 0x6d1e, 0 } },
+ { 0xfa06, 1, { 0x66b4, 0 } },
+ { 0xfa07, 1, { 0x8f3b, 0 } },
+ { 0xfa08, 1, { 0x884c, 0 } },
+ { 0xfa09, 1, { 0x964d, 0 } },
+ { 0xfa0a, 1, { 0x898b, 0 } },
+ { 0xfa0b, 1, { 0x5ed3, 0 } },
+ { 0xfa0c, 1, { 0x5140, 0 } },
+ { 0xfa0d, 1, { 0x55c0, 0 } },
+ { 0xfa10, 1, { 0x585a, 0 } },
+ { 0xfa12, 1, { 0x6674, 0 } },
+ { 0xfa15, 1, { 0x51de, 0 } },
+ { 0xfa16, 1, { 0x732a, 0 } },
+ { 0xfa17, 1, { 0x76ca, 0 } },
+ { 0xfa18, 1, { 0x793c, 0 } },
+ { 0xfa19, 1, { 0x795e, 0 } },
+ { 0xfa1a, 1, { 0x7965, 0 } },
+ { 0xfa1b, 1, { 0x798f, 0 } },
+ { 0xfa1c, 1, { 0x9756, 0 } },
+ { 0xfa1d, 1, { 0x7cbe, 0 } },
+ { 0xfa1e, 1, { 0x7fbd, 0 } },
+ { 0xfa20, 1, { 0x8612, 0 } },
+ { 0xfa22, 1, { 0x8af8, 0 } },
+ { 0xfa25, 1, { 0x9038, 0 } },
+ { 0xfa26, 1, { 0x90fd, 0 } },
+ { 0xfa2a, 1, { 0x98ef, 0 } },
+ { 0xfa2b, 1, { 0x98fc, 0 } },
+ { 0xfa2c, 1, { 0x9928, 0 } },
+ { 0xfa2d, 1, { 0x9db4, 0 } },
+ { 0xfa2e, 1, { 0x90de, 0 } },
+ { 0xfa2f, 1, { 0x96b7, 0 } },
+ { 0xfa30, 1, { 0x4fae, 0 } },
+ { 0xfa31, 1, { 0x50e7, 0 } },
+ { 0xfa32, 1, { 0x514d, 0 } },
+ { 0xfa33, 1, { 0x52c9, 0 } },
+ { 0xfa34, 1, { 0x52e4, 0 } },
+ { 0xfa35, 1, { 0x5351, 0 } },
+ { 0xfa36, 1, { 0x559d, 0 } },
+ { 0xfa37, 1, { 0x5606, 0 } },
+ { 0xfa38, 1, { 0x5668, 0 } },
+ { 0xfa39, 1, { 0x5840, 0 } },
+ { 0xfa3a, 1, { 0x58a8, 0 } },
+ { 0xfa3b, 1, { 0x5c64, 0 } },
+ { 0xfa3c, 1, { 0x5c6e, 0 } },
+ { 0xfa3d, 1, { 0x6094, 0 } },
+ { 0xfa3e, 1, { 0x6168, 0 } },
+ { 0xfa3f, 1, { 0x618e, 0 } },
+ { 0xfa40, 1, { 0x61f2, 0 } },
+ { 0xfa41, 1, { 0x654f, 0 } },
+ { 0xfa42, 1, { 0x65e2, 0 } },
+ { 0xfa43, 1, { 0x6691, 0 } },
+ { 0xfa44, 1, { 0x6885, 0 } },
+ { 0xfa45, 1, { 0x6d77, 0 } },
+ { 0xfa46, 1, { 0x6e1a, 0 } },
+ { 0xfa47, 1, { 0x6f22, 0 } },
+ { 0xfa48, 1, { 0x716e, 0 } },
+ { 0xfa49, 1, { 0x722b, 0 } },
+ { 0xfa4a, 1, { 0x7422, 0 } },
+ { 0xfa4b, 1, { 0x7891, 0 } },
+ { 0xfa4c, 1, { 0x793e, 0 } },
+ { 0xfa4d, 1, { 0x7949, 0 } },
+ { 0xfa4e, 1, { 0x7948, 0 } },
+ { 0xfa4f, 1, { 0x7950, 0 } },
+ { 0xfa50, 1, { 0x7956, 0 } },
+ { 0xfa51, 1, { 0x795d, 0 } },
+ { 0xfa52, 1, { 0x798d, 0 } },
+ { 0xfa53, 1, { 0x798e, 0 } },
+ { 0xfa54, 1, { 0x7a40, 0 } },
+ { 0xfa55, 1, { 0x7a81, 0 } },
+ { 0xfa56, 1, { 0x7bc0, 0 } },
+ { 0xfa57, 1, { 0x7df4, 0 } },
+ { 0xfa58, 1, { 0x7e09, 0 } },
+ { 0xfa59, 1, { 0x7e41, 0 } },
+ { 0xfa5a, 1, { 0x7f72, 0 } },
+ { 0xfa5b, 1, { 0x8005, 0 } },
+ { 0xfa5c, 1, { 0x81ed, 0 } },
+ { 0xfa5d, 1, { 0x8279, 0 } },
+ { 0xfa5e, 1, { 0x8279, 0 } },
+ { 0xfa5f, 1, { 0x8457, 0 } },
+ { 0xfa60, 1, { 0x8910, 0 } },
+ { 0xfa61, 1, { 0x8996, 0 } },
+ { 0xfa62, 1, { 0x8b01, 0 } },
+ { 0xfa63, 1, { 0x8b39, 0 } },
+ { 0xfa64, 1, { 0x8cd3, 0 } },
+ { 0xfa65, 1, { 0x8d08, 0 } },
+ { 0xfa66, 1, { 0x8fb6, 0 } },
+ { 0xfa67, 1, { 0x9038, 0 } },
+ { 0xfa68, 1, { 0x96e3, 0 } },
+ { 0xfa69, 1, { 0x97ff, 0 } },
+ { 0xfa6a, 1, { 0x983b, 0 } },
+ { 0xfa6b, 1, { 0x6075, 0 } },
+ { 0xfa6c, 2, { 0xd850, 0xdeee } },
+ { 0xfa6d, 1, { 0x8218, 0 } },
+ { 0xfa70, 1, { 0x4e26, 0 } },
+ { 0xfa71, 1, { 0x51b5, 0 } },
+ { 0xfa72, 1, { 0x5168, 0 } },
+ { 0xfa73, 1, { 0x4f80, 0 } },
+ { 0xfa74, 1, { 0x5145, 0 } },
+ { 0xfa75, 1, { 0x5180, 0 } },
+ { 0xfa76, 1, { 0x52c7, 0 } },
+ { 0xfa77, 1, { 0x52fa, 0 } },
+ { 0xfa78, 1, { 0x559d, 0 } },
+ { 0xfa79, 1, { 0x5555, 0 } },
+ { 0xfa7a, 1, { 0x5599, 0 } },
+ { 0xfa7b, 1, { 0x55e2, 0 } },
+ { 0xfa7c, 1, { 0x585a, 0 } },
+ { 0xfa7d, 1, { 0x58b3, 0 } },
+ { 0xfa7e, 1, { 0x5944, 0 } },
+ { 0xfa7f, 1, { 0x5954, 0 } },
+ { 0xfa80, 1, { 0x5a62, 0 } },
+ { 0xfa81, 1, { 0x5b28, 0 } },
+ { 0xfa82, 1, { 0x5ed2, 0 } },
+ { 0xfa83, 1, { 0x5ed9, 0 } },
+ { 0xfa84, 1, { 0x5f69, 0 } },
+ { 0xfa85, 1, { 0x5fad, 0 } },
+ { 0xfa86, 1, { 0x60d8, 0 } },
+ { 0xfa87, 1, { 0x614e, 0 } },
+ { 0xfa88, 1, { 0x6108, 0 } },
+ { 0xfa89, 1, { 0x618e, 0 } },
+ { 0xfa8a, 1, { 0x6160, 0 } },
+ { 0xfa8b, 1, { 0x61f2, 0 } },
+ { 0xfa8c, 1, { 0x6234, 0 } },
+ { 0xfa8d, 1, { 0x63c4, 0 } },
+ { 0xfa8e, 1, { 0x641c, 0 } },
+ { 0xfa8f, 1, { 0x6452, 0 } },
+ { 0xfa90, 1, { 0x6556, 0 } },
+ { 0xfa91, 1, { 0x6674, 0 } },
+ { 0xfa92, 1, { 0x6717, 0 } },
+ { 0xfa93, 1, { 0x671b, 0 } },
+ { 0xfa94, 1, { 0x6756, 0 } },
+ { 0xfa95, 1, { 0x6b79, 0 } },
+ { 0xfa96, 1, { 0x6bba, 0 } },
+ { 0xfa97, 1, { 0x6d41, 0 } },
+ { 0xfa98, 1, { 0x6edb, 0 } },
+ { 0xfa99, 1, { 0x6ecb, 0 } },
+ { 0xfa9a, 1, { 0x6f22, 0 } },
+ { 0xfa9b, 1, { 0x701e, 0 } },
+ { 0xfa9c, 1, { 0x716e, 0 } },
+ { 0xfa9d, 1, { 0x77a7, 0 } },
+ { 0xfa9e, 1, { 0x7235, 0 } },
+ { 0xfa9f, 1, { 0x72af, 0 } },
+ { 0xfaa0, 1, { 0x732a, 0 } },
+ { 0xfaa1, 1, { 0x7471, 0 } },
+ { 0xfaa2, 1, { 0x7506, 0 } },
+ { 0xfaa3, 1, { 0x753b, 0 } },
+ { 0xfaa4, 1, { 0x761d, 0 } },
+ { 0xfaa5, 1, { 0x761f, 0 } },
+ { 0xfaa6, 1, { 0x76ca, 0 } },
+ { 0xfaa7, 1, { 0x76db, 0 } },
+ { 0xfaa8, 1, { 0x76f4, 0 } },
+ { 0xfaa9, 1, { 0x774a, 0 } },
+ { 0xfaaa, 1, { 0x7740, 0 } },
+ { 0xfaab, 1, { 0x78cc, 0 } },
+ { 0xfaac, 1, { 0x7ab1, 0 } },
+ { 0xfaad, 1, { 0x7bc0, 0 } },
+ { 0xfaae, 1, { 0x7c7b, 0 } },
+ { 0xfaaf, 1, { 0x7d5b, 0 } },
+ { 0xfab0, 1, { 0x7df4, 0 } },
+ { 0xfab1, 1, { 0x7f3e, 0 } },
+ { 0xfab2, 1, { 0x8005, 0 } },
+ { 0xfab3, 1, { 0x8352, 0 } },
+ { 0xfab4, 1, { 0x83ef, 0 } },
+ { 0xfab5, 1, { 0x8779, 0 } },
+ { 0xfab6, 1, { 0x8941, 0 } },
+ { 0xfab7, 1, { 0x8986, 0 } },
+ { 0xfab8, 1, { 0x8996, 0 } },
+ { 0xfab9, 1, { 0x8abf, 0 } },
+ { 0xfaba, 1, { 0x8af8, 0 } },
+ { 0xfabb, 1, { 0x8acb, 0 } },
+ { 0xfabc, 1, { 0x8b01, 0 } },
+ { 0xfabd, 1, { 0x8afe, 0 } },
+ { 0xfabe, 1, { 0x8aed, 0 } },
+ { 0xfabf, 1, { 0x8b39, 0 } },
+ { 0xfac0, 1, { 0x8b8a, 0 } },
+ { 0xfac1, 1, { 0x8d08, 0 } },
+ { 0xfac2, 1, { 0x8f38, 0 } },
+ { 0xfac3, 1, { 0x9072, 0 } },
+ { 0xfac4, 1, { 0x9199, 0 } },
+ { 0xfac5, 1, { 0x9276, 0 } },
+ { 0xfac6, 1, { 0x967c, 0 } },
+ { 0xfac7, 1, { 0x96e3, 0 } },
+ { 0xfac8, 1, { 0x9756, 0 } },
+ { 0xfac9, 1, { 0x97db, 0 } },
+ { 0xfaca, 1, { 0x97ff, 0 } },
+ { 0xfacb, 1, { 0x980b, 0 } },
+ { 0xfacc, 1, { 0x983b, 0 } },
+ { 0xfacd, 1, { 0x9b12, 0 } },
+ { 0xface, 1, { 0x9f9c, 0 } },
+ { 0xfacf, 2, { 0xd84a, 0xdc4a } },
+ { 0xfad0, 2, { 0xd84a, 0xdc44 } },
+ { 0xfad1, 2, { 0xd84c, 0xdfd5 } },
+ { 0xfad2, 1, { 0x3b9d, 0 } },
+ { 0xfad3, 1, { 0x4018, 0 } },
+ { 0xfad4, 1, { 0x4039, 0 } },
+ { 0xfad5, 2, { 0xd854, 0xde49 } },
+ { 0xfad6, 2, { 0xd857, 0xdcd0 } },
+ { 0xfad7, 2, { 0xd85f, 0xded3 } },
+ { 0xfad8, 1, { 0x9f43, 0 } },
+ { 0xfad9, 1, { 0x9f8e, 0 } },
+ { 0xfb00, 2, { 0x66, 0x66 } },
+ { 0xfb01, 2, { 0x66, 0x69 } },
+ { 0xfb02, 2, { 0x66, 0x6c } },
+ { 0xfb03, 3, { 703, 0 } },
+ { 0xfb04, 3, { 721, 0 } },
+ { 0xfb05, 2, { 0x73, 0x74 } },
+ { 0xfb06, 2, { 0x73, 0x74 } },
+ { 0xfb13, 2, { 0x574, 0x576 } },
+ { 0xfb14, 2, { 0x574, 0x565 } },
+ { 0xfb15, 2, { 0x574, 0x56b } },
+ { 0xfb16, 2, { 0x57e, 0x576 } },
+ { 0xfb17, 2, { 0x574, 0x56d } },
+ { 0xfb1d, 2, { 0x5d9, 0x5b4 } },
+ { 0xfb1f, 2, { 0x5f2, 0x5b7 } },
+ { 0xfb20, 1, { 0x5e2, 0 } },
+ { 0xfb21, 1, { 0x5d0, 0 } },
+ { 0xfb22, 1, { 0x5d3, 0 } },
+ { 0xfb23, 1, { 0x5d4, 0 } },
+ { 0xfb24, 1, { 0x5db, 0 } },
+ { 0xfb25, 1, { 0x5dc, 0 } },
+ { 0xfb26, 1, { 0x5dd, 0 } },
+ { 0xfb27, 1, { 0x5e8, 0 } },
+ { 0xfb28, 1, { 0x5ea, 0 } },
+ { 0xfb2a, 2, { 0x5e9, 0x5c1 } },
+ { 0xfb2b, 2, { 0x5e9, 0x5c2 } },
+ { 0xfb2c, 3, { 109, 0 } },
+ { 0xfb2d, 3, { 504, 0 } },
+ { 0xfb2e, 2, { 0x5d0, 0x5b7 } },
+ { 0xfb2f, 2, { 0x5d0, 0x5b8 } },
+ { 0xfb30, 2, { 0x5d0, 0x5bc } },
+ { 0xfb31, 2, { 0x5d1, 0x5bc } },
+ { 0xfb32, 2, { 0x5d2, 0x5bc } },
+ { 0xfb33, 2, { 0x5d3, 0x5bc } },
+ { 0xfb34, 2, { 0x5d4, 0x5bc } },
+ { 0xfb35, 2, { 0x5d5, 0x5bc } },
+ { 0xfb36, 2, { 0x5d6, 0x5bc } },
+ { 0xfb38, 2, { 0x5d8, 0x5bc } },
+ { 0xfb39, 2, { 0x5d9, 0x5bc } },
+ { 0xfb3a, 2, { 0x5da, 0x5bc } },
+ { 0xfb3b, 2, { 0x5db, 0x5bc } },
+ { 0xfb3c, 2, { 0x5dc, 0x5bc } },
+ { 0xfb3e, 2, { 0x5de, 0x5bc } },
+ { 0xfb40, 2, { 0x5e0, 0x5bc } },
+ { 0xfb41, 2, { 0x5e1, 0x5bc } },
+ { 0xfb43, 2, { 0x5e3, 0x5bc } },
+ { 0xfb44, 2, { 0x5e4, 0x5bc } },
+ { 0xfb46, 2, { 0x5e6, 0x5bc } },
+ { 0xfb47, 2, { 0x5e7, 0x5bc } },
+ { 0xfb48, 2, { 0x5e8, 0x5bc } },
+ { 0xfb49, 2, { 0x5e9, 0x5bc } },
+ { 0xfb4a, 2, { 0x5ea, 0x5bc } },
+ { 0xfb4b, 2, { 0x5d5, 0x5b9 } },
+ { 0xfb4c, 2, { 0x5d1, 0x5bf } },
+ { 0xfb4d, 2, { 0x5db, 0x5bf } },
+ { 0xfb4e, 2, { 0x5e4, 0x5bf } },
+ { 0xfb4f, 2, { 0x5d0, 0x5dc } },
+ { 0xfb50, 1, { 0x671, 0 } },
+ { 0xfb51, 1, { 0x671, 0 } },
+ { 0xfb52, 1, { 0x67b, 0 } },
+ { 0xfb53, 1, { 0x67b, 0 } },
+ { 0xfb54, 1, { 0x67b, 0 } },
+ { 0xfb55, 1, { 0x67b, 0 } },
+ { 0xfb56, 1, { 0x67e, 0 } },
+ { 0xfb57, 1, { 0x67e, 0 } },
+ { 0xfb58, 1, { 0x67e, 0 } },
+ { 0xfb59, 1, { 0x67e, 0 } },
+ { 0xfb5a, 1, { 0x680, 0 } },
+ { 0xfb5b, 1, { 0x680, 0 } },
+ { 0xfb5c, 1, { 0x680, 0 } },
+ { 0xfb5d, 1, { 0x680, 0 } },
+ { 0xfb5e, 1, { 0x67a, 0 } },
+ { 0xfb5f, 1, { 0x67a, 0 } },
+ { 0xfb60, 1, { 0x67a, 0 } },
+ { 0xfb61, 1, { 0x67a, 0 } },
+ { 0xfb62, 1, { 0x67f, 0 } },
+ { 0xfb63, 1, { 0x67f, 0 } },
+ { 0xfb64, 1, { 0x67f, 0 } },
+ { 0xfb65, 1, { 0x67f, 0 } },
+ { 0xfb66, 1, { 0x679, 0 } },
+ { 0xfb67, 1, { 0x679, 0 } },
+ { 0xfb68, 1, { 0x679, 0 } },
+ { 0xfb69, 1, { 0x679, 0 } },
+ { 0xfb6a, 1, { 0x6a4, 0 } },
+ { 0xfb6b, 1, { 0x6a4, 0 } },
+ { 0xfb6c, 1, { 0x6a4, 0 } },
+ { 0xfb6d, 1, { 0x6a4, 0 } },
+ { 0xfb6e, 1, { 0x6a6, 0 } },
+ { 0xfb6f, 1, { 0x6a6, 0 } },
+ { 0xfb70, 1, { 0x6a6, 0 } },
+ { 0xfb71, 1, { 0x6a6, 0 } },
+ { 0xfb72, 1, { 0x684, 0 } },
+ { 0xfb73, 1, { 0x684, 0 } },
+ { 0xfb74, 1, { 0x684, 0 } },
+ { 0xfb75, 1, { 0x684, 0 } },
+ { 0xfb76, 1, { 0x683, 0 } },
+ { 0xfb77, 1, { 0x683, 0 } },
+ { 0xfb78, 1, { 0x683, 0 } },
+ { 0xfb79, 1, { 0x683, 0 } },
+ { 0xfb7a, 1, { 0x686, 0 } },
+ { 0xfb7b, 1, { 0x686, 0 } },
+ { 0xfb7c, 1, { 0x686, 0 } },
+ { 0xfb7d, 1, { 0x686, 0 } },
+ { 0xfb7e, 1, { 0x687, 0 } },
+ { 0xfb7f, 1, { 0x687, 0 } },
+ { 0xfb80, 1, { 0x687, 0 } },
+ { 0xfb81, 1, { 0x687, 0 } },
+ { 0xfb82, 1, { 0x68d, 0 } },
+ { 0xfb83, 1, { 0x68d, 0 } },
+ { 0xfb84, 1, { 0x68c, 0 } },
+ { 0xfb85, 1, { 0x68c, 0 } },
+ { 0xfb86, 1, { 0x68e, 0 } },
+ { 0xfb87, 1, { 0x68e, 0 } },
+ { 0xfb88, 1, { 0x688, 0 } },
+ { 0xfb89, 1, { 0x688, 0 } },
+ { 0xfb8a, 1, { 0x698, 0 } },
+ { 0xfb8b, 1, { 0x698, 0 } },
+ { 0xfb8c, 1, { 0x691, 0 } },
+ { 0xfb8d, 1, { 0x691, 0 } },
+ { 0xfb8e, 1, { 0x6a9, 0 } },
+ { 0xfb8f, 1, { 0x6a9, 0 } },
+ { 0xfb90, 1, { 0x6a9, 0 } },
+ { 0xfb91, 1, { 0x6a9, 0 } },
+ { 0xfb92, 1, { 0x6af, 0 } },
+ { 0xfb93, 1, { 0x6af, 0 } },
+ { 0xfb94, 1, { 0x6af, 0 } },
+ { 0xfb95, 1, { 0x6af, 0 } },
+ { 0xfb96, 1, { 0x6b3, 0 } },
+ { 0xfb97, 1, { 0x6b3, 0 } },
+ { 0xfb98, 1, { 0x6b3, 0 } },
+ { 0xfb99, 1, { 0x6b3, 0 } },
+ { 0xfb9a, 1, { 0x6b1, 0 } },
+ { 0xfb9b, 1, { 0x6b1, 0 } },
+ { 0xfb9c, 1, { 0x6b1, 0 } },
+ { 0xfb9d, 1, { 0x6b1, 0 } },
+ { 0xfb9e, 1, { 0x6ba, 0 } },
+ { 0xfb9f, 1, { 0x6ba, 0 } },
+ { 0xfba0, 1, { 0x6bb, 0 } },
+ { 0xfba1, 1, { 0x6bb, 0 } },
+ { 0xfba2, 1, { 0x6bb, 0 } },
+ { 0xfba3, 1, { 0x6bb, 0 } },
+ { 0xfba4, 1, { 0x6c0, 0 } },
+ { 0xfba5, 1, { 0x6c0, 0 } },
+ { 0xfba6, 1, { 0x6c1, 0 } },
+ { 0xfba7, 1, { 0x6c1, 0 } },
+ { 0xfba8, 1, { 0x6c1, 0 } },
+ { 0xfba9, 1, { 0x6c1, 0 } },
+ { 0xfbaa, 1, { 0x6be, 0 } },
+ { 0xfbab, 1, { 0x6be, 0 } },
+ { 0xfbac, 1, { 0x6be, 0 } },
+ { 0xfbad, 1, { 0x6be, 0 } },
+ { 0xfbae, 1, { 0x6d2, 0 } },
+ { 0xfbaf, 1, { 0x6d2, 0 } },
+ { 0xfbb0, 1, { 0x6d3, 0 } },
+ { 0xfbb1, 1, { 0x6d3, 0 } },
+ { 0xfbd3, 1, { 0x6ad, 0 } },
+ { 0xfbd4, 1, { 0x6ad, 0 } },
+ { 0xfbd5, 1, { 0x6ad, 0 } },
+ { 0xfbd6, 1, { 0x6ad, 0 } },
+ { 0xfbd7, 1, { 0x6c7, 0 } },
+ { 0xfbd8, 1, { 0x6c7, 0 } },
+ { 0xfbd9, 1, { 0x6c6, 0 } },
+ { 0xfbda, 1, { 0x6c6, 0 } },
+ { 0xfbdb, 1, { 0x6c8, 0 } },
+ { 0xfbdc, 1, { 0x6c8, 0 } },
+ { 0xfbdd, 2, { 0x6c7, 0x674 } },
+ { 0xfbde, 1, { 0x6cb, 0 } },
+ { 0xfbdf, 1, { 0x6cb, 0 } },
+ { 0xfbe0, 1, { 0x6c5, 0 } },
+ { 0xfbe1, 1, { 0x6c5, 0 } },
+ { 0xfbe2, 1, { 0x6c9, 0 } },
+ { 0xfbe3, 1, { 0x6c9, 0 } },
+ { 0xfbe4, 1, { 0x6d0, 0 } },
+ { 0xfbe5, 1, { 0x6d0, 0 } },
+ { 0xfbe6, 1, { 0x6d0, 0 } },
+ { 0xfbe7, 1, { 0x6d0, 0 } },
+ { 0xfbe8, 1, { 0x649, 0 } },
+ { 0xfbe9, 1, { 0x649, 0 } },
+ { 0xfbea, 2, { 0x626, 0x627 } },
+ { 0xfbeb, 2, { 0x626, 0x627 } },
+ { 0xfbec, 2, { 0x626, 0x6d5 } },
+ { 0xfbed, 2, { 0x626, 0x6d5 } },
+ { 0xfbee, 2, { 0x626, 0x648 } },
+ { 0xfbef, 2, { 0x626, 0x648 } },
+ { 0xfbf0, 2, { 0x626, 0x6c7 } },
+ { 0xfbf1, 2, { 0x626, 0x6c7 } },
+ { 0xfbf2, 2, { 0x626, 0x6c6 } },
+ { 0xfbf3, 2, { 0x626, 0x6c6 } },
+ { 0xfbf4, 2, { 0x626, 0x6c8 } },
+ { 0xfbf5, 2, { 0x626, 0x6c8 } },
+ { 0xfbf6, 2, { 0x626, 0x6d0 } },
+ { 0xfbf7, 2, { 0x626, 0x6d0 } },
+ { 0xfbf8, 2, { 0x626, 0x6d0 } },
+ { 0xfbf9, 2, { 0x626, 0x649 } },
+ { 0xfbfa, 2, { 0x626, 0x649 } },
+ { 0xfbfb, 2, { 0x626, 0x649 } },
+ { 0xfbfc, 1, { 0x6cc, 0 } },
+ { 0xfbfd, 1, { 0x6cc, 0 } },
+ { 0xfbfe, 1, { 0x6cc, 0 } },
+ { 0xfbff, 1, { 0x6cc, 0 } },
+ { 0xfc00, 2, { 0x626, 0x62c } },
+ { 0xfc01, 2, { 0x626, 0x62d } },
+ { 0xfc02, 2, { 0x626, 0x645 } },
+ { 0xfc03, 2, { 0x626, 0x649 } },
+ { 0xfc04, 2, { 0x626, 0x64a } },
+ { 0xfc05, 2, { 0x628, 0x62c } },
+ { 0xfc06, 2, { 0x628, 0x62d } },
+ { 0xfc07, 2, { 0x628, 0x62e } },
+ { 0xfc08, 2, { 0x628, 0x645 } },
+ { 0xfc09, 2, { 0x628, 0x649 } },
+ { 0xfc0a, 2, { 0x628, 0x64a } },
+ { 0xfc0b, 2, { 0x62a, 0x62c } },
+ { 0xfc0c, 2, { 0x62a, 0x62d } },
+ { 0xfc0d, 2, { 0x62a, 0x62e } },
+ { 0xfc0e, 2, { 0x62a, 0x645 } },
+ { 0xfc0f, 2, { 0x62a, 0x649 } },
+ { 0xfc10, 2, { 0x62a, 0x64a } },
+ { 0xfc11, 2, { 0x62b, 0x62c } },
+ { 0xfc12, 2, { 0x62b, 0x645 } },
+ { 0xfc13, 2, { 0x62b, 0x649 } },
+ { 0xfc14, 2, { 0x62b, 0x64a } },
+ { 0xfc15, 2, { 0x62c, 0x62d } },
+ { 0xfc16, 2, { 0x62c, 0x645 } },
+ { 0xfc17, 2, { 0x62d, 0x62c } },
+ { 0xfc18, 2, { 0x62d, 0x645 } },
+ { 0xfc19, 2, { 0x62e, 0x62c } },
+ { 0xfc1a, 2, { 0x62e, 0x62d } },
+ { 0xfc1b, 2, { 0x62e, 0x645 } },
+ { 0xfc1c, 2, { 0x633, 0x62c } },
+ { 0xfc1d, 2, { 0x633, 0x62d } },
+ { 0xfc1e, 2, { 0x633, 0x62e } },
+ { 0xfc1f, 2, { 0x633, 0x645 } },
+ { 0xfc20, 2, { 0x635, 0x62d } },
+ { 0xfc21, 2, { 0x635, 0x645 } },
+ { 0xfc22, 2, { 0x636, 0x62c } },
+ { 0xfc23, 2, { 0x636, 0x62d } },
+ { 0xfc24, 2, { 0x636, 0x62e } },
+ { 0xfc25, 2, { 0x636, 0x645 } },
+ { 0xfc26, 2, { 0x637, 0x62d } },
+ { 0xfc27, 2, { 0x637, 0x645 } },
+ { 0xfc28, 2, { 0x638, 0x645 } },
+ { 0xfc29, 2, { 0x639, 0x62c } },
+ { 0xfc2a, 2, { 0x639, 0x645 } },
+ { 0xfc2b, 2, { 0x63a, 0x62c } },
+ { 0xfc2c, 2, { 0x63a, 0x645 } },
+ { 0xfc2d, 2, { 0x641, 0x62c } },
+ { 0xfc2e, 2, { 0x641, 0x62d } },
+ { 0xfc2f, 2, { 0x641, 0x62e } },
+ { 0xfc30, 2, { 0x641, 0x645 } },
+ { 0xfc31, 2, { 0x641, 0x649 } },
+ { 0xfc32, 2, { 0x641, 0x64a } },
+ { 0xfc33, 2, { 0x642, 0x62d } },
+ { 0xfc34, 2, { 0x642, 0x645 } },
+ { 0xfc35, 2, { 0x642, 0x649 } },
+ { 0xfc36, 2, { 0x642, 0x64a } },
+ { 0xfc37, 2, { 0x643, 0x627 } },
+ { 0xfc38, 2, { 0x643, 0x62c } },
+ { 0xfc39, 2, { 0x643, 0x62d } },
+ { 0xfc3a, 2, { 0x643, 0x62e } },
+ { 0xfc3b, 2, { 0x643, 0x644 } },
+ { 0xfc3c, 2, { 0x643, 0x645 } },
+ { 0xfc3d, 2, { 0x643, 0x649 } },
+ { 0xfc3e, 2, { 0x643, 0x64a } },
+ { 0xfc3f, 2, { 0x644, 0x62c } },
+ { 0xfc40, 2, { 0x644, 0x62d } },
+ { 0xfc41, 2, { 0x644, 0x62e } },
+ { 0xfc42, 2, { 0x644, 0x645 } },
+ { 0xfc43, 2, { 0x644, 0x649 } },
+ { 0xfc44, 2, { 0x644, 0x64a } },
+ { 0xfc45, 2, { 0x645, 0x62c } },
+ { 0xfc46, 2, { 0x645, 0x62d } },
+ { 0xfc47, 2, { 0x645, 0x62e } },
+ { 0xfc48, 2, { 0x645, 0x645 } },
+ { 0xfc49, 2, { 0x645, 0x649 } },
+ { 0xfc4a, 2, { 0x645, 0x64a } },
+ { 0xfc4b, 2, { 0x646, 0x62c } },
+ { 0xfc4c, 2, { 0x646, 0x62d } },
+ { 0xfc4d, 2, { 0x646, 0x62e } },
+ { 0xfc4e, 2, { 0x646, 0x645 } },
+ { 0xfc4f, 2, { 0x646, 0x649 } },
+ { 0xfc50, 2, { 0x646, 0x64a } },
+ { 0xfc51, 2, { 0x647, 0x62c } },
+ { 0xfc52, 2, { 0x647, 0x645 } },
+ { 0xfc53, 2, { 0x647, 0x649 } },
+ { 0xfc54, 2, { 0x647, 0x64a } },
+ { 0xfc55, 2, { 0x64a, 0x62c } },
+ { 0xfc56, 2, { 0x64a, 0x62d } },
+ { 0xfc57, 2, { 0x64a, 0x62e } },
+ { 0xfc58, 2, { 0x64a, 0x645 } },
+ { 0xfc59, 2, { 0x64a, 0x649 } },
+ { 0xfc5a, 2, { 0x64a, 0x64a } },
+ { 0xfc5b, 2, { 0x630, 0x670 } },
+ { 0xfc5c, 2, { 0x631, 0x670 } },
+ { 0xfc5d, 2, { 0x649, 0x670 } },
+ { 0xfc64, 2, { 0x626, 0x631 } },
+ { 0xfc65, 2, { 0x626, 0x632 } },
+ { 0xfc66, 2, { 0x626, 0x645 } },
+ { 0xfc67, 2, { 0x626, 0x646 } },
+ { 0xfc68, 2, { 0x626, 0x649 } },
+ { 0xfc69, 2, { 0x626, 0x64a } },
+ { 0xfc6a, 2, { 0x628, 0x631 } },
+ { 0xfc6b, 2, { 0x628, 0x632 } },
+ { 0xfc6c, 2, { 0x628, 0x645 } },
+ { 0xfc6d, 2, { 0x628, 0x646 } },
+ { 0xfc6e, 2, { 0x628, 0x649 } },
+ { 0xfc6f, 2, { 0x628, 0x64a } },
+ { 0xfc70, 2, { 0x62a, 0x631 } },
+ { 0xfc71, 2, { 0x62a, 0x632 } },
+ { 0xfc72, 2, { 0x62a, 0x645 } },
+ { 0xfc73, 2, { 0x62a, 0x646 } },
+ { 0xfc74, 2, { 0x62a, 0x649 } },
+ { 0xfc75, 2, { 0x62a, 0x64a } },
+ { 0xfc76, 2, { 0x62b, 0x631 } },
+ { 0xfc77, 2, { 0x62b, 0x632 } },
+ { 0xfc78, 2, { 0x62b, 0x645 } },
+ { 0xfc79, 2, { 0x62b, 0x646 } },
+ { 0xfc7a, 2, { 0x62b, 0x649 } },
+ { 0xfc7b, 2, { 0x62b, 0x64a } },
+ { 0xfc7c, 2, { 0x641, 0x649 } },
+ { 0xfc7d, 2, { 0x641, 0x64a } },
+ { 0xfc7e, 2, { 0x642, 0x649 } },
+ { 0xfc7f, 2, { 0x642, 0x64a } },
+ { 0xfc80, 2, { 0x643, 0x627 } },
+ { 0xfc81, 2, { 0x643, 0x644 } },
+ { 0xfc82, 2, { 0x643, 0x645 } },
+ { 0xfc83, 2, { 0x643, 0x649 } },
+ { 0xfc84, 2, { 0x643, 0x64a } },
+ { 0xfc85, 2, { 0x644, 0x645 } },
+ { 0xfc86, 2, { 0x644, 0x649 } },
+ { 0xfc87, 2, { 0x644, 0x64a } },
+ { 0xfc88, 2, { 0x645, 0x627 } },
+ { 0xfc89, 2, { 0x645, 0x645 } },
+ { 0xfc8a, 2, { 0x646, 0x631 } },
+ { 0xfc8b, 2, { 0x646, 0x632 } },
+ { 0xfc8c, 2, { 0x646, 0x645 } },
+ { 0xfc8d, 2, { 0x646, 0x646 } },
+ { 0xfc8e, 2, { 0x646, 0x649 } },
+ { 0xfc8f, 2, { 0x646, 0x64a } },
+ { 0xfc90, 2, { 0x649, 0x670 } },
+ { 0xfc91, 2, { 0x64a, 0x631 } },
+ { 0xfc92, 2, { 0x64a, 0x632 } },
+ { 0xfc93, 2, { 0x64a, 0x645 } },
+ { 0xfc94, 2, { 0x64a, 0x646 } },
+ { 0xfc95, 2, { 0x64a, 0x649 } },
+ { 0xfc96, 2, { 0x64a, 0x64a } },
+ { 0xfc97, 2, { 0x626, 0x62c } },
+ { 0xfc98, 2, { 0x626, 0x62d } },
+ { 0xfc99, 2, { 0x626, 0x62e } },
+ { 0xfc9a, 2, { 0x626, 0x645 } },
+ { 0xfc9b, 2, { 0x626, 0x647 } },
+ { 0xfc9c, 2, { 0x628, 0x62c } },
+ { 0xfc9d, 2, { 0x628, 0x62d } },
+ { 0xfc9e, 2, { 0x628, 0x62e } },
+ { 0xfc9f, 2, { 0x628, 0x645 } },
+ { 0xfca0, 2, { 0x628, 0x647 } },
+ { 0xfca1, 2, { 0x62a, 0x62c } },
+ { 0xfca2, 2, { 0x62a, 0x62d } },
+ { 0xfca3, 2, { 0x62a, 0x62e } },
+ { 0xfca4, 2, { 0x62a, 0x645 } },
+ { 0xfca5, 2, { 0x62a, 0x647 } },
+ { 0xfca6, 2, { 0x62b, 0x645 } },
+ { 0xfca7, 2, { 0x62c, 0x62d } },
+ { 0xfca8, 2, { 0x62c, 0x645 } },
+ { 0xfca9, 2, { 0x62d, 0x62c } },
+ { 0xfcaa, 2, { 0x62d, 0x645 } },
+ { 0xfcab, 2, { 0x62e, 0x62c } },
+ { 0xfcac, 2, { 0x62e, 0x645 } },
+ { 0xfcad, 2, { 0x633, 0x62c } },
+ { 0xfcae, 2, { 0x633, 0x62d } },
+ { 0xfcaf, 2, { 0x633, 0x62e } },
+ { 0xfcb0, 2, { 0x633, 0x645 } },
+ { 0xfcb1, 2, { 0x635, 0x62d } },
+ { 0xfcb2, 2, { 0x635, 0x62e } },
+ { 0xfcb3, 2, { 0x635, 0x645 } },
+ { 0xfcb4, 2, { 0x636, 0x62c } },
+ { 0xfcb5, 2, { 0x636, 0x62d } },
+ { 0xfcb6, 2, { 0x636, 0x62e } },
+ { 0xfcb7, 2, { 0x636, 0x645 } },
+ { 0xfcb8, 2, { 0x637, 0x62d } },
+ { 0xfcb9, 2, { 0x638, 0x645 } },
+ { 0xfcba, 2, { 0x639, 0x62c } },
+ { 0xfcbb, 2, { 0x639, 0x645 } },
+ { 0xfcbc, 2, { 0x63a, 0x62c } },
+ { 0xfcbd, 2, { 0x63a, 0x645 } },
+ { 0xfcbe, 2, { 0x641, 0x62c } },
+ { 0xfcbf, 2, { 0x641, 0x62d } },
+ { 0xfcc0, 2, { 0x641, 0x62e } },
+ { 0xfcc1, 2, { 0x641, 0x645 } },
+ { 0xfcc2, 2, { 0x642, 0x62d } },
+ { 0xfcc3, 2, { 0x642, 0x645 } },
+ { 0xfcc4, 2, { 0x643, 0x62c } },
+ { 0xfcc5, 2, { 0x643, 0x62d } },
+ { 0xfcc6, 2, { 0x643, 0x62e } },
+ { 0xfcc7, 2, { 0x643, 0x644 } },
+ { 0xfcc8, 2, { 0x643, 0x645 } },
+ { 0xfcc9, 2, { 0x644, 0x62c } },
+ { 0xfcca, 2, { 0x644, 0x62d } },
+ { 0xfccb, 2, { 0x644, 0x62e } },
+ { 0xfccc, 2, { 0x644, 0x645 } },
+ { 0xfccd, 2, { 0x644, 0x647 } },
+ { 0xfcce, 2, { 0x645, 0x62c } },
+ { 0xfccf, 2, { 0x645, 0x62d } },
+ { 0xfcd0, 2, { 0x645, 0x62e } },
+ { 0xfcd1, 2, { 0x645, 0x645 } },
+ { 0xfcd2, 2, { 0x646, 0x62c } },
+ { 0xfcd3, 2, { 0x646, 0x62d } },
+ { 0xfcd4, 2, { 0x646, 0x62e } },
+ { 0xfcd5, 2, { 0x646, 0x645 } },
+ { 0xfcd6, 2, { 0x646, 0x647 } },
+ { 0xfcd7, 2, { 0x647, 0x62c } },
+ { 0xfcd8, 2, { 0x647, 0x645 } },
+ { 0xfcd9, 2, { 0x647, 0x670 } },
+ { 0xfcda, 2, { 0x64a, 0x62c } },
+ { 0xfcdb, 2, { 0x64a, 0x62d } },
+ { 0xfcdc, 2, { 0x64a, 0x62e } },
+ { 0xfcdd, 2, { 0x64a, 0x645 } },
+ { 0xfcde, 2, { 0x64a, 0x647 } },
+ { 0xfcdf, 2, { 0x626, 0x645 } },
+ { 0xfce0, 2, { 0x626, 0x647 } },
+ { 0xfce1, 2, { 0x628, 0x645 } },
+ { 0xfce2, 2, { 0x628, 0x647 } },
+ { 0xfce3, 2, { 0x62a, 0x645 } },
+ { 0xfce4, 2, { 0x62a, 0x647 } },
+ { 0xfce5, 2, { 0x62b, 0x645 } },
+ { 0xfce6, 2, { 0x62b, 0x647 } },
+ { 0xfce7, 2, { 0x633, 0x645 } },
+ { 0xfce8, 2, { 0x633, 0x647 } },
+ { 0xfce9, 2, { 0x634, 0x645 } },
+ { 0xfcea, 2, { 0x634, 0x647 } },
+ { 0xfceb, 2, { 0x643, 0x644 } },
+ { 0xfcec, 2, { 0x643, 0x645 } },
+ { 0xfced, 2, { 0x644, 0x645 } },
+ { 0xfcee, 2, { 0x646, 0x645 } },
+ { 0xfcef, 2, { 0x646, 0x647 } },
+ { 0xfcf0, 2, { 0x64a, 0x645 } },
+ { 0xfcf1, 2, { 0x64a, 0x647 } },
+ { 0xfcf2, 3, { 426, 0 } },
+ { 0xfcf3, 3, { 351, 0 } },
+ { 0xfcf4, 3, { 746, 0 } },
+ { 0xfcf5, 2, { 0x637, 0x649 } },
+ { 0xfcf6, 2, { 0x637, 0x64a } },
+ { 0xfcf7, 2, { 0x639, 0x649 } },
+ { 0xfcf8, 2, { 0x639, 0x64a } },
+ { 0xfcf9, 2, { 0x63a, 0x649 } },
+ { 0xfcfa, 2, { 0x63a, 0x64a } },
+ { 0xfcfb, 2, { 0x633, 0x649 } },
+ { 0xfcfc, 2, { 0x633, 0x64a } },
+ { 0xfcfd, 2, { 0x634, 0x649 } },
+ { 0xfcfe, 2, { 0x634, 0x64a } },
+ { 0xfcff, 2, { 0x62d, 0x649 } },
+ { 0xfd00, 2, { 0x62d, 0x64a } },
+ { 0xfd01, 2, { 0x62c, 0x649 } },
+ { 0xfd02, 2, { 0x62c, 0x64a } },
+ { 0xfd03, 2, { 0x62e, 0x649 } },
+ { 0xfd04, 2, { 0x62e, 0x64a } },
+ { 0xfd05, 2, { 0x635, 0x649 } },
+ { 0xfd06, 2, { 0x635, 0x64a } },
+ { 0xfd07, 2, { 0x636, 0x649 } },
+ { 0xfd08, 2, { 0x636, 0x64a } },
+ { 0xfd09, 2, { 0x634, 0x62c } },
+ { 0xfd0a, 2, { 0x634, 0x62d } },
+ { 0xfd0b, 2, { 0x634, 0x62e } },
+ { 0xfd0c, 2, { 0x634, 0x645 } },
+ { 0xfd0d, 2, { 0x634, 0x631 } },
+ { 0xfd0e, 2, { 0x633, 0x631 } },
+ { 0xfd0f, 2, { 0x635, 0x631 } },
+ { 0xfd10, 2, { 0x636, 0x631 } },
+ { 0xfd11, 2, { 0x637, 0x649 } },
+ { 0xfd12, 2, { 0x637, 0x64a } },
+ { 0xfd13, 2, { 0x639, 0x649 } },
+ { 0xfd14, 2, { 0x639, 0x64a } },
+ { 0xfd15, 2, { 0x63a, 0x649 } },
+ { 0xfd16, 2, { 0x63a, 0x64a } },
+ { 0xfd17, 2, { 0x633, 0x649 } },
+ { 0xfd18, 2, { 0x633, 0x64a } },
+ { 0xfd19, 2, { 0x634, 0x649 } },
+ { 0xfd1a, 2, { 0x634, 0x64a } },
+ { 0xfd1b, 2, { 0x62d, 0x649 } },
+ { 0xfd1c, 2, { 0x62d, 0x64a } },
+ { 0xfd1d, 2, { 0x62c, 0x649 } },
+ { 0xfd1e, 2, { 0x62c, 0x64a } },
+ { 0xfd1f, 2, { 0x62e, 0x649 } },
+ { 0xfd20, 2, { 0x62e, 0x64a } },
+ { 0xfd21, 2, { 0x635, 0x649 } },
+ { 0xfd22, 2, { 0x635, 0x64a } },
+ { 0xfd23, 2, { 0x636, 0x649 } },
+ { 0xfd24, 2, { 0x636, 0x64a } },
+ { 0xfd25, 2, { 0x634, 0x62c } },
+ { 0xfd26, 2, { 0x634, 0x62d } },
+ { 0xfd27, 2, { 0x634, 0x62e } },
+ { 0xfd28, 2, { 0x634, 0x645 } },
+ { 0xfd29, 2, { 0x634, 0x631 } },
+ { 0xfd2a, 2, { 0x633, 0x631 } },
+ { 0xfd2b, 2, { 0x635, 0x631 } },
+ { 0xfd2c, 2, { 0x636, 0x631 } },
+ { 0xfd2d, 2, { 0x634, 0x62c } },
+ { 0xfd2e, 2, { 0x634, 0x62d } },
+ { 0xfd2f, 2, { 0x634, 0x62e } },
+ { 0xfd30, 2, { 0x634, 0x645 } },
+ { 0xfd31, 2, { 0x633, 0x647 } },
+ { 0xfd32, 2, { 0x634, 0x647 } },
+ { 0xfd33, 2, { 0x637, 0x645 } },
+ { 0xfd34, 2, { 0x633, 0x62c } },
+ { 0xfd35, 2, { 0x633, 0x62d } },
+ { 0xfd36, 2, { 0x633, 0x62e } },
+ { 0xfd37, 2, { 0x634, 0x62c } },
+ { 0xfd38, 2, { 0x634, 0x62d } },
+ { 0xfd39, 2, { 0x634, 0x62e } },
+ { 0xfd3a, 2, { 0x637, 0x645 } },
+ { 0xfd3b, 2, { 0x638, 0x645 } },
+ { 0xfd3c, 2, { 0x627, 0x64b } },
+ { 0xfd3d, 2, { 0x627, 0x64b } },
+ { 0xfd50, 3, { 115, 0 } },
+ { 0xfd51, 3, { 513, 0 } },
+ { 0xfd52, 3, { 513, 0 } },
+ { 0xfd53, 3, { 121, 0 } },
+ { 0xfd54, 3, { 516, 0 } },
+ { 0xfd55, 3, { 127, 0 } },
+ { 0xfd56, 3, { 522, 0 } },
+ { 0xfd57, 3, { 531, 0 } },
+ { 0xfd58, 3, { 358, 0 } },
+ { 0xfd59, 3, { 358, 0 } },
+ { 0xfd5a, 3, { 336, 0 } },
+ { 0xfd5b, 3, { 411, 0 } },
+ { 0xfd5c, 3, { 361, 0 } },
+ { 0xfd5d, 3, { 538, 0 } },
+ { 0xfd5e, 3, { 389, 0 } },
+ { 0xfd5f, 3, { 414, 0 } },
+ { 0xfd60, 3, { 414, 0 } },
+ { 0xfd61, 3, { 552, 0 } },
+ { 0xfd62, 3, { 339, 0 } },
+ { 0xfd63, 3, { 339, 0 } },
+ { 0xfd64, 3, { 417, 0 } },
+ { 0xfd65, 3, { 417, 0 } },
+ { 0xfd66, 3, { 367, 0 } },
+ { 0xfd67, 3, { 392, 0 } },
+ { 0xfd68, 3, { 392, 0 } },
+ { 0xfd69, 3, { 541, 0 } },
+ { 0xfd6a, 3, { 588, 0 } },
+ { 0xfd6b, 3, { 588, 0 } },
+ { 0xfd6c, 3, { 560, 0 } },
+ { 0xfd6d, 3, { 560, 0 } },
+ { 0xfd6e, 3, { 563, 0 } },
+ { 0xfd6f, 3, { 345, 0 } },
+ { 0xfd70, 3, { 345, 0 } },
+ { 0xfd71, 3, { 547, 0 } },
+ { 0xfd72, 3, { 547, 0 } },
+ { 0xfd73, 3, { 398, 0 } },
+ { 0xfd74, 3, { 370, 0 } },
+ { 0xfd75, 3, { 566, 0 } },
+ { 0xfd76, 3, { 423, 0 } },
+ { 0xfd77, 3, { 423, 0 } },
+ { 0xfd78, 3, { 348, 0 } },
+ { 0xfd79, 3, { 401, 0 } },
+ { 0xfd7a, 3, { 569, 0 } },
+ { 0xfd7b, 3, { 373, 0 } },
+ { 0xfd7c, 3, { 404, 0 } },
+ { 0xfd7d, 3, { 404, 0 } },
+ { 0xfd7e, 3, { 429, 0 } },
+ { 0xfd7f, 3, { 354, 0 } },
+ { 0xfd80, 3, { 410, 0 } },
+ { 0xfd81, 3, { 578, 0 } },
+ { 0xfd82, 3, { 382, 0 } },
+ { 0xfd83, 3, { 575, 0 } },
+ { 0xfd84, 3, { 575, 0 } },
+ { 0xfd85, 3, { 755, 0 } },
+ { 0xfd86, 3, { 755, 0 } },
+ { 0xfd87, 3, { 736, 0 } },
+ { 0xfd88, 3, { 736, 0 } },
+ { 0xfd89, 3, { 548, 0 } },
+ { 0xfd8a, 3, { 737, 0 } },
+ { 0xfd8b, 3, { 430, 0 } },
+ { 0xfd8c, 3, { 534, 0 } },
+ { 0xfd8d, 3, { 553, 0 } },
+ { 0xfd8e, 3, { 849, 0 } },
+ { 0xfd8f, 3, { 532, 0 } },
+ { 0xfd92, 3, { 128, 0 } },
+ { 0xfd93, 3, { 331, 0 } },
+ { 0xfd94, 3, { 847, 0 } },
+ { 0xfd95, 3, { 335, 0 } },
+ { 0xfd96, 3, { 131, 0 } },
+ { 0xfd97, 3, { 581, 0 } },
+ { 0xfd98, 3, { 581, 0 } },
+ { 0xfd99, 3, { 804, 0 } },
+ { 0xfd9a, 3, { 592, 0 } },
+ { 0xfd9b, 3, { 852, 0 } },
+ { 0xfd9c, 3, { 600, 0 } },
+ { 0xfd9d, 3, { 600, 0 } },
+ { 0xfd9e, 3, { 507, 0 } },
+ { 0xfd9f, 3, { 118, 0 } },
+ { 0xfda0, 3, { 510, 0 } },
+ { 0xfda1, 3, { 519, 0 } },
+ { 0xfda2, 3, { 124, 0 } },
+ { 0xfda3, 3, { 525, 0 } },
+ { 0xfda4, 3, { 528, 0 } },
+ { 0xfda5, 3, { 582, 0 } },
+ { 0xfda6, 3, { 535, 0 } },
+ { 0xfda7, 3, { 554, 0 } },
+ { 0xfda8, 3, { 585, 0 } },
+ { 0xfda9, 3, { 342, 0 } },
+ { 0xfdaa, 3, { 364, 0 } },
+ { 0xfdab, 3, { 420, 0 } },
+ { 0xfdac, 3, { 752, 0 } },
+ { 0xfdad, 3, { 801, 0 } },
+ { 0xfdae, 3, { 596, 0 } },
+ { 0xfdaf, 3, { 594, 0 } },
+ { 0xfdb0, 3, { 598, 0 } },
+ { 0xfdb1, 3, { 601, 0 } },
+ { 0xfdb2, 3, { 749, 0 } },
+ { 0xfdb3, 3, { 433, 0 } },
+ { 0xfdb4, 3, { 429, 0 } },
+ { 0xfdb5, 3, { 410, 0 } },
+ { 0xfdb6, 3, { 743, 0 } },
+ { 0xfdb7, 3, { 379, 0 } },
+ { 0xfdb8, 3, { 385, 0 } },
+ { 0xfdb9, 3, { 589, 0 } },
+ { 0xfdba, 3, { 357, 0 } },
+ { 0xfdbb, 3, { 407, 0 } },
+ { 0xfdbc, 3, { 357, 0 } },
+ { 0xfdbd, 3, { 385, 0 } },
+ { 0xfdbe, 3, { 386, 0 } },
+ { 0xfdbf, 3, { 549, 0 } },
+ { 0xfdc0, 3, { 332, 0 } },
+ { 0xfdc1, 3, { 376, 0 } },
+ { 0xfdc2, 3, { 112, 0 } },
+ { 0xfdc3, 3, { 407, 0 } },
+ { 0xfdc4, 3, { 566, 0 } },
+ { 0xfdc5, 3, { 367, 0 } },
+ { 0xfdc6, 3, { 557, 0 } },
+ { 0xfdc7, 3, { 758, 0 } },
+ { 0xfdf0, 3, { 395, 0 } },
+ { 0xfdf1, 3, { 572, 0 } },
+ { 0xfdf2, 4, { 328, 0 } },
+ { 0xfdf3, 4, { 323, 0 } },
+ { 0xfdf4, 4, { 737, 0 } },
+ { 0xfdf5, 4, { 741, 0 } },
+ { 0xfdf6, 4, { 733, 0 } },
+ { 0xfdf7, 4, { 844, 0 } },
+ { 0xfdf8, 4, { 799, 0 } },
+ { 0xfdf9, 3, { 544, 0 } },
+ { 0xfdfc, 4, { 326, 0 } },
+ { 0xfe11, 1, { 0x3001, 0 } },
+ { 0xfe17, 1, { 0x3016, 0 } },
+ { 0xfe18, 1, { 0x3017, 0 } },
+ { 0xfe31, 1, { 0x2014, 0 } },
+ { 0xfe32, 1, { 0x2013, 0 } },
+ { 0xfe33, 1, { 0x5f, 0 } },
+ { 0xfe34, 1, { 0x5f, 0 } },
+ { 0xfe39, 1, { 0x3014, 0 } },
+ { 0xfe3a, 1, { 0x3015, 0 } },
+ { 0xfe3b, 1, { 0x3010, 0 } },
+ { 0xfe3c, 1, { 0x3011, 0 } },
+ { 0xfe3d, 1, { 0x300a, 0 } },
+ { 0xfe3e, 1, { 0x300b, 0 } },
+ { 0xfe3f, 1, { 0x3008, 0 } },
+ { 0xfe40, 1, { 0x3009, 0 } },
+ { 0xfe41, 1, { 0x300c, 0 } },
+ { 0xfe42, 1, { 0x300d, 0 } },
+ { 0xfe43, 1, { 0x300e, 0 } },
+ { 0xfe44, 1, { 0x300f, 0 } },
+ { 0xfe4d, 1, { 0x5f, 0 } },
+ { 0xfe4e, 1, { 0x5f, 0 } },
+ { 0xfe4f, 1, { 0x5f, 0 } },
+ { 0xfe51, 1, { 0x3001, 0 } },
+ { 0xfe58, 1, { 0x2014, 0 } },
+ { 0xfe5d, 1, { 0x3014, 0 } },
+ { 0xfe5e, 1, { 0x3015, 0 } },
+ { 0xfe63, 1, { 0x2d, 0 } },
+ { 0xfe71, 2, { 0x640, 0x64b } },
+ { 0xfe77, 2, { 0x640, 0x64e } },
+ { 0xfe79, 2, { 0x640, 0x64f } },
+ { 0xfe7b, 2, { 0x640, 0x650 } },
+ { 0xfe7d, 2, { 0x640, 0x651 } },
+ { 0xfe7f, 2, { 0x640, 0x652 } },
+ { 0xfe80, 1, { 0x621, 0 } },
+ { 0xfe81, 1, { 0x622, 0 } },
+ { 0xfe82, 1, { 0x622, 0 } },
+ { 0xfe83, 1, { 0x623, 0 } },
+ { 0xfe84, 1, { 0x623, 0 } },
+ { 0xfe85, 1, { 0x624, 0 } },
+ { 0xfe86, 1, { 0x624, 0 } },
+ { 0xfe87, 1, { 0x625, 0 } },
+ { 0xfe88, 1, { 0x625, 0 } },
+ { 0xfe89, 1, { 0x626, 0 } },
+ { 0xfe8a, 1, { 0x626, 0 } },
+ { 0xfe8b, 1, { 0x626, 0 } },
+ { 0xfe8c, 1, { 0x626, 0 } },
+ { 0xfe8d, 1, { 0x627, 0 } },
+ { 0xfe8e, 1, { 0x627, 0 } },
+ { 0xfe8f, 1, { 0x628, 0 } },
+ { 0xfe90, 1, { 0x628, 0 } },
+ { 0xfe91, 1, { 0x628, 0 } },
+ { 0xfe92, 1, { 0x628, 0 } },
+ { 0xfe93, 1, { 0x629, 0 } },
+ { 0xfe94, 1, { 0x629, 0 } },
+ { 0xfe95, 1, { 0x62a, 0 } },
+ { 0xfe96, 1, { 0x62a, 0 } },
+ { 0xfe97, 1, { 0x62a, 0 } },
+ { 0xfe98, 1, { 0x62a, 0 } },
+ { 0xfe99, 1, { 0x62b, 0 } },
+ { 0xfe9a, 1, { 0x62b, 0 } },
+ { 0xfe9b, 1, { 0x62b, 0 } },
+ { 0xfe9c, 1, { 0x62b, 0 } },
+ { 0xfe9d, 1, { 0x62c, 0 } },
+ { 0xfe9e, 1, { 0x62c, 0 } },
+ { 0xfe9f, 1, { 0x62c, 0 } },
+ { 0xfea0, 1, { 0x62c, 0 } },
+ { 0xfea1, 1, { 0x62d, 0 } },
+ { 0xfea2, 1, { 0x62d, 0 } },
+ { 0xfea3, 1, { 0x62d, 0 } },
+ { 0xfea4, 1, { 0x62d, 0 } },
+ { 0xfea5, 1, { 0x62e, 0 } },
+ { 0xfea6, 1, { 0x62e, 0 } },
+ { 0xfea7, 1, { 0x62e, 0 } },
+ { 0xfea8, 1, { 0x62e, 0 } },
+ { 0xfea9, 1, { 0x62f, 0 } },
+ { 0xfeaa, 1, { 0x62f, 0 } },
+ { 0xfeab, 1, { 0x630, 0 } },
+ { 0xfeac, 1, { 0x630, 0 } },
+ { 0xfead, 1, { 0x631, 0 } },
+ { 0xfeae, 1, { 0x631, 0 } },
+ { 0xfeaf, 1, { 0x632, 0 } },
+ { 0xfeb0, 1, { 0x632, 0 } },
+ { 0xfeb1, 1, { 0x633, 0 } },
+ { 0xfeb2, 1, { 0x633, 0 } },
+ { 0xfeb3, 1, { 0x633, 0 } },
+ { 0xfeb4, 1, { 0x633, 0 } },
+ { 0xfeb5, 1, { 0x634, 0 } },
+ { 0xfeb6, 1, { 0x634, 0 } },
+ { 0xfeb7, 1, { 0x634, 0 } },
+ { 0xfeb8, 1, { 0x634, 0 } },
+ { 0xfeb9, 1, { 0x635, 0 } },
+ { 0xfeba, 1, { 0x635, 0 } },
+ { 0xfebb, 1, { 0x635, 0 } },
+ { 0xfebc, 1, { 0x635, 0 } },
+ { 0xfebd, 1, { 0x636, 0 } },
+ { 0xfebe, 1, { 0x636, 0 } },
+ { 0xfebf, 1, { 0x636, 0 } },
+ { 0xfec0, 1, { 0x636, 0 } },
+ { 0xfec1, 1, { 0x637, 0 } },
+ { 0xfec2, 1, { 0x637, 0 } },
+ { 0xfec3, 1, { 0x637, 0 } },
+ { 0xfec4, 1, { 0x637, 0 } },
+ { 0xfec5, 1, { 0x638, 0 } },
+ { 0xfec6, 1, { 0x638, 0 } },
+ { 0xfec7, 1, { 0x638, 0 } },
+ { 0xfec8, 1, { 0x638, 0 } },
+ { 0xfec9, 1, { 0x639, 0 } },
+ { 0xfeca, 1, { 0x639, 0 } },
+ { 0xfecb, 1, { 0x639, 0 } },
+ { 0xfecc, 1, { 0x639, 0 } },
+ { 0xfecd, 1, { 0x63a, 0 } },
+ { 0xfece, 1, { 0x63a, 0 } },
+ { 0xfecf, 1, { 0x63a, 0 } },
+ { 0xfed0, 1, { 0x63a, 0 } },
+ { 0xfed1, 1, { 0x641, 0 } },
+ { 0xfed2, 1, { 0x641, 0 } },
+ { 0xfed3, 1, { 0x641, 0 } },
+ { 0xfed4, 1, { 0x641, 0 } },
+ { 0xfed5, 1, { 0x642, 0 } },
+ { 0xfed6, 1, { 0x642, 0 } },
+ { 0xfed7, 1, { 0x642, 0 } },
+ { 0xfed8, 1, { 0x642, 0 } },
+ { 0xfed9, 1, { 0x643, 0 } },
+ { 0xfeda, 1, { 0x643, 0 } },
+ { 0xfedb, 1, { 0x643, 0 } },
+ { 0xfedc, 1, { 0x643, 0 } },
+ { 0xfedd, 1, { 0x644, 0 } },
+ { 0xfede, 1, { 0x644, 0 } },
+ { 0xfedf, 1, { 0x644, 0 } },
+ { 0xfee0, 1, { 0x644, 0 } },
+ { 0xfee1, 1, { 0x645, 0 } },
+ { 0xfee2, 1, { 0x645, 0 } },
+ { 0xfee3, 1, { 0x645, 0 } },
+ { 0xfee4, 1, { 0x645, 0 } },
+ { 0xfee5, 1, { 0x646, 0 } },
+ { 0xfee6, 1, { 0x646, 0 } },
+ { 0xfee7, 1, { 0x646, 0 } },
+ { 0xfee8, 1, { 0x646, 0 } },
+ { 0xfee9, 1, { 0x647, 0 } },
+ { 0xfeea, 1, { 0x647, 0 } },
+ { 0xfeeb, 1, { 0x647, 0 } },
+ { 0xfeec, 1, { 0x647, 0 } },
+ { 0xfeed, 1, { 0x648, 0 } },
+ { 0xfeee, 1, { 0x648, 0 } },
+ { 0xfeef, 1, { 0x649, 0 } },
+ { 0xfef0, 1, { 0x649, 0 } },
+ { 0xfef1, 1, { 0x64a, 0 } },
+ { 0xfef2, 1, { 0x64a, 0 } },
+ { 0xfef3, 1, { 0x64a, 0 } },
+ { 0xfef4, 1, { 0x64a, 0 } },
+ { 0xfef5, 2, { 0x644, 0x622 } },
+ { 0xfef6, 2, { 0x644, 0x622 } },
+ { 0xfef7, 2, { 0x644, 0x623 } },
+ { 0xfef8, 2, { 0x644, 0x623 } },
+ { 0xfef9, 2, { 0x644, 0x625 } },
+ { 0xfefa, 2, { 0x644, 0x625 } },
+ { 0xfefb, 2, { 0x644, 0x627 } },
+ { 0xfefc, 2, { 0x644, 0x627 } },
+ { 0xff0d, 1, { 0x2d, 0 } },
+ { 0xff0e, 1, { 0x2e, 0 } },
+ { 0xff10, 1, { 0x30, 0 } },
+ { 0xff11, 1, { 0x31, 0 } },
+ { 0xff12, 1, { 0x32, 0 } },
+ { 0xff13, 1, { 0x33, 0 } },
+ { 0xff14, 1, { 0x34, 0 } },
+ { 0xff15, 1, { 0x35, 0 } },
+ { 0xff16, 1, { 0x36, 0 } },
+ { 0xff17, 1, { 0x37, 0 } },
+ { 0xff18, 1, { 0x38, 0 } },
+ { 0xff19, 1, { 0x39, 0 } },
+ { 0xff21, 1, { 0x61, 0 } },
+ { 0xff22, 1, { 0x62, 0 } },
+ { 0xff23, 1, { 0x63, 0 } },
+ { 0xff24, 1, { 0x64, 0 } },
+ { 0xff25, 1, { 0x65, 0 } },
+ { 0xff26, 1, { 0x66, 0 } },
+ { 0xff27, 1, { 0x67, 0 } },
+ { 0xff28, 1, { 0x68, 0 } },
+ { 0xff29, 1, { 0x69, 0 } },
+ { 0xff2a, 1, { 0x6a, 0 } },
+ { 0xff2b, 1, { 0x6b, 0 } },
+ { 0xff2c, 1, { 0x6c, 0 } },
+ { 0xff2d, 1, { 0x6d, 0 } },
+ { 0xff2e, 1, { 0x6e, 0 } },
+ { 0xff2f, 1, { 0x6f, 0 } },
+ { 0xff30, 1, { 0x70, 0 } },
+ { 0xff31, 1, { 0x71, 0 } },
+ { 0xff32, 1, { 0x72, 0 } },
+ { 0xff33, 1, { 0x73, 0 } },
+ { 0xff34, 1, { 0x74, 0 } },
+ { 0xff35, 1, { 0x75, 0 } },
+ { 0xff36, 1, { 0x76, 0 } },
+ { 0xff37, 1, { 0x77, 0 } },
+ { 0xff38, 1, { 0x78, 0 } },
+ { 0xff39, 1, { 0x79, 0 } },
+ { 0xff3a, 1, { 0x7a, 0 } },
+ { 0xff3f, 1, { 0x5f, 0 } },
+ { 0xff41, 1, { 0x61, 0 } },
+ { 0xff42, 1, { 0x62, 0 } },
+ { 0xff43, 1, { 0x63, 0 } },
+ { 0xff44, 1, { 0x64, 0 } },
+ { 0xff45, 1, { 0x65, 0 } },
+ { 0xff46, 1, { 0x66, 0 } },
+ { 0xff47, 1, { 0x67, 0 } },
+ { 0xff48, 1, { 0x68, 0 } },
+ { 0xff49, 1, { 0x69, 0 } },
+ { 0xff4a, 1, { 0x6a, 0 } },
+ { 0xff4b, 1, { 0x6b, 0 } },
+ { 0xff4c, 1, { 0x6c, 0 } },
+ { 0xff4d, 1, { 0x6d, 0 } },
+ { 0xff4e, 1, { 0x6e, 0 } },
+ { 0xff4f, 1, { 0x6f, 0 } },
+ { 0xff50, 1, { 0x70, 0 } },
+ { 0xff51, 1, { 0x71, 0 } },
+ { 0xff52, 1, { 0x72, 0 } },
+ { 0xff53, 1, { 0x73, 0 } },
+ { 0xff54, 1, { 0x74, 0 } },
+ { 0xff55, 1, { 0x75, 0 } },
+ { 0xff56, 1, { 0x76, 0 } },
+ { 0xff57, 1, { 0x77, 0 } },
+ { 0xff58, 1, { 0x78, 0 } },
+ { 0xff59, 1, { 0x79, 0 } },
+ { 0xff5a, 1, { 0x7a, 0 } },
+ { 0xff5f, 1, { 0x2985, 0 } },
+ { 0xff60, 1, { 0x2986, 0 } },
+ { 0xff61, 1, { 0x2e, 0 } },
+ { 0xff62, 1, { 0x300c, 0 } },
+ { 0xff63, 1, { 0x300d, 0 } },
+ { 0xff64, 1, { 0x3001, 0 } },
+ { 0xff65, 1, { 0x30fb, 0 } },
+ { 0xff66, 1, { 0x30f2, 0 } },
+ { 0xff67, 1, { 0x30a1, 0 } },
+ { 0xff68, 1, { 0x30a3, 0 } },
+ { 0xff69, 1, { 0x30a5, 0 } },
+ { 0xff6a, 1, { 0x30a7, 0 } },
+ { 0xff6b, 1, { 0x30a9, 0 } },
+ { 0xff6c, 1, { 0x30e3, 0 } },
+ { 0xff6d, 1, { 0x30e5, 0 } },
+ { 0xff6e, 1, { 0x30e7, 0 } },
+ { 0xff6f, 1, { 0x30c3, 0 } },
+ { 0xff70, 1, { 0x30fc, 0 } },
+ { 0xff71, 1, { 0x30a2, 0 } },
+ { 0xff72, 1, { 0x30a4, 0 } },
+ { 0xff73, 1, { 0x30a6, 0 } },
+ { 0xff74, 1, { 0x30a8, 0 } },
+ { 0xff75, 1, { 0x30aa, 0 } },
+ { 0xff76, 1, { 0x30ab, 0 } },
+ { 0xff77, 1, { 0x30ad, 0 } },
+ { 0xff78, 1, { 0x30af, 0 } },
+ { 0xff79, 1, { 0x30b1, 0 } },
+ { 0xff7a, 1, { 0x30b3, 0 } },
+ { 0xff7b, 1, { 0x30b5, 0 } },
+ { 0xff7c, 1, { 0x30b7, 0 } },
+ { 0xff7d, 1, { 0x30b9, 0 } },
+ { 0xff7e, 1, { 0x30bb, 0 } },
+ { 0xff7f, 1, { 0x30bd, 0 } },
+ { 0xff80, 1, { 0x30bf, 0 } },
+ { 0xff81, 1, { 0x30c1, 0 } },
+ { 0xff82, 1, { 0x30c4, 0 } },
+ { 0xff83, 1, { 0x30c6, 0 } },
+ { 0xff84, 1, { 0x30c8, 0 } },
+ { 0xff85, 1, { 0x30ca, 0 } },
+ { 0xff86, 1, { 0x30cb, 0 } },
+ { 0xff87, 1, { 0x30cc, 0 } },
+ { 0xff88, 1, { 0x30cd, 0 } },
+ { 0xff89, 1, { 0x30ce, 0 } },
+ { 0xff8a, 1, { 0x30cf, 0 } },
+ { 0xff8b, 1, { 0x30d2, 0 } },
+ { 0xff8c, 1, { 0x30d5, 0 } },
+ { 0xff8d, 1, { 0x30d8, 0 } },
+ { 0xff8e, 1, { 0x30db, 0 } },
+ { 0xff8f, 1, { 0x30de, 0 } },
+ { 0xff90, 1, { 0x30df, 0 } },
+ { 0xff91, 1, { 0x30e0, 0 } },
+ { 0xff92, 1, { 0x30e1, 0 } },
+ { 0xff93, 1, { 0x30e2, 0 } },
+ { 0xff94, 1, { 0x30e4, 0 } },
+ { 0xff95, 1, { 0x30e6, 0 } },
+ { 0xff96, 1, { 0x30e8, 0 } },
+ { 0xff97, 1, { 0x30e9, 0 } },
+ { 0xff98, 1, { 0x30ea, 0 } },
+ { 0xff99, 1, { 0x30eb, 0 } },
+ { 0xff9a, 1, { 0x30ec, 0 } },
+ { 0xff9b, 1, { 0x30ed, 0 } },
+ { 0xff9c, 1, { 0x30ef, 0 } },
+ { 0xff9d, 1, { 0x30f3, 0 } },
+ { 0xff9e, 1, { 0x3099, 0 } },
+ { 0xff9f, 1, { 0x309a, 0 } },
+ { 0xffa1, 1, { 0x1100, 0 } },
+ { 0xffa2, 1, { 0x1101, 0 } },
+ { 0xffa3, 1, { 0x11aa, 0 } },
+ { 0xffa4, 1, { 0x1102, 0 } },
+ { 0xffa5, 1, { 0x11ac, 0 } },
+ { 0xffa6, 1, { 0x11ad, 0 } },
+ { 0xffa7, 1, { 0x1103, 0 } },
+ { 0xffa8, 1, { 0x1104, 0 } },
+ { 0xffa9, 1, { 0x1105, 0 } },
+ { 0xffaa, 1, { 0x11b0, 0 } },
+ { 0xffab, 1, { 0x11b1, 0 } },
+ { 0xffac, 1, { 0x11b2, 0 } },
+ { 0xffad, 1, { 0x11b3, 0 } },
+ { 0xffae, 1, { 0x11b4, 0 } },
+ { 0xffaf, 1, { 0x11b5, 0 } },
+ { 0xffb0, 1, { 0x111a, 0 } },
+ { 0xffb1, 1, { 0x1106, 0 } },
+ { 0xffb2, 1, { 0x1107, 0 } },
+ { 0xffb3, 1, { 0x1108, 0 } },
+ { 0xffb4, 1, { 0x1121, 0 } },
+ { 0xffb5, 1, { 0x1109, 0 } },
+ { 0xffb6, 1, { 0x110a, 0 } },
+ { 0xffb7, 1, { 0x110b, 0 } },
+ { 0xffb8, 1, { 0x110c, 0 } },
+ { 0xffb9, 1, { 0x110d, 0 } },
+ { 0xffba, 1, { 0x110e, 0 } },
+ { 0xffbb, 1, { 0x110f, 0 } },
+ { 0xffbc, 1, { 0x1110, 0 } },
+ { 0xffbd, 1, { 0x1111, 0 } },
+ { 0xffbe, 1, { 0x1112, 0 } },
+ { 0xffc2, 1, { 0x1161, 0 } },
+ { 0xffc3, 1, { 0x1162, 0 } },
+ { 0xffc4, 1, { 0x1163, 0 } },
+ { 0xffc5, 1, { 0x1164, 0 } },
+ { 0xffc6, 1, { 0x1165, 0 } },
+ { 0xffc7, 1, { 0x1166, 0 } },
+ { 0xffca, 1, { 0x1167, 0 } },
+ { 0xffcb, 1, { 0x1168, 0 } },
+ { 0xffcc, 1, { 0x1169, 0 } },
+ { 0xffcd, 1, { 0x116a, 0 } },
+ { 0xffce, 1, { 0x116b, 0 } },
+ { 0xffcf, 1, { 0x116c, 0 } },
+ { 0xffd2, 1, { 0x116d, 0 } },
+ { 0xffd3, 1, { 0x116e, 0 } },
+ { 0xffd4, 1, { 0x116f, 0 } },
+ { 0xffd5, 1, { 0x1170, 0 } },
+ { 0xffd6, 1, { 0x1171, 0 } },
+ { 0xffd7, 1, { 0x1172, 0 } },
+ { 0xffda, 1, { 0x1173, 0 } },
+ { 0xffdb, 1, { 0x1174, 0 } },
+ { 0xffdc, 1, { 0x1175, 0 } },
+ { 0xffe0, 1, { 0xa2, 0 } },
+ { 0xffe1, 1, { 0xa3, 0 } },
+ { 0xffe2, 1, { 0xac, 0 } },
+ { 0xffe4, 1, { 0xa6, 0 } },
+ { 0xffe5, 1, { 0xa5, 0 } },
+ { 0xffe6, 1, { 0x20a9, 0 } },
+ { 0xffe8, 1, { 0x2502, 0 } },
+ { 0xffe9, 1, { 0x2190, 0 } },
+ { 0xffea, 1, { 0x2191, 0 } },
+ { 0xffeb, 1, { 0x2192, 0 } },
+ { 0xffec, 1, { 0x2193, 0 } },
+ { 0xffed, 1, { 0x25a0, 0 } },
+ { 0xffee, 1, { 0x25cb, 0 } },
+ { 0x10400, 2, { 0xd801, 0xdc28 } },
+ { 0x10401, 2, { 0xd801, 0xdc29 } },
+ { 0x10402, 2, { 0xd801, 0xdc2a } },
+ { 0x10403, 2, { 0xd801, 0xdc2b } },
+ { 0x10404, 2, { 0xd801, 0xdc2c } },
+ { 0x10405, 2, { 0xd801, 0xdc2d } },
+ { 0x10406, 2, { 0xd801, 0xdc2e } },
+ { 0x10407, 2, { 0xd801, 0xdc2f } },
+ { 0x10408, 2, { 0xd801, 0xdc30 } },
+ { 0x10409, 2, { 0xd801, 0xdc31 } },
+ { 0x1040a, 2, { 0xd801, 0xdc32 } },
+ { 0x1040b, 2, { 0xd801, 0xdc33 } },
+ { 0x1040c, 2, { 0xd801, 0xdc34 } },
+ { 0x1040d, 2, { 0xd801, 0xdc35 } },
+ { 0x1040e, 2, { 0xd801, 0xdc36 } },
+ { 0x1040f, 2, { 0xd801, 0xdc37 } },
+ { 0x10410, 2, { 0xd801, 0xdc38 } },
+ { 0x10411, 2, { 0xd801, 0xdc39 } },
+ { 0x10412, 2, { 0xd801, 0xdc3a } },
+ { 0x10413, 2, { 0xd801, 0xdc3b } },
+ { 0x10414, 2, { 0xd801, 0xdc3c } },
+ { 0x10415, 2, { 0xd801, 0xdc3d } },
+ { 0x10416, 2, { 0xd801, 0xdc3e } },
+ { 0x10417, 2, { 0xd801, 0xdc3f } },
+ { 0x10418, 2, { 0xd801, 0xdc40 } },
+ { 0x10419, 2, { 0xd801, 0xdc41 } },
+ { 0x1041a, 2, { 0xd801, 0xdc42 } },
+ { 0x1041b, 2, { 0xd801, 0xdc43 } },
+ { 0x1041c, 2, { 0xd801, 0xdc44 } },
+ { 0x1041d, 2, { 0xd801, 0xdc45 } },
+ { 0x1041e, 2, { 0xd801, 0xdc46 } },
+ { 0x1041f, 2, { 0xd801, 0xdc47 } },
+ { 0x10420, 2, { 0xd801, 0xdc48 } },
+ { 0x10421, 2, { 0xd801, 0xdc49 } },
+ { 0x10422, 2, { 0xd801, 0xdc4a } },
+ { 0x10423, 2, { 0xd801, 0xdc4b } },
+ { 0x10424, 2, { 0xd801, 0xdc4c } },
+ { 0x10425, 2, { 0xd801, 0xdc4d } },
+ { 0x10426, 2, { 0xd801, 0xdc4e } },
+ { 0x10427, 2, { 0xd801, 0xdc4f } },
+ { 0x104b0, 2, { 0xd801, 0xdcd8 } },
+ { 0x104b1, 2, { 0xd801, 0xdcd9 } },
+ { 0x104b2, 2, { 0xd801, 0xdcda } },
+ { 0x104b3, 2, { 0xd801, 0xdcdb } },
+ { 0x104b4, 2, { 0xd801, 0xdcdc } },
+ { 0x104b5, 2, { 0xd801, 0xdcdd } },
+ { 0x104b6, 2, { 0xd801, 0xdcde } },
+ { 0x104b7, 2, { 0xd801, 0xdcdf } },
+ { 0x104b8, 2, { 0xd801, 0xdce0 } },
+ { 0x104b9, 2, { 0xd801, 0xdce1 } },
+ { 0x104ba, 2, { 0xd801, 0xdce2 } },
+ { 0x104bb, 2, { 0xd801, 0xdce3 } },
+ { 0x104bc, 2, { 0xd801, 0xdce4 } },
+ { 0x104bd, 2, { 0xd801, 0xdce5 } },
+ { 0x104be, 2, { 0xd801, 0xdce6 } },
+ { 0x104bf, 2, { 0xd801, 0xdce7 } },
+ { 0x104c0, 2, { 0xd801, 0xdce8 } },
+ { 0x104c1, 2, { 0xd801, 0xdce9 } },
+ { 0x104c2, 2, { 0xd801, 0xdcea } },
+ { 0x104c3, 2, { 0xd801, 0xdceb } },
+ { 0x104c4, 2, { 0xd801, 0xdcec } },
+ { 0x104c5, 2, { 0xd801, 0xdced } },
+ { 0x104c6, 2, { 0xd801, 0xdcee } },
+ { 0x104c7, 2, { 0xd801, 0xdcef } },
+ { 0x104c8, 2, { 0xd801, 0xdcf0 } },
+ { 0x104c9, 2, { 0xd801, 0xdcf1 } },
+ { 0x104ca, 2, { 0xd801, 0xdcf2 } },
+ { 0x104cb, 2, { 0xd801, 0xdcf3 } },
+ { 0x104cc, 2, { 0xd801, 0xdcf4 } },
+ { 0x104cd, 2, { 0xd801, 0xdcf5 } },
+ { 0x104ce, 2, { 0xd801, 0xdcf6 } },
+ { 0x104cf, 2, { 0xd801, 0xdcf7 } },
+ { 0x104d0, 2, { 0xd801, 0xdcf8 } },
+ { 0x104d1, 2, { 0xd801, 0xdcf9 } },
+ { 0x104d2, 2, { 0xd801, 0xdcfa } },
+ { 0x104d3, 2, { 0xd801, 0xdcfb } },
+ { 0x10570, 2, { 0xd801, 0xdd97 } },
+ { 0x10571, 2, { 0xd801, 0xdd98 } },
+ { 0x10572, 2, { 0xd801, 0xdd99 } },
+ { 0x10573, 2, { 0xd801, 0xdd9a } },
+ { 0x10574, 2, { 0xd801, 0xdd9b } },
+ { 0x10575, 2, { 0xd801, 0xdd9c } },
+ { 0x10576, 2, { 0xd801, 0xdd9d } },
+ { 0x10577, 2, { 0xd801, 0xdd9e } },
+ { 0x10578, 2, { 0xd801, 0xdd9f } },
+ { 0x10579, 2, { 0xd801, 0xdda0 } },
+ { 0x1057a, 2, { 0xd801, 0xdda1 } },
+ { 0x1057c, 2, { 0xd801, 0xdda3 } },
+ { 0x1057d, 2, { 0xd801, 0xdda4 } },
+ { 0x1057e, 2, { 0xd801, 0xdda5 } },
+ { 0x1057f, 2, { 0xd801, 0xdda6 } },
+ { 0x10580, 2, { 0xd801, 0xdda7 } },
+ { 0x10581, 2, { 0xd801, 0xdda8 } },
+ { 0x10582, 2, { 0xd801, 0xdda9 } },
+ { 0x10583, 2, { 0xd801, 0xddaa } },
+ { 0x10584, 2, { 0xd801, 0xddab } },
+ { 0x10585, 2, { 0xd801, 0xddac } },
+ { 0x10586, 2, { 0xd801, 0xddad } },
+ { 0x10587, 2, { 0xd801, 0xddae } },
+ { 0x10588, 2, { 0xd801, 0xddaf } },
+ { 0x10589, 2, { 0xd801, 0xddb0 } },
+ { 0x1058a, 2, { 0xd801, 0xddb1 } },
+ { 0x1058c, 2, { 0xd801, 0xddb3 } },
+ { 0x1058d, 2, { 0xd801, 0xddb4 } },
+ { 0x1058e, 2, { 0xd801, 0xddb5 } },
+ { 0x1058f, 2, { 0xd801, 0xddb6 } },
+ { 0x10590, 2, { 0xd801, 0xddb7 } },
+ { 0x10591, 2, { 0xd801, 0xddb8 } },
+ { 0x10592, 2, { 0xd801, 0xddb9 } },
+ { 0x10594, 2, { 0xd801, 0xddbb } },
+ { 0x10595, 2, { 0xd801, 0xddbc } },
+ { 0x10781, 1, { 0x2d0, 0 } },
+ { 0x10782, 1, { 0x2d1, 0 } },
+ { 0x10783, 1, { 0xe6, 0 } },
+ { 0x10784, 1, { 0x299, 0 } },
+ { 0x10785, 1, { 0x253, 0 } },
+ { 0x10787, 1, { 0x2a3, 0 } },
+ { 0x10788, 1, { 0xab66, 0 } },
+ { 0x10789, 1, { 0x2a5, 0 } },
+ { 0x1078a, 1, { 0x2a4, 0 } },
+ { 0x1078b, 1, { 0x256, 0 } },
+ { 0x1078c, 1, { 0x257, 0 } },
+ { 0x1078d, 1, { 0x1d91, 0 } },
+ { 0x1078e, 1, { 0x258, 0 } },
+ { 0x1078f, 1, { 0x25e, 0 } },
+ { 0x10790, 1, { 0x2a9, 0 } },
+ { 0x10791, 1, { 0x264, 0 } },
+ { 0x10792, 1, { 0x262, 0 } },
+ { 0x10793, 1, { 0x260, 0 } },
+ { 0x10794, 1, { 0x29b, 0 } },
+ { 0x10795, 1, { 0x127, 0 } },
+ { 0x10796, 1, { 0x29c, 0 } },
+ { 0x10797, 1, { 0x267, 0 } },
+ { 0x10798, 1, { 0x284, 0 } },
+ { 0x10799, 1, { 0x2aa, 0 } },
+ { 0x1079a, 1, { 0x2ab, 0 } },
+ { 0x1079b, 1, { 0x26c, 0 } },
+ { 0x1079c, 2, { 0xd837, 0xdf04 } },
+ { 0x1079d, 1, { 0xa78e, 0 } },
+ { 0x1079e, 1, { 0x26e, 0 } },
+ { 0x1079f, 2, { 0xd837, 0xdf05 } },
+ { 0x107a0, 1, { 0x28e, 0 } },
+ { 0x107a1, 2, { 0xd837, 0xdf06 } },
+ { 0x107a2, 1, { 0xf8, 0 } },
+ { 0x107a3, 1, { 0x276, 0 } },
+ { 0x107a4, 1, { 0x277, 0 } },
+ { 0x107a5, 1, { 0x71, 0 } },
+ { 0x107a6, 1, { 0x27a, 0 } },
+ { 0x107a7, 2, { 0xd837, 0xdf08 } },
+ { 0x107a8, 1, { 0x27d, 0 } },
+ { 0x107a9, 1, { 0x27e, 0 } },
+ { 0x107aa, 1, { 0x280, 0 } },
+ { 0x107ab, 1, { 0x2a8, 0 } },
+ { 0x107ac, 1, { 0x2a6, 0 } },
+ { 0x107ad, 1, { 0xab67, 0 } },
+ { 0x107ae, 1, { 0x2a7, 0 } },
+ { 0x107af, 1, { 0x288, 0 } },
+ { 0x107b0, 1, { 0x2c71, 0 } },
+ { 0x107b2, 1, { 0x28f, 0 } },
+ { 0x107b3, 1, { 0x2a1, 0 } },
+ { 0x107b4, 1, { 0x2a2, 0 } },
+ { 0x107b5, 1, { 0x298, 0 } },
+ { 0x107b6, 1, { 0x1c0, 0 } },
+ { 0x107b7, 1, { 0x1c1, 0 } },
+ { 0x107b8, 1, { 0x1c2, 0 } },
+ { 0x107b9, 2, { 0xd837, 0xdf0a } },
+ { 0x107ba, 2, { 0xd837, 0xdf1e } },
+ { 0x10c80, 2, { 0xd803, 0xdcc0 } },
+ { 0x10c81, 2, { 0xd803, 0xdcc1 } },
+ { 0x10c82, 2, { 0xd803, 0xdcc2 } },
+ { 0x10c83, 2, { 0xd803, 0xdcc3 } },
+ { 0x10c84, 2, { 0xd803, 0xdcc4 } },
+ { 0x10c85, 2, { 0xd803, 0xdcc5 } },
+ { 0x10c86, 2, { 0xd803, 0xdcc6 } },
+ { 0x10c87, 2, { 0xd803, 0xdcc7 } },
+ { 0x10c88, 2, { 0xd803, 0xdcc8 } },
+ { 0x10c89, 2, { 0xd803, 0xdcc9 } },
+ { 0x10c8a, 2, { 0xd803, 0xdcca } },
+ { 0x10c8b, 2, { 0xd803, 0xdccb } },
+ { 0x10c8c, 2, { 0xd803, 0xdccc } },
+ { 0x10c8d, 2, { 0xd803, 0xdccd } },
+ { 0x10c8e, 2, { 0xd803, 0xdcce } },
+ { 0x10c8f, 2, { 0xd803, 0xdccf } },
+ { 0x10c90, 2, { 0xd803, 0xdcd0 } },
+ { 0x10c91, 2, { 0xd803, 0xdcd1 } },
+ { 0x10c92, 2, { 0xd803, 0xdcd2 } },
+ { 0x10c93, 2, { 0xd803, 0xdcd3 } },
+ { 0x10c94, 2, { 0xd803, 0xdcd4 } },
+ { 0x10c95, 2, { 0xd803, 0xdcd5 } },
+ { 0x10c96, 2, { 0xd803, 0xdcd6 } },
+ { 0x10c97, 2, { 0xd803, 0xdcd7 } },
+ { 0x10c98, 2, { 0xd803, 0xdcd8 } },
+ { 0x10c99, 2, { 0xd803, 0xdcd9 } },
+ { 0x10c9a, 2, { 0xd803, 0xdcda } },
+ { 0x10c9b, 2, { 0xd803, 0xdcdb } },
+ { 0x10c9c, 2, { 0xd803, 0xdcdc } },
+ { 0x10c9d, 2, { 0xd803, 0xdcdd } },
+ { 0x10c9e, 2, { 0xd803, 0xdcde } },
+ { 0x10c9f, 2, { 0xd803, 0xdcdf } },
+ { 0x10ca0, 2, { 0xd803, 0xdce0 } },
+ { 0x10ca1, 2, { 0xd803, 0xdce1 } },
+ { 0x10ca2, 2, { 0xd803, 0xdce2 } },
+ { 0x10ca3, 2, { 0xd803, 0xdce3 } },
+ { 0x10ca4, 2, { 0xd803, 0xdce4 } },
+ { 0x10ca5, 2, { 0xd803, 0xdce5 } },
+ { 0x10ca6, 2, { 0xd803, 0xdce6 } },
+ { 0x10ca7, 2, { 0xd803, 0xdce7 } },
+ { 0x10ca8, 2, { 0xd803, 0xdce8 } },
+ { 0x10ca9, 2, { 0xd803, 0xdce9 } },
+ { 0x10caa, 2, { 0xd803, 0xdcea } },
+ { 0x10cab, 2, { 0xd803, 0xdceb } },
+ { 0x10cac, 2, { 0xd803, 0xdcec } },
+ { 0x10cad, 2, { 0xd803, 0xdced } },
+ { 0x10cae, 2, { 0xd803, 0xdcee } },
+ { 0x10caf, 2, { 0xd803, 0xdcef } },
+ { 0x10cb0, 2, { 0xd803, 0xdcf0 } },
+ { 0x10cb1, 2, { 0xd803, 0xdcf1 } },
+ { 0x10cb2, 2, { 0xd803, 0xdcf2 } },
+ { 0x118a0, 2, { 0xd806, 0xdcc0 } },
+ { 0x118a1, 2, { 0xd806, 0xdcc1 } },
+ { 0x118a2, 2, { 0xd806, 0xdcc2 } },
+ { 0x118a3, 2, { 0xd806, 0xdcc3 } },
+ { 0x118a4, 2, { 0xd806, 0xdcc4 } },
+ { 0x118a5, 2, { 0xd806, 0xdcc5 } },
+ { 0x118a6, 2, { 0xd806, 0xdcc6 } },
+ { 0x118a7, 2, { 0xd806, 0xdcc7 } },
+ { 0x118a8, 2, { 0xd806, 0xdcc8 } },
+ { 0x118a9, 2, { 0xd806, 0xdcc9 } },
+ { 0x118aa, 2, { 0xd806, 0xdcca } },
+ { 0x118ab, 2, { 0xd806, 0xdccb } },
+ { 0x118ac, 2, { 0xd806, 0xdccc } },
+ { 0x118ad, 2, { 0xd806, 0xdccd } },
+ { 0x118ae, 2, { 0xd806, 0xdcce } },
+ { 0x118af, 2, { 0xd806, 0xdccf } },
+ { 0x118b0, 2, { 0xd806, 0xdcd0 } },
+ { 0x118b1, 2, { 0xd806, 0xdcd1 } },
+ { 0x118b2, 2, { 0xd806, 0xdcd2 } },
+ { 0x118b3, 2, { 0xd806, 0xdcd3 } },
+ { 0x118b4, 2, { 0xd806, 0xdcd4 } },
+ { 0x118b5, 2, { 0xd806, 0xdcd5 } },
+ { 0x118b6, 2, { 0xd806, 0xdcd6 } },
+ { 0x118b7, 2, { 0xd806, 0xdcd7 } },
+ { 0x118b8, 2, { 0xd806, 0xdcd8 } },
+ { 0x118b9, 2, { 0xd806, 0xdcd9 } },
+ { 0x118ba, 2, { 0xd806, 0xdcda } },
+ { 0x118bb, 2, { 0xd806, 0xdcdb } },
+ { 0x118bc, 2, { 0xd806, 0xdcdc } },
+ { 0x118bd, 2, { 0xd806, 0xdcdd } },
+ { 0x118be, 2, { 0xd806, 0xdcde } },
+ { 0x118bf, 2, { 0xd806, 0xdcdf } },
+ { 0x16e40, 2, { 0xd81b, 0xde60 } },
+ { 0x16e41, 2, { 0xd81b, 0xde61 } },
+ { 0x16e42, 2, { 0xd81b, 0xde62 } },
+ { 0x16e43, 2, { 0xd81b, 0xde63 } },
+ { 0x16e44, 2, { 0xd81b, 0xde64 } },
+ { 0x16e45, 2, { 0xd81b, 0xde65 } },
+ { 0x16e46, 2, { 0xd81b, 0xde66 } },
+ { 0x16e47, 2, { 0xd81b, 0xde67 } },
+ { 0x16e48, 2, { 0xd81b, 0xde68 } },
+ { 0x16e49, 2, { 0xd81b, 0xde69 } },
+ { 0x16e4a, 2, { 0xd81b, 0xde6a } },
+ { 0x16e4b, 2, { 0xd81b, 0xde6b } },
+ { 0x16e4c, 2, { 0xd81b, 0xde6c } },
+ { 0x16e4d, 2, { 0xd81b, 0xde6d } },
+ { 0x16e4e, 2, { 0xd81b, 0xde6e } },
+ { 0x16e4f, 2, { 0xd81b, 0xde6f } },
+ { 0x16e50, 2, { 0xd81b, 0xde70 } },
+ { 0x16e51, 2, { 0xd81b, 0xde71 } },
+ { 0x16e52, 2, { 0xd81b, 0xde72 } },
+ { 0x16e53, 2, { 0xd81b, 0xde73 } },
+ { 0x16e54, 2, { 0xd81b, 0xde74 } },
+ { 0x16e55, 2, { 0xd81b, 0xde75 } },
+ { 0x16e56, 2, { 0xd81b, 0xde76 } },
+ { 0x16e57, 2, { 0xd81b, 0xde77 } },
+ { 0x16e58, 2, { 0xd81b, 0xde78 } },
+ { 0x16e59, 2, { 0xd81b, 0xde79 } },
+ { 0x16e5a, 2, { 0xd81b, 0xde7a } },
+ { 0x16e5b, 2, { 0xd81b, 0xde7b } },
+ { 0x16e5c, 2, { 0xd81b, 0xde7c } },
+ { 0x16e5d, 2, { 0xd81b, 0xde7d } },
+ { 0x16e5e, 2, { 0xd81b, 0xde7e } },
+ { 0x16e5f, 2, { 0xd81b, 0xde7f } },
+ { 0x1d15e, 4, { 265, 0 } },
+ { 0x1d15f, 4, { 179, 0 } },
+ { 0x1d160, 6, { 203, 0 } },
+ { 0x1d161, 6, { 197, 0 } },
+ { 0x1d162, 6, { 191, 0 } },
+ { 0x1d163, 6, { 185, 0 } },
+ { 0x1d164, 6, { 179, 0 } },
+ { 0x1d1bb, 4, { 167, 0 } },
+ { 0x1d1bc, 4, { 155, 0 } },
+ { 0x1d1bd, 6, { 173, 0 } },
+ { 0x1d1be, 6, { 161, 0 } },
+ { 0x1d1bf, 6, { 167, 0 } },
+ { 0x1d1c0, 6, { 155, 0 } },
+ { 0x1d400, 1, { 0x61, 0 } },
+ { 0x1d401, 1, { 0x62, 0 } },
+ { 0x1d402, 1, { 0x63, 0 } },
+ { 0x1d403, 1, { 0x64, 0 } },
+ { 0x1d404, 1, { 0x65, 0 } },
+ { 0x1d405, 1, { 0x66, 0 } },
+ { 0x1d406, 1, { 0x67, 0 } },
+ { 0x1d407, 1, { 0x68, 0 } },
+ { 0x1d408, 1, { 0x69, 0 } },
+ { 0x1d409, 1, { 0x6a, 0 } },
+ { 0x1d40a, 1, { 0x6b, 0 } },
+ { 0x1d40b, 1, { 0x6c, 0 } },
+ { 0x1d40c, 1, { 0x6d, 0 } },
+ { 0x1d40d, 1, { 0x6e, 0 } },
+ { 0x1d40e, 1, { 0x6f, 0 } },
+ { 0x1d40f, 1, { 0x70, 0 } },
+ { 0x1d410, 1, { 0x71, 0 } },
+ { 0x1d411, 1, { 0x72, 0 } },
+ { 0x1d412, 1, { 0x73, 0 } },
+ { 0x1d413, 1, { 0x74, 0 } },
+ { 0x1d414, 1, { 0x75, 0 } },
+ { 0x1d415, 1, { 0x76, 0 } },
+ { 0x1d416, 1, { 0x77, 0 } },
+ { 0x1d417, 1, { 0x78, 0 } },
+ { 0x1d418, 1, { 0x79, 0 } },
+ { 0x1d419, 1, { 0x7a, 0 } },
+ { 0x1d41a, 1, { 0x61, 0 } },
+ { 0x1d41b, 1, { 0x62, 0 } },
+ { 0x1d41c, 1, { 0x63, 0 } },
+ { 0x1d41d, 1, { 0x64, 0 } },
+ { 0x1d41e, 1, { 0x65, 0 } },
+ { 0x1d41f, 1, { 0x66, 0 } },
+ { 0x1d420, 1, { 0x67, 0 } },
+ { 0x1d421, 1, { 0x68, 0 } },
+ { 0x1d422, 1, { 0x69, 0 } },
+ { 0x1d423, 1, { 0x6a, 0 } },
+ { 0x1d424, 1, { 0x6b, 0 } },
+ { 0x1d425, 1, { 0x6c, 0 } },
+ { 0x1d426, 1, { 0x6d, 0 } },
+ { 0x1d427, 1, { 0x6e, 0 } },
+ { 0x1d428, 1, { 0x6f, 0 } },
+ { 0x1d429, 1, { 0x70, 0 } },
+ { 0x1d42a, 1, { 0x71, 0 } },
+ { 0x1d42b, 1, { 0x72, 0 } },
+ { 0x1d42c, 1, { 0x73, 0 } },
+ { 0x1d42d, 1, { 0x74, 0 } },
+ { 0x1d42e, 1, { 0x75, 0 } },
+ { 0x1d42f, 1, { 0x76, 0 } },
+ { 0x1d430, 1, { 0x77, 0 } },
+ { 0x1d431, 1, { 0x78, 0 } },
+ { 0x1d432, 1, { 0x79, 0 } },
+ { 0x1d433, 1, { 0x7a, 0 } },
+ { 0x1d434, 1, { 0x61, 0 } },
+ { 0x1d435, 1, { 0x62, 0 } },
+ { 0x1d436, 1, { 0x63, 0 } },
+ { 0x1d437, 1, { 0x64, 0 } },
+ { 0x1d438, 1, { 0x65, 0 } },
+ { 0x1d439, 1, { 0x66, 0 } },
+ { 0x1d43a, 1, { 0x67, 0 } },
+ { 0x1d43b, 1, { 0x68, 0 } },
+ { 0x1d43c, 1, { 0x69, 0 } },
+ { 0x1d43d, 1, { 0x6a, 0 } },
+ { 0x1d43e, 1, { 0x6b, 0 } },
+ { 0x1d43f, 1, { 0x6c, 0 } },
+ { 0x1d440, 1, { 0x6d, 0 } },
+ { 0x1d441, 1, { 0x6e, 0 } },
+ { 0x1d442, 1, { 0x6f, 0 } },
+ { 0x1d443, 1, { 0x70, 0 } },
+ { 0x1d444, 1, { 0x71, 0 } },
+ { 0x1d445, 1, { 0x72, 0 } },
+ { 0x1d446, 1, { 0x73, 0 } },
+ { 0x1d447, 1, { 0x74, 0 } },
+ { 0x1d448, 1, { 0x75, 0 } },
+ { 0x1d449, 1, { 0x76, 0 } },
+ { 0x1d44a, 1, { 0x77, 0 } },
+ { 0x1d44b, 1, { 0x78, 0 } },
+ { 0x1d44c, 1, { 0x79, 0 } },
+ { 0x1d44d, 1, { 0x7a, 0 } },
+ { 0x1d44e, 1, { 0x61, 0 } },
+ { 0x1d44f, 1, { 0x62, 0 } },
+ { 0x1d450, 1, { 0x63, 0 } },
+ { 0x1d451, 1, { 0x64, 0 } },
+ { 0x1d452, 1, { 0x65, 0 } },
+ { 0x1d453, 1, { 0x66, 0 } },
+ { 0x1d454, 1, { 0x67, 0 } },
+ { 0x1d456, 1, { 0x69, 0 } },
+ { 0x1d457, 1, { 0x6a, 0 } },
+ { 0x1d458, 1, { 0x6b, 0 } },
+ { 0x1d459, 1, { 0x6c, 0 } },
+ { 0x1d45a, 1, { 0x6d, 0 } },
+ { 0x1d45b, 1, { 0x6e, 0 } },
+ { 0x1d45c, 1, { 0x6f, 0 } },
+ { 0x1d45d, 1, { 0x70, 0 } },
+ { 0x1d45e, 1, { 0x71, 0 } },
+ { 0x1d45f, 1, { 0x72, 0 } },
+ { 0x1d460, 1, { 0x73, 0 } },
+ { 0x1d461, 1, { 0x74, 0 } },
+ { 0x1d462, 1, { 0x75, 0 } },
+ { 0x1d463, 1, { 0x76, 0 } },
+ { 0x1d464, 1, { 0x77, 0 } },
+ { 0x1d465, 1, { 0x78, 0 } },
+ { 0x1d466, 1, { 0x79, 0 } },
+ { 0x1d467, 1, { 0x7a, 0 } },
+ { 0x1d468, 1, { 0x61, 0 } },
+ { 0x1d469, 1, { 0x62, 0 } },
+ { 0x1d46a, 1, { 0x63, 0 } },
+ { 0x1d46b, 1, { 0x64, 0 } },
+ { 0x1d46c, 1, { 0x65, 0 } },
+ { 0x1d46d, 1, { 0x66, 0 } },
+ { 0x1d46e, 1, { 0x67, 0 } },
+ { 0x1d46f, 1, { 0x68, 0 } },
+ { 0x1d470, 1, { 0x69, 0 } },
+ { 0x1d471, 1, { 0x6a, 0 } },
+ { 0x1d472, 1, { 0x6b, 0 } },
+ { 0x1d473, 1, { 0x6c, 0 } },
+ { 0x1d474, 1, { 0x6d, 0 } },
+ { 0x1d475, 1, { 0x6e, 0 } },
+ { 0x1d476, 1, { 0x6f, 0 } },
+ { 0x1d477, 1, { 0x70, 0 } },
+ { 0x1d478, 1, { 0x71, 0 } },
+ { 0x1d479, 1, { 0x72, 0 } },
+ { 0x1d47a, 1, { 0x73, 0 } },
+ { 0x1d47b, 1, { 0x74, 0 } },
+ { 0x1d47c, 1, { 0x75, 0 } },
+ { 0x1d47d, 1, { 0x76, 0 } },
+ { 0x1d47e, 1, { 0x77, 0 } },
+ { 0x1d47f, 1, { 0x78, 0 } },
+ { 0x1d480, 1, { 0x79, 0 } },
+ { 0x1d481, 1, { 0x7a, 0 } },
+ { 0x1d482, 1, { 0x61, 0 } },
+ { 0x1d483, 1, { 0x62, 0 } },
+ { 0x1d484, 1, { 0x63, 0 } },
+ { 0x1d485, 1, { 0x64, 0 } },
+ { 0x1d486, 1, { 0x65, 0 } },
+ { 0x1d487, 1, { 0x66, 0 } },
+ { 0x1d488, 1, { 0x67, 0 } },
+ { 0x1d489, 1, { 0x68, 0 } },
+ { 0x1d48a, 1, { 0x69, 0 } },
+ { 0x1d48b, 1, { 0x6a, 0 } },
+ { 0x1d48c, 1, { 0x6b, 0 } },
+ { 0x1d48d, 1, { 0x6c, 0 } },
+ { 0x1d48e, 1, { 0x6d, 0 } },
+ { 0x1d48f, 1, { 0x6e, 0 } },
+ { 0x1d490, 1, { 0x6f, 0 } },
+ { 0x1d491, 1, { 0x70, 0 } },
+ { 0x1d492, 1, { 0x71, 0 } },
+ { 0x1d493, 1, { 0x72, 0 } },
+ { 0x1d494, 1, { 0x73, 0 } },
+ { 0x1d495, 1, { 0x74, 0 } },
+ { 0x1d496, 1, { 0x75, 0 } },
+ { 0x1d497, 1, { 0x76, 0 } },
+ { 0x1d498, 1, { 0x77, 0 } },
+ { 0x1d499, 1, { 0x78, 0 } },
+ { 0x1d49a, 1, { 0x79, 0 } },
+ { 0x1d49b, 1, { 0x7a, 0 } },
+ { 0x1d49c, 1, { 0x61, 0 } },
+ { 0x1d49e, 1, { 0x63, 0 } },
+ { 0x1d49f, 1, { 0x64, 0 } },
+ { 0x1d4a2, 1, { 0x67, 0 } },
+ { 0x1d4a5, 1, { 0x6a, 0 } },
+ { 0x1d4a6, 1, { 0x6b, 0 } },
+ { 0x1d4a9, 1, { 0x6e, 0 } },
+ { 0x1d4aa, 1, { 0x6f, 0 } },
+ { 0x1d4ab, 1, { 0x70, 0 } },
+ { 0x1d4ac, 1, { 0x71, 0 } },
+ { 0x1d4ae, 1, { 0x73, 0 } },
+ { 0x1d4af, 1, { 0x74, 0 } },
+ { 0x1d4b0, 1, { 0x75, 0 } },
+ { 0x1d4b1, 1, { 0x76, 0 } },
+ { 0x1d4b2, 1, { 0x77, 0 } },
+ { 0x1d4b3, 1, { 0x78, 0 } },
+ { 0x1d4b4, 1, { 0x79, 0 } },
+ { 0x1d4b5, 1, { 0x7a, 0 } },
+ { 0x1d4b6, 1, { 0x61, 0 } },
+ { 0x1d4b7, 1, { 0x62, 0 } },
+ { 0x1d4b8, 1, { 0x63, 0 } },
+ { 0x1d4b9, 1, { 0x64, 0 } },
+ { 0x1d4bb, 1, { 0x66, 0 } },
+ { 0x1d4bd, 1, { 0x68, 0 } },
+ { 0x1d4be, 1, { 0x69, 0 } },
+ { 0x1d4bf, 1, { 0x6a, 0 } },
+ { 0x1d4c0, 1, { 0x6b, 0 } },
+ { 0x1d4c1, 1, { 0x6c, 0 } },
+ { 0x1d4c2, 1, { 0x6d, 0 } },
+ { 0x1d4c3, 1, { 0x6e, 0 } },
+ { 0x1d4c5, 1, { 0x70, 0 } },
+ { 0x1d4c6, 1, { 0x71, 0 } },
+ { 0x1d4c7, 1, { 0x72, 0 } },
+ { 0x1d4c8, 1, { 0x73, 0 } },
+ { 0x1d4c9, 1, { 0x74, 0 } },
+ { 0x1d4ca, 1, { 0x75, 0 } },
+ { 0x1d4cb, 1, { 0x76, 0 } },
+ { 0x1d4cc, 1, { 0x77, 0 } },
+ { 0x1d4cd, 1, { 0x78, 0 } },
+ { 0x1d4ce, 1, { 0x79, 0 } },
+ { 0x1d4cf, 1, { 0x7a, 0 } },
+ { 0x1d4d0, 1, { 0x61, 0 } },
+ { 0x1d4d1, 1, { 0x62, 0 } },
+ { 0x1d4d2, 1, { 0x63, 0 } },
+ { 0x1d4d3, 1, { 0x64, 0 } },
+ { 0x1d4d4, 1, { 0x65, 0 } },
+ { 0x1d4d5, 1, { 0x66, 0 } },
+ { 0x1d4d6, 1, { 0x67, 0 } },
+ { 0x1d4d7, 1, { 0x68, 0 } },
+ { 0x1d4d8, 1, { 0x69, 0 } },
+ { 0x1d4d9, 1, { 0x6a, 0 } },
+ { 0x1d4da, 1, { 0x6b, 0 } },
+ { 0x1d4db, 1, { 0x6c, 0 } },
+ { 0x1d4dc, 1, { 0x6d, 0 } },
+ { 0x1d4dd, 1, { 0x6e, 0 } },
+ { 0x1d4de, 1, { 0x6f, 0 } },
+ { 0x1d4df, 1, { 0x70, 0 } },
+ { 0x1d4e0, 1, { 0x71, 0 } },
+ { 0x1d4e1, 1, { 0x72, 0 } },
+ { 0x1d4e2, 1, { 0x73, 0 } },
+ { 0x1d4e3, 1, { 0x74, 0 } },
+ { 0x1d4e4, 1, { 0x75, 0 } },
+ { 0x1d4e5, 1, { 0x76, 0 } },
+ { 0x1d4e6, 1, { 0x77, 0 } },
+ { 0x1d4e7, 1, { 0x78, 0 } },
+ { 0x1d4e8, 1, { 0x79, 0 } },
+ { 0x1d4e9, 1, { 0x7a, 0 } },
+ { 0x1d4ea, 1, { 0x61, 0 } },
+ { 0x1d4eb, 1, { 0x62, 0 } },
+ { 0x1d4ec, 1, { 0x63, 0 } },
+ { 0x1d4ed, 1, { 0x64, 0 } },
+ { 0x1d4ee, 1, { 0x65, 0 } },
+ { 0x1d4ef, 1, { 0x66, 0 } },
+ { 0x1d4f0, 1, { 0x67, 0 } },
+ { 0x1d4f1, 1, { 0x68, 0 } },
+ { 0x1d4f2, 1, { 0x69, 0 } },
+ { 0x1d4f3, 1, { 0x6a, 0 } },
+ { 0x1d4f4, 1, { 0x6b, 0 } },
+ { 0x1d4f5, 1, { 0x6c, 0 } },
+ { 0x1d4f6, 1, { 0x6d, 0 } },
+ { 0x1d4f7, 1, { 0x6e, 0 } },
+ { 0x1d4f8, 1, { 0x6f, 0 } },
+ { 0x1d4f9, 1, { 0x70, 0 } },
+ { 0x1d4fa, 1, { 0x71, 0 } },
+ { 0x1d4fb, 1, { 0x72, 0 } },
+ { 0x1d4fc, 1, { 0x73, 0 } },
+ { 0x1d4fd, 1, { 0x74, 0 } },
+ { 0x1d4fe, 1, { 0x75, 0 } },
+ { 0x1d4ff, 1, { 0x76, 0 } },
+ { 0x1d500, 1, { 0x77, 0 } },
+ { 0x1d501, 1, { 0x78, 0 } },
+ { 0x1d502, 1, { 0x79, 0 } },
+ { 0x1d503, 1, { 0x7a, 0 } },
+ { 0x1d504, 1, { 0x61, 0 } },
+ { 0x1d505, 1, { 0x62, 0 } },
+ { 0x1d507, 1, { 0x64, 0 } },
+ { 0x1d508, 1, { 0x65, 0 } },
+ { 0x1d509, 1, { 0x66, 0 } },
+ { 0x1d50a, 1, { 0x67, 0 } },
+ { 0x1d50d, 1, { 0x6a, 0 } },
+ { 0x1d50e, 1, { 0x6b, 0 } },
+ { 0x1d50f, 1, { 0x6c, 0 } },
+ { 0x1d510, 1, { 0x6d, 0 } },
+ { 0x1d511, 1, { 0x6e, 0 } },
+ { 0x1d512, 1, { 0x6f, 0 } },
+ { 0x1d513, 1, { 0x70, 0 } },
+ { 0x1d514, 1, { 0x71, 0 } },
+ { 0x1d516, 1, { 0x73, 0 } },
+ { 0x1d517, 1, { 0x74, 0 } },
+ { 0x1d518, 1, { 0x75, 0 } },
+ { 0x1d519, 1, { 0x76, 0 } },
+ { 0x1d51a, 1, { 0x77, 0 } },
+ { 0x1d51b, 1, { 0x78, 0 } },
+ { 0x1d51c, 1, { 0x79, 0 } },
+ { 0x1d51e, 1, { 0x61, 0 } },
+ { 0x1d51f, 1, { 0x62, 0 } },
+ { 0x1d520, 1, { 0x63, 0 } },
+ { 0x1d521, 1, { 0x64, 0 } },
+ { 0x1d522, 1, { 0x65, 0 } },
+ { 0x1d523, 1, { 0x66, 0 } },
+ { 0x1d524, 1, { 0x67, 0 } },
+ { 0x1d525, 1, { 0x68, 0 } },
+ { 0x1d526, 1, { 0x69, 0 } },
+ { 0x1d527, 1, { 0x6a, 0 } },
+ { 0x1d528, 1, { 0x6b, 0 } },
+ { 0x1d529, 1, { 0x6c, 0 } },
+ { 0x1d52a, 1, { 0x6d, 0 } },
+ { 0x1d52b, 1, { 0x6e, 0 } },
+ { 0x1d52c, 1, { 0x6f, 0 } },
+ { 0x1d52d, 1, { 0x70, 0 } },
+ { 0x1d52e, 1, { 0x71, 0 } },
+ { 0x1d52f, 1, { 0x72, 0 } },
+ { 0x1d530, 1, { 0x73, 0 } },
+ { 0x1d531, 1, { 0x74, 0 } },
+ { 0x1d532, 1, { 0x75, 0 } },
+ { 0x1d533, 1, { 0x76, 0 } },
+ { 0x1d534, 1, { 0x77, 0 } },
+ { 0x1d535, 1, { 0x78, 0 } },
+ { 0x1d536, 1, { 0x79, 0 } },
+ { 0x1d537, 1, { 0x7a, 0 } },
+ { 0x1d538, 1, { 0x61, 0 } },
+ { 0x1d539, 1, { 0x62, 0 } },
+ { 0x1d53b, 1, { 0x64, 0 } },
+ { 0x1d53c, 1, { 0x65, 0 } },
+ { 0x1d53d, 1, { 0x66, 0 } },
+ { 0x1d53e, 1, { 0x67, 0 } },
+ { 0x1d540, 1, { 0x69, 0 } },
+ { 0x1d541, 1, { 0x6a, 0 } },
+ { 0x1d542, 1, { 0x6b, 0 } },
+ { 0x1d543, 1, { 0x6c, 0 } },
+ { 0x1d544, 1, { 0x6d, 0 } },
+ { 0x1d546, 1, { 0x6f, 0 } },
+ { 0x1d54a, 1, { 0x73, 0 } },
+ { 0x1d54b, 1, { 0x74, 0 } },
+ { 0x1d54c, 1, { 0x75, 0 } },
+ { 0x1d54d, 1, { 0x76, 0 } },
+ { 0x1d54e, 1, { 0x77, 0 } },
+ { 0x1d54f, 1, { 0x78, 0 } },
+ { 0x1d550, 1, { 0x79, 0 } },
+ { 0x1d552, 1, { 0x61, 0 } },
+ { 0x1d553, 1, { 0x62, 0 } },
+ { 0x1d554, 1, { 0x63, 0 } },
+ { 0x1d555, 1, { 0x64, 0 } },
+ { 0x1d556, 1, { 0x65, 0 } },
+ { 0x1d557, 1, { 0x66, 0 } },
+ { 0x1d558, 1, { 0x67, 0 } },
+ { 0x1d559, 1, { 0x68, 0 } },
+ { 0x1d55a, 1, { 0x69, 0 } },
+ { 0x1d55b, 1, { 0x6a, 0 } },
+ { 0x1d55c, 1, { 0x6b, 0 } },
+ { 0x1d55d, 1, { 0x6c, 0 } },
+ { 0x1d55e, 1, { 0x6d, 0 } },
+ { 0x1d55f, 1, { 0x6e, 0 } },
+ { 0x1d560, 1, { 0x6f, 0 } },
+ { 0x1d561, 1, { 0x70, 0 } },
+ { 0x1d562, 1, { 0x71, 0 } },
+ { 0x1d563, 1, { 0x72, 0 } },
+ { 0x1d564, 1, { 0x73, 0 } },
+ { 0x1d565, 1, { 0x74, 0 } },
+ { 0x1d566, 1, { 0x75, 0 } },
+ { 0x1d567, 1, { 0x76, 0 } },
+ { 0x1d568, 1, { 0x77, 0 } },
+ { 0x1d569, 1, { 0x78, 0 } },
+ { 0x1d56a, 1, { 0x79, 0 } },
+ { 0x1d56b, 1, { 0x7a, 0 } },
+ { 0x1d56c, 1, { 0x61, 0 } },
+ { 0x1d56d, 1, { 0x62, 0 } },
+ { 0x1d56e, 1, { 0x63, 0 } },
+ { 0x1d56f, 1, { 0x64, 0 } },
+ { 0x1d570, 1, { 0x65, 0 } },
+ { 0x1d571, 1, { 0x66, 0 } },
+ { 0x1d572, 1, { 0x67, 0 } },
+ { 0x1d573, 1, { 0x68, 0 } },
+ { 0x1d574, 1, { 0x69, 0 } },
+ { 0x1d575, 1, { 0x6a, 0 } },
+ { 0x1d576, 1, { 0x6b, 0 } },
+ { 0x1d577, 1, { 0x6c, 0 } },
+ { 0x1d578, 1, { 0x6d, 0 } },
+ { 0x1d579, 1, { 0x6e, 0 } },
+ { 0x1d57a, 1, { 0x6f, 0 } },
+ { 0x1d57b, 1, { 0x70, 0 } },
+ { 0x1d57c, 1, { 0x71, 0 } },
+ { 0x1d57d, 1, { 0x72, 0 } },
+ { 0x1d57e, 1, { 0x73, 0 } },
+ { 0x1d57f, 1, { 0x74, 0 } },
+ { 0x1d580, 1, { 0x75, 0 } },
+ { 0x1d581, 1, { 0x76, 0 } },
+ { 0x1d582, 1, { 0x77, 0 } },
+ { 0x1d583, 1, { 0x78, 0 } },
+ { 0x1d584, 1, { 0x79, 0 } },
+ { 0x1d585, 1, { 0x7a, 0 } },
+ { 0x1d586, 1, { 0x61, 0 } },
+ { 0x1d587, 1, { 0x62, 0 } },
+ { 0x1d588, 1, { 0x63, 0 } },
+ { 0x1d589, 1, { 0x64, 0 } },
+ { 0x1d58a, 1, { 0x65, 0 } },
+ { 0x1d58b, 1, { 0x66, 0 } },
+ { 0x1d58c, 1, { 0x67, 0 } },
+ { 0x1d58d, 1, { 0x68, 0 } },
+ { 0x1d58e, 1, { 0x69, 0 } },
+ { 0x1d58f, 1, { 0x6a, 0 } },
+ { 0x1d590, 1, { 0x6b, 0 } },
+ { 0x1d591, 1, { 0x6c, 0 } },
+ { 0x1d592, 1, { 0x6d, 0 } },
+ { 0x1d593, 1, { 0x6e, 0 } },
+ { 0x1d594, 1, { 0x6f, 0 } },
+ { 0x1d595, 1, { 0x70, 0 } },
+ { 0x1d596, 1, { 0x71, 0 } },
+ { 0x1d597, 1, { 0x72, 0 } },
+ { 0x1d598, 1, { 0x73, 0 } },
+ { 0x1d599, 1, { 0x74, 0 } },
+ { 0x1d59a, 1, { 0x75, 0 } },
+ { 0x1d59b, 1, { 0x76, 0 } },
+ { 0x1d59c, 1, { 0x77, 0 } },
+ { 0x1d59d, 1, { 0x78, 0 } },
+ { 0x1d59e, 1, { 0x79, 0 } },
+ { 0x1d59f, 1, { 0x7a, 0 } },
+ { 0x1d5a0, 1, { 0x61, 0 } },
+ { 0x1d5a1, 1, { 0x62, 0 } },
+ { 0x1d5a2, 1, { 0x63, 0 } },
+ { 0x1d5a3, 1, { 0x64, 0 } },
+ { 0x1d5a4, 1, { 0x65, 0 } },
+ { 0x1d5a5, 1, { 0x66, 0 } },
+ { 0x1d5a6, 1, { 0x67, 0 } },
+ { 0x1d5a7, 1, { 0x68, 0 } },
+ { 0x1d5a8, 1, { 0x69, 0 } },
+ { 0x1d5a9, 1, { 0x6a, 0 } },
+ { 0x1d5aa, 1, { 0x6b, 0 } },
+ { 0x1d5ab, 1, { 0x6c, 0 } },
+ { 0x1d5ac, 1, { 0x6d, 0 } },
+ { 0x1d5ad, 1, { 0x6e, 0 } },
+ { 0x1d5ae, 1, { 0x6f, 0 } },
+ { 0x1d5af, 1, { 0x70, 0 } },
+ { 0x1d5b0, 1, { 0x71, 0 } },
+ { 0x1d5b1, 1, { 0x72, 0 } },
+ { 0x1d5b2, 1, { 0x73, 0 } },
+ { 0x1d5b3, 1, { 0x74, 0 } },
+ { 0x1d5b4, 1, { 0x75, 0 } },
+ { 0x1d5b5, 1, { 0x76, 0 } },
+ { 0x1d5b6, 1, { 0x77, 0 } },
+ { 0x1d5b7, 1, { 0x78, 0 } },
+ { 0x1d5b8, 1, { 0x79, 0 } },
+ { 0x1d5b9, 1, { 0x7a, 0 } },
+ { 0x1d5ba, 1, { 0x61, 0 } },
+ { 0x1d5bb, 1, { 0x62, 0 } },
+ { 0x1d5bc, 1, { 0x63, 0 } },
+ { 0x1d5bd, 1, { 0x64, 0 } },
+ { 0x1d5be, 1, { 0x65, 0 } },
+ { 0x1d5bf, 1, { 0x66, 0 } },
+ { 0x1d5c0, 1, { 0x67, 0 } },
+ { 0x1d5c1, 1, { 0x68, 0 } },
+ { 0x1d5c2, 1, { 0x69, 0 } },
+ { 0x1d5c3, 1, { 0x6a, 0 } },
+ { 0x1d5c4, 1, { 0x6b, 0 } },
+ { 0x1d5c5, 1, { 0x6c, 0 } },
+ { 0x1d5c6, 1, { 0x6d, 0 } },
+ { 0x1d5c7, 1, { 0x6e, 0 } },
+ { 0x1d5c8, 1, { 0x6f, 0 } },
+ { 0x1d5c9, 1, { 0x70, 0 } },
+ { 0x1d5ca, 1, { 0x71, 0 } },
+ { 0x1d5cb, 1, { 0x72, 0 } },
+ { 0x1d5cc, 1, { 0x73, 0 } },
+ { 0x1d5cd, 1, { 0x74, 0 } },
+ { 0x1d5ce, 1, { 0x75, 0 } },
+ { 0x1d5cf, 1, { 0x76, 0 } },
+ { 0x1d5d0, 1, { 0x77, 0 } },
+ { 0x1d5d1, 1, { 0x78, 0 } },
+ { 0x1d5d2, 1, { 0x79, 0 } },
+ { 0x1d5d3, 1, { 0x7a, 0 } },
+ { 0x1d5d4, 1, { 0x61, 0 } },
+ { 0x1d5d5, 1, { 0x62, 0 } },
+ { 0x1d5d6, 1, { 0x63, 0 } },
+ { 0x1d5d7, 1, { 0x64, 0 } },
+ { 0x1d5d8, 1, { 0x65, 0 } },
+ { 0x1d5d9, 1, { 0x66, 0 } },
+ { 0x1d5da, 1, { 0x67, 0 } },
+ { 0x1d5db, 1, { 0x68, 0 } },
+ { 0x1d5dc, 1, { 0x69, 0 } },
+ { 0x1d5dd, 1, { 0x6a, 0 } },
+ { 0x1d5de, 1, { 0x6b, 0 } },
+ { 0x1d5df, 1, { 0x6c, 0 } },
+ { 0x1d5e0, 1, { 0x6d, 0 } },
+ { 0x1d5e1, 1, { 0x6e, 0 } },
+ { 0x1d5e2, 1, { 0x6f, 0 } },
+ { 0x1d5e3, 1, { 0x70, 0 } },
+ { 0x1d5e4, 1, { 0x71, 0 } },
+ { 0x1d5e5, 1, { 0x72, 0 } },
+ { 0x1d5e6, 1, { 0x73, 0 } },
+ { 0x1d5e7, 1, { 0x74, 0 } },
+ { 0x1d5e8, 1, { 0x75, 0 } },
+ { 0x1d5e9, 1, { 0x76, 0 } },
+ { 0x1d5ea, 1, { 0x77, 0 } },
+ { 0x1d5eb, 1, { 0x78, 0 } },
+ { 0x1d5ec, 1, { 0x79, 0 } },
+ { 0x1d5ed, 1, { 0x7a, 0 } },
+ { 0x1d5ee, 1, { 0x61, 0 } },
+ { 0x1d5ef, 1, { 0x62, 0 } },
+ { 0x1d5f0, 1, { 0x63, 0 } },
+ { 0x1d5f1, 1, { 0x64, 0 } },
+ { 0x1d5f2, 1, { 0x65, 0 } },
+ { 0x1d5f3, 1, { 0x66, 0 } },
+ { 0x1d5f4, 1, { 0x67, 0 } },
+ { 0x1d5f5, 1, { 0x68, 0 } },
+ { 0x1d5f6, 1, { 0x69, 0 } },
+ { 0x1d5f7, 1, { 0x6a, 0 } },
+ { 0x1d5f8, 1, { 0x6b, 0 } },
+ { 0x1d5f9, 1, { 0x6c, 0 } },
+ { 0x1d5fa, 1, { 0x6d, 0 } },
+ { 0x1d5fb, 1, { 0x6e, 0 } },
+ { 0x1d5fc, 1, { 0x6f, 0 } },
+ { 0x1d5fd, 1, { 0x70, 0 } },
+ { 0x1d5fe, 1, { 0x71, 0 } },
+ { 0x1d5ff, 1, { 0x72, 0 } },
+ { 0x1d600, 1, { 0x73, 0 } },
+ { 0x1d601, 1, { 0x74, 0 } },
+ { 0x1d602, 1, { 0x75, 0 } },
+ { 0x1d603, 1, { 0x76, 0 } },
+ { 0x1d604, 1, { 0x77, 0 } },
+ { 0x1d605, 1, { 0x78, 0 } },
+ { 0x1d606, 1, { 0x79, 0 } },
+ { 0x1d607, 1, { 0x7a, 0 } },
+ { 0x1d608, 1, { 0x61, 0 } },
+ { 0x1d609, 1, { 0x62, 0 } },
+ { 0x1d60a, 1, { 0x63, 0 } },
+ { 0x1d60b, 1, { 0x64, 0 } },
+ { 0x1d60c, 1, { 0x65, 0 } },
+ { 0x1d60d, 1, { 0x66, 0 } },
+ { 0x1d60e, 1, { 0x67, 0 } },
+ { 0x1d60f, 1, { 0x68, 0 } },
+ { 0x1d610, 1, { 0x69, 0 } },
+ { 0x1d611, 1, { 0x6a, 0 } },
+ { 0x1d612, 1, { 0x6b, 0 } },
+ { 0x1d613, 1, { 0x6c, 0 } },
+ { 0x1d614, 1, { 0x6d, 0 } },
+ { 0x1d615, 1, { 0x6e, 0 } },
+ { 0x1d616, 1, { 0x6f, 0 } },
+ { 0x1d617, 1, { 0x70, 0 } },
+ { 0x1d618, 1, { 0x71, 0 } },
+ { 0x1d619, 1, { 0x72, 0 } },
+ { 0x1d61a, 1, { 0x73, 0 } },
+ { 0x1d61b, 1, { 0x74, 0 } },
+ { 0x1d61c, 1, { 0x75, 0 } },
+ { 0x1d61d, 1, { 0x76, 0 } },
+ { 0x1d61e, 1, { 0x77, 0 } },
+ { 0x1d61f, 1, { 0x78, 0 } },
+ { 0x1d620, 1, { 0x79, 0 } },
+ { 0x1d621, 1, { 0x7a, 0 } },
+ { 0x1d622, 1, { 0x61, 0 } },
+ { 0x1d623, 1, { 0x62, 0 } },
+ { 0x1d624, 1, { 0x63, 0 } },
+ { 0x1d625, 1, { 0x64, 0 } },
+ { 0x1d626, 1, { 0x65, 0 } },
+ { 0x1d627, 1, { 0x66, 0 } },
+ { 0x1d628, 1, { 0x67, 0 } },
+ { 0x1d629, 1, { 0x68, 0 } },
+ { 0x1d62a, 1, { 0x69, 0 } },
+ { 0x1d62b, 1, { 0x6a, 0 } },
+ { 0x1d62c, 1, { 0x6b, 0 } },
+ { 0x1d62d, 1, { 0x6c, 0 } },
+ { 0x1d62e, 1, { 0x6d, 0 } },
+ { 0x1d62f, 1, { 0x6e, 0 } },
+ { 0x1d630, 1, { 0x6f, 0 } },
+ { 0x1d631, 1, { 0x70, 0 } },
+ { 0x1d632, 1, { 0x71, 0 } },
+ { 0x1d633, 1, { 0x72, 0 } },
+ { 0x1d634, 1, { 0x73, 0 } },
+ { 0x1d635, 1, { 0x74, 0 } },
+ { 0x1d636, 1, { 0x75, 0 } },
+ { 0x1d637, 1, { 0x76, 0 } },
+ { 0x1d638, 1, { 0x77, 0 } },
+ { 0x1d639, 1, { 0x78, 0 } },
+ { 0x1d63a, 1, { 0x79, 0 } },
+ { 0x1d63b, 1, { 0x7a, 0 } },
+ { 0x1d63c, 1, { 0x61, 0 } },
+ { 0x1d63d, 1, { 0x62, 0 } },
+ { 0x1d63e, 1, { 0x63, 0 } },
+ { 0x1d63f, 1, { 0x64, 0 } },
+ { 0x1d640, 1, { 0x65, 0 } },
+ { 0x1d641, 1, { 0x66, 0 } },
+ { 0x1d642, 1, { 0x67, 0 } },
+ { 0x1d643, 1, { 0x68, 0 } },
+ { 0x1d644, 1, { 0x69, 0 } },
+ { 0x1d645, 1, { 0x6a, 0 } },
+ { 0x1d646, 1, { 0x6b, 0 } },
+ { 0x1d647, 1, { 0x6c, 0 } },
+ { 0x1d648, 1, { 0x6d, 0 } },
+ { 0x1d649, 1, { 0x6e, 0 } },
+ { 0x1d64a, 1, { 0x6f, 0 } },
+ { 0x1d64b, 1, { 0x70, 0 } },
+ { 0x1d64c, 1, { 0x71, 0 } },
+ { 0x1d64d, 1, { 0x72, 0 } },
+ { 0x1d64e, 1, { 0x73, 0 } },
+ { 0x1d64f, 1, { 0x74, 0 } },
+ { 0x1d650, 1, { 0x75, 0 } },
+ { 0x1d651, 1, { 0x76, 0 } },
+ { 0x1d652, 1, { 0x77, 0 } },
+ { 0x1d653, 1, { 0x78, 0 } },
+ { 0x1d654, 1, { 0x79, 0 } },
+ { 0x1d655, 1, { 0x7a, 0 } },
+ { 0x1d656, 1, { 0x61, 0 } },
+ { 0x1d657, 1, { 0x62, 0 } },
+ { 0x1d658, 1, { 0x63, 0 } },
+ { 0x1d659, 1, { 0x64, 0 } },
+ { 0x1d65a, 1, { 0x65, 0 } },
+ { 0x1d65b, 1, { 0x66, 0 } },
+ { 0x1d65c, 1, { 0x67, 0 } },
+ { 0x1d65d, 1, { 0x68, 0 } },
+ { 0x1d65e, 1, { 0x69, 0 } },
+ { 0x1d65f, 1, { 0x6a, 0 } },
+ { 0x1d660, 1, { 0x6b, 0 } },
+ { 0x1d661, 1, { 0x6c, 0 } },
+ { 0x1d662, 1, { 0x6d, 0 } },
+ { 0x1d663, 1, { 0x6e, 0 } },
+ { 0x1d664, 1, { 0x6f, 0 } },
+ { 0x1d665, 1, { 0x70, 0 } },
+ { 0x1d666, 1, { 0x71, 0 } },
+ { 0x1d667, 1, { 0x72, 0 } },
+ { 0x1d668, 1, { 0x73, 0 } },
+ { 0x1d669, 1, { 0x74, 0 } },
+ { 0x1d66a, 1, { 0x75, 0 } },
+ { 0x1d66b, 1, { 0x76, 0 } },
+ { 0x1d66c, 1, { 0x77, 0 } },
+ { 0x1d66d, 1, { 0x78, 0 } },
+ { 0x1d66e, 1, { 0x79, 0 } },
+ { 0x1d66f, 1, { 0x7a, 0 } },
+ { 0x1d670, 1, { 0x61, 0 } },
+ { 0x1d671, 1, { 0x62, 0 } },
+ { 0x1d672, 1, { 0x63, 0 } },
+ { 0x1d673, 1, { 0x64, 0 } },
+ { 0x1d674, 1, { 0x65, 0 } },
+ { 0x1d675, 1, { 0x66, 0 } },
+ { 0x1d676, 1, { 0x67, 0 } },
+ { 0x1d677, 1, { 0x68, 0 } },
+ { 0x1d678, 1, { 0x69, 0 } },
+ { 0x1d679, 1, { 0x6a, 0 } },
+ { 0x1d67a, 1, { 0x6b, 0 } },
+ { 0x1d67b, 1, { 0x6c, 0 } },
+ { 0x1d67c, 1, { 0x6d, 0 } },
+ { 0x1d67d, 1, { 0x6e, 0 } },
+ { 0x1d67e, 1, { 0x6f, 0 } },
+ { 0x1d67f, 1, { 0x70, 0 } },
+ { 0x1d680, 1, { 0x71, 0 } },
+ { 0x1d681, 1, { 0x72, 0 } },
+ { 0x1d682, 1, { 0x73, 0 } },
+ { 0x1d683, 1, { 0x74, 0 } },
+ { 0x1d684, 1, { 0x75, 0 } },
+ { 0x1d685, 1, { 0x76, 0 } },
+ { 0x1d686, 1, { 0x77, 0 } },
+ { 0x1d687, 1, { 0x78, 0 } },
+ { 0x1d688, 1, { 0x79, 0 } },
+ { 0x1d689, 1, { 0x7a, 0 } },
+ { 0x1d68a, 1, { 0x61, 0 } },
+ { 0x1d68b, 1, { 0x62, 0 } },
+ { 0x1d68c, 1, { 0x63, 0 } },
+ { 0x1d68d, 1, { 0x64, 0 } },
+ { 0x1d68e, 1, { 0x65, 0 } },
+ { 0x1d68f, 1, { 0x66, 0 } },
+ { 0x1d690, 1, { 0x67, 0 } },
+ { 0x1d691, 1, { 0x68, 0 } },
+ { 0x1d692, 1, { 0x69, 0 } },
+ { 0x1d693, 1, { 0x6a, 0 } },
+ { 0x1d694, 1, { 0x6b, 0 } },
+ { 0x1d695, 1, { 0x6c, 0 } },
+ { 0x1d696, 1, { 0x6d, 0 } },
+ { 0x1d697, 1, { 0x6e, 0 } },
+ { 0x1d698, 1, { 0x6f, 0 } },
+ { 0x1d699, 1, { 0x70, 0 } },
+ { 0x1d69a, 1, { 0x71, 0 } },
+ { 0x1d69b, 1, { 0x72, 0 } },
+ { 0x1d69c, 1, { 0x73, 0 } },
+ { 0x1d69d, 1, { 0x74, 0 } },
+ { 0x1d69e, 1, { 0x75, 0 } },
+ { 0x1d69f, 1, { 0x76, 0 } },
+ { 0x1d6a0, 1, { 0x77, 0 } },
+ { 0x1d6a1, 1, { 0x78, 0 } },
+ { 0x1d6a2, 1, { 0x79, 0 } },
+ { 0x1d6a3, 1, { 0x7a, 0 } },
+ { 0x1d6a4, 1, { 0x131, 0 } },
+ { 0x1d6a5, 1, { 0x237, 0 } },
+ { 0x1d6a8, 1, { 0x3b1, 0 } },
+ { 0x1d6a9, 1, { 0x3b2, 0 } },
+ { 0x1d6aa, 1, { 0x3b3, 0 } },
+ { 0x1d6ab, 1, { 0x3b4, 0 } },
+ { 0x1d6ac, 1, { 0x3b5, 0 } },
+ { 0x1d6ad, 1, { 0x3b6, 0 } },
+ { 0x1d6ae, 1, { 0x3b7, 0 } },
+ { 0x1d6af, 1, { 0x3b8, 0 } },
+ { 0x1d6b0, 1, { 0x3b9, 0 } },
+ { 0x1d6b1, 1, { 0x3ba, 0 } },
+ { 0x1d6b2, 1, { 0x3bb, 0 } },
+ { 0x1d6b3, 1, { 0x3bc, 0 } },
+ { 0x1d6b4, 1, { 0x3bd, 0 } },
+ { 0x1d6b5, 1, { 0x3be, 0 } },
+ { 0x1d6b6, 1, { 0x3bf, 0 } },
+ { 0x1d6b7, 1, { 0x3c0, 0 } },
+ { 0x1d6b8, 1, { 0x3c1, 0 } },
+ { 0x1d6b9, 1, { 0x3b8, 0 } },
+ { 0x1d6ba, 1, { 0x3c3, 0 } },
+ { 0x1d6bb, 1, { 0x3c4, 0 } },
+ { 0x1d6bc, 1, { 0x3c5, 0 } },
+ { 0x1d6bd, 1, { 0x3c6, 0 } },
+ { 0x1d6be, 1, { 0x3c7, 0 } },
+ { 0x1d6bf, 1, { 0x3c8, 0 } },
+ { 0x1d6c0, 1, { 0x3c9, 0 } },
+ { 0x1d6c1, 1, { 0x2207, 0 } },
+ { 0x1d6c2, 1, { 0x3b1, 0 } },
+ { 0x1d6c3, 1, { 0x3b2, 0 } },
+ { 0x1d6c4, 1, { 0x3b3, 0 } },
+ { 0x1d6c5, 1, { 0x3b4, 0 } },
+ { 0x1d6c6, 1, { 0x3b5, 0 } },
+ { 0x1d6c7, 1, { 0x3b6, 0 } },
+ { 0x1d6c8, 1, { 0x3b7, 0 } },
+ { 0x1d6c9, 1, { 0x3b8, 0 } },
+ { 0x1d6ca, 1, { 0x3b9, 0 } },
+ { 0x1d6cb, 1, { 0x3ba, 0 } },
+ { 0x1d6cc, 1, { 0x3bb, 0 } },
+ { 0x1d6cd, 1, { 0x3bc, 0 } },
+ { 0x1d6ce, 1, { 0x3bd, 0 } },
+ { 0x1d6cf, 1, { 0x3be, 0 } },
+ { 0x1d6d0, 1, { 0x3bf, 0 } },
+ { 0x1d6d1, 1, { 0x3c0, 0 } },
+ { 0x1d6d2, 1, { 0x3c1, 0 } },
+ { 0x1d6d3, 1, { 0x3c3, 0 } },
+ { 0x1d6d4, 1, { 0x3c3, 0 } },
+ { 0x1d6d5, 1, { 0x3c4, 0 } },
+ { 0x1d6d6, 1, { 0x3c5, 0 } },
+ { 0x1d6d7, 1, { 0x3c6, 0 } },
+ { 0x1d6d8, 1, { 0x3c7, 0 } },
+ { 0x1d6d9, 1, { 0x3c8, 0 } },
+ { 0x1d6da, 1, { 0x3c9, 0 } },
+ { 0x1d6db, 1, { 0x2202, 0 } },
+ { 0x1d6dc, 1, { 0x3b5, 0 } },
+ { 0x1d6dd, 1, { 0x3b8, 0 } },
+ { 0x1d6de, 1, { 0x3ba, 0 } },
+ { 0x1d6df, 1, { 0x3c6, 0 } },
+ { 0x1d6e0, 1, { 0x3c1, 0 } },
+ { 0x1d6e1, 1, { 0x3c0, 0 } },
+ { 0x1d6e2, 1, { 0x3b1, 0 } },
+ { 0x1d6e3, 1, { 0x3b2, 0 } },
+ { 0x1d6e4, 1, { 0x3b3, 0 } },
+ { 0x1d6e5, 1, { 0x3b4, 0 } },
+ { 0x1d6e6, 1, { 0x3b5, 0 } },
+ { 0x1d6e7, 1, { 0x3b6, 0 } },
+ { 0x1d6e8, 1, { 0x3b7, 0 } },
+ { 0x1d6e9, 1, { 0x3b8, 0 } },
+ { 0x1d6ea, 1, { 0x3b9, 0 } },
+ { 0x1d6eb, 1, { 0x3ba, 0 } },
+ { 0x1d6ec, 1, { 0x3bb, 0 } },
+ { 0x1d6ed, 1, { 0x3bc, 0 } },
+ { 0x1d6ee, 1, { 0x3bd, 0 } },
+ { 0x1d6ef, 1, { 0x3be, 0 } },
+ { 0x1d6f0, 1, { 0x3bf, 0 } },
+ { 0x1d6f1, 1, { 0x3c0, 0 } },
+ { 0x1d6f2, 1, { 0x3c1, 0 } },
+ { 0x1d6f3, 1, { 0x3b8, 0 } },
+ { 0x1d6f4, 1, { 0x3c3, 0 } },
+ { 0x1d6f5, 1, { 0x3c4, 0 } },
+ { 0x1d6f6, 1, { 0x3c5, 0 } },
+ { 0x1d6f7, 1, { 0x3c6, 0 } },
+ { 0x1d6f8, 1, { 0x3c7, 0 } },
+ { 0x1d6f9, 1, { 0x3c8, 0 } },
+ { 0x1d6fa, 1, { 0x3c9, 0 } },
+ { 0x1d6fb, 1, { 0x2207, 0 } },
+ { 0x1d6fc, 1, { 0x3b1, 0 } },
+ { 0x1d6fd, 1, { 0x3b2, 0 } },
+ { 0x1d6fe, 1, { 0x3b3, 0 } },
+ { 0x1d6ff, 1, { 0x3b4, 0 } },
+ { 0x1d700, 1, { 0x3b5, 0 } },
+ { 0x1d701, 1, { 0x3b6, 0 } },
+ { 0x1d702, 1, { 0x3b7, 0 } },
+ { 0x1d703, 1, { 0x3b8, 0 } },
+ { 0x1d704, 1, { 0x3b9, 0 } },
+ { 0x1d705, 1, { 0x3ba, 0 } },
+ { 0x1d706, 1, { 0x3bb, 0 } },
+ { 0x1d707, 1, { 0x3bc, 0 } },
+ { 0x1d708, 1, { 0x3bd, 0 } },
+ { 0x1d709, 1, { 0x3be, 0 } },
+ { 0x1d70a, 1, { 0x3bf, 0 } },
+ { 0x1d70b, 1, { 0x3c0, 0 } },
+ { 0x1d70c, 1, { 0x3c1, 0 } },
+ { 0x1d70d, 1, { 0x3c3, 0 } },
+ { 0x1d70e, 1, { 0x3c3, 0 } },
+ { 0x1d70f, 1, { 0x3c4, 0 } },
+ { 0x1d710, 1, { 0x3c5, 0 } },
+ { 0x1d711, 1, { 0x3c6, 0 } },
+ { 0x1d712, 1, { 0x3c7, 0 } },
+ { 0x1d713, 1, { 0x3c8, 0 } },
+ { 0x1d714, 1, { 0x3c9, 0 } },
+ { 0x1d715, 1, { 0x2202, 0 } },
+ { 0x1d716, 1, { 0x3b5, 0 } },
+ { 0x1d717, 1, { 0x3b8, 0 } },
+ { 0x1d718, 1, { 0x3ba, 0 } },
+ { 0x1d719, 1, { 0x3c6, 0 } },
+ { 0x1d71a, 1, { 0x3c1, 0 } },
+ { 0x1d71b, 1, { 0x3c0, 0 } },
+ { 0x1d71c, 1, { 0x3b1, 0 } },
+ { 0x1d71d, 1, { 0x3b2, 0 } },
+ { 0x1d71e, 1, { 0x3b3, 0 } },
+ { 0x1d71f, 1, { 0x3b4, 0 } },
+ { 0x1d720, 1, { 0x3b5, 0 } },
+ { 0x1d721, 1, { 0x3b6, 0 } },
+ { 0x1d722, 1, { 0x3b7, 0 } },
+ { 0x1d723, 1, { 0x3b8, 0 } },
+ { 0x1d724, 1, { 0x3b9, 0 } },
+ { 0x1d725, 1, { 0x3ba, 0 } },
+ { 0x1d726, 1, { 0x3bb, 0 } },
+ { 0x1d727, 1, { 0x3bc, 0 } },
+ { 0x1d728, 1, { 0x3bd, 0 } },
+ { 0x1d729, 1, { 0x3be, 0 } },
+ { 0x1d72a, 1, { 0x3bf, 0 } },
+ { 0x1d72b, 1, { 0x3c0, 0 } },
+ { 0x1d72c, 1, { 0x3c1, 0 } },
+ { 0x1d72d, 1, { 0x3b8, 0 } },
+ { 0x1d72e, 1, { 0x3c3, 0 } },
+ { 0x1d72f, 1, { 0x3c4, 0 } },
+ { 0x1d730, 1, { 0x3c5, 0 } },
+ { 0x1d731, 1, { 0x3c6, 0 } },
+ { 0x1d732, 1, { 0x3c7, 0 } },
+ { 0x1d733, 1, { 0x3c8, 0 } },
+ { 0x1d734, 1, { 0x3c9, 0 } },
+ { 0x1d735, 1, { 0x2207, 0 } },
+ { 0x1d736, 1, { 0x3b1, 0 } },
+ { 0x1d737, 1, { 0x3b2, 0 } },
+ { 0x1d738, 1, { 0x3b3, 0 } },
+ { 0x1d739, 1, { 0x3b4, 0 } },
+ { 0x1d73a, 1, { 0x3b5, 0 } },
+ { 0x1d73b, 1, { 0x3b6, 0 } },
+ { 0x1d73c, 1, { 0x3b7, 0 } },
+ { 0x1d73d, 1, { 0x3b8, 0 } },
+ { 0x1d73e, 1, { 0x3b9, 0 } },
+ { 0x1d73f, 1, { 0x3ba, 0 } },
+ { 0x1d740, 1, { 0x3bb, 0 } },
+ { 0x1d741, 1, { 0x3bc, 0 } },
+ { 0x1d742, 1, { 0x3bd, 0 } },
+ { 0x1d743, 1, { 0x3be, 0 } },
+ { 0x1d744, 1, { 0x3bf, 0 } },
+ { 0x1d745, 1, { 0x3c0, 0 } },
+ { 0x1d746, 1, { 0x3c1, 0 } },
+ { 0x1d747, 1, { 0x3c3, 0 } },
+ { 0x1d748, 1, { 0x3c3, 0 } },
+ { 0x1d749, 1, { 0x3c4, 0 } },
+ { 0x1d74a, 1, { 0x3c5, 0 } },
+ { 0x1d74b, 1, { 0x3c6, 0 } },
+ { 0x1d74c, 1, { 0x3c7, 0 } },
+ { 0x1d74d, 1, { 0x3c8, 0 } },
+ { 0x1d74e, 1, { 0x3c9, 0 } },
+ { 0x1d74f, 1, { 0x2202, 0 } },
+ { 0x1d750, 1, { 0x3b5, 0 } },
+ { 0x1d751, 1, { 0x3b8, 0 } },
+ { 0x1d752, 1, { 0x3ba, 0 } },
+ { 0x1d753, 1, { 0x3c6, 0 } },
+ { 0x1d754, 1, { 0x3c1, 0 } },
+ { 0x1d755, 1, { 0x3c0, 0 } },
+ { 0x1d756, 1, { 0x3b1, 0 } },
+ { 0x1d757, 1, { 0x3b2, 0 } },
+ { 0x1d758, 1, { 0x3b3, 0 } },
+ { 0x1d759, 1, { 0x3b4, 0 } },
+ { 0x1d75a, 1, { 0x3b5, 0 } },
+ { 0x1d75b, 1, { 0x3b6, 0 } },
+ { 0x1d75c, 1, { 0x3b7, 0 } },
+ { 0x1d75d, 1, { 0x3b8, 0 } },
+ { 0x1d75e, 1, { 0x3b9, 0 } },
+ { 0x1d75f, 1, { 0x3ba, 0 } },
+ { 0x1d760, 1, { 0x3bb, 0 } },
+ { 0x1d761, 1, { 0x3bc, 0 } },
+ { 0x1d762, 1, { 0x3bd, 0 } },
+ { 0x1d763, 1, { 0x3be, 0 } },
+ { 0x1d764, 1, { 0x3bf, 0 } },
+ { 0x1d765, 1, { 0x3c0, 0 } },
+ { 0x1d766, 1, { 0x3c1, 0 } },
+ { 0x1d767, 1, { 0x3b8, 0 } },
+ { 0x1d768, 1, { 0x3c3, 0 } },
+ { 0x1d769, 1, { 0x3c4, 0 } },
+ { 0x1d76a, 1, { 0x3c5, 0 } },
+ { 0x1d76b, 1, { 0x3c6, 0 } },
+ { 0x1d76c, 1, { 0x3c7, 0 } },
+ { 0x1d76d, 1, { 0x3c8, 0 } },
+ { 0x1d76e, 1, { 0x3c9, 0 } },
+ { 0x1d76f, 1, { 0x2207, 0 } },
+ { 0x1d770, 1, { 0x3b1, 0 } },
+ { 0x1d771, 1, { 0x3b2, 0 } },
+ { 0x1d772, 1, { 0x3b3, 0 } },
+ { 0x1d773, 1, { 0x3b4, 0 } },
+ { 0x1d774, 1, { 0x3b5, 0 } },
+ { 0x1d775, 1, { 0x3b6, 0 } },
+ { 0x1d776, 1, { 0x3b7, 0 } },
+ { 0x1d777, 1, { 0x3b8, 0 } },
+ { 0x1d778, 1, { 0x3b9, 0 } },
+ { 0x1d779, 1, { 0x3ba, 0 } },
+ { 0x1d77a, 1, { 0x3bb, 0 } },
+ { 0x1d77b, 1, { 0x3bc, 0 } },
+ { 0x1d77c, 1, { 0x3bd, 0 } },
+ { 0x1d77d, 1, { 0x3be, 0 } },
+ { 0x1d77e, 1, { 0x3bf, 0 } },
+ { 0x1d77f, 1, { 0x3c0, 0 } },
+ { 0x1d780, 1, { 0x3c1, 0 } },
+ { 0x1d781, 1, { 0x3c3, 0 } },
+ { 0x1d782, 1, { 0x3c3, 0 } },
+ { 0x1d783, 1, { 0x3c4, 0 } },
+ { 0x1d784, 1, { 0x3c5, 0 } },
+ { 0x1d785, 1, { 0x3c6, 0 } },
+ { 0x1d786, 1, { 0x3c7, 0 } },
+ { 0x1d787, 1, { 0x3c8, 0 } },
+ { 0x1d788, 1, { 0x3c9, 0 } },
+ { 0x1d789, 1, { 0x2202, 0 } },
+ { 0x1d78a, 1, { 0x3b5, 0 } },
+ { 0x1d78b, 1, { 0x3b8, 0 } },
+ { 0x1d78c, 1, { 0x3ba, 0 } },
+ { 0x1d78d, 1, { 0x3c6, 0 } },
+ { 0x1d78e, 1, { 0x3c1, 0 } },
+ { 0x1d78f, 1, { 0x3c0, 0 } },
+ { 0x1d790, 1, { 0x3b1, 0 } },
+ { 0x1d791, 1, { 0x3b2, 0 } },
+ { 0x1d792, 1, { 0x3b3, 0 } },
+ { 0x1d793, 1, { 0x3b4, 0 } },
+ { 0x1d794, 1, { 0x3b5, 0 } },
+ { 0x1d795, 1, { 0x3b6, 0 } },
+ { 0x1d796, 1, { 0x3b7, 0 } },
+ { 0x1d797, 1, { 0x3b8, 0 } },
+ { 0x1d798, 1, { 0x3b9, 0 } },
+ { 0x1d799, 1, { 0x3ba, 0 } },
+ { 0x1d79a, 1, { 0x3bb, 0 } },
+ { 0x1d79b, 1, { 0x3bc, 0 } },
+ { 0x1d79c, 1, { 0x3bd, 0 } },
+ { 0x1d79d, 1, { 0x3be, 0 } },
+ { 0x1d79e, 1, { 0x3bf, 0 } },
+ { 0x1d79f, 1, { 0x3c0, 0 } },
+ { 0x1d7a0, 1, { 0x3c1, 0 } },
+ { 0x1d7a1, 1, { 0x3b8, 0 } },
+ { 0x1d7a2, 1, { 0x3c3, 0 } },
+ { 0x1d7a3, 1, { 0x3c4, 0 } },
+ { 0x1d7a4, 1, { 0x3c5, 0 } },
+ { 0x1d7a5, 1, { 0x3c6, 0 } },
+ { 0x1d7a6, 1, { 0x3c7, 0 } },
+ { 0x1d7a7, 1, { 0x3c8, 0 } },
+ { 0x1d7a8, 1, { 0x3c9, 0 } },
+ { 0x1d7a9, 1, { 0x2207, 0 } },
+ { 0x1d7aa, 1, { 0x3b1, 0 } },
+ { 0x1d7ab, 1, { 0x3b2, 0 } },
+ { 0x1d7ac, 1, { 0x3b3, 0 } },
+ { 0x1d7ad, 1, { 0x3b4, 0 } },
+ { 0x1d7ae, 1, { 0x3b5, 0 } },
+ { 0x1d7af, 1, { 0x3b6, 0 } },
+ { 0x1d7b0, 1, { 0x3b7, 0 } },
+ { 0x1d7b1, 1, { 0x3b8, 0 } },
+ { 0x1d7b2, 1, { 0x3b9, 0 } },
+ { 0x1d7b3, 1, { 0x3ba, 0 } },
+ { 0x1d7b4, 1, { 0x3bb, 0 } },
+ { 0x1d7b5, 1, { 0x3bc, 0 } },
+ { 0x1d7b6, 1, { 0x3bd, 0 } },
+ { 0x1d7b7, 1, { 0x3be, 0 } },
+ { 0x1d7b8, 1, { 0x3bf, 0 } },
+ { 0x1d7b9, 1, { 0x3c0, 0 } },
+ { 0x1d7ba, 1, { 0x3c1, 0 } },
+ { 0x1d7bb, 1, { 0x3c3, 0 } },
+ { 0x1d7bc, 1, { 0x3c3, 0 } },
+ { 0x1d7bd, 1, { 0x3c4, 0 } },
+ { 0x1d7be, 1, { 0x3c5, 0 } },
+ { 0x1d7bf, 1, { 0x3c6, 0 } },
+ { 0x1d7c0, 1, { 0x3c7, 0 } },
+ { 0x1d7c1, 1, { 0x3c8, 0 } },
+ { 0x1d7c2, 1, { 0x3c9, 0 } },
+ { 0x1d7c3, 1, { 0x2202, 0 } },
+ { 0x1d7c4, 1, { 0x3b5, 0 } },
+ { 0x1d7c5, 1, { 0x3b8, 0 } },
+ { 0x1d7c6, 1, { 0x3ba, 0 } },
+ { 0x1d7c7, 1, { 0x3c6, 0 } },
+ { 0x1d7c8, 1, { 0x3c1, 0 } },
+ { 0x1d7c9, 1, { 0x3c0, 0 } },
+ { 0x1d7ca, 1, { 0x3dd, 0 } },
+ { 0x1d7cb, 1, { 0x3dd, 0 } },
+ { 0x1d7ce, 1, { 0x30, 0 } },
+ { 0x1d7cf, 1, { 0x31, 0 } },
+ { 0x1d7d0, 1, { 0x32, 0 } },
+ { 0x1d7d1, 1, { 0x33, 0 } },
+ { 0x1d7d2, 1, { 0x34, 0 } },
+ { 0x1d7d3, 1, { 0x35, 0 } },
+ { 0x1d7d4, 1, { 0x36, 0 } },
+ { 0x1d7d5, 1, { 0x37, 0 } },
+ { 0x1d7d6, 1, { 0x38, 0 } },
+ { 0x1d7d7, 1, { 0x39, 0 } },
+ { 0x1d7d8, 1, { 0x30, 0 } },
+ { 0x1d7d9, 1, { 0x31, 0 } },
+ { 0x1d7da, 1, { 0x32, 0 } },
+ { 0x1d7db, 1, { 0x33, 0 } },
+ { 0x1d7dc, 1, { 0x34, 0 } },
+ { 0x1d7dd, 1, { 0x35, 0 } },
+ { 0x1d7de, 1, { 0x36, 0 } },
+ { 0x1d7df, 1, { 0x37, 0 } },
+ { 0x1d7e0, 1, { 0x38, 0 } },
+ { 0x1d7e1, 1, { 0x39, 0 } },
+ { 0x1d7e2, 1, { 0x30, 0 } },
+ { 0x1d7e3, 1, { 0x31, 0 } },
+ { 0x1d7e4, 1, { 0x32, 0 } },
+ { 0x1d7e5, 1, { 0x33, 0 } },
+ { 0x1d7e6, 1, { 0x34, 0 } },
+ { 0x1d7e7, 1, { 0x35, 0 } },
+ { 0x1d7e8, 1, { 0x36, 0 } },
+ { 0x1d7e9, 1, { 0x37, 0 } },
+ { 0x1d7ea, 1, { 0x38, 0 } },
+ { 0x1d7eb, 1, { 0x39, 0 } },
+ { 0x1d7ec, 1, { 0x30, 0 } },
+ { 0x1d7ed, 1, { 0x31, 0 } },
+ { 0x1d7ee, 1, { 0x32, 0 } },
+ { 0x1d7ef, 1, { 0x33, 0 } },
+ { 0x1d7f0, 1, { 0x34, 0 } },
+ { 0x1d7f1, 1, { 0x35, 0 } },
+ { 0x1d7f2, 1, { 0x36, 0 } },
+ { 0x1d7f3, 1, { 0x37, 0 } },
+ { 0x1d7f4, 1, { 0x38, 0 } },
+ { 0x1d7f5, 1, { 0x39, 0 } },
+ { 0x1d7f6, 1, { 0x30, 0 } },
+ { 0x1d7f7, 1, { 0x31, 0 } },
+ { 0x1d7f8, 1, { 0x32, 0 } },
+ { 0x1d7f9, 1, { 0x33, 0 } },
+ { 0x1d7fa, 1, { 0x34, 0 } },
+ { 0x1d7fb, 1, { 0x35, 0 } },
+ { 0x1d7fc, 1, { 0x36, 0 } },
+ { 0x1d7fd, 1, { 0x37, 0 } },
+ { 0x1d7fe, 1, { 0x38, 0 } },
+ { 0x1d7ff, 1, { 0x39, 0 } },
+ { 0x1e030, 1, { 0x430, 0 } },
+ { 0x1e031, 1, { 0x431, 0 } },
+ { 0x1e032, 1, { 0x432, 0 } },
+ { 0x1e033, 1, { 0x433, 0 } },
+ { 0x1e034, 1, { 0x434, 0 } },
+ { 0x1e035, 1, { 0x435, 0 } },
+ { 0x1e036, 1, { 0x436, 0 } },
+ { 0x1e037, 1, { 0x437, 0 } },
+ { 0x1e038, 1, { 0x438, 0 } },
+ { 0x1e039, 1, { 0x43a, 0 } },
+ { 0x1e03a, 1, { 0x43b, 0 } },
+ { 0x1e03b, 1, { 0x43c, 0 } },
+ { 0x1e03c, 1, { 0x43e, 0 } },
+ { 0x1e03d, 1, { 0x43f, 0 } },
+ { 0x1e03e, 1, { 0x440, 0 } },
+ { 0x1e03f, 1, { 0x441, 0 } },
+ { 0x1e040, 1, { 0x442, 0 } },
+ { 0x1e041, 1, { 0x443, 0 } },
+ { 0x1e042, 1, { 0x444, 0 } },
+ { 0x1e043, 1, { 0x445, 0 } },
+ { 0x1e044, 1, { 0x446, 0 } },
+ { 0x1e045, 1, { 0x447, 0 } },
+ { 0x1e046, 1, { 0x448, 0 } },
+ { 0x1e047, 1, { 0x44b, 0 } },
+ { 0x1e048, 1, { 0x44d, 0 } },
+ { 0x1e049, 1, { 0x44e, 0 } },
+ { 0x1e04a, 1, { 0xa689, 0 } },
+ { 0x1e04b, 1, { 0x4d9, 0 } },
+ { 0x1e04c, 1, { 0x456, 0 } },
+ { 0x1e04d, 1, { 0x458, 0 } },
+ { 0x1e04e, 1, { 0x4e9, 0 } },
+ { 0x1e04f, 1, { 0x4af, 0 } },
+ { 0x1e050, 1, { 0x4cf, 0 } },
+ { 0x1e051, 1, { 0x430, 0 } },
+ { 0x1e052, 1, { 0x431, 0 } },
+ { 0x1e053, 1, { 0x432, 0 } },
+ { 0x1e054, 1, { 0x433, 0 } },
+ { 0x1e055, 1, { 0x434, 0 } },
+ { 0x1e056, 1, { 0x435, 0 } },
+ { 0x1e057, 1, { 0x436, 0 } },
+ { 0x1e058, 1, { 0x437, 0 } },
+ { 0x1e059, 1, { 0x438, 0 } },
+ { 0x1e05a, 1, { 0x43a, 0 } },
+ { 0x1e05b, 1, { 0x43b, 0 } },
+ { 0x1e05c, 1, { 0x43e, 0 } },
+ { 0x1e05d, 1, { 0x43f, 0 } },
+ { 0x1e05e, 1, { 0x441, 0 } },
+ { 0x1e05f, 1, { 0x443, 0 } },
+ { 0x1e060, 1, { 0x444, 0 } },
+ { 0x1e061, 1, { 0x445, 0 } },
+ { 0x1e062, 1, { 0x446, 0 } },
+ { 0x1e063, 1, { 0x447, 0 } },
+ { 0x1e064, 1, { 0x448, 0 } },
+ { 0x1e065, 1, { 0x44a, 0 } },
+ { 0x1e066, 1, { 0x44b, 0 } },
+ { 0x1e067, 1, { 0x491, 0 } },
+ { 0x1e068, 1, { 0x456, 0 } },
+ { 0x1e069, 1, { 0x455, 0 } },
+ { 0x1e06a, 1, { 0x45f, 0 } },
+ { 0x1e06b, 1, { 0x4ab, 0 } },
+ { 0x1e06c, 1, { 0xa651, 0 } },
+ { 0x1e06d, 1, { 0x4b1, 0 } },
+ { 0x1e900, 2, { 0xd83a, 0xdd22 } },
+ { 0x1e901, 2, { 0xd83a, 0xdd23 } },
+ { 0x1e902, 2, { 0xd83a, 0xdd24 } },
+ { 0x1e903, 2, { 0xd83a, 0xdd25 } },
+ { 0x1e904, 2, { 0xd83a, 0xdd26 } },
+ { 0x1e905, 2, { 0xd83a, 0xdd27 } },
+ { 0x1e906, 2, { 0xd83a, 0xdd28 } },
+ { 0x1e907, 2, { 0xd83a, 0xdd29 } },
+ { 0x1e908, 2, { 0xd83a, 0xdd2a } },
+ { 0x1e909, 2, { 0xd83a, 0xdd2b } },
+ { 0x1e90a, 2, { 0xd83a, 0xdd2c } },
+ { 0x1e90b, 2, { 0xd83a, 0xdd2d } },
+ { 0x1e90c, 2, { 0xd83a, 0xdd2e } },
+ { 0x1e90d, 2, { 0xd83a, 0xdd2f } },
+ { 0x1e90e, 2, { 0xd83a, 0xdd30 } },
+ { 0x1e90f, 2, { 0xd83a, 0xdd31 } },
+ { 0x1e910, 2, { 0xd83a, 0xdd32 } },
+ { 0x1e911, 2, { 0xd83a, 0xdd33 } },
+ { 0x1e912, 2, { 0xd83a, 0xdd34 } },
+ { 0x1e913, 2, { 0xd83a, 0xdd35 } },
+ { 0x1e914, 2, { 0xd83a, 0xdd36 } },
+ { 0x1e915, 2, { 0xd83a, 0xdd37 } },
+ { 0x1e916, 2, { 0xd83a, 0xdd38 } },
+ { 0x1e917, 2, { 0xd83a, 0xdd39 } },
+ { 0x1e918, 2, { 0xd83a, 0xdd3a } },
+ { 0x1e919, 2, { 0xd83a, 0xdd3b } },
+ { 0x1e91a, 2, { 0xd83a, 0xdd3c } },
+ { 0x1e91b, 2, { 0xd83a, 0xdd3d } },
+ { 0x1e91c, 2, { 0xd83a, 0xdd3e } },
+ { 0x1e91d, 2, { 0xd83a, 0xdd3f } },
+ { 0x1e91e, 2, { 0xd83a, 0xdd40 } },
+ { 0x1e91f, 2, { 0xd83a, 0xdd41 } },
+ { 0x1e920, 2, { 0xd83a, 0xdd42 } },
+ { 0x1e921, 2, { 0xd83a, 0xdd43 } },
+ { 0x1ee00, 1, { 0x627, 0 } },
+ { 0x1ee01, 1, { 0x628, 0 } },
+ { 0x1ee02, 1, { 0x62c, 0 } },
+ { 0x1ee03, 1, { 0x62f, 0 } },
+ { 0x1ee05, 1, { 0x648, 0 } },
+ { 0x1ee06, 1, { 0x632, 0 } },
+ { 0x1ee07, 1, { 0x62d, 0 } },
+ { 0x1ee08, 1, { 0x637, 0 } },
+ { 0x1ee09, 1, { 0x64a, 0 } },
+ { 0x1ee0a, 1, { 0x643, 0 } },
+ { 0x1ee0b, 1, { 0x644, 0 } },
+ { 0x1ee0c, 1, { 0x645, 0 } },
+ { 0x1ee0d, 1, { 0x646, 0 } },
+ { 0x1ee0e, 1, { 0x633, 0 } },
+ { 0x1ee0f, 1, { 0x639, 0 } },
+ { 0x1ee10, 1, { 0x641, 0 } },
+ { 0x1ee11, 1, { 0x635, 0 } },
+ { 0x1ee12, 1, { 0x642, 0 } },
+ { 0x1ee13, 1, { 0x631, 0 } },
+ { 0x1ee14, 1, { 0x634, 0 } },
+ { 0x1ee15, 1, { 0x62a, 0 } },
+ { 0x1ee16, 1, { 0x62b, 0 } },
+ { 0x1ee17, 1, { 0x62e, 0 } },
+ { 0x1ee18, 1, { 0x630, 0 } },
+ { 0x1ee19, 1, { 0x636, 0 } },
+ { 0x1ee1a, 1, { 0x638, 0 } },
+ { 0x1ee1b, 1, { 0x63a, 0 } },
+ { 0x1ee1c, 1, { 0x66e, 0 } },
+ { 0x1ee1d, 1, { 0x6ba, 0 } },
+ { 0x1ee1e, 1, { 0x6a1, 0 } },
+ { 0x1ee1f, 1, { 0x66f, 0 } },
+ { 0x1ee21, 1, { 0x628, 0 } },
+ { 0x1ee22, 1, { 0x62c, 0 } },
+ { 0x1ee24, 1, { 0x647, 0 } },
+ { 0x1ee27, 1, { 0x62d, 0 } },
+ { 0x1ee29, 1, { 0x64a, 0 } },
+ { 0x1ee2a, 1, { 0x643, 0 } },
+ { 0x1ee2b, 1, { 0x644, 0 } },
+ { 0x1ee2c, 1, { 0x645, 0 } },
+ { 0x1ee2d, 1, { 0x646, 0 } },
+ { 0x1ee2e, 1, { 0x633, 0 } },
+ { 0x1ee2f, 1, { 0x639, 0 } },
+ { 0x1ee30, 1, { 0x641, 0 } },
+ { 0x1ee31, 1, { 0x635, 0 } },
+ { 0x1ee32, 1, { 0x642, 0 } },
+ { 0x1ee34, 1, { 0x634, 0 } },
+ { 0x1ee35, 1, { 0x62a, 0 } },
+ { 0x1ee36, 1, { 0x62b, 0 } },
+ { 0x1ee37, 1, { 0x62e, 0 } },
+ { 0x1ee39, 1, { 0x636, 0 } },
+ { 0x1ee3b, 1, { 0x63a, 0 } },
+ { 0x1ee42, 1, { 0x62c, 0 } },
+ { 0x1ee47, 1, { 0x62d, 0 } },
+ { 0x1ee49, 1, { 0x64a, 0 } },
+ { 0x1ee4b, 1, { 0x644, 0 } },
+ { 0x1ee4d, 1, { 0x646, 0 } },
+ { 0x1ee4e, 1, { 0x633, 0 } },
+ { 0x1ee4f, 1, { 0x639, 0 } },
+ { 0x1ee51, 1, { 0x635, 0 } },
+ { 0x1ee52, 1, { 0x642, 0 } },
+ { 0x1ee54, 1, { 0x634, 0 } },
+ { 0x1ee57, 1, { 0x62e, 0 } },
+ { 0x1ee59, 1, { 0x636, 0 } },
+ { 0x1ee5b, 1, { 0x63a, 0 } },
+ { 0x1ee5d, 1, { 0x6ba, 0 } },
+ { 0x1ee5f, 1, { 0x66f, 0 } },
+ { 0x1ee61, 1, { 0x628, 0 } },
+ { 0x1ee62, 1, { 0x62c, 0 } },
+ { 0x1ee64, 1, { 0x647, 0 } },
+ { 0x1ee67, 1, { 0x62d, 0 } },
+ { 0x1ee68, 1, { 0x637, 0 } },
+ { 0x1ee69, 1, { 0x64a, 0 } },
+ { 0x1ee6a, 1, { 0x643, 0 } },
+ { 0x1ee6c, 1, { 0x645, 0 } },
+ { 0x1ee6d, 1, { 0x646, 0 } },
+ { 0x1ee6e, 1, { 0x633, 0 } },
+ { 0x1ee6f, 1, { 0x639, 0 } },
+ { 0x1ee70, 1, { 0x641, 0 } },
+ { 0x1ee71, 1, { 0x635, 0 } },
+ { 0x1ee72, 1, { 0x642, 0 } },
+ { 0x1ee74, 1, { 0x634, 0 } },
+ { 0x1ee75, 1, { 0x62a, 0 } },
+ { 0x1ee76, 1, { 0x62b, 0 } },
+ { 0x1ee77, 1, { 0x62e, 0 } },
+ { 0x1ee79, 1, { 0x636, 0 } },
+ { 0x1ee7a, 1, { 0x638, 0 } },
+ { 0x1ee7b, 1, { 0x63a, 0 } },
+ { 0x1ee7c, 1, { 0x66e, 0 } },
+ { 0x1ee7e, 1, { 0x6a1, 0 } },
+ { 0x1ee80, 1, { 0x627, 0 } },
+ { 0x1ee81, 1, { 0x628, 0 } },
+ { 0x1ee82, 1, { 0x62c, 0 } },
+ { 0x1ee83, 1, { 0x62f, 0 } },
+ { 0x1ee84, 1, { 0x647, 0 } },
+ { 0x1ee85, 1, { 0x648, 0 } },
+ { 0x1ee86, 1, { 0x632, 0 } },
+ { 0x1ee87, 1, { 0x62d, 0 } },
+ { 0x1ee88, 1, { 0x637, 0 } },
+ { 0x1ee89, 1, { 0x64a, 0 } },
+ { 0x1ee8b, 1, { 0x644, 0 } },
+ { 0x1ee8c, 1, { 0x645, 0 } },
+ { 0x1ee8d, 1, { 0x646, 0 } },
+ { 0x1ee8e, 1, { 0x633, 0 } },
+ { 0x1ee8f, 1, { 0x639, 0 } },
+ { 0x1ee90, 1, { 0x641, 0 } },
+ { 0x1ee91, 1, { 0x635, 0 } },
+ { 0x1ee92, 1, { 0x642, 0 } },
+ { 0x1ee93, 1, { 0x631, 0 } },
+ { 0x1ee94, 1, { 0x634, 0 } },
+ { 0x1ee95, 1, { 0x62a, 0 } },
+ { 0x1ee96, 1, { 0x62b, 0 } },
+ { 0x1ee97, 1, { 0x62e, 0 } },
+ { 0x1ee98, 1, { 0x630, 0 } },
+ { 0x1ee99, 1, { 0x636, 0 } },
+ { 0x1ee9a, 1, { 0x638, 0 } },
+ { 0x1ee9b, 1, { 0x63a, 0 } },
+ { 0x1eea1, 1, { 0x628, 0 } },
+ { 0x1eea2, 1, { 0x62c, 0 } },
+ { 0x1eea3, 1, { 0x62f, 0 } },
+ { 0x1eea5, 1, { 0x648, 0 } },
+ { 0x1eea6, 1, { 0x632, 0 } },
+ { 0x1eea7, 1, { 0x62d, 0 } },
+ { 0x1eea8, 1, { 0x637, 0 } },
+ { 0x1eea9, 1, { 0x64a, 0 } },
+ { 0x1eeab, 1, { 0x644, 0 } },
+ { 0x1eeac, 1, { 0x645, 0 } },
+ { 0x1eead, 1, { 0x646, 0 } },
+ { 0x1eeae, 1, { 0x633, 0 } },
+ { 0x1eeaf, 1, { 0x639, 0 } },
+ { 0x1eeb0, 1, { 0x641, 0 } },
+ { 0x1eeb1, 1, { 0x635, 0 } },
+ { 0x1eeb2, 1, { 0x642, 0 } },
+ { 0x1eeb3, 1, { 0x631, 0 } },
+ { 0x1eeb4, 1, { 0x634, 0 } },
+ { 0x1eeb5, 1, { 0x62a, 0 } },
+ { 0x1eeb6, 1, { 0x62b, 0 } },
+ { 0x1eeb7, 1, { 0x62e, 0 } },
+ { 0x1eeb8, 1, { 0x630, 0 } },
+ { 0x1eeb9, 1, { 0x636, 0 } },
+ { 0x1eeba, 1, { 0x638, 0 } },
+ { 0x1eebb, 1, { 0x63a, 0 } },
+ { 0x1f12a, 3, { 436, 0 } },
+ { 0x1f12b, 1, { 0x63, 0 } },
+ { 0x1f12c, 1, { 0x72, 0 } },
+ { 0x1f12d, 2, { 0x63, 0x64 } },
+ { 0x1f12e, 2, { 0x77, 0x7a } },
+ { 0x1f130, 1, { 0x61, 0 } },
+ { 0x1f131, 1, { 0x62, 0 } },
+ { 0x1f132, 1, { 0x63, 0 } },
+ { 0x1f133, 1, { 0x64, 0 } },
+ { 0x1f134, 1, { 0x65, 0 } },
+ { 0x1f135, 1, { 0x66, 0 } },
+ { 0x1f136, 1, { 0x67, 0 } },
+ { 0x1f137, 1, { 0x68, 0 } },
+ { 0x1f138, 1, { 0x69, 0 } },
+ { 0x1f139, 1, { 0x6a, 0 } },
+ { 0x1f13a, 1, { 0x6b, 0 } },
+ { 0x1f13b, 1, { 0x6c, 0 } },
+ { 0x1f13c, 1, { 0x6d, 0 } },
+ { 0x1f13d, 1, { 0x6e, 0 } },
+ { 0x1f13e, 1, { 0x6f, 0 } },
+ { 0x1f13f, 1, { 0x70, 0 } },
+ { 0x1f140, 1, { 0x71, 0 } },
+ { 0x1f141, 1, { 0x72, 0 } },
+ { 0x1f142, 1, { 0x73, 0 } },
+ { 0x1f143, 1, { 0x74, 0 } },
+ { 0x1f144, 1, { 0x75, 0 } },
+ { 0x1f145, 1, { 0x76, 0 } },
+ { 0x1f146, 1, { 0x77, 0 } },
+ { 0x1f147, 1, { 0x78, 0 } },
+ { 0x1f148, 1, { 0x79, 0 } },
+ { 0x1f149, 1, { 0x7a, 0 } },
+ { 0x1f14a, 2, { 0x68, 0x76 } },
+ { 0x1f14b, 2, { 0x6d, 0x76 } },
+ { 0x1f14c, 2, { 0x73, 0x64 } },
+ { 0x1f14d, 2, { 0x73, 0x73 } },
+ { 0x1f14e, 3, { 727, 0 } },
+ { 0x1f14f, 2, { 0x77, 0x63 } },
+ { 0x1f16a, 2, { 0x6d, 0x63 } },
+ { 0x1f16b, 2, { 0x6d, 0x64 } },
+ { 0x1f16c, 2, { 0x6d, 0x72 } },
+ { 0x1f190, 2, { 0x64, 0x6a } },
+ { 0x1f200, 2, { 0x307b, 0x304b } },
+ { 0x1f201, 2, { 0x30b3, 0x30b3 } },
+ { 0x1f202, 1, { 0x30b5, 0 } },
+ { 0x1f210, 1, { 0x624b, 0 } },
+ { 0x1f211, 1, { 0x5b57, 0 } },
+ { 0x1f212, 1, { 0x53cc, 0 } },
+ { 0x1f213, 1, { 0x30c7, 0 } },
+ { 0x1f214, 1, { 0x4e8c, 0 } },
+ { 0x1f215, 1, { 0x591a, 0 } },
+ { 0x1f216, 1, { 0x89e3, 0 } },
+ { 0x1f217, 1, { 0x5929, 0 } },
+ { 0x1f218, 1, { 0x4ea4, 0 } },
+ { 0x1f219, 1, { 0x6620, 0 } },
+ { 0x1f21a, 1, { 0x7121, 0 } },
+ { 0x1f21b, 1, { 0x6599, 0 } },
+ { 0x1f21c, 1, { 0x524d, 0 } },
+ { 0x1f21d, 1, { 0x5f8c, 0 } },
+ { 0x1f21e, 1, { 0x518d, 0 } },
+ { 0x1f21f, 1, { 0x65b0, 0 } },
+ { 0x1f220, 1, { 0x521d, 0 } },
+ { 0x1f221, 1, { 0x7d42, 0 } },
+ { 0x1f222, 1, { 0x751f, 0 } },
+ { 0x1f223, 1, { 0x8ca9, 0 } },
+ { 0x1f224, 1, { 0x58f0, 0 } },
+ { 0x1f225, 1, { 0x5439, 0 } },
+ { 0x1f226, 1, { 0x6f14, 0 } },
+ { 0x1f227, 1, { 0x6295, 0 } },
+ { 0x1f228, 1, { 0x6355, 0 } },
+ { 0x1f229, 1, { 0x4e00, 0 } },
+ { 0x1f22a, 1, { 0x4e09, 0 } },
+ { 0x1f22b, 1, { 0x904a, 0 } },
+ { 0x1f22c, 1, { 0x5de6, 0 } },
+ { 0x1f22d, 1, { 0x4e2d, 0 } },
+ { 0x1f22e, 1, { 0x53f3, 0 } },
+ { 0x1f22f, 1, { 0x6307, 0 } },
+ { 0x1f230, 1, { 0x8d70, 0 } },
+ { 0x1f231, 1, { 0x6253, 0 } },
+ { 0x1f232, 1, { 0x7981, 0 } },
+ { 0x1f233, 1, { 0x7a7a, 0 } },
+ { 0x1f234, 1, { 0x5408, 0 } },
+ { 0x1f235, 1, { 0x6e80, 0 } },
+ { 0x1f236, 1, { 0x6709, 0 } },
+ { 0x1f237, 1, { 0x6708, 0 } },
+ { 0x1f238, 1, { 0x7533, 0 } },
+ { 0x1f239, 1, { 0x5272, 0 } },
+ { 0x1f23a, 1, { 0x55b6, 0 } },
+ { 0x1f23b, 1, { 0x914d, 0 } },
+ { 0x1f240, 3, { 858, 0 } },
+ { 0x1f241, 3, { 855, 0 } },
+ { 0x1f242, 3, { 607, 0 } },
+ { 0x1f243, 3, { 764, 0 } },
+ { 0x1f244, 3, { 610, 0 } },
+ { 0x1f245, 3, { 137, 0 } },
+ { 0x1f246, 3, { 813, 0 } },
+ { 0x1f247, 3, { 810, 0 } },
+ { 0x1f248, 3, { 439, 0 } },
+ { 0x1f250, 1, { 0x5f97, 0 } },
+ { 0x1f251, 1, { 0x53ef, 0 } },
+ { 0x1fbf0, 1, { 0x30, 0 } },
+ { 0x1fbf1, 1, { 0x31, 0 } },
+ { 0x1fbf2, 1, { 0x32, 0 } },
+ { 0x1fbf3, 1, { 0x33, 0 } },
+ { 0x1fbf4, 1, { 0x34, 0 } },
+ { 0x1fbf5, 1, { 0x35, 0 } },
+ { 0x1fbf6, 1, { 0x36, 0 } },
+ { 0x1fbf7, 1, { 0x37, 0 } },
+ { 0x1fbf8, 1, { 0x38, 0 } },
+ { 0x1fbf9, 1, { 0x39, 0 } },
+ { 0x2f800, 1, { 0x4e3d, 0 } },
+ { 0x2f801, 1, { 0x4e38, 0 } },
+ { 0x2f802, 1, { 0x4e41, 0 } },
+ { 0x2f803, 2, { 0xd840, 0xdd22 } },
+ { 0x2f804, 1, { 0x4f60, 0 } },
+ { 0x2f805, 1, { 0x4fae, 0 } },
+ { 0x2f806, 1, { 0x4fbb, 0 } },
+ { 0x2f807, 1, { 0x5002, 0 } },
+ { 0x2f808, 1, { 0x507a, 0 } },
+ { 0x2f809, 1, { 0x5099, 0 } },
+ { 0x2f80a, 1, { 0x50e7, 0 } },
+ { 0x2f80b, 1, { 0x50cf, 0 } },
+ { 0x2f80c, 1, { 0x349e, 0 } },
+ { 0x2f80d, 2, { 0xd841, 0xde3a } },
+ { 0x2f80e, 1, { 0x514d, 0 } },
+ { 0x2f80f, 1, { 0x5154, 0 } },
+ { 0x2f810, 1, { 0x5164, 0 } },
+ { 0x2f811, 1, { 0x5177, 0 } },
+ { 0x2f812, 2, { 0xd841, 0xdd1c } },
+ { 0x2f813, 1, { 0x34b9, 0 } },
+ { 0x2f814, 1, { 0x5167, 0 } },
+ { 0x2f815, 1, { 0x518d, 0 } },
+ { 0x2f816, 2, { 0xd841, 0xdd4b } },
+ { 0x2f817, 1, { 0x5197, 0 } },
+ { 0x2f818, 1, { 0x51a4, 0 } },
+ { 0x2f819, 1, { 0x4ecc, 0 } },
+ { 0x2f81a, 1, { 0x51ac, 0 } },
+ { 0x2f81b, 1, { 0x51b5, 0 } },
+ { 0x2f81c, 2, { 0xd864, 0xdddf } },
+ { 0x2f81d, 1, { 0x51f5, 0 } },
+ { 0x2f81e, 1, { 0x5203, 0 } },
+ { 0x2f81f, 1, { 0x34df, 0 } },
+ { 0x2f820, 1, { 0x523b, 0 } },
+ { 0x2f821, 1, { 0x5246, 0 } },
+ { 0x2f822, 1, { 0x5272, 0 } },
+ { 0x2f823, 1, { 0x5277, 0 } },
+ { 0x2f824, 1, { 0x3515, 0 } },
+ { 0x2f825, 1, { 0x52c7, 0 } },
+ { 0x2f826, 1, { 0x52c9, 0 } },
+ { 0x2f827, 1, { 0x52e4, 0 } },
+ { 0x2f828, 1, { 0x52fa, 0 } },
+ { 0x2f829, 1, { 0x5305, 0 } },
+ { 0x2f82a, 1, { 0x5306, 0 } },
+ { 0x2f82b, 1, { 0x5317, 0 } },
+ { 0x2f82c, 1, { 0x5349, 0 } },
+ { 0x2f82d, 1, { 0x5351, 0 } },
+ { 0x2f82e, 1, { 0x535a, 0 } },
+ { 0x2f82f, 1, { 0x5373, 0 } },
+ { 0x2f830, 1, { 0x537d, 0 } },
+ { 0x2f831, 1, { 0x537f, 0 } },
+ { 0x2f832, 1, { 0x537f, 0 } },
+ { 0x2f833, 1, { 0x537f, 0 } },
+ { 0x2f834, 2, { 0xd842, 0xde2c } },
+ { 0x2f835, 1, { 0x7070, 0 } },
+ { 0x2f836, 1, { 0x53ca, 0 } },
+ { 0x2f837, 1, { 0x53df, 0 } },
+ { 0x2f838, 2, { 0xd842, 0xdf63 } },
+ { 0x2f839, 1, { 0x53eb, 0 } },
+ { 0x2f83a, 1, { 0x53f1, 0 } },
+ { 0x2f83b, 1, { 0x5406, 0 } },
+ { 0x2f83c, 1, { 0x549e, 0 } },
+ { 0x2f83d, 1, { 0x5438, 0 } },
+ { 0x2f83e, 1, { 0x5448, 0 } },
+ { 0x2f83f, 1, { 0x5468, 0 } },
+ { 0x2f840, 1, { 0x54a2, 0 } },
+ { 0x2f841, 1, { 0x54f6, 0 } },
+ { 0x2f842, 1, { 0x5510, 0 } },
+ { 0x2f843, 1, { 0x5553, 0 } },
+ { 0x2f844, 1, { 0x5563, 0 } },
+ { 0x2f845, 1, { 0x5584, 0 } },
+ { 0x2f846, 1, { 0x5584, 0 } },
+ { 0x2f847, 1, { 0x5599, 0 } },
+ { 0x2f848, 1, { 0x55ab, 0 } },
+ { 0x2f849, 1, { 0x55b3, 0 } },
+ { 0x2f84a, 1, { 0x55c2, 0 } },
+ { 0x2f84b, 1, { 0x5716, 0 } },
+ { 0x2f84c, 1, { 0x5606, 0 } },
+ { 0x2f84d, 1, { 0x5717, 0 } },
+ { 0x2f84e, 1, { 0x5651, 0 } },
+ { 0x2f84f, 1, { 0x5674, 0 } },
+ { 0x2f850, 1, { 0x5207, 0 } },
+ { 0x2f851, 1, { 0x58ee, 0 } },
+ { 0x2f852, 1, { 0x57ce, 0 } },
+ { 0x2f853, 1, { 0x57f4, 0 } },
+ { 0x2f854, 1, { 0x580d, 0 } },
+ { 0x2f855, 1, { 0x578b, 0 } },
+ { 0x2f856, 1, { 0x5832, 0 } },
+ { 0x2f857, 1, { 0x5831, 0 } },
+ { 0x2f858, 1, { 0x58ac, 0 } },
+ { 0x2f859, 2, { 0xd845, 0xdce4 } },
+ { 0x2f85a, 1, { 0x58f2, 0 } },
+ { 0x2f85b, 1, { 0x58f7, 0 } },
+ { 0x2f85c, 1, { 0x5906, 0 } },
+ { 0x2f85d, 1, { 0x591a, 0 } },
+ { 0x2f85e, 1, { 0x5922, 0 } },
+ { 0x2f85f, 1, { 0x5962, 0 } },
+ { 0x2f860, 2, { 0xd845, 0xdea8 } },
+ { 0x2f861, 2, { 0xd845, 0xdeea } },
+ { 0x2f862, 1, { 0x59ec, 0 } },
+ { 0x2f863, 1, { 0x5a1b, 0 } },
+ { 0x2f864, 1, { 0x5a27, 0 } },
+ { 0x2f865, 1, { 0x59d8, 0 } },
+ { 0x2f866, 1, { 0x5a66, 0 } },
+ { 0x2f867, 1, { 0x36ee, 0 } },
+ { 0x2f869, 1, { 0x5b08, 0 } },
+ { 0x2f86a, 1, { 0x5b3e, 0 } },
+ { 0x2f86b, 1, { 0x5b3e, 0 } },
+ { 0x2f86c, 2, { 0xd846, 0xddc8 } },
+ { 0x2f86d, 1, { 0x5bc3, 0 } },
+ { 0x2f86e, 1, { 0x5bd8, 0 } },
+ { 0x2f86f, 1, { 0x5be7, 0 } },
+ { 0x2f870, 1, { 0x5bf3, 0 } },
+ { 0x2f871, 2, { 0xd846, 0xdf18 } },
+ { 0x2f872, 1, { 0x5bff, 0 } },
+ { 0x2f873, 1, { 0x5c06, 0 } },
+ { 0x2f875, 1, { 0x5c22, 0 } },
+ { 0x2f876, 1, { 0x3781, 0 } },
+ { 0x2f877, 1, { 0x5c60, 0 } },
+ { 0x2f878, 1, { 0x5c6e, 0 } },
+ { 0x2f879, 1, { 0x5cc0, 0 } },
+ { 0x2f87a, 1, { 0x5c8d, 0 } },
+ { 0x2f87b, 2, { 0xd847, 0xdde4 } },
+ { 0x2f87c, 1, { 0x5d43, 0 } },
+ { 0x2f87d, 2, { 0xd847, 0xdde6 } },
+ { 0x2f87e, 1, { 0x5d6e, 0 } },
+ { 0x2f87f, 1, { 0x5d6b, 0 } },
+ { 0x2f880, 1, { 0x5d7c, 0 } },
+ { 0x2f881, 1, { 0x5de1, 0 } },
+ { 0x2f882, 1, { 0x5de2, 0 } },
+ { 0x2f883, 1, { 0x382f, 0 } },
+ { 0x2f884, 1, { 0x5dfd, 0 } },
+ { 0x2f885, 1, { 0x5e28, 0 } },
+ { 0x2f886, 1, { 0x5e3d, 0 } },
+ { 0x2f887, 1, { 0x5e69, 0 } },
+ { 0x2f888, 1, { 0x3862, 0 } },
+ { 0x2f889, 2, { 0xd848, 0xdd83 } },
+ { 0x2f88a, 1, { 0x387c, 0 } },
+ { 0x2f88b, 1, { 0x5eb0, 0 } },
+ { 0x2f88c, 1, { 0x5eb3, 0 } },
+ { 0x2f88d, 1, { 0x5eb6, 0 } },
+ { 0x2f88e, 1, { 0x5eca, 0 } },
+ { 0x2f88f, 2, { 0xd868, 0xdf92 } },
+ { 0x2f890, 1, { 0x5efe, 0 } },
+ { 0x2f891, 2, { 0xd848, 0xdf31 } },
+ { 0x2f892, 2, { 0xd848, 0xdf31 } },
+ { 0x2f893, 1, { 0x8201, 0 } },
+ { 0x2f894, 1, { 0x5f22, 0 } },
+ { 0x2f895, 1, { 0x5f22, 0 } },
+ { 0x2f896, 1, { 0x38c7, 0 } },
+ { 0x2f897, 2, { 0xd84c, 0xdeb8 } },
+ { 0x2f898, 2, { 0xd858, 0xddda } },
+ { 0x2f899, 1, { 0x5f62, 0 } },
+ { 0x2f89a, 1, { 0x5f6b, 0 } },
+ { 0x2f89b, 1, { 0x38e3, 0 } },
+ { 0x2f89c, 1, { 0x5f9a, 0 } },
+ { 0x2f89d, 1, { 0x5fcd, 0 } },
+ { 0x2f89e, 1, { 0x5fd7, 0 } },
+ { 0x2f89f, 1, { 0x5ff9, 0 } },
+ { 0x2f8a0, 1, { 0x6081, 0 } },
+ { 0x2f8a1, 1, { 0x393a, 0 } },
+ { 0x2f8a2, 1, { 0x391c, 0 } },
+ { 0x2f8a3, 1, { 0x6094, 0 } },
+ { 0x2f8a4, 2, { 0xd849, 0xded4 } },
+ { 0x2f8a5, 1, { 0x60c7, 0 } },
+ { 0x2f8a6, 1, { 0x6148, 0 } },
+ { 0x2f8a7, 1, { 0x614c, 0 } },
+ { 0x2f8a8, 1, { 0x614e, 0 } },
+ { 0x2f8a9, 1, { 0x614c, 0 } },
+ { 0x2f8aa, 1, { 0x617a, 0 } },
+ { 0x2f8ab, 1, { 0x618e, 0 } },
+ { 0x2f8ac, 1, { 0x61b2, 0 } },
+ { 0x2f8ad, 1, { 0x61a4, 0 } },
+ { 0x2f8ae, 1, { 0x61af, 0 } },
+ { 0x2f8af, 1, { 0x61de, 0 } },
+ { 0x2f8b0, 1, { 0x61f2, 0 } },
+ { 0x2f8b1, 1, { 0x61f6, 0 } },
+ { 0x2f8b2, 1, { 0x6210, 0 } },
+ { 0x2f8b3, 1, { 0x621b, 0 } },
+ { 0x2f8b4, 1, { 0x625d, 0 } },
+ { 0x2f8b5, 1, { 0x62b1, 0 } },
+ { 0x2f8b6, 1, { 0x62d4, 0 } },
+ { 0x2f8b7, 1, { 0x6350, 0 } },
+ { 0x2f8b8, 2, { 0xd84a, 0xdf0c } },
+ { 0x2f8b9, 1, { 0x633d, 0 } },
+ { 0x2f8ba, 1, { 0x62fc, 0 } },
+ { 0x2f8bb, 1, { 0x6368, 0 } },
+ { 0x2f8bc, 1, { 0x6383, 0 } },
+ { 0x2f8bd, 1, { 0x63e4, 0 } },
+ { 0x2f8be, 2, { 0xd84a, 0xdff1 } },
+ { 0x2f8bf, 1, { 0x6422, 0 } },
+ { 0x2f8c0, 1, { 0x63c5, 0 } },
+ { 0x2f8c1, 1, { 0x63a9, 0 } },
+ { 0x2f8c2, 1, { 0x3a2e, 0 } },
+ { 0x2f8c3, 1, { 0x6469, 0 } },
+ { 0x2f8c4, 1, { 0x647e, 0 } },
+ { 0x2f8c5, 1, { 0x649d, 0 } },
+ { 0x2f8c6, 1, { 0x6477, 0 } },
+ { 0x2f8c7, 1, { 0x3a6c, 0 } },
+ { 0x2f8c8, 1, { 0x654f, 0 } },
+ { 0x2f8c9, 1, { 0x656c, 0 } },
+ { 0x2f8ca, 2, { 0xd84c, 0xdc0a } },
+ { 0x2f8cb, 1, { 0x65e3, 0 } },
+ { 0x2f8cc, 1, { 0x66f8, 0 } },
+ { 0x2f8cd, 1, { 0x6649, 0 } },
+ { 0x2f8ce, 1, { 0x3b19, 0 } },
+ { 0x2f8cf, 1, { 0x6691, 0 } },
+ { 0x2f8d0, 1, { 0x3b08, 0 } },
+ { 0x2f8d1, 1, { 0x3ae4, 0 } },
+ { 0x2f8d2, 1, { 0x5192, 0 } },
+ { 0x2f8d3, 1, { 0x5195, 0 } },
+ { 0x2f8d4, 1, { 0x6700, 0 } },
+ { 0x2f8d5, 1, { 0x669c, 0 } },
+ { 0x2f8d6, 1, { 0x80ad, 0 } },
+ { 0x2f8d7, 1, { 0x43d9, 0 } },
+ { 0x2f8d8, 1, { 0x6717, 0 } },
+ { 0x2f8d9, 1, { 0x671b, 0 } },
+ { 0x2f8da, 1, { 0x6721, 0 } },
+ { 0x2f8db, 1, { 0x675e, 0 } },
+ { 0x2f8dc, 1, { 0x6753, 0 } },
+ { 0x2f8dd, 2, { 0xd84c, 0xdfc3 } },
+ { 0x2f8de, 1, { 0x3b49, 0 } },
+ { 0x2f8df, 1, { 0x67fa, 0 } },
+ { 0x2f8e0, 1, { 0x6785, 0 } },
+ { 0x2f8e1, 1, { 0x6852, 0 } },
+ { 0x2f8e2, 1, { 0x6885, 0 } },
+ { 0x2f8e3, 2, { 0xd84d, 0xdc6d } },
+ { 0x2f8e4, 1, { 0x688e, 0 } },
+ { 0x2f8e5, 1, { 0x681f, 0 } },
+ { 0x2f8e6, 1, { 0x6914, 0 } },
+ { 0x2f8e7, 1, { 0x3b9d, 0 } },
+ { 0x2f8e8, 1, { 0x6942, 0 } },
+ { 0x2f8e9, 1, { 0x69a3, 0 } },
+ { 0x2f8ea, 1, { 0x69ea, 0 } },
+ { 0x2f8eb, 1, { 0x6aa8, 0 } },
+ { 0x2f8ec, 2, { 0xd84d, 0xdea3 } },
+ { 0x2f8ed, 1, { 0x6adb, 0 } },
+ { 0x2f8ee, 1, { 0x3c18, 0 } },
+ { 0x2f8ef, 1, { 0x6b21, 0 } },
+ { 0x2f8f0, 2, { 0xd84e, 0xdca7 } },
+ { 0x2f8f1, 1, { 0x6b54, 0 } },
+ { 0x2f8f2, 1, { 0x3c4e, 0 } },
+ { 0x2f8f3, 1, { 0x6b72, 0 } },
+ { 0x2f8f4, 1, { 0x6b9f, 0 } },
+ { 0x2f8f5, 1, { 0x6bba, 0 } },
+ { 0x2f8f6, 1, { 0x6bbb, 0 } },
+ { 0x2f8f7, 2, { 0xd84e, 0xde8d } },
+ { 0x2f8f8, 2, { 0xd847, 0xdd0b } },
+ { 0x2f8f9, 2, { 0xd84e, 0xdefa } },
+ { 0x2f8fa, 1, { 0x6c4e, 0 } },
+ { 0x2f8fb, 2, { 0xd84f, 0xdcbc } },
+ { 0x2f8fc, 1, { 0x6cbf, 0 } },
+ { 0x2f8fd, 1, { 0x6ccd, 0 } },
+ { 0x2f8fe, 1, { 0x6c67, 0 } },
+ { 0x2f8ff, 1, { 0x6d16, 0 } },
+ { 0x2f900, 1, { 0x6d3e, 0 } },
+ { 0x2f901, 1, { 0x6d77, 0 } },
+ { 0x2f902, 1, { 0x6d41, 0 } },
+ { 0x2f903, 1, { 0x6d69, 0 } },
+ { 0x2f904, 1, { 0x6d78, 0 } },
+ { 0x2f905, 1, { 0x6d85, 0 } },
+ { 0x2f906, 2, { 0xd84f, 0xdd1e } },
+ { 0x2f907, 1, { 0x6d34, 0 } },
+ { 0x2f908, 1, { 0x6e2f, 0 } },
+ { 0x2f909, 1, { 0x6e6e, 0 } },
+ { 0x2f90a, 1, { 0x3d33, 0 } },
+ { 0x2f90b, 1, { 0x6ecb, 0 } },
+ { 0x2f90c, 1, { 0x6ec7, 0 } },
+ { 0x2f90d, 2, { 0xd84f, 0xded1 } },
+ { 0x2f90e, 1, { 0x6df9, 0 } },
+ { 0x2f90f, 1, { 0x6f6e, 0 } },
+ { 0x2f910, 2, { 0xd84f, 0xdf5e } },
+ { 0x2f911, 2, { 0xd84f, 0xdf8e } },
+ { 0x2f912, 1, { 0x6fc6, 0 } },
+ { 0x2f913, 1, { 0x7039, 0 } },
+ { 0x2f914, 1, { 0x701e, 0 } },
+ { 0x2f915, 1, { 0x701b, 0 } },
+ { 0x2f916, 1, { 0x3d96, 0 } },
+ { 0x2f917, 1, { 0x704a, 0 } },
+ { 0x2f918, 1, { 0x707d, 0 } },
+ { 0x2f919, 1, { 0x7077, 0 } },
+ { 0x2f91a, 1, { 0x70ad, 0 } },
+ { 0x2f91b, 2, { 0xd841, 0xdd25 } },
+ { 0x2f91c, 1, { 0x7145, 0 } },
+ { 0x2f91d, 2, { 0xd850, 0xde63 } },
+ { 0x2f91e, 1, { 0x719c, 0 } },
+ { 0x2f920, 1, { 0x7228, 0 } },
+ { 0x2f921, 1, { 0x7235, 0 } },
+ { 0x2f922, 1, { 0x7250, 0 } },
+ { 0x2f923, 2, { 0xd851, 0xde08 } },
+ { 0x2f924, 1, { 0x7280, 0 } },
+ { 0x2f925, 1, { 0x7295, 0 } },
+ { 0x2f926, 2, { 0xd851, 0xdf35 } },
+ { 0x2f927, 2, { 0xd852, 0xdc14 } },
+ { 0x2f928, 1, { 0x737a, 0 } },
+ { 0x2f929, 1, { 0x738b, 0 } },
+ { 0x2f92a, 1, { 0x3eac, 0 } },
+ { 0x2f92b, 1, { 0x73a5, 0 } },
+ { 0x2f92c, 1, { 0x3eb8, 0 } },
+ { 0x2f92d, 1, { 0x3eb8, 0 } },
+ { 0x2f92e, 1, { 0x7447, 0 } },
+ { 0x2f92f, 1, { 0x745c, 0 } },
+ { 0x2f930, 1, { 0x7471, 0 } },
+ { 0x2f931, 1, { 0x7485, 0 } },
+ { 0x2f932, 1, { 0x74ca, 0 } },
+ { 0x2f933, 1, { 0x3f1b, 0 } },
+ { 0x2f934, 1, { 0x7524, 0 } },
+ { 0x2f935, 2, { 0xd853, 0xdc36 } },
+ { 0x2f936, 1, { 0x753e, 0 } },
+ { 0x2f937, 2, { 0xd853, 0xdc92 } },
+ { 0x2f938, 1, { 0x7570, 0 } },
+ { 0x2f939, 2, { 0xd848, 0xdd9f } },
+ { 0x2f93a, 1, { 0x7610, 0 } },
+ { 0x2f93b, 2, { 0xd853, 0xdfa1 } },
+ { 0x2f93c, 2, { 0xd853, 0xdfb8 } },
+ { 0x2f93d, 2, { 0xd854, 0xdc44 } },
+ { 0x2f93e, 1, { 0x3ffc, 0 } },
+ { 0x2f93f, 1, { 0x4008, 0 } },
+ { 0x2f940, 1, { 0x76f4, 0 } },
+ { 0x2f941, 2, { 0xd854, 0xdcf3 } },
+ { 0x2f942, 2, { 0xd854, 0xdcf2 } },
+ { 0x2f943, 2, { 0xd854, 0xdd19 } },
+ { 0x2f944, 2, { 0xd854, 0xdd33 } },
+ { 0x2f945, 1, { 0x771e, 0 } },
+ { 0x2f946, 1, { 0x771f, 0 } },
+ { 0x2f947, 1, { 0x771f, 0 } },
+ { 0x2f948, 1, { 0x774a, 0 } },
+ { 0x2f949, 1, { 0x4039, 0 } },
+ { 0x2f94a, 1, { 0x778b, 0 } },
+ { 0x2f94b, 1, { 0x4046, 0 } },
+ { 0x2f94c, 1, { 0x4096, 0 } },
+ { 0x2f94d, 2, { 0xd855, 0xdc1d } },
+ { 0x2f94e, 1, { 0x784e, 0 } },
+ { 0x2f94f, 1, { 0x788c, 0 } },
+ { 0x2f950, 1, { 0x78cc, 0 } },
+ { 0x2f951, 1, { 0x40e3, 0 } },
+ { 0x2f952, 2, { 0xd855, 0xde26 } },
+ { 0x2f953, 1, { 0x7956, 0 } },
+ { 0x2f954, 2, { 0xd855, 0xde9a } },
+ { 0x2f955, 2, { 0xd855, 0xdec5 } },
+ { 0x2f956, 1, { 0x798f, 0 } },
+ { 0x2f957, 1, { 0x79eb, 0 } },
+ { 0x2f958, 1, { 0x412f, 0 } },
+ { 0x2f959, 1, { 0x7a40, 0 } },
+ { 0x2f95a, 1, { 0x7a4a, 0 } },
+ { 0x2f95b, 1, { 0x7a4f, 0 } },
+ { 0x2f95c, 2, { 0xd856, 0xdd7c } },
+ { 0x2f95d, 2, { 0xd856, 0xdea7 } },
+ { 0x2f95e, 2, { 0xd856, 0xdea7 } },
+ { 0x2f960, 1, { 0x4202, 0 } },
+ { 0x2f961, 2, { 0xd856, 0xdfab } },
+ { 0x2f962, 1, { 0x7bc6, 0 } },
+ { 0x2f963, 1, { 0x7bc9, 0 } },
+ { 0x2f964, 1, { 0x4227, 0 } },
+ { 0x2f965, 2, { 0xd857, 0xdc80 } },
+ { 0x2f966, 1, { 0x7cd2, 0 } },
+ { 0x2f967, 1, { 0x42a0, 0 } },
+ { 0x2f968, 1, { 0x7ce8, 0 } },
+ { 0x2f969, 1, { 0x7ce3, 0 } },
+ { 0x2f96a, 1, { 0x7d00, 0 } },
+ { 0x2f96b, 2, { 0xd857, 0xdf86 } },
+ { 0x2f96c, 1, { 0x7d63, 0 } },
+ { 0x2f96d, 1, { 0x4301, 0 } },
+ { 0x2f96e, 1, { 0x7dc7, 0 } },
+ { 0x2f96f, 1, { 0x7e02, 0 } },
+ { 0x2f970, 1, { 0x7e45, 0 } },
+ { 0x2f971, 1, { 0x4334, 0 } },
+ { 0x2f972, 2, { 0xd858, 0xde28 } },
+ { 0x2f973, 2, { 0xd858, 0xde47 } },
+ { 0x2f974, 1, { 0x4359, 0 } },
+ { 0x2f975, 2, { 0xd858, 0xded9 } },
+ { 0x2f976, 1, { 0x7f7a, 0 } },
+ { 0x2f977, 2, { 0xd858, 0xdf3e } },
+ { 0x2f978, 1, { 0x7f95, 0 } },
+ { 0x2f979, 1, { 0x7ffa, 0 } },
+ { 0x2f97a, 1, { 0x8005, 0 } },
+ { 0x2f97b, 2, { 0xd859, 0xdcda } },
+ { 0x2f97c, 2, { 0xd859, 0xdd23 } },
+ { 0x2f97d, 1, { 0x8060, 0 } },
+ { 0x2f97e, 2, { 0xd859, 0xdda8 } },
+ { 0x2f97f, 1, { 0x8070, 0 } },
+ { 0x2f980, 2, { 0xd84c, 0xdf5f } },
+ { 0x2f981, 1, { 0x43d5, 0 } },
+ { 0x2f982, 1, { 0x80b2, 0 } },
+ { 0x2f983, 1, { 0x8103, 0 } },
+ { 0x2f984, 1, { 0x440b, 0 } },
+ { 0x2f985, 1, { 0x813e, 0 } },
+ { 0x2f986, 1, { 0x5ab5, 0 } },
+ { 0x2f987, 2, { 0xd859, 0xdfa7 } },
+ { 0x2f988, 2, { 0xd859, 0xdfb5 } },
+ { 0x2f989, 2, { 0xd84c, 0xdf93 } },
+ { 0x2f98a, 2, { 0xd84c, 0xdf9c } },
+ { 0x2f98b, 1, { 0x8201, 0 } },
+ { 0x2f98c, 1, { 0x8204, 0 } },
+ { 0x2f98d, 1, { 0x8f9e, 0 } },
+ { 0x2f98e, 1, { 0x446b, 0 } },
+ { 0x2f98f, 1, { 0x8291, 0 } },
+ { 0x2f990, 1, { 0x828b, 0 } },
+ { 0x2f991, 1, { 0x829d, 0 } },
+ { 0x2f992, 1, { 0x52b3, 0 } },
+ { 0x2f993, 1, { 0x82b1, 0 } },
+ { 0x2f994, 1, { 0x82b3, 0 } },
+ { 0x2f995, 1, { 0x82bd, 0 } },
+ { 0x2f996, 1, { 0x82e6, 0 } },
+ { 0x2f997, 2, { 0xd85a, 0xdf3c } },
+ { 0x2f998, 1, { 0x82e5, 0 } },
+ { 0x2f999, 1, { 0x831d, 0 } },
+ { 0x2f99a, 1, { 0x8363, 0 } },
+ { 0x2f99b, 1, { 0x83ad, 0 } },
+ { 0x2f99c, 1, { 0x8323, 0 } },
+ { 0x2f99d, 1, { 0x83bd, 0 } },
+ { 0x2f99e, 1, { 0x83e7, 0 } },
+ { 0x2f99f, 1, { 0x8457, 0 } },
+ { 0x2f9a0, 1, { 0x8353, 0 } },
+ { 0x2f9a1, 1, { 0x83ca, 0 } },
+ { 0x2f9a2, 1, { 0x83cc, 0 } },
+ { 0x2f9a3, 1, { 0x83dc, 0 } },
+ { 0x2f9a4, 2, { 0xd85b, 0xdc36 } },
+ { 0x2f9a5, 2, { 0xd85b, 0xdd6b } },
+ { 0x2f9a6, 2, { 0xd85b, 0xdcd5 } },
+ { 0x2f9a7, 1, { 0x452b, 0 } },
+ { 0x2f9a8, 1, { 0x84f1, 0 } },
+ { 0x2f9a9, 1, { 0x84f3, 0 } },
+ { 0x2f9aa, 1, { 0x8516, 0 } },
+ { 0x2f9ab, 2, { 0xd85c, 0xdfca } },
+ { 0x2f9ac, 1, { 0x8564, 0 } },
+ { 0x2f9ad, 2, { 0xd85b, 0xdf2c } },
+ { 0x2f9ae, 1, { 0x455d, 0 } },
+ { 0x2f9af, 1, { 0x4561, 0 } },
+ { 0x2f9b0, 2, { 0xd85b, 0xdfb1 } },
+ { 0x2f9b1, 2, { 0xd85c, 0xdcd2 } },
+ { 0x2f9b2, 1, { 0x456b, 0 } },
+ { 0x2f9b3, 1, { 0x8650, 0 } },
+ { 0x2f9b4, 1, { 0x865c, 0 } },
+ { 0x2f9b5, 1, { 0x8667, 0 } },
+ { 0x2f9b6, 1, { 0x8669, 0 } },
+ { 0x2f9b7, 1, { 0x86a9, 0 } },
+ { 0x2f9b8, 1, { 0x8688, 0 } },
+ { 0x2f9b9, 1, { 0x870e, 0 } },
+ { 0x2f9ba, 1, { 0x86e2, 0 } },
+ { 0x2f9bb, 1, { 0x8779, 0 } },
+ { 0x2f9bc, 1, { 0x8728, 0 } },
+ { 0x2f9bd, 1, { 0x876b, 0 } },
+ { 0x2f9be, 1, { 0x8786, 0 } },
+ { 0x2f9c0, 1, { 0x87e1, 0 } },
+ { 0x2f9c1, 1, { 0x8801, 0 } },
+ { 0x2f9c2, 1, { 0x45f9, 0 } },
+ { 0x2f9c3, 1, { 0x8860, 0 } },
+ { 0x2f9c4, 1, { 0x8863, 0 } },
+ { 0x2f9c5, 2, { 0xd85d, 0xde67 } },
+ { 0x2f9c6, 1, { 0x88d7, 0 } },
+ { 0x2f9c7, 1, { 0x88de, 0 } },
+ { 0x2f9c8, 1, { 0x4635, 0 } },
+ { 0x2f9c9, 1, { 0x88fa, 0 } },
+ { 0x2f9ca, 1, { 0x34bb, 0 } },
+ { 0x2f9cb, 2, { 0xd85e, 0xdcae } },
+ { 0x2f9cc, 2, { 0xd85e, 0xdd66 } },
+ { 0x2f9cd, 1, { 0x46be, 0 } },
+ { 0x2f9ce, 1, { 0x46c7, 0 } },
+ { 0x2f9cf, 1, { 0x8aa0, 0 } },
+ { 0x2f9d0, 1, { 0x8aed, 0 } },
+ { 0x2f9d1, 1, { 0x8b8a, 0 } },
+ { 0x2f9d2, 1, { 0x8c55, 0 } },
+ { 0x2f9d3, 2, { 0xd85f, 0xdca8 } },
+ { 0x2f9d4, 1, { 0x8cab, 0 } },
+ { 0x2f9d5, 1, { 0x8cc1, 0 } },
+ { 0x2f9d6, 1, { 0x8d1b, 0 } },
+ { 0x2f9d7, 1, { 0x8d77, 0 } },
+ { 0x2f9d8, 2, { 0xd85f, 0xdf2f } },
+ { 0x2f9d9, 2, { 0xd842, 0xdc04 } },
+ { 0x2f9da, 1, { 0x8dcb, 0 } },
+ { 0x2f9db, 1, { 0x8dbc, 0 } },
+ { 0x2f9dc, 1, { 0x8df0, 0 } },
+ { 0x2f9dd, 2, { 0xd842, 0xdcde } },
+ { 0x2f9de, 1, { 0x8ed4, 0 } },
+ { 0x2f9df, 1, { 0x8f38, 0 } },
+ { 0x2f9e0, 2, { 0xd861, 0xddd2 } },
+ { 0x2f9e1, 2, { 0xd861, 0xdded } },
+ { 0x2f9e2, 1, { 0x9094, 0 } },
+ { 0x2f9e3, 1, { 0x90f1, 0 } },
+ { 0x2f9e4, 1, { 0x9111, 0 } },
+ { 0x2f9e5, 2, { 0xd861, 0xdf2e } },
+ { 0x2f9e6, 1, { 0x911b, 0 } },
+ { 0x2f9e7, 1, { 0x9238, 0 } },
+ { 0x2f9e8, 1, { 0x92d7, 0 } },
+ { 0x2f9e9, 1, { 0x92d8, 0 } },
+ { 0x2f9ea, 1, { 0x927c, 0 } },
+ { 0x2f9eb, 1, { 0x93f9, 0 } },
+ { 0x2f9ec, 1, { 0x9415, 0 } },
+ { 0x2f9ed, 2, { 0xd862, 0xdffa } },
+ { 0x2f9ee, 1, { 0x958b, 0 } },
+ { 0x2f9ef, 1, { 0x4995, 0 } },
+ { 0x2f9f0, 1, { 0x95b7, 0 } },
+ { 0x2f9f1, 2, { 0xd863, 0xdd77 } },
+ { 0x2f9f2, 1, { 0x49e6, 0 } },
+ { 0x2f9f3, 1, { 0x96c3, 0 } },
+ { 0x2f9f4, 1, { 0x5db2, 0 } },
+ { 0x2f9f5, 1, { 0x9723, 0 } },
+ { 0x2f9f6, 2, { 0xd864, 0xdd45 } },
+ { 0x2f9f7, 2, { 0xd864, 0xde1a } },
+ { 0x2f9f8, 1, { 0x4a6e, 0 } },
+ { 0x2f9f9, 1, { 0x4a76, 0 } },
+ { 0x2f9fa, 1, { 0x97e0, 0 } },
+ { 0x2f9fb, 2, { 0xd865, 0xdc0a } },
+ { 0x2f9fc, 1, { 0x4ab2, 0 } },
+ { 0x2f9fd, 2, { 0xd865, 0xdc96 } },
+ { 0x2f9fe, 1, { 0x980b, 0 } },
+ { 0x2f9ff, 1, { 0x980b, 0 } },
+ { 0x2fa00, 1, { 0x9829, 0 } },
+ { 0x2fa01, 2, { 0xd865, 0xddb6 } },
+ { 0x2fa02, 1, { 0x98e2, 0 } },
+ { 0x2fa03, 1, { 0x4b33, 0 } },
+ { 0x2fa04, 1, { 0x9929, 0 } },
+ { 0x2fa05, 1, { 0x99a7, 0 } },
+ { 0x2fa06, 1, { 0x99c2, 0 } },
+ { 0x2fa07, 1, { 0x99fe, 0 } },
+ { 0x2fa08, 1, { 0x4bce, 0 } },
+ { 0x2fa09, 2, { 0xd866, 0xdf30 } },
+ { 0x2fa0a, 1, { 0x9b12, 0 } },
+ { 0x2fa0b, 1, { 0x9c40, 0 } },
+ { 0x2fa0c, 1, { 0x9cfd, 0 } },
+ { 0x2fa0d, 1, { 0x4cce, 0 } },
+ { 0x2fa0e, 1, { 0x4ced, 0 } },
+ { 0x2fa0f, 1, { 0x9d67, 0 } },
+ { 0x2fa10, 2, { 0xd868, 0xdcce } },
+ { 0x2fa11, 1, { 0x4cf8, 0 } },
+ { 0x2fa12, 2, { 0xd868, 0xdd05 } },
+ { 0x2fa13, 2, { 0xd868, 0xde0e } },
+ { 0x2fa14, 2, { 0xd868, 0xde91 } },
+ { 0x2fa15, 1, { 0x9ebb, 0 } },
+ { 0x2fa16, 1, { 0x4d56, 0 } },
+ { 0x2fa17, 1, { 0x9ef9, 0 } },
+ { 0x2fa18, 1, { 0x9efe, 0 } },
+ { 0x2fa19, 1, { 0x9f05, 0 } },
+ { 0x2fa1a, 1, { 0x9f0f, 0 } },
+ { 0x2fa1b, 1, { 0x9f16, 0 } },
+ { 0x2fa1c, 1, { 0x9f3b, 0 } },
+ { 0x2fa1d, 2, { 0xd869, 0xde00 } },
+};
+
+Q_CORE_EXPORT QStringView QT_FASTCALL idnaMapping(char32_t ucs4) noexcept
+{
+ auto i = std::lower_bound(std::begin(idnaMap), std::end(idnaMap), ucs4,
+ [](const auto &p, char32_t c) { return p.codePoint < c; });
+ if (i == std::end(idnaMap) || i->codePoint != ucs4)
+ return {};
+
+ return QStringView(i->size > 2 ? idnaMappingData + i->ucs[0] : i->ucs, i->size);
+}
+
} // namespace QUnicodeTables
using namespace QUnicodeTables;
diff --git a/src/corelib/text/qunicodetables_p.h b/src/corelib/text/qunicodetables_p.h
index e59aea25bd..eabdc919cb 100644
--- a/src/corelib/text/qunicodetables_p.h
+++ b/src/corelib/text/qunicodetables_p.h
@@ -1,43 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/* This file is autogenerated from the Unicode 13.0 database. Do not edit */
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: Unicode-DFS-2016
+
+/* This file is autogenerated from the Unicode 15.1 database. Do not edit */
//
// W A R N I N G
@@ -59,7 +23,7 @@
QT_BEGIN_NAMESPACE
-#define UNICODE_DATA_VERSION QChar::Unicode_13_0
+#define UNICODE_DATA_VERSION QChar::Unicode_15_1
namespace QUnicodeTables {
@@ -79,7 +43,8 @@ struct Properties {
ushort joining : 3;
signed short digitValue : 5;
signed short mirrorDiff : 16;
- ushort unicodeVersion : 8; /* 5 used */
+ ushort unicodeVersion : 5; /* 5 used */
+ ushort eastAsianWidth : 3; /* 3 used */
ushort nfQuickCheck : 8;
#ifdef Q_OS_WASM
unsigned char : 0; //wasm 64 packing trick
@@ -94,7 +59,8 @@ struct Properties {
ushort graphemeBreakClass : 5; /* 5 used */
ushort wordBreakClass : 5; /* 5 used */
ushort lineBreakClass : 6; /* 6 used */
- ushort sentenceBreakClass : 8; /* 4 used */
+ ushort sentenceBreakClass : 4; /* 4 used */
+ ushort idnaStatus : 4; /* 3 used */
ushort script : 8;
};
@@ -103,6 +69,15 @@ Q_CORE_EXPORT const Properties * QT_FASTCALL properties(char16_t ucs2) noexcept;
static_assert(sizeof(Properties) == 20);
+enum class EastAsianWidth : unsigned int {
+ A,
+ F,
+ H,
+ N,
+ Na,
+ W,
+};
+
enum GraphemeBreakClass {
GraphemeBreak_Any,
GraphemeBreak_CR,
@@ -118,10 +93,7 @@ enum GraphemeBreakClass {
GraphemeBreak_T,
GraphemeBreak_LV,
GraphemeBreak_LVT,
- Graphemebreak_E_Base,
- Graphemebreak_E_Modifier,
- Graphemebreak_Glue_After_Zwj,
- Graphemebreak_E_Base_GAZ,
+ GraphemeBreak_Extended_Pictographic,
NumGraphemeBreakClasses
};
@@ -145,10 +117,6 @@ enum WordBreakClass {
WordBreak_MidNum,
WordBreak_Numeric,
WordBreak_ExtendNumLet,
- WordBreak_E_Base,
- WordBreak_E_Modifier,
- WordBreak_Glue_After_Zwj,
- WordBreak_E_Base_GAZ,
WordBreak_WSegSpace,
NumWordBreakClasses
@@ -174,9 +142,11 @@ enum SentenceBreakClass {
};
// see http://www.unicode.org/reports/tr14/tr14-30.html
-// we don't use the XX and AI classes and map them to AL instead.
+// we don't use the XX, AK, AP, AS and AI classes and map them to AL instead.
+// VI and VF classes are mapped to CM.
enum LineBreakClass {
- LineBreak_OP, LineBreak_CL, LineBreak_CP, LineBreak_QU, LineBreak_GL,
+ LineBreak_OP, LineBreak_CL, LineBreak_CP,
+ LineBreak_QU, LineBreak_QU_Pi, LineBreak_QU_Pf, LineBreak_GL,
LineBreak_NS, LineBreak_EX, LineBreak_SY, LineBreak_IS, LineBreak_PR,
LineBreak_PO, LineBreak_NU, LineBreak_AL, LineBreak_HL, LineBreak_ID,
LineBreak_IN, LineBreak_HY, LineBreak_BA, LineBreak_BB, LineBreak_B2,
@@ -189,6 +159,14 @@ enum LineBreakClass {
NumLineBreakClasses
};
+enum class IdnaStatus : unsigned int {
+ Disallowed,
+ Valid,
+ Ignored,
+ Mapped,
+ Deviation
+};
+
Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(char32_t ucs4) noexcept;
inline GraphemeBreakClass graphemeBreakClass(QChar ch) noexcept
{ return graphemeBreakClass(ch.unicode()); }
@@ -205,6 +183,18 @@ Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(char32_t ucs4) noexcept;
inline LineBreakClass lineBreakClass(QChar ch) noexcept
{ return lineBreakClass(ch.unicode()); }
+Q_CORE_EXPORT IdnaStatus QT_FASTCALL idnaStatus(char32_t ucs4) noexcept;
+inline IdnaStatus idnaStatus(QChar ch) noexcept
+{ return idnaStatus(ch.unicode()); }
+
+Q_CORE_EXPORT QStringView QT_FASTCALL idnaMapping(char32_t usc4) noexcept;
+inline QStringView idnaMapping(QChar ch) noexcept
+{ return idnaMapping(ch.unicode()); }
+
+Q_CORE_EXPORT EastAsianWidth QT_FASTCALL eastAsianWidth(char32_t ucs4) noexcept;
+inline EastAsianWidth eastAsianWidth(QChar ch) noexcept
+{ return eastAsianWidth(ch.unicode()); }
+
} // namespace QUnicodeTables
QT_END_NAMESPACE
diff --git a/src/corelib/text/qunicodetools.cpp b/src/corelib/text/qunicodetools.cpp
index 7b69da8c2c..2917804830 100644
--- a/src/corelib/text/qunicodetools.cpp
+++ b/src/corelib/text/qunicodetools.cpp
@@ -1,98 +1,118 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qunicodetools_p.h"
#include "qunicodetables_p.h"
#include "qvarlengtharray.h"
+#if QT_CONFIG(library)
#include "qlibrary.h"
+#endif
+
+#include <limits.h>
#define FLAG(x) (1 << (x))
QT_BEGIN_NAMESPACE
-Q_AUTOTEST_EXPORT int qt_initcharattributes_default_algorithm_only = 0;
+using namespace Qt::StringLiterals;
+
+#ifdef QT_BUILD_INTERNAL
+Q_CONSTINIT Q_AUTOTEST_EXPORT
+#else
+constexpr
+#endif
+int qt_initcharattributes_default_algorithm_only = 0;
namespace QUnicodeTools {
// -----------------------------------------------------------------------------------------------------
//
// The text boundaries determination algorithm.
-// See http://www.unicode.org/reports/tr29/tr29-31.html
+// See https://www.unicode.org/reports/tr29/tr29-37.html
//
// -----------------------------------------------------------------------------------------------------
namespace GB {
-/*
- * Most grapheme break rules can be implemented table driven, but rules GB10, GB12 and GB13 need a bit
- * of special treatment.
- */
-enum State : uchar {
- Break,
- Inside,
- GB10,
- GB10_2,
- GB10_3,
- GB13, // also covers GB12
+// This table is indexed by the grapheme break classes of two
+// (adjacent) code points.
+// The class of the first code point selects an entry.
+// If the entry's bit at position second_cp_class is set
+// (in other words: if entry & (1u << second_cp_class) is non-zero)
+// then there is NO grapheme break between the two code points.
+
+using GBTableEntryType = quint16;
+
+// Check that we have enough bits in the table (in case
+// NumGraphemeBreakClasses grows too much).
+static_assert(sizeof(GBTableEntryType) * CHAR_BIT >= QUnicodeTables::NumGraphemeBreakClasses,
+ "Internal error: increase the size in bits of GBTableEntryType");
+
+// GB9, GB9a
+static const GBTableEntryType Extend_SpacingMark_ZWJ =
+ FLAG(QUnicodeTables::GraphemeBreak_Extend)
+ | FLAG(QUnicodeTables::GraphemeBreak_SpacingMark)
+ | FLAG(QUnicodeTables::GraphemeBreak_ZWJ);
+
+static const GBTableEntryType HardBreak = 0u;
+
+static const GBTableEntryType breakTable[QUnicodeTables::NumGraphemeBreakClasses] = {
+ Extend_SpacingMark_ZWJ, // Any
+ FLAG(QUnicodeTables::GraphemeBreak_LF), // CR
+ HardBreak, // LF
+ HardBreak, // Control
+ Extend_SpacingMark_ZWJ, // Extend
+ Extend_SpacingMark_ZWJ, // ZWJ
+ Extend_SpacingMark_ZWJ, // RegionalIndicator
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_Any)
+ | FLAG(QUnicodeTables::GraphemeBreak_Prepend)
+ | FLAG(QUnicodeTables::GraphemeBreak_L)
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ | FLAG(QUnicodeTables::GraphemeBreak_LV)
+ | FLAG(QUnicodeTables::GraphemeBreak_LVT)
+ | FLAG(QUnicodeTables::GraphemeBreak_RegionalIndicator)
+ | FLAG(QUnicodeTables::GraphemeBreak_Extended_Pictographic)
+ ), // Prepend
+ Extend_SpacingMark_ZWJ, // SpacingMark
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_L)
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_LV)
+ | FLAG(QUnicodeTables::GraphemeBreak_LVT)
+ ), // L
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // V
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // T
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // LV
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // LVT
+ Extend_SpacingMark_ZWJ // Extended_Pictographic
};
-static const State breakTable[QUnicodeTables::NumGraphemeBreakClasses][QUnicodeTables::NumGraphemeBreakClasses] = {
-// Any CR LF Control Extend ZWJ RI Prepend S-Mark L V T LV LVT E_B E_M GAZ EBG
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Any
- { Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Control
- { Break , Break , Break , Break , GB10_2, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , GB10_3, Break , Break }, // Extend
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Inside, Inside }, // ZWJ
- { Break , Break , Break , Break , Inside, Inside, GB13 , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
- { Inside, Break , Break , Break , Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside }, // Prepend
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SpacingMark
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Inside, Inside, Break , Inside, Inside, Break , Break , Break , Break }, // L
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Inside, Inside, Break , Break , Break , Break , Break , Break }, // V
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break }, // T
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Inside, Inside, Break , Break , Break , Break , Break , Break }, // LV
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break }, // LVT
- { Break , Break , Break , Break , GB10 , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Inside, Break , Break }, // E_B
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // E_M
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // GAZ
- { Break , Break , Break , Break , GB10 , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Inside, Break , Break }, // EBG
+static bool shouldBreakBetweenClasses(QUnicodeTables::GraphemeBreakClass first,
+ QUnicodeTables::GraphemeBreakClass second)
+{
+ return (breakTable[first] & FLAG(second)) == 0;
+}
+
+// Some rules (GB11, GB12, GB13) cannot be represented by the table alone,
+// so we need to store some local state.
+enum class State : uchar {
+ Normal,
+ GB11_ExtPicExt, // saw a Extend after a Extended_Pictographic
+ GB11_ExtPicExtZWJ, // saw a ZWG after a Extended_Pictographic and zero or more Extend
+ GB12_13_RI, // saw a RegionalIndicator following a non-RegionalIndicator
};
} // namespace GB
@@ -100,7 +120,7 @@ static const State breakTable[QUnicodeTables::NumGraphemeBreakClasses][QUnicodeT
static void getGraphemeBreaks(const char16_t *string, qsizetype len, QCharAttributes *attributes)
{
QUnicodeTables::GraphemeBreakClass lcls = QUnicodeTables::GraphemeBreak_LF; // to meet GB1
- GB::State state = GB::Break; // only required to track some of the rules
+ GB::State state = GB::State::Normal;
for (qsizetype i = 0; i != len; ++i) {
qsizetype pos = i;
char32_t ucs4 = string[i];
@@ -115,37 +135,67 @@ static void getGraphemeBreaks(const char16_t *string, qsizetype len, QCharAttrib
const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::GraphemeBreakClass cls = (QUnicodeTables::GraphemeBreakClass) prop->graphemeBreakClass;
- switch (GB::breakTable[lcls][cls]) {
- case GB::Break:
- attributes[pos].graphemeBoundary = true;
- state = GB::Break;
- break;
- case GB::Inside:
- state = GB::Break;
- break;
- case GB::GB10:
- state = GB::GB10;
+ bool shouldBreak = GB::shouldBreakBetweenClasses(lcls, cls);
+ bool handled = false;
+
+ switch (state) {
+ case GB::State::Normal:
+ break; // will deal with it below
+
+ case GB::State::GB11_ExtPicExt:
+ Q_ASSERT(lcls == QUnicodeTables::GraphemeBreak_Extend);
+ if (cls == QUnicodeTables::GraphemeBreak_Extend) {
+ // keep going in the current state
+ Q_ASSERT(!shouldBreak); // GB9, do not break before Extend
+ handled = true;
+ } else if (cls == QUnicodeTables::GraphemeBreak_ZWJ) {
+ state = GB::State::GB11_ExtPicExtZWJ;
+ Q_ASSERT(!shouldBreak); // GB9, do not break before ZWJ
+ handled = true;
+ } else {
+ state = GB::State::Normal;
+ }
break;
- case GB::GB10_2:
- if (state == GB::GB10 || state == GB::GB10_2)
- state = GB::GB10_2;
- else
- state = GB::Break;
+
+ case GB::State::GB11_ExtPicExtZWJ:
+ Q_ASSERT(lcls == QUnicodeTables::GraphemeBreak_ZWJ);
+ if (cls == QUnicodeTables::GraphemeBreak_Extended_Pictographic) {
+ shouldBreak = false;
+ handled = true;
+ }
+
+ state = GB::State::Normal;
break;
- case GB::GB10_3:
- if (state != GB::GB10 && state != GB::GB10_2)
- attributes[pos].graphemeBoundary = true;
- state = GB::Break;
+
+ case GB::State::GB12_13_RI:
+ Q_ASSERT(lcls == QUnicodeTables::GraphemeBreak_RegionalIndicator);
+ if (cls == QUnicodeTables::GraphemeBreak_RegionalIndicator) {
+ shouldBreak = false;
+ handled = true;
+ }
+
+ state = GB::State::Normal;
break;
- case GB::GB13:
- if (state != GB::GB13) {
- state = GB::GB13;
- } else {
- attributes[pos].graphemeBoundary = true;
- state = GB::Break;
+ }
+
+ if (!handled) {
+ Q_ASSERT(state == GB::State::Normal);
+ if (lcls == QUnicodeTables::GraphemeBreak_Extended_Pictographic) { // GB11
+ if (cls == QUnicodeTables::GraphemeBreak_Extend) {
+ state = GB::State::GB11_ExtPicExt;
+ Q_ASSERT(!shouldBreak); // GB9, do not break before Extend
+ } else if (cls == QUnicodeTables::GraphemeBreak_ZWJ) {
+ state = GB::State::GB11_ExtPicExtZWJ;
+ Q_ASSERT(!shouldBreak); // GB9, do not break before ZWJ
+ }
+ } else if (cls == QUnicodeTables::GraphemeBreak_RegionalIndicator) { // GB12, GB13
+ state = GB::State::GB12_13_RI;
}
}
+ if (shouldBreak)
+ attributes[pos].graphemeBoundary = true;
+
lcls = cls;
}
@@ -163,30 +213,26 @@ enum Action {
};
static const uchar breakTable[QUnicodeTables::NumWordBreakClasses][QUnicodeTables::NumWordBreakClasses] = {
-// Any CR LF Newline Extend ZWJ Format RI Katakana HLetter ALetter SQuote DQuote MidNumLet MidLetter MidNum Numeric ExtNumLet E_Base E_Mod GAZ EBG WSeg
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Any
- { Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Newline
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Extend
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, NoBreak, Break }, // ZWJ
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Format
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break }, // Katakana
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Lookup , LookupW, LookupW, Break , NoBreak, NoBreak, Break , Break , Break , Break , Break }, // HebrewLetter
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Break , LookupW, LookupW, Break , NoBreak, NoBreak, Break , Break , Break , Break , Break }, // ALetter
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SingleQuote
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // DoubleQuote
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNumLet
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidLetter
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNum
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, Lookup , Break , Lookup , Break , Lookup , NoBreak, NoBreak, Break , Break , Break , Break , Break }, // Numeric
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , NoBreak, NoBreak, Break , Break , Break , Break , Break }, // ExtendNumLet
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break , Break , Break }, // E_Base
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // E_Mod
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // GAZ
- { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break , Break , Break }, // EBG
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // WSeg
+// Any CR LF Newline Extend ZWJ Format RI Katakana HLetter ALetter SQuote DQuote MidNumLet MidLetter MidNum Numeric ExtNumLet WSeg
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Any
+ { Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
+ { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
+ { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Newline
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Extend
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // ZWJ
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Format
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break }, // Katakana
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Lookup , LookupW, LookupW, Break , NoBreak, NoBreak, Break }, // HebrewLetter
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Break , LookupW, LookupW, Break , NoBreak, NoBreak, Break }, // ALetter
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SingleQuote
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // DoubleQuote
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNumLet
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidLetter
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNum
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, Lookup , Break , Lookup , Break , Lookup , NoBreak, NoBreak, Break }, // Numeric
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , NoBreak, NoBreak, Break }, // ExtendNumLet
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak }, // WSegSpace
};
} // namespace WB
@@ -198,6 +244,8 @@ static void getWordBreaks(const char16_t *string, qsizetype len, QCharAttributes
} currentWordType = WordTypeNone;
QUnicodeTables::WordBreakClass cls = QUnicodeTables::WordBreak_LF; // to meet WB1
+ auto real_cls = cls; // Unaffected by WB4
+
for (qsizetype i = 0; i != len; ++i) {
qsizetype pos = i;
char32_t ucs4 = string[i];
@@ -211,7 +259,6 @@ static void getWordBreaks(const char16_t *string, qsizetype len, QCharAttributes
const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::WordBreakClass ncls = (QUnicodeTables::WordBreakClass) prop->wordBreakClass;
-#ifdef QT_BUILD_INTERNAL
if (qt_initcharattributes_default_algorithm_only) {
// as of Unicode 5.1, some punctuation marks were mapped to MidLetter and MidNumLet
// which caused "hi.there" to be treated like if it were just a single word;
@@ -222,22 +269,32 @@ static void getWordBreaks(const char16_t *string, qsizetype len, QCharAttributes
else if (ucs4 == 0x003A) // COLON
ncls = QUnicodeTables::WordBreak_MidLetter;
}
-#endif
uchar action = WB::breakTable[cls][ncls];
switch (action) {
case WB::Break:
+ if (Q_UNLIKELY(real_cls == QUnicodeTables::WordBreak_ZWJ
+ && prop->graphemeBreakClass
+ == QUnicodeTables::GraphemeBreak_Extended_Pictographic)) {
+ // WB3c: ZWJ × \p{Extended_Pictographic}
+ action = WB::NoBreak;
+ }
break;
case WB::NoBreak:
if (Q_UNLIKELY(ncls == QUnicodeTables::WordBreak_Extend || ncls == QUnicodeTables::WordBreak_ZWJ || ncls == QUnicodeTables::WordBreak_Format)) {
// WB4: X(Extend|Format)* -> X
- if (cls != QUnicodeTables::WordBreak_ZWJ) // WB3c
- continue;
+ real_cls = ncls;
+ continue;
}
if (Q_UNLIKELY(cls == QUnicodeTables::WordBreak_RegionalIndicator)) {
// WB15/WB16: break between pairs of Regional indicator
ncls = QUnicodeTables::WordBreak_Any;
}
+ if (Q_UNLIKELY(ncls == QUnicodeTables::WordBreak_WSegSpace
+ && real_cls != QUnicodeTables::WordBreak_WSegSpace)) {
+ // WB3d should not be affected by WB4
+ action = WB::Break;
+ }
break;
case WB::Lookup:
case WB::LookupW:
@@ -276,6 +333,8 @@ static void getWordBreaks(const char16_t *string, qsizetype len, QCharAttributes
}
cls = ncls;
+ real_cls = ncls;
+
if (action == WB::Break) {
attributes[pos].wordBreak = true;
if (currentWordType != WordTypeNone)
@@ -496,49 +555,53 @@ enum Action {
IndirectBreak, IB = IndirectBreak,
CombiningIndirectBreak, CI = CombiningIndirectBreak,
CombiningProhibitedBreak, CP = CombiningProhibitedBreak,
- ProhibitedBreakAfterHebrewPlusHyphen, HH = ProhibitedBreakAfterHebrewPlusHyphen
+ ProhibitedBreakAfterHebrewPlusHyphen, HH = ProhibitedBreakAfterHebrewPlusHyphen,
+ IndirectBreakIfNarrow, IN = IndirectBreakIfNarrow, // For LB30
};
-static const uchar breakTable[QUnicodeTables::LineBreak_SA][QUnicodeTables::LineBreak_SA] = {
-/* OP CL CP QU GL NS EX SY IS PR PO NU AL HL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT RI CB EB EM ZWJ*/
-/* OP */ { PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, CP, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB },
-/* CL */ { DB, PB, PB, IB, IB, PB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* CP */ { DB, PB, PB, IB, IB, PB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* QU */ { PB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
-/* GL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
-/* NS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* EX */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* SY */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* IS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* PR */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, IB, DB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, IB, DB, DB, IB, IB, IB },
-/* PO */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* NU */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* AL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* HL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, CI, CI, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* ID */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* IN */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* HY */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, IB, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB, DB, DB, IB },
-/* BA */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, HH, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB, DB, DB, IB },
-/* BB */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, DB, IB, IB, IB },
-/* B2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, PB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* ZW */ { DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
-/* CM */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* WJ */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
-/* H2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB, DB, DB, IB },
-/* H3 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB, DB, DB, IB },
-/* JL */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, DB, DB, DB, DB, DB, IB },
-/* JV */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB, DB, DB, IB },
-/* JT */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB, DB, DB, IB },
-/* RI */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, IB, DB, DB, DB, IB },
-/* CB */ { DB, PB, PB, IB, IB, DB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* EB */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, IB, IB },
-/* EM */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
-/* ZWJ*/ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, IB }
+// See https://www.unicode.org/reports/tr14/tr14-37.html for the information
+// about the table. It was removed in the later versions of the standard.
+static const uchar breakTable[QUnicodeTables::LineBreak_ZWJ][QUnicodeTables::LineBreak_ZWJ] = {
+/* 1↓ 2→ OP CL CP QU +Pi +Pf GL NS EX SY IS PR PO NU AL HL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT RI CB EB EM*/
+/* OP */ { PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, CP, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB },
+/* CL */ { DB, PB, PB, IB, IB, PB, IB, PB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* CP */ { DB, PB, PB, IB, IB, PB, IB, PB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* QU */ { IB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* +Pi*/ { PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, CP, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB },
+/* +Pf*/ { IB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* GL */ { IB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* NS */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* EX */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* SY */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, DB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* IS */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* PR */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, IB, IB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, IB, DB, DB, IB, IB },
+/* PO */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* NU */ { IN, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* AL */ { IN, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* HL */ { IN, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, CI, CI, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* ID */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* IN */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* HY */ { HH, PB, PB, IB, IB, PB, HH, IB, PB, PB, PB, HH, HH, IB, HH, HH, HH, IB, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB, DB, DB },
+/* BA */ { HH, PB, PB, IB, IB, PB, HH, IB, PB, PB, PB, HH, HH, HH, HH, HH, HH, IB, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB, DB, DB },
+/* BB */ { IB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, DB, IB, IB },
+/* B2 */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, PB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* ZW */ { DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* CM */ { IB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* WJ */ { IB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* H2 */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB, DB, DB },
+/* H3 */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB, DB, DB },
+/* JL */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, DB, DB, DB, DB, DB },
+/* JV */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB, DB, DB },
+/* JT */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB, DB, DB },
+/* RI */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, IB, DB, DB, DB },
+/* CB */ { DB, PB, PB, IB, IB, PB, IB, DB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* EB */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* EM */ { DB, PB, PB, IB, IB, PB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
};
// The following line break classes are not treated by the pair table
// and must be resolved outside:
-// AI, BK, CB, CJ, CR, LF, NL, SA, SG, SP, XX
+// AI, AK, AP, AS, BK, CB, CJ, CR, LF, NL, SA, SG, SP, VF, VI, XX, ZWJ
} // namespace LB
@@ -549,6 +612,8 @@ static void getLineBreaks(const char16_t *string, qsizetype len, QCharAttributes
QUnicodeTables::LineBreakClass lcls = QUnicodeTables::LineBreak_LF; // to meet LB10
QUnicodeTables::LineBreakClass cls = lcls;
+ const QUnicodeTables::Properties *lastProp = QUnicodeTables::properties(U'\n');
+
for (qsizetype i = 0; i != len; ++i) {
qsizetype pos = i;
char32_t ucs4 = string[i];
@@ -596,6 +661,61 @@ static void getLineBreaks(const char16_t *string, qsizetype len, QCharAttributes
ncls = QUnicodeTables::LineBreak_CM;
}
+ if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_QU)) {
+ if (prop->category == QChar::Punctuation_InitialQuote) {
+ // LB15a: Do not break after an unresolved initial punctuation
+ // that lies at the start of the line, after a space, after
+ // opening punctuation, or after an unresolved quotation mark,
+ // even after spaces.
+ // (sot | BK | CR | LF | NL | OP | QU | GL | SP | ZW)
+ // [\p{Pi}&QU] SP* ×
+ // Note: sot is treated as LF here due to initial loop setup.
+ constexpr QUnicodeTables::LineBreakClass lb15a[] = {
+ QUnicodeTables::LineBreak_BK, QUnicodeTables::LineBreak_CR,
+ QUnicodeTables::LineBreak_LF, QUnicodeTables::LineBreak_OP,
+ QUnicodeTables::LineBreak_QU, QUnicodeTables::LineBreak_QU_Pi,
+ QUnicodeTables::LineBreak_QU_Pf, QUnicodeTables::LineBreak_GL,
+ QUnicodeTables::LineBreak_SP, QUnicodeTables::LineBreak_ZW};
+ if (std::any_of(std::begin(lb15a), std::end(lb15a),
+ [lcls](auto x) { return x == lcls; })) {
+ ncls = QUnicodeTables::LineBreak_QU_Pi;
+ }
+ } else if (prop->category == QChar::Punctuation_FinalQuote) {
+ // LB15b: Do not break before an unresolved final punctuation
+ // that lies at the end of the line, before a space, before
+ // a prohibited break, or before an unresolved quotation mark,
+ // even after spaces.
+ // × [\p{Pf}&QU] ( SP | GL | WJ | CL | QU | CP | EX | IS
+ // | SY | BK | CR | LF | NL | ZW | eot)
+ auto nncls = QUnicodeTables::LineBreak_LF;
+
+ if (i + 1 < len) {
+ char32_t c = string[i + 1];
+ if (QChar::isHighSurrogate(c) && i + 2 != len) {
+ ushort low = string[i + 2];
+ if (QChar::isLowSurrogate(low))
+ c = QChar::surrogateToUcs4(c, low);
+ }
+ nncls = QUnicodeTables::LineBreakClass(
+ QUnicodeTables::properties(c)->lineBreakClass);
+ }
+
+ constexpr QUnicodeTables::LineBreakClass lb15b[] = {
+ QUnicodeTables::LineBreak_SP, QUnicodeTables::LineBreak_GL,
+ QUnicodeTables::LineBreak_WJ, QUnicodeTables::LineBreak_CL,
+ QUnicodeTables::LineBreak_QU, QUnicodeTables::LineBreak_QU_Pi,
+ QUnicodeTables::LineBreak_QU_Pf, QUnicodeTables::LineBreak_CP,
+ QUnicodeTables::LineBreak_EX, QUnicodeTables::LineBreak_IS,
+ QUnicodeTables::LineBreak_SY, QUnicodeTables::LineBreak_BK,
+ QUnicodeTables::LineBreak_CR, QUnicodeTables::LineBreak_LF,
+ QUnicodeTables::LineBreak_ZW};
+ if (std::any_of(std::begin(lb15b), std::end(lb15b),
+ [nncls](auto x) { return x == nncls; })) {
+ ncls = QUnicodeTables::LineBreak_QU_Pf;
+ }
+ }
+ }
+
if (Q_UNLIKELY(lcls >= QUnicodeTables::LineBreak_CR)) {
// LB4: BK!, LB5: (CRxLF|CR|LF|NL)!
if (lcls > QUnicodeTables::LineBreak_CR || ncls != QUnicodeTables::LineBreak_LF)
@@ -621,9 +741,8 @@ static void getLineBreaks(const char16_t *string, qsizetype len, QCharAttributes
}
if (Q_UNLIKELY(lcls == QUnicodeTables::LineBreak_ZWJ)) {
- // LB8a: ZWJ x (ID | EB | EM)
- if (ncls == QUnicodeTables::LineBreak_ID || ncls == QUnicodeTables::LineBreak_EB || ncls == QUnicodeTables::LineBreak_EM)
- goto next;
+ // LB8a: ZWJ x
+ goto next;
}
// LB25: do not break lines inside numbers
@@ -653,16 +772,24 @@ static void getLineBreaks(const char16_t *string, qsizetype len, QCharAttributes
goto next;
}
+ if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_EM
+ && lastProp->category == QChar::Other_NotAssigned
+ && lastProp->graphemeBreakClass
+ == QUnicodeTables::GraphemeBreak_Extended_Pictographic)) {
+ // LB30b: [\p{Extended_Pictographic}&\p{Cn}] × EM
+ goto next;
+ }
+
// for South East Asian chars that require a complex analysis, the Unicode
// standard recommends to treat them as AL. tailoring that do dictionary analysis can override
if (Q_UNLIKELY(cls >= QUnicodeTables::LineBreak_SA))
cls = QUnicodeTables::LineBreak_AL;
tcls = cls;
- if (tcls == QUnicodeTables::LineBreak_CM)
+ if (tcls == QUnicodeTables::LineBreak_CM || tcls == QUnicodeTables::LineBreak_ZWJ)
// LB10
tcls = QUnicodeTables::LineBreak_AL;
- switch (LB::breakTable[tcls][ncls < QUnicodeTables::LineBreak_SA ? ncls : QUnicodeTables::LineBreak_AL]) {
+ switch (LB::breakTable[tcls][ncls < QUnicodeTables::LineBreak_ZWJ ? ncls : QUnicodeTables::LineBreak_AL]) {
case LB::DirectBreak:
attributes[pos].lineBreak = true;
break;
@@ -683,6 +810,19 @@ static void getLineBreaks(const char16_t *string, qsizetype len, QCharAttributes
if (lcls != QUnicodeTables::LineBreak_HL)
attributes[pos].lineBreak = true;
break;
+ case LB::IndirectBreakIfNarrow:
+ switch (static_cast<QUnicodeTables::EastAsianWidth>(prop->eastAsianWidth)) {
+ default:
+ if (lcls != QUnicodeTables::LineBreak_SP)
+ break;
+ Q_FALLTHROUGH();
+ case QUnicodeTables::EastAsianWidth::F:
+ case QUnicodeTables::EastAsianWidth::W:
+ case QUnicodeTables::EastAsianWidth::H:
+ attributes[pos].lineBreak = true;
+ break;
+ }
+ break;
case LB::ProhibitedBreak:
// nothing to do
default:
@@ -691,6 +831,7 @@ static void getLineBreaks(const char16_t *string, qsizetype len, QCharAttributes
next:
cls = ncls;
+ lastProp = prop;
next_no_cls_update:
lcls = ncls;
}
@@ -1179,17 +1320,17 @@ static inline Form form(unsigned short uc) {
(Consonant Nukta? Halant)* Consonant Halant
IndependentVowel VowelMark? StressMark?
- We return syllable boundaries on invalid combinations aswell
+ We return syllable boundaries on invalid combinations as well
*/
static qsizetype indic_nextSyllableBoundary(QChar::Script script, const char16_t *s, qsizetype start, qsizetype end, bool *invalid)
{
*invalid = false;
- IDEBUG("indic_nextSyllableBoundary: start=%d, end=%d", int(start), int(end));
+ IDEBUG("indic_nextSyllableBoundary: start=%lld, end=%lld", qlonglong(start), qlonglong(end));
const char16_t *uc = s+start;
qsizetype pos = 0;
Form state = form(uc[pos]);
- IDEBUG("state[%d]=%d (uc=%4x)", int(pos), state, uc[pos]);
+ IDEBUG("state[%lld]=%d (uc=%4x)", qlonglong(pos), state, uc[pos]);
pos++;
if (state != Consonant && state != IndependentVowel) {
@@ -1200,7 +1341,7 @@ static qsizetype indic_nextSyllableBoundary(QChar::Script script, const char16_t
while (pos < end - start) {
Form newState = form(uc[pos]);
- IDEBUG("state[%d]=%d (uc=%4x)", int(pos), newState, uc[pos]);
+ IDEBUG("state[%lld]=%d (uc=%4x)", qlonglong(pos), newState, uc[pos]);
switch (newState) {
case Control:
newState = state;
@@ -1273,6 +1414,7 @@ static qsizetype indic_nextSyllableBoundary(QChar::Script script, const char16_t
// ### needs proper testing for correct two/three part matras
break;
}
+ Q_FALLTHROUGH();
case IndependentVowel:
case Invalid:
case Other:
@@ -1288,7 +1430,6 @@ static qsizetype indic_nextSyllableBoundary(QChar::Script script, const char16_t
static void indicAttributes(QChar::Script script, const char16_t *text, qsizetype from, qsizetype len, QCharAttributes *attributes)
{
qsizetype end = from + len;
- const char16_t *uc = text + from;
attributes += from;
qsizetype i = 0;
while (i < len) {
@@ -1300,7 +1441,6 @@ static void indicAttributes(QChar::Script script, const char16_t *text, qsizetyp
i++;
while (i < boundary) {
attributes[i].graphemeBoundary = false;
- ++uc;
++i;
}
assert(i == boundary);
@@ -1309,6 +1449,8 @@ static void indicAttributes(QChar::Script script, const char16_t *text, qsizetyp
}
+#if QT_CONFIG(library)
+
#define LIBTHAI_MAJOR 0
/*
@@ -1319,38 +1461,87 @@ struct thcell_t {
unsigned char hilo; /**< upper/lower vowel/diacritic */
unsigned char top; /**< top-level mark */
};
-typedef int (*th_brk_def) (const unsigned char*, int*, size_t);
-typedef size_t (*th_next_cell_def) (const unsigned char *, size_t, struct thcell_t *, int);
-
-/* libthai related function handles */
-static th_brk_def th_brk = nullptr;
-static th_next_cell_def th_next_cell = nullptr;
-
-static int init_libthai() {
- static bool initialized = false;
- if (!initialized && (!th_brk || !th_next_cell)) {
- th_brk = (th_brk_def) QLibrary::resolve(QLatin1String("thai"), (int)LIBTHAI_MAJOR, "th_brk");
- th_next_cell = (th_next_cell_def)QLibrary::resolve(QLatin1String("thai"), LIBTHAI_MAJOR, "th_next_cell");
- initialized = true;
+
+using ThBrk = struct _ThBrk;
+
+namespace {
+
+class LibThai final
+{
+ Q_DISABLE_COPY_MOVE(LibThai)
+
+ using th_brk_new_def = ThBrk *(*)(const char *);
+ using th_brk_delete_def = void (*)(ThBrk *);
+ using th_brk_find_breaks_def = int (*)(ThBrk *, const unsigned char *, int *, size_t);
+ using th_next_cell_def = size_t (*)(const unsigned char *, size_t, struct thcell_t *, int);
+
+public:
+ LibThai() : m_library("thai"_L1, LIBTHAI_MAJOR)
+ {
+ m_th_brk_find_breaks =
+ reinterpret_cast<th_brk_find_breaks_def>(m_library.resolve("th_brk_find_breaks"));
+ m_th_next_cell = reinterpret_cast<th_next_cell_def>(m_library.resolve("th_next_cell"));
+
+ auto th_brk_new = reinterpret_cast<th_brk_new_def>(m_library.resolve("th_brk_new"));
+ if (th_brk_new) {
+ m_state = th_brk_new(nullptr);
+ m_th_brk_delete =
+ reinterpret_cast<th_brk_delete_def>(m_library.resolve("th_brk_delete"));
+ }
}
- if (th_brk && th_next_cell)
- return 1;
- else
- return 0;
-}
+
+ ~LibThai()
+ {
+ if (m_state && m_th_brk_delete)
+ m_th_brk_delete(m_state);
+ m_library.unload();
+ }
+
+ bool isInitialized() const { return m_th_brk_find_breaks && m_th_next_cell && m_state; }
+
+ int brk_find_breaks(const unsigned char *s, int *pos, size_t pos_sz) const
+ {
+ Q_ASSERT(m_state);
+ Q_ASSERT(m_th_brk_find_breaks);
+ return m_th_brk_find_breaks(m_state, s, pos, pos_sz);
+ }
+
+ size_t next_cell(const unsigned char *s, size_t len, struct thcell_t *cell, int is_decomp_am)
+ {
+ Q_ASSERT(m_th_next_cell);
+ return m_th_next_cell(s, len, cell, is_decomp_am);
+ }
+
+private:
+ QLibrary m_library;
+
+ // Global state for th_brk_find_breaks().
+ // Note: even if signature for th_brk_find_breaks() suggests otherwise, the
+ // state is read-only, and so it is safe to use it from multiple threads after
+ // initialization. This is also stated in the libthai documentation.
+ ThBrk *m_state = nullptr;
+
+ th_brk_find_breaks_def m_th_brk_find_breaks = nullptr;
+ th_next_cell_def m_th_next_cell = nullptr;
+ th_brk_delete_def m_th_brk_delete = nullptr;
+};
+
+} // unnamed namespace
+
+Q_GLOBAL_STATIC(LibThai, g_libThai)
static void to_tis620(const char16_t *string, qsizetype len, char *cstr)
{
qsizetype i;
- unsigned char *result = (unsigned char *)cstr;
+ unsigned char *result = reinterpret_cast<unsigned char *>(cstr);
for (i = 0; i < len; ++i) {
if (string[i] <= 0xa0)
- result[i] = (unsigned char)string[i];
+ result[i] = static_cast<unsigned char>(string[i]);
else if (string[i] >= 0xe01 && string[i] <= 0xe5b)
- result[i] = (unsigned char)(string[i] - 0xe00 + 0xa0);
+ result[i] = static_cast<unsigned char>(string[i] - 0xe00 + 0xa0);
else
- result[i] = (unsigned char)~0; // Same encoding as libthai uses for invalid chars
+ result[i] = static_cast<unsigned char>(~0); // Same encoding as libthai uses for invalid chars
}
result[len] = 0;
@@ -1361,21 +1552,17 @@ static void to_tis620(const char16_t *string, qsizetype len, char *cstr)
*/
static void thaiAssignAttributes(const char16_t *string, qsizetype len, QCharAttributes *attributes)
{
- char s[128];
- char *cstr = s;
- int *break_positions = nullptr;
- int brp[128];
- int brp_size = 0;
- qsizetype numbreaks, i, j, cell_length;
+ constexpr qsizetype Prealloc = 128;
+ QVarLengthArray<char, Prealloc + 1> s(len + 1);
+ QVarLengthArray<int, Prealloc> break_positions(len);
+ qsizetype numbreaks, i;
struct thcell_t tis_cell;
- if (!init_libthai())
- return ;
-
- if (len >= 128)
- cstr = (char *)malloc(len*sizeof(char) + 1);
+ LibThai *libThai = g_libThai;
+ if (!libThai || !libThai->isInitialized())
+ return;
- to_tis620(string, len, cstr);
+ to_tis620(string, len, s.data());
for (i = 0; i < len; ++i) {
attributes[i].wordBreak = false;
@@ -1384,61 +1571,53 @@ static void thaiAssignAttributes(const char16_t *string, qsizetype len, QCharAtt
attributes[i].lineBreak = false;
}
- if (len > 128) {
- break_positions = (int*) malloc (sizeof(int) * len);
- memset (break_positions, 0, sizeof(int) * len);
- brp_size = len;
- }
- else {
- break_positions = brp;
- brp_size = 128;
- }
-
- if (break_positions) {
- attributes[0].wordBreak = true;
- attributes[0].wordStart = true;
- attributes[0].wordEnd = false;
- numbreaks = th_brk((const unsigned char *)cstr, break_positions, brp_size);
- for (i = 0; i < numbreaks; ++i) {
- attributes[break_positions[i]].wordBreak = true;
- attributes[break_positions[i]].wordStart = true;
- attributes[break_positions[i]].wordEnd = true;
- attributes[break_positions[i]].lineBreak = true;
- }
- if (numbreaks > 0)
- attributes[break_positions[numbreaks - 1]].wordStart = false;
-
- if (break_positions != brp)
- free(break_positions);
+ attributes[0].wordBreak = true;
+ attributes[0].wordStart = true;
+ attributes[0].wordEnd = false;
+ numbreaks = libThai->brk_find_breaks(reinterpret_cast<const unsigned char *>(s.data()),
+ break_positions.data(),
+ static_cast<size_t>(break_positions.size()));
+ for (i = 0; i < numbreaks; ++i) {
+ attributes[break_positions[i]].wordBreak = true;
+ attributes[break_positions[i]].wordStart = true;
+ attributes[break_positions[i]].wordEnd = true;
+ attributes[break_positions[i]].lineBreak = true;
}
+ if (numbreaks > 0)
+ attributes[break_positions[numbreaks - 1]].wordStart = false;
/* manage grapheme boundaries */
i = 0;
while (i < len) {
- cell_length = (uint)(th_next_cell((const unsigned char *)cstr + i, len - i, &tis_cell, true));
+ size_t cell_length =
+ libThai->next_cell(reinterpret_cast<const unsigned char *>(s.data()) + i,
+ size_t(len - i), &tis_cell, true);
attributes[i].graphemeBoundary = true;
- for (j = 1; j < cell_length; j++)
+ for (size_t j = 1; j < cell_length; ++j)
attributes[i + j].graphemeBoundary = false;
- /* Set graphemeBoundary for SARA AM */
- if (cstr[i + cell_length - 1] == (char)0xd3)
- attributes[i + cell_length - 1].graphemeBoundary = true;
-
i += cell_length;
}
-
- if (len >= 128)
- free(cstr);
}
+#endif // QT_CONFIG(library)
+
static void thaiAttributes(QChar::Script script, const char16_t *text, qsizetype from, qsizetype len, QCharAttributes *attributes)
{
assert(script == QChar::Script_Thai);
+#if QT_CONFIG(library)
const char16_t *uc = text + from;
attributes += from;
Q_UNUSED(script);
thaiAssignAttributes(uc, len, attributes);
+#else
+ Q_UNUSED(script);
+ Q_UNUSED(text);
+ Q_UNUSED(from);
+ Q_UNUSED(len);
+ Q_UNUSED(attributes);
+#endif
}
/*
@@ -1552,7 +1731,6 @@ finish:
static void tibetanAttributes(QChar::Script script, const char16_t *text, qsizetype from, qsizetype len, QCharAttributes *attributes)
{
qsizetype end = from + len;
- const char16_t *uc = text + from;
qsizetype i = 0;
Q_UNUSED(script);
attributes += from;
@@ -1566,7 +1744,6 @@ static void tibetanAttributes(QChar::Script script, const char16_t *text, qsizet
i++;
while (i < boundary) {
attributes[i].graphemeBoundary = false;
- ++uc;
++i;
}
assert(i == boundary);
@@ -1617,6 +1794,8 @@ enum MymrCharClassFlags {
Mymr_CF_AFTER_KINZI = 0x00100000
};
+Q_DECLARE_MIXED_ENUM_OPERATORS(int, MymrCharClassValues, MymrCharClassFlags)
+
/* Characters that get refrered to by name */
enum MymrChar
{
@@ -1749,7 +1928,7 @@ static qsizetype myanmar_nextSyllableBoundary(const char16_t *s, qsizetype start
if (pos == start)
*invalid = (bool)(charClass & Mymr_CF_DOTTED_CIRCLE);
- MMDEBUG("state[%d]=%d class=%8x (uc=%4x)", int(pos - start), state, charClass, *uc);
+ MMDEBUG("state[%lld]=%d class=%8x (uc=%4x)", qlonglong(pos - start), state, charClass, *uc);
if (state < 0) {
if (state < -1)
@@ -1765,7 +1944,6 @@ static qsizetype myanmar_nextSyllableBoundary(const char16_t *s, qsizetype start
static void myanmarAttributes(QChar::Script script, const char16_t *text, qsizetype from, qsizetype len, QCharAttributes *attributes)
{
qsizetype end = from + len;
- const char16_t *uc = text + from;
qsizetype i = 0;
Q_UNUSED(script);
attributes += from;
@@ -1781,7 +1959,6 @@ static void myanmarAttributes(QChar::Script script, const char16_t *text, qsizet
i++;
while (i < boundary) {
attributes[i].graphemeBoundary = false;
- ++uc;
++i;
}
assert(i == boundary);
@@ -1864,6 +2041,7 @@ enum KhmerCharClassFlags {
CF_POS_MASK = 0x000f0000
};
+Q_DECLARE_MIXED_ENUM_OPERATORS(int, KhmerCharClassValues, KhmerCharClassFlags)
/* Characters that get referred to by name */
enum KhmerChar {
@@ -2085,7 +2263,7 @@ static qsizetype khmer_nextSyllableBoundary(const char16_t *s, qsizetype start,
}
state = khmerStateTable[state][charClass & CF_CLASS_MASK];
- KHDEBUG("state[%d]=%d class=%8lx (uc=%4x)", int(pos - start), state,
+ KHDEBUG("state[%lld]=%d class=%8lx (uc=%4x)", qlonglong(pos - start), state,
charClass, *uc );
if (state < 0) {
@@ -2100,7 +2278,6 @@ static qsizetype khmer_nextSyllableBoundary(const char16_t *s, qsizetype start,
static void khmerAttributes(QChar::Script script, const char16_t *text, qsizetype from, qsizetype len, QCharAttributes *attributes)
{
qsizetype end = from + len;
- const char16_t *uc = text + from;
qsizetype i = 0;
Q_UNUSED(script);
attributes += from;
@@ -2114,7 +2291,6 @@ static void khmerAttributes(QChar::Script script, const char16_t *text, qsizetyp
i++;
while ( i < boundary ) {
attributes[i].graphemeBoundary = false;
- ++uc;
++i;
}
assert( i == boundary );
diff --git a/src/corelib/text/qunicodetools_p.h b/src/corelib/text/qunicodetools_p.h
index cecb6defc7..06f31a5511 100644
--- a/src/corelib/text/qunicodetools_p.h
+++ b/src/corelib/text/qunicodetools_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QUNICODETOOLS_P_H
#define QUNICODETOOLS_P_H
diff --git a/src/corelib/text/qutf8stringview.h b/src/corelib/text/qutf8stringview.h
index ac42a3d73f..fe105e283e 100644
--- a/src/corelib/text/qutf8stringview.h
+++ b/src/corelib/text/qutf8stringview.h
@@ -1,55 +1,24 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QUTF8STRINGVIEW_H
#define QUTF8STRINGVIEW_H
+#if 0
+#pragma qt_class(QUtf8StringView)
+#endif
+
#include <QtCore/qstringalgorithms.h>
+#include <QtCore/qstringfwd.h>
#include <QtCore/qarraydata.h> // for QContainerImplHelper
+#include <QtCore/qbytearrayview.h>
+#include <QtCore/qcompare.h>
#include <string>
+#include <string_view>
+#include <QtCore/q20type_traits.h>
QT_BEGIN_NAMESPACE
-template <bool> class QBasicUtf8StringView;
-class QByteArray;
-class QLatin1String;
-
namespace QtPrivate {
template <typename Char>
using IsCompatibleChar8TypeHelper = std::disjunction<
@@ -62,7 +31,7 @@ using IsCompatibleChar8TypeHelper = std::disjunction<
>;
template <typename Char>
using IsCompatibleChar8Type
- = IsCompatibleChar8TypeHelper<std::remove_cv_t<std::remove_reference_t<Char>>>;
+ = IsCompatibleChar8TypeHelper<q20::remove_cvref_t<Char>>;
template <typename Pointer>
struct IsCompatiblePointer8Helper : std::false_type {};
@@ -71,7 +40,7 @@ struct IsCompatiblePointer8Helper<Char*>
: IsCompatibleChar8Type<Char> {};
template <typename Pointer>
using IsCompatiblePointer8
- = IsCompatiblePointer8Helper<std::remove_cv_t<std::remove_reference_t<Pointer>>>;
+ = IsCompatiblePointer8Helper<q20::remove_cvref_t<Pointer>>;
template <typename T, typename Enable = void>
struct IsContainerCompatibleWithQUtf8StringView : std::false_type {};
@@ -98,7 +67,7 @@ struct IsContainerCompatibleWithQUtf8StringView<T, std::enable_if_t<std::conjunc
std::negation<std::is_same<std::decay_t<T>, QByteArray>>,
// This has a compatible value_type, but explicitly a different encoding
- std::negation<std::is_same<std::decay_t<T>, QLatin1String>>,
+ std::negation<std::is_same<std::decay_t<T>, QLatin1StringView>>,
// Don't make an accidental copy constructor
std::negation<std::disjunction<
@@ -117,14 +86,22 @@ struct wrap_char { using type = char; };
} // namespace QtPrivate
+#ifdef Q_QDOC
+#define QBasicUtf8StringView QUtf8StringView
+#else
template <bool UseChar8T>
+#endif
class QBasicUtf8StringView
{
public:
+#ifndef Q_QDOC
using storage_type = typename std::conditional<UseChar8T,
QtPrivate::hide_char8_t,
QtPrivate::wrap_char
>::type::type;
+#else
+ using storage_type = typename QtPrivate::hide_char8_t;
+#endif
typedef const storage_type value_type;
typedef qptrdiff difference_type;
typedef qsizetype size_type;
@@ -188,7 +165,7 @@ public:
constexpr QBasicUtf8StringView(const Char *f, const Char *l)
: QBasicUtf8StringView(f, l - f) {}
-#ifdef Q_CLANG_QDOC
+#ifdef Q_QDOC
template <typename Char, size_t N>
constexpr QBasicUtf8StringView(const Char (&array)[N]) noexcept;
@@ -201,8 +178,9 @@ public:
str ? std::char_traits<std::remove_cv_t<std::remove_pointer_t<Pointer>>>::length(str) : 0) {}
#endif
-#ifdef Q_CLANG_QDOC
+#ifdef Q_QDOC
QBasicUtf8StringView(const QByteArray &str) noexcept;
+ constexpr QBasicUtf8StringView(const storage_type *d, qsizetype n) noexcept {};
#else
template <typename String, if_compatible_qstring_like<String> = true>
QBasicUtf8StringView(const String &str) noexcept
@@ -213,7 +191,7 @@ public:
constexpr QBasicUtf8StringView(const Container &c) noexcept
: QBasicUtf8StringView(std::data(c), lengthHelperContainer(c)) {}
-#ifdef __cpp_char8_t
+#if defined(__cpp_char8_t) && !defined(Q_QDOC)
constexpr QBasicUtf8StringView(QBasicUtf8StringView<!UseChar8T> other)
: QBasicUtf8StringView(other.data(), other.size()) {}
#endif
@@ -225,13 +203,13 @@ public:
[[nodiscard]] inline QString toString() const; // defined in qstring.h
[[nodiscard]] constexpr qsizetype size() const noexcept { return m_size; }
- [[nodiscard]] const_pointer data() const noexcept { return reinterpret_cast<const_pointer>(m_data); }
+ [[nodiscard]] constexpr const_pointer data() const noexcept { return m_data; }
#ifdef __cpp_char8_t
[[nodiscard]] const char8_t *utf8() const noexcept { return reinterpret_cast<const char8_t*>(m_data); }
#endif
[[nodiscard]] constexpr storage_type operator[](qsizetype n) const
- { return Q_ASSERT(n >= 0), Q_ASSERT(n < size()), m_data[n]; }
+ { verify(n, 1); return m_data[n]; }
//
// QString API
@@ -262,20 +240,25 @@ public:
}
[[nodiscard]] constexpr QBasicUtf8StringView sliced(qsizetype pos) const
- { verify(pos); return QBasicUtf8StringView{m_data + pos, m_size - pos}; }
+ { verify(pos, 0); return QBasicUtf8StringView{m_data + pos, m_size - pos}; }
[[nodiscard]] constexpr QBasicUtf8StringView sliced(qsizetype pos, qsizetype n) const
{ verify(pos, n); return QBasicUtf8StringView(m_data + pos, n); }
[[nodiscard]] constexpr QBasicUtf8StringView first(qsizetype n) const
- { verify(n); return QBasicUtf8StringView(m_data, n); }
+ { verify(0, n); return sliced(0, n); }
[[nodiscard]] constexpr QBasicUtf8StringView last(qsizetype n) const
- { verify(n); return QBasicUtf8StringView(m_data + m_size - n, n); }
+ { verify(0, n); return sliced(m_size - n, n); }
[[nodiscard]] constexpr QBasicUtf8StringView chopped(qsizetype n) const
- { verify(n); return QBasicUtf8StringView(m_data, m_size - n); }
+ { verify(0, n); return sliced(0, m_size - n); }
constexpr void truncate(qsizetype n)
- { verify(n); m_size = n; }
+ { verify(0, n); m_size = n; }
constexpr void chop(qsizetype n)
- { verify(n); m_size -= n; }
+ { verify(0, n); m_size -= n; }
+
+ [[nodiscard]] inline bool isValidUtf8() const noexcept
+ {
+ return QByteArrayView(reinterpret_cast<const char *>(data()), size()).isValidUtf8();
+ }
//
// STL compatibility API:
@@ -293,19 +276,134 @@ public:
[[nodiscard]] constexpr storage_type front() const { return Q_ASSERT(!empty()), m_data[0]; }
[[nodiscard]] constexpr storage_type back() const { return Q_ASSERT(!empty()), m_data[m_size - 1]; }
+ [[nodiscard]] Q_IMPLICIT operator std::basic_string_view<storage_type>() const noexcept
+ { return std::basic_string_view<storage_type>(data(), size_t(size())); }
+
//
// Qt compatibility API:
//
[[nodiscard]] constexpr bool isNull() const noexcept { return !m_data; }
[[nodiscard]] constexpr bool isEmpty() const noexcept { return empty(); }
-#if QT_DEPRECATED_SINCE(6, 0)
- [[nodiscard]]
- Q_DECL_DEPRECATED_X("Use size() and port callers to qsizetype.")
- constexpr int length() const /* not nothrow! */
- { return Q_ASSERT(int(size()) == size()), int(size()); }
-#endif
+ [[nodiscard]] constexpr qsizetype length() const noexcept
+ { return size(); }
+
+ [[nodiscard]] int compare(QBasicUtf8StringView other,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
+ {
+ return QtPrivate::compareStrings(*this, other, cs);
+ }
+
+ [[nodiscard]] int compare(QChar other,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] int compare(QStringView other,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] int compare(QLatin1StringView other,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+ [[nodiscard]] int compare(const QByteArray &other,
+ Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
+
+ [[nodiscard]] bool equal(QChar other) const noexcept;
+ [[nodiscard]] bool equal(QStringView other) const noexcept;
+ [[nodiscard]] bool equal(QLatin1StringView other) const noexcept;
+ [[nodiscard]] bool equal(const QByteArray &other) const noexcept;
+
private:
- Q_ALWAYS_INLINE constexpr void verify(qsizetype pos, qsizetype n = 0) const
+ [[nodiscard]] static inline int compare(QBasicUtf8StringView lhs, QBasicUtf8StringView rhs) noexcept
+ {
+ return QtPrivate::compareStrings(QBasicUtf8StringView<false>(lhs.data(), lhs.size()),
+ QBasicUtf8StringView<false>(rhs.data(), rhs.size()));
+ }
+
+ friend bool
+ comparesEqual(const QBasicUtf8StringView &lhs, const QBasicUtf8StringView &rhs) noexcept
+ {
+ return lhs.size() == rhs.size()
+ && QtPrivate::equalStrings(QBasicUtf8StringView<false>(lhs.data(), lhs.size()),
+ QBasicUtf8StringView<false>(rhs.data(), rhs.size()));
+ }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const QBasicUtf8StringView &rhs) noexcept
+ {
+ const int res = QBasicUtf8StringView::compare(lhs, rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView)
+
+ friend bool
+ comparesEqual(const QBasicUtf8StringView &lhs, const QLatin1StringView &rhs) noexcept
+ {
+ return lhs.equal(rhs);
+ }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const QLatin1StringView &rhs) noexcept
+ {
+ const int res = lhs.compare(rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, QLatin1StringView)
+
+ friend bool
+ comparesEqual(const QBasicUtf8StringView &lhs, const QStringView &rhs) noexcept
+ { return lhs.equal(rhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const QStringView &rhs) noexcept
+ {
+ const int res = lhs.compare(rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, QStringView)
+
+ friend bool comparesEqual(const QBasicUtf8StringView &lhs, const QChar &rhs) noexcept
+ { return lhs.equal(rhs); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const QChar &rhs) noexcept
+ {
+ const int res = lhs.compare(rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, QChar)
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, char16_t)
+
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ friend bool
+ comparesEqual(const QBasicUtf8StringView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ return lhs.size() == rhs.size()
+ && QtPrivate::equalStrings(QBasicUtf8StringView<false>(lhs.data(), lhs.size()),
+ QBasicUtf8StringView<false>(rhs.data(), rhs.size()));
+ }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ const int res = QtPrivate::compareStrings(QBasicUtf8StringView<false>(lhs.data(), lhs.size()),
+ QBasicUtf8StringView<false>(rhs.data(), rhs.size()));
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, QByteArrayView, QT_ASCII_CAST_WARN)
+
+ friend bool
+ comparesEqual(const QBasicUtf8StringView &lhs, const QByteArray &rhs) noexcept
+ {
+ return lhs.equal(rhs);
+ }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const QByteArray &rhs) noexcept
+ {
+ const int res = lhs.compare(rhs);
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, QByteArray, QT_ASCII_CAST_WARN)
+
+ friend bool comparesEqual(const QBasicUtf8StringView &lhs, const char *rhs) noexcept
+ { return comparesEqual(lhs, QByteArrayView(rhs)); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QBasicUtf8StringView &lhs, const char *rhs) noexcept
+ { return compareThreeWay(lhs, QByteArrayView(rhs)); }
+ Q_DECLARE_STRONGLY_ORDERED(QBasicUtf8StringView, const char *, QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+
+ Q_ALWAYS_INLINE constexpr void verify([[maybe_unused]] qsizetype pos = 0,
+ [[maybe_unused]] qsizetype n = 1) const
{
Q_ASSERT(pos >= 0);
Q_ASSERT(pos <= size());
@@ -315,20 +413,21 @@ private:
const storage_type *m_data;
qsizetype m_size;
};
-template <bool UseChar8T>
-Q_DECLARE_TYPEINFO_BODY(QBasicUtf8StringView<UseChar8T>, Q_PRIMITIVE_TYPE);
-QT_BEGIN_NO_CHAR8_T_NAMESPACE
-using QUtf8StringView = QBasicUtf8StringView<false>;
-QT_END_NO_CHAR8_T_NAMESPACE
+constexpr QByteArrayView::QByteArrayView(QUtf8StringView v) noexcept
+ : QByteArrayView(v.data(), v.size())
+{}
-QT_BEGIN_HAS_CHAR8_T_NAMESPACE
-using QUtf8StringView = QBasicUtf8StringView<true>;
-QT_END_HAS_CHAR8_T_NAMESPACE
+#ifdef Q_QDOC
+#undef QBasicUtf8StringView
+#else
+template <bool UseChar8T>
+Q_DECLARE_TYPEINFO_BODY(QBasicUtf8StringView<UseChar8T>, Q_PRIMITIVE_TYPE);
template <typename QStringLike, std::enable_if_t<std::is_same_v<QStringLike, QByteArray>, bool> = true>
[[nodiscard]] inline q_no_char8_t::QUtf8StringView qToUtf8StringViewIgnoringNull(const QStringLike &s) noexcept
-{ return q_no_char8_t::QUtf8StringView(s.data(), s.size()); }
+{ return q_no_char8_t::QUtf8StringView(s.begin(), s.size()); }
+#endif // Q_QDOC
QT_END_NAMESPACE
diff --git a/src/corelib/text/qutf8stringview.qdoc b/src/corelib/text/qutf8stringview.qdoc
index 031769440c..b433e5b995 100644
--- a/src/corelib/text/qutf8stringview.qdoc
+++ b/src/corelib/text/qutf8stringview.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QUtf8StringView
@@ -35,6 +11,14 @@
\ingroup tools
\ingroup string-processing
+ \compares strong
+ \compareswith strong char16_t QChar {const char16_t *} QString QStringView \
+ QLatin1StringView
+ \endcompareswith
+ \compareswith strong {const char *} QByteArray QByteArrayView
+ The contents of byte arrays is interpreted as utf-8.
+ \endcompareswith
+
A QUtf8StringView references a contiguous portion of a UTF-8
string it does not own. It acts as an interface type to all kinds
of UTF-8 string, without the need to construct a QString or
@@ -77,7 +61,7 @@
QUtf8StringView is a \e{Literal Type}.
- \section Compatible Character Types
+ \section2 Compatible Character Types
QUtf8StringView accepts strings over a variety of character types:
@@ -86,16 +70,16 @@
\li \c char8_t (C++20 only)
\endlist
- \section Sizes and Sub-Strings
+ \section2 Sizes and Sub-Strings
- All sizes and postions in QUtf8StringView functions are in
+ All sizes and positions in QUtf8StringView functions are in
UTF-8 code points (that is, UTF-8 multibyte sequences count as
two, three or four, depending on their length). QUtf8StringView
does not an attempt to detect or prevent slicing right through
UTF-8 multibyte sequences. This is similar to the situation with
QStringView and surrogate pairs.
- \section C++20, char8_t, and QUtf8StringView
+ \section2 C++20, char8_t, and QUtf8StringView
In C++20, \c{u8""} string literals changed their type from
\c{const char[]} to \c{const char8_t[]}. If Qt 6 could have depended
@@ -116,42 +100,14 @@
The second, in namespace \c{q_has_char8_t}, has a value_type of
\c{const char8_t} and is only available when compiling in C++20 mode.
- In C++17 mode, \c{q_no_char8_t} is an inline namespace, in C++20 it's
- \c{q_has_char8_t}. This means that the name "QUtf8StringView" (without
- explicit namespace) will denote different types in C++17 and C++20 modes.
+ \c{q_no_char8_t} is an inline namespace regardless of C++ edition, to avoid
+ accidental binary incompatibilities. To use the \c{char8_t} version, you
+ need to name it explicitly with \c{q_has_char8_t::QUtf8StringView}.
Internally, both are instantiations of the same template class,
QBasicUtf8StringView. Please do not use the template class's name in your
source code.
- All Qt APIs use \c{q_no_char8_t::QUtf8StringView} due to binary compatibility,
- but these APIs accept \c{q_has_char8_t::QUtf8StringView} as well, since the
- latter implicitly converts into the former, and vice versa.
-
- In your own code, please use only \c QUtf8StringView and/or
- \c{q_no_char8_t::QUtf8StringView}:
-
- \list
- \li If you only target C++20, then use "QUtf8StringView". It will be an alias
- for \c{q_has_char8_t::QUtf8StringView} and you'll never look back.
- \li If you only target C++17, then use "QUtf8StringView". It will be an alias
- for \c{q_no_char8_t::QUtf8StringView} and for the time being, you're ok.
- \li If you target both C++17 and C++20, then you have a choice to make:
- \list
- \li If you don't mind the source-incompatibility of return values of
- QUtf8StringView::data() etc changing when compiling under C++17 or C++20,
- use "QUtf8StringView". You will need to write your code in such a way that
- it adapts to the differences in the QUtf8StringView API in different C++
- versions.
- \li If you don't want to deal with the above source-incompatibilities, or if
- you need to maintain binary compatibility between C++20 and C++17 builds,
- use "q_no_char8_t::QUtf8StringView" explicitly. Be aware that the
- \c{q_no_char8_t} version will disappear in Qt 7.
- \endlist
- \endlist
-
- Taken together: Just use QUtf8StringView unless you know what you're doing.
-
\sa QAnyStringView, QUtf8StringView, QString
*/
@@ -256,6 +212,11 @@
*/
/*!
+ \fn QUtf8StringView::QUtf8StringView(const storage_type *d, qsizetype n)
+ \internal
+*/
+
+/*!
\fn QUtf8StringView::QUtf8StringView(std::nullptr_t)
Constructs a null string view.
@@ -264,7 +225,7 @@
*/
/*!
- \fn template <typename Char> QUtf8StringView::QUtf8StringView(const Char *str, qsizetype len)
+ \fn template <typename Char, QUtf8StringView::if_compatible_char<Char> = true> QUtf8StringView::QUtf8StringView(const Char *str, qsizetype len)
Constructs a string view on \a str with length \a len.
@@ -280,7 +241,7 @@
*/
/*!
- \fn template <typename Char> QUtf8StringView::QUtf8StringView(const Char *first, const Char *last)
+ \fn template <typename Char, QUtf8StringView::if_compatible_char<Char> = true> QUtf8StringView::QUtf8StringView(const Char *first, const Char *last)
Constructs a string view on \a first with length (\a last - \a first).
@@ -325,35 +286,35 @@
\a string must remain valid for the lifetime of this string view
object.
- This constructor only participates in overload resolution if \a str
+ This constructor only participates in overload resolution if \a string
is an actual array and if \c Char is a compatible character type. The
compatible character types are: \c char8_t, \c char, \c{signed char} and
\c{unsigned char}.
- \sa fromArray
+ \sa fromArray()
*/
/*!
- \fn template <typename StdBasicString> QUtf8StringView::QUtf8StringView(const StdBasicString &str)
+ \fn template <typename Container, QUtf8StringView::if_compatible_container<Container>> QUtf8StringView::QUtf8StringView(const Container &str)
- Constructs a string view on \a str. The length is taken from \c{str.size()}.
+ Constructs a string view on \a str. The length is taken from \c{std::size(str)}.
- \c{str.data()} must remain valid for the lifetime of this string view object.
+ \c{std::data(str)} must remain valid for the lifetime of this string view object.
- This constructor only participates in overload resolution if \c StdBasicString is an
- instantiation of \c std::basic_string with a compatible character type. The
+ This constructor only participates in overload resolution if \c Container is a
+ container with a compatible character type as \c{value_type}. The
compatible character types are: \c char8_t, \c char, \c{signed char} and
\c{unsigned char}.
- The string view will be empty if and only if \c{str.empty()}. It is unspecified
- whether this constructor can result in a null string view (\c{str.data()} would
+ The string view will be empty if and only if \c{std::size(str) == 0}. It is unspecified
+ whether this constructor can result in a null string view (\c{std::data(str)} would
have to return \nullptr for this).
\sa isNull(), isEmpty()
*/
/*!
- \fn template <typename Char, size_t Size> static QBasicUtf8StringView fromArray(const Char (&string)[Size])
+ \fn template <typename Char, size_t Size, QUtf8StringView::if_compatible_char<Char>> QUtf8StringView::fromArray(const Char (&string)[Size])
Constructs a string view on the full character string literal \a string,
including any trailing \c{Char(0)}. If you don't want the
@@ -381,7 +342,7 @@
/*!
\fn QUtf8StringView::data() const
- Returns a const pointer to the first code point in the string.
+ Returns a const pointer to the first code point in the string view.
\note The character array represented by the return value is \e not null-terminated.
@@ -391,7 +352,7 @@
/*!
\fn QUtf8StringView::utf8() const
- Returns a const pointer to the first code point in the string.
+ Returns a const pointer to the first code point in the string view.
The result is returned as a \c{const char8_t*}, so this function is only available when
compiling in C++20 mode.
@@ -405,7 +366,7 @@
\fn QUtf8StringView::const_iterator QUtf8StringView::begin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first code point in
- the string.
+ the string view.
This function is provided for STL compatibility.
@@ -446,7 +407,7 @@
\fn QUtf8StringView::const_reverse_iterator QUtf8StringView::rbegin() const
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
- code point in the string, in reverse order.
+ code point in the string view, in reverse order.
This function is provided for STL compatibility.
@@ -467,7 +428,7 @@
\fn QUtf8StringView::const_reverse_iterator QUtf8StringView::rend() const
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
- the last code point in the string, in reverse order.
+ the last code point in the string view, in reverse order.
This function is provided for STL compatibility.
@@ -525,18 +486,12 @@
*/
/*!
- \fn int QUtf8StringView::length() const
- \obsolete
- Use size() and port callers to qsizetype.
+ \fn QUtf8StringView::length() const
- Same as size(), except returns the result as an \c int.
+ Same as size().
This function is provided for compatibility with other Qt containers.
- \warning QUtf8StringView can represent strings with more than 2\sup{31} code points.
- Calling this function on a string view for which size() returns a value greater
- than \c{INT_MAX} constitutes undefined behavior.
-
\sa empty(), isEmpty(), isNull(), size()
*/
@@ -563,7 +518,7 @@
/*!
\fn QUtf8StringView::front() const
- Returns the first code point in the string. Same as first().
+ Returns the first code point in the string view. Same as first().
This function is provided for STL compatibility.
@@ -576,7 +531,7 @@
/*!
\fn QUtf8StringView::back() const
- Returns the last code point in the string. Same as last().
+ Returns the last code point in the string view. Same as last().
This function is provided for STL compatibility.
@@ -587,69 +542,69 @@
*/
/*!
- \fn QUtf8StringView::mid(qsizetype start, qsizetype length) const
+ \fn QUtf8StringView::mid(qsizetype pos, qsizetype n) const
- Returns the substring of length \a length starting at position
- \a start in this object.
+ Returns the substring of length \a n starting at position
+ \a pos in this object.
- \obsolete Use sliced() instead in new code.
+ \deprecated Use sliced() instead in new code.
- Returns an empty string view if \a start exceeds the
- length of the string. If there are less than \a length code points
- available in the string starting at \a start, or if
- \a length is negative (default), the function returns all code points that
- are available from \a start.
+ Returns an empty string view if \a n exceeds the
+ length of the string view. If there are less than \a n code points
+ available in the string view starting at \a pos, or if
+ \a n is negative (default), the function returns all code points that
+ are available from \a pos.
\sa first(), last(), sliced(), chopped(), chop(), truncate()
*/
/*!
- \fn QUtf8StringView::left(qsizetype length) const
+ \fn QUtf8StringView::left(qsizetype n) const
- \obsolete Use first() instead in new code.
+ \deprecated Use first() instead in new code.
- Returns the substring of length \a length starting at position
+ Returns the substring of length \a n starting at position
0 in this object.
- The entire string is returned if \a length is greater than or equal
+ The entire string view is returned if \a n is greater than or equal
to size(), or less than zero.
- \sa first(), last(), sliced(), startsWith(), chopped(), chop(), truncate()
+ \sa first(), last(), sliced(), chopped(), chop(), truncate()
*/
/*!
- \fn QUtf8StringView::right(qsizetype length) const
+ \fn QUtf8StringView::right(qsizetype n) const
- \obsolete Use last() instead in new code.
+ \deprecated Use last() instead in new code.
- Returns the substring of length \a length starting at position
- size() - \a length in this object.
+ Returns the substring of length \a n starting at position
+ size() - \a n in this object.
- The entire string is returned if \a length is greater than or equal
+ The entire string view is returned if \a n is greater than or equal
to size(), or less than zero.
- \sa first(), last(), sliced(), endsWith(), chopped(), chop(), truncate()
+ \sa first(), last(), sliced(), chopped(), chop(), truncate()
*/
/*!
\fn QUtf8StringView::first(qsizetype n) const
Returns a string view that contains the first \a n code points
- of this string.
+ of this string view.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa last(), sliced(), startsWith(), chopped(), chop(), truncate()
+ \sa last(), sliced(), chopped(), chop(), truncate()
*/
/*!
\fn QUtf8StringView::last(qsizetype n) const
- Returns a string view that contains the last \a n code points of this string.
+ Returns a string view that contains the last \a n code points of this string view.
\note The behavior is undefined when \a n < 0 or \a n > size().
- \sa first(), sliced(), endsWith(), chopped(), chop(), truncate()
+ \sa first(), sliced(), chopped(), chop(), truncate()
*/
/*!
@@ -658,8 +613,10 @@
Returns a string view containing \a n code points of this string view,
starting at position \a pos.
+//! [UB-sliced-index-length]
\note The behavior is undefined when \a pos < 0, \a n < 0,
or \a pos + \a n > size().
+//! [UB-sliced-index-length]
\sa first(), last(), chopped(), chop(), truncate()
*/
@@ -670,56 +627,71 @@
Returns a string view starting at position \a pos in this object,
and extending to its end.
+//! [UB-sliced-index-only]
\note The behavior is undefined when \a pos < 0 or \a pos > size().
+//! [UB-sliced-index-only]
\sa first(), last(), chopped(), chop(), truncate()
*/
/*!
- \fn QUtf8StringView::chopped(qsizetype length) const
+ \fn QUtf8StringView::chopped(qsizetype n) const
- Returns the substring of length size() - \a length starting at the
+ Returns the substring of length size() - \a n starting at the
beginning of this object.
- Same as \c{first(size() - length)}.
+ Same as \c{first(size() - n)}.
- \note The behavior is undefined when \a length < 0 or \a length > size().
+ \note The behavior is undefined when \a n < 0 or \a n > size().
\sa sliced(), first(), last(), chop(), truncate()
*/
/*!
- \fn QUtf8StringView::truncate(qsizetype length)
+ \fn QUtf8StringView::truncate(qsizetype n)
- Truncates this string view to \a length code points.
+ Truncates this string view to \a n code points.
- Same as \c{*this = first(length)}.
+ Same as \c{*this = first(n)}.
- \note The behavior is undefined when \a length < 0 or \a length > size().
+ \note The behavior is undefined when \a n < 0 or \a n > size().
\sa sliced(), first(), last(), chopped(), chop()
*/
/*!
- \fn QUtf8StringView::chop(qsizetype length)
+ \fn QUtf8StringView::chop(qsizetype n)
- Truncates this string view by \a length code points.
+ Truncates this string view by \a n code points.
- Same as \c{*this = first(size() - length)}.
+ Same as \c{*this = first(size() - n)}.
- \note The behavior is undefined when \a length < 0 or \a length > size().
+ \note The behavior is undefined when \a n < 0 or \a n > size().
\sa sliced(), first(), last(), chopped(), truncate()
*/
/*!
- \fn QUtf8StringView::trimmed() const
+ \fn int QUtf8StringView::compare(QLatin1StringView str, Qt::CaseSensitivity cs) const
+ \fn int QUtf8StringView::compare(QUtf8StringView str, Qt::CaseSensitivity cs) const
+ \fn int QUtf8StringView::compare(QStringView str, Qt::CaseSensitivity cs) const
+ \since 6.5
+
+ Compares this string view with \a str and returns a negative integer if
+ this string view is less than \a str, a positive integer if it is greater than
+ \a str, and zero if they are equal.
+
+ \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison}
+*/
+
+
+/*!
+ \fn QUtf8StringView::isValidUtf8() const
- Strips leading and trailing whitespace and returns the result.
+ Returns \c true if this string contains valid UTF-8 encoded data,
+ or \c false otherwise.
- Whitespace means any code point for which QChar::isSpace() returns
- \c true. This includes the ASCII characters '\\t', '\\n', '\\v',
- '\\f', '\\r', and ' '.
+ \since 6.3
*/
/*!
@@ -729,10 +701,20 @@
Convert \a s to a QUtf8StringView ignoring \c{s.isNull()}.
- Returns a string-view that references \a{s}'s data, but is never null.
+ Returns a string view that references \a{s}'s data, but is never null.
This is a faster way to convert a QByteArray to a QUtf8StringView,
if null QByteArrays can legitimately be treated as empty ones.
\sa QByteArray::isNull(), QUtf8StringView
*/
+
+
+/*! \fn QUtf8StringView::operator std::basic_string_view<storage_type>() const
+ \since 6.7
+
+ Converts this QUtf8StringView object to a
+ \c{std::basic_string_view} object. The returned view will have the
+ same data pointer and length of this view. The character type of
+ the returned view will be \c{storage_type}.
+*/
diff --git a/src/corelib/text/qvsnprintf.cpp b/src/corelib/text/qvsnprintf.cpp
index 43a21771a1..839fc24217 100644
--- a/src/corelib/text/qvsnprintf.cpp
+++ b/src/corelib/text/qvsnprintf.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qplatformdefs.h"
@@ -46,7 +10,7 @@
QT_BEGIN_NAMESPACE
-#if !defined(QT_VSNPRINTF) || defined(Q_CLANG_QDOC)
+#if !defined(QT_VSNPRINTF) || defined(Q_QDOC)
/*!
\relates QByteArray
diff --git a/src/corelib/text/text.pri b/src/corelib/text/text.pri
deleted file mode 100644
index 0704426f09..0000000000
--- a/src/corelib/text/text.pri
+++ /dev/null
@@ -1,90 +0,0 @@
-# Qt text / string / character / unicode / byte array module
-
-HEADERS += \
- text/qanystringview.h \
- text/qbytearray.h \
- text/qbytearray_p.h \
- text/qbytearrayalgorithms.h \
- text/qbytearraylist.h \
- text/qbytearraymatcher.h \
- text/qbytearrayview.h \
- text/qbytedata_p.h \
- text/qchar.h \
- text/qcollator.h \
- text/qcollator_p.h \
- text/qdoublescanprint_p.h \
- text/qlocale.h \
- text/qlocale_p.h \
- text/qlocale_tools_p.h \
- text/qlocale_data_p.h \
- text/qstring.h \
- text/qstringalgorithms.h \
- text/qstringalgorithms_p.h \
- text/qstringbuilder.h \
- text/qstringconverter.h \
- text/qstringconverter_p.h \
- text/qstringiterator_p.h \
- text/qstringlist.h \
- text/qstringliteral.h \
- text/qstringmatcher.h \
- text/qstringview.h \
- text/qstringtokenizer.h \
- text/qtextboundaryfinder.h \
- text/qunicodetables_p.h \
- text/qunicodetools_p.h \
- text/qutf8stringview.h
-
-SOURCES += \
- text/qbytearray.cpp \
- text/qbytearraylist.cpp \
- text/qbytearraymatcher.cpp \
- text/qcollator.cpp \
- text/qlocale.cpp \
- text/qlocale_tools.cpp \
- text/qstring.cpp \
- text/qstringbuilder.cpp \
- text/qstringconverter.cpp \
- text/qstringlist.cpp \
- text/qstringview.cpp \
- text/qstringtokenizer.cpp \
- text/qtextboundaryfinder.cpp \
- text/qunicodetools.cpp \
- text/qvsnprintf.cpp
-
-!nacl:darwin: {
- SOURCES += text/qlocale_mac.mm
-}
-else:unix {
- SOURCES += text/qlocale_unix.cpp
-}
-else:win32 {
- SOURCES += text/qlocale_win.cpp
-} else:integrity {
- SOURCES += text/qlocale_unix.cpp
-}
-
-qtConfig(icu) {
- QMAKE_USE_PRIVATE += icu
-
- SOURCES += text/qlocale_icu.cpp \
- text/qcollator_icu.cpp
-} else: win32 {
- SOURCES += text/qcollator_win.cpp
-} else: macos {
- SOURCES += text/qcollator_macx.cpp
-} else {
- SOURCES += text/qcollator_posix.cpp
-}
-
-qtConfig(regularexpression) {
- QMAKE_USE_PRIVATE += pcre2
-
- HEADERS += \
- text/qregularexpression.h
- SOURCES += text/qregularexpression.cpp
-}
-
-TR_EXCLUDE += ../3rdparty/*
-
-# MIPS DSP
-MIPS_DSP_ASM += text/qstring_mips_dsp_asm.S